00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <stdlib.h>
00032
00033 #include "fftypes.h"
00034 #include "ffstring.h"
00035 #include "ffword.h"
00036
00037 #include "ffpriv_ie_vowel_change.h"
00038
00039 #define IE_LIST_LEN 177
00040
00041 static ffchar* ie_list[IE_LIST_LEN][3] = {
00042 {"alpi", "alve", "alpe"},
00043 {"appi", "ape", "appe"},
00044 {"arki", "arje", "arke"},
00045 {"arpi", "arve", "arpe"},
00046 {"hanhi", "hanhe", "hanhe"},
00047 {"hanki", "hange", "hanke"},
00048 {"happi", "hape", "happe"},
00049 {"hauki", "haue", "hauke"},
00050 {"heisi", "heide", "heit"},
00051 {"helmi", "helme", "helme"},
00052 {"henki", "henge", "henke"},
00053 {"hetki", "hetke", "hetke"},
00054 {"hiili", "hiile", "hiil"},
00055 {"hiiri", "hiire", "hiir"},
00056 {"hiisi", "hiide", "hiit"},
00057 {"hiki", "hie", "hike"},
00058 {"hirsi", "hirre", "hirt"},
00059 {"hirvi", "hirve", "hirve"},
00060 {"huoli", "huole", "huol"},
00061 {"huuli", "huule", "huul"},
00062 {"joki", "joe", "joke"},
00063 {"jousi", "jouse", "jous"},
00064 {"juoni", "juone", "juon"},
00065 {"juuri", "juure", "juur"},
00066 {"jälki", "jälje", "jälke"},
00067 {"järki", "järje", "järke"},
00068 {"järvi", "järve", "järve"},
00069 {"kaali", "kaale", "kaal"},
00070 {"kaari", "kaare", "kaar"},
00071 {"kaihi", "kaihe", "kaihe"},
00072 {"kaikki", "kaike", "kaikke"},
00073 {"kaksi", "kahde", "kah"},
00074 {"kampi", "kamme", "kampe"},
00075 {"kanki", "kange", "kanke"},
00076 {"kansi", "kanne", "kant"},
00077 {"kaski", "kaske", "kaske"},
00078 {"kausi", "kaude", "kaut"},
00079 {"kieli", "kiele", "kiel"},
00080 {"kilpi", "kilve", "kilpe"},
00081 {"kivi", "kive", "kive"},
00082 {"koipi", "koive", "koipe"},
00083 {"korpi", "korve", "korpe"},
00084 {"korsi", "korre", "kort"},
00085 {"koski", "koske", "koske"},
00086 {"kuori", "kuore", "kuor"},
00087 {"kurki", "kurje", "kurke"},
00088 {"kusi", "kuse", "kus"},
00089 {"kuusi", "kuuse", "kuus"},
00090 {"kylki", "kylje", "kylke"},
00091 {"Kymi", "Kyme", "Kyme"},
00092 {"kynsi", "kynne", "kynt"},
00093 {"käki", "käe", "käke"},
00094 {"kärki", "kärje", "kärke"},
00095 {"käsi", "käde", "kät"},
00096 {"köysi", "köyde", "köyt"},
00097 {"lahti", "lahde", "lahte"},
00098 {"lampi", "lamme", "lampe"},
00099 {"lapsi", "lapse", "las"},
00100 {"lehti", "lehde", "lehte"},
00101 {"lempi", "lemme", "lempe"},
00102 {"leski", "leske", "leske"},
00103 {"liemi", "lieme", "lien"},
00104 {"liesi", "liede", "liet"},
00105 {"lohi", "lohe", "loh"},
00106 {"loimi", "loime", "loime"},
00107 {"lovi", "love", "love"},
00108 {"lumi", "lume", "lun"},
00109 {"luomi", "luome", "luome"},
00110 {"länki", "länge", "länke"},
00111 {"länsi", "länne", "länt"},
00112 {"meri", "mere", "mer"},
00113 {"mesi", "mede", "met"},
00114 {"mieli", "miele", "miel"},
00115 {"moni", "mone", "mon"},
00116 {"mäki", "mäe", "mäke"},
00117 {"niemi", "nieme", "nieme"},
00118 {"nimi", "nime", "nime"},
00119 {"noki", "noe", "noke"},
00120 {"nummi", "numme", "numme"},
00121 {"nuoli", "nuole", "nuol"},
00122 {"nuori", "nuore", "nuor"},
00123 {"nurmi", "nurme", "nurme"},
00124 {"närhi", "närhe", "närhe"},
00125 {"onki", "onge", "onke"},
00126 {"onni", "onne", "onne"},
00127 {"orsi", "orre", "ort"},
00128 {"ovi", "ove", "ove"},
00129 {"parsi", "parre", "part"},
00130 {"parvi", "parve", "parve"},
00131 {"peitsi", "peitse", "peitse"},
00132 {"pieli", "piele", "piel"},
00133 {"pieni", "piene", "pien"},
00134 {"piki", "pie", "pike"},
00135 {"pilvi", "pilve", "pilve"},
00136 {"polvi", "polve", "polve"},
00137 {"poski", "poske", "poske"},
00138 {"povi", "pove", "pove"},
00139 {"puoli", "puole", "puol"},
00140 {"pursi", "purre", "purt"},
00141 {"putki", "putke", "putke"},
00142 {"pälvi", "pälve", "pälve"},
00143 {"reki", "ree", "reke"},
00144 {"reisi", "reide", "reit"},
00145 {"retki", "retke", "retke"},
00146 {"riihi", "riihe", "riih"},
00147 {"ripsi", "ripse", "ripse"},
00148 {"rupi", "ruve", "rupe"},
00149 {"ruuhi", "ruuhe", "ruuh"},
00150 {"saari", "saare", "saar"},
00151 {"saarni", "saarne", "saarne"},
00152 {"saksi", "sakse", "sakse"},
00153 {"salmi", "salme", "salme"},
00154 {"sampi", "samme", "sampe"},
00155 {"sappi", "sape", "sappe"},
00156 {"sarvi", "sarve", "sarve"},
00157 {"savi", "save", "save"},
00158 {"seimi", "seime", "seime"},
00159 {"sieni", "siene", "sien"},
00160 {"siipi", "siive", "siipe"},
00161 {"sini", "sine", "sine"},
00162 {"solki", "solje", "solke"},
00163 {"soppi", "sope", "soppe"},
00164 {"sormi", "sorme", "sorme"},
00165 {"suksi", "sukse", "sukse"},
00166 {"suoli", "suole", "suol"},
00167 {"Suomi", "Suome", "Suome"},
00168 {"suomi", "suome", "suome"},
00169 {"suoni", "suone", "suon"},
00170 {"susi", "sude", "sut"},
00171 {"suuri", "suure", "suur"},
00172 {"suvi", "suve", "suve"},
00173 {"sylki", "sylje", "sylke"},
00174 {"sänki", "sänge", "sänke"},
00175 {"särki", "särje", "särke"},
00176 {"sääri", "sääre", "säär"},
00177 {"sääski", "sääske", "sääske"},
00178 {"taimi", "taime", "taime"},
00179 {"talvi", "talve", "talve"},
00180 {"tammi", "tamme", "tamme"},
00181 {"teeri", "teere", "teer"},
00182 {"telki", "telje", "telke"},
00183 {"tiili", "tiile", "tiil"},
00184 {"tilhi", "tilhe", "tilhe"},
00185 {"toimi", "toime", "toime"},
00186 {"tonki", "tonge", "tonke"},
00187 {"torvi", "torve", "torve"},
00188 {"tosi", "tode", "tot"},
00189 {"tuki", "tue", "tuke"},
00190 {"tuli", "tule", "tul"},
00191 {"tuohi", "tuohe", "tuoh"},
00192 {"tuomi", "tuome", "tuon"},
00193 {"tuppi", "tupe", "tuppe"},
00194 {"tuuli", "tuule", "tuul"},
00195 {"typpi", "type", "typpe"},
00196 {"tyvi", "tyve", "tyve"},
00197 {"tyyni", "tyyne", "tyyn"},
00198 {"tähti", "tähde", "tähte"},
00199 {"täysi", "täyde", "täyt"},
00200 {"uni", "une", "un"},
00201 {"uusi", "uude", "uut"},
00202 {"varsi", "varre", "vart"},
00203 {"veitsi", "veitse", "veis"},
00204 {"veli", "velje", "velje"},
00205 {"veri", "vere", "ver"},
00206 {"vesi", "vede", "vet"},
00207 {"vieri", "viere", "vier"},
00208 {"viiksi", "viikse", "viikse"},
00209 {"viisi", "viide", "viit"},
00210 {"virsi", "virre", "virt"},
00211 {"vuohi", "vuohe", "vuoh"},
00212 {"vuori", "vuore", "vuor"},
00213 {"vuosi", "vuode", "vuot"},
00214 {"vyyhti", "vyyhde", "vyyhte"},
00215 {"väki", "väe", "väke"},
00216 {"yksi", "yhde", "yh"},
00217 {"ääni", "ääne", "ään"},
00218 {"ääri", "ääre", "äär"}
00219 };
00220
00221 static ffint32 ffpriv_ie_list_get(ffword* word, ffint32 index) {
00222 ffint32 result = 0;
00223 int high, low, i;
00224
00225 for(high = IE_LIST_LEN -1, low = -1; high - low > 1; ) {
00226 i = (high + low) / 2;
00227 if(ffstring_compare(&word->data, ie_list[i][0]) < 1)
00228 high = i;
00229 else
00230 low = i;
00231 }
00232 if(ffstring_equals(&word->data, ie_list[high][0])) {
00233 if((result = ffstring_delete(&word->data)))
00234 return result;
00235 else if((result = ffstring_create(ie_list[high][index], &word->data)))
00236 return result;
00237 else
00238 return 1;
00239 } else
00240 return 0;
00241 }
00242
00243 ffint32 ffpriv_ie_genitive(ffword* word) {
00244 return ffpriv_ie_list_get(word, 1);
00245 }
00246
00247 ffint32 ffpriv_ie_partitive(ffword* word) {
00248 return ffpriv_ie_list_get(word, 2);
00249 }
00250