# Suomi-malaga, suomen kielen muoto-opin kuvaus.
#
# Tekijänoikeus © 2006-2013 Hannu Väisänen (Etunimi.Sukunimi@uef.fi)
#
# Tämä ohjelma on vapaa; tätä ohjelmaa on sallittu levittää
# edelleen ja muuttaa GNU yleisen lisenssin (GPL lisenssin)
# ehtojen mukaan sellaisina kuin Free Software Foundation
# on ne julkaissut; joko Lisenssin version 2, tai (valinnan
# mukaan) minkä tahansa myöhemmän version mukaisesti.
#
# Tätä ohjelmaa levitetään siinä toivossa, että se olisi
# hyödyllinen, mutta ilman mitään takuuta; ilman edes
# hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai
# soveltuvuudesta tiettyyn tarkoitukseen. Katso GPL
# lisenssistä lisää yksityiskohtia.
#
# Tämän ohjelman mukana pitäisi tulla kopio GPL
# lisenssistä; jos näin ei ole, kirjoita osoitteeseen Free
# Software Foundation Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# Tämän ohjeman linkittäminen staattisesti tai dynaamisesti
# muihin moduuleihin on ohjelmaan perustuvan teoksen
# tekemistä, joka on siis GPL lisenssin ehtojen alainen.
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
# Linking this program statically or dynamically with other modules is
# making a combined work based on this program.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.


# Tämä tiedosto on tehty ohjelmalla generoi.sh --- älä muuta!


include "suomi.inc";


allo_rule generate_allos ($tietue):
##  define $malli := switch (malli);  # Katso tiedosto suomi-*.pro.


