From 803a94b0a0c30d8e14d880da16b65bc35a466a31 Mon Sep 17 00:00:00 2001 From: Yaroslav Serhieiev Date: Thu, 14 Dec 2023 12:08:25 +0200 Subject: [PATCH] =?UTF-8?q?fix(transliterate):=20distinguish=20lj=20and=20?= =?UTF-8?q?=C4=BAj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/generate-nj-suite.mjs | 54 - scripts/generate-rule-exceptions.mjs | 113 ++ src/transliterate/index.test.ts | 19 +- src/transliterate/lj-nj/endings-nje.json | 1 + src/transliterate/lj-nj/exceptions-lj.json | 1 + src/transliterate/lj-nj/exceptions-nj.json | 1 + src/transliterate/lj-nj/findTrieWord.ts | 37 + src/transliterate/lj-nj/index.ts | 38 + src/transliterate/{nje => lj-nj}/nje.test.ts | 0 src/transliterate/nje/Dict.ts | 3 - src/transliterate/nje/exceptions.ts | 1544 ------------------ src/transliterate/nje/index.ts | 44 - src/transliterate/nje/rules.ts | 12 - src/transliterate/transliterate.ts | 27 +- 14 files changed, 219 insertions(+), 1675 deletions(-) delete mode 100755 scripts/generate-nj-suite.mjs create mode 100755 scripts/generate-rule-exceptions.mjs create mode 100644 src/transliterate/lj-nj/endings-nje.json create mode 100644 src/transliterate/lj-nj/exceptions-lj.json create mode 100644 src/transliterate/lj-nj/exceptions-nj.json create mode 100644 src/transliterate/lj-nj/findTrieWord.ts create mode 100644 src/transliterate/lj-nj/index.ts rename src/transliterate/{nje => lj-nj}/nje.test.ts (100%) delete mode 100644 src/transliterate/nje/Dict.ts delete mode 100644 src/transliterate/nje/exceptions.ts delete mode 100644 src/transliterate/nje/index.ts delete mode 100644 src/transliterate/nje/rules.ts diff --git a/scripts/generate-nj-suite.mjs b/scripts/generate-nj-suite.mjs deleted file mode 100755 index 80d804e..0000000 --- a/scripts/generate-nj-suite.mjs +++ /dev/null @@ -1,54 +0,0 @@ -#!/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/scripts/generate-rule-exceptions.mjs b/scripts/generate-rule-exceptions.mjs new file mode 100755 index 0000000..ecaf7b8 --- /dev/null +++ b/scripts/generate-rule-exceptions.mjs @@ -0,0 +1,113 @@ +#!/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 buildExceptionList(predicate) { + const set = new Set(); + for (const word of allWords()) { + if (predicate(word)) { + set.add(utils.transliterate(word.toLowerCase(), 'art-Latn-x-interslv')); + } + } + return [...set].sort(); +} + +function toTrieToken(word) { + return '%' + word + '%'; +} + +/** + * @param {string[]} tokens + * @returns string + */ +function buildSuffixTrie(tokens) { + const trie = {}; + + // iterate over the tokens array. + tokens.forEach((token) => { + let lettersBreakdown = token.split("").reverse(); + let current = trie; + + // iterate over every letter in the token/word. + lettersBreakdown.forEach((letter, index) => { + const position = current[letter]; + + if (position == null) { + // for the last letter of the word, assign 0. For others, assign empty object. + current = current[letter] = index === lettersBreakdown.length - 1 ? 0 : {}; + } else if (position === 0) { + current = current[letter] = { $: 0 }; + } else { + current = current[letter]; + } + }); + + }); + + return JSON.stringify(trie) + '\n'; +} + +function generateRuleExceptions(predicate) { + return buildSuffixTrie(buildExceptionList(predicate).map(toTrieToken)); +} + +function containsLjj(word) { + return word.includes('ľj'); +} + +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'); +} + +fs.writeFileSync( + 'src/transliterate/lj-nj/exceptions-lj.json', + generateRuleExceptions(containsLjj) +); + +fs.writeFileSync( + 'src/transliterate/lj-nj/exceptions-nj.json', + generateRuleExceptions(endsWithNj) +); + +fs.writeFileSync( + 'src/transliterate/lj-nj/endings-nje.json', + buildSuffixTrie([ + 'nja%', + 'njah%', + 'njam%', + 'njami%', + 'nje%', + 'njem%', + 'nju%', + ]), +); diff --git a/src/transliterate/index.test.ts b/src/transliterate/index.test.ts index 6946b99..c73d705 100644 --- a/src/transliterate/index.test.ts +++ b/src/transliterate/index.test.ts @@ -59,20 +59,13 @@ describe('transliterate to', () => { }, ); - test.failing( - 'double transliteration should work equally from Latin and Cyrillic scripts', - () => { - const latn2cyrl = transliterate(latin, 'art-Cyrl-x-interslv'); - const cyrl2latn = transliterate(cyrillic, 'art-Latn-x-interslv'); + test('double transliteration should work equally from Latin and Cyrillic scripts', () => { + const latn2cyrl = transliterate(latin, 'art-Cyrl-x-interslv'); + const cyrl2latn = transliterate(cyrillic, 'art-Latn-x-interslv'); - expect(transliterate(latn2cyrl, 'art-Latn-x-interslv')).toEqual( - cyrl2latn, - ); - expect(transliterate(cyrl2latn, 'art-Cyrl-x-interslv')).toEqual( - latn2cyrl, - ); - }, - ); + expect(transliterate(latn2cyrl, 'art-Latn-x-interslv')).toEqual(cyrl2latn); + expect(transliterate(cyrl2latn, 'art-Cyrl-x-interslv')).toEqual(latn2cyrl); + }); test('unknown code', () => { expect(() => transliterate('', 'en' as any)).toThrowErrorMatchingSnapshot(); diff --git a/src/transliterate/lj-nj/endings-nje.json b/src/transliterate/lj-nj/endings-nje.json new file mode 100644 index 0000000..23654a5 --- /dev/null +++ b/src/transliterate/lj-nj/endings-nje.json @@ -0,0 +1 @@ +{"%":{"a":{"j":{"n":0}},"h":{"a":{"j":{"n":0}}},"m":{"a":{"j":{"n":0}},"e":{"j":{"n":0}}},"i":{"m":{"a":{"j":{"n":0}}}},"e":{"j":{"n":0}},"u":{"j":{"n":0}}}} diff --git a/src/transliterate/lj-nj/exceptions-lj.json b/src/transliterate/lj-nj/exceptions-lj.json new file mode 100644 index 0000000..aea2814 --- /dev/null +++ b/src/transliterate/lj-nj/exceptions-lj.json @@ -0,0 +1 @@ +{"%":{"a":{"j":{"l":{"i":{"s":{"u":{"z":{"e":{"b":{"%":0}}},"%":0},"a":{"n":{"%":0}}},"b":{"o":{"%":0}}},"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}},"č":{"p":{"%":0}},"s":{"e":{"v":{"%":0}}}},"r":{"o":{"%":0}}}}},"e":{"j":{"l":{"i":{"s":{"u":{"z":{"e":{"b":{"%":0}}},"%":0},"a":{"n":{"%":0}}},"b":{"o":{"%":0}}},"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}},"č":{"p":{"%":0}},"s":{"e":{"v":{"%":0}}}},"r":{"o":{"%":0}}},"e":{"j":{"l":{"r":{"o":{"j":{"a":{"n":{"%":0}}},"%":0}},"e":{"č":{"p":{"j":{"a":{"n":{"%":0}}},"%":0}}}}}}}},"m":{"e":{"j":{"l":{"i":{"s":{"u":{"z":{"e":{"b":{"%":0}}},"%":0},"a":{"n":{"%":0}}},"b":{"o":{"%":0}}},"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}},"č":{"p":{"%":0}},"s":{"e":{"v":{"%":0}}}},"r":{"o":{"%":0}}}}},"a":{"j":{"l":{"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}}},"i":{"b":{"o":{"%":0}},"s":{"u":{"%":0}}}}}},"i":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}},"u":{"j":{"l":{"i":{"s":{"u":{"z":{"e":{"b":{"%":0}}},"%":0},"a":{"n":{"%":0}}},"b":{"o":{"%":0}}},"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}},"č":{"p":{"%":0}},"s":{"e":{"v":{"%":0}}}},"r":{"o":{"%":0}}},"e":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}},"m":{"e":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}}},"h":{"a":{"j":{"l":{"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}}},"i":{"b":{"o":{"%":0}},"s":{"u":{"%":0}}}}}},"i":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}},"i":{"m":{"a":{"j":{"l":{"e":{"g":{"n":{"a":{"v":{"e":{"%":0}}}}},"m":{"h":{"o":{"p":{"%":0}}}}},"i":{"b":{"o":{"%":0}},"s":{"u":{"%":0}}}}}},"i":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}},"š":{"j":{"e":{"j":{"l":{"r":{"o":{"j":{"a":{"n":{"%":0}}},"%":0}},"e":{"č":{"p":{"j":{"a":{"n":{"%":0}}},"%":0}}}}}}}},"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}},"o":{"g":{"e":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}}},"j":{"e":{"j":{"l":{"r":{"o":{"%":0}},"e":{"č":{"p":{"%":0}}}}}}}}} diff --git a/src/transliterate/lj-nj/exceptions-nj.json b/src/transliterate/lj-nj/exceptions-nj.json new file mode 100644 index 0000000..dd54bc6 --- /dev/null +++ b/src/transliterate/lj-nj/exceptions-nj.json @@ -0,0 +1 @@ +{"%":{"a":{"j":{"n":{"a":{"b":{"%":0,"o":{"l":{"%":0}}},"g":{"o":{"d":{"%":0},"r":{"p":{"%":0}}},"z":{"i":{"%":0},"a":{"r":{"%":0}}},"a":{"n":{"%":0}}},"r":{"e":{"g":{"%":0}},"b":{"o":{"%":0},"z":{"o":{"v":{"%":0}}},"a":{"z":{"%":0}}},"t":{"s":{"d":{"o":{"%":0}},"o":{"r":{"p":{"z":{"a":{"r":{"%":0}}}}}}}},"h":{"o":{"%":0},"s":{"%":0}},"%":0},"k":{"%":0},"l":{"k":{"%":0,"a":{"n":{"%":0}},"d":{"o":{"%":0}},"s":{"%":0}},"s":{"d":{"o":{"%":0}},"a":{"z":{"%":0}}}},"n":{"z":{"o":{"%":0}}},"j":{"i":{"t":{"s":{"i":{"r":{"h":{"o":{"p":{"%":0}}}}}}}}},"t":{"s":{"i":{"r":{"p":{"%":0}}}}}},"d":{"ě":{"r":{"s":{"o":{"p":{"z":{"e":{"b":{"%":0}}},"e":{"n":{"%":0}},"%":0}},"%":0},"p":{"o":{"p":{"%":0}},"%":0}},"l":{"s":{"o":{"p":{"%":0,"d":{"ě":{"r":{"p":{"%":0}}}}}}}}},"%":0,"z":{"a":{"r":{"p":{"z":{"i":{"%":0}},"o":{"%":0}}}},"o":{"p":{"o":{"%":0},"s":{"%":0}}}},"o":{"v":{"a":{"n":{"%":0}}},"r":{"a":{"n":{"u":{"%":0}}}}},"a":{"v":{"b":{"o":{"%":0}},"d":{"o":{"%":0}},"u":{"%":0}},"z":{"%":0}},"u":{"r":{"t":{"o":{"%":0},"u":{"%":0}}},"t":{"s":{"%":0}}},"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"e":{"s":{"v":{"o":{"p":{"%":0}}}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}}},"ž":{"i":{"l":{"b":{"%":0}}},"a":{"r":{"d":{"z":{"a":{"r":{"%":0}}}}}},"o":{"m":{"u":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"s":{"u":{"%":0}}}}},"o":{"r":{"b":{"%":0}},"k":{"%":0},"v":{"%":0}},"e":{"z":{"ě":{"r":{"b":{"%":0}}},"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"t":{"ě":{"v":{"c":{"%":0}}},"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"r":{"u":{"d":{"%":0}},"o":{"k":{"z":{"i":{"%":0}},"%":0},"v":{"s":{"%":0}}},"t":{"u":{"j":{"%":0}}}},"b":{"e":{"r":{"g":{"%":0}}}},"m":{"u":{"g":{"i":{"%":0}}},"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0,"o":{"%":0}},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0,"ě":{"r":{"b":{"o":{"%":0}}}}},"s":{"a":{"j":{"%":0}},"e":{"r":{"v":{"%":0}}}},"l":{"e":{"j":{"%":0},"z":{"o":{"%":0}}},"u":{"j":{"t":{"%":0}}},"č":{"v":{"%":0}}},"p":{"i":{"l":{"%":0}},"r":{"s":{"%":0}}},"ž":{"o":{"l":{"s":{"o":{"%":0}}}},"ě":{"n":{"s":{"%":0}}}},"v":{"e":{"r":{"%":0}},"a":{"r":{"t":{"%":0}}},"r":{"č":{"a":{"z":{"%":0}},"%":0}}},"j":{"u":{"r":{"%":0}}},"č":{"y":{"t":{"s":{"%":0}}},"ě":{"s":{"%":0}}},"š":{"r":{"e":{"š":{"%":0}}}}},"j":{"l":{"a":{"d":{"%":0},"v":{"z":{"i":{"%":0}},"o":{"k":{"%":0,"a":{"n":{"%":0}}}},"u":{"%":0}},"p":{"o":{"k":{"%":0}},"u":{"k":{"%":0}},"s":{"%":0}},"k":{"e":{"č":{"%":0}}},"t":{"i":{"č":{"%":0}}}},"i":{"t":{"s":{"o":{"g":{"%":0}}}},"č":{"ě":{"l":{"%":0}},"u":{"m":{"%":0},"j":{"l":{"k":{"a":{"z":{"%":0}}}}}}},"d":{"ě":{"s":{"%":0}}},"ž":{"o":{"l":{"a":{"z":{"%":0}}}}},"j":{"a":{"č":{"%":0}}}}},"o":{"b":{"o":{"t":{"o":{"k":{"s":{"%":0}}}}}}}},"š":{"e":{"n":{"d":{"%":0}},"d":{"s":{"%":0}},"r":{"e":{"č":{"%":0}}}},"a":{"m":{"o":{"d":{"%":0,"o":{"%":0}}}},"d":{"g":{"o":{"n":{"o":{"%":0}}},"e":{"s":{"%":0}}}},"r":{"e":{"č":{"v":{"%":0}}}}},"i":{"d":{"o":{"g":{"%":0,"o":{"d":{"ž":{"a":{"k":{"%":0}}}},"v":{"o":{"n":{"%":0}}},"l":{"š":{"o":{"r":{"p":{"%":0}}}}},"k":{"a":{"s":{"v":{"%":0}}}}}}}},"l":{"z":{"i":{"%":0}}},"r":{"t":{"u":{"j":{"%":0},"%":0,"n":{"v":{"%":0}},"a":{"z":{"%":0}}}}},"v":{"%":0}},"ě":{"n":{"y":{"n":{"%":0}},"v":{"%":0}}}},"l":{"o":{"p":{"o":{"d":{"%":0}},"z":{"i":{"%":0}},"a":{"z":{"%":0}}},"m":{"%":0}}},"y":{"d":{"%":0,"o":{"p":{"s":{"o":{"g":{"%":0}}}}}},"g":{"e":{"n":{"k":{"%":0}}}},"t":{"s":{"o":{"l":{"i":{"m":{"%":0}}}},"u":{"p":{"%":0}}}},"h":{"a":{"n":{"o":{"m":{"%":0}}}}},"b":{"a":{"r":{"%":0}}}},"v":{"a":{"l":{"g":{"%":0}},"r":{"z":{"i":{"%":0}},"p":{"o":{"%":0}},"s":{"%":0},"u":{"%":0}}},"y":{"l":{"p":{"v":{"o":{"%":0}}}}},"ě":{"l":{"p":{"%":0}}}},"č":{"e":{"r":{"o":{"g":{"%":0}}},"č":{"%":0}},"o":{"t":{"u":{"%":0}}}},"i":{"%":0,"v":{"z":{"i":{"%":0}},"b":{"o":{"%":0}},"s":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"%":0,"b":{"o":{"%":0}}},"d":{"e":{"j":{"b":{"o":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}},"%":0},"z":{"a":{"r":{"%":0}}},"u":{"%":0}}}},"č":{"d":{"o":{"%":0}},"i":{"r":{"p":{"%":0}}},"u":{"k":{"e":{"t":{"u":{"%":0}}}}}},"s":{"%":0},"r":{"k":{"s":{"%":0}}}},"s":{"a":{"j":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"b":{"o":{"%":0}}}},"ě":{"p":{"%":0},"b":{"z":{"a":{"r":{"%":0}}}}},"e":{"l":{"ě":{"t":{"u":{"%":0}}}}}},"ě":{"m":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"%":0,"b":{"o":{"%":0}},"d":{"o":{"p":{"%":0}}},"i":{"r":{"p":{"%":0}}},"ě":{"r":{"p":{"%":0}}},"a":{"z":{"%":0}}},"l":{"k":{"%":0},"%":0,"p":{"a":{"z":{"%":0}}}},"c":{"o":{"%":0,"ě":{"r":{"p":{"%":0}}}},"ě":{"r":{"p":{"%":0}}}},"t":{"o":{"%":0},"s":{"%":0},"%":0}},"t":{"s":{"a":{"l":{"v":{"z":{"i":{"%":0}},"i":{"r":{"p":{"%":0}}}}}}},"u":{"j":{"l":{"%":0}}},"ě":{"l":{"%":0}},"o":{"s":{"%":0}}},"n":{"e":{"s":{"e":{"j":{"%":0}}},"m":{"ě":{"r":{"v":{"o":{"s":{"o":{"%":0}}}}}}}}},"r":{"a":{"v":{"a":{"k":{"%":0}},"o":{"v":{"i":{"p":{"%":0}}}}},"g":{"i":{"n":{"k":{"%":0}}}},"s":{"e":{"m":{"%":0}}},"p":{"d":{"o":{"e":{"j":{"n":{"g":{"o":{"b":{"o":{"%":0}}}}}}}}}},"č":{"v":{"o":{"%":0}}},"k":{"e":{"p":{"%":0}},"o":{"p":{"u":{"%":0}}}}},"v":{"k":{"s":{"o":{"%":0}}}},"č":{"o":{"%":0}}},"h":{"u":{"k":{"%":0}},"r":{"v":{"o":{"p":{"%":0}}}}},"z":{"u":{"k":{"%":0}},"a":{"l":{"%":0},"r":{"z":{"a":{"r":{"%":0}}}}}},"b":{"o":{"s":{"o":{"d":{"o":{"%":0}}}}},"a":{"d":{"o":{"p":{"u":{"%":0}}}}}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0},"i":{"v":{"%":0}}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"k":{"u":{"s":{"%":0}}},"m":{"e":{"t":{"a":{"z":{"%":0}}}}}}}},"h":{"a":{"j":{"n":{"a":{"b":{"%":0,"o":{"l":{"%":0}}},"d":{"%":0},"l":{"d":{"%":0},"b":{"a":{"j":{"%":0}}},"k":{"%":0,"a":{"n":{"%":0}},"d":{"o":{"%":0}},"s":{"%":0}},"s":{"d":{"o":{"%":0}},"a":{"z":{"%":0}}}},"g":{"o":{"d":{"%":0},"r":{"p":{"%":0}}},"z":{"i":{"%":0},"a":{"r":{"%":0}}},"a":{"n":{"%":0}}},"r":{"e":{"g":{"%":0}},"b":{"o":{"%":0},"z":{"o":{"v":{"%":0}}},"a":{"z":{"%":0}}},"t":{"s":{"d":{"o":{"%":0}},"o":{"r":{"p":{"z":{"a":{"r":{"%":0}}}}}}}},"h":{"o":{"%":0},"s":{"%":0}}},"t":{"r":{"g":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}}}},"k":{"%":0,"t":{"%":0}},"n":{"z":{"o":{"%":0}}},"p":{"%":0},"j":{"i":{"t":{"s":{"i":{"r":{"h":{"o":{"p":{"%":0}}}}}}}}},"s":{"%":0}},"s":{"a":{"b":{"%":0},"j":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"b":{"o":{"%":0}}}},"ě":{"l":{"p":{"%":0}},"p":{"%":0},"b":{"z":{"a":{"r":{"%":0}}}}},"e":{"l":{"ě":{"t":{"u":{"%":0}}}}}},"y":{"g":{"o":{"b":{"%":0}},"e":{"n":{"k":{"%":0}}}},"d":{"%":0,"o":{"p":{"s":{"o":{"g":{"%":0}}}}}},"t":{"s":{"o":{"l":{"i":{"m":{"%":0}}}},"u":{"p":{"%":0}}}},"h":{"a":{"n":{"o":{"m":{"%":0}}}}},"b":{"a":{"r":{"%":0}}}},"z":{"a":{"j":{"o":{"b":{"%":0,"o":{"d":{"o":{"v":{"%":0}}}}}}},"k":{"%":0},"l":{"%":0},"r":{"z":{"a":{"r":{"%":0}}}}},"ě":{"l":{"o":{"b":{"%":0}}}},"u":{"k":{"%":0}}},"o":{"r":{"b":{"%":0}},"k":{"%":0},"v":{"%":0}},"d":{"%":0,"z":{"a":{"r":{"p":{"z":{"i":{"%":0}},"o":{"%":0}}}},"o":{"p":{"o":{"%":0},"s":{"%":0}}}},"o":{"v":{"a":{"n":{"%":0}}},"r":{"a":{"n":{"u":{"%":0}}}}},"a":{"v":{"b":{"o":{"%":0}},"d":{"o":{"%":0}},"u":{"%":0}}},"u":{"r":{"t":{"o":{"%":0},"u":{"%":0}}},"t":{"s":{"%":0}}},"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}}},"l":{"o":{"p":{"o":{"d":{"%":0}},"z":{"i":{"%":0}},"a":{"z":{"%":0}}},"m":{"%":0}}},"e":{"r":{"u":{"d":{"%":0}},"o":{"k":{"z":{"i":{"%":0}},"%":0},"v":{"s":{"%":0}}},"t":{"u":{"j":{"%":0}}}},"z":{"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"b":{"e":{"r":{"g":{"%":0}}}},"m":{"u":{"g":{"i":{"%":0}}},"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0,"o":{"%":0}},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0,"ě":{"r":{"b":{"o":{"%":0}}}}},"s":{"a":{"j":{"%":0}},"e":{"j":{"%":0}}},"l":{"e":{"j":{"%":0},"z":{"o":{"%":0},"%":0}},"u":{"j":{"t":{"%":0}}},"č":{"v":{"%":0}}},"š":{"ě":{"k":{"%":0}},"r":{"e":{"š":{"%":0}}}},"ž":{"o":{"l":{"s":{"o":{"%":0}}}},"e":{"s":{"%":0}}},"č":{"e":{"p":{"%":0}}},"t":{"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"v":{"e":{"r":{"%":0}},"r":{"č":{"a":{"z":{"%":0}}}}}},"v":{"a":{"l":{"g":{"%":0}},"r":{"z":{"i":{"%":0}},"p":{"o":{"%":0}},"s":{"%":0},"u":{"%":0}}},"y":{"l":{"p":{"v":{"o":{"%":0}}}}},"ě":{"l":{"p":{"%":0}}}},"ě":{"l":{"o":{"g":{"%":0}},"k":{"%":0},"p":{"a":{"z":{"%":0}}}},"m":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"%":0,"b":{"o":{"%":0}},"d":{"o":{"p":{"%":0}}},"i":{"r":{"p":{"%":0}}},"ě":{"r":{"p":{"%":0}}},"a":{"z":{"%":0}}},"c":{"o":{"%":0,"ě":{"r":{"p":{"%":0}}}},"ě":{"r":{"p":{"%":0}}}},"t":{"o":{"%":0},"s":{"%":0},"%":0}},"č":{"e":{"r":{"o":{"g":{"%":0}}}},"o":{"t":{"u":{"%":0}}}},"j":{"l":{"i":{"t":{"s":{"o":{"g":{"%":0}}}},"č":{"ě":{"l":{"%":0}},"u":{"m":{"%":0},"j":{"l":{"k":{"a":{"z":{"%":0}}}}}}},"d":{"ě":{"s":{"%":0}}},"ž":{"o":{"l":{"a":{"z":{"%":0}}}}},"j":{"a":{"č":{"%":0}}}},"a":{"v":{"z":{"i":{"%":0}},"o":{"k":{"%":0,"a":{"n":{"%":0}}}},"u":{"%":0}},"p":{"o":{"k":{"%":0}},"u":{"k":{"%":0}},"s":{"%":0}},"k":{"e":{"č":{"%":0}}},"t":{"i":{"č":{"%":0}}}}},"o":{"b":{"o":{"t":{"o":{"k":{"s":{"%":0}}}}}}}},"i":{"%":0,"v":{"z":{"i":{"%":0}},"b":{"o":{"%":0}},"s":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"%":0,"b":{"o":{"%":0}}},"d":{"e":{"j":{"b":{"o":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}},"%":0},"z":{"a":{"r":{"%":0}}},"u":{"%":0}}}},"č":{"d":{"o":{"%":0}},"i":{"r":{"p":{"%":0}}},"u":{"k":{"e":{"t":{"u":{"%":0}}}}}},"r":{"k":{"s":{"%":0}}}},"t":{"s":{"a":{"l":{"v":{"z":{"i":{"%":0}},"i":{"r":{"p":{"%":0}}}}}}},"u":{"j":{"l":{"%":0}}},"o":{"s":{"%":0}}},"r":{"a":{"v":{"a":{"k":{"%":0}},"o":{"v":{"i":{"p":{"%":0}}}}},"g":{"i":{"n":{"k":{"%":0}}}},"s":{"e":{"m":{"%":0}}},"p":{"d":{"o":{"e":{"j":{"n":{"g":{"o":{"b":{"o":{"%":0}}}}}}}}}},"č":{"v":{"o":{"%":0}}},"k":{"e":{"p":{"%":0}},"o":{"p":{"u":{"%":0}}}}},"v":{"k":{"s":{"o":{"%":0}}}},"č":{"o":{"%":0}}},"h":{"u":{"k":{"%":0}},"r":{"v":{"o":{"p":{"%":0}}}}},"š":{"a":{"m":{"o":{"d":{"o":{"%":0}}}}},"i":{"v":{"%":0}},"e":{"r":{"e":{"č":{"%":0}}}}},"b":{"o":{"s":{"o":{"d":{"o":{"%":0}}}}},"a":{"d":{"o":{"p":{"u":{"%":0}}}}}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0},"i":{"v":{"%":0}}}},"n":{"e":{"m":{"ě":{"r":{"v":{"o":{"s":{"o":{"%":0}}}}}}}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"ž":{"a":{"r":{"d":{"z":{"a":{"r":{"%":0}}}}}},"o":{"m":{"u":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"s":{"u":{"%":0}}}}},"k":{"u":{"s":{"%":0}}},"m":{"e":{"t":{"a":{"z":{"%":0}}}}}}}}},"m":{"a":{"j":{"n":{"a":{"b":{"%":0,"o":{"l":{"%":0}}},"d":{"%":0},"l":{"d":{"%":0},"b":{"a":{"j":{"%":0}}},"k":{"%":0,"a":{"n":{"%":0}},"d":{"o":{"%":0}},"s":{"%":0}},"s":{"d":{"o":{"%":0}},"a":{"z":{"%":0}}}},"g":{"o":{"d":{"%":0},"r":{"p":{"%":0}}},"z":{"i":{"%":0},"a":{"r":{"%":0}}},"a":{"n":{"%":0}}},"r":{"e":{"g":{"%":0}},"b":{"o":{"%":0},"z":{"o":{"v":{"%":0}}},"a":{"z":{"%":0}}},"t":{"s":{"d":{"o":{"%":0}},"o":{"r":{"p":{"z":{"a":{"r":{"%":0}}}}}}}},"h":{"o":{"%":0},"s":{"%":0}}},"t":{"r":{"g":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}}}},"k":{"%":0,"t":{"%":0}},"n":{"z":{"o":{"%":0}}},"p":{"%":0},"j":{"i":{"t":{"s":{"i":{"r":{"h":{"o":{"p":{"%":0}}}}}}}}},"s":{"%":0}},"s":{"a":{"b":{"%":0},"j":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"b":{"o":{"%":0}}}},"ě":{"l":{"p":{"%":0}},"p":{"%":0},"b":{"z":{"a":{"r":{"%":0}}}}},"e":{"l":{"ě":{"t":{"u":{"%":0}}}}}},"y":{"g":{"o":{"b":{"%":0}},"e":{"n":{"k":{"%":0}}}},"d":{"%":0,"o":{"p":{"s":{"o":{"g":{"%":0}}}}}},"t":{"s":{"o":{"l":{"i":{"m":{"%":0}}}},"u":{"p":{"%":0}}}},"h":{"a":{"n":{"o":{"m":{"%":0}}}}},"b":{"a":{"r":{"%":0}}}},"z":{"a":{"j":{"o":{"b":{"%":0,"o":{"d":{"o":{"v":{"%":0}}}}}}},"k":{"%":0},"l":{"%":0},"r":{"z":{"a":{"r":{"%":0}}}}},"ě":{"l":{"o":{"b":{"%":0}}}},"u":{"k":{"%":0}}},"o":{"r":{"b":{"%":0}},"k":{"%":0},"v":{"%":0}},"d":{"%":0,"z":{"a":{"r":{"p":{"z":{"i":{"%":0}},"o":{"%":0}}}},"o":{"p":{"o":{"%":0},"s":{"%":0}}}},"o":{"v":{"a":{"n":{"%":0}}},"r":{"a":{"n":{"u":{"%":0}}}}},"a":{"v":{"b":{"o":{"%":0}},"d":{"o":{"%":0}},"u":{"%":0}}},"u":{"r":{"t":{"o":{"%":0},"u":{"%":0}}},"t":{"s":{"%":0}}},"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}}},"l":{"o":{"p":{"o":{"d":{"%":0}},"z":{"i":{"%":0}},"a":{"z":{"%":0}}},"m":{"%":0}}},"e":{"r":{"u":{"d":{"%":0}},"o":{"k":{"z":{"i":{"%":0}},"%":0},"v":{"s":{"%":0}}},"t":{"u":{"j":{"%":0}}}},"z":{"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"b":{"e":{"r":{"g":{"%":0}}}},"m":{"u":{"g":{"i":{"%":0}}},"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0,"o":{"%":0}},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0,"ě":{"r":{"b":{"o":{"%":0}}}}},"s":{"a":{"j":{"%":0}},"e":{"j":{"%":0}}},"l":{"e":{"j":{"%":0},"z":{"o":{"%":0},"%":0}},"u":{"j":{"t":{"%":0}}},"č":{"v":{"%":0}}},"š":{"ě":{"k":{"%":0}},"r":{"e":{"š":{"%":0}}}},"ž":{"o":{"l":{"s":{"o":{"%":0}}}},"e":{"s":{"%":0}}},"č":{"e":{"p":{"%":0}}},"t":{"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"v":{"e":{"r":{"%":0}},"r":{"č":{"a":{"z":{"%":0}}}}}},"v":{"a":{"l":{"g":{"%":0}},"r":{"z":{"i":{"%":0}},"p":{"o":{"%":0}},"s":{"%":0},"u":{"%":0}}},"y":{"l":{"p":{"v":{"o":{"%":0}}}}},"ě":{"l":{"p":{"%":0}}}},"ě":{"l":{"o":{"g":{"%":0}},"k":{"%":0},"p":{"a":{"z":{"%":0}}}},"m":{"z":{"i":{"%":0},"a":{"r":{"%":0}}},"%":0,"b":{"o":{"%":0}},"d":{"o":{"p":{"%":0}}},"i":{"r":{"p":{"%":0}}},"ě":{"r":{"p":{"%":0}}},"a":{"z":{"%":0}}},"c":{"o":{"%":0,"ě":{"r":{"p":{"%":0}}}},"ě":{"r":{"p":{"%":0}}}},"t":{"o":{"%":0},"s":{"%":0},"%":0}},"č":{"e":{"r":{"o":{"g":{"%":0}}}},"o":{"t":{"u":{"%":0}}}},"j":{"l":{"i":{"t":{"s":{"o":{"g":{"%":0}}}},"č":{"ě":{"l":{"%":0}},"u":{"m":{"%":0},"j":{"l":{"k":{"a":{"z":{"%":0}}}}}}},"d":{"ě":{"s":{"%":0}}},"ž":{"o":{"l":{"a":{"z":{"%":0}}}}},"j":{"a":{"č":{"%":0}}}},"a":{"v":{"z":{"i":{"%":0}},"o":{"k":{"%":0,"a":{"n":{"%":0}}}},"u":{"%":0}},"p":{"o":{"k":{"%":0}},"u":{"k":{"%":0}},"s":{"%":0}},"k":{"e":{"č":{"%":0}}},"t":{"i":{"č":{"%":0}}}}},"o":{"b":{"o":{"t":{"o":{"k":{"s":{"%":0}}}}}}}},"i":{"%":0,"v":{"z":{"i":{"%":0}},"b":{"o":{"%":0}},"s":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"%":0,"b":{"o":{"%":0}}},"d":{"e":{"j":{"b":{"o":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}},"%":0},"z":{"a":{"r":{"%":0}}},"u":{"%":0}}}},"č":{"d":{"o":{"%":0}},"i":{"r":{"p":{"%":0}}},"u":{"k":{"e":{"t":{"u":{"%":0}}}}}},"r":{"k":{"s":{"%":0}}}},"t":{"s":{"a":{"l":{"v":{"z":{"i":{"%":0}},"i":{"r":{"p":{"%":0}}}}}}},"u":{"j":{"l":{"%":0}}},"o":{"s":{"%":0}}},"r":{"a":{"v":{"a":{"k":{"%":0}},"o":{"v":{"i":{"p":{"%":0}}}}},"g":{"i":{"n":{"k":{"%":0}}}},"s":{"e":{"m":{"%":0}}},"p":{"d":{"o":{"e":{"j":{"n":{"g":{"o":{"b":{"o":{"%":0}}}}}}}}}},"č":{"v":{"o":{"%":0}}},"k":{"e":{"p":{"%":0}},"o":{"p":{"u":{"%":0}}}}},"v":{"k":{"s":{"o":{"%":0}}}},"č":{"o":{"%":0}}},"h":{"u":{"k":{"%":0}},"r":{"v":{"o":{"p":{"%":0}}}}},"š":{"a":{"m":{"o":{"d":{"o":{"%":0}}}}},"i":{"v":{"%":0}},"e":{"r":{"e":{"č":{"%":0}}}}},"b":{"o":{"s":{"o":{"d":{"o":{"%":0}}}}},"a":{"d":{"o":{"p":{"u":{"%":0}}}}}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0},"i":{"v":{"%":0}}}},"n":{"e":{"m":{"ě":{"r":{"v":{"o":{"s":{"o":{"%":0}}}}}}}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"ž":{"a":{"r":{"d":{"z":{"a":{"r":{"%":0}}}}}},"o":{"m":{"u":{"%":0},"e":{"n":{"u":{"%":0}}}},"l":{"s":{"u":{"%":0}}}}},"k":{"u":{"s":{"%":0}}},"m":{"e":{"t":{"a":{"z":{"%":0}}}}}}}},"e":{"j":{"n":{"d":{"ě":{"r":{"s":{"o":{"p":{"z":{"e":{"b":{"%":0}}},"e":{"n":{"%":0}},"%":0}},"%":0},"p":{"o":{"p":{"%":0}},"%":0}},"l":{"s":{"o":{"p":{"%":0,"d":{"ě":{"r":{"p":{"%":0}}}}}}}}},"%":0,"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"e":{"s":{"v":{"o":{"p":{"%":0}}}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}},"a":{"z":{"%":0}}},"ž":{"i":{"l":{"b":{"%":0}}}},"e":{"z":{"ě":{"r":{"b":{"%":0}}},"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"t":{"ě":{"v":{"c":{"%":0}}},"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"r":{"u":{"d":{"%":0}},"o":{"k":{"%":0},"v":{"s":{"%":0}}}},"b":{"e":{"r":{"g":{"%":0}}}},"s":{"a":{"j":{"%":0}},"e":{"r":{"v":{"%":0}}}},"l":{"e":{"j":{"%":0}},"u":{"j":{"t":{"%":0}}}},"m":{"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0},"p":{"i":{"l":{"%":0}},"r":{"s":{"%":0}}},"v":{"e":{"r":{"%":0}},"a":{"r":{"t":{"%":0}}},"r":{"č":{"%":0}}},"j":{"u":{"r":{"%":0}}},"ž":{"ě":{"n":{"s":{"%":0}}}},"č":{"y":{"t":{"s":{"%":0}}},"ě":{"s":{"%":0}}},"š":{"r":{"e":{"š":{"%":0}}}}},"j":{"l":{"a":{"d":{"%":0}}}},"š":{"e":{"n":{"d":{"%":0}},"d":{"s":{"%":0}}},"a":{"m":{"o":{"d":{"%":0}}},"d":{"g":{"o":{"n":{"o":{"%":0}}},"e":{"s":{"%":0}}}},"r":{"e":{"č":{"v":{"%":0}}}}},"i":{"d":{"o":{"g":{"%":0,"o":{"d":{"ž":{"a":{"k":{"%":0}}}},"l":{"š":{"o":{"r":{"p":{"%":0}}}}},"k":{"a":{"s":{"v":{"%":0}}}}}}}},"l":{"z":{"i":{"%":0}}},"r":{"t":{"u":{"j":{"%":0},"%":0,"n":{"v":{"%":0}},"a":{"z":{"%":0}}}}}},"ě":{"n":{"y":{"n":{"%":0}},"v":{"%":0}}}},"a":{"r":{"e":{"g":{"%":0}},"%":0},"t":{"s":{"i":{"r":{"p":{"%":0}}}}}},"i":{"%":0,"s":{"%":0}},"n":{"e":{"s":{"e":{"j":{"%":0}}}}},"ě":{"l":{"k":{"%":0},"%":0},"t":{"s":{"%":0},"%":0}},"o":{"k":{"%":0}},"t":{"ě":{"l":{"%":0}}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"v":{"a":{"r":{"u":{"%":0}}}}}}}},"i":{"m":{"a":{"j":{"n":{"a":{"b":{"%":0,"o":{"l":{"%":0}}},"d":{"%":0},"l":{"d":{"%":0},"b":{"a":{"j":{"%":0}}}},"r":{"e":{"g":{"%":0}}},"t":{"r":{"g":{"%":0}},"s":{"i":{"r":{"p":{"%":0}}}}},"k":{"%":0,"t":{"%":0}},"p":{"%":0},"s":{"%":0}},"s":{"a":{"b":{"%":0}},"ě":{"l":{"p":{"%":0}},"p":{"%":0}}},"y":{"g":{"o":{"b":{"%":0}},"e":{"n":{"k":{"%":0}}}},"d":{"%":0,"o":{"p":{"s":{"o":{"g":{"%":0}}}}}},"t":{"s":{"o":{"l":{"i":{"m":{"%":0}}}},"u":{"p":{"%":0}}}},"h":{"a":{"n":{"o":{"m":{"%":0}}}}},"b":{"a":{"r":{"%":0}}}},"z":{"a":{"j":{"o":{"b":{"%":0,"o":{"d":{"o":{"v":{"%":0}}}}}}},"k":{"%":0},"l":{"%":0}},"ě":{"l":{"o":{"b":{"%":0}}}},"u":{"k":{"%":0}}},"o":{"r":{"b":{"%":0}},"k":{"%":0},"v":{"%":0}},"d":{"%":0,"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"u":{"t":{"s":{"%":0}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}}},"e":{"r":{"u":{"d":{"%":0}},"t":{"u":{"j":{"%":0}}},"o":{"k":{"%":0},"v":{"s":{"%":0}}}},"z":{"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"b":{"e":{"r":{"g":{"%":0}}}},"m":{"u":{"g":{"i":{"%":0}}},"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0},"s":{"a":{"j":{"%":0}},"e":{"j":{"%":0}}},"l":{"e":{"j":{"%":0},"z":{"%":0}},"u":{"j":{"t":{"%":0}}}},"š":{"ě":{"k":{"%":0}},"r":{"e":{"š":{"%":0}}}},"č":{"e":{"p":{"%":0}}},"t":{"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"v":{"e":{"r":{"%":0}}},"ž":{"e":{"s":{"%":0}}}},"v":{"a":{"l":{"g":{"%":0}},"r":{"u":{"%":0}}},"ě":{"l":{"p":{"%":0}}}},"ě":{"l":{"o":{"g":{"%":0}},"k":{"%":0}},"t":{"s":{"%":0},"%":0}},"č":{"e":{"r":{"o":{"g":{"%":0}}}}},"j":{"l":{"i":{"t":{"s":{"o":{"g":{"%":0}}}},"č":{"ě":{"l":{"%":0}},"u":{"m":{"%":0},"j":{"l":{"k":{"a":{"z":{"%":0}}}}}}},"d":{"ě":{"s":{"%":0}}},"ž":{"o":{"l":{"a":{"z":{"%":0}}}}},"j":{"a":{"č":{"%":0}}}},"a":{"p":{"o":{"k":{"%":0}},"u":{"k":{"%":0}},"s":{"%":0}},"v":{"o":{"k":{"%":0,"a":{"n":{"%":0}}}}},"k":{"e":{"č":{"%":0}}},"t":{"i":{"č":{"%":0}}}}},"o":{"b":{"o":{"t":{"o":{"k":{"s":{"%":0}}}}}}}},"i":{"%":0,"r":{"k":{"s":{"%":0}}},"v":{"s":{"%":0}}},"r":{"a":{"v":{"a":{"k":{"%":0}},"o":{"v":{"i":{"p":{"%":0}}}}},"g":{"i":{"n":{"k":{"%":0}}}},"s":{"e":{"m":{"%":0}}},"č":{"v":{"o":{"%":0}}},"k":{"e":{"p":{"%":0}}}}},"h":{"u":{"k":{"%":0}},"r":{"v":{"o":{"p":{"%":0}}}}},"t":{"u":{"j":{"l":{"%":0}}},"o":{"s":{"%":0}}},"l":{"o":{"m":{"%":0}}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0},"i":{"v":{"%":0}}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"k":{"u":{"s":{"%":0}}},"š":{"i":{"v":{"%":0}},"e":{"r":{"e":{"č":{"%":0}}}}}}}}}},"e":{"j":{"n":{"a":{"b":{"%":0,"o":{"l":{"%":0}}},"r":{"e":{"g":{"%":0}},"%":0},"k":{"%":0},"p":{"%":0},"t":{"s":{"i":{"r":{"p":{"%":0}}}}},"s":{"%":0}},"d":{"ě":{"r":{"s":{"o":{"p":{"z":{"e":{"b":{"%":0}}},"e":{"n":{"%":0}},"%":0}},"%":0},"p":{"o":{"p":{"%":0}},"%":0}},"l":{"s":{"o":{"p":{"%":0,"d":{"ě":{"r":{"p":{"%":0}}}}}}}}},"%":0,"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"e":{"s":{"v":{"o":{"p":{"%":0}}}}},"u":{"t":{"s":{"%":0}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}},"a":{"z":{"%":0}}},"ž":{"i":{"l":{"b":{"%":0}}}},"y":{"g":{"o":{"b":{"%":0}},"e":{"n":{"k":{"%":0}}}},"d":{"%":0,"o":{"p":{"s":{"o":{"g":{"%":0}}}}}},"t":{"s":{"o":{"l":{"i":{"m":{"%":0}}}},"u":{"p":{"%":0}}}},"h":{"a":{"n":{"o":{"m":{"%":0}}}}},"b":{"a":{"r":{"%":0}}}},"o":{"r":{"b":{"%":0}},"t":{"j":{"a":{"n":{"%":0}}},"%":0}},"j":{"l":{"a":{"d":{"%":0},"p":{"o":{"k":{"%":0}},"u":{"k":{"%":0}},"s":{"%":0}},"v":{"o":{"k":{"%":0,"a":{"n":{"%":0}}}}},"k":{"e":{"č":{"%":0}}},"t":{"i":{"č":{"%":0}}}},"i":{"t":{"s":{"o":{"g":{"%":0}}}},"č":{"ě":{"l":{"%":0}},"u":{"m":{"%":0},"j":{"l":{"k":{"a":{"z":{"%":0}}}}}}},"d":{"ě":{"s":{"%":0}}},"ž":{"o":{"l":{"a":{"z":{"%":0}}}}},"j":{"a":{"č":{"%":0}}}}},"o":{"b":{"o":{"t":{"o":{"k":{"s":{"%":0}}}}}}}},"š":{"e":{"n":{"d":{"%":0}},"d":{"s":{"%":0}},"r":{"e":{"č":{"%":0}}}},"a":{"m":{"o":{"d":{"%":0}}},"d":{"g":{"o":{"n":{"o":{"%":0}}},"e":{"s":{"%":0}}}},"r":{"e":{"č":{"v":{"%":0}}}}},"i":{"d":{"o":{"g":{"%":0,"o":{"d":{"ž":{"a":{"k":{"%":0}}}},"v":{"o":{"n":{"%":0}}},"l":{"š":{"o":{"r":{"p":{"%":0}}}}},"k":{"a":{"s":{"v":{"%":0}}}}}}}},"l":{"z":{"i":{"%":0}}},"r":{"t":{"u":{"j":{"%":0},"%":0,"n":{"v":{"%":0}},"a":{"z":{"%":0}}}}},"v":{"%":0}},"ě":{"n":{"y":{"n":{"%":0}},"v":{"%":0}}}},"v":{"a":{"l":{"g":{"%":0}},"r":{"u":{"%":0}}},"ě":{"l":{"p":{"%":0}}}},"e":{"z":{"e":{"l":{"g":{"%":0}}}},"b":{"e":{"r":{"g":{"%":0}}}},"m":{"u":{"g":{"i":{"%":0}}},"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0,"j":{"a":{"n":{"%":0}}}},"s":{"a":{"j":{"%":0}}},"l":{"e":{"j":{"%":0}}},"r":{"t":{"u":{"j":{"%":0}}},"o":{"k":{"%":0},"v":{"s":{"%":0}}}},"t":{"j":{"a":{"n":{"%":0}}},"s":{"r":{"p":{"%":0}}},"%":0},"v":{"e":{"r":{"%":0}}},"š":{"r":{"e":{"š":{"%":0}}}}},"č":{"e":{"r":{"o":{"g":{"%":0}}},"č":{"%":0}}},"i":{"%":0,"s":{"%":0},"r":{"k":{"s":{"%":0}}},"v":{"s":{"%":0}}},"n":{"e":{"s":{"e":{"j":{"%":0}}}}},"r":{"a":{"v":{"a":{"k":{"%":0}},"o":{"v":{"i":{"p":{"%":0}}}}},"g":{"i":{"n":{"k":{"%":0}}}},"s":{"e":{"m":{"%":0}}},"č":{"v":{"o":{"%":0}}},"k":{"e":{"p":{"%":0}}}}},"h":{"u":{"k":{"%":0}},"r":{"v":{"o":{"p":{"%":0}}}}},"z":{"u":{"k":{"%":0}},"a":{"l":{"%":0}}},"t":{"u":{"j":{"l":{"%":0}}},"ě":{"l":{"%":0}},"o":{"s":{"%":0}}},"ě":{"l":{"%":0},"t":{"s":{"%":0},"%":0}},"l":{"o":{"m":{"%":0}}},"u":{"j":{"a":{"n":{"%":0}}},"%":0,"k":{"i":{"v":{"%":0}}}},"g":{"o":{"%":0}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"s":{"ě":{"p":{"%":0}}},"k":{"u":{"s":{"%":0}}}}}},"u":{"j":{"n":{"e":{"z":{"ě":{"r":{"b":{"%":0}}},"e":{"l":{"g":{"%":0}},"v":{"%":0}}},"t":{"ě":{"v":{"c":{"%":0}}},"s":{"r":{"p":{"%":0}}},"u":{"r":{"t":{"%":0}}}},"r":{"u":{"d":{"%":0}},"o":{"k":{"%":0},"v":{"s":{"%":0}}}},"b":{"e":{"r":{"g":{"%":0}}}},"s":{"a":{"j":{"%":0}},"e":{"r":{"v":{"%":0}}}},"l":{"e":{"j":{"%":0}},"u":{"j":{"t":{"%":0}}}},"m":{"č":{"e":{"j":{"%":0}}},"a":{"k":{"%":0},"l":{"p":{"%":0}}},"e":{"r":{"k":{"%":0},"%":0}},"%":0},"p":{"i":{"l":{"%":0}},"r":{"s":{"%":0}}},"v":{"e":{"r":{"%":0}},"a":{"r":{"t":{"%":0}}},"r":{"č":{"%":0}}},"j":{"u":{"r":{"%":0}}},"ž":{"ě":{"n":{"s":{"%":0}}}},"č":{"y":{"t":{"s":{"%":0}}},"ě":{"s":{"%":0}}},"š":{"r":{"e":{"š":{"%":0}}}}},"d":{"%":0,"l":{"o":{"p":{"%":0,"o":{"p":{"%":0}}}}},"y":{"t":{"%":0}},"k":{"i":{"l":{"e":{"v":{"%":0}}}}}},"a":{"r":{"e":{"g":{"%":0}}},"t":{"s":{"i":{"r":{"p":{"%":0}}}}}},"i":{"%":0},"ě":{"l":{"k":{"%":0}},"t":{"s":{"%":0},"%":0}},"o":{"k":{"%":0}},"g":{"o":{"%":0}},"u":{"k":{"o":{"%":0}}},"p":{"%":0,"u":{"t":{"s":{"%":0}}}},"v":{"a":{"r":{"u":{"%":0}}}}}}}}} diff --git a/src/transliterate/lj-nj/findTrieWord.ts b/src/transliterate/lj-nj/findTrieWord.ts new file mode 100644 index 0000000..51484d9 --- /dev/null +++ b/src/transliterate/lj-nj/findTrieWord.ts @@ -0,0 +1,37 @@ +export interface Dict { + [key: string]: Dict | number; +} + +export const ENDS = 1; +export const WHOLE = 0; +export const MISMATCH = -1; + +export 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; +} + +export function findTriePosition(endings: Dict, word: string): number { + const length = word.length; + let node: Dict | number = endings; + 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/lj-nj/index.ts b/src/transliterate/lj-nj/index.ts new file mode 100644 index 0000000..b4ef3d9 --- /dev/null +++ b/src/transliterate/lj-nj/index.ts @@ -0,0 +1,38 @@ +import ljeExceptions from './exceptions-lj.json'; +import njeExceptions from './exceptions-nj.json'; +import njeEndings from './endings-nje.json'; +import { + ENDS, + MISMATCH, + findTrieWord, + findTriePosition, + WHOLE, +} from './findTrieWord'; + +/** + * Check whether we should soften lj to ĺj + */ +export function ljeCheck(word: string) { + return findTrieWord(word, ljeExceptions) === WHOLE; +} + +/** + * Check whether we should soften lj to ĺj + */ +export function ljePosition(word: string) { + return word.lastIndexOf('lj'); +} + +/** + * Check whether we should soften nj to ńj + */ +export function njeCheck(word: string) { + return ( + findTrieWord(word, njeEndings) === ENDS && + findTrieWord(word, njeExceptions) === MISMATCH + ); +} + +export function njePosition(word: string): number { + return findTriePosition(njeEndings, word); +} diff --git a/src/transliterate/nje/nje.test.ts b/src/transliterate/lj-nj/nje.test.ts similarity index 100% rename from src/transliterate/nje/nje.test.ts rename to src/transliterate/lj-nj/nje.test.ts diff --git a/src/transliterate/nje/Dict.ts b/src/transliterate/nje/Dict.ts deleted file mode 100644 index 7ada580..0000000 --- a/src/transliterate/nje/Dict.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface Dict { - [key: string]: Dict | number; -} diff --git a/src/transliterate/nje/exceptions.ts b/src/transliterate/nje/exceptions.ts deleted file mode 100644 index c9c7fff..0000000 --- a/src/transliterate/nje/exceptions.ts +++ /dev/null @@ -1,1544 +0,0 @@ -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 deleted file mode 100644 index 3af8a56..0000000 --- a/src/transliterate/nje/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -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/rules.ts b/src/transliterate/nje/rules.ts deleted file mode 100644 index c105b8f..0000000 --- a/src/transliterate/nje/rules.ts +++ /dev/null @@ -1,12 +0,0 @@ -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 6afac5a..46f8818 100644 --- a/src/transliterate/transliterate.ts +++ b/src/transliterate/transliterate.ts @@ -1,5 +1,5 @@ import { Glagolitic } from '../constants'; -import { njeCheck, njePosition } from './nje'; +import { ljeCheck, ljePosition, njeCheck, njePosition } from './lj-nj'; export enum TransliterationType { Latin = 1, @@ -49,7 +49,11 @@ function transliterateWord( iW = '%' + iW + '%'; let OrigW = iW; iW = nmsify(iW.toLowerCase()); - iW = softenNjIfNeeded(iW); + { + const siW = standardize(iW); + iW = softenLjIfNeeded(iW, siW); + iW = softenNjIfNeeded(iW, siW); + } // 'ŕ' remains between two consonants, in other cases is replaced by 'ř' iW = iW.replace(/ŕ/g, 'ř'); const aPos = iW.indexOf('ř'); @@ -432,7 +436,8 @@ function transliterateWord( iW = iW.replace(/[dḓ]/g, Glagolitic.Dobro); iW = iW.replace(/dž/g, Glagolitic.Dobro + Glagolitic.Zhivete); iW = iW.replace(/đ/g, Glagolitic.Djervi); - iW = iW.replace(/[eė]/g, Glagolitic.Yestu); + iW = iW.replace(/e/g, Glagolitic.Yestu); + iW = iW.replace(/ė/g, Glagolitic.Yeri); iW = iW.replace(/ę/g, Glagolitic.Small_Yus); iW = iW.replace(/[êě]/g, Glagolitic.Yati); iW = iW.replace(/f/g, Glagolitic.Fritu); @@ -734,8 +739,20 @@ function standardize(iW: string): string { .replace(/ź/g, 'z'); } -function softenNjIfNeeded(iW: string): string { - const siW = standardize(iW); +function softenLjIfNeeded(iW: string, siW: string): string { + if (!ljeCheck(siW)) { + return iW; + } + + const lastLj = ljePosition(iW); + if (lastLj < 0) { + return iW; + } + + return iW.substring(0, lastLj) + 'ľj' + iW.substring(lastLj + 2); +} + +function softenNjIfNeeded(iW: string, siW: string): string { if (!njeCheck(siW)) { return iW; }