latvian-grammar
Version:
Latvian grammar library
3 lines (2 loc) • 3.34 kB
JavaScript
const s=s=>e.includes(s),e="aAāĀeEēĒiIīĪoOōŌuUūŪ",i=s=>t.includes(s),t="bBcCčČdDfFgGģĢhHjJkKķĶlLļĻmMnNņŅpPrRŗŖsSšŠtTvVzZžŽ",n={masculine:"masculine",feminine:"feminine"},a=(s,e=n.masculine)=>{const i=s.substr(-1),t=s.substr(-2);if(e===n.masculine){if(c.includes(s))return u(2,"s",!0);if("ļaudis"===s)return u(6,"is",!0)}const a=e===n.masculine?l:r,m=a[t]?t:i;if(!a[m])throw Error("invalid word: "+s);return u(a[m],m)},u=(s,e,i=!1)=>({declensionCase:s,suffix:e,exception:i}),l={s:1,š:1,is:2,us:3,a:4,e:5},r={a:4,e:5,s:6},c=["mēness","akmens","asmens","ūdens","rudens","zibens","suns","sāls"],m=(s,{declensionCase:e,suffix:i})=>{const t=s.slice(0,-i.length);if(!o[e]||f[e].includes(s)||v[e].some(e=>s.endsWith(e)))return t;for(const[s,i]of d[e])if(t.endsWith(s))return`${t.slice(0,-s.length)}${i}`},o={2:{dz:"dž",sn:"šņ",zn:"žņ",sl:"šļ",zl:"žļ",ln:"ļņ",b:"bj",m:"mj",p:"pj",v:"vj",t:"š",d:"ž",c:"č",s:"š",z:"ž",n:"ņ",l:"ļ"},5:{sn:"šņ",zn:"žņ",dz:"dž",kst:"kp",b:"bj",m:"mj",p:"pj",v:"vj",c:"č",t:"š",d:"ž",s:"š",z:"ž",n:"ņ",l:"ļ"},6:{sn:"šņ",st:"š",v:"vj",t:"š",d:"ž",s:"š",z:"ž",n:"ņ",l:"ļ"}},d=Object.fromEntries(Object.entries(o).map(([s,e])=>[s,Object.entries(e)])),v={2:["astis","jis","ķis","ģis","ris","skatis"],5:["aste","fe","ģe","ķe","mate","pēde","ste"]},f={2:["tētis","viesis"],5:["apaļmute","apšaude","balamute","balle (mērvienība)","bāze","bise","bote","brīze","flote","fronte","gāze (vielas stāvoklis)","gide","kase","kušete","mise","mute","pase","piešaude","planšete","rase","sarakste","šprote","takse","tirāde"],6:["acs","aktis","ass","auss","balss","brokastis","Cēsis","dakts","debess","dzelzs","kūts","maksts","pirts","šalts","takts (mūzikā)","uts","uzacs","valsts","vēsts","zoss","žults"]};for(const s of Array.from({length:6},(s,e)=>e+1))v[s]||(v[s]=[]),f[s]||(f[s]=[]);const p=(s,e=n.masculine)=>{const i=a(s,e),{suffix:t,declensionCase:u}=i,l=s.slice(0,-t.length),r=m(s,i),c=(s,e,i)=>{let t=k[u].includes(`${s}-${e}`)?r:l;return"instrumental"===s&&(t="ar "+t),[s,`${t}${i}`]};return{declension:i,inflections:{plural:b(O[u],([s,e])=>c(s,"plural",e)),singular:b(g[u],([s,e])=>c(s,"singular",e))}}},b=(s,e)=>Object.fromEntries(Object.entries(s).map(e)),z=(s,e,i,t,n,a,u)=>({nominative:s,genitive:e,dative:i,accusative:t,instrumental:n,locative:a,vocative:u}),j=["nominative","genitive","dative","accusative","instrumental","locative","vocative"],k={2:["genitive-singular",...j.map(s=>s+"-plural")],5:["genitive-plural"],6:["genitive-plural"]};for(const s of Array.from({length:6},(s,e)=>e+1))k[s]||(k[s]=[]);const g={1:z("s","a","am","u","u","ā","s"),2:z("is","a","im","i","i","ī","i"),3:z("us","us","um","u","u","ū","us"),4:z("a","as","ai","u","u","ā","a"),5:z("e","es","ei","i","i","ē","e"),6:z("s","s","ij","i","i","ī","s")},h=z("i","u","iem","us","iem","os","i"),O={1:h,2:h,3:h,4:z("as","u","ām","as","ām","ās","as"),5:z("es","u","ēm","es","ēm","ēs","es"),6:z("is","u","īm","is","īm","īs","is")},$=e=>{const i=[...e].map(s);let t=i[0]?1:0;return i.reduce((s,e)=>(!s&&e&&(t+=1),e)),t};export{u as Declension,t as consonants,$ as countSyllables,a as decline,n as genders,p as inflect,j as inflections,i as isConsonant,s as isVowel,m as palatalize,e as vowels};
//# sourceMappingURL=latvian-grammar.modern.js.map