##define $aa := transmit (<"a"> + <$tietue.perusmuoto> + <$tietue.alku> + <$tietue.äs>);
#if ($tietue.luokka = lukusana) then
#define $ö := transmit ("[perusmuoto: §" + $tietue.perusmuoto + "§" +
#                       ", alku: §"      + $tietue.alku + "§" +
#                       ", luokka: "     + value_string ($tietue.luokka) +
#                       ", jatko: "      + value_string ($tietue.jatko) +
#                       ", äs: "         + value_string ($tietue.äs) +
#                       "];");
#end;

  assert (value_type($tietue) = record);


  # Nämä sanat voivat olla myös erillisinä sanoina.
  #
  if (($tietue.tiedot /= nil) and (ysj in $tietue.tiedot) and
      (($tietue.perusmuoto /= nil) and
      (($tietue.perusmuoto = "vuotias") and ($tietue.luokka = nimi_laatusana)))) then
    $tietue.tiedot :=- <ysj>;
  end;

  if ($tietue.rakenne /= nil) then
    $tietue :=- rakenne;
  end;

  if ($tietue.luokka = lyhenne) then

    # Lyhenteitä, joissa on piste lopussa ei tarvita, mikäli on samanlainen pisteetön lyhenne.
    #
    if ($tietue.alku in <"em.", "kk.", "mm.", "s.", "ym.">) then
      stop;
    end;

    # Lyhennettä "MM" ei tarvita, koska "mm" on olemassa.
    #
    if (($tietue.alku = "MM") and (capital($tietue.alku) = yes)) then
      stop;
    end;

    # Poistetaan pisteet lyhenteitten lopusta.
    #
    if ($tietue.alku matches ".*" : $alku, "\\.") then
      $tietue.alku := $alku;
    end;
  end;


  # Tunnistetaan yhdyssanoina tai johdoksina.
  #
  if ($tietue.perusmuoto in <"amerikanjuutalainen", "amerikansuomalainen",
                             "Itämeri", "itävaltalainen", "kazakstanilainen",
                             "suomalais-permiläinen", "tongalainen">) then
    stop;
  end;

  # Paikannimien jälkiliitteet.
  #
  if ($tietue.perusmuoto in <"harju",
                             "joki", "järvi",
                             "kangas", "katu", "korpi", "kuja", "kylä",
                             "laakso", "lahti", "lampi",
                             "maa", "meri", "mäki", "niemi",
                             "polku", "puistikko", "puisto",
                             "ranta", "rinne", "saari", "sarvi", "selkä",
                             "tie", "torni", "vaara", "virta", "vuori">) then
    $tietue :=+ [paikannimen_jälkiliite: yes];
  end;

  # Etunimien jälkiliitteet.
  # Esim. Pietarinkirkko, Kallenpoika, Marianpäivä, Kallentytär.
  #
  if ($tietue.perusmuoto in <"kirkko", "poika", "päivä", "niemi", "silta", "tori", "tytär">) then
    $tietue :=+ [etunimen_jälkiliite: yes];
  end;

  if ($tietue.perusmuoto in <"ala", "bitti", "kallas", "malli", "pölyte", "terve">) then
    $tietue :=+ [tiedot: <ei_inen>];
  end;

  if ($tietue.perusmuoto in <"eosinofiili", "klooni">) then
    $tietue :=+ [tiedot: <ei_inen>];
  end;

  if ($tietue.perusmuoto in <"yhde">) then
    $tietue :=+ [tiedot: <ei_inen, ei_ys>];
  end;

  if ($tietue.perusmuoto in <"id", "nano", "älä"> and $tietue.luokka = nimisana) then
    $tietue :=+ [tiedot: <ei_ys>];
  end;

  if ($tietue.perusmuoto in <"kukkaisa", "laatuisa", "lari", "luisti", "mani", "miehinen",
                             "nasu", "paikko",
                             "poli", "tisu">) then
    if ($tietue.tiedot /= nil) then
      $tietue.tiedot :=+ <ei_ys>;
    else
      $tietue :=+ [tiedot: <ei_ys>];
    end;
  end;

  if (($tietue.perusmuoto in <"soida">) and ($tietue.tiedot /= nil) and (ei_ysj in $tietue.tiedot)) then
    $tietue.tiedot :=- <ei_ysj>;
    if ($tietue.tiedot = nil) then
      $tietue :=- tiedot;
    end;
  end;

  if ($tietue.perusmuoto in
        <"amme", "höyli", "kokkari", "koksi", "lehdes", "riksi", "silla", "säkä", "tavi">) then
    if ($tietue.tiedot /= nil) then
      $tietue.tiedot :=+ <ei_ysj>;
    else
      $tietue :=+ [tiedot: <ei_ysj>];
    end;
  end;

  if (($tietue.perusmuoto in <"erityinen", "vittu">) and
      ($tietue.luokka in <nimisana, laatusana, nimi_laatusana>)) then
    if ($tietue.tiedot /= nil) then
      $tietue.tiedot :=- <ei_ysa>;
    else
      $tietue :=- [tiedot: <ei_ysa>];
    end;
  end;

  if ($tietue.perusmuoto in <"alunen">) then
    if ($tietue.tiedot /= nil) then
      $tietue.tiedot :=+ <ei_ysa>;
    else
      $tietue :=+ [tiedot: <ei_ysa>];
    end;
  end;

  if ($tietue.perusmuoto in <"aktivisti", "fluoksetiini", "parametri",
                             "bentsodiatsepiini", "diatsepiini", "karbamatsepiini",
                             "lipofiili", "okskarbatsepiini", "triatsolobentsodiatsepiini">) then
    $tietue.äs := aä;
  end;

  # Mattila on paikannimi ja sukunimi, ja tiedostojen indeksoinnissa
  # riittää niistä vain toinen.
  #
  if ($tietue.perusmuoto = "Mattila" and $tietue.luokka = sukunimi) then
    stop;
  end;


  # Seitsen on myös etuliite, ja se riittää Sukijassa.
  #
  if ($tietue.perusmuoto = "seitsen" and $tietue.luokka = lukusana) then
    stop;
  end;


  # Kymmen on myös nimisana.
  #
  if ($tietue.perusmuoto = "kymmen" and $tietue.luokka = lukusana) then
    stop;
  end;

  if ($tietue.perusmuoto in <"nasta", "pöllö", "riiviö", "vilja">) then
    if ($tietue.luokka = nimisana) then
      stop;
    elseif ($tietue.luokka = laatusana) then
      $tietue.luokka := nimi_laatusana;
    end;
  end;

  if ($tietue.perusmuoto in <"parka">) then
    $tietue.luokka := nimisana;
  end;

  if ($tietue.luokka = lukusana) then
    if ($tietue.alaluokka in <toista>) then
      $tietue.jatko :=+ <yhdyssana, tavuviiva>;
    end;
    if ($tietue.alaluokka in <erikoisluku>) then
      $tietue.jatko :=+ <tavuviiva>;
    end;
  end;

  if ($tietue.luokka = etuliite) then
    $tietue.jatko := set ($tietue.jatko);
  end;

  if ($tietue.jatko = <rakentaa> and $tietue.perusmuoto matches ".*ääntää") then
    $tietue.jatko := <kääntää>;
  end;

  if ($tietue.perusmuoto in <"ihme", "kartesiolainen", "keynesiläinen">) then
    $tietue.luokka := nimi_laatusana;
  end;

  # Estetään eräitten -mainen-loppuisten sanojen tunnistuminen kahdesti.
  #
  if (($tietue.luokka in <paikannimi, sukunimi>) and
      ($tietue.perusmuoto in <"Kanerva", "Keihänen", "Kurikka", "Lanka", "Manner",
                              "Osta", "Pippuri", "Rautiainen", "Sormunen", "Tiainen">)) then
    $tietue.jatko :=- <johdin_mAinen>;
    if ($tietue.tiedot = nil) then
      $tietue :=+ [tiedot: <ei_mAinen>];
    else
      $tietue.tiedot :=+ <ei_mAinen>;
    end;
  end;


  if  ($tietue.perusmuoto in <"kääntää", "ojentaa", "rakentaa", "vääntää">) and
      ($tietue.tiedot = nil) then
    stop;
  end;

#  if ($tietue.luokka = lukusanan_jälkiliite) then
#    stop;
#  end;

  # Inen-loppuiset laatusanat.
#  if ($tietue.luokka in <laatusana, nimi_laatusana> and $tietue.perusmuoto matches ".*inen") then
#    $tietue :=+ [inen_loppu: yes];
#  end;

  if (($tietue.tiedot /= nil) and (ei_sukija in $tietue.tiedot)) then
    stop;

#####################################################################
##=================================================================##
#####################################################################

