diff --git a/.nvmrc b/.nvmrc index 518633e..a77793e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/fermium +lts/hydrogen diff --git a/package.json b/package.json index ca6573f..1f99ec2 100755 --- a/package.json +++ b/package.json @@ -2,7 +2,9 @@ "name": "@interslavic/utils", "version": "0.0.0", "description": "Utilities for declension, conjugation, transliteration, etc.", + "type": "commonjs", "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ "dist", "src", @@ -45,7 +47,7 @@ "devDependencies": { "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", - "@types/jest": "^28.1.8", + "@types/jest": "^29.0.0", "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.168", "@typescript-eslint/eslint-plugin": "^5.59.8", diff --git a/scripts/generate-nj-suite.mjs b/scripts/generate-nj-suite.mjs new file mode 100755 index 0000000..80d804e --- /dev/null +++ b/scripts/generate-nj-suite.mjs @@ -0,0 +1,54 @@ +#!/usr/bin/env node + +import fs from 'node:fs'; +import utils from '../dist/index.js'; + +function* extractWords(str) { + // include letters and combining marks + const regex = /([\p{L}\p{M}]+)/gu; + let match; + + while ((match = regex.exec(str)) !== null) { + yield match[1]; + } +} + +function* extractWordsFromFile(filePath) { + const raw = fs.readFileSync(filePath, 'utf8'); + yield* extractWords(raw); +} + +function* allWords() { + yield* extractWordsFromFile('src/adjective/testCases.json'); + yield* extractWordsFromFile('src/noun/__snapshots__/declensionNoun.test.ts.snap'); + yield* extractWordsFromFile('src/numeral/testCases.json'); + yield* extractWordsFromFile('src/pronoun/testCases.json'); + yield* extractWordsFromFile('src/verb/testCases.json'); +} + +function endsWithNj(word) { + return word.endsWith('nja') + || word.endsWith('njah') + || word.endsWith('njam') + || word.endsWith('njami') + || word.endsWith('nje') + || word.endsWith('njem') + || word.endsWith('nju'); +} + +function buildExceptionList() { + const set = new Set(); + for (const word of allWords()) { + if (endsWithNj(word)) { + set.add(utils.transliterate(word.toLowerCase(), 'art-Latn-x-interslv')); + } + } + return [...set].sort(); +} + +function toTrieToken(word) { + return '%' + word.split('').reverse().join('') + '%'; +} + +console.log(buildExceptionList().map(toTrieToken).join(' ')); + diff --git a/src/transliterate/__snapshots__/index.test.ts.snap b/src/transliterate/__snapshots__/index.test.ts.snap index cb34bd6..67f1c46 100644 --- a/src/transliterate/__snapshots__/index.test.ts.snap +++ b/src/transliterate/__snapshots__/index.test.ts.snap @@ -4,294 +4,294 @@ exports[`transliterate to "art-Cyrl-x-interslv" a cyrillic text 1`] = ` "На возвышености овца, ктора не имєла волну, увидєла коњев. Првы тегал тежкы воз, вторы носил велико брєме, третји брзо возил мужа. Овца рєкла коњам: «Боли мнє срдце, когда виджу, како чловєк владаје коњами.» Коњи рєкли: «Слушај, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твоју волну, да бы имєл дља себе тепло палто. А овца јест без волны.» -Услышавши то, овца избєгла в равнину. | Одјезд. Тма." +Услышавши то, овца избєгла в равнину. | Одјезд. Тма, и корење ревења почели растенје." `; exports[`transliterate to "art-Cyrl-x-interslv" a latin text 1`] = ` "На возвышености овца, ктора не имєла волну, увидєла коњев. Првы тегал тежкы воз, вторы носил велико брєме, третји брзо возил мужа. Овца рєкла коњам: «Боли мнє срдце, когда виджу, како чловєк владаје коњами.» Коњи рєкли: «Слушај, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твоју волну, да бы имєл дља себе тепло палто. А овца јест без волны.» -Услышавши то, овца избєгла в равнину. | Одјезд. Тма." +Услышавши то, овца избєгла в равнину. | Одјезд. Тма, и корење ревења почели растенје." `; exports[`transliterate to "art-Cyrl-x-interslv-etym" a cyrillic text 1`] = ` "На возвышености овца, ктора не имѣла вълнѫ, увидѣла коњев. Првы тѧгал тѧжкы воз, вторы носил велико брѣмѧ, третји брзо возил мѫжа. Овца рѣкла коњам: «Боли мнѣ срдце, къгда виджу, како чловѣк владаје коњами.» Коњи рѣкли: «Слушај, овцо, нам боли срдце, къгда видимо ово: мѫж, господарь, бере твојѫ вълнѫ, да бы имѣл дља себе тепло пальто. А овца јесть без вълны.» -Услышавши то, овца избѣгла в рӑвнину. | Одјезд. Тьма." +Услышавши то, овца избѣгла в рӑвнину. | Одјезд. Тьма, и корење ревења почѧли рӑстеньје." `; exports[`transliterate to "art-Cyrl-x-interslv-etym" a latin text 1`] = ` "На възвышености овца, ктора не имѣла вълнѫ, увидѣла коњев. Првы тѧгал тѧжкы воз, вторы носил велико брѣмѧ, третји брзо возил мѫжа. Овца рѣкла коњам: «Боли мнѣ срдце, къгда виђѫ, како чловѣк владаје коњами.» Коњи рѣкли: «Слушај, овцо, нам боли срдце, къгда видимо ово: мѫж, господарь, бере твојѫ вълнѫ, да бы имѣл дља себе тепло пальто. А овца јест без вълны.» -Услышавши то, овца избѣгла в рӑвнинѫ. | Одјезд. Тьма." +Услышавши то, овца избѣгла в рӑвнинѫ. | Одјезд. Тьма, и корење ревења почѧли рӑстеньје." `; exports[`transliterate to "art-Cyrl-x-interslv-iotated" a cyrillic text 1`] = ` "На возвышености овца, ктора не имела волну, увидела коньев. Првы тегал тежкы воз, вторы носил велико бреме, третьи брзо возил мужа. Овца рекла коням: «Боли мне срдце, когда виджу, како чловек владае конями.» Коньи рекли: «Слушай, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твою волну, да бы имел для себе тепло палто. А овца ест без волны.» -Услышавши то, овца избегла в равнину. | Од’езд. Тма." +Услышавши то, овца избегла в равнину. | Од’езд. Тма, и коренье ревеня почели растенье." `; exports[`transliterate to "art-Cyrl-x-interslv-iotated" a latin text 1`] = ` "На возвышености овца, ктора не имела волну, увидела коньев. Првы тегал тежкы воз, вторы носил велико бреме, третьи брзо возил мужа. Овца рекла коням: «Боли мне срдце, когда виджу, како чловек владае конями.» Коньи рекли: «Слушай, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твою волну, да бы имел для себе тепло палто. А овца ест без волны.» -Услышавши то, овца избегла в равнину. | Од’езд. Тма." +Услышавши то, овца избегла в равнину. | Од’езд. Тма, и коренье ревеня почели растенье." `; exports[`transliterate to "art-Cyrl-x-interslv-iotated-ext" a cyrillic text 1`] = ` "На возвышености овца, ктора не имѣла вълнѫ, увидѣла конѥв. Пьрвы тѧгал тѧжкы воз, вторы носил велико брѣмѧ, третӥ бързо возил мѫжа. Овца рѣкла коням: «Боли мнѣ сьрдце, къгда виджу, како чловѣк владаѥ конями.» Конӥ рѣкли: «Слушай, овцо, нам боли сьрдце, къгда видимо ово: мѫж, господарь, бере твоѭ вълнѫ, да бы имѣл для себе тепло пальто. А овца ѥсть без вълны.» -Услышавши то, овца избѣгла в рӑвнину. | Од’ѥзд. Тьма." +Услышавши то, овца избѣгла в рӑвнину. | Од’ѥзд. Тьма, и коренѥ ревеня почѧли рӑстеньѥ." `; exports[`transliterate to "art-Cyrl-x-interslv-iotated-ext" a latin text 1`] = ` "На възвышености овца, ктора не имѣла вълнѫ, увидѣла конѥв. Пьрвы тѧгал тѧжкы воз, вторы носил велико брѣмѧ, третӥ бързо возил мѫжа. Овца рѣкла коням: «Боли мнѣ сьрдце, къгда виђѫ, како чловѣк владаѥ конями.» Конӥ рѣкли: «Слушай, овцо, нам боли сьрдце, къгда видимо ово: мѫж, господарь, бере твоѭ вълнѫ, да бы имѣл для себе тепло пальто. А овца ѥст без вълны.» -Услышавши то, овца избѣгла в рӑвнинѫ. | Од’ѥзд. Тьма." +Услышавши то, овца избѣгла в рӑвнинѫ. | Од’ѥзд. Тьма, и коренѥ ревеня почѧли рӑстеньѥ." `; exports[`transliterate to "art-Cyrl-x-interslv-northern" a cyrillic text 1`] = ` "На возвышености овца, ктора не имєла волну, увидєла коњев. Первы тјагал тјажки воз, вторы носил велико брємја, третји борзо возил мужа. Овца рєкла коњам: «Боли мнє сердце, когда виджу, како чловєк владаје коњами.» Коњи рєкли: «Слушај, овцо, нам боли сердце, когда видимо ово: муж, господарь, бере твоју волну, да бы имєл дља себе тепло пальто. А овца јесть без волны.» -Услышавши то, овца избєгла в ровнину. | Одјезд. Тьма." +Услышавши то, овца избєгла в ровнину. | Одјезд. Тьма, и корење ревења почали ростеньје." `; exports[`transliterate to "art-Cyrl-x-interslv-northern" a latin text 1`] = ` "На возвышености овца, ктора не имєла волну, увидєла коњев. Первы тјагал тјажки воз, вторы носил велико брємја, третји борзо возил мужа. Овца рєкла коњам: «Боли мнє сердце, когда виджу, како чловєк владаје коњами.» Коњи рєкли: «Слушај, овцо, нам боли сердце, когда видимо ово: муж, господарь, бере твоју волну, да бы имєл дља себе тепло пальто. А овца јест без волны.» -Услышавши то, овца избєгла в ровнину. | Одјезд. Тьма." +Услышавши то, овца избєгла в ровнину. | Одјезд. Тьма, и корење ревења почали ростеньје." `; exports[`transliterate to "art-Cyrl-x-interslv-sloviant" a cyrillic text 1`] = ` "На возвишености овца, ктора не имела волну, увидела коњев. Први тегал тежки воз, втори носил велико бреме, третји брзо возил мужа. Овца рекла коњам: «Боли мне срдце, когда виджу, како чловек владаје коњами.» Коњи рекли: «Слушај, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твоју волну, да би имел дља себе тепло палто. А овца јест без волни.» -Услишавши то, овца избегла в равнину. | Одјезд. Тма." +Услишавши то, овца избегла в равнину. | Одјезд. Тма, и корење ревења почели растенје." `; exports[`transliterate to "art-Cyrl-x-interslv-sloviant" a latin text 1`] = ` "На возвишености овца, ктора не имела волну, увидела коњев. Први тегал тежки воз, втори носил велико бреме, третји брзо возил мужа. Овца рекла коњам: «Боли мне срдце, когда виджу, како чловек владаје коњами.» Коњи рекли: «Слушај, овцо, нам боли срдце, когда видимо ово: муж, господар, бере твоју волну, да би имел дља себе тепло палто. А овца јест без волни.» -Услишавши то, овца избегла в равнину. | Одјезд. Тма." +Услишавши то, овца избегла в равнину. | Одјезд. Тма, и корење ревења почели растенје." `; exports[`transliterate to "art-Cyrl-x-interslv-southern" a cyrillic text 1`] = ` "На возвишености овца, ктора не имела вълну, увидела коњев. Први тегал тежки воз, втори носил велико бреме, третји брзо возил мужа. Овца рекла коњам: «Боли мне срдце, къгда виджу, како чловек владаје коњами.» Коњи рекли: «Слушај, овцо, нам боли срдце, къгда видимо ово: муж, господар, бере твоју вълну, да би имел дља себе тепло палто. А овца јест без вълни.» -Услишавши то, овца избегла в равнину. | Одјезд. Тма." +Услишавши то, овца избегла в равнину. | Одјезд. Тма, и корење ревења почели растење." `; exports[`transliterate to "art-Cyrl-x-interslv-southern" a latin text 1`] = ` "На възвишености овца, ктора не имела вълну, увидела коњев. Први тегал тежки воз, втори носил велико бреме, третји брзо возил мужа. Овца рекла коњам: «Боли мне срдце, къгда виђу, како чловек владаје коњами.» Коњи рекли: «Слушај, овцо, нам боли срдце, къгда видимо ово: муж, господар, бере твоју вълну, да би имел дља себе тепло палто. А овца јест без вълни.» -Услишавши то, овца избегла в равнину. | Одјезд. Тма." +Услишавши то, овца избегла в равнину. | Одјезд. Тма, и корење ревења почели растење." `; exports[`transliterate to "art-Glag-x-interslv" a cyrillic text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⱐⰹ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⱐⰹ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Glag-x-interslv" a latin text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⱐⰹ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⱐⰹ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Glag-x-interslv-etym" a cyrillic text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱏⰾⱀⱘ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⱐⰲⱐⰹ ⱅⱔⰳⰰⰾ ⱅⱔⰶⰽⱐⰹ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⱔ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱘⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⱃⱐⰴⱌⰵ, ⰽⱏⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⱐⰴⱌⰵ, ⰽⱏⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱘⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃⱐ, ⰱⰵⱃⰵ ⱅⰲⱁⱙ ⰲⱏⰾⱀⱘ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱐⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅⱐ ⰱⰵⰸ ⰲⱏⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱉⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱉⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⱔⰾⰻ ⱃⱉⱄⱅⰵⱀⱐⰵ." `; exports[`transliterate to "art-Glag-x-interslv-etym" a latin text 1`] = ` "Ⱀⰰ ⰲⱏⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱏⰾⱀⱘ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⱐⰲⱐⰹ ⱅⱔⰳⰰⰾ ⱅⱔⰶⰽⱐⰹ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⱔ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱘⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⱃⱐⰴⱌⰵ, ⰽⱏⰳⰴⰰ ⰲⰻⰼⱘ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⱐⰴⱌⰵ, ⰽⱏⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱘⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃⱐ, ⰱⰵⱃⰵ ⱅⰲⱁⱙ ⰲⱏⰾⱀⱘ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱐⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱏⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱉⰲⱀⰻⱀⱘ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱉⰲⱀⰻⱀⱘ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⱔⰾⰻ ⱃⱉⱄⱅⰵⱀⱐⰵ." `; exports[`transliterate to "art-Glag-x-interslv-northern" a cyrillic text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⰵⱃⰲⱐⰹ ⱅⱝⰳⰰⰾ ⱅⱝⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⱝ, ⱅⱃⰵⱅⰹⰻ ⰱⱁⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⰵⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⰵⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃⱐ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱐⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅⱐ ⰱⰵⰸ ⰲⱁⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱁⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱁⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰰⰾⰻ ⱃⱁⱄⱅⰵⱀⱐⰵ." `; exports[`transliterate to "art-Glag-x-interslv-northern" a latin text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⱐⰹⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⱑⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⱑⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⰵⱃⰲⱐⰹ ⱅⱝⰳⰰⰾ ⱅⱝⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⱐⰹ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⱑⱞⱝ, ⱅⱃⰵⱅⰹⰻ ⰱⱁⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⱑⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⱑ ⱄⰵⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⱑⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⱑⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⰵⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃⱐ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⱐⰹ ⰻⱞⱑⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱐⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⱐⰹ.» -Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱁⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ." +Ⱆⱄⰾⱐⰹⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⱑⰳⰾⰰ ⰲ ⱃⱁⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱐⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰰⰾⰻ ⱃⱁⱄⱅⰵⱀⱐⰵ." `; exports[`transliterate to "art-Glag-x-interslv-sloviant" a cyrillic text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⰻⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⰵⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⰵⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⰻ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⰻ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⰵⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⰵⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⰵ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⰵⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⰵⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⰻ ⰻⱞⰵⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⰻ.» -Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Glag-x-interslv-sloviant" a latin text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⰻⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⰵⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⰵⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⰻ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⰻ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⰵⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⰵⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⰵ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⰵⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⰵⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⰻ ⰻⱞⰵⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⰻ.» -Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Glag-x-interslv-southern" a cyrillic text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⰻⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⰵⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⰵⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⰻ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⰻ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⰵⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⰵⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⰵ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰶⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⰵⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⰵⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⰻ ⰻⱞⰵⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⰻ.» -Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Glag-x-interslv-southern" a latin text 1`] = ` "Ⱀⰰ ⰲⱁⰸⰲⰻⱎⰵⱀⱁⱄⱅⰻ ⱁⰲⱌⰰ, ⰽⱅⱁⱃⰰ ⱀⰵ ⰻⱞⰵⰾⰰ ⰲⱁⰾⱀⱆ, ⱆⰲⰻⰴⰵⰾⰰ ⰽⱁⱀⰹⰵⰲ. Ⱂⱃⰲⰻ ⱅⰵⰳⰰⰾ ⱅⰵⰶⰽⰻ ⰲⱁⰸ, ⰲⱅⱁⱃⰻ ⱀⱁⱄⰻⰾ ⰲⰵⰾⰻⰽⱁ ⰱⱃⰵⱞⰵ, ⱅⱃⰵⱅⰹⰻ ⰱⱃⰸⱁ ⰲⱁⰸⰻⰾ ⱞⱆⰶⰰ. Ⱁⰲⱌⰰ ⱃⰵⰽⰾⰰ ⰽⱁⱀⱝⱞ: «Ⰱⱁⰾⰻ ⱞⱀⰵ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰼⱆ, ⰽⰰⰽⱁ ⱍⰾⱁⰲⰵⰽ ⰲⰾⰰⰴⰰⰹⰵ ⰽⱁⱀⱝⱞⰻ.» Ⰽⱁⱀⰹⰻ ⱃⰵⰽⰾⰻ: «Ⱄⰾⱆⱎⰰⰹ, ⱁⰲⱌⱁ, ⱀⰰⱞ ⰱⱁⰾⰻ ⱄⱃⰴⱌⰵ, ⰽⱁⰳⰴⰰ ⰲⰻⰴⰻⱞⱁ ⱁⰲⱁ: ⱞⱆⰶ, ⰳⱁⱄⱂⱁⰴⰰⱃ, ⰱⰵⱃⰵ ⱅⰲⱁⱓ ⰲⱁⰾⱀⱆ, ⰴⰰ ⰱⰻ ⰻⱞⰵⰾ ⰴⰾⱝ ⱄⰵⰱⰵ ⱅⰵⱂⰾⱁ ⱂⰰⰾⱅⱁ. Ⰰ ⱁⰲⱌⰰ ⰹⰵⱄⱅ ⰱⰵⰸ ⰲⱁⰾⱀⰻ.» -Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ." +Ⱆⱄⰾⰻⱎⰰⰲⱎⰻ ⱅⱁ, ⱁⰲⱌⰰ ⰻⰸⰱⰵⰳⰾⰰ ⰲ ⱃⰰⰲⱀⰻⱀⱆ. | Ⱁⰴⱏⰹⰵⰸⰴ. Ⱅⱞⰰ, ⰻ ⰽⱁⱃⰵⱀⰹⰵ ⱃⰵⰲⰵⱀⱝ ⱂⱁⱍⰵⰾⰻ ⱃⰰⱄⱅⰵⱀⰹⰵ." `; exports[`transliterate to "art-Latn-PL-x-interslv" a cyrillic text 1`] = ` "Na wozwyszenosti owca, ktora ne imieła wołną, uwidieła koniew. Perwy tęgał tężki woz, wtory nosił weliko briemę, treti borzo woził mąża. Owca riekła koniam: «Boli mnie serdce, kogda widżu, kako człowiek władaje koniami.» Koni riekli: «Słuszaj, owco, nam boli serdce, kogda widimo owo: mąż, gospodaŕ, bere twoją wołną, da by imieł dla sebe tepło palto. A owca jesť bez wołny.» -Usłyszawszi to, owca izbiegła w rawninu. | Odjezd. Ťma." +Usłyszawszi to, owca izbiegła w rawninu. | Odjezd. Ťma, i korenie rewenia poczęli rasteńie." `; exports[`transliterate to "art-Latn-PL-x-interslv" a latin text 1`] = ` "Na wozwyszenosti owca, ktora ne imieła wołną, uwidieła koniew. Perwy tęgał tężki woz, wtory nosił weliko briemę, treti borzo woził mąża. Owca riekła koniam: «Boli mnie serdce, kogda widzią, kako człowiek władaje koniami.» Koni riekli: «Słuszaj, owco, nam boli serdce, kogda widimo owo: mąż, gospodaŕ, bere twoją wołną, da by imieł dla sebe tepło palto. A owca jest bez wołny.» -Usłyszawszi to, owca izbiegła w rawniną. | Odjezd. Ťma." +Usłyszawszi to, owca izbiegła w rawniną. | Odjezd. Ťma, i korenie rewenia poczęli rasteńie." `; exports[`transliterate to "art-Latn-x-interslv" a cyrillic text 1`] = ` "Na vozvyšenosti ovca, ktora ne iměla volnu, uviděla konjev. Prvy tegal težky voz, vtory nosil veliko brěme, tretji brzo vozil muža. Ovca rěkla konjam: «Boli mně srdce, kogda vidžu, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli srdce, kogda vidimo ovo: muž, gospodar, bere tvoju volnu, da by iměl dlja sebe teplo palto. A ovca jest bez volny.» -Uslyšavši to, ovca izběgla v ravninu. | Odjezd. Tma." +Uslyšavši to, ovca izběgla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv" a latin text 1`] = ` "Na vozvyšenosti ovca, ktora ne iměla volnu, uviděla konjev. Prvy tegal težky voz, vtory nosil veliko brěme, tretji brzo vozil muža. Ovca rěkla konjam: «Boli mně srdce, kogda vidžu, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli srdce, kogda vidimo ovo: muž, gospodar, bere tvoju volnu, da by iměl dlja sebe teplo palto. A ovca jest bez volny.» -Uslyšavši to, ovca izběgla v ravninu. | Odjezd. Tma." +Uslyšavši to, ovca izběgla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-ascii" a cyrillic text 1`] = ` "Na vozvyszenosti ovca, ktora ne imjela volnu, uvidjela konjev. Prvy tegal tezsky voz, vtory nosil veliko brjeme, tretji brzo vozil muzsa. Ovca rjekla konjam: «Boli mnje srdce, kogda vidzsu, kako czlovjek vladaje konjami.» Konji rjekli: «Sluszaj, ovco, nam boli srdce, kogda vidimo ovo: muzs, gospodar, bere tvoju volnu, da by imjel dlja sebe teplo palto. A ovca jest bez volny.» -Uslyszavszi to, ovca izbjegla v ravninu. | Odjezd. Tma." +Uslyszavszi to, ovca izbjegla v ravninu. | Odjezd. Tma, i korenje revenja poczeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-ascii" a latin text 1`] = ` "Na vozvyszenosti ovca, ktora ne imjela volnu, uvidjela konjev. Prvy tegal tezsky voz, vtory nosil veliko brjeme, tretji brzo vozil muzsa. Ovca rjekla konjam: «Boli mnje srdce, kogda vidzsu, kako czlovjek vladaje konjami.» Konji rjekli: «Sluszaj, ovco, nam boli srdce, kogda vidimo ovo: muzs, gospodar, bere tvoju volnu, da by imjel dlja sebe teplo palto. A ovca jest bez volny.» -Uslyszavszi to, ovca izbjegla v ravninu. | Odjezd. Tma." +Uslyszavszi to, ovca izbjegla v ravninu. | Odjezd. Tma, i korenje revenja poczeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-etym" a cyrillic text 1`] = ` "Na vozvyšenosti ovca, ktora ne iměla vȯlnų, uviděla konjev. Pŕvy tęgal tęžky voz, vtory nosil veliko brěmę, tretji brzo vozil mųža. Ovca rěkla konjam: «Boli mně sŕdce, kȯgda vidžu, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli sŕdce, kȯgda vidimo ovo: mųž, gospodaŕ, bere tvojų vȯlnų, da by iměl dlja sebe teplo paĺto. A ovca jest́ bez vȯlny.» -Uslyšavši to, ovca izběgla v råvninu. | Odjezd. T́ma." +Uslyšavši to, ovca izběgla v råvninu. | Odjezd. T́ma, i korenje revenja počęli råsteńje." `; exports[`transliterate to "art-Latn-x-interslv-etym" a latin text 1`] = ` "Na vȯzvyšenosti ovca, ktora ne iměla vȯlnų, uviděla konjev. Pŕvy tęgal tęžky voz, vtory nosil veliko brěmę, tretji brzo vozil mųža. Ovca rěkla konjam: «Boli mně sŕdce, kȯgda viđų, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli sŕdce, kȯgda vidimo ovo: mųž, gospodaŕ, bere tvojų vȯlnų, da by iměl dlja sebe teplo paĺto. A ovca jest bez vȯlny.» -Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma." +Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma, i korenje revenja počęli råsteńje." `; exports[`transliterate to "art-Latn-x-interslv-northern" a cyrillic text 1`] = ` "Na vozvyšenosti ovca, ktora ne imiela volnu, uvidiela koniev. Pervy tiagal tiažki voz, vtory nosil veliko briemia, tretii borzo vozil muža. Ovca riekla koniam: «Boli mnie serdce, kogda vidžu, kako človiek vladaje koniami.» Konii riekli: «Slušaj, ovco, nam boli serdce, kogda vidimo ovo: muž, gospodaŕ, bere tvoju volnu, da by imiel dlia sebe teplo paľto. A ovca jesť bez volny.» -Uslyšavši to, ovca izbiegla v rovninu. | Odjezd. Ťma." +Uslyšavši to, ovca izbiegla v rovninu. | Odjezd. Ťma, i korenie revenia počali rostenie." `; exports[`transliterate to "art-Latn-x-interslv-northern" a latin text 1`] = ` "Na vozvyšenosti ovca, ktora ne imiela volnu, uvidiela koniev. Pervy tiagal tiažki voz, vtory nosil veliko briemia, tretii borzo vozil muža. Ovca riekla koniam: «Boli mnie serdce, kogda vidžu, kako človiek vladaje koniami.» Konii riekli: «Slušaj, ovco, nam boli serdce, kogda vidimo ovo: muž, gospodaŕ, bere tvoju volnu, da by imiel dlia sebe teplo paľto. A ovca jest bez volny.» -Uslyšavši to, ovca izbiegla v rovninu. | Odjezd. Ťma." +Uslyšavši to, ovca izbiegla v rovninu. | Odjezd. Ťma, i korenie revenia počali rostenie." `; exports[`transliterate to "art-Latn-x-interslv-sloviant" a cyrillic text 1`] = ` "Na vozvišenosti ovca, ktora ne imela volnu, uvidela konjev. Prvi tegal težki voz, vtori nosil veliko breme, tretji brzo vozil muža. Ovca rekla konjam: «Boli mne srdce, kogda vidžu, kako človek vladaje konjami.» Konji rekli: «Slušaj, ovco, nam boli srdce, kogda vidimo ovo: muž, gospodar, bere tvoju volnu, da bi imel dlja sebe teplo palto. A ovca jest bez volni.» -Uslišavši to, ovca izbegla v ravninu. | Odjezd. Tma." +Uslišavši to, ovca izbegla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-sloviant" a latin text 1`] = ` "Na vozvišenosti ovca, ktora ne imela volnu, uvidela konjev. Prvi tegal težki voz, vtori nosil veliko breme, tretji brzo vozil muža. Ovca rekla konjam: «Boli mne srdce, kogda vidžu, kako človek vladaje konjami.» Konji rekli: «Slušaj, ovco, nam boli srdce, kogda vidimo ovo: muž, gospodar, bere tvoju volnu, da bi imel dlja sebe teplo palto. A ovca jest bez volni.» -Uslišavši to, ovca izbegla v ravninu. | Odjezd. Tma." +Uslišavši to, ovca izbegla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-southern" a cyrillic text 1`] = ` "Na vozvišenosti ovca, ktora ne iměla vălnu, uviděla konjev. Prvi tegal težki voz, vtori nosil veliko brěme, tretji brzo vozil muža. Ovca rěkla konjam: «Boli mně srdce, kăgda vidžu, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli srdce, kăgda vidimo ovo: muž, gospodar, bere tvoju vălnu, da bi iměl dlja sebe teplo palto. A ovca jest bez vălni.» -Uslišavši to, ovca izběgla v ravninu. | Odjezd. Tma." +Uslišavši to, ovca izběgla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-Latn-x-interslv-southern" a latin text 1`] = ` "Na văzvišenosti ovca, ktora ne iměla vălnu, uviděla konjev. Prvi tegal težki voz, vtori nosil veliko brěme, tretji brzo vozil muža. Ovca rěkla konjam: «Boli mně srdce, kăgda viđu, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli srdce, kăgda vidimo ovo: muž, gospodar, bere tvoju vălnu, da bi iměl dlja sebe teplo palto. A ovca jest bez vălni.» -Uslišavši to, ovca izběgla v ravninu. | Odjezd. Tma." +Uslišavši to, ovca izběgla v ravninu. | Odjezd. Tma, i korenje revenja počeli rastenje." `; exports[`transliterate to "art-x-interslv" a cyrillic text 1`] = ` "На возвышености овца, ктора не имѣла вълнѫ, увидѣла коњев. Прьвы тѧгал тѧжкы воз, вторы носил велико брємѧ, третји брзо возил мѫжа. Овца рѣкла коням: «Боли мнє срьдце, къгда виџу, како чловѣк владаје коньами.» Конји рѣкли: «Слушай, овцо, нам боли срьдце, къгда видимо ово: мѫж, господарь, бере твоѭ вълнѫ, да бы имѣл дља себе тепло пальто. А овца ѥсть без вълны.» -Услышавши то, овца избѣгла в рӑвнинѹ. | Одјезд. Тьма." +Услышавши то, овца избѣгла в рӑвнинѹ. | Одјезд. Тьма, и корење ревења почѧли рӑстеньје." `; exports[`transliterate to "art-x-interslv" a latin text 1`] = ` "Na vȯzvyšenosti ovca, ktora ne iměla vȯlnų, uviděla konjev. Pŕvy tęgal tęžky voz, vtory nosil veliko brěmę, tretji brzo vozil mųža. Ovca rěkla konjam: «Boli mně sŕdce, kȯgda viđų, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli sŕdce, kȯgda vidimo ovo: mųž, gospodaŕ, bere tvojų vȯlnų, da by iměl dlja sebe teplo paĺto. A ovca jest bez vȯlny.» -Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma." +Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma, i korenje revenja počęli råsteńje." `; exports[`transliterate to "art-x-interslv-fonipa" a cyrillic text 1`] = ` "na vɔzvɪʃɛnɔsti ɔvt͡sa, ktɔra nɛ imjɛɫa vəɫnʊ, uvidʲɛɫa kɔɲɛv. pjǝrvɪ tʲægaɫ tʲæʒkɪ vɔz, vtɔrɪ nɔsiɫ vɛlikɔ brʲɛmjæ, trɛtji bərzɔ vɔziɫ mʊʒa. ɔvt͡sa rʲɛkɫa kɔɲam: «bɔli mɲɛ sʲǝrdt͡sɛ, kəgda vid͡ʒu, kakɔ t͡ʃɫɔvjɛk vɫadajɛ kɔɲami.» kɔɲi rʲɛkli: «sɫuʃaj, ɔvt͡sɔ, nam bɔli sʲǝrdt͡sɛ, kəgda vidimɔ ɔvɔ: mʊʒ, gɔspɔdarʲ, bɛrɛ tvɔjʊ vəɫnʊ, da bɪ imjɛɫ dʎa sɛbɛ tɛpɫɔ paʎtɔ. a ɔvt͡sa jɛsʲtʲ bɛz vəɫnɪ.» -usɫɪʃavʃi tɔ, ɔvt͡sa izbjɛgɫa v rɒvninu. | ɔdjɛzd. tʲma." +usɫɪʃavʃi tɔ, ɔvt͡sa izbjɛgɫa v rɒvninu. | ɔdjɛzd. tʲma, i kɔrɛɲɛ rɛvɛɲa pɔt͡ʃæli rɒstɛɲi̯ɛ." `; exports[`transliterate to "art-x-interslv-fonipa" a latin text 1`] = ` "na vəzvɪʃɛnɔsti ɔvt͡sa, ktɔra nɛ imjɛɫa vəɫnʊ, uvidʲɛɫa kɔɲɛv. pjǝrvɪ tʲægaɫ tʲæʒkɪ vɔz, vtɔrɪ nɔsiɫ vɛlikɔ brʲɛmjæ, trɛtji bərzɔ vɔziɫ mʊʒa. ɔvt͡sa rʲɛkɫa kɔɲam: «bɔli mɲɛ sʲǝrdt͡sɛ, kəgda vid͡ʑʊ, kakɔ t͡ʃɫɔvjɛk vɫadajɛ kɔɲami.» kɔɲi rʲɛkli: «sɫuʃaj, ɔvt͡sɔ, nam bɔli sʲǝrdt͡sɛ, kəgda vidimɔ ɔvɔ: mʊʒ, gɔspɔdarʲ, bɛrɛ tvɔjʊ vəɫnʊ, da bɪ imjɛɫ dʎa sɛbɛ tɛpɫɔ paʎtɔ. a ɔvt͡sa jɛst bɛz vəɫnɪ.» -usɫɪʃavʃi tɔ, ɔvt͡sa izbjɛgɫa v rɒvninʊ. | ɔdjɛzd. tʲma." +usɫɪʃavʃi tɔ, ɔvt͡sa izbjɛgɫa v rɒvninʊ. | ɔdjɛzd. tʲma, i kɔrɛɲɛ rɛvɛɲa pɔt͡ʃæli rɒstɛɲi̯ɛ." `; exports[`transliterate to unknown code 1`] = `"Unsupported IETF BCP47 tag: en"`; diff --git a/src/transliterate/index.test.ts b/src/transliterate/index.test.ts index 8a67982..53a6725 100644 --- a/src/transliterate/index.test.ts +++ b/src/transliterate/index.test.ts @@ -4,13 +4,13 @@ const latin = `\ Na vȯzvyšenosti ovca, ktora ne iměla vȯlnų, uviděla konjev. Pŕvy tęgal tęžky voz, vtory nosil veliko brěmę, tretji brzo vozil mųža. Ovca rěkla konjam: «Boli mně sŕdce, kȯgda viđų, kako člověk vladaje konjami.» Konji rěkli: «Slušaj, ovco, nam boli sŕdce, kȯgda vidimo ovo: mųž, gospodaŕ, bere tvojų vȯlnų, da by iměl dlja sebe teplo paĺto. A ovca jest bez vȯlny.» -Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma.`; +Uslyšavši to, ovca izběgla v råvninų. | Odjezd. T́ma, i korenje revenja počęli råsteńje.`; const cyrillic = `\ На возвышености овца, ктора не имѣла вълнѫ, увидѣла коњев. Прьвы тѧгал тѧжкы воз, вторы носил велико брємѧ, третји брзо возил мѫжа. Овца рѣкла коням: «Боли мнє срьдце, къгда виџу, како чловѣк владаје коньами.» Конји рѣкли: «Слушай, овцо, нам боли срьдце, къгда видимо ово: мѫж, господарь, бере твоѭ вълнѫ, да бы имѣл дља себе тепло пальто. А овца ѥсть без вълны.» -Услышавши то, овца избѣгла в рӑвнинѹ. | Одјезд. Тьма.`; +Услышавши то, овца избѣгла в рӑвнинѹ. | Одјезд. Тьма, и корење ревења почѧли рӑстеньје.`; describe('transliterate to', () => { describe.each([ diff --git a/src/transliterate/nje/Dict.ts b/src/transliterate/nje/Dict.ts new file mode 100644 index 0000000..7ada580 --- /dev/null +++ b/src/transliterate/nje/Dict.ts @@ -0,0 +1,3 @@ +export interface Dict { + [key: string]: Dict | number; +} diff --git a/src/transliterate/nje/exceptions.ts b/src/transliterate/nje/exceptions.ts new file mode 100644 index 0000000..c9c7fff --- /dev/null +++ b/src/transliterate/nje/exceptions.ts @@ -0,0 +1,1544 @@ +import type { Dict } from './Dict'; + +export default { + '%': { + a: { + j: { + n: { + a: { + b: { '%': 0, o: { l: { '%': 0 } } }, + g: { + a: { n: { '%': 0 } }, + o: { d: { '%': 0 }, r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + j: { + i: { t: { s: { i: { r: { h: { o: { p: { '%': 0 } } } } } } } }, + }, + k: { '%': 0 }, + l: { + k: { + '%': 0, + a: { n: { '%': 0 } }, + d: { o: { '%': 0 } }, + s: { '%': 0 }, + }, + s: { a: { z: { '%': 0 } }, d: { o: { '%': 0 } } }, + }, + n: { z: { o: { '%': 0 } } }, + r: { + '%': 0, + b: { + a: { z: { '%': 0 } }, + o: { '%': 0 }, + z: { o: { v: { '%': 0 } } }, + }, + e: { g: { '%': 0 } }, + h: { o: { '%': 0 }, s: { '%': 0 } }, + t: { + s: { + d: { o: { '%': 0 } }, + o: { r: { p: { z: { a: { r: { '%': 0 } } } } } }, + }, + }, + }, + t: { s: { i: { r: { p: { '%': 0 } } } } }, + }, + b: { + a: { d: { o: { p: { u: { '%': 0 } } } } }, + o: { s: { o: { d: { o: { '%': 0 } } } } }, + }, + d: { + '%': 0, + a: { + v: { + b: { o: { '%': 0 } }, + d: { o: { '%': 0 } }, + u: { '%': 0 }, + }, + z: { '%': 0 }, + }, + e: { s: { v: { o: { p: { '%': 0 } } } } }, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + o: { + r: { a: { n: { u: { '%': 0 } } } }, + v: { a: { n: { '%': 0 } } }, + }, + u: { + r: { t: { o: { '%': 0 }, u: { '%': 0 } } }, + t: { s: { '%': 0 } }, + }, + y: { t: { '%': 0 } }, + z: { + a: { r: { p: { o: { '%': 0 }, z: { i: { '%': 0 } } } } }, + o: { p: { o: { '%': 0 }, s: { '%': 0 } } }, + }, + ě: { + l: { + s: { + o: { + p: { + '%': 0, + d: { ě: { r: { p: { '%': 0 } } } }, + }, + }, + }, + }, + r: { + p: { '%': 0, o: { p: { '%': 0 } } }, + s: { + '%': 0, + o: { + p: { + '%': 0, + e: { n: { '%': 0 } }, + z: { e: { b: { '%': 0 } } }, + }, + }, + }, + }, + }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + j: { u: { r: { '%': 0 } } }, + l: { + e: { j: { '%': 0 }, z: { o: { '%': 0 } } }, + u: { j: { t: { '%': 0 } } }, + č: { v: { '%': 0 } }, + }, + m: { + '%': 0, + a: { k: { '%': 0, o: { '%': 0 } }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + u: { g: { i: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + ě: { r: { b: { o: { '%': 0 } } } }, + }, + p: { i: { l: { '%': 0 } }, r: { s: { '%': 0 } } }, + r: { + o: { + k: { '%': 0, z: { i: { '%': 0 } } }, + v: { s: { '%': 0 } }, + }, + t: { u: { j: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { r: { v: { '%': 0 } } } }, + t: { + s: { r: { p: { '%': 0 } } }, + u: { r: { t: { '%': 0 } } }, + ě: { v: { c: { '%': 0 } } }, + }, + v: { + a: { r: { t: { '%': 0 } } }, + e: { r: { '%': 0 } }, + r: { č: { '%': 0, a: { z: { '%': 0 } } } }, + }, + z: { + e: { l: { g: { '%': 0 } }, v: { '%': 0 } }, + ě: { r: { b: { '%': 0 } } }, + }, + č: { y: { t: { s: { '%': 0 } } }, ě: { s: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } } }, + ž: { + o: { l: { s: { o: { '%': 0 } } } }, + ě: { n: { s: { '%': 0 } } }, + }, + }, + g: { o: { '%': 0 } }, + h: { r: { v: { o: { p: { '%': 0 } } } }, u: { k: { '%': 0 } } }, + i: { + '%': 0, + d: { + e: { + j: { + b: { o: { '%': 0 } }, + s: { '%': 0, i: { r: { p: { '%': 0 } } } }, + u: { '%': 0 }, + z: { a: { r: { '%': 0 } } }, + }, + }, + }, + l: { '%': 0, b: { o: { '%': 0 } } }, + r: { k: { s: { '%': 0 } } }, + s: { '%': 0 }, + v: { + b: { o: { '%': 0 } }, + e: { n: { u: { '%': 0 } } }, + s: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + č: { + d: { o: { '%': 0 } }, + i: { r: { p: { '%': 0 } } }, + u: { k: { e: { t: { u: { '%': 0 } } } } }, + }, + }, + j: { + l: { + a: { + d: { '%': 0 }, + k: { e: { č: { '%': 0 } } }, + p: { + o: { k: { '%': 0 } }, + s: { '%': 0 }, + u: { k: { '%': 0 } }, + }, + t: { i: { č: { '%': 0 } } }, + v: { + o: { k: { '%': 0, a: { n: { '%': 0 } } } }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + i: { + d: { ě: { s: { '%': 0 } } }, + j: { a: { č: { '%': 0 } } }, + t: { s: { o: { g: { '%': 0 } } } }, + č: { + u: { + j: { l: { k: { a: { z: { '%': 0 } } } } }, + m: { '%': 0 }, + }, + ě: { l: { '%': 0 } }, + }, + ž: { o: { l: { a: { z: { '%': 0 } } } } }, + }, + }, + o: { b: { o: { t: { o: { k: { s: { '%': 0 } } } } } } }, + }, + k: { u: { s: { '%': 0 } } }, + l: { + o: { + m: { '%': 0 }, + p: { + a: { z: { '%': 0 } }, + o: { d: { '%': 0 } }, + z: { i: { '%': 0 } }, + }, + }, + }, + m: { e: { t: { a: { z: { '%': 0 } } } } }, + n: { + e: { + m: { ě: { r: { v: { o: { s: { o: { '%': 0 } } } } } } }, + s: { e: { j: { '%': 0 } } }, + }, + }, + o: { k: { '%': 0 }, r: { b: { '%': 0 } }, v: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + r: { + a: { + g: { i: { n: { k: { '%': 0 } } } }, + k: { e: { p: { '%': 0 } }, o: { p: { u: { '%': 0 } } } }, + p: { + d: { + o: { + e: { j: { n: { g: { o: { b: { o: { '%': 0 } } } } } } }, + }, + }, + }, + s: { e: { m: { '%': 0 } } }, + v: { a: { k: { '%': 0 } }, o: { v: { i: { p: { '%': 0 } } } } }, + č: { v: { o: { '%': 0 } } }, + }, + v: { k: { s: { o: { '%': 0 } } } }, + č: { o: { '%': 0 } }, + }, + s: { + a: { + j: { + b: { o: { '%': 0 } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + }, + e: { l: { ě: { t: { u: { '%': 0 } } } } }, + ě: { b: { z: { a: { r: { '%': 0 } } } }, p: { '%': 0 } }, + }, + t: { + o: { s: { '%': 0 } }, + s: { + a: { + l: { + v: { + i: { r: { p: { '%': 0 } } }, + z: { i: { '%': 0 } }, + }, + }, + }, + }, + u: { j: { l: { '%': 0 } } }, + ě: { l: { '%': 0 } }, + }, + u: { k: { i: { v: { '%': 0 } }, o: { '%': 0 } } }, + v: { + a: { + l: { g: { '%': 0 } }, + r: { + p: { o: { '%': 0 } }, + s: { '%': 0 }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + y: { l: { p: { v: { o: { '%': 0 } } } } }, + ě: { l: { p: { '%': 0 } } }, + }, + y: { + b: { a: { r: { '%': 0 } } }, + d: { '%': 0, o: { p: { s: { o: { g: { '%': 0 } } } } } }, + g: { e: { n: { k: { '%': 0 } } } }, + h: { a: { n: { o: { m: { '%': 0 } } } } }, + t: { + s: { + o: { l: { i: { m: { '%': 0 } } } }, + u: { p: { '%': 0 } }, + }, + }, + }, + z: { + a: { l: { '%': 0 }, r: { z: { a: { r: { '%': 0 } } } } }, + u: { k: { '%': 0 } }, + }, + č: { + e: { r: { o: { g: { '%': 0 } } }, č: { '%': 0 } }, + o: { t: { u: { '%': 0 } } }, + }, + ě: { + c: { + o: { '%': 0, ě: { r: { p: { '%': 0 } } } }, + ě: { r: { p: { '%': 0 } } }, + }, + l: { '%': 0, k: { '%': 0 }, p: { a: { z: { '%': 0 } } } }, + m: { + '%': 0, + a: { z: { '%': 0 } }, + b: { o: { '%': 0 } }, + d: { o: { p: { '%': 0 } } }, + i: { r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + ě: { r: { p: { '%': 0 } } }, + }, + t: { '%': 0, o: { '%': 0 }, s: { '%': 0 } }, + }, + š: { + a: { + d: { + g: { + e: { s: { '%': 0 } }, + o: { n: { o: { '%': 0 } } }, + }, + }, + m: { o: { d: { '%': 0, o: { '%': 0 } } } }, + r: { e: { č: { v: { '%': 0 } } } }, + }, + e: { + d: { s: { '%': 0 } }, + n: { d: { '%': 0 } }, + r: { e: { č: { '%': 0 } } }, + }, + i: { + d: { + o: { + g: { + '%': 0, + o: { + d: { ž: { a: { k: { '%': 0 } } } }, + k: { a: { s: { v: { '%': 0 } } } }, + l: { š: { o: { r: { p: { '%': 0 } } } } }, + v: { o: { n: { '%': 0 } } }, + }, + }, + }, + }, + l: { z: { i: { '%': 0 } } }, + r: { + t: { + u: { + '%': 0, + a: { z: { '%': 0 } }, + j: { '%': 0 }, + n: { v: { '%': 0 } }, + }, + }, + }, + v: { '%': 0 }, + }, + ě: { n: { v: { '%': 0 }, y: { n: { '%': 0 } } } }, + }, + ž: { + a: { r: { d: { z: { a: { r: { '%': 0 } } } } } }, + i: { l: { b: { '%': 0 } } }, + o: { + l: { s: { u: { '%': 0 } } }, + m: { e: { n: { u: { '%': 0 } } }, u: { '%': 0 } }, + }, + }, + }, + }, + }, + e: { + j: { + n: { + a: { + b: { '%': 0, o: { l: { '%': 0 } } }, + k: { '%': 0 }, + p: { '%': 0 }, + r: { '%': 0, e: { g: { '%': 0 } } }, + s: { '%': 0 }, + t: { s: { i: { r: { p: { '%': 0 } } } } }, + }, + d: { + '%': 0, + a: { z: { '%': 0 } }, + e: { s: { v: { o: { p: { '%': 0 } } } } }, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + u: { t: { s: { '%': 0 } } }, + y: { t: { '%': 0 } }, + ě: { + l: { + s: { + o: { + p: { + '%': 0, + d: { ě: { r: { p: { '%': 0 } } } }, + }, + }, + }, + }, + r: { + p: { '%': 0, o: { p: { '%': 0 } } }, + s: { + '%': 0, + o: { + p: { + '%': 0, + e: { n: { '%': 0 } }, + z: { e: { b: { '%': 0 } } }, + }, + }, + }, + }, + }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + l: { e: { j: { '%': 0 } } }, + m: { + '%': 0, + a: { k: { '%': 0 }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + j: { a: { n: { '%': 0 } } }, + u: { g: { i: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + }, + r: { + o: { k: { '%': 0 }, v: { s: { '%': 0 } } }, + t: { u: { j: { '%': 0 } } }, + }, + s: { a: { j: { '%': 0 } } }, + t: { + '%': 0, + j: { a: { n: { '%': 0 } } }, + s: { r: { p: { '%': 0 } } }, + }, + v: { e: { r: { '%': 0 } } }, + z: { e: { l: { g: { '%': 0 } } } }, + š: { r: { e: { š: { '%': 0 } } } }, + }, + g: { o: { '%': 0 } }, + h: { r: { v: { o: { p: { '%': 0 } } } }, u: { k: { '%': 0 } } }, + i: { + '%': 0, + r: { k: { s: { '%': 0 } } }, + s: { '%': 0 }, + v: { s: { '%': 0 } }, + }, + j: { + l: { + a: { + d: { '%': 0 }, + k: { e: { č: { '%': 0 } } }, + p: { + o: { k: { '%': 0 } }, + s: { '%': 0 }, + u: { k: { '%': 0 } }, + }, + t: { i: { č: { '%': 0 } } }, + v: { o: { k: { '%': 0, a: { n: { '%': 0 } } } } }, + }, + i: { + d: { ě: { s: { '%': 0 } } }, + j: { a: { č: { '%': 0 } } }, + t: { s: { o: { g: { '%': 0 } } } }, + č: { + u: { + j: { l: { k: { a: { z: { '%': 0 } } } } }, + m: { '%': 0 }, + }, + ě: { l: { '%': 0 } }, + }, + ž: { o: { l: { a: { z: { '%': 0 } } } } }, + }, + }, + o: { b: { o: { t: { o: { k: { s: { '%': 0 } } } } } } }, + }, + k: { u: { s: { '%': 0 } } }, + l: { o: { m: { '%': 0 } } }, + n: { e: { s: { e: { j: { '%': 0 } } } } }, + o: { + r: { b: { '%': 0 } }, + t: { '%': 0, j: { a: { n: { '%': 0 } } } }, + }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + r: { + a: { + g: { i: { n: { k: { '%': 0 } } } }, + k: { e: { p: { '%': 0 } } }, + s: { e: { m: { '%': 0 } } }, + v: { a: { k: { '%': 0 } }, o: { v: { i: { p: { '%': 0 } } } } }, + č: { v: { o: { '%': 0 } } }, + }, + }, + s: { ě: { p: { '%': 0 } } }, + t: { + o: { s: { '%': 0 } }, + u: { j: { l: { '%': 0 } } }, + ě: { l: { '%': 0 } }, + }, + u: { + '%': 0, + j: { a: { n: { '%': 0 } } }, + k: { i: { v: { '%': 0 } } }, + }, + v: { + a: { l: { g: { '%': 0 } }, r: { u: { '%': 0 } } }, + ě: { l: { p: { '%': 0 } } }, + }, + y: { + b: { a: { r: { '%': 0 } } }, + d: { '%': 0, o: { p: { s: { o: { g: { '%': 0 } } } } } }, + g: { e: { n: { k: { '%': 0 } } }, o: { b: { '%': 0 } } }, + h: { a: { n: { o: { m: { '%': 0 } } } } }, + t: { + s: { + o: { l: { i: { m: { '%': 0 } } } }, + u: { p: { '%': 0 } }, + }, + }, + }, + z: { a: { l: { '%': 0 } }, u: { k: { '%': 0 } } }, + č: { e: { r: { o: { g: { '%': 0 } } }, č: { '%': 0 } } }, + ě: { l: { '%': 0 }, t: { '%': 0, s: { '%': 0 } } }, + š: { + a: { + d: { + g: { + e: { s: { '%': 0 } }, + o: { n: { o: { '%': 0 } } }, + }, + }, + m: { o: { d: { '%': 0 } } }, + r: { e: { č: { v: { '%': 0 } } } }, + }, + e: { + d: { s: { '%': 0 } }, + n: { d: { '%': 0 } }, + r: { e: { č: { '%': 0 } } }, + }, + i: { + d: { + o: { + g: { + '%': 0, + o: { + d: { ž: { a: { k: { '%': 0 } } } }, + k: { a: { s: { v: { '%': 0 } } } }, + l: { š: { o: { r: { p: { '%': 0 } } } } }, + v: { o: { n: { '%': 0 } } }, + }, + }, + }, + }, + l: { z: { i: { '%': 0 } } }, + r: { + t: { + u: { + '%': 0, + a: { z: { '%': 0 } }, + j: { '%': 0 }, + n: { v: { '%': 0 } }, + }, + }, + }, + v: { '%': 0 }, + }, + ě: { n: { v: { '%': 0 }, y: { n: { '%': 0 } } } }, + }, + ž: { i: { l: { b: { '%': 0 } } } }, + }, + }, + }, + h: { + a: { + j: { + n: { + a: { + b: { '%': 0, o: { l: { '%': 0 } } }, + d: { '%': 0 }, + g: { + a: { n: { '%': 0 } }, + o: { d: { '%': 0 }, r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + j: { + i: { t: { s: { i: { r: { h: { o: { p: { '%': 0 } } } } } } } }, + }, + k: { '%': 0, t: { '%': 0 } }, + l: { + b: { a: { j: { '%': 0 } } }, + d: { '%': 0 }, + k: { + '%': 0, + a: { n: { '%': 0 } }, + d: { o: { '%': 0 } }, + s: { '%': 0 }, + }, + s: { a: { z: { '%': 0 } }, d: { o: { '%': 0 } } }, + }, + n: { z: { o: { '%': 0 } } }, + p: { '%': 0 }, + r: { + b: { + a: { z: { '%': 0 } }, + o: { '%': 0 }, + z: { o: { v: { '%': 0 } } }, + }, + e: { g: { '%': 0 } }, + h: { o: { '%': 0 }, s: { '%': 0 } }, + t: { + s: { + d: { o: { '%': 0 } }, + o: { r: { p: { z: { a: { r: { '%': 0 } } } } } }, + }, + }, + }, + s: { '%': 0 }, + t: { r: { g: { '%': 0 } }, s: { i: { r: { p: { '%': 0 } } } } }, + }, + b: { + a: { d: { o: { p: { u: { '%': 0 } } } } }, + o: { s: { o: { d: { o: { '%': 0 } } } } }, + }, + d: { + '%': 0, + a: { + v: { + b: { o: { '%': 0 } }, + d: { o: { '%': 0 } }, + u: { '%': 0 }, + }, + }, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + o: { + r: { a: { n: { u: { '%': 0 } } } }, + v: { a: { n: { '%': 0 } } }, + }, + u: { + r: { t: { o: { '%': 0 }, u: { '%': 0 } } }, + t: { s: { '%': 0 } }, + }, + y: { t: { '%': 0 } }, + z: { + a: { r: { p: { o: { '%': 0 }, z: { i: { '%': 0 } } } } }, + o: { p: { o: { '%': 0 }, s: { '%': 0 } } }, + }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + l: { + e: { j: { '%': 0 }, z: { '%': 0, o: { '%': 0 } } }, + u: { j: { t: { '%': 0 } } }, + č: { v: { '%': 0 } }, + }, + m: { + '%': 0, + a: { k: { '%': 0, o: { '%': 0 } }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + u: { g: { i: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + ě: { r: { b: { o: { '%': 0 } } } }, + }, + r: { + o: { + k: { '%': 0, z: { i: { '%': 0 } } }, + v: { s: { '%': 0 } }, + }, + t: { u: { j: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { j: { '%': 0 } } }, + t: { s: { r: { p: { '%': 0 } } }, u: { r: { t: { '%': 0 } } } }, + v: { e: { r: { '%': 0 } }, r: { č: { a: { z: { '%': 0 } } } } }, + z: { e: { l: { g: { '%': 0 } }, v: { '%': 0 } } }, + č: { e: { p: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } }, ě: { k: { '%': 0 } } }, + ž: { e: { s: { '%': 0 } }, o: { l: { s: { o: { '%': 0 } } } } }, + }, + g: { o: { '%': 0 } }, + h: { r: { v: { o: { p: { '%': 0 } } } }, u: { k: { '%': 0 } } }, + i: { + '%': 0, + d: { + e: { + j: { + b: { o: { '%': 0 } }, + s: { '%': 0, i: { r: { p: { '%': 0 } } } }, + u: { '%': 0 }, + z: { a: { r: { '%': 0 } } }, + }, + }, + }, + l: { '%': 0, b: { o: { '%': 0 } } }, + r: { k: { s: { '%': 0 } } }, + v: { + b: { o: { '%': 0 } }, + e: { n: { u: { '%': 0 } } }, + s: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + č: { + d: { o: { '%': 0 } }, + i: { r: { p: { '%': 0 } } }, + u: { k: { e: { t: { u: { '%': 0 } } } } }, + }, + }, + j: { + l: { + a: { + k: { e: { č: { '%': 0 } } }, + p: { + o: { k: { '%': 0 } }, + s: { '%': 0 }, + u: { k: { '%': 0 } }, + }, + t: { i: { č: { '%': 0 } } }, + v: { + o: { k: { '%': 0, a: { n: { '%': 0 } } } }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + i: { + d: { ě: { s: { '%': 0 } } }, + j: { a: { č: { '%': 0 } } }, + t: { s: { o: { g: { '%': 0 } } } }, + č: { + u: { + j: { l: { k: { a: { z: { '%': 0 } } } } }, + m: { '%': 0 }, + }, + ě: { l: { '%': 0 } }, + }, + ž: { o: { l: { a: { z: { '%': 0 } } } } }, + }, + }, + o: { b: { o: { t: { o: { k: { s: { '%': 0 } } } } } } }, + }, + k: { u: { s: { '%': 0 } } }, + l: { + o: { + m: { '%': 0 }, + p: { + a: { z: { '%': 0 } }, + o: { d: { '%': 0 } }, + z: { i: { '%': 0 } }, + }, + }, + }, + m: { e: { t: { a: { z: { '%': 0 } } } } }, + n: { + e: { m: { ě: { r: { v: { o: { s: { o: { '%': 0 } } } } } } } }, + }, + o: { k: { '%': 0 }, r: { b: { '%': 0 } }, v: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + r: { + a: { + g: { i: { n: { k: { '%': 0 } } } }, + k: { e: { p: { '%': 0 } }, o: { p: { u: { '%': 0 } } } }, + p: { + d: { + o: { + e: { j: { n: { g: { o: { b: { o: { '%': 0 } } } } } } }, + }, + }, + }, + s: { e: { m: { '%': 0 } } }, + v: { a: { k: { '%': 0 } }, o: { v: { i: { p: { '%': 0 } } } } }, + č: { v: { o: { '%': 0 } } }, + }, + v: { k: { s: { o: { '%': 0 } } } }, + č: { o: { '%': 0 } }, + }, + s: { + a: { + b: { '%': 0 }, + j: { + b: { o: { '%': 0 } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + }, + e: { l: { ě: { t: { u: { '%': 0 } } } } }, + ě: { + b: { z: { a: { r: { '%': 0 } } } }, + l: { p: { '%': 0 } }, + p: { '%': 0 }, + }, + }, + t: { + o: { s: { '%': 0 } }, + s: { + a: { + l: { + v: { + i: { r: { p: { '%': 0 } } }, + z: { i: { '%': 0 } }, + }, + }, + }, + }, + u: { j: { l: { '%': 0 } } }, + }, + u: { k: { i: { v: { '%': 0 } }, o: { '%': 0 } } }, + v: { + a: { + l: { g: { '%': 0 } }, + r: { + p: { o: { '%': 0 } }, + s: { '%': 0 }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + y: { l: { p: { v: { o: { '%': 0 } } } } }, + ě: { l: { p: { '%': 0 } } }, + }, + y: { + b: { a: { r: { '%': 0 } } }, + d: { '%': 0, o: { p: { s: { o: { g: { '%': 0 } } } } } }, + g: { e: { n: { k: { '%': 0 } } }, o: { b: { '%': 0 } } }, + h: { a: { n: { o: { m: { '%': 0 } } } } }, + t: { + s: { + o: { l: { i: { m: { '%': 0 } } } }, + u: { p: { '%': 0 } }, + }, + }, + }, + z: { + a: { + j: { + o: { + b: { + '%': 0, + o: { d: { o: { v: { '%': 0 } } } }, + }, + }, + }, + k: { '%': 0 }, + l: { '%': 0 }, + r: { z: { a: { r: { '%': 0 } } } }, + }, + u: { k: { '%': 0 } }, + ě: { l: { o: { b: { '%': 0 } } } }, + }, + č: { + e: { r: { o: { g: { '%': 0 } } } }, + o: { t: { u: { '%': 0 } } }, + }, + ě: { + c: { + o: { '%': 0, ě: { r: { p: { '%': 0 } } } }, + ě: { r: { p: { '%': 0 } } }, + }, + l: { + k: { '%': 0 }, + o: { g: { '%': 0 } }, + p: { a: { z: { '%': 0 } } }, + }, + m: { + '%': 0, + a: { z: { '%': 0 } }, + b: { o: { '%': 0 } }, + d: { o: { p: { '%': 0 } } }, + i: { r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + ě: { r: { p: { '%': 0 } } }, + }, + t: { '%': 0, o: { '%': 0 }, s: { '%': 0 } }, + }, + š: { + a: { m: { o: { d: { o: { '%': 0 } } } } }, + e: { r: { e: { č: { '%': 0 } } } }, + i: { v: { '%': 0 } }, + }, + ž: { + a: { r: { d: { z: { a: { r: { '%': 0 } } } } } }, + o: { + l: { s: { u: { '%': 0 } } }, + m: { e: { n: { u: { '%': 0 } } }, u: { '%': 0 } }, + }, + }, + }, + }, + }, + }, + i: { + m: { + a: { + j: { + n: { + a: { + b: { '%': 0, o: { l: { '%': 0 } } }, + d: { '%': 0 }, + k: { '%': 0, t: { '%': 0 } }, + l: { b: { a: { j: { '%': 0 } } }, d: { '%': 0 } }, + p: { '%': 0 }, + r: { e: { g: { '%': 0 } } }, + s: { '%': 0 }, + t: { r: { g: { '%': 0 } }, s: { i: { r: { p: { '%': 0 } } } } }, + }, + d: { + '%': 0, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + u: { t: { s: { '%': 0 } } }, + y: { t: { '%': 0 } }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + l: { + e: { j: { '%': 0 }, z: { '%': 0 } }, + u: { j: { t: { '%': 0 } } }, + }, + m: { + '%': 0, + a: { k: { '%': 0 }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + u: { g: { i: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + }, + r: { + o: { k: { '%': 0 }, v: { s: { '%': 0 } } }, + t: { u: { j: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { j: { '%': 0 } } }, + t: { s: { r: { p: { '%': 0 } } }, u: { r: { t: { '%': 0 } } } }, + v: { e: { r: { '%': 0 } } }, + z: { e: { l: { g: { '%': 0 } }, v: { '%': 0 } } }, + č: { e: { p: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } }, ě: { k: { '%': 0 } } }, + ž: { e: { s: { '%': 0 } } }, + }, + g: { o: { '%': 0 } }, + h: { r: { v: { o: { p: { '%': 0 } } } }, u: { k: { '%': 0 } } }, + i: { '%': 0, r: { k: { s: { '%': 0 } } }, v: { s: { '%': 0 } } }, + j: { + l: { + a: { + k: { e: { č: { '%': 0 } } }, + p: { + o: { k: { '%': 0 } }, + s: { '%': 0 }, + u: { k: { '%': 0 } }, + }, + t: { i: { č: { '%': 0 } } }, + v: { o: { k: { '%': 0, a: { n: { '%': 0 } } } } }, + }, + i: { + d: { ě: { s: { '%': 0 } } }, + j: { a: { č: { '%': 0 } } }, + t: { s: { o: { g: { '%': 0 } } } }, + č: { + u: { + j: { l: { k: { a: { z: { '%': 0 } } } } }, + m: { '%': 0 }, + }, + ě: { l: { '%': 0 } }, + }, + ž: { o: { l: { a: { z: { '%': 0 } } } } }, + }, + }, + o: { b: { o: { t: { o: { k: { s: { '%': 0 } } } } } } }, + }, + k: { u: { s: { '%': 0 } } }, + l: { o: { m: { '%': 0 } } }, + o: { k: { '%': 0 }, r: { b: { '%': 0 } }, v: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + r: { + a: { + g: { i: { n: { k: { '%': 0 } } } }, + k: { e: { p: { '%': 0 } } }, + s: { e: { m: { '%': 0 } } }, + v: { + a: { k: { '%': 0 } }, + o: { v: { i: { p: { '%': 0 } } } }, + }, + č: { v: { o: { '%': 0 } } }, + }, + }, + s: { + a: { b: { '%': 0 } }, + ě: { l: { p: { '%': 0 } }, p: { '%': 0 } }, + }, + t: { o: { s: { '%': 0 } }, u: { j: { l: { '%': 0 } } } }, + u: { k: { i: { v: { '%': 0 } }, o: { '%': 0 } } }, + v: { + a: { l: { g: { '%': 0 } }, r: { u: { '%': 0 } } }, + ě: { l: { p: { '%': 0 } } }, + }, + y: { + b: { a: { r: { '%': 0 } } }, + d: { '%': 0, o: { p: { s: { o: { g: { '%': 0 } } } } } }, + g: { e: { n: { k: { '%': 0 } } }, o: { b: { '%': 0 } } }, + h: { a: { n: { o: { m: { '%': 0 } } } } }, + t: { + s: { + o: { l: { i: { m: { '%': 0 } } } }, + u: { p: { '%': 0 } }, + }, + }, + }, + z: { + a: { + j: { + o: { + b: { + '%': 0, + o: { d: { o: { v: { '%': 0 } } } }, + }, + }, + }, + k: { '%': 0 }, + l: { '%': 0 }, + }, + u: { k: { '%': 0 } }, + ě: { l: { o: { b: { '%': 0 } } } }, + }, + č: { e: { r: { o: { g: { '%': 0 } } } } }, + ě: { + l: { k: { '%': 0 }, o: { g: { '%': 0 } } }, + t: { '%': 0, s: { '%': 0 } }, + }, + š: { e: { r: { e: { č: { '%': 0 } } } }, i: { v: { '%': 0 } } }, + }, + }, + }, + }, + }, + m: { + a: { + j: { + n: { + a: { + b: { '%': 0, o: { l: { '%': 0 } } }, + d: { '%': 0 }, + g: { + a: { n: { '%': 0 } }, + o: { d: { '%': 0 }, r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + j: { + i: { t: { s: { i: { r: { h: { o: { p: { '%': 0 } } } } } } } }, + }, + k: { '%': 0, t: { '%': 0 } }, + l: { + b: { a: { j: { '%': 0 } } }, + d: { '%': 0 }, + k: { + '%': 0, + a: { n: { '%': 0 } }, + d: { o: { '%': 0 } }, + s: { '%': 0 }, + }, + s: { a: { z: { '%': 0 } }, d: { o: { '%': 0 } } }, + }, + n: { z: { o: { '%': 0 } } }, + p: { '%': 0 }, + r: { + b: { + a: { z: { '%': 0 } }, + o: { '%': 0 }, + z: { o: { v: { '%': 0 } } }, + }, + e: { g: { '%': 0 } }, + h: { o: { '%': 0 }, s: { '%': 0 } }, + t: { + s: { + d: { o: { '%': 0 } }, + o: { r: { p: { z: { a: { r: { '%': 0 } } } } } }, + }, + }, + }, + s: { '%': 0 }, + t: { r: { g: { '%': 0 } }, s: { i: { r: { p: { '%': 0 } } } } }, + }, + b: { + a: { d: { o: { p: { u: { '%': 0 } } } } }, + o: { s: { o: { d: { o: { '%': 0 } } } } }, + }, + d: { + '%': 0, + a: { + v: { + b: { o: { '%': 0 } }, + d: { o: { '%': 0 } }, + u: { '%': 0 }, + }, + }, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + o: { + r: { a: { n: { u: { '%': 0 } } } }, + v: { a: { n: { '%': 0 } } }, + }, + u: { + r: { t: { o: { '%': 0 }, u: { '%': 0 } } }, + t: { s: { '%': 0 } }, + }, + y: { t: { '%': 0 } }, + z: { + a: { r: { p: { o: { '%': 0 }, z: { i: { '%': 0 } } } } }, + o: { p: { o: { '%': 0 }, s: { '%': 0 } } }, + }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + l: { + e: { j: { '%': 0 }, z: { '%': 0, o: { '%': 0 } } }, + u: { j: { t: { '%': 0 } } }, + č: { v: { '%': 0 } }, + }, + m: { + '%': 0, + a: { k: { '%': 0, o: { '%': 0 } }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + u: { g: { i: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + ě: { r: { b: { o: { '%': 0 } } } }, + }, + r: { + o: { + k: { '%': 0, z: { i: { '%': 0 } } }, + v: { s: { '%': 0 } }, + }, + t: { u: { j: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { j: { '%': 0 } } }, + t: { s: { r: { p: { '%': 0 } } }, u: { r: { t: { '%': 0 } } } }, + v: { e: { r: { '%': 0 } }, r: { č: { a: { z: { '%': 0 } } } } }, + z: { e: { l: { g: { '%': 0 } }, v: { '%': 0 } } }, + č: { e: { p: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } }, ě: { k: { '%': 0 } } }, + ž: { e: { s: { '%': 0 } }, o: { l: { s: { o: { '%': 0 } } } } }, + }, + g: { o: { '%': 0 } }, + h: { r: { v: { o: { p: { '%': 0 } } } }, u: { k: { '%': 0 } } }, + i: { + '%': 0, + d: { + e: { + j: { + b: { o: { '%': 0 } }, + s: { '%': 0, i: { r: { p: { '%': 0 } } } }, + u: { '%': 0 }, + z: { a: { r: { '%': 0 } } }, + }, + }, + }, + l: { '%': 0, b: { o: { '%': 0 } } }, + r: { k: { s: { '%': 0 } } }, + v: { + b: { o: { '%': 0 } }, + e: { n: { u: { '%': 0 } } }, + s: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + č: { + d: { o: { '%': 0 } }, + i: { r: { p: { '%': 0 } } }, + u: { k: { e: { t: { u: { '%': 0 } } } } }, + }, + }, + j: { + l: { + a: { + k: { e: { č: { '%': 0 } } }, + p: { + o: { k: { '%': 0 } }, + s: { '%': 0 }, + u: { k: { '%': 0 } }, + }, + t: { i: { č: { '%': 0 } } }, + v: { + o: { k: { '%': 0, a: { n: { '%': 0 } } } }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + i: { + d: { ě: { s: { '%': 0 } } }, + j: { a: { č: { '%': 0 } } }, + t: { s: { o: { g: { '%': 0 } } } }, + č: { + u: { + j: { l: { k: { a: { z: { '%': 0 } } } } }, + m: { '%': 0 }, + }, + ě: { l: { '%': 0 } }, + }, + ž: { o: { l: { a: { z: { '%': 0 } } } } }, + }, + }, + o: { b: { o: { t: { o: { k: { s: { '%': 0 } } } } } } }, + }, + k: { u: { s: { '%': 0 } } }, + l: { + o: { + m: { '%': 0 }, + p: { + a: { z: { '%': 0 } }, + o: { d: { '%': 0 } }, + z: { i: { '%': 0 } }, + }, + }, + }, + m: { e: { t: { a: { z: { '%': 0 } } } } }, + n: { + e: { m: { ě: { r: { v: { o: { s: { o: { '%': 0 } } } } } } } }, + }, + o: { k: { '%': 0 }, r: { b: { '%': 0 } }, v: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + r: { + a: { + g: { i: { n: { k: { '%': 0 } } } }, + k: { e: { p: { '%': 0 } }, o: { p: { u: { '%': 0 } } } }, + p: { + d: { + o: { + e: { j: { n: { g: { o: { b: { o: { '%': 0 } } } } } } }, + }, + }, + }, + s: { e: { m: { '%': 0 } } }, + v: { a: { k: { '%': 0 } }, o: { v: { i: { p: { '%': 0 } } } } }, + č: { v: { o: { '%': 0 } } }, + }, + v: { k: { s: { o: { '%': 0 } } } }, + č: { o: { '%': 0 } }, + }, + s: { + a: { + b: { '%': 0 }, + j: { + b: { o: { '%': 0 } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + }, + }, + e: { l: { ě: { t: { u: { '%': 0 } } } } }, + ě: { + b: { z: { a: { r: { '%': 0 } } } }, + l: { p: { '%': 0 } }, + p: { '%': 0 }, + }, + }, + t: { + o: { s: { '%': 0 } }, + s: { + a: { + l: { + v: { + i: { r: { p: { '%': 0 } } }, + z: { i: { '%': 0 } }, + }, + }, + }, + }, + u: { j: { l: { '%': 0 } } }, + }, + u: { k: { i: { v: { '%': 0 } }, o: { '%': 0 } } }, + v: { + a: { + l: { g: { '%': 0 } }, + r: { + p: { o: { '%': 0 } }, + s: { '%': 0 }, + u: { '%': 0 }, + z: { i: { '%': 0 } }, + }, + }, + y: { l: { p: { v: { o: { '%': 0 } } } } }, + ě: { l: { p: { '%': 0 } } }, + }, + y: { + b: { a: { r: { '%': 0 } } }, + d: { '%': 0, o: { p: { s: { o: { g: { '%': 0 } } } } } }, + g: { e: { n: { k: { '%': 0 } } }, o: { b: { '%': 0 } } }, + h: { a: { n: { o: { m: { '%': 0 } } } } }, + t: { + s: { + o: { l: { i: { m: { '%': 0 } } } }, + u: { p: { '%': 0 } }, + }, + }, + }, + z: { + a: { + j: { + o: { + b: { + '%': 0, + o: { d: { o: { v: { '%': 0 } } } }, + }, + }, + }, + k: { '%': 0 }, + l: { '%': 0 }, + r: { z: { a: { r: { '%': 0 } } } }, + }, + u: { k: { '%': 0 } }, + ě: { l: { o: { b: { '%': 0 } } } }, + }, + č: { + e: { r: { o: { g: { '%': 0 } } } }, + o: { t: { u: { '%': 0 } } }, + }, + ě: { + c: { + o: { '%': 0, ě: { r: { p: { '%': 0 } } } }, + ě: { r: { p: { '%': 0 } } }, + }, + l: { + k: { '%': 0 }, + o: { g: { '%': 0 } }, + p: { a: { z: { '%': 0 } } }, + }, + m: { + '%': 0, + a: { z: { '%': 0 } }, + b: { o: { '%': 0 } }, + d: { o: { p: { '%': 0 } } }, + i: { r: { p: { '%': 0 } } }, + z: { a: { r: { '%': 0 } }, i: { '%': 0 } }, + ě: { r: { p: { '%': 0 } } }, + }, + t: { '%': 0, o: { '%': 0 }, s: { '%': 0 } }, + }, + š: { + a: { m: { o: { d: { o: { '%': 0 } } } } }, + e: { r: { e: { č: { '%': 0 } } } }, + i: { v: { '%': 0 } }, + }, + ž: { + a: { r: { d: { z: { a: { r: { '%': 0 } } } } } }, + o: { + l: { s: { u: { '%': 0 } } }, + m: { e: { n: { u: { '%': 0 } } }, u: { '%': 0 } }, + }, + }, + }, + }, + }, + e: { + j: { + n: { + a: { + r: { '%': 0, e: { g: { '%': 0 } } }, + t: { s: { i: { r: { p: { '%': 0 } } } } }, + }, + d: { + '%': 0, + a: { z: { '%': 0 } }, + e: { s: { v: { o: { p: { '%': 0 } } } } }, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + y: { t: { '%': 0 } }, + ě: { + l: { + s: { + o: { + p: { + '%': 0, + d: { ě: { r: { p: { '%': 0 } } } }, + }, + }, + }, + }, + r: { + p: { '%': 0, o: { p: { '%': 0 } } }, + s: { + '%': 0, + o: { + p: { + '%': 0, + e: { n: { '%': 0 } }, + z: { e: { b: { '%': 0 } } }, + }, + }, + }, + }, + }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + j: { u: { r: { '%': 0 } } }, + l: { e: { j: { '%': 0 } }, u: { j: { t: { '%': 0 } } } }, + m: { + '%': 0, + a: { k: { '%': 0 }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + }, + p: { i: { l: { '%': 0 } }, r: { s: { '%': 0 } } }, + r: { + o: { k: { '%': 0 }, v: { s: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { r: { v: { '%': 0 } } } }, + t: { + s: { r: { p: { '%': 0 } } }, + u: { r: { t: { '%': 0 } } }, + ě: { v: { c: { '%': 0 } } }, + }, + v: { + a: { r: { t: { '%': 0 } } }, + e: { r: { '%': 0 } }, + r: { č: { '%': 0 } }, + }, + z: { + e: { l: { g: { '%': 0 } }, v: { '%': 0 } }, + ě: { r: { b: { '%': 0 } } }, + }, + č: { y: { t: { s: { '%': 0 } } }, ě: { s: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } } }, + ž: { ě: { n: { s: { '%': 0 } } } }, + }, + g: { o: { '%': 0 } }, + i: { '%': 0, s: { '%': 0 } }, + j: { l: { a: { d: { '%': 0 } } } }, + n: { e: { s: { e: { j: { '%': 0 } } } } }, + o: { k: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + t: { ě: { l: { '%': 0 } } }, + u: { k: { o: { '%': 0 } } }, + v: { a: { r: { u: { '%': 0 } } } }, + ě: { l: { '%': 0, k: { '%': 0 } }, t: { '%': 0, s: { '%': 0 } } }, + š: { + a: { + d: { + g: { + e: { s: { '%': 0 } }, + o: { n: { o: { '%': 0 } } }, + }, + }, + m: { o: { d: { '%': 0 } } }, + r: { e: { č: { v: { '%': 0 } } } }, + }, + e: { d: { s: { '%': 0 } }, n: { d: { '%': 0 } } }, + i: { + d: { + o: { + g: { + '%': 0, + o: { + d: { ž: { a: { k: { '%': 0 } } } }, + k: { a: { s: { v: { '%': 0 } } } }, + l: { š: { o: { r: { p: { '%': 0 } } } } }, + }, + }, + }, + }, + l: { z: { i: { '%': 0 } } }, + r: { + t: { + u: { + '%': 0, + a: { z: { '%': 0 } }, + j: { '%': 0 }, + n: { v: { '%': 0 } }, + }, + }, + }, + }, + ě: { n: { v: { '%': 0 }, y: { n: { '%': 0 } } } }, + }, + ž: { i: { l: { b: { '%': 0 } } } }, + }, + }, + }, + }, + u: { + j: { + n: { + a: { + r: { e: { g: { '%': 0 } } }, + t: { s: { i: { r: { p: { '%': 0 } } } } }, + }, + d: { + '%': 0, + k: { i: { l: { e: { v: { '%': 0 } } } } }, + l: { o: { p: { '%': 0, o: { p: { '%': 0 } } } } }, + y: { t: { '%': 0 } }, + }, + e: { + b: { e: { r: { g: { '%': 0 } } } }, + j: { u: { r: { '%': 0 } } }, + l: { e: { j: { '%': 0 } }, u: { j: { t: { '%': 0 } } } }, + m: { + '%': 0, + a: { k: { '%': 0 }, l: { p: { '%': 0 } } }, + e: { r: { '%': 0, k: { '%': 0 } } }, + č: { e: { j: { '%': 0 } } }, + }, + p: { i: { l: { '%': 0 } }, r: { s: { '%': 0 } } }, + r: { + o: { k: { '%': 0 }, v: { s: { '%': 0 } } }, + u: { d: { '%': 0 } }, + }, + s: { a: { j: { '%': 0 } }, e: { r: { v: { '%': 0 } } } }, + t: { + s: { r: { p: { '%': 0 } } }, + u: { r: { t: { '%': 0 } } }, + ě: { v: { c: { '%': 0 } } }, + }, + v: { + a: { r: { t: { '%': 0 } } }, + e: { r: { '%': 0 } }, + r: { č: { '%': 0 } }, + }, + z: { + e: { l: { g: { '%': 0 } }, v: { '%': 0 } }, + ě: { r: { b: { '%': 0 } } }, + }, + č: { y: { t: { s: { '%': 0 } } }, ě: { s: { '%': 0 } } }, + š: { r: { e: { š: { '%': 0 } } } }, + ž: { ě: { n: { s: { '%': 0 } } } }, + }, + g: { o: { '%': 0 } }, + i: { '%': 0 }, + o: { k: { '%': 0 } }, + p: { '%': 0, u: { t: { s: { '%': 0 } } } }, + u: { k: { o: { '%': 0 } } }, + v: { a: { r: { u: { '%': 0 } } } }, + ě: { l: { k: { '%': 0 } }, t: { '%': 0, s: { '%': 0 } } }, + }, + }, + }, + }, +} as Dict; diff --git a/src/transliterate/nje/index.ts b/src/transliterate/nje/index.ts new file mode 100644 index 0000000..3af8a56 --- /dev/null +++ b/src/transliterate/nje/index.ts @@ -0,0 +1,44 @@ +import type { Dict } from './Dict'; +import njeExceptions from './exceptions'; +import rules from './rules'; + +const ENDS = 1; +const WHOLE = 0; +const MISMATCH = -1; + +function findTrieWord(word: string, dict: Dict): Dict | number | undefined { + let node: Dict | number = dict; + const length = word.length; + let chr = ''; + let i: number; + + for (i = length - 1; typeof node === 'object' && i >= 0; i--) { + chr = word[i]; + node = node[chr]; + } + + return node === 0 ? (i === -1 ? WHOLE : ENDS) : MISMATCH; +} + +/** + * Check whether we should soften nj to ńj + */ +export function njeCheck(word: string) { + return ( + findTrieWord(word, rules) === ENDS && + findTrieWord(word, njeExceptions) === MISMATCH + ); +} + +export function njePosition(word: string): number { + const length = word.length; + let node: Dict | number = rules; + let i: number; + let chr: string; + for (i = length - 1; typeof node === 'object' && i >= 0; i--) { + chr = word[i]; + node = node[chr]; + } + + return node === 0 ? i + 1 : -1; +} diff --git a/src/transliterate/nje/nje.test.ts b/src/transliterate/nje/nje.test.ts new file mode 100644 index 0000000..37317b4 --- /dev/null +++ b/src/transliterate/nje/nje.test.ts @@ -0,0 +1,55 @@ +import { njeCheck, njePosition } from './index'; + +describe('nje', () => { + describe('njeCheck', () => { + test.each([['banje'], ['uravnja'], ['šeršenje']])( + 'should return false for %j', + (input) => { + expect(njeCheck(toToken(input))).toBe(false); + }, + ); + + test.each([['běganje'], ['dělanje']])( + 'should return false for %j', + (input) => { + expect(njeCheck(toToken(input))).toBe(true); + }, + ); + + test.each([[''], ['rksadhfklhdslkfasdfgasg']])( + 'should return false for various non-sense (%j)', + (input) => { + expect(njeCheck(toToken(input))).toBe(false); + }, + ); + }); + + describe('njePosition', () => { + test.each([['ńje'], ['dělańje']])('for %j should return -1', (input) => { + const token = toToken(input); + const pos = njePosition(token); + expect(pos).toBe(-1); + }); + + test.each([ + ['nje', 3, 'ńje'], + ['banje', 3, 'bańje'], + ['uravnja', 3, 'uravńja'], + ['šeršenjem', 4, 'šeršeńjem'], + ['běganjami', 5, 'běgańjami'], + ['dělanje', 3, 'dělańje'], + ])('for %j should return len-%j', (input, expected, doubleCheck) => { + const token = toToken(input); + const pos = njePosition(token); + expect(pos).toBe(token.length - expected - 1); + + const softened = + token.substring(0, pos) + 'ńj' + token.substring(pos + 2); + expect(softened).toBe(toToken(doubleCheck)); + }); + }); + + function toToken(str: string): string { + return `%${str}%`; + } +}); diff --git a/src/transliterate/nje/rules.ts b/src/transliterate/nje/rules.ts new file mode 100644 index 0000000..c105b8f --- /dev/null +++ b/src/transliterate/nje/rules.ts @@ -0,0 +1,12 @@ +import type { Dict } from './Dict'; + +export default { + '%': { + a: { j: { n: 0 } }, + e: { j: { n: 0 } }, + h: { a: { j: { n: 0 } } }, + i: { m: { a: { j: { n: 0 } } } }, + m: { a: { j: { n: 0 } }, e: { j: { n: 0 } } }, + u: { j: { n: 0 } }, + }, +} as Dict; diff --git a/src/transliterate/transliterate.ts b/src/transliterate/transliterate.ts index 4718f7a..6afac5a 100644 --- a/src/transliterate/transliterate.ts +++ b/src/transliterate/transliterate.ts @@ -1,4 +1,5 @@ import { Glagolitic } from '../constants'; +import { njeCheck, njePosition } from './nje'; export enum TransliterationType { Latin = 1, @@ -48,6 +49,7 @@ function transliterateWord( iW = '%' + iW + '%'; let OrigW = iW; iW = nmsify(iW.toLowerCase()); + iW = softenNjIfNeeded(iW); // 'ŕ' remains between two consonants, in other cases is replaced by 'ř' iW = iW.replace(/ŕ/g, 'ř'); const aPos = iW.indexOf('ř'); @@ -99,19 +101,7 @@ function transliterateWord( } // 3 - standard, 4 - slovianto if (flav == '3' || flav == '4') { - iW = iW.replace(/[ęė]/g, 'e'); - iW = iW.replace(/å/g, 'a'); - iW = iW.replace(/ȯ/g, 'o'); - iW = iW.replace(/ų/g, 'u'); - iW = iW.replace(/ć/g, 'č'); - iW = iW.replace(/đ/g, 'dž'); - iW = iW.replace(/ř/g, 'r'); - iW = iW.replace(/ľ/g, 'l'); - iW = iW.replace(/ń/g, 'n'); - iW = iW.replace(/ť/g, 't'); - iW = iW.replace(/ď/g, 'd'); - iW = iW.replace(/ś/g, 's'); - iW = iW.replace(/ź/g, 'z'); + iW = standardize(iW); } // slovianto if (flav == '4') { @@ -726,3 +716,34 @@ function nmsify(iW: string) { .replace(/jj/g, 'j') ); } + +function standardize(iW: string): string { + return iW + .replace(/[ęė]/g, 'e') + .replace(/å/g, 'a') + .replace(/ȯ/g, 'o') + .replace(/ų/g, 'u') + .replace(/ć/g, 'č') + .replace(/đ/g, 'dž') + .replace(/ř/g, 'r') + .replace(/ľ/g, 'l') + .replace(/ń/g, 'n') + .replace(/ť/g, 't') + .replace(/ď/g, 'd') + .replace(/ś/g, 's') + .replace(/ź/g, 'z'); +} + +function softenNjIfNeeded(iW: string): string { + const siW = standardize(iW); + if (!njeCheck(siW)) { + return iW; + } + + const lastNj = njePosition(siW); + if (lastNj < 0) { + return iW; + } + + return iW.substring(0, lastNj) + 'ńj' + iW.substring(lastNj + 2); +}