henkan 2.0.4 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +789 -736
- package/dist/index.cjs.js.map +3 -3
- package/dist/index.mjs +781 -730
- package/dist/index.mjs.map +3 -3
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/types.d.ts +93 -19
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils.d.ts +55 -28
- package/dist/types/utils.d.ts.map +1 -1
- package/docs/api/README.md +12 -1
- package/docs/api/functions/capitalizeString.md +1 -1
- package/docs/api/functions/convertJMdict.md +1 -1
- package/docs/api/functions/convertJawiktionaryAsync.md +1 -1
- package/docs/api/functions/convertJawiktionarySync.md +1 -1
- package/docs/api/functions/convertKanjiDic.md +1 -1
- package/docs/api/functions/convertKradFile.md +1 -1
- package/docs/api/functions/convertRadkFile.md +1 -1
- package/docs/api/functions/convertTanakaCorpus.md +1 -1
- package/docs/api/functions/convertTanakaCorpusWithFurigana.md +1 -1
- package/docs/api/functions/createEntryMaps.md +59 -0
- package/docs/api/functions/generateAnkiNote.md +1 -1
- package/docs/api/functions/generateAnkiNotesFile.md +1 -1
- package/docs/api/functions/getKanji.md +10 -10
- package/docs/api/functions/getKanjiExtended.md +8 -8
- package/docs/api/functions/getValidForms.md +39 -0
- package/docs/api/functions/getWord.md +11 -11
- package/docs/api/functions/getWordDefinitions.md +1 -1
- package/docs/api/functions/getWordDefinitionsWithFurigana.md +1 -1
- package/docs/api/functions/isObjectArray.md +27 -0
- package/docs/api/functions/isStringArray.md +2 -2
- package/docs/api/functions/isValidArrayWithFirstElement.md +2 -2
- package/docs/api/functions/shuffleArray.md +1 -1
- package/docs/api/interfaces/DefaultNoteInfo.md +4 -4
- package/docs/api/interfaces/Definition.md +4 -4
- package/docs/api/interfaces/DictKanji.md +5 -5
- package/docs/api/interfaces/DictKanjiForm.md +4 -4
- package/docs/api/interfaces/DictKanjiMisc.md +5 -5
- package/docs/api/interfaces/DictKanjiReading.md +3 -3
- package/docs/api/interfaces/DictKanjiReadingMeaning.md +3 -3
- package/docs/api/interfaces/DictKanjiReadingMeaningGroup.md +3 -3
- package/docs/api/interfaces/DictKanjiWithRadicals.md +3 -3
- package/docs/api/interfaces/DictMeaning.md +15 -15
- package/docs/api/interfaces/DictRadical.md +4 -4
- package/docs/api/interfaces/DictReading.md +5 -5
- package/docs/api/interfaces/DictWord.md +9 -9
- package/docs/api/interfaces/EntryMaps.md +83 -0
- package/docs/api/interfaces/ExamplePart.md +8 -8
- package/docs/api/interfaces/GlossSpecificNumber.md +4 -4
- package/docs/api/interfaces/Grammar.md +15 -15
- package/docs/api/interfaces/GrammarMeaning.md +3 -3
- package/docs/api/interfaces/JaWiktionaryEntry.md +8 -20
- package/docs/api/interfaces/Kana.md +11 -11
- package/docs/api/interfaces/Kanji.md +24 -24
- package/docs/api/interfaces/KanjiComponent.md +3 -3
- package/docs/api/interfaces/KanjiForm.md +4 -4
- package/docs/api/interfaces/NoteAndTag.md +3 -3
- package/docs/api/interfaces/NoteHeaderKeys.md +7 -7
- package/docs/api/interfaces/Phrase.md +5 -5
- package/docs/api/interfaces/Radical.md +16 -16
- package/docs/api/interfaces/Reading.md +5 -5
- package/docs/api/interfaces/ReadingsKanjiFormsPair.md +31 -0
- package/docs/api/interfaces/ResultEntry.md +7 -7
- package/docs/api/interfaces/TanakaExample.md +7 -7
- package/docs/api/interfaces/Translation.md +3 -3
- package/docs/api/interfaces/UsefulRegExps.md +8 -8
- package/docs/api/interfaces/Word.md +15 -15
- package/docs/api/interfaces/WordDefinitionPair.md +4 -4
- package/docs/api/type-aliases/Dict.md +1 -1
- package/docs/api/type-aliases/DictTranslation.md +1 -1
- package/docs/api/type-aliases/EntryType.md +1 -1
- package/docs/api/type-aliases/KanjiEntryMap.md +13 -0
- package/docs/api/type-aliases/KanjiSVGMap.md +13 -0
- package/docs/api/type-aliases/KanjiWordsMap.md +13 -0
- package/docs/api/type-aliases/Result.md +1 -1
- package/docs/api/type-aliases/StringNumber.md +13 -0
- package/docs/api/type-aliases/WordDefinitionsMap.md +13 -0
- package/docs/api/type-aliases/WordExamplesMap.md +13 -0
- package/docs/api/type-aliases/WordIDEntryMap.md +13 -0
- package/package.json +4 -4
- package/docs/api/functions/isValidArray.md +0 -27
package/dist/index.cjs.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/constants.ts", "../src/utils.ts"],
|
|
4
|
-
"sourcesContent": ["export type * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./utils\";\n", "import { NoteHeaderKeys, POS, UsefulRegExps } from \"./types\";\n\nexport const regexps: UsefulRegExps = {\n hiragana: /[\\u{3040}-\\u{309F}]/u,\n katakana: /[\\u{30A0}-\\u{30FF}]/u,\n kanji: /\\p{Script=Han}+/u,\n regExChars: /[-\\/\\\\^$*+?.()|[\\]{}]/,\n tanakaID: /#ID=(?<id>\\d+_\\d+)$/,\n tanakaPart:\n /(?<base>[^()\\[\\]\\{\\}\\s]+)(?:\\((?<reading>[\\S]+)\\))?(?:\\[(?<glossnum>[\\S]+)\\])?(?:\\{(?<inflection>[\\S]+)\\})?/,\n tanakaReferenceID: /#(?<entryid>[\\d]+)/,\n};\n\nexport const noteHeaderKeys: NoteHeaderKeys = {\n separator: \"#separator:tab\",\n html: \"#html:true\",\n guid: \"#guid column:\",\n notetype: \"#notetype column:\",\n deck: \"#deck column:\",\n tags: \"#tags column:\",\n};\n\nexport const notSearchedForms: Set<string> = new Set<string>([\n \"search-only kana form\",\n \"Search-only kana form\",\n \"rarely used kana form\",\n \"Rarely used kana form\",\n \"out-dated or obsolete kana usage\",\n \"Out-dated or obsolete kana usage\",\n \"search-only kanji form\",\n \"Search-only kanji form\",\n \"rarely-used kanji form\",\n \"Rarely-used kanji form\",\n \"out-dated kanji\",\n \"Out-dated kanji form\",\n \"out-dated kanji or kanji usage\",\n \"word containing out-dated kanji or kanji usage\",\n \"Out-dated kanji or kanji usage\",\n]);\n\nexport const noteMap: Map<\n string,\n readonly [string, string] | readonly [string, string, POS | readonly POS[]]\n> = new Map<\n string,\n readonly [string, string] | readonly [string, string, POS | readonly POS[]]\n>([\n [\"brazilian\", [\"dialect::brazilian\", \"Dialect: Brazilian\"]],\n [\"hokkaido-ben\", [\"dialect::hokkaido-ben\", \"Dialect: Hokkaid\u014D-ben\"]],\n [\"kansai-ben\", [\"dialect::kansai-ben\", \"Dialect: Kansai-ben\"]],\n [\"kantou-ben\", [\"dialect::kantou-ben\", \"Dialect: Kant\u014D-ben\"]],\n [\"kyoto-ben\", [\"dialect::kyoto-ben\", \"Dialect: Ky\u014Dto-ben\"]],\n [\"kyuushuu-ben\", [\"dialect::kyuushuu-ben\", \"Dialect: Ky\u016Bsh\u016B-ben\"]],\n [\"nagano-ben\", [\"dialect::nagano-ben\", \"Dialect: Nagano-ben\"]],\n [\"ryuukyuu-ben\", [\"dialect::ryuukyuu-ben\", \"Dialect: Ry\u016Bky\u016B-ben\"]],\n [\"osaka-ben\", [\"dialect::osaka-ben\", \"Dialect: \u014Csaka-ben\"]],\n [\"touhoku-ben\", [\"dialect::touhoku-ben\", \"Dialect: T\u014Dhoku-ben\"]],\n [\"tosa-ben\", [\"dialect::tosa-ben\", \"Dialect: Tosa-ben\"]],\n [\"tsugaru-ben\", [\"dialect::tsugaru-ben\", \"Dialect: Tsugaru-ben\"]],\n [\"aichi dialect\", [\"dialect::aichi\", \"Dialect: Aichi\"]],\n [\"tochigi dialect\", [\"dialect::tochigi\", \"Dialect: Tochigi\"]],\n [\"adjective (keiyoushi)\", [\"adjective::i\", \"\u3044-adjective\", \"\u5F62\u5BB9\u8A5E\"]],\n [\"'taru' adjective\", [\"adjective::taru\", \"\u305F\u308B-adjective\", \"\u5F62\u5BB9\u52D5\u8A5E\"]],\n [\n \"noun (common) (futsuumeishi)\",\n [\"common_noun\", \"Common noun\", [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\"]],\n ],\n [\n \"pre-noun adjectival (rentaishi)\",\n [\"pre-noun_adjectival\", \"Pre-noun adjectival\", \"\u9023\u4F53\u8A5E\"],\n ],\n [\n \"noun or verb acting prenominally\",\n [\"noun_or_verb_acting_prenominally\", \"Noun or verb acting prenominally\"],\n ],\n [\"pronoun\", [\"pronoun\", \"Pronoun\", [\"\u4EE3\u540D\u8A5E\", \"\u4EBA\u79F0\u4EE3\u540D\u8A5E\"]]],\n [\"adverb (fukushi)\", [\"adverb\", \"Adverb\", \"\u526F\u8A5E\"]],\n [\n \"adverb taking the 'to' particle\",\n [\"takes::to\", \"Adverb taking the '\u3068' particle\", \"\u526F\u8A5E\"],\n ],\n [\n \"onomatopoeic or mimetic word\",\n [\"onomatopoeic_or_mimetic\", \"Onomatopoeic or mimetic word\"],\n ],\n [\n \"nouns which may take the genitive case particle 'no'\",\n [\"takes::no\", \"May take the '\u306E' particle\", [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\"]],\n ],\n [\n \"noun or participle which takes the aux. verb suru\",\n [\"takes::suru\", \"Takes the aux. verb '\u3059\u308B'\", \"\u52D5\u8A5E\"],\n ],\n [\"suru verb - irregular\", [\"suru_verb\", \"Irregular \u3059\u308B-verb\", \"\u52D5\u8A5E\"]],\n [\"suru verb - special class\", [\"suru_verb\", \"Special \u3059\u308B-verb\", \"\u52D5\u8A5E\"]],\n [\"ichidan verb\", [\"ichidan_verb\", \"Ichidan verb\", \"\u52D5\u8A5E\"]],\n [\n \"godan verb with 'ku' ending\",\n [\"godan::ku::verb\", \"Godan verb with '\u304F' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'gu' ending\",\n [\"godan::gu::verb\", \"Godan verb with '\u3050' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'u' ending\",\n [\"godan::u::verb\", \"Godan verb with '\u3046' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'tsu' ending\",\n [\"godan::tsu::verb\", \"Godan verb with '\u3064' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'ru' ending\",\n [\"godan::ru::verb\", \"Godan verb with '\u308B' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'nu' ending\",\n [\"godan::nu::verb\", \"Godan verb with '\u306C' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'mu' ending\",\n [\"godan::mu::verb\", \"Godan verb with '\u3080' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'bu' ending\",\n [\"godan::bu::verb\", \"Godan verb with '\u3076' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'su' ending\",\n [\"godan::su::verb\", \"Godan verb with '\u3059' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'u' ending (special class)\",\n [\n \"godan::u::irregular_verb\",\n \"Irregular godan verb with '\u3046' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb with 'ru' ending (irregular verb)\",\n [\n \"godan::ru::irregular_verb\",\n \"Irregular godan verb with '\u308B' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb - -aru special class\",\n [\n \"godan::aru::irregular_verb\",\n \"Irregular godan verb with '-\u3042\u308B' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb - iku/yuku special class\",\n [\n \"godan::iku_yuku::irregular_verb\",\n \"Irregular godan verb with '\u3044\u304F' or '\u3086\u304F' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"irregular nu verb\",\n [\n \"godan::nu::irregular_verb\",\n \"Irregular godan verb with '\u306C' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\"kuru verb - special class\", [\"kuru_verb\", \"Special '\u304F\u308B' verb\", \"\u52D5\u8A5E\"]],\n [\"transitive verb\", [\"transitive_verb\", \"Transitive verb\", \"\u52D5\u8A5E\"]],\n [\"intransitive verb\", [\"intransitive_verb\", \"Intransitive verb\", \"\u52D5\u8A5E\"]],\n [\"auxiliary verb\", [\"auxiliary_verb\", \"Auxiliary verb\", [\"\u52D5\u8A5E\", \"\u52A9\u52D5\u8A5E\"]]],\n [\n \"auxiliary adjective\",\n [\"adjective::auxiliary\", \"Auxiliary adjective\", [\"\u52A9\u8A5E\", \"\u52A9\u52D5\u8A5E\"]],\n ],\n [\"auxiliary\", [\"auxiliary\", \"Auxiliary\", [\"\u52A9\u8A5E\", \"\u52A9\u52D5\u8A5E\"]]],\n [\"after a verb\", [\"after::verb\", \"After a verb\"]],\n [\n \"after the -te form of a verb\",\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"after te-form of verbs and adj.\",\n [\n \"after::verb_or_adjective_te_form\",\n \"After the '\u3066' form of a verb or an adjective\",\n ],\n ],\n [\n \"after the -masu stem of a verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after -masu stem of verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after masu stem of verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after -masu stem or adj. stem\",\n [\n \"after::masu_or_adjective_stem\",\n \"After the '-\u307E\u3059' stem of a verb or an adjective stem\",\n ],\n ],\n [\n \"after a noun or the -masu stem of a verb\",\n [\"after::noun_or_masu_stem\", \"After a noun or the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after the plain past form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after present form of a verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after the dictionary form of a verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after past form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after volitional form of verb\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\n \"after the past tense form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\"after adjective stem\", [\"after::adjective_stem\", \"After adjective stem\"]],\n [\"with neg. sentence\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with. neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"with a verb in negative form\",\n [\"with::negative_verb\", \"With negative verb\"],\n ],\n [\"with verb in the negative\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with negative verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"after negative base of verb\",\n [\"after::negative_verb_base\", \"After the base of a verb\"],\n ],\n [\n 'follows a verb in \"-te\" form',\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"before a verb in negative form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a negative form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a neg. form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a noun or a verb\",\n [\"before::noun_or_verb\", \"Before a noun or a verb\"],\n ],\n [\"before an adjective\", [\"before::adjective\", \"Before an adjective\"]],\n [\"after a noun\", [\"after::noun\", \"After a noun\"]],\n [\"prefix\", [\"prefix\", \"Prefix\", [\"\u63A5\u982D\u8A9E\", \"\u63A5\u982D\u8F9E\"]]],\n [\n \"noun, used as a prefix\",\n [\n \"prefix_noun\",\n \"Noun, used as a prefix\",\n [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\", \"\u63A5\u982D\u8A9E\", \"\u63A5\u982D\u8F9E\"],\n ],\n ],\n [\"suffix\", [\"suffix\", \"Suffix\", [\"\u63A5\u5C3E\u8A9E\", \"\u63A5\u5C3E\u8F9E\"]]],\n [\n \"noun, used as a suffix\",\n [\n \"suffix_noun\",\n \"Noun, used as a suffix\",\n [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\", \"\u63A5\u5C3E\u8A9E\", \"\u63A5\u5C3E\u8F9E\"],\n ],\n ],\n [\"counter\", [\"counter\", \"Counter\", \"\u52A9\u6570\u8A5E\"]],\n [\"numeric\", [\"numeric\", \"Numeric\", \"\u6570\u8A5E\"]],\n [\"particle\", [\"particle\", \"Particle\", [\"\u52A9\u8A5E\", \"\u63A5\u7D9A\u52A9\u8A5E\"]]],\n [\"conjunction\", [\"conjunction\", \"Conjunction\", \"\u63A5\u7D9A\u8A5E\"]],\n [\n \"expression\",\n [\n \"expression\",\n \"Expression\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\n \"idiomatic expression\",\n [\n \"idiomatic_expression\",\n \"Idiomatic expression\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\n \"interjection (kandoushi)\",\n [\"interjection\", \"Interjection\", [\"\u611F\u52D5\u8A5E\", \"\u9593\u6295\u8A5E\"]],\n ],\n [\n \"proverb\",\n [\"proverb\", \"Proverb\", [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u3053\u3068\u308F\u3056\"]],\n ],\n [\n \"yojijukugo\",\n [\"yojijukugo\", \"Yojijukugo\", [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\"]],\n ],\n [\"archaism\", [\"archaism\", \"Archaism\"]],\n [\"obsolete term\", [\"obsolete\", \"Obsolete\"]],\n [\"dated term\", [\"dated\", \"Dated\"]],\n [\"rare\", [\"rare\", \"Rare\"]],\n [\"colloquialism\", [\"colloquialism\", \"Colloquialism\"]],\n [\"slang\", [\"slang\", \"Slang\"]],\n [\"internet slang\", [\"internet_slang\", \"Internet slang\"]],\n [\"jocular, humorous term\", [\"jocular_humorous\", \"Jocular or humorous\"]],\n [\"vulgar expression or word\", [\"vulgar\", \"Vulgar\"]],\n [\"derogatory\", [\"derogatory\", \"Derogatory\"]],\n [\"sensitive\", [\"sensitive\", \"Sensitive\"]],\n [\"euphemistic\", [\"euphemistic\", \"Euphemistic\"]],\n [\"abbreviation\", [\"abbreviation\", \"Abbreviation\", [\"\u7565\u8A9E\", \"\u982D\u5B57\u8A9E\"]]],\n [\"male term or language\", [\"male_language\", \"Male language\"]],\n [\"female term or language\", [\"female_language\", \"Female language\"]],\n [\n \"honorific or respectful (sonkeigo) language\",\n [\"sonkeigo\", \"Honorific or respectful (sonkeigo) language\"],\n ],\n [\"polite (teineigo) language\", [\"teineigo\", \"Polite (teineigo) language\"]],\n [\"humble (kenjougo) language\", [\"kenjougo\", \"Humble (kenjougo) language\"]],\n [\"familiar language\", [\"familiar_language\", \"Familiar language\"]],\n [\n \"familiar or derogatory\",\n [\"familiar_or_derogatory\", \"Familiar or derogatory\"],\n ],\n [\n \"derogatory or familiar\",\n [\"familiar_or_derogatory\", \"Familiar or derogatory\"],\n ],\n [\"children's language\", [\"children_language\", \"Children language\"]],\n [\n \"formal or literary term\",\n [\"formal_or_literary\", \"Formal or literary term\"],\n ],\n [\n \"usually written using kana alone\",\n [\"usually_in_kana\", \"Usually written using kana alone\"],\n ],\n [\"ateji (phonetic) reading\", [\"ateji\", \"Ateji (phonetic) reading\"]],\n [\"rarely-used kanji form\", [\"rare_kanji_form\", \"Rarely-used kanji form\"]],\n [\"out-dated kanji\", [\"out-dated_kanji_form\", \"Out-dated kanji form\"]],\n [\n \"gikun (meaning as reading) or jukujikun (special kanji reading)\",\n [\n \"gikun_or_jukujikun\",\n \"Gikun (meaning as reading) or jukujikun (special kanji reading)\",\n ],\n ],\n [\n \"irregular okurigana usage\",\n [\"irregular::okurigana\", \"Irregular okurigana usage\"],\n ],\n [\"irregular kana usage\", [\"irregular::kana\", \"Irregular kana usage\"]],\n [\n \"word containing irregular kana usage\",\n [\"irregular::kana\", \"Irregular kana usage\"],\n ],\n [\n \"out-dated or obsolete kana usage\",\n [\"out-dated_or_obsolete_kana\", \"Out-dated or obsolete kana usage\"],\n ],\n [\"irregular kanji\", [\"irregular::kanji_form\", \"Irregular kanji form\"]],\n [\"irreg. kanji form\", [\"irregular::kanji_form\", \"Irregular kanji form\"]],\n [\"mathematics term\", [\"mathematics\", \"Mathematics term\"]],\n [\"computer terminology\", [\"computer_terminology\", \"Computer terminology\"]],\n [\"buddhist term\", [\"buddhism\", \"Buddhist term\"]],\n [\"physics terminology\", [\"physics\", \"Physics terminology\"]],\n [\"food term\", [\"food\", \"Food term\"]],\n [\"chemistry term\", [\"chemistry\", \"Chemistry term\"]],\n [\"historical term\", [\"historical\", \"Historical term\"]],\n [\"grammar\", [\"grammar\", \"Grammar\"]],\n [\"martial arts term\", [\"martial_arts\", \"Martial arts term\"]],\n [\"linguistics terminology\", [\"linguistics\", \"Linguistics terminology\"]],\n [\"sports term\", [\"sports\", \"Sports term\"]],\n [\"sumo term\", [\"sumo\", \"Sumo term\"]],\n [\"astronomy term\", [\"astronomy\", \"Astronomy term\"]],\n [\"baseball term\", [\"baseball\", \"Baseball term\"]],\n [\"biology term\", [\"biology\", \"Biology term\"]],\n [\"shogi term\", [\"shogi\", \"Shogi term\"]],\n [\"logic\", [\"logic\", \"Logic\"]],\n [\"medicine term\", [\"medicine\", \"Medicine term\"]],\n [\"music\", [\"music\", \"Music term\"]],\n [\"music term\", [\"music\", \"Music term\"]],\n [\"geology\", [\"geology\", \"Geology term\"]],\n [\"geology term\", [\"geology\", \"Geology term\"]],\n [\"meteorology\", [\"meteorology\", \"Meteorology term\"]],\n [\"shinto term\", [\"shinto\", \"Shinto term\"]],\n [\"christianity\", [\"christianity\", \"Christianity\"]],\n [\"finance term\", [\"finance\", \"Finance term\"]],\n [\"economics term\", [\"economics\", \"Economics term\"]],\n [\"business term\", [\"business\", \"Business term\"]],\n [\"statistics\", [\"statistics\", \"Statistics term\"]],\n [\"anatomical term\", [\"anatomical\", \"Anatomical term\"]],\n [\"genetics\", [\"genetics\", \"Genetics term\"]],\n [\"engineering term\", [\"engineering\", \"Engineering term\"]],\n [\"architecture term\", [\"architecture\", \"Architecture term\"]],\n [\"paleography term\", [\"paleography\", \"Paleography term\"]],\n [\"psychiatry\", [\"psychiatry\", \"Psychiatry term\"]],\n [\"law term\", [\"law\", \"Law term\"]],\n [\"military term\", [\"military\", \"Military term\"]],\n [\"mahjong term\", [\"mahjong\", \"Mahjong term\"]],\n [\"philosophy\", [\"philosophy\", \"Philosophy term\"]],\n [\"physiology\", [\"physiology\", \"Physiology term\"]],\n [\"zoology term\", [\"zoology\", \"Zoology term\"]],\n [\"card games\", [\"card_games\", \"Card games term\"]],\n [\"hanafuda\", [\"hanafuda\", \"Hanafuda term\"]],\n [\"go (game)\", [\"go\", \"Go (game) term\"]],\n [\"golf\", [\"golf\", \"Golf term\"]],\n [\"fishing\", [\"fishing\", \"Fishing term\"]],\n [\"on-yomi, go\", [\"on-yomi::go\", \"On-yomi go-on reading\"]],\n [\"on-yomi, kan\", [\"on-yomi::kan\", \"On-yomi kan-on reading\"]],\n [\"on-yomi, kan\\\\'you\", [\"on-yomi::kanyou\", \"On-yomi kan 'y\u014D-on reading\"]],\n [\"kun-yomi\", [\"kun-yomi\", \"Kun-yomi reading\"]],\n [\n \"reading used only in names (nanori)\",\n [\"nanori\", \"Reading used only in names (nanori)\"],\n ],\n [\"on-yomi\", [\"on-yomi\", \"On-yomi reading\"]],\n [\n \"reading used as name of radical\",\n [\"radical_reading\", \"Reading used as name of radical\"],\n ],\n [\"rarely used kana form\", [\"rare_kana_form\", \"Rarely used kana form\"]],\n [\"search-only kana form\", [\"search-only_kana_form\", \"Search-only kana form\"]],\n [\"on-yomi, tou\", [\"on-yomi::tou\", \"On-yomi t\u014D-on reading\"]],\n [\"irregular kanji usage\", [\"irregular::kanji_form\", \"Irregular kanji usage\"]],\n [\n \"word containing irregular kanji usage\",\n [\"irregular::kanji_form\", \"Irregular kanji usage\"],\n ],\n [\n \"out-dated kanji or kanji usage\",\n [\"out-dated_kanji_form\", \"Out-dated kanji or kanji usage\"],\n ],\n [\n \"word containing out-dated kanji or kanji usage\",\n [\"out-dated_kanji_form\", \"Out-dated kanji or kanji usage\"],\n ],\n [\"rarely used kanji form\", [\"rare_kanji_form\", \"Rarely used kanji form\"]],\n [\n \"search-only kanji form\",\n [\"search-only_kanji_form\", \"Search-only kanji form\"],\n ],\n [\"aphorism (pithy saying)\", [\"aphorism\", \"Aphorism\"]],\n [\"archaic\", [\"archaism\", \"Archaism\"]],\n [\"character\", [\"character\", \"Character\"]],\n [\"colloquial\", [\"colloquialism\", \"Colloquialism\"]],\n [\"company name\", [\"company_name\", \"Company name\"]],\n [\"creature\", [\"creature\", \"Creature\"]],\n [\"deity\", [\"deity\", \"Deity\"]],\n [\"document\", [\"document\", \"Document\"]],\n [\"event\", [\"event\", \"Event\"]],\n [\"female term, language, or name\", [\"female_language\", \"Female language\"]],\n [\"fiction\", [\"fiction\", \"Fiction\"]],\n [\n \"given name or forename, gender not specified\",\n [\"given_name_or_forename\", \"Given name or forename, gender not specified\"],\n ],\n [\"group\", [\"group\", \"Group\"]],\n [\"legend\", [\"legend\", \"Legend\"]],\n [\"manga slang\", [\"manga_slang\", \"Manga slang\"]],\n [\"male term, language, or name\", [\"male_language\", \"Male language\"]],\n [\"mythology\", [\"mythology\", \"Mythology\"]],\n [\"object\", [\"object\", \"Object\"]],\n [\"organization name\", [\"organization_name\", \"Organization name\"]],\n [\"other\", [\"other\", \"Other\"]],\n [\n \"full name of a particular person\",\n [\"full_name_or_particular_person\", \"Full name of a particular person\"],\n ],\n [\"place name\", [\"place_name\", \"Place name\"]],\n [\"poetical term\", [\"poetical\", \"Poetical\"]],\n [\"product name\", [\"product_name\", \"Product name\"]],\n [\"quotation\", [\"quotation\", \"Quotation\"]],\n [\"rare term\", [\"rare\", \"Rare\"]],\n [\"religion\", [\"religion\", \"Religion\"]],\n [\"service\", [\"service\", \"Service\"]],\n [\"ship name\", [\"ship_name\", \"Ship name\"]],\n [\"railway station\", [\"railway_station\", \"Railway station\"]],\n [\"family or surname\", [\"family_or_surname\", \"Family or surname\"]],\n [\n \"word usually written using kana alone\",\n [\"usually_in_kana\", \"Usually written using kana alone\"],\n ],\n [\"unclassified name\", [\"unclassified\", \"Unclassified name\"]],\n [\n \"work of art, literature, music, etc. name\",\n [\"work_of_art\", \"Work of art, literature, music, etc. name\"],\n ],\n [\n \"rude or x-rated term (not displayed in educational software)\",\n [\"rude_or_x-rated\", \"Rude or X-rated term\"],\n ],\n [\n \"adjective (keiyoushi) - yoi/ii class\",\n [\"adjective::yoi/ii\", \"\u3044-adjective - \u3088\u3044/\u3044\u3044 class\", \"\u5F62\u5BB9\u8A5E\"],\n ],\n [\n \"'kari' adjective (archaic)\",\n [\"adjective::kari\", \"'\u304B\u308A' adjective (archaic)\"],\n ],\n [\"'ku' adjective (archaic)\", [\"adjective::ku\", \"'\u304F' adjective (archaic)\"]],\n [\n \"adjectival nouns or quasi-adjectives (keiyodoshi)\",\n [\"na-adjective\", \"\u306A-adjective\", \"\u5F62\u5BB9\u52D5\u8A5E\"],\n ],\n [\n \"archaic/formal form of na-adjective\",\n [\n \"na-adjective_archaic_or_formal\",\n \"archaic/formal form of \u306A-adjective\",\n \"\u5F62\u5BB9\u52D5\u8A5E\",\n ],\n ],\n [\n \"'shiku' adjective (archaic)\",\n [\"adjective::shiku\", \"'\u3057\u304F' adjective (archaic)\"],\n ],\n [\"copula\", [\"copula\", \"Copula\"]],\n [\n \"expressions (phrases, clauses, etc.)\",\n [\n \"expression\",\n \"Expression (phrase, clause, etc.)\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\"adverbial noun (fukushitekimeishi)\", [\"adverbial_noun\", \"Adverbial noun\"]],\n [\"proper noun\", [\"proper_noun\", \"Proper noun\"]],\n [\"noun (temporal) (jisoumeishi)\", [\"temporal_noun\", \"Temporal noun\"]],\n [\"unclassified\", [\"unclassified\", \"Unclassified\"]],\n [\"verb unspecified\", [\"unspecified_verb\", \"Unspecified verb\", \"\u52D5\u8A5E\"]],\n [\n \"ichidan verb - kureru special class\",\n [\"ichidan_verb::kureru\", \"Ichidan verb - \u304F\u308C\u308B special class\", \"\u52D5\u8A5E\"],\n ],\n [\n \"nidan verb with 'u' ending (archaic)\",\n [\"nidan_verb::u\", \"Nidan verb with '\u3046' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"nidan verb (upper class) with 'bu' ending (archaic)\",\n [\n \"nidan_verb::bu::upper_class\",\n \"Nidan verb (upper class) with '\u3076' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'bu' ending (archaic)\",\n [\n \"nidan_verb::bu::lower_class\",\n \"Nidan verb (lower class) with '\u3076' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'dzu' ending (archaic)\",\n [\n \"nidan_verb::dzu::upper_class\",\n \"Nidan verb (upper class) with '\u3065' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'dzu' ending (archaic)\",\n [\n \"nidan_verb::dzu::lower_class\",\n \"Nidan verb (lower class) with '\u3065' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'gu' ending (archaic)\",\n [\n \"nidan_verb::gu::upper_class\",\n \"Nidan verb (upper class) with '\u3050' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'gu' ending (archaic)\",\n [\n \"nidan_verb::gu::lower_class\",\n \"Nidan verb (lower class) with '\u3050' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'hu/fu' ending (archaic)\",\n [\n \"nidan_verb::hu/fu::upper_class\",\n \"Nidan verb (upper class) with '\u3075' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'hu/fu' ending (archaic)\",\n [\n \"nidan_verb::hu/fu::lower_class\",\n \"Nidan verb (lower class) with '\u3075' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'ku' ending (archaic)\",\n [\n \"nidan_verb::ku::upper_class\",\n \"Nidan verb (upper class) with '\u304F' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'ku' ending (archaic)\",\n [\n \"nidan_verb::ku::lower_class\",\n \"Nidan verb (lower class) with '\u304F' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'mu' ending (archaic)\",\n [\n \"nidan_verb::mu::upper_class\",\n \"Nidan verb (upper class) with '\u3080' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'mu' ending (archaic)\",\n [\n \"nidan_verb::mu::lower_class\",\n \"Nidan verb (lower class) with '\u3080' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'nu' ending (archaic)\",\n [\n \"nidan_verb::nu::lower_class\",\n \"Nidan verb (lower class) with '\u306C' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'ru' ending (archaic)\",\n [\n \"nidan_verb::ru::upper_class\",\n \"Nidan verb (upper class) with '\u308B' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'ru' ending (archaic)\",\n [\n \"nidan_verb::ru::lower_class\",\n \"Nidan verb (lower class) with '\u308B' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'su' ending (archaic)\",\n [\n \"nidan_verb::su::lower_class\",\n \"Nidan verb (lower class) with '\u3059' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'tsu' ending (archaic)\",\n [\n \"nidan_verb::tsu::upper_class\",\n \"Nidan verb (upper class) with '\u3064' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'tsu' ending (archaic)\",\n [\n \"nidan_verb::tsu::lower_class\",\n \"Nidan verb (lower class) with '\u3064' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'u' ending and 'we' conjugation (archaic)\",\n [\n \"nidan_verb::u_with_we_conjugation::lower_class\",\n \"Nidan verb (lower class) with '\u3046' ending and '\u3091' conjugation (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'yu' ending (archaic)\",\n [\n \"nidan_verb::yu::upper_class\",\n \"Nidan verb (upper class) with '\u3086' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'yu' ending (archaic)\",\n [\n \"nidan_verb::yu::lower_class\",\n \"Nidan verb (lower class) with '\u3086' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'zu' ending (archaic)\",\n [\n \"nidan_verb::zu::lower_class\",\n \"Nidan verb (lower class) with '\u305A' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"yodan verb with 'bu' ending (archaic)\",\n [\"yodan_verb::bu\", \"Yodan verb with '\u3076' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'gu' ending (archaic)\",\n [\"yodan_verb::gu\", \"Yodan verb with '\u3050' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'hu/fu' ending (archaic)\",\n [\"yodan_verb::hu/fu\", \"Yodan verb with '\u3075' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'ku' ending (archaic)\",\n [\"yodan_verb::ku\", \"Yodan verb with '\u304F' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'mu' ending (archaic)\",\n [\"yodan_verb::mu\", \"Yodan verb with '\u3080' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'nu' ending (archaic)\",\n [\"yodan_verb::nu\", \"Yodan verb with '\u306C' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'ru' ending (archaic)\",\n [\"yodan_verb::ru\", \"Yodan verb with '\u308B' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'su' ending (archaic)\",\n [\"yodan_verb::su\", \"Yodan verb with '\u3059' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'tsu' ending (archaic)\",\n [\"yodan_verb::tsu\", \"Yodan verb with '\u3064' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb - uru old class verb (old form of eru)\",\n [\n \"godan::uru::irregular_verb\",\n \"Godan verb - '\u3046\u308B' old class verb (old form of \u3048\u308B)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"irregular ru verb, plain form ends with -ri\",\n [\n \"irregular_ru_verb_plain_form_ending_with_ri\",\n \"irregular '\u308B' verb, plain form ends with '-\u308A'\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"su verb - precursor to the modern suru\",\n [\"su_verb\", \"'\u3059' verb - precursor to the modern \u3059\u308B\", \"\u52D5\u8A5E\"],\n ],\n [\"suru verb - included\", [\"suru_verb\", \"'\u3059\u308B' verb - included\", \"\u52D5\u8A5E\"]],\n [\n \"ichidan verb - zuru verb (alternative form of -jiru verbs)\",\n [\n \"ichidan_verb::zuru\",\n \"Ichidan verb - '\u305A\u308B' verb (alternative form of '-\u3058\u308B' verbs)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\"agriculture\", [\"agriculture\", \"Agriculture term\"]],\n [\"anatomy\", [\"anatomical\", \"Anatomical term\"]],\n [\"archeology\", [\"archeology\", \"Archeology term\"]],\n [\"architecture\", [\"architecture\", \"Architecture term\"]],\n [\"art, aesthetics\", [\"art/aesthetics\", \"Art, aesthetics\"]],\n [\"astronomy\", [\"astronomy\", \"Astronomy term\"]],\n [\"audiovisual\", [\"audiovisual\", \"Audiovisual\"]],\n [\"aviation\", [\"aviation\", \"Aviation\"]],\n [\"baseball\", [\"baseball\", \"Baseball term\"]],\n [\"biochemistry\", [\"biochemistry\", \"Biochemistry term\"]],\n [\"biology\", [\"biology\", \"Biology term\"]],\n [\"botany\", [\"botany\", \"Botany term\"]],\n [\"botany term\", [\"botany\", \"Botany term\"]],\n [\"boxing\", [\"boxing\", \"Boxing term\"]],\n [\"buddhism\", [\"buddhism\", \"Buddhist term\"]],\n [\"business\", [\"business\", \"Business term\"]],\n [\"chemistry\", [\"chemistry\", \"Chemistry term\"]],\n [\"chinese mythology\", [\"mythology::chinese\", \"Chinese mythology\"]],\n [\"civil engineering\", [\"civil_engineering\", \"Civil engineering\"]],\n [\"clothing\", [\"clothing\", \"Clothing\"]],\n [\"computing\", [\"computing\", \"Computing\"]],\n [\"crystallography\", [\"crystallography\", \"Crystallography\"]],\n [\"dentistry\", [\"dentistry\", \"Dentistry\"]],\n [\"ecology\", [\"ecology\", \"Ecology\"]],\n [\"economics\", [\"economics\", \"Economics term\"]],\n [\n \"electricity, elec. eng.\",\n [\"electrical_engineering\", \"Electrical engineering\"],\n ],\n [\"electronics\", [\"electronics\", \"Electronics\"]],\n [\"embryology\", [\"embryology\", \"Embryology\"]],\n [\"engineering\", [\"engineering\", \"Engineering term\"]],\n [\"entomology\", [\"entomology\", \"Entomology\"]],\n [\"figure skating\", [\"figure_skating\", \"Figure skating\"]],\n [\"film\", [\"film\", \"Film\"]],\n [\"finance\", [\"finance\", \"Finance term\"]],\n [\"food, cooking\", [\"food\", \"Food term\"]],\n [\"gardening, horticulture\", [\"gardening\", \"Gardening\"]],\n [\"geography\", [\"geography\", \"Geography term\"]],\n [\"geometry\", [\"geometry\", \"Geometry term\"]],\n [\"geometry term\", [\"geometry\", \"Geometry term\"]],\n [\"greek mythology\", [\"mythology::greek\", \"Greek mythology\"]],\n [\"horse racing\", [\"horse_racing\", \"Horse racing\"]],\n [\"internet\", [\"internet\", \"Internet\"]],\n [\"japanese mythology\", [\"mythology::japanese\", \"Japanese mythology\"]],\n [\"kabuki\", [\"kabuki\", \"Kabuki\"]],\n [\"law\", [\"law\", \"Law term\"]],\n [\"linguistics\", [\"linguistics\", \"Linguistics terminology\"]],\n [\"martial arts\", [\"martial_arts\", \"Martial arts term\"]],\n [\"mahjong\", [\"mahjong\", \"Mahjong term\"]],\n [\"manga\", [\"manga\", \"Manga term\"]],\n [\"mathematics\", [\"mathematics\", \"Mathematics term\"]],\n [\n \"mechanical engineering\",\n [\"mechanical_engineering\", \"Mechanical engineering\"],\n ],\n [\"medicine\", [\"medicine\", \"Medicine term\"]],\n [\"military\", [\"military\", \"Military term\"]],\n [\"mineralogy\", [\"mineralogy\", \"Mineralogy term\"]],\n [\"mining\", [\"mining\", \"Mining term\"]],\n [\"motorsport\", [\"motorsport\", \"Motorsport\"]],\n [\"noh\", [\"noh\", \"Noh term\"]],\n [\"ornithology\", [\"ornithology\", \"Ornithology\"]],\n [\"paleontology\", [\"paleontology\", \"Paleontology\"]],\n [\"pathology\", [\"pathology\", \"Pathology\"]],\n [\"pharmacology\", [\"pharmacology\", \"Pharmacology\"]],\n [\"photography\", [\"photography\", \"Photography\"]],\n [\"physics\", [\"physics\", \"Physics terminology\"]],\n [\"politics\", [\"politics\", \"Politics term\"]],\n [\"printing\", [\"printing\", \"Printing term\"]],\n [\n \"professional wrestling\",\n [\"professional_wrestling\", \"Professional wrestling term\"],\n ],\n [\"psychoanalysis\", [\"psychoanalysis\", \"Psychoanalysis term\"]],\n [\"psychology\", [\"psychology\", \"Psychology term\"]],\n [\"railway\", [\"railway_station\", \"Railway station\"]],\n [\"roman mythology\", [\"mythology::roman\", \"Roman mythology\"]],\n [\"shinto\", [\"shinto\", \"Shinto term\"]],\n [\"shogi\", [\"shogi\", \"Shogi term\"]],\n [\"skiing\", [\"skiing\", \"Skiing\"]],\n [\"sports\", [\"sports\", \"Sports term\"]],\n [\"stock market\", [\"stock_market\", \"Stock market\"]],\n [\"sumo\", [\"sumo\", \"Sumo term\"]],\n [\"surgery\", [\"surgery\", \"Surgery\"]],\n [\"telecommunications\", [\"telecommunications\", \"Telecommunications\"]],\n [\"television\", [\"television\", \"Television\"]],\n [\"veterinary terms\", [\"veterinary\", \"Veterinary term\"]],\n [\"video games\", [\"video_games\", \"Video games term\"]],\n [\"zoology\", [\"zoology\", \"Zoology term\"]],\n [\"equivalent\", [\"equivalent\", \"Equivalent\"]],\n [\"edo-period term\", [\"edo-period\", \"Edo-period term\"]],\n [\"heian-period term\", [\"heian-period\", \"Heian-period term\"]],\n [\n \"imperial japanese army jargon\",\n [\"imperial_japanese_army_jargon\", \"Imperial Japanese army jargon\"],\n ],\n [\n \"meiji and taish\u014D-era term\",\n [\"meiji_and_taishou_era\", \"Meiji and Taish\u014D-era term\"],\n ],\n [\n \"after -masu base of verb; indicates contempt or disdain for another's actions\",\n [\n \"after::masu_stem\",\n \"After '-\u307E\u3059' base of verb; indicates contempt or disdain for another's actions\",\n ],\n ],\n [\n \"after -masu stem of verb; indicates an action is being directed to someone\",\n [\n \"after::masu_stem\",\n \"After '-\u307E\u3059' stem of verb; indicates an action is being directed to someone\",\n ],\n ],\n [\n \"after -masu stem of verb; often \u3050\u308B\u3057\u3044\",\n [\"after::masu_stem\", \"After '-\u307E\u3059' stem of verb; often \u3050\u308B\u3057\u3044\"],\n ],\n [\n \"after -masu stems, onomatopoeic and mimetic words\",\n [\"after::masu_stem\", \"After '-\u307E\u3059' stems, onomatopoeic and mimetic words\"],\n ],\n [\n \"after a -masu stem, esp. of a suru verb\",\n [\"after::masu_stem\", \"After a '-\u307E\u3059' stem, esp. of a \u3059\u308B verb\"],\n ],\n [\"after a -nai stem\", [\"after::nai_stem\", \"After a '-\u306A\u3044' stem\"]],\n [\"after a name\", [\"after::name\", \"After a name\"]],\n [\"after a noun (+ \u306E)\", [\"after::noun\", \"After a noun (+ \u306E)\"]],\n [\n \"after a noun at the end of an interjection\",\n [\"after::noun\", \"After a noun at the end of an interjection\"],\n ],\n [\n \"after a noun indicating a person\",\n [\"after::noun\", \"After a noun indicating a person\"],\n ],\n [\n \"after a noun or -masu stem\",\n [\"after::noun_or_masu_stem\", \"After a noun or '-\u307E\u3059' stem\"],\n ],\n [\n \"after a noun or counter\",\n [\"after::noun_or_counter\", \"After a noun or counter\"],\n ],\n [\n \"after a noun or na-adjective; in conditional clauses\",\n [\n \"after::noun_or_na-adjective\",\n \"After a noun or \u306A-adjective; in conditional clauses\",\n ],\n ],\n [\n \"after a noun or pronoun\",\n [\"after::noun_or_pronoun\", \"After a noun or pronoun\"],\n ],\n [\n \"after a noun, adverb or adj. stem\",\n [\n \"after::noun_adverb_or_adjective_stem\",\n \"After a noun, adverb or adjective stem\",\n ],\n ],\n [\"after a number n\", [\"after::number\", \"After a number\"]],\n [\n \"after a number of people\",\n [\"after::number_of_people\", \"After a number of people\"],\n ],\n [\n \"after a number or counter\",\n [\"after::number_or_counter\", \"After a number or counter\"],\n ],\n [\"after a quantity\", [\"after::quantity\", \"After a quantity\"]],\n [\n \"after a quantity, age, time, etc.\",\n [\"after::quantity\", \"After a quantity, age, time, etc.\"],\n ],\n [\"after a surname\", [\"after::surname\", \"After a surname\"]],\n [\n \"after a time, date, etc.\",\n [\"after::time_date\", \"After a time, date, etc.\"],\n ],\n [\n \"after a verb in the past tense\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after a volitional form\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\n \"after an adjective, verb, or noun\",\n [\"after::adjective_verb_or_noun\", \"After an adjective, verb, or noun\"],\n ],\n [\"after an adverb\", [\"after::adverb\", \"After an adverb\"]],\n [\"after an age\", [\"after::age\", \"After an age\"]],\n [\n \"after an interrogative\",\n [\"after::interrogative\", \"After an interrogative\"],\n ],\n [\n \"after conditional -ba form of verb\",\n [\"after::conditional_ba_verb_form\", \"After conditional '-\u3070' form of verb\"],\n ],\n [\n \"after dictionary form verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\"after neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"after negative verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"after past tense verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after plain form of a verb or adjective\",\n [\n \"after::plain_verb_or_adjective_form\",\n \"After present form of a verb or an adjective stem\",\n ],\n ],\n [\n \"after the -nai stem of a verb\",\n [\"after::nai_stem\", \"After a '-\u306A\u3044' stem\"],\n ],\n [\n \"after the -ta form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after the -te form of a verb or adjective\",\n [\n \"after::te_verb_or_adjective_form\",\n \"After the '\u3066' form of a verb or adjective\",\n ],\n ],\n [\n \"after the dictionary form of verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after the stem of an adjective\",\n [\"after::adjective_stem\", \"After adjective stem\"],\n ],\n [\n \"after the volitional form of verb\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\"at sentence end\", [\"at_sentence_end\", \"At sentence end\"]],\n [\n \"at sentence end after the -masu form of a verb\",\n [\"at_sentence_end\", \"At sentence end after the '-\u307E\u3059' form of a verb\"],\n ],\n [\n \"at sentence end after the question marker \u304B\",\n [\"at_sentence_end\", \"At sentence end after the question marker \u304B\"],\n ],\n [\n \"at sentence end; adds emphasis; usu. \u3063\u305F\u3089\",\n [\"at_sentence_end\", \"At sentence end; adds emphasis; usu. \u3063\u305F\u3089\"],\n ],\n [\n \"at sentence end; expresses depth of feeling or emphasis\",\n [\n \"at_sentence_end\",\n \"At sentence end; expresses depth of feeling or emphasis\",\n ],\n ],\n [\n \"at sentence end; gives reason for an unstated but deducible conclusion\",\n [\n \"at_sentence_end\",\n \"At sentence end; gives reason for an unstated but deducible conclusion\",\n ],\n ],\n [\n \"at sentence end; used as a request for confirmation or agreement\",\n [\n \"at_sentence_end\",\n \"At sentence end; used as a request for confirmation or agreement\",\n ],\n ],\n [\n \"at sentence end; used to express one's thoughts or feelings\",\n [\n \"at_sentence_end\",\n \"At sentence end; used to express one's thoughts or feelings\",\n ],\n ],\n [\n \"at sentence end; used to make a sentence threatening or ironic\",\n [\n \"at_sentence_end\",\n \"At sentence end; used to make a sentence threatening or ironic\",\n ],\n ],\n [\n \"at sentence end; used to make an informal request\",\n [\"at_sentence_end\", \"At sentence end; used to make an informal request\"],\n ],\n [\n \"at sentence end; with a negative\",\n [\"at_sentence_end\", \"At sentence end; with a negative\"],\n ],\n [\"at sentence-end\", [\"at_sentence_end\", \"At sentence end\"]],\n [\n \"at sentence-end; indicates certainty, emphasis, contempt, request, warning, etc.\",\n [\n \"at_sentence_end\",\n \"At sentence end; indicates certainty, emphasis, contempt, request, warning, etc.\",\n ],\n ],\n [\n \"at sentence-end; indicates certainty, emphasis, etc.\",\n [\"at_sentence_end\", \"At sentence end; indicates certainty, emphasis, etc.\"],\n ],\n [\n \"sentence end, mainly masc.\",\n [\"at_sentence_end\", \"At sentence end, mainly masculine\"],\n ],\n [\"sentence final\", [\"at_sentence_end\", \"At sentence end\"]],\n [\"at start of sentence\", [\"at_sentence_start\", \"At sentence start\"]],\n [\"at the start of a sentence\", [\"at_sentence_start\", \"At sentence start\"]],\n [\"before a noun\", [\"before::noun\", \"Before a noun\"]],\n [\"before a verb\", [\"before::verb\", \"Before a verb\"]],\n [\"emphatic\", [\"emphatic\", \"Emphatic\"]],\n [\"fig.\", [\"figurative\", \"Figurative\"]],\n [\"figurative\", [\"figurative\", \"Figurative\"]],\n [\"followed by a counter\", [\"after::counter\", \"Followed by a counter\"]],\n [\n \"followed by a counter and \u304B\",\n [\"after::counter\", \"Followed by a counter and \u304B\"],\n ],\n [\n \"followed by a verb in negative form\",\n [\"after::negative_verb\", \"Followed by a verb in negative form\"],\n ],\n [\"following adj. stem\", [\"after::adjective_stem\", \"After adjective stem\"]],\n [\n \"following adj. stem or noun\",\n [\"after::adjective_stem_or_noun\", \"After adjective stem or noun\"],\n ],\n [\n \"following the te-form of a verb\",\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"follows verbs, adjectives\",\n [\"after::verb_or_adjective\", \"After a verb or an adjective\"],\n ],\n [\n \"formal or literary polite copula\",\n [\"formal_or_literary_polite_copula\", \"Formal or literary polite copula\"],\n ],\n [\"general term\", [\"general\", \"General term\"]],\n [\"in a negative sentence\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"non-standard\", [\"non-standard\", \"Non-standard usage\"]],\n [\"non-standard usage\", [\"non-standard\", \"Non-standard usage\"]],\n [\"orig. meaning\", [\"original_meaning\", \"Original meaning\"]],\n [\"original meaning\", [\"original_meaning\", \"Original meaning\"]],\n [\"plain copula\", [\"plain_copula\", \"Plain copula\"]],\n [\"vocative\", [\"vocative\", \"Vocative\"]],\n [\n \"with a verb in the negative\",\n [\"with::negative_verb\", \"With negative verb\"],\n ],\n [\n \"with an interrogative word\",\n [\"with::interrogative\", \"With an interrogative\"],\n ],\n [\n \"with neg. verb or adjective\",\n [\"with::negative_verb_or_adjective\", \"With negative verb or adjective\"],\n ],\n]);\n", "import libxml from \"libxmljs2\";\nimport xml from \"xml2js\";\nimport iconv from \"iconv-lite\";\nimport {\n noteHeaderKeys,\n noteMap,\n notSearchedForms,\n regexps,\n} from \"./constants\";\nimport {\n DefaultNoteInfo,\n Definition,\n DictKanji,\n DictKanjiForm,\n DictKanjiReading,\n DictKanjiReadingMeaning,\n DictKanjiReadingMeaningGroup,\n DictKanjiWithRadicals,\n DictMeaning,\n DictRadical,\n DictReading,\n DictTranslation,\n DictWord,\n ExamplePart,\n Grammar,\n JaWiktionaryEntry,\n JLPT,\n Kana,\n Kanji,\n KanjiComponent,\n KanjiForm,\n NoteAndTag,\n Phrase,\n POS,\n Radical,\n Reading,\n Result,\n TanakaExample,\n Translation,\n Word,\n WordDefinitionPair,\n} from \"./types\";\nimport { ReadStream } from \"fs\";\nimport { createInterface, Interface } from \"readline\";\n\nconst Kuroshiro: any = require(\"kuroshiro\");\nconst KuromojiAnalyzer: any = require(\"kuroshiro-analyzer-kuromoji\");\n\n/**\n * Capitalizes a string.\n * @param value The string to capitalize\n * @returns The capitalized string\n */\nexport function capitalizeString(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\n/**\n * Checks if the argument is an array.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array\n */\nexport function isValidArray(arg: any): arg is any[] {\n return arg !== null && arg !== undefined && Array.isArray(arg);\n}\n\n/**\n * Checks if the argument is an array and has at least one element.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array and has at least one element\n */\nexport function isValidArrayWithFirstElement(arg: any): arg is any[] {\n return (\n arg !== null &&\n arg !== undefined &&\n Array.isArray(arg) &&\n arg[0] !== null &&\n arg[0] !== undefined\n );\n}\n\n/**\n * Checks if the argument is an array of strings.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array of strings\n */\nexport function isStringArray(arg: any): arg is string[] {\n return (\n arg !== null &&\n arg !== undefined &&\n Array.isArray(arg) &&\n arg.every((element: any) => typeof element === \"string\")\n );\n}\n\n/**\n * Shuffles an array using the `Fisher\u2013Yates shuffle` algorithm\n * @param arr The array to be shuffled\n * @returns The shuffled array\n */\nexport function shuffleArray<T>(arr: readonly T[]): T[] {\n const a: T[] = arr.slice();\n\n for (let i: number = a.length - 1; i > 0; i--) {\n const j: number = Math.floor(Math.random() * (i + 1));\n const tmp: T = a[i]!;\n a[i] = a[j]!;\n a[j] = tmp;\n }\n\n return a;\n}\n\n/**\n * Converts a JMdict `JMdict_e` file into an array of {@link DictWord} objects.\n * @param xmlString The raw `JMdict_e` file contents\n * @param examples An array of converted `Tanaka Corpus` examples\n * @returns An array of converted {@link DictWord} objects\n */\nexport function convertJMdict(\n xmlString: string,\n examples?: readonly TanakaExample[] | undefined,\n): DictWord[] {\n const dictParsed: libxml.Document = libxml.parseXml(xmlString, {\n dtdvalid: true,\n nonet: false,\n noent: true,\n recover: false,\n });\n const dict: DictWord[] = [];\n\n xml.parseString(dictParsed, (err: Error | null, result: any) => {\n if (err === null) {\n const tanakaParts: Set<string> | undefined =\n examples && examples.length > 0\n ? new Set<string>(\n examples\n .map((example: TanakaExample) =>\n example.parts.map((part: ExamplePart) => [\n part.baseForm,\n ...(part.reading ? [part.reading] : []),\n ...(part.referenceID ? [part.referenceID] : []),\n ]),\n )\n .flat(2),\n )\n : undefined;\n\n if (\n result.JMdict &&\n typeof result.JMdict === \"object\" &&\n isValidArray(result.JMdict.entry)\n )\n for (const entry of result.JMdict.entry) {\n const entryObj: DictWord = {\n id: entry.ent_seq[0],\n readings: [],\n meanings: [],\n };\n\n if (typeof entryObj.id === \"string\") {\n const kanjiForms: any = entry.k_ele;\n const readings: any = entry.r_ele;\n const meanings: any = entry.sense;\n\n if (isValidArray(kanjiForms)) {\n entryObj.kanjiForms = [];\n\n for (const kanjiForm of kanjiForms) {\n const form: DictKanjiForm = {\n form: kanjiForm.keb[0],\n };\n\n if (typeof form.form === \"string\") {\n if (isStringArray(kanjiForm.ke_inf))\n form.notes = kanjiForm.ke_inf;\n if (isStringArray(kanjiForm.ke_pri)) {\n form.commonness = kanjiForm.ke_pri;\n\n if (entryObj.isCommon === undefined)\n entryObj.isCommon = true;\n }\n\n entryObj.kanjiForms.push(form);\n }\n }\n }\n\n if (isValidArray(readings))\n for (const reading of readings) {\n const readingObj: DictReading = {\n reading: reading.reb[0],\n };\n\n if (typeof readingObj.reading === \"string\") {\n if (isStringArray(reading.re_inf))\n readingObj.notes = reading.re_inf;\n if (isStringArray(reading.re_restr))\n readingObj.kanjiFormRestrictions = reading.re_restr;\n if (isStringArray(reading.re_pri)) {\n readingObj.commonness = reading.re_pri;\n\n if (entryObj.isCommon === undefined)\n entryObj.isCommon = true;\n }\n\n entryObj.readings.push(readingObj);\n }\n }\n\n if (isValidArray(meanings)) {\n let usuallyInKanaMeanings: number = 0;\n\n for (const meaning of meanings) {\n const meaningObj: DictMeaning = {};\n\n if (isStringArray(meaning.pos))\n meaningObj.partOfSpeech = meaning.pos;\n if (isValidArray(meaning.gloss)) {\n meaningObj.translations = [];\n\n for (const gloss of meaning.gloss)\n if (typeof gloss === \"string\")\n meaningObj.translations.push(gloss);\n else if (\n typeof gloss === \"object\" &&\n gloss._ &&\n typeof gloss._ === \"string\" &&\n gloss.$ &&\n typeof gloss.$ === \"object\" &&\n gloss.$.g_type &&\n (gloss.$.g_type === \"lit\" ||\n gloss.$.g_type === \"expl\" ||\n gloss.$.g_type === \"tm\")\n )\n meaningObj.translations.push({\n translation: gloss._,\n type: gloss.$.g_type,\n });\n }\n\n if (isStringArray(meaning.xref))\n meaningObj.references = meaning.xref;\n if (isStringArray(meaning.stagk))\n meaningObj.kanjiFormRestrictions = meaning.stagk;\n if (isStringArray(meaning.stagr))\n meaningObj.readingRestrictions = meaning.stagr;\n if (isStringArray(meaning.ant))\n meaningObj.antonyms = meaning.ant;\n if (isStringArray(meaning.field))\n meaningObj.fields = meaning.field;\n if (isStringArray(meaning.s_inf))\n meaningObj.info = meaning.s_inf;\n if (isStringArray(meaning.misc)) {\n meaningObj.misc = meaning.misc;\n\n if (\n meaningObj.misc &&\n meaningObj.misc.includes(\n \"word usually written using kana alone\",\n )\n )\n usuallyInKanaMeanings++;\n }\n if (isStringArray(meaning.dial))\n meaningObj.dialects = meaning.dial;\n\n if (\n meaningObj.partOfSpeech &&\n meaningObj.partOfSpeech.length > 0\n )\n entryObj.meanings.push(meaningObj);\n }\n\n if (entryObj.meanings.length === usuallyInKanaMeanings)\n entryObj.usuallyInKana = true;\n }\n\n if (examples) {\n const readings: Set<string> = new Set<string>(\n entryObj.readings\n .filter(\n (reading: DictReading) =>\n reading.notes === undefined ||\n !reading.notes.some((note: string) =>\n notSearchedForms.has(note),\n ) ||\n reading.commonness,\n )\n .map((reading: DictReading) => reading.reading),\n );\n const kanjiForms: Set<string> | undefined = entryObj.kanjiForms\n ? new Set<string>(\n entryObj.kanjiForms.map(\n (kanjiForm: DictKanjiForm) => kanjiForm.form,\n ),\n )\n : undefined;\n\n let existsExample: boolean = false;\n\n if (kanjiForms && kanjiForms.size > 0 && tanakaParts)\n for (const kf of kanjiForms)\n if (tanakaParts.has(kf)) {\n existsExample = true;\n break;\n }\n if (!existsExample && readings.size > 0 && tanakaParts)\n for (const r of readings)\n if (tanakaParts.has(r)) {\n existsExample = true;\n break;\n }\n\n if (tanakaParts && tanakaParts.has(entryObj.id))\n existsExample = true;\n\n if (existsExample) entryObj.hasPhrases = true;\n }\n\n if (\n entryObj.id.length > 0 &&\n entryObj.readings.length > 0 &&\n entryObj.meanings.length > 0\n )\n dict.push(entryObj);\n }\n }\n }\n });\n\n return dict;\n}\n\n/**\n * Converts a KANJIDIC `kanjidic2.xml` file into an array of {@link DictKanji} objects.\n * @param xmlString The raw `kanjidic2.xml` file contents\n * @returns An array of converted {@link DictKanji} objects\n */\nexport function convertKanjiDic(xmlString: string): DictKanji[] {\n const dictParsed: libxml.Document = libxml.parseXml(xmlString, {\n dtdvalid: true,\n nonet: false,\n noent: true,\n recover: false,\n });\n const dict: DictKanji[] = [];\n\n xml.parseString(dictParsed, (err: Error | null, result: any) => {\n if (err === null) {\n if (\n result.kanjidic2 &&\n typeof result.kanjidic2 === \"object\" &&\n isValidArray(result.kanjidic2.character)\n )\n for (const entry of result.kanjidic2.character) {\n const kanjiObj: DictKanji = {\n kanji: entry.literal[0],\n };\n\n if (\n typeof kanjiObj.kanji === \"string\" &&\n kanjiObj.kanji.length === 1\n ) {\n if (\n isValidArrayWithFirstElement(entry.misc) &&\n typeof entry.misc[0] === \"object\"\n ) {\n const misc: any = entry.misc[0];\n\n kanjiObj.misc = {};\n\n if (\n isValidArrayWithFirstElement(misc.stroke_count) &&\n typeof misc.stroke_count[0] === \"string\"\n )\n kanjiObj.misc.strokeNumber = misc.stroke_count[0];\n\n if (\n isValidArrayWithFirstElement(misc.grade) &&\n typeof misc.grade[0] === \"string\"\n )\n kanjiObj.misc.grade = misc.grade[0];\n if (\n isValidArrayWithFirstElement(misc.freq) &&\n typeof misc.freq[0] === \"string\"\n )\n kanjiObj.misc.frequency = misc.freq[0];\n if (\n isValidArrayWithFirstElement(misc.jlpt) &&\n typeof misc.jlpt[0] === \"string\" &&\n [\"5\", \"4\", \"3\", \"2\", \"1\"].includes(misc.jlpt[0])\n )\n kanjiObj.misc.jlpt = `N${misc.jlpt[0]}` as JLPT;\n }\n\n if (isValidArray(entry.reading_meaning))\n for (const rm of entry.reading_meaning) {\n const rmObj: DictKanjiReadingMeaning = { groups: [] };\n\n if (isValidArray(rm.rmgroup))\n for (const group of rm.rmgroup) {\n const groupObj: DictKanjiReadingMeaningGroup = {\n readings: [],\n meanings: [],\n };\n\n if (isValidArray(group.reading))\n for (const reading of group.reading)\n if (\n reading._ &&\n typeof reading._ === \"string\" &&\n reading.$ &&\n typeof reading.$ === \"object\" &&\n reading.$.r_type &&\n (reading.$.r_type === \"ja_on\" ||\n reading.$.r_type === \"ja_kun\")\n )\n groupObj.readings!.push({\n reading: reading._,\n type: reading.$.r_type,\n });\n\n if (isValidArray(group.meaning))\n for (const meaning of group.meaning)\n if (typeof meaning === \"string\") {\n if (\n kanjiObj.isKokuji === undefined &&\n meaning === \"(kokuji)\"\n )\n kanjiObj.isKokuji = true;\n\n groupObj.meanings!.push(meaning);\n }\n if (\n groupObj.readings!.length > 0 ||\n groupObj.meanings!.length > 0\n ) {\n if (groupObj.readings!.length === 0)\n delete groupObj.readings;\n if (groupObj.meanings!.length === 0)\n delete groupObj.meanings;\n\n rmObj.groups!.push(groupObj);\n }\n }\n\n if (isStringArray(rm.nanori) && rm.nanori.length > 0)\n rmObj.nanori = rm.nanori;\n\n if (rmObj.groups!.length > 0 || rmObj.nanori) {\n if (kanjiObj.readingMeaning === undefined)\n kanjiObj.readingMeaning = [];\n\n kanjiObj.readingMeaning.push(rmObj);\n }\n }\n\n dict.push(kanjiObj);\n }\n }\n }\n });\n\n return dict;\n}\n\n/**\n * Converts a Tanaka Corpus `examples.utf` file into an array of {@link TanakaExample} objects.\n * @param tanakaString The raw contents of a `examples.utf` file\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects\n */\nexport function convertTanakaCorpus(tanakaString: string): TanakaExample[] {\n const tanakaArray: TanakaExample[] = [];\n const tanakaParsed: string[] = tanakaString.split(\"\\n\");\n\n for (let i: number = 0; i <= tanakaParsed.length; i += 2) {\n let a: string | undefined = tanakaParsed[i];\n let b: string | undefined = tanakaParsed[i + 1];\n\n if (a && b && a.startsWith(\"A: \") && b.startsWith(\"B: \")) {\n a = a.replace(\"A: \", \"\");\n b = b.replace(\"B: \", \"\");\n\n const idMatch: RegExpExecArray | null = regexps.tanakaID.exec(a);\n\n if (idMatch && idMatch.groups && idMatch.groups[\"id\"]) {\n const aParts: string[] = a.replace(regexps.tanakaID, \"\").split(\"\\t\");\n\n const bRawParts = b\n .split(\" \")\n .filter((part: string) => part.trim().length !== 0);\n\n const bParts: ExamplePart[] = [];\n\n for (const part of bRawParts) {\n const partMatches: RegExpExecArray | null =\n regexps.tanakaPart.exec(part);\n if (partMatches && partMatches.groups && partMatches.length > 0) {\n const baseForm: string | undefined = partMatches.groups[\"base\"];\n\n if (baseForm) {\n const examplePart: ExamplePart = { baseForm: baseForm };\n\n const reading: string | undefined = partMatches.groups[\"reading\"];\n const glossNumber: string | undefined =\n partMatches.groups[\"glossnum\"];\n const inflectedForm: string | undefined =\n partMatches.groups[\"inflection\"];\n\n if (reading)\n if (regexps.tanakaReferenceID.test(reading)) {\n const referenceID: RegExpExecArray | null =\n regexps.tanakaReferenceID.exec(reading);\n\n if (\n referenceID &&\n referenceID.groups &&\n referenceID.groups[\"entryid\"]\n )\n examplePart.referenceID = referenceID.groups[\"entryid\"];\n } else examplePart.reading = reading;\n\n if (glossNumber)\n examplePart.glossNumber = glossNumber.startsWith(\"0\")\n ? Number.parseInt(glossNumber.substring(1))\n : Number.parseInt(glossNumber);\n if (inflectedForm) examplePart.inflectedForm = inflectedForm;\n if (baseForm.endsWith(\"~\")) {\n examplePart.edited = true;\n examplePart.baseForm = examplePart.baseForm.replace(\"~\", \"\");\n }\n\n bParts.push(examplePart);\n }\n }\n }\n\n const phrase: string | undefined = aParts[0];\n const translation: string | undefined = aParts[1];\n\n if (phrase && translation)\n tanakaArray.push({\n id: idMatch.groups[\"id\"].trim() as `${number}_${number}`,\n phrase: phrase.trim(),\n translation: translation.trim(),\n parts: bParts,\n });\n }\n }\n }\n\n return tanakaArray;\n}\n\n/**\n * Converts a Tanaka Corpus `examples.utf` file into an array of {@link TanakaExample} objects (with furigana).\n * @param tanakaString The raw contents of a `examples.utf` file\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects (with furigana)\n */\nexport async function convertTanakaCorpusWithFurigana(\n tanakaString: string,\n): Promise<TanakaExample[]> {\n return new Promise<TanakaExample[]>(\n async (\n resolve: (value: TanakaExample[] | PromiseLike<TanakaExample[]>) => void,\n ) => {\n let tanakaArray: TanakaExample[] = convertTanakaCorpus(tanakaString);\n\n const kuroshiro: any = new Kuroshiro.default();\n\n await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any = kuroshiro.convert.bind(kuroshiro);\n\n tanakaArray = await Promise.all(\n tanakaArray.map(async (ex: TanakaExample) => {\n let furigana: string | undefined = undefined;\n\n if (convert !== null && !ex.phrase.includes(\"\u30FB\"))\n furigana = (await convert(ex.phrase, {\n to: \"hiragana\",\n mode: \"furigana\",\n })) as string;\n\n if (furigana) ex.furigana = furigana;\n\n return ex;\n }),\n );\n\n resolve(tanakaArray);\n },\n );\n}\n\n/**\n * Converts a `radkfile2` file (EUC-JP encoded) into an array of {@link DictRadical} objects.\n * @param radkBuffer A `radkfile2` buffer\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @returns An array of converted {@link DictRadical} objects\n */\nexport function convertRadkFile(\n radkBuffer: Buffer<ArrayBuffer>,\n kanjiDic: readonly DictKanji[],\n): DictRadical[] {\n const fileParsed: string[] = iconv\n .decode(radkBuffer, \"euc-jp\")\n .split(\"\\n\")\n .filter((line: string) => !line.startsWith(\"#\"));\n const radicals: DictRadical[] = [];\n\n for (let i = 0; i < fileParsed.length; i++) {\n const line: string | undefined = fileParsed[i];\n\n if (line && line.startsWith(\"$ \")) {\n const radical: DictRadical = {\n radical: line.charAt(2).trim(),\n strokes: line.substring(4).trim(),\n };\n\n let j: number = i + 1;\n let kanjiLine: string | undefined = fileParsed[j];\n\n if (kanjiLine) {\n const kanjiList: DictKanji[] = [];\n\n while (kanjiLine && !kanjiLine.startsWith(\"$ \")) {\n const kanjis: string[] = kanjiLine.split(\"\");\n\n for (const kanji of kanjis) {\n const foundKanji: DictKanji | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === kanji,\n );\n\n let kanjiObj: DictKanji = { kanji: kanji };\n\n if (foundKanji) kanjiObj = foundKanji;\n\n kanjiList.push(kanjiObj);\n }\n\n j++;\n kanjiLine = fileParsed[j];\n if (!kanjiLine) continue;\n\n if (kanjiLine.startsWith(\"$ \")) i = j - 1;\n }\n\n if (kanjiList.length > 0) radical.kanji = kanjiList;\n\n if (radical.radical.length === 1 && radical.strokes.length > 0)\n radicals.push(radical);\n }\n }\n }\n\n return radicals;\n}\n\n/**\n * Converts a `kradfile2` file (EUC-JP encoded) into an array of {@link DictKanjiWithRadicals} objects.\n * @param kradBuffer A `kradfile2` buffer\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @param katakanaList An array of katakana {@link Kana} objects\n * @returns An array of converted {@link DictKanjiWithRadicals} objects\n */\nexport function convertKradFile(\n kradBuffer: Buffer<ArrayBuffer>,\n kanjiDic: readonly DictKanji[],\n katakanaList: readonly Kana[],\n): DictKanjiWithRadicals[] {\n const fileParsed: string[] = iconv\n .decode(kradBuffer, \"euc-jp\")\n .split(\"\\n\")\n .filter((line: string) => !line.startsWith(\"#\"));\n const kanjiWithRadicals: DictKanjiWithRadicals[] = [];\n\n for (const line of fileParsed) {\n if (line.length > 0) {\n const split: string[] = line.split(\" : \");\n\n const kanjiChar: string | undefined = split[0];\n const radicalsRow: string | undefined = split[1];\n\n if (kanjiChar && radicalsRow) {\n const kanji: DictKanjiWithRadicals = {\n kanji: kanjiChar,\n radicals: [],\n };\n\n if (kanji.kanji.length === 1) {\n const radicals: string[] = radicalsRow.split(\" \");\n\n for (const radical of radicals) {\n const foundRadical: DictKanji | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === radical,\n );\n\n let radicalObj: DictKanji = foundRadical ?? { kanji: radical };\n\n if (!foundRadical) {\n const katakanaChar: Kana | undefined = katakanaList.find(\n (kana: Kana) => kana.kana === radical,\n );\n if (!katakanaChar) continue;\n\n radicalObj = {\n kanji: katakanaChar.kana,\n readingMeaning: [\n {\n groups: [\n {\n readings: [\n { reading: katakanaChar.kana, type: \"ja_on\" },\n ],\n meanings: [katakanaChar.reading],\n },\n ],\n },\n ],\n };\n }\n\n kanji.radicals.push(radicalObj);\n }\n }\n\n if (kanji.kanji.length === 1 && kanji.radicals.length > 0)\n kanjiWithRadicals.push(kanji);\n }\n }\n }\n\n return kanjiWithRadicals;\n}\n\nfunction mapEntry(entry: any): JaWiktionaryEntry {\n return {\n word: entry.word,\n pos_title: entry.pos_title,\n senses: entry.senses\n .filter(\n (sense: any) =>\n (isValidArray(sense.form_of) &&\n sense.form_of.every(\n (form: any) => form.word && typeof form.word === \"string\",\n )) ||\n isStringArray(sense.glosses),\n )\n .map((sense: any) => ({\n ...(sense.form_of\n ? {\n form_of: sense.form_of.map((form: any) => ({\n word: form.word,\n })),\n }\n : {}),\n glosses: sense.glosses,\n })),\n ...(isValidArray(entry.forms) &&\n entry.forms.every((form: any) => typeof form.form === \"string\")\n ? { forms: entry.forms.map((form: any) => ({ form: form.form })) }\n : {}),\n };\n}\n\n/**\n * Converts and filters a `ja.wiktionary.org` JSONL dump (sync)\n *\n * The dump file needs to be converted from a `jawiktionary-latest-pages-articles.xml.bz2` file from {@link https://dumps.wikimedia.org/jawiktionary/latest/} using {@link https://github.com/tatuylonen/wiktextract | wiktextract}.\n * @param buffer A JSONL dump file buffer\n * @returns An array containing only the Japanese entries\n */\nexport function convertJawiktionarySync(buffer: Buffer): JaWiktionaryEntry[] {\n const lines = buffer.toString(\"utf-8\").split(\"\\n\");\n const entries: JaWiktionaryEntry[] = [];\n\n for (let i: number = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const obj: any = JSON.parse(line);\n\n if (\n obj &&\n typeof obj === \"object\" &&\n obj.lang_code === \"ja\" &&\n obj.lang === \"\u65E5\u672C\u8A9E\"\n )\n entries.push(mapEntry(obj));\n }\n\n return entries;\n}\n\n/**\n * Converts and filters a `ja.wiktionary.org` JSONL dump (async)\n *\n * The dump file needs to be converted from a `jawiktionary-latest-pages-articles.xml.bz2` file from {@link https://dumps.wikimedia.org/jawiktionary/latest/} using {@link https://github.com/tatuylonen/wiktextract | wiktextract}.\n * @param stream A JSONL dump file stream\n * @returns An array containing only the Japanese entries\n */\nexport async function convertJawiktionaryAsync(\n stream: ReadStream,\n): Promise<JaWiktionaryEntry[]> {\n return new Promise<JaWiktionaryEntry[]>(\n async (\n resolve: (\n value: JaWiktionaryEntry[] | PromiseLike<JaWiktionaryEntry[]>,\n ) => void,\n ) => {\n const rl: Interface = createInterface({\n input: stream,\n crlfDelay: Infinity,\n });\n\n const entries: JaWiktionaryEntry[] = [];\n\n for await (const line of rl) {\n const obj: any = JSON.parse(line.trim());\n\n if (\n obj &&\n typeof obj === \"object\" &&\n obj.lang_code === \"ja\" &&\n obj.lang === \"\u65E5\u672C\u8A9E\"\n )\n entries.push(mapEntry(obj));\n }\n\n rl.close();\n stream.close();\n stream.destroy();\n\n resolve(entries);\n },\n );\n}\n\nfunction parseEntry(\n entry: JaWiktionaryEntry,\n definitions: Definition[],\n definitionMap: Map<string, { count: number }>,\n): void {\n if (isValidArray(entry.senses))\n for (const sense of entry.senses)\n if (isStringArray(sense.glosses)) {\n const definition: string = sense.glosses.join(\"\");\n\n if (\n !definitions.some((def: Definition) => def.definition === definition)\n ) {\n if (!definitionMap.has(definition))\n definitionMap.set(definition, { count: 1 });\n else definitionMap.get(definition)!.count++;\n\n definitions.push({ definition: definition });\n }\n }\n}\n\n/**\n * Pairs Japanese definitions with JMdict word entries\n * @param entryList An array containing `ja.wiktionary.org` Japanese entries (converted using {@link convertJawiktionarySync} or {@link convertJawiktionaryAsync})\n * @param jmDict An array of converted `JMdict` entries\n * @returns A promise resolving with an array of {@link WordDefinitionPair} objects\n */\nexport function getWordDefinitions(\n entryList: readonly JaWiktionaryEntry[],\n jmDict: readonly DictWord[],\n): WordDefinitionPair[] {\n const entries: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n\n for (const entry of entryList) {\n const ent: JaWiktionaryEntry[] | undefined = entries.get(entry.word);\n\n if (ent) ent.push(mapEntry(entry));\n else entries.set(entry.word, [mapEntry(entry)]);\n }\n\n const japaneseDefinitions: WordDefinitionPair[] = [];\n const definitionMap: Map<string, { count: number }> = new Map<\n string,\n { count: number }\n >();\n\n const validWords: DictWord[] = [];\n const validReadings: Set<string> = new Set<string>();\n const validKanjiForms: Set<string> = new Set<string>();\n\n if (jmDict.length > 0)\n for (const word of jmDict) {\n let valid: boolean = false;\n\n for (const r of word.readings)\n if (\n (r.notes === undefined ||\n !r.notes.some((note: string) => notSearchedForms.has(note)) ||\n r.commonness !== undefined) &&\n !validReadings.has(r.reading)\n ) {\n validReadings.add(r.reading);\n if (!valid) valid = true;\n }\n if (word.kanjiForms)\n for (const kf of word.kanjiForms)\n if (\n (kf.notes === undefined ||\n !kf.notes.some((note: string) => notSearchedForms.has(note)) ||\n kf.commonness !== undefined) &&\n !validKanjiForms.has(kf.form)\n ) {\n validKanjiForms.add(kf.form);\n if (!valid) valid = true;\n }\n\n if (valid) validWords.push(word);\n }\n\n const validTitleEntries: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n const entriesWithFormTitlesGlobal: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n const entriesWithFormsGlobal: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n\n const validFormOfEntries: Set<string> = new Set<string>();\n const validGlossesEntries: Set<string> = new Set<string>();\n const validFormsEntries: Set<string> = new Set<string>();\n\n const ents = Array.from(entries.values()).flat();\n\n for (const entry of ents) {\n let valid: boolean = false;\n\n if (validKanjiForms && validKanjiForms.has(entry.word)) {\n valid = true;\n\n if (isValidArray(entry.senses))\n for (const sense of entry.senses) {\n if (\n isValidArray(sense.form_of) &&\n sense.form_of.some(\n (form: any) =>\n form.word &&\n typeof form.word === \"string\" &&\n validReadings.has(form.word),\n )\n )\n validFormOfEntries.add(entry.word);\n else if (isStringArray(sense.glosses)) {\n for (const gloss of sense.glosses) {\n let reading: string | undefined = undefined;\n\n if (gloss !== undefined)\n if (\n gloss.trim().includes(\"\u6F22\u5B57\u8868\u8A18\") ||\n gloss.trim().includes(\"\u53C2\u7167\")\n )\n for (const r of validReadings)\n if (gloss.trim().includes(r)) {\n reading = r;\n break;\n }\n\n if (reading) validGlossesEntries.add(entry.word);\n }\n }\n }\n\n if (isValidArray(entry.forms))\n for (const form of entry.forms)\n if (\n form.form &&\n typeof form.form === \"string\" &&\n validReadings.has(form.form)\n )\n validFormsEntries.add(entry.word);\n } else if (validReadings.has(entry.word)) {\n valid = true;\n const ftEntry = entriesWithFormTitlesGlobal.get(entry.word);\n\n if (ftEntry) ftEntry.push(entry);\n else entriesWithFormTitlesGlobal.set(entry.word, [entry]);\n }\n\n if (valid) {\n const tEntry = validTitleEntries.get(entry.word);\n\n if (tEntry) tEntry.push(entry);\n else validTitleEntries.set(entry.word, [entry]);\n }\n\n if (\n isValidArray(entry.forms) &&\n (validKanjiForms.has(entry.word) || validReadings.has(entry.word)) &&\n entry.forms.some(\n (form: any) =>\n validKanjiForms.has(form.form) || validReadings.has(form.form),\n )\n ) {\n const wfEntry = entriesWithFormsGlobal.get(entry.word);\n\n if (wfEntry) wfEntry.push(entry);\n else entriesWithFormsGlobal.set(entry.word, [entry]);\n }\n }\n\n ents.length = 0;\n\n const posMap: Map<\n POS,\n {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n }\n > = new Map<\n POS,\n {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n }\n >();\n\n const vte: JaWiktionaryEntry[] = Array.from(\n validTitleEntries.values(),\n ).flat();\n const fge: JaWiktionaryEntry[] = Array.from(\n entriesWithFormTitlesGlobal.values(),\n ).flat();\n const wfe: JaWiktionaryEntry[] = Array.from(\n entriesWithFormsGlobal.values(),\n ).flat();\n\n for (const pos of [\n \"\u540D\u8A5E\",\n \"\u52D5\u8A5E\",\n \"\u6210\u53E5\",\n \"\u526F\u8A5E\",\n \"\u5F62\u5BB9\u52D5\u8A5E\",\n \"\u52A9\u8A5E\",\n \"\u611F\u52D5\u8A5E\",\n \"\u4EE3\u540D\u8A5E\",\n \"\u63A5\u5C3E\u8F9E\",\n \"\u63A5\u982D\u8A9E\",\n \"\u9020\u8A9E\u6210\u5206\",\n \"\u7565\u8A9E\",\n \"\u56FA\u6709\u540D\u8A5E\",\n \"\u4EBA\u79F0\u4EE3\u540D\u8A5E\",\n \"\u63A5\u982D\u8F9E\",\n \"\u63A5\u7D9A\u52A9\u8A5E\",\n \"\u9593\u6295\u8A5E\",\n \"\u52A9\u52D5\u8A5E\",\n \"\u5F62\u5BB9\u8A5E\",\n \"\u7E2E\u7D04\u5F62\",\n \"\u63A5\u8F9E\",\n \"\u63A5\u7D9A\u8A5E\",\n \"\u9023\u4F53\u8A5E\",\n \"\u4EBA\u540D\",\n \"\u8A18\u53F7\",\n \"\u6570\u8A5E\",\n \"\u6163\u7528\u53E5\",\n \"\u3053\u3068\u308F\u3056\",\n \"\u52A9\u6570\u8A5E\",\n \"\u82F1\u6570\u5B57\u6DF7\u5408\u8868\u8A18\",\n \"\u52D5\u8A5E\u53E5\",\n \"\u6210\u8A9E\",\n \"\u610F\u7FA9\",\n \"\u982D\u5B57\u8A9E\",\n \"\u63A5\u5C3E\u8A9E\",\n ]) {\n if (!posMap.has(pos as POS)) posMap.set(pos as POS, {});\n\n for (const te of vte)\n if (te.pos_title === pos || te.pos_title === \"\u548C\u8A9E\u306E\u6F22\u5B57\u8868\u8A18\") {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.title === undefined)\n posEntries.title = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined = posEntries.title.get(\n te.word,\n );\n\n if (entryList) entryList.push(te);\n else posEntries.title.set(te.word, [te]);\n }\n\n for (const ft of fge)\n if (ft.pos_title === pos) {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.formTitle === undefined)\n posEntries.formTitle = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined =\n posEntries.formTitle.get(ft.word);\n\n if (entryList) entryList.push(ft);\n else posEntries.formTitle.set(ft.word, [ft]);\n }\n\n for (const wf of wfe)\n if (wf.pos_title === pos) {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.form === undefined)\n posEntries.form = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined = posEntries.form.get(\n wf.word,\n );\n\n if (entryList) entryList.push(wf);\n else posEntries.form.set(wf.word, [wf]);\n }\n }\n\n vte.length = 0;\n fge.length = 0;\n wfe.length = 0;\n\n const wordEntriesPairs: {\n word: DictWord;\n readings: Set<string>;\n kanjiForms?: Set<string>;\n entriesWithTitles: any[];\n entriesWithFormTitles: any[];\n entriesWithForms: any[];\n }[] = [];\n\n for (const word of validWords) {\n const poses: Set<POS> = new Set<POS>();\n\n for (const m of word.meanings) {\n if (m.partOfSpeech)\n for (const note of m.partOfSpeech) {\n const noteEntry:\n | readonly [string, string]\n | readonly [string, string, POS | readonly POS[]]\n | undefined = noteMap.get(note);\n\n if (noteEntry && noteEntry.length === 3) {\n const notePos: POS | readonly POS[] = noteEntry[2];\n\n if (Array.isArray(notePos))\n for (const pos of notePos) {\n if (!poses.has(pos)) poses.add(pos);\n }\n else if (typeof notePos === \"string\" && !poses.has(notePos))\n poses.add(notePos);\n }\n }\n }\n\n const validWordReadings = new Set<string>(\n word.readings\n .filter(\n (r: DictReading) =>\n r.notes === undefined ||\n !r.notes.some((note: string) => notSearchedForms.has(note)) ||\n r.commonness !== undefined,\n )\n .map((r: Reading) => r.reading),\n );\n const validWordKanjiForms: Set<string> | undefined = word.kanjiForms\n ? new Set<string>(\n word.kanjiForms\n .filter(\n (kf: DictKanjiForm) =>\n kf.notes === undefined ||\n !kf.notes.some((note: string) => notSearchedForms.has(note)) ||\n kf.commonness !== undefined,\n )\n .map((kf: DictKanjiForm) => kf.form),\n )\n : undefined;\n\n const entriesWithTitles: JaWiktionaryEntry[] = [];\n const entriesWithFormTitles: JaWiktionaryEntry[] = [];\n const entriesWithForms: JaWiktionaryEntry[] = [];\n\n if (poses.size > 0)\n for (const pos of poses) {\n const posEntries:\n | {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n }\n | undefined = posMap.get(pos);\n\n if (posEntries) {\n if (validWordKanjiForms)\n for (const kf of validWordKanjiForms) {\n const te: JaWiktionaryEntry[] | undefined =\n posEntries.title?.get(kf);\n const fe: JaWiktionaryEntry[] | undefined =\n posEntries.form?.get(kf);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n validFormOfEntries.has(ent.word) ||\n validGlossesEntries.has(ent.word) ||\n validFormsEntries.has(ent.word),\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: { form: string }) =>\n validWordKanjiForms.has(form.form) ||\n validWordReadings.has(form.form),\n ),\n ),\n );\n }\n\n for (const r of validWordReadings) {\n const te: JaWiktionaryEntry[] | undefined =\n posEntries.title?.get(r);\n const fe: JaWiktionaryEntry[] | undefined = posEntries.form?.get(r);\n const fte: JaWiktionaryEntry[] | undefined =\n posEntries.formTitle?.get(r);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n (ent.forms &&\n validWordKanjiForms &&\n ent.forms.some((form: any) =>\n validWordKanjiForms.has(form.form),\n )) ||\n validWordKanjiForms === undefined,\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: { form: string }) =>\n (validWordKanjiForms &&\n validWordKanjiForms.has(form.form)) ||\n validWordReadings.has(form.form),\n ),\n ),\n );\n if (fte) entriesWithFormTitles.push(...fte);\n }\n }\n }\n\n if (\n entriesWithTitles.length === 0 &&\n entriesWithFormTitles.length === 0 &&\n entriesWithForms.length === 0\n ) {\n if (validWordKanjiForms)\n for (const kf of validWordKanjiForms) {\n const te: JaWiktionaryEntry[] | undefined = validTitleEntries.get(kf);\n const fe: JaWiktionaryEntry[] | undefined =\n entriesWithFormsGlobal.get(kf);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n validFormOfEntries.has(ent.word) ||\n validGlossesEntries.has(ent.word) ||\n validFormsEntries.has(ent.word),\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: { form: string }) =>\n validWordKanjiForms.has(form.form) ||\n validWordReadings.has(form.form),\n ),\n ),\n );\n }\n\n for (const r of validWordReadings) {\n const te: JaWiktionaryEntry[] | undefined = validTitleEntries.get(r);\n const fe: JaWiktionaryEntry[] | undefined =\n entriesWithFormsGlobal.get(r);\n const fte: JaWiktionaryEntry[] | undefined =\n entriesWithFormTitlesGlobal.get(r);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n (ent.forms &&\n validWordKanjiForms &&\n ent.forms.some((form: any) =>\n validWordKanjiForms.has(form.form),\n )) ||\n validWordKanjiForms === undefined,\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: { form: string }) =>\n (validWordKanjiForms &&\n validWordKanjiForms.has(form.form)) ||\n validWordReadings.has(form.form),\n ),\n ),\n );\n if (fte) entriesWithFormTitles.push(...fte);\n }\n }\n\n if (\n entriesWithTitles.length > 0 &&\n (entriesWithFormTitles.length > 0 || entriesWithForms.length > 0)\n )\n wordEntriesPairs.push({\n word: word,\n readings: validWordReadings,\n ...(validWordKanjiForms ? { kanjiForms: validWordKanjiForms } : {}),\n entriesWithTitles: entriesWithTitles,\n entriesWithFormTitles: entriesWithFormTitles,\n entriesWithForms: entriesWithForms,\n });\n }\n\n for (const pair of wordEntriesPairs) {\n const definitions: Definition[] = [];\n\n const kanjiFormEntries: any[] = [];\n const readingWithFormsEntries: any[] = [];\n const readingEntries: any[] = [];\n\n const titleFormMap: Map<string, Set<string>> = new Map<\n string,\n Set<string>\n >();\n const refsMap: Map<string, Set<string>> = new Map<string, Set<string>>();\n const readingForms: Set<string> = new Set<string>();\n\n for (const ent of pair.entriesWithTitles) {\n const validFormOf: boolean = validFormOfEntries.has(ent.word);\n const validGlosses: boolean = validGlossesEntries.has(ent.word);\n const validForms: boolean = validFormsEntries.has(ent.word);\n\n if (\n pair.kanjiForms &&\n pair.kanjiForms.has(ent.word) &&\n (validFormOf || validGlosses || validForms)\n ) {\n kanjiFormEntries.push(ent);\n\n if ((validFormOf || validGlosses) && isValidArray(ent.senses))\n for (const sense of ent.senses) {\n if (validFormOf && isValidArray(sense.form_of)) {\n for (const form of sense.form_of)\n if (\n form.word &&\n typeof form.word === \"string\" &&\n pair.readings.has(form.word)\n ) {\n const elem: Set<string> | undefined = titleFormMap.get(\n form.word,\n );\n\n if (!elem)\n titleFormMap.set(form.word, new Set<string>([ent.word]));\n else elem.add(ent.word);\n }\n } else if (validGlosses && isStringArray(sense.glosses)) {\n for (const gloss of sense.glosses) {\n let reading: string | undefined = undefined;\n\n if (gloss !== undefined)\n if (\n gloss.trim().includes(\"\u6F22\u5B57\u8868\u8A18\") ||\n gloss.trim().includes(\"\u53C2\u7167\")\n )\n for (const r of pair.readings)\n if (gloss.trim().includes(r)) {\n reading = r;\n break;\n }\n\n if (reading) {\n const elem: Set<string> | undefined = refsMap.get(reading);\n\n if (!elem) refsMap.set(reading, new Set<string>([ent.word]));\n else elem.add(ent.word);\n }\n }\n }\n }\n\n if (validForms && isValidArray(ent.forms))\n for (const form of ent.forms)\n if (\n form.form &&\n typeof form.form === \"string\" &&\n pair.readings.has(form.form)\n )\n readingForms.add(form.form);\n } else if (\n pair.readings.has(ent.word) &&\n isValidArray(ent.forms) &&\n pair.kanjiForms &&\n ent.forms.some((form: any) => pair.kanjiForms!.has(form.form))\n )\n readingWithFormsEntries.push(ent);\n else if (pair.kanjiForms === undefined && pair.readings.has(ent.word))\n readingEntries.push(ent);\n }\n\n for (const entry of pair.entriesWithForms) {\n const elem: Set<string> | undefined = titleFormMap.get(entry.word);\n\n if (elem && entry.forms.some((form: any) => elem.has(form.form)))\n readingWithFormsEntries.push(entry);\n }\n\n for (const entry of pair.entriesWithFormTitles) {\n if (readingForms.has(entry.word)) {\n readingWithFormsEntries.push(entry);\n continue;\n }\n\n if (pair.kanjiForms) {\n const ft: Set<string> | undefined = refsMap.get(entry.word);\n\n if (ft && !ft.isDisjointFrom(pair.kanjiForms))\n readingWithFormsEntries.push(entry);\n }\n }\n\n let parsedReadingWithFormsEntries: boolean = false;\n\n for (const entry of kanjiFormEntries)\n if (\n entry.pos_title === \"\u548C\u8A9E\u306E\u6F22\u5B57\u8868\u8A18\" &&\n readingWithFormsEntries.length > 0\n ) {\n if (!parsedReadingWithFormsEntries)\n parsedReadingWithFormsEntries = true;\n\n for (const ref of readingWithFormsEntries)\n parseEntry(ref, definitions, definitionMap);\n } else parseEntry(entry, definitions, definitionMap);\n\n if (!parsedReadingWithFormsEntries && readingWithFormsEntries.length > 0) {\n parsedReadingWithFormsEntries = true;\n\n for (const ref of readingWithFormsEntries)\n parseEntry(ref, definitions, definitionMap);\n }\n\n if (readingEntries.length > 0)\n for (const readingEntry of readingEntries)\n parseEntry(readingEntry, definitions, definitionMap);\n\n if (definitions.length > 0)\n japaneseDefinitions.push({\n wordID: pair.word.id,\n definitions: definitions,\n });\n }\n\n for (let i: number = 0; i < japaneseDefinitions.length; i++) {\n const pair: WordDefinitionPair = japaneseDefinitions[i]!;\n\n for (let j: number = 0; j < pair.definitions.length; j++) {\n const defCount: { count: number } | undefined = definitionMap.get(\n pair.definitions[j]!.definition,\n );\n\n if (defCount && defCount.count > 1)\n pair.definitions[j]!.mayNotBeAccurate = true;\n }\n\n japaneseDefinitions[i] = pair;\n }\n\n return japaneseDefinitions;\n}\n\n/**\n * Pairs Japanese definitions with JMdict word entries (with furigana)\n * @param entryList An array containing `ja.wiktionary.org` Japanese entries (converted using {@link convertJawiktionarySync} or {@link convertJawiktionaryAsync})\n * @param jmDict An array of converted `JMdict` entries\n * @returns A promise resolving with an array of {@link WordDefinitionPair} objects (with furigana)\n */\nexport async function getWordDefinitionsWithFurigana(\n entryList: readonly JaWiktionaryEntry[],\n jmDict: readonly DictWord[],\n): Promise<WordDefinitionPair[]> {\n return new Promise<WordDefinitionPair[]>(async (resolve) => {\n const japaneseDefinitions: WordDefinitionPair[] = getWordDefinitions(\n entryList,\n jmDict,\n );\n\n const kuroshiro: any = new Kuroshiro.default();\n await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any = kuroshiro.convert.bind(kuroshiro);\n\n for (let i: number = 0; i < japaneseDefinitions.length; i++) {\n const pair: WordDefinitionPair = japaneseDefinitions[i]!;\n\n for (let j: number = 0; j < pair.definitions.length; j++)\n if (!pair.definitions[j]!.definition.includes(\"\u30FB\"))\n pair.definitions[j]!.furigana = (await convert(\n pair.definitions[j]!.definition,\n {\n to: \"hiragana\",\n mode: \"furigana\",\n },\n )) as string;\n\n japaneseDefinitions[i] = pair;\n }\n\n resolve(japaneseDefinitions);\n });\n}\n\nfunction lookupWordNote(\n key: string,\n notes?: string[] | undefined,\n tags?: string[] | undefined,\n): NoteAndTag {\n const info:\n | readonly [string, string]\n | readonly [string, string, POS | readonly POS[]]\n | undefined = noteMap.get(key.toLowerCase());\n\n if (!info) {\n if (notes) notes.push(key);\n\n return { note: key };\n }\n\n const tag: string = `word::${info[0]}`;\n\n if (tags && !tags.includes(tag)) tags.push(tag);\n if (notes) notes.push(info[1]);\n\n return { note: info[1], tag: tag };\n}\n\nconst wordAddNoteArray: (\n arr: string[] | undefined,\n cb: (v: string) => void,\n) => void = (arr: string[] | undefined, cb: (v: string) => void) => {\n if (!arr) return;\n for (const v of arr) cb(v);\n};\n\n/**\n * Transforms a converted `JMdict` entry into a more readable format, by providing either its JMdict entry ID or the {@link DictWord} object directly.\n * @param word The ID of the `JMdict` entry or a {@link DictWord} object\n * @param dict An array of converted `JMdict` entries (not needed if {@link word} is a {@link DictWord} object)\n * @param kanjiDic An array or an ID-kanji map of converted `KANJIDIC` entries\n * @param examples An array of converted `Tanaka Corpus` examples\n * @param definitions An array or ID-definitions map of `ja.wiktionary.org` word definitions\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link Word} object or `undefined` if entry is not found\n */\nexport function getWord(\n word: `${number}` | DictWord,\n dict?: readonly DictWord[],\n kanjiDic?: readonly DictKanji[] | Map<string, readonly DictKanji[]>,\n examples?: readonly TanakaExample[] | Map<string, readonly TanakaExample[]>,\n definitions?:\n | readonly WordDefinitionPair[]\n | Map<string, readonly Definition[]>,\n noteTypeName?: string,\n deckPath?: string,\n): Word | undefined {\n let dictWord: DictWord | undefined = undefined;\n\n if (typeof word === \"string\" && dict)\n dictWord = dict.find((entry) => entry.id === word);\n else if (typeof word === \"object\") dictWord = word;\n\n if (dictWord) {\n const word: Word = {\n id: dictWord.id,\n readings: [],\n translations: [],\n noteID: `word_${dictWord.id}`,\n noteTypeName: noteTypeName,\n deckPath: deckPath,\n tags: [],\n };\n\n if (dictWord.isCommon === true) {\n word.common = true;\n word.tags!.push(\"word::common\");\n }\n\n if (dictWord.kanjiForms)\n word.kanjiForms = dictWord.kanjiForms.map(\n (dictKanjiForm: DictKanjiForm) => ({\n kanjiForm: dictKanjiForm.form,\n ...(dictKanjiForm.notes\n ? {\n notes: dictKanjiForm.notes.map((note: string) => {\n const noteAndTag: NoteAndTag = lookupWordNote(\n note,\n undefined,\n word.tags!,\n );\n\n return capitalizeString(noteAndTag.note);\n }),\n }\n : {}),\n ...(dictKanjiForm.commonness && dictKanjiForm.commonness.length > 0\n ? { common: true }\n : {}),\n }),\n );\n\n word.readings = dictWord.readings.map((dictReading: DictReading) => ({\n reading: dictReading.reading,\n ...(dictReading.kanjiFormRestrictions || dictReading.notes\n ? {\n notes: [\n ...(dictReading.kanjiFormRestrictions\n ? dictReading.kanjiFormRestrictions.map(\n (restriction: string) =>\n `Reading restricted to ${restriction}`,\n )\n : []),\n ...(dictReading.notes\n ? dictReading.notes.map((note: string) => {\n const noteAndTag: NoteAndTag = lookupWordNote(\n note,\n undefined,\n word.tags!,\n );\n\n return capitalizeString(noteAndTag.note);\n })\n : []),\n ],\n }\n : {}),\n ...(dictReading.commonness && dictReading.commonness.length > 0\n ? { common: true }\n : {}),\n }));\n\n word.translations = [];\n\n for (const dictMeaning of dictWord.meanings)\n if (dictMeaning.translations) {\n const translationTypes: string[] = [];\n const translations: string[] = dictMeaning.translations.map(\n (\n translation:\n | string\n | { translation: string; type: \"lit\" | \"expl\" | \"tm\" },\n ) => {\n if (typeof translation === \"string\") return translation;\n else {\n if (translation.type === \"lit\") {\n translationTypes.push(\"Literal meaning\");\n word.tags!.push(\"word::literal_meaning\");\n } else if (translation.type === \"expl\") {\n translationTypes.push(\"Explanation\");\n word.tags!.push(\"word::explanation\");\n } else if (translation.type === \"tm\") {\n translationTypes.push(\"Trademark\");\n word.tags!.push(\"word::trademark\");\n }\n\n return translation.translation;\n }\n },\n );\n\n const notes: string[] = [];\n\n wordAddNoteArray(\n dictMeaning.kanjiFormRestrictions,\n (restriction: string) =>\n notes.push(`Meaning restricted to ${restriction}`),\n );\n wordAddNoteArray(\n dictMeaning.readingRestrictions,\n (restriction: string) =>\n notes.push(`Meaning restricted to ${restriction}`),\n );\n for (const t of translationTypes) notes.push(t);\n wordAddNoteArray(dictMeaning.partOfSpeech, (pos: string) =>\n lookupWordNote(pos, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.fields, (field: string) =>\n lookupWordNote(field, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.dialects, (dialect: string) =>\n lookupWordNote(dialect, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.antonyms, (antonym: string) =>\n notes.push(`Antonym: ${antonym}`),\n );\n wordAddNoteArray(dictMeaning.references, (reference: string) =>\n notes.push(`Related: ${reference}`),\n );\n wordAddNoteArray(dictMeaning.info, (info: string) =>\n lookupWordNote(info, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.misc, (misc: string) =>\n lookupWordNote(misc, notes, word.tags!),\n );\n\n for (let i: number = 0; i < notes.length; i++)\n notes[i] = capitalizeString(notes[i]!);\n\n word.translations.push({\n translation: translations.join(\"; \"),\n notes: notes,\n });\n }\n\n if (dictWord.usuallyInKana === true) {\n word.usuallyInKana = true;\n word.tags!.push(\"word::usually_in_kana_for_all_senses\");\n }\n\n if (kanjiDic && word.kanjiForms) {\n const kanji: Kanji[] = [];\n\n for (const kanjiForm of word.kanjiForms)\n for (const char of kanjiForm.kanjiForm) {\n if (\n !regexps.kanji.test(char) ||\n kanji.some((kanji: Kanji) => kanji.kanji === char)\n )\n continue;\n const kanjiObj: Kanji | undefined = getKanji(\n char,\n Array.isArray(kanjiDic)\n ? (kanjiDic as DictKanji[])\n : (kanjiDic as Map<string, readonly DictKanji[]>).get(char),\n );\n\n if (kanjiObj)\n kanji.push({\n kanji: kanjiObj.kanji,\n ...(kanjiObj.meanings && kanjiObj.meanings.length > 0\n ? { meanings: kanjiObj.meanings }\n : {}),\n });\n }\n\n if (kanji.length > 0) word.kanji = kanji;\n }\n\n if (dictWord.hasPhrases === true && examples) {\n const exampleList: readonly TanakaExample[] | undefined = Array.isArray(\n examples,\n )\n ? (examples as readonly TanakaExample[])\n : (examples as Map<string, readonly TanakaExample[]>).get(word.id!);\n\n if (exampleList) {\n const readings: Set<string> = new Set<string>(\n word.readings\n .filter(\n (reading: Reading) =>\n (reading.notes === undefined ||\n !reading.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (word.common === undefined || reading.common === true),\n )\n .map((reading: Reading) => reading.reading),\n );\n\n const existValidKf: boolean | undefined =\n word.kanjiForms && word.kanjiForms.length > 0\n ? word.kanjiForms.some(\n (kf: KanjiForm) =>\n (kf.notes === undefined ||\n !kf.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (word.common === undefined || kf.common === true),\n )\n : undefined;\n\n const kanjiForms: Set<string> | undefined =\n word.kanjiForms && word.kanjiForms.length > 0\n ? new Set<string>(\n word.kanjiForms\n .filter((kanjiForm: KanjiForm) => {\n if (existValidKf === true)\n return (\n (kanjiForm.notes === undefined ||\n !kanjiForm.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (word.common === undefined || kanjiForm.common === true)\n );\n else return true;\n })\n .map((kanjiForm: KanjiForm) => kanjiForm.kanjiForm),\n )\n : undefined;\n\n let kanjiFormExamples: {\n ex: TanakaExample;\n partIndex: number;\n form?: string | undefined;\n }[] = [];\n const readingMatchingKanjiFormExamples: {\n ex: TanakaExample;\n partIndex: number;\n }[] = [];\n const readingExamples: { ex: TanakaExample; partIndex: number }[] = [];\n const readingMatchingKanjiForms: Set<string> = new Set<string>();\n\n for (const example of exampleList)\n for (let i: number = 0; i < example.parts.length; i++) {\n const part: ExamplePart = example.parts[i]!;\n\n const readingAsReadingMatch: boolean =\n part.reading !== undefined && readings.has(part.reading);\n const readingAsInflectedFormMatch: boolean =\n part.inflectedForm !== undefined &&\n readings.has(part.inflectedForm);\n\n const referenceIDMatch: boolean =\n part.referenceID !== undefined &&\n word.id !== undefined &&\n part.referenceID === word.id;\n\n if (\n (kanjiForms && kanjiForms.has(part.baseForm)) ||\n referenceIDMatch\n ) {\n if (readingAsReadingMatch || readingAsInflectedFormMatch) {\n readingMatchingKanjiFormExamples.push({\n ex: example,\n partIndex: i,\n });\n\n readingMatchingKanjiForms.add(part.baseForm);\n } else\n kanjiFormExamples.push({\n ex: example,\n partIndex: i,\n form: part.baseForm,\n });\n\n break;\n }\n\n const readingAsBaseFormMatch: boolean = readings.has(part.baseForm);\n\n if (\n (readingAsBaseFormMatch || referenceIDMatch) &&\n kanjiForms === undefined\n ) {\n readingExamples.push({ ex: example, partIndex: i });\n\n break;\n }\n }\n\n if (readingMatchingKanjiForms.size > 0)\n kanjiFormExamples = kanjiFormExamples.filter(\n (ex: {\n ex: TanakaExample;\n partIndex: number;\n form?: string | undefined;\n }) => ex.form && readingMatchingKanjiForms.has(ex.form),\n );\n\n const includeKanjiFormExamples: boolean = word.kanjiForms !== undefined;\n\n let wordExamples: { ex: TanakaExample; partIndex: number }[] = [\n ...(includeKanjiFormExamples\n ? [...readingMatchingKanjiFormExamples, ...kanjiFormExamples]\n : []),\n ...(!includeKanjiFormExamples ? readingExamples : []),\n ];\n\n readingMatchingKanjiForms.clear();\n\n const glossSpecificExamples: {\n ex: TanakaExample;\n partIndex: number;\n }[] = [];\n const seenPhrases: Set<string> = new Set<string>();\n\n for (let i: number = 0; i < word.translations.length; i++) {\n outer: for (const example of wordExamples) {\n if (seenPhrases.has(example.ex.phrase)) continue;\n\n for (let j: number = 0; j < example.ex.parts.length; j++) {\n const part: ExamplePart = example.ex.parts[j]!;\n\n if (j === example.partIndex && part.glossNumber === i + 1) {\n example.ex.glossNumber = {\n wordId: word.id!,\n glossNumber: i + 1,\n };\n\n glossSpecificExamples.push(example);\n seenPhrases.add(example.ex.phrase);\n\n break outer;\n }\n }\n }\n\n if (glossSpecificExamples.length === 5) break;\n }\n\n if (glossSpecificExamples.length === 5)\n wordExamples = [...glossSpecificExamples];\n else if (glossSpecificExamples.length > 0)\n wordExamples = [\n ...glossSpecificExamples,\n ...wordExamples\n .filter(\n (ex: { ex: TanakaExample; partIndex: number }) =>\n !seenPhrases.has(ex.ex.phrase),\n )\n .slice(0, 5 - glossSpecificExamples.length),\n ];\n\n if (wordExamples.length > 0) {\n word.phrases = (\n wordExamples.length > 5 ? wordExamples.slice(0, 5) : wordExamples\n ).map((ex: { ex: TanakaExample; partIndex: number }) => ({\n phrase: ex.ex.furigana ?? ex.ex.phrase,\n translation: ex.ex.translation,\n originalPhrase: ex.ex.phrase,\n ...(ex.ex.glossNumber ? { glossNumber: ex.ex.glossNumber } : {}),\n }));\n\n word.tags!.push(\"word::has_phrases\");\n if (glossSpecificExamples.length > 0)\n word.tags!.push(\"word::has_meaning-specific_phrases\");\n }\n }\n }\n\n if (definitions) {\n const defs: readonly Definition[] | undefined = Array.isArray(definitions)\n ? definitions.find((wdp: WordDefinitionPair) => wdp.wordID === word.id!)\n ?.definitions\n : (definitions as Map<string, readonly Definition[]>).get(word.id!);\n\n if (defs) word.definitions = [...defs];\n }\n\n return word;\n } else return undefined;\n}\n\n/**\n * Transforms a converted `KANJIDIC` entry into a more readable format\n * @param kanji The kanji character or a {@link DictKanji} object\n * @param dict An array of converted `KANJIDIC` entries (not needed if {@link kanji} is a {@link DictKanji} object)\n * @param jmDict An array or a kanji-words map of converted `JMdict` entries\n * @param svgList An array of SVG file names\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link Kanji} object or `undefined` if entry is not found\n */\nexport function getKanji(\n kanji: string | DictKanji,\n dict?: readonly DictKanji[],\n jmDict?: readonly DictWord[] | Map<string, readonly DictWord[]>,\n svgList?: readonly string[],\n noteTypeName?: string,\n deckPath?: string,\n): Kanji | undefined {\n let dictKanji: DictKanji | undefined = undefined;\n\n if (typeof kanji === \"string\" && dict)\n dictKanji = dict.find((entry: DictKanji) => entry.kanji === kanji);\n else if (typeof kanji === \"object\") dictKanji = kanji;\n\n if (dictKanji) {\n const kanji: Kanji = {\n kanji: dictKanji.kanji,\n strokes: dictKanji.misc!.strokeNumber,\n ...(dictKanji.misc && dictKanji.misc.grade\n ? { grade: dictKanji.misc.grade }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.frequency\n ? { frequency: dictKanji.misc.frequency }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.jlpt\n ? { jlpt: dictKanji.misc.jlpt }\n : {}),\n noteID: `kanji_${dictKanji.kanji}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n tags: [],\n };\n\n if (dictKanji.readingMeaning && dictKanji.readingMeaning.length > 0) {\n const meanings: string[] = [];\n const nanori: string[] = [];\n const onyomi: string[] = [];\n const kunyomi: string[] = [];\n\n for (const rm of dictKanji.readingMeaning) {\n if (rm.nanori && rm.nanori.length > 0) nanori.push(...rm.nanori);\n\n if (rm.groups)\n for (const group of rm.groups) {\n if (group.readings) {\n onyomi.push(\n ...group.readings\n .filter(\n (reading: DictKanjiReading) => reading.type === \"ja_on\",\n )\n .map((reading: DictKanjiReading) => reading.reading),\n );\n kunyomi.push(\n ...group.readings\n .filter(\n (reading: DictKanjiReading) => reading.type === \"ja_kun\",\n )\n .map((reading: DictKanjiReading) => reading.reading),\n );\n }\n\n if (group.meanings && group.meanings.length > 0)\n meanings.push(...group.meanings);\n }\n }\n\n if (meanings.length > 0) kanji.meanings = meanings;\n if (nanori.length > 0) kanji.nanori = nanori;\n if (onyomi.length > 0) kanji.onyomi = onyomi;\n if (kunyomi.length > 0) kanji.kunyomi = kunyomi;\n }\n\n if (jmDict) {\n let kanjiWords: readonly DictWord[] | Word[] | undefined = Array.isArray(\n jmDict,\n )\n ? (jmDict as readonly DictWord[])\n : (jmDict as Map<string, readonly DictWord[]>).get(kanji.kanji);\n\n const firstKfWords: readonly DictWord[] | undefined = kanjiWords?.filter(\n (word: DictWord) =>\n word.kanjiForms && word.kanjiForms[0]!.form.includes(kanji.kanji),\n );\n\n if (firstKfWords && firstKfWords.length > 0) kanjiWords = firstKfWords;\n else if (kanjiWords) kanjiWords = kanjiWords;\n\n if (kanjiWords) {\n const validWords: Word[] = [];\n\n for (const word of kanjiWords) {\n const kanjiForm: string | undefined = (\n firstKfWords && firstKfWords.length > 0\n ? word.kanjiForms![0]\n : word.kanjiForms!.find((kf: DictKanjiForm) =>\n kf.form.includes(kanji.kanji),\n )\n )?.form;\n if (!kanjiForm) continue;\n\n const reading: string | undefined = (\n firstKfWords && firstKfWords.length > 0\n ? word.readings[0]\n : word.readings.find(\n (reading: DictReading) =>\n reading.kanjiFormRestrictions &&\n reading.kanjiFormRestrictions.includes(kanjiForm),\n )\n )?.reading;\n if (!reading) continue;\n\n const meaning: DictTranslation | undefined =\n firstKfWords && firstKfWords.length > 0\n ? word.meanings[0]?.translations![0]\n : word.meanings.find(\n (m: DictMeaning) =>\n m.translations &&\n m.kanjiFormRestrictions &&\n m.kanjiFormRestrictions.includes(kanjiForm),\n )?.translations![0];\n if (!meaning) continue;\n\n validWords.push({\n kanjiForms: [{ kanjiForm: kanjiForm }],\n readings: [{ reading: reading }],\n translations: [\n {\n translation:\n typeof meaning === \"string\" ? meaning : meaning.translation,\n },\n ],\n });\n\n if (validWords.length === 3) break;\n }\n\n if (validWords.length > 0) kanji.words = validWords;\n }\n }\n\n if (svgList) {\n let codePoint: number | string | undefined = kanji.kanji.codePointAt(0);\n\n if (codePoint !== undefined) {\n codePoint = codePoint.toString(16);\n\n const fileNames: [string, string] = [\n `0${codePoint}.svg`,\n `${codePoint}.svg`,\n ];\n\n const svg: string | undefined = svgList.find((svgFile: string) =>\n fileNames.includes(svgFile.toLowerCase()),\n );\n\n if (svg) kanji.svg = svg;\n }\n }\n\n if (kanji.tags && dictKanji.isKokuji === true) {\n kanji.kokuji = true;\n kanji.tags.push(\"kanji::kokuji\");\n\n if (kanji.meanings)\n kanji.meanings.splice(\n kanji.meanings.findIndex((meaning: string) => meaning === \"(kokuji)\"),\n 1,\n );\n }\n\n if (kanji.tags)\n kanji.tags.push(\n `kanji::strokes::${kanji.strokes}`,\n ...(kanji.frequency ? [`kanji::frequency::${kanji.frequency}`] : []),\n ...(kanji.grade ? [`kanji::grade::${kanji.grade}`] : []),\n ...(kanji.jlpt\n ? [`kanji::pre-2010_jlpt::${kanji.jlpt.toLowerCase()}`]\n : []),\n `kanji::onyomi::${kanji.onyomi?.length ?? 0}`,\n `kanji::kunyomi::${kanji.kunyomi?.length ?? 0}`,\n `kanji::nanori::${kanji.nanori?.length ?? 0}`,\n `kanji::words::${kanji.words?.length ?? 0}`,\n ...(kanji.svg ? [\"kanji::has_svg\"] : []),\n );\n\n return kanji;\n } else return undefined;\n}\n\n/**\n * Same as {@link getKanji}, but with possible extra info.\n * @param info Additional info for the kanji (mnemonic, components, words)\n * @param kanji The kanji character or a {@link DictKanji} object\n * @param dict An array of converted `KANJIDIC` entries\n * @param useWords Whether or not to use the words provided in the `info` object (if present) instead of other words from `JMdict`\n * @param jmDict An array or a kanji-words map of converted `JMdict` entries\n * @param svgList An array of SVG file names\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @param sourceURL A link leading to the source of {@link info}\n * @returns The transformed {@link Kanji} object\n */\nexport function getKanjiExtended(\n info: Kanji,\n kanji: string | DictKanji,\n dict?: readonly DictKanji[],\n useWords?: true,\n jmDict?: readonly DictWord[] | Map<string, readonly DictWord[]>,\n svgList?: readonly string[],\n noteTypeName?: string,\n deckPath?: string,\n sourceURL?: string,\n): Kanji | undefined {\n const kanjiObj: Kanji | undefined = getKanji(\n kanji,\n dict,\n jmDict,\n svgList,\n noteTypeName,\n deckPath,\n );\n\n if (kanjiObj) {\n let usedInfo: boolean = false;\n\n if (info.components) {\n kanjiObj.components = info.components;\n usedInfo = true;\n }\n if (info.mnemonic && info.mnemonic.length > 0) {\n kanjiObj.mnemonic = info.mnemonic;\n usedInfo = true;\n }\n if (useWords === true && info.words && info.words.length > 0) {\n kanjiObj.words = info.words;\n usedInfo = true;\n }\n\n if (kanjiObj.tags) {\n if (kanjiObj.components)\n kanjiObj.tags.push(`kanji::components::${kanjiObj.components.length}`);\n\n if (kanjiObj.mnemonic && kanjiObj.mnemonic.length > 0)\n kanjiObj.tags.push(\"kanji::has_mnemonic\");\n\n if (useWords === true && kanjiObj.words && info.words)\n kanjiObj.tags.forEach((tag: string, index: number) => {\n if (\n tag.startsWith(\"kanji::words::\") &&\n kanjiObj.words &&\n kanjiObj.tags\n ) {\n kanjiObj.tags.splice(\n index,\n 1,\n `kanji::words::${kanjiObj.words.length}`,\n );\n }\n });\n }\n\n if (sourceURL && info.externalInfo === true && usedInfo)\n kanjiObj.source = sourceURL;\n\n return kanjiObj;\n } else return undefined;\n}\n\nexport function isWord(entry: Result): entry is Word {\n return (\n (entry as Word).translations !== undefined &&\n (entry as Word).readings !== undefined\n );\n}\n\nexport function isRadical(entry: Result): entry is Radical {\n return (entry as Radical).radical !== undefined;\n}\n\nexport function isKanji(entry: Result): entry is Kanji {\n return (\n (entry as Word).translations === undefined &&\n (entry as Word).readings === undefined &&\n (entry as Radical).radical === undefined &&\n (entry as Kanji).kanji !== undefined\n );\n}\n\nexport function isKana(entry: Result): entry is Kana {\n return (entry as Kana).kana !== undefined;\n}\n\nexport function isGrammar(entry: Result): entry is Grammar {\n return (entry as Grammar).point !== undefined;\n}\n\nconst createNotes: (notes: string[], phrase?: true) => string = (\n notes: string[],\n phrase?: true,\n) =>\n `${phrase === true ? \"<details><summary>Show translation</summary>\" : \"\"}<ul class=\"note-list\">${notes.map((note: string) => `<li class=\"note\">${note}</li>`).join(\"\")}</ul>${phrase === true ? \"</details>\" : \"\"}`;\nconst createEntry: (\n entry: string,\n notes?: string[],\n phrase?: true,\n glossSpecific?: true,\n) => string = (\n entry: string,\n notes?: string[],\n phrase?: true,\n glossSpecific?: true,\n) =>\n `<div class=\"entry${glossSpecific ? \" gloss-specific\" : \"\"}\">${entry}${notes && notes.length > 0 ? createNotes(notes, phrase) : \"\"}</div>`;\nconst noKanjiForms: string =\n '<span class=\"word word-kanjiform\">(no kanji forms)</span>';\n\n/**\n * Generates an array where each field holds an entry\u2019s info wrapped in HTML tags.\n * @param entry Any type of mapped entry ({@link Word}, {@link Kanji}, {@link Radical}, {@link Kana}, {@link Grammar})\n * @returns An array of fields, each corresponding to an Anki note type field\n */\nexport function generateAnkiNote(entry: Result): string[] {\n const fields: string[] = [];\n\n if (isWord(entry)) {\n const firstReading: string = createEntry(\n `<span class=\"word word-reading\">${entry.readings[0]!.reading}${entry.readings[0]!.audio !== undefined ? `<br>[sound:${entry.readings[0]!.audio}]` : \"\"}</span>`,\n entry.readings[0]!.notes,\n );\n const otherReadings: string | undefined =\n entry.readings.length > 1\n ? `<details><summary>Show other readings</summary>${entry.readings\n .slice(1)\n .map((readingEntry: Reading) =>\n createEntry(\n `<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`,\n readingEntry.notes,\n ),\n )\n .join(\"\")}</details>`\n : undefined;\n const readingsField: string = [firstReading, ...(otherReadings ?? [])].join(\n \"\",\n );\n\n const firstKanjiForm: string | undefined = entry.kanjiForms\n ? createEntry(\n `<span class=\"word word-kanjiform\"><ruby><rb>${entry.kanjiForms[0]!.kanjiForm}</rb><rt>${entry.readings[0]!.reading}</rt></ruby></span>`,\n entry.kanjiForms[0]!.notes,\n )\n : undefined;\n const otherKanjiForms: string | undefined =\n entry.kanjiForms && entry.kanjiForms.length > 1\n ? `<details><summary>Show other kanji forms</summary>${entry.kanjiForms\n .slice(1)\n .map((kanjiFormEntry: KanjiForm) => {\n const restrictedReading: Reading | undefined =\n entry.readings.find(\n (r: Reading) =>\n r.notes &&\n r.notes.includes(\n `Reading restricted to ${kanjiFormEntry.kanjiForm}`,\n ),\n );\n\n return `${createEntry(`<span class=\"word word-kanjiform\">${restrictedReading ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${restrictedReading ? `</rb><rt>${restrictedReading.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}`;\n })\n .join(\"\")}</details>`\n : undefined;\n\n const kanjiFormsField: string | undefined = firstKanjiForm\n ? [firstKanjiForm, ...(otherKanjiForms ?? [])].join(\"\")\n : undefined;\n\n const firstThreeTranslations: string = entry.translations\n .slice(0, 3)\n .map(\n (translationEntry: Translation, index: number) =>\n `${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes, undefined, entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? true : undefined)}`,\n )\n .join(\"\");\n\n const otherTranslations: string | undefined =\n entry.translations.length > 3\n ? `<details><summary>Show other translations</summary>${entry.translations\n .map((translationEntry: Translation, index: number) =>\n index > 2\n ? `${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes, undefined, entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? true : undefined)}`\n : \"null\",\n )\n .filter((translation: string) => translation !== \"null\")\n .join(\"\")}</details>`\n : undefined;\n\n const translationsField: string = [\n firstThreeTranslations,\n ...(otherTranslations ?? []),\n ].join(\"\");\n\n fields.push(\n ...(entry.kanjiForms && kanjiFormsField && !entry.usuallyInKana\n ? [kanjiFormsField, readingsField]\n : [\n readingsField,\n entry.kanjiForms && kanjiFormsField\n ? kanjiFormsField\n : noKanjiForms,\n ]),\n translationsField,\n entry.phrases\n ? entry.phrases\n .map((phraseEntry: Phrase, index: number) =>\n createEntry(\n `<span class=\"word word-phrase\"><span class=\"word word-phrase-original\">${phraseEntry.originalPhrase}</span><span class=\"word word-phrase-furigana\">${phraseEntry.phrase}</span></span>`,\n [phraseEntry.translation],\n true,\n entry.translations.some(\n (_translation: Translation, index2: number) =>\n index === index2 &&\n phraseEntry.glossNumber &&\n phraseEntry.glossNumber.wordId === entry.id &&\n phraseEntry.glossNumber.glossNumber === index2 + 1,\n )\n ? true\n : undefined,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-phrase\">(no phrases) (Search on dictionaries!)</span>',\n entry.definitions\n ? entry.definitions\n .map((definitionEntry: Definition) =>\n createEntry(\n `<span class=\"word word-definition${definitionEntry.mayNotBeAccurate === true ? \" mnba\" : \"\"}\"><span class=\"word word-definition-original\">${definitionEntry.definition}</span><span class=\"word word-definition-furigana\">${definitionEntry.furigana ?? definitionEntry.definition}</span></span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-definition\">(no definitions)</span>',\n entry.kanji\n ? entry.kanji\n .map((kanjiEntry: Kanji) =>\n createEntry(\n `<span class=\"word word-kanji\">${kanjiEntry.kanji}${kanjiEntry.meanings === undefined ? \" (no meanings)\" : \"\"}</span>`,\n kanjiEntry.meanings,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-kanji\">(no kanji)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n }\n\n if (isRadical(entry))\n fields.push(\n createEntry(\n `<span class=\"radical radical-character\">${entry.radical}</span>`,\n ),\n createEntry(\n `<span class=\"radical radical-reading\">${entry.reading}</span>`,\n ),\n entry.meanings\n .map((meaningEntry: string) =>\n createEntry(\n `<span class=\"radical radical-meaning\">${meaningEntry}</span>`,\n ),\n )\n .join(\"\"),\n entry.mnemonic\n ? createEntry(\n `<span class=\"radical radical-mnemonic\">${entry.mnemonic}</span>`,\n )\n : '<span class=\"radical radical-mnemonic\">(no mnemonic) (Come up with your own!)</span>',\n entry.kanji\n ? entry.kanji\n .map((kanji: Kanji) =>\n createEntry(\n `<span class=\"radical radical-kanji\">${kanji.kanji}${kanji.meanings && kanji.meanings.length === 1 ? ` - ${kanji.meanings[0]}` : \"\"}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"radical radical-kanji\">(no \"used-in\" kanji)</span>',\n entry.strokes\n ? createEntry(\n `<span class=\"radical radical-strokes\">${entry.strokes}<br>${entry.svg ? `<img class=\"radical radical-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.radical} stroke order SVG\">` : \"(no stroke order SVG available)\"}</span>`,\n )\n : '<span class=\"radical radical-strokes\">(no stroke number)</span>',\n entry.sources\n ? `<span class=\"radical radical-source\">${entry.sources.map((source: string, index: number) => `<a href=\"${source}\" target=\"_blank\">Source ${index + 1}</a>`).join(\"<br>\")}</span>`\n : '<span class=\"radical radical-source\">(no sources)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isKanji(entry))\n fields.push(\n createEntry(`<span class=\"kanji kanji-character\">${entry.kanji}</span>`),\n entry.meanings\n ? entry.meanings\n .map((meaningEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-meaning\">${meaningEntry}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-meaning\">(no meanings)</span>',\n entry.onyomi\n ? entry.onyomi\n .map((onyomiEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-onyomi\">${onyomiEntry}</span>`,\n ),\n )\n .join(\"\")\n : `<span class=\"kanji kanji-onyomi\">(no onyomi) ${entry.kokuji === true ? \"(kokuji)\" : \"\"}</span`,\n entry.kunyomi\n ? entry.kunyomi\n .map((kunyomiEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-kunyomi\">${kunyomiEntry}</span>`,\n ),\n )\n .join(\"\")\n : `<span class=\"kanji kanji-kunyomi\">(no kunyomi) ${entry.kokuji === true ? \"(kokuji)\" : \"\"}</span>`,\n entry.nanori\n ? entry.nanori\n .map((nanoriEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-nanori\">${nanoriEntry}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-nanori\">(no nanori)</span>',\n entry.components\n ? entry.components\n .map((componentEntry: KanjiComponent) =>\n createEntry(\n `<span class=\"kanji kanji-component\">${componentEntry.component}${componentEntry.meaning ? ` - ${componentEntry.meaning}` : \"\"}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-component\">(no components)</span>',\n entry.mnemonic\n ? createEntry(\n `<span class=\"kanji kanji-mnemonic\">${entry.mnemonic}</span>`,\n )\n : '<span class=\"kanji kanji-mnemonic\">(no mnemonic) (Come up with your own!)</span>',\n entry.words\n ? entry.words\n .map((word: Word) =>\n createEntry(\n `<span class=\"kanji kanji-words\">${word.kanjiForms![0]!.kanjiForm} / ${word.readings[0]!.reading} - ${word.translations[0]!.translation}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-words\">(no words) (Search on dictionaries!)</span>',\n entry.strokes\n ? createEntry(\n `<span class=\"kanji kanji-strokes\">${entry.strokes}<br>${entry.svg ? `<img class=\"kanji kanji-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.kanji} stroke order SVG\">` : \"(no stroke order SVG available)\"}</span>`,\n )\n : '<span class=\"kanji kanji-strokes\">(no stroke number)</span>',\n entry.source\n ? `<span class=\"kanji kanji-source\"><a href=\"${entry.source}\" target=\"_blank\">Source</a></span>`\n : '<span class=\"kanji kanji-source\">(no components/mnemonic source)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isKana(entry))\n fields.push(\n createEntry(`<span class=\"kana kana-character\">${entry.kana}</span>`),\n createEntry(\n `<span class=\"kana kana-reading\">${entry.reading}${entry.audio !== undefined ? `<br>[sound:${entry.audio}]` : \"\"}</span>`,\n ),\n entry.svg\n ? createEntry(\n `<img class=\"kana kana-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.kana} stroke order SVG\">`,\n )\n : \"(no stroke order SVG available)\",\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isGrammar(entry))\n fields.push(\n createEntry(`<span class=\"grammar grammar-point\">${entry.point}</span>`),\n entry.readings\n ? entry.readings\n .map((readingEntry: Reading) =>\n createEntry(\n `<span class=\"grammar grammar-reading\">${readingEntry.reading}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-reading\">(no additional readings)</span>',\n createEntry(\n `<span class=\"grammar grammar-meaning\">${entry.meaning.meaning}${entry.meaning.example && entry.meaning.example.length > 0 ? `<br><span class=\"grammar grammar-meaning-example\">${entry.meaning.example}</span>` : \"\"}</span>`,\n ),\n entry.usages\n ? entry.usages\n .map((usage) =>\n createEntry(\n `<span class=\"grammar grammar-usage\">${usage}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-usage\">(no usages)</span>',\n entry.phrases\n ? entry.phrases\n .map((phraseEntry: Phrase) =>\n createEntry(\n `<span class=\"grammar grammar-phrase\"><span class=\"grammar grammar-phrase-original\">${phraseEntry.originalPhrase}</span><span class=\"grammar grammar-phrase-furigana\">${phraseEntry.phrase}</span></span>`,\n [phraseEntry.translation],\n true,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-phrase\">(no phrases) (Search on dictionaries!)</span>',\n entry.source\n ? `<span class=\"grammar grammar-source\"><a href=\"${entry.source}\" target=\"_blank\">Source</a></span>`\n : '<span class=\"grammar grammar-source\">(no source)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n return fields.map((field: string) => field.replaceAll(\"\\n\", \"<br>\"));\n}\n\n/**\n * Generates an Anki notes file with each entry\u2019s info organized into fields, either in HTML or plain text.\n * @param list An array containing any type of transformed entries ({@link Word}, {@link Kanji}, {@link Radical}, {@link Kana}, {@link Grammar})\n * @param defaultNoteInfo An object with options regarding default values of some note information\n * @returns The resulting Anki notes file's content\n */\nexport function generateAnkiNotesFile(\n list: readonly Result[],\n defaultNoteInfo?: DefaultNoteInfo | undefined,\n): string {\n const headers: string[] = [noteHeaderKeys.separator, noteHeaderKeys.html];\n let ankiNotes: string = \"\";\n\n if (list.length > 0) {\n if (defaultNoteInfo === undefined) defaultNoteInfo = {};\n\n const infoValues: any[] = Object.values(defaultNoteInfo);\n\n let invalidList: boolean = false;\n\n const firstEntry: Result = list[0]!;\n const firstEntryInfo: {\n readonly guid: \"string\" | \"undefined\";\n readonly noteType: \"string\" | \"undefined\";\n readonly deckPath: \"string\" | \"undefined\";\n } = {\n guid: typeof firstEntry.noteID as \"string\" | \"undefined\",\n noteType: typeof firstEntry.noteTypeName as \"string\" | \"undefined\",\n deckPath: typeof firstEntry.deckPath as \"string\" | \"undefined\",\n };\n\n if (\n infoValues.length === 0 ||\n infoValues.some((value: any) => value === true || value === undefined)\n )\n for (const res of list)\n if (\n (defaultNoteInfo.guid === true && res.noteID === undefined) ||\n (defaultNoteInfo.noteType === true &&\n res.noteTypeName === undefined) ||\n (defaultNoteInfo.deckPath === true && res.deckPath === undefined) ||\n (defaultNoteInfo.guid === undefined &&\n typeof res.noteID !== firstEntryInfo.guid) ||\n (defaultNoteInfo.noteType === undefined &&\n typeof res.noteTypeName !== firstEntryInfo.noteType) ||\n (defaultNoteInfo.deckPath === undefined &&\n typeof res.deckPath !== firstEntryInfo.deckPath)\n ) {\n invalidList = true;\n break;\n }\n\n if (invalidList) throw new Error(\"Invalid result list\");\n\n const hasHeader: {\n guid: boolean;\n noteType: boolean;\n deckPath: boolean;\n tags: boolean;\n } = { guid: false, noteType: false, deckPath: false, tags: false };\n let headerCount: 0 | 1 | 2 | 3 = 0;\n\n ankiNotes = list\n .filter((result: Result) => result.doNotCreateNote === undefined)\n .map((result: Result) => {\n if (\n typeof defaultNoteInfo!.guid === \"string\" &&\n result.noteID === undefined\n ) {\n if (isWord(result) && result.id) result.noteID = result.id;\n if (isKanji(result)) result.noteID = result.kanji;\n if (isRadical(result)) result.noteID = result.radical;\n if (isKana(result)) result.noteID = result.kana;\n if (isGrammar(result) && result.id) result.noteID = result.id;\n }\n\n if (\n typeof defaultNoteInfo!.noteType === \"string\" &&\n result.noteTypeName === undefined\n )\n result.noteTypeName = defaultNoteInfo!.noteType;\n if (\n typeof defaultNoteInfo!.deckPath === \"string\" &&\n result.deckPath === undefined\n )\n result.deckPath = defaultNoteInfo!.deckPath;\n\n if (!hasHeader.guid && result.noteID) {\n headers.push(`${noteHeaderKeys.guid}${++headerCount}`);\n hasHeader.guid = true;\n }\n if (!hasHeader.noteType && result.noteTypeName) {\n headers.push(`${noteHeaderKeys.notetype}${++headerCount}`);\n hasHeader.noteType = true;\n }\n if (!hasHeader.deckPath && result.deckPath) {\n headers.push(`${noteHeaderKeys.deck}${++headerCount}`);\n hasHeader.deckPath = true;\n }\n\n const note: string[] = generateAnkiNote(result);\n\n if (!hasHeader.tags) {\n headers.push(`${noteHeaderKeys.tags}${note.length + headerCount}`);\n hasHeader.tags = true;\n }\n\n return `${result.noteID ? `${result.noteID}\\t` : \"\"}${result.noteTypeName ? `${result.noteTypeName}\\t` : \"\"}${result.deckPath ? `${result.deckPath}\\t` : \"\"}${note.join(\"\\t\")}`;\n })\n .join(\"\\n\")\n .trim();\n }\n\n return `${headers.join(\"\\n\")}\\n\\n${ankiNotes}`;\n}\n"],
|
|
5
|
-
"mappings": "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A;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MAC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",
|
|
6
|
-
"names": ["libxml", "xml", "readings", "kanjiForms", "iconv", "entryList", "
|
|
4
|
+
"sourcesContent": ["export type * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./utils\";\n", "import { NoteHeaderKeys, POS, UsefulRegExps } from \"./types\";\n\nexport const regexps: UsefulRegExps = {\n hiragana: /[\\u{3040}-\\u{309F}]/u,\n katakana: /[\\u{30A0}-\\u{30FF}]/u,\n kanji: /\\p{Script=Han}+/u,\n regExChars: /[-\\/\\\\^$*+?.()|[\\]{}]/,\n tanakaID: /#ID=(?<id>\\d+_\\d+)$/,\n tanakaPart:\n /(?<base>[^()\\[\\]\\{\\}\\s]+)(?:\\((?<reading>[\\S]+)\\))?(?:\\[(?<glossnum>[\\S]+)\\])?(?:\\{(?<inflection>[\\S]+)\\})?/,\n tanakaReferenceID: /#(?<entryid>[\\d]+)/,\n};\n\nexport const noteHeaderKeys: NoteHeaderKeys = {\n separator: \"#separator:tab\",\n html: \"#html:true\",\n guid: \"#guid column:\",\n notetype: \"#notetype column:\",\n deck: \"#deck column:\",\n tags: \"#tags column:\",\n};\n\nexport const notSearchedForms: Set<string> = new Set<string>([\n \"search-only kana form\",\n \"Search-only kana form\",\n \"rarely used kana form\",\n \"Rarely used kana form\",\n \"out-dated or obsolete kana usage\",\n \"Out-dated or obsolete kana usage\",\n \"search-only kanji form\",\n \"Search-only kanji form\",\n \"rarely-used kanji form\",\n \"Rarely-used kanji form\",\n \"out-dated kanji\",\n \"Out-dated kanji form\",\n \"out-dated kanji or kanji usage\",\n \"word containing out-dated kanji or kanji usage\",\n \"Out-dated kanji or kanji usage\",\n]);\n\nexport const noteMap: Map<\n string,\n readonly [string, string] | readonly [string, string, POS | readonly POS[]]\n> = new Map<\n string,\n readonly [string, string] | readonly [string, string, POS | readonly POS[]]\n>([\n [\"brazilian\", [\"dialect::brazilian\", \"Dialect: Brazilian\"]],\n [\"hokkaido-ben\", [\"dialect::hokkaido-ben\", \"Dialect: Hokkaid\u014D-ben\"]],\n [\"kansai-ben\", [\"dialect::kansai-ben\", \"Dialect: Kansai-ben\"]],\n [\"kantou-ben\", [\"dialect::kantou-ben\", \"Dialect: Kant\u014D-ben\"]],\n [\"kyoto-ben\", [\"dialect::kyoto-ben\", \"Dialect: Ky\u014Dto-ben\"]],\n [\"kyuushuu-ben\", [\"dialect::kyuushuu-ben\", \"Dialect: Ky\u016Bsh\u016B-ben\"]],\n [\"nagano-ben\", [\"dialect::nagano-ben\", \"Dialect: Nagano-ben\"]],\n [\"ryuukyuu-ben\", [\"dialect::ryuukyuu-ben\", \"Dialect: Ry\u016Bky\u016B-ben\"]],\n [\"osaka-ben\", [\"dialect::osaka-ben\", \"Dialect: \u014Csaka-ben\"]],\n [\"touhoku-ben\", [\"dialect::touhoku-ben\", \"Dialect: T\u014Dhoku-ben\"]],\n [\"tosa-ben\", [\"dialect::tosa-ben\", \"Dialect: Tosa-ben\"]],\n [\"tsugaru-ben\", [\"dialect::tsugaru-ben\", \"Dialect: Tsugaru-ben\"]],\n [\"aichi dialect\", [\"dialect::aichi\", \"Dialect: Aichi\"]],\n [\"tochigi dialect\", [\"dialect::tochigi\", \"Dialect: Tochigi\"]],\n [\"lit\", [\"literal_meaning\", \"Literal meaning\"]],\n [\"expl\", [\"explanation\", \"Explanation\"]],\n [\"tm\", [\"trademark\", \"Trademark\"]],\n [\"adjective (keiyoushi)\", [\"adjective::i\", \"\u3044-adjective\", \"\u5F62\u5BB9\u8A5E\"]],\n [\"'taru' adjective\", [\"adjective::taru\", \"\u305F\u308B-adjective\", \"\u5F62\u5BB9\u52D5\u8A5E\"]],\n [\n \"noun (common) (futsuumeishi)\",\n [\"common_noun\", \"Common noun\", [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\"]],\n ],\n [\n \"pre-noun adjectival (rentaishi)\",\n [\"pre-noun_adjectival\", \"Pre-noun adjectival\", \"\u9023\u4F53\u8A5E\"],\n ],\n [\n \"noun or verb acting prenominally\",\n [\"noun_or_verb_acting_prenominally\", \"Noun or verb acting prenominally\"],\n ],\n [\"pronoun\", [\"pronoun\", \"Pronoun\", [\"\u4EE3\u540D\u8A5E\", \"\u4EBA\u79F0\u4EE3\u540D\u8A5E\"]]],\n [\"adverb (fukushi)\", [\"adverb\", \"Adverb\", \"\u526F\u8A5E\"]],\n [\n \"adverb taking the 'to' particle\",\n [\"takes::to\", \"Adverb taking the '\u3068' particle\", \"\u526F\u8A5E\"],\n ],\n [\n \"onomatopoeic or mimetic word\",\n [\"onomatopoeic_or_mimetic\", \"Onomatopoeic or mimetic word\"],\n ],\n [\n \"nouns which may take the genitive case particle 'no'\",\n [\"takes::no\", \"May take the '\u306E' particle\", [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\"]],\n ],\n [\n \"noun or participle which takes the aux. verb suru\",\n [\"takes::suru\", \"Takes the aux. verb '\u3059\u308B'\", \"\u52D5\u8A5E\"],\n ],\n [\"suru verb - irregular\", [\"suru_verb\", \"Irregular \u3059\u308B-verb\", \"\u52D5\u8A5E\"]],\n [\"suru verb - special class\", [\"suru_verb\", \"Special \u3059\u308B-verb\", \"\u52D5\u8A5E\"]],\n [\"ichidan verb\", [\"ichidan_verb\", \"Ichidan verb\", \"\u52D5\u8A5E\"]],\n [\n \"godan verb with 'ku' ending\",\n [\"godan::ku::verb\", \"Godan verb with '\u304F' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'gu' ending\",\n [\"godan::gu::verb\", \"Godan verb with '\u3050' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'u' ending\",\n [\"godan::u::verb\", \"Godan verb with '\u3046' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'tsu' ending\",\n [\"godan::tsu::verb\", \"Godan verb with '\u3064' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'ru' ending\",\n [\"godan::ru::verb\", \"Godan verb with '\u308B' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'nu' ending\",\n [\"godan::nu::verb\", \"Godan verb with '\u306C' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'mu' ending\",\n [\"godan::mu::verb\", \"Godan verb with '\u3080' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'bu' ending\",\n [\"godan::bu::verb\", \"Godan verb with '\u3076' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'su' ending\",\n [\"godan::su::verb\", \"Godan verb with '\u3059' ending\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb with 'u' ending (special class)\",\n [\n \"godan::u::irregular_verb\",\n \"Irregular godan verb with '\u3046' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb with 'ru' ending (irregular verb)\",\n [\n \"godan::ru::irregular_verb\",\n \"Irregular godan verb with '\u308B' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb - -aru special class\",\n [\n \"godan::aru::irregular_verb\",\n \"Irregular godan verb with '-\u3042\u308B' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"godan verb - iku/yuku special class\",\n [\n \"godan::iku_yuku::irregular_verb\",\n \"Irregular godan verb with '\u3044\u304F' or '\u3086\u304F' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"irregular nu verb\",\n [\n \"godan::nu::irregular_verb\",\n \"Irregular godan verb with '\u306C' ending\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\"kuru verb - special class\", [\"kuru_verb\", \"Special '\u304F\u308B' verb\", \"\u52D5\u8A5E\"]],\n [\"transitive verb\", [\"transitive_verb\", \"Transitive verb\", \"\u52D5\u8A5E\"]],\n [\"intransitive verb\", [\"intransitive_verb\", \"Intransitive verb\", \"\u52D5\u8A5E\"]],\n [\"auxiliary verb\", [\"auxiliary_verb\", \"Auxiliary verb\", [\"\u52D5\u8A5E\", \"\u52A9\u52D5\u8A5E\"]]],\n [\n \"auxiliary adjective\",\n [\"adjective::auxiliary\", \"Auxiliary adjective\", [\"\u52A9\u8A5E\", \"\u52A9\u52D5\u8A5E\"]],\n ],\n [\"auxiliary\", [\"auxiliary\", \"Auxiliary\", [\"\u52A9\u8A5E\", \"\u52A9\u52D5\u8A5E\"]]],\n [\"after a verb\", [\"after::verb\", \"After a verb\"]],\n [\n \"after the -te form of a verb\",\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"after te-form of verbs and adj.\",\n [\n \"after::verb_or_adjective_te_form\",\n \"After the '\u3066' form of a verb or an adjective\",\n ],\n ],\n [\n \"after the -masu stem of a verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after -masu stem of verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after masu stem of verb\",\n [\"after::masu_stem\", \"After the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after -masu stem or adj. stem\",\n [\n \"after::masu_or_adjective_stem\",\n \"After the '-\u307E\u3059' stem of a verb or an adjective stem\",\n ],\n ],\n [\n \"after a noun or the -masu stem of a verb\",\n [\"after::noun_or_masu_stem\", \"After a noun or the '-\u307E\u3059' stem of a verb\"],\n ],\n [\n \"after the plain past form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after present form of a verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after the dictionary form of a verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after past form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after volitional form of verb\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\n \"after the past tense form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\"after adjective stem\", [\"after::adjective_stem\", \"After adjective stem\"]],\n [\"with neg. sentence\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with. neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"with a verb in negative form\",\n [\"with::negative_verb\", \"With negative verb\"],\n ],\n [\"with verb in the negative\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"with negative verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"after negative base of verb\",\n [\"after::negative_verb_base\", \"After the base of a verb\"],\n ],\n [\n 'follows a verb in \"-te\" form',\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"before a verb in negative form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a negative form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a neg. form\",\n [\"before::negative_verb\", \"Before a verb in negative form\"],\n ],\n [\n \"before a noun or a verb\",\n [\"before::noun_or_verb\", \"Before a noun or a verb\"],\n ],\n [\"before an adjective\", [\"before::adjective\", \"Before an adjective\"]],\n [\"after a noun\", [\"after::noun\", \"After a noun\"]],\n [\"prefix\", [\"prefix\", \"Prefix\", [\"\u63A5\u982D\u8A9E\", \"\u63A5\u982D\u8F9E\"]]],\n [\n \"noun, used as a prefix\",\n [\n \"prefix_noun\",\n \"Noun, used as a prefix\",\n [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\", \"\u63A5\u982D\u8A9E\", \"\u63A5\u982D\u8F9E\"],\n ],\n ],\n [\"suffix\", [\"suffix\", \"Suffix\", [\"\u63A5\u5C3E\u8A9E\", \"\u63A5\u5C3E\u8F9E\"]]],\n [\n \"noun, used as a suffix\",\n [\n \"suffix_noun\",\n \"Noun, used as a suffix\",\n [\"\u540D\u8A5E\", \"\u9020\u8A9E\u6210\u5206\", \"\u63A5\u5C3E\u8A9E\", \"\u63A5\u5C3E\u8F9E\"],\n ],\n ],\n [\"counter\", [\"counter\", \"Counter\", \"\u52A9\u6570\u8A5E\"]],\n [\"numeric\", [\"numeric\", \"Numeric\", \"\u6570\u8A5E\"]],\n [\"particle\", [\"particle\", \"Particle\", [\"\u52A9\u8A5E\", \"\u63A5\u7D9A\u52A9\u8A5E\"]]],\n [\"conjunction\", [\"conjunction\", \"Conjunction\", \"\u63A5\u7D9A\u8A5E\"]],\n [\n \"expression\",\n [\n \"expression\",\n \"Expression\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\n \"idiomatic expression\",\n [\n \"idiomatic_expression\",\n \"Idiomatic expression\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\n \"interjection (kandoushi)\",\n [\"interjection\", \"Interjection\", [\"\u611F\u52D5\u8A5E\", \"\u9593\u6295\u8A5E\"]],\n ],\n [\n \"proverb\",\n [\"proverb\", \"Proverb\", [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u3053\u3068\u308F\u3056\"]],\n ],\n [\n \"yojijukugo\",\n [\"yojijukugo\", \"Yojijukugo\", [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\"]],\n ],\n [\"archaism\", [\"archaism\", \"Archaism\"]],\n [\"obsolete term\", [\"obsolete\", \"Obsolete\"]],\n [\"dated term\", [\"dated\", \"Dated\"]],\n [\"rare\", [\"rare\", \"Rare\"]],\n [\"colloquialism\", [\"colloquialism\", \"Colloquialism\"]],\n [\"slang\", [\"slang\", \"Slang\"]],\n [\"internet slang\", [\"internet_slang\", \"Internet slang\"]],\n [\"jocular, humorous term\", [\"jocular_humorous\", \"Jocular or humorous\"]],\n [\"vulgar expression or word\", [\"vulgar\", \"Vulgar\"]],\n [\"derogatory\", [\"derogatory\", \"Derogatory\"]],\n [\"sensitive\", [\"sensitive\", \"Sensitive\"]],\n [\"euphemistic\", [\"euphemistic\", \"Euphemistic\"]],\n [\"abbreviation\", [\"abbreviation\", \"Abbreviation\", [\"\u7565\u8A9E\", \"\u982D\u5B57\u8A9E\"]]],\n [\"male term or language\", [\"male_language\", \"Male language\"]],\n [\"female term or language\", [\"female_language\", \"Female language\"]],\n [\n \"honorific or respectful (sonkeigo) language\",\n [\"sonkeigo\", \"Honorific or respectful (sonkeigo) language\"],\n ],\n [\"polite (teineigo) language\", [\"teineigo\", \"Polite (teineigo) language\"]],\n [\"humble (kenjougo) language\", [\"kenjougo\", \"Humble (kenjougo) language\"]],\n [\"familiar language\", [\"familiar_language\", \"Familiar language\"]],\n [\n \"familiar or derogatory\",\n [\"familiar_or_derogatory\", \"Familiar or derogatory\"],\n ],\n [\n \"derogatory or familiar\",\n [\"familiar_or_derogatory\", \"Familiar or derogatory\"],\n ],\n [\"children's language\", [\"children_language\", \"Children language\"]],\n [\n \"formal or literary term\",\n [\"formal_or_literary\", \"Formal or literary term\"],\n ],\n [\n \"usually written using kana alone\",\n [\"usually_in_kana\", \"Usually written using kana alone\"],\n ],\n [\"ateji (phonetic) reading\", [\"ateji\", \"Ateji (phonetic) reading\"]],\n [\"rarely-used kanji form\", [\"rare_kanji_form\", \"Rarely-used kanji form\"]],\n [\"out-dated kanji\", [\"out-dated_kanji_form\", \"Out-dated kanji form\"]],\n [\n \"gikun (meaning as reading) or jukujikun (special kanji reading)\",\n [\n \"gikun_or_jukujikun\",\n \"Gikun (meaning as reading) or jukujikun (special kanji reading)\",\n ],\n ],\n [\n \"irregular okurigana usage\",\n [\"irregular::okurigana\", \"Irregular okurigana usage\"],\n ],\n [\"irregular kana usage\", [\"irregular::kana\", \"Irregular kana usage\"]],\n [\n \"word containing irregular kana usage\",\n [\"irregular::kana\", \"Irregular kana usage\"],\n ],\n [\n \"out-dated or obsolete kana usage\",\n [\"out-dated_or_obsolete_kana\", \"Out-dated or obsolete kana usage\"],\n ],\n [\"irregular kanji\", [\"irregular::kanji_form\", \"Irregular kanji form\"]],\n [\"irreg. kanji form\", [\"irregular::kanji_form\", \"Irregular kanji form\"]],\n [\"mathematics term\", [\"mathematics\", \"Mathematics term\"]],\n [\"computer terminology\", [\"computer_terminology\", \"Computer terminology\"]],\n [\"buddhist term\", [\"buddhism\", \"Buddhist term\"]],\n [\"physics terminology\", [\"physics\", \"Physics terminology\"]],\n [\"food term\", [\"food\", \"Food term\"]],\n [\"chemistry term\", [\"chemistry\", \"Chemistry term\"]],\n [\"historical term\", [\"historical\", \"Historical term\"]],\n [\"grammar\", [\"grammar\", \"Grammar\"]],\n [\"martial arts term\", [\"martial_arts\", \"Martial arts term\"]],\n [\"linguistics terminology\", [\"linguistics\", \"Linguistics terminology\"]],\n [\"sports term\", [\"sports\", \"Sports term\"]],\n [\"sumo term\", [\"sumo\", \"Sumo term\"]],\n [\"astronomy term\", [\"astronomy\", \"Astronomy term\"]],\n [\"baseball term\", [\"baseball\", \"Baseball term\"]],\n [\"biology term\", [\"biology\", \"Biology term\"]],\n [\"shogi term\", [\"shogi\", \"Shogi term\"]],\n [\"logic\", [\"logic\", \"Logic\"]],\n [\"medicine term\", [\"medicine\", \"Medicine term\"]],\n [\"music\", [\"music\", \"Music term\"]],\n [\"music term\", [\"music\", \"Music term\"]],\n [\"geology\", [\"geology\", \"Geology term\"]],\n [\"geology term\", [\"geology\", \"Geology term\"]],\n [\"meteorology\", [\"meteorology\", \"Meteorology term\"]],\n [\"shinto term\", [\"shinto\", \"Shinto term\"]],\n [\"christianity\", [\"christianity\", \"Christianity\"]],\n [\"finance term\", [\"finance\", \"Finance term\"]],\n [\"economics term\", [\"economics\", \"Economics term\"]],\n [\"business term\", [\"business\", \"Business term\"]],\n [\"statistics\", [\"statistics\", \"Statistics term\"]],\n [\"anatomical term\", [\"anatomical\", \"Anatomical term\"]],\n [\"genetics\", [\"genetics\", \"Genetics term\"]],\n [\"engineering term\", [\"engineering\", \"Engineering term\"]],\n [\"architecture term\", [\"architecture\", \"Architecture term\"]],\n [\"paleography term\", [\"paleography\", \"Paleography term\"]],\n [\"psychiatry\", [\"psychiatry\", \"Psychiatry term\"]],\n [\"law term\", [\"law\", \"Law term\"]],\n [\"military term\", [\"military\", \"Military term\"]],\n [\"mahjong term\", [\"mahjong\", \"Mahjong term\"]],\n [\"philosophy\", [\"philosophy\", \"Philosophy term\"]],\n [\"physiology\", [\"physiology\", \"Physiology term\"]],\n [\"zoology term\", [\"zoology\", \"Zoology term\"]],\n [\"card games\", [\"card_games\", \"Card games term\"]],\n [\"hanafuda\", [\"hanafuda\", \"Hanafuda term\"]],\n [\"go (game)\", [\"go\", \"Go (game) term\"]],\n [\"golf\", [\"golf\", \"Golf term\"]],\n [\"fishing\", [\"fishing\", \"Fishing term\"]],\n [\"on-yomi, go\", [\"on-yomi::go\", \"On-yomi go-on reading\"]],\n [\"on-yomi, kan\", [\"on-yomi::kan\", \"On-yomi kan-on reading\"]],\n [\"on-yomi, kan\\\\'you\", [\"on-yomi::kanyou\", \"On-yomi kan 'y\u014D-on reading\"]],\n [\"kun-yomi\", [\"kun-yomi\", \"Kun-yomi reading\"]],\n [\n \"reading used only in names (nanori)\",\n [\"nanori\", \"Reading used only in names (nanori)\"],\n ],\n [\"on-yomi\", [\"on-yomi\", \"On-yomi reading\"]],\n [\n \"reading used as name of radical\",\n [\"radical_reading\", \"Reading used as name of radical\"],\n ],\n [\"rarely used kana form\", [\"rare_kana_form\", \"Rarely used kana form\"]],\n [\"search-only kana form\", [\"search-only_kana_form\", \"Search-only kana form\"]],\n [\"on-yomi, tou\", [\"on-yomi::tou\", \"On-yomi t\u014D-on reading\"]],\n [\"irregular kanji usage\", [\"irregular::kanji_form\", \"Irregular kanji usage\"]],\n [\n \"word containing irregular kanji usage\",\n [\"irregular::kanji_form\", \"Irregular kanji usage\"],\n ],\n [\n \"out-dated kanji or kanji usage\",\n [\"out-dated_kanji_form\", \"Out-dated kanji or kanji usage\"],\n ],\n [\n \"word containing out-dated kanji or kanji usage\",\n [\"out-dated_kanji_form\", \"Out-dated kanji or kanji usage\"],\n ],\n [\"rarely used kanji form\", [\"rare_kanji_form\", \"Rarely used kanji form\"]],\n [\n \"search-only kanji form\",\n [\"search-only_kanji_form\", \"Search-only kanji form\"],\n ],\n [\"aphorism (pithy saying)\", [\"aphorism\", \"Aphorism\"]],\n [\"archaic\", [\"archaism\", \"Archaism\"]],\n [\"character\", [\"character\", \"Character\"]],\n [\"colloquial\", [\"colloquialism\", \"Colloquialism\"]],\n [\"company name\", [\"company_name\", \"Company name\"]],\n [\"creature\", [\"creature\", \"Creature\"]],\n [\"deity\", [\"deity\", \"Deity\"]],\n [\"document\", [\"document\", \"Document\"]],\n [\"event\", [\"event\", \"Event\"]],\n [\"female term, language, or name\", [\"female_language\", \"Female language\"]],\n [\"fiction\", [\"fiction\", \"Fiction\"]],\n [\n \"given name or forename, gender not specified\",\n [\"given_name_or_forename\", \"Given name or forename, gender not specified\"],\n ],\n [\"group\", [\"group\", \"Group\"]],\n [\"legend\", [\"legend\", \"Legend\"]],\n [\"manga slang\", [\"manga_slang\", \"Manga slang\"]],\n [\"male term, language, or name\", [\"male_language\", \"Male language\"]],\n [\"mythology\", [\"mythology\", \"Mythology\"]],\n [\"object\", [\"object\", \"Object\"]],\n [\"organization name\", [\"organization_name\", \"Organization name\"]],\n [\"other\", [\"other\", \"Other\"]],\n [\n \"full name of a particular person\",\n [\"full_name_or_particular_person\", \"Full name of a particular person\"],\n ],\n [\"place name\", [\"place_name\", \"Place name\"]],\n [\"poetical term\", [\"poetical\", \"Poetical\"]],\n [\"product name\", [\"product_name\", \"Product name\"]],\n [\"quotation\", [\"quotation\", \"Quotation\"]],\n [\"rare term\", [\"rare\", \"Rare\"]],\n [\"religion\", [\"religion\", \"Religion\"]],\n [\"service\", [\"service\", \"Service\"]],\n [\"ship name\", [\"ship_name\", \"Ship name\"]],\n [\"railway station\", [\"railway_station\", \"Railway station\"]],\n [\"family or surname\", [\"family_or_surname\", \"Family or surname\"]],\n [\n \"word usually written using kana alone\",\n [\"usually_in_kana\", \"Usually written using kana alone\"],\n ],\n [\"unclassified name\", [\"unclassified\", \"Unclassified name\"]],\n [\n \"work of art, literature, music, etc. name\",\n [\"work_of_art\", \"Work of art, literature, music, etc. name\"],\n ],\n [\n \"rude or x-rated term (not displayed in educational software)\",\n [\"rude_or_x-rated\", \"Rude or X-rated term\"],\n ],\n [\n \"adjective (keiyoushi) - yoi/ii class\",\n [\"adjective::yoi/ii\", \"\u3044-adjective - \u3088\u3044/\u3044\u3044 class\", \"\u5F62\u5BB9\u8A5E\"],\n ],\n [\n \"'kari' adjective (archaic)\",\n [\"adjective::kari\", \"'\u304B\u308A' adjective (archaic)\"],\n ],\n [\"'ku' adjective (archaic)\", [\"adjective::ku\", \"'\u304F' adjective (archaic)\"]],\n [\n \"adjectival nouns or quasi-adjectives (keiyodoshi)\",\n [\"na-adjective\", \"\u306A-adjective\", \"\u5F62\u5BB9\u52D5\u8A5E\"],\n ],\n [\n \"archaic/formal form of na-adjective\",\n [\n \"na-adjective_archaic_or_formal\",\n \"archaic/formal form of \u306A-adjective\",\n \"\u5F62\u5BB9\u52D5\u8A5E\",\n ],\n ],\n [\n \"'shiku' adjective (archaic)\",\n [\"adjective::shiku\", \"'\u3057\u304F' adjective (archaic)\"],\n ],\n [\"copula\", [\"copula\", \"Copula\"]],\n [\n \"expressions (phrases, clauses, etc.)\",\n [\n \"expression\",\n \"Expression (phrase, clause, etc.)\",\n [\"\u6210\u8A9E\", \"\u6210\u53E5\", \"\u6163\u7528\u53E5\", \"\u52D5\u8A5E\u53E5\", \"\u611F\u52D5\u8A5E\"],\n ],\n ],\n [\"adverbial noun (fukushitekimeishi)\", [\"adverbial_noun\", \"Adverbial noun\"]],\n [\"proper noun\", [\"proper_noun\", \"Proper noun\"]],\n [\"noun (temporal) (jisoumeishi)\", [\"temporal_noun\", \"Temporal noun\"]],\n [\"unclassified\", [\"unclassified\", \"Unclassified\"]],\n [\"verb unspecified\", [\"unspecified_verb\", \"Unspecified verb\", \"\u52D5\u8A5E\"]],\n [\n \"ichidan verb - kureru special class\",\n [\"ichidan_verb::kureru\", \"Ichidan verb - \u304F\u308C\u308B special class\", \"\u52D5\u8A5E\"],\n ],\n [\n \"nidan verb with 'u' ending (archaic)\",\n [\"nidan_verb::u\", \"Nidan verb with '\u3046' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"nidan verb (upper class) with 'bu' ending (archaic)\",\n [\n \"nidan_verb::bu::upper_class\",\n \"Nidan verb (upper class) with '\u3076' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'bu' ending (archaic)\",\n [\n \"nidan_verb::bu::lower_class\",\n \"Nidan verb (lower class) with '\u3076' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'dzu' ending (archaic)\",\n [\n \"nidan_verb::dzu::upper_class\",\n \"Nidan verb (upper class) with '\u3065' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'dzu' ending (archaic)\",\n [\n \"nidan_verb::dzu::lower_class\",\n \"Nidan verb (lower class) with '\u3065' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'gu' ending (archaic)\",\n [\n \"nidan_verb::gu::upper_class\",\n \"Nidan verb (upper class) with '\u3050' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'gu' ending (archaic)\",\n [\n \"nidan_verb::gu::lower_class\",\n \"Nidan verb (lower class) with '\u3050' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'hu/fu' ending (archaic)\",\n [\n \"nidan_verb::hu/fu::upper_class\",\n \"Nidan verb (upper class) with '\u3075' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'hu/fu' ending (archaic)\",\n [\n \"nidan_verb::hu/fu::lower_class\",\n \"Nidan verb (lower class) with '\u3075' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'ku' ending (archaic)\",\n [\n \"nidan_verb::ku::upper_class\",\n \"Nidan verb (upper class) with '\u304F' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'ku' ending (archaic)\",\n [\n \"nidan_verb::ku::lower_class\",\n \"Nidan verb (lower class) with '\u304F' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'mu' ending (archaic)\",\n [\n \"nidan_verb::mu::upper_class\",\n \"Nidan verb (upper class) with '\u3080' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'mu' ending (archaic)\",\n [\n \"nidan_verb::mu::lower_class\",\n \"Nidan verb (lower class) with '\u3080' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'nu' ending (archaic)\",\n [\n \"nidan_verb::nu::lower_class\",\n \"Nidan verb (lower class) with '\u306C' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'ru' ending (archaic)\",\n [\n \"nidan_verb::ru::upper_class\",\n \"Nidan verb (upper class) with '\u308B' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'ru' ending (archaic)\",\n [\n \"nidan_verb::ru::lower_class\",\n \"Nidan verb (lower class) with '\u308B' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'su' ending (archaic)\",\n [\n \"nidan_verb::su::lower_class\",\n \"Nidan verb (lower class) with '\u3059' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'tsu' ending (archaic)\",\n [\n \"nidan_verb::tsu::upper_class\",\n \"Nidan verb (upper class) with '\u3064' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'tsu' ending (archaic)\",\n [\n \"nidan_verb::tsu::lower_class\",\n \"Nidan verb (lower class) with '\u3064' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'u' ending and 'we' conjugation (archaic)\",\n [\n \"nidan_verb::u_with_we_conjugation::lower_class\",\n \"Nidan verb (lower class) with '\u3046' ending and '\u3091' conjugation (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (upper class) with 'yu' ending (archaic)\",\n [\n \"nidan_verb::yu::upper_class\",\n \"Nidan verb (upper class) with '\u3086' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'yu' ending (archaic)\",\n [\n \"nidan_verb::yu::lower_class\",\n \"Nidan verb (lower class) with '\u3086' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"nidan verb (lower class) with 'zu' ending (archaic)\",\n [\n \"nidan_verb::zu::lower_class\",\n \"Nidan verb (lower class) with '\u305A' ending (archaic)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"yodan verb with 'bu' ending (archaic)\",\n [\"yodan_verb::bu\", \"Yodan verb with '\u3076' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'gu' ending (archaic)\",\n [\"yodan_verb::gu\", \"Yodan verb with '\u3050' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'hu/fu' ending (archaic)\",\n [\"yodan_verb::hu/fu\", \"Yodan verb with '\u3075' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'ku' ending (archaic)\",\n [\"yodan_verb::ku\", \"Yodan verb with '\u304F' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'mu' ending (archaic)\",\n [\"yodan_verb::mu\", \"Yodan verb with '\u3080' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'nu' ending (archaic)\",\n [\"yodan_verb::nu\", \"Yodan verb with '\u306C' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'ru' ending (archaic)\",\n [\"yodan_verb::ru\", \"Yodan verb with '\u308B' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'su' ending (archaic)\",\n [\"yodan_verb::su\", \"Yodan verb with '\u3059' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"yodan verb with 'tsu' ending (archaic)\",\n [\"yodan_verb::tsu\", \"Yodan verb with '\u3064' ending (archaic)\", \"\u52D5\u8A5E\"],\n ],\n [\n \"godan verb - uru old class verb (old form of eru)\",\n [\n \"godan::uru::irregular_verb\",\n \"Godan verb - '\u3046\u308B' old class verb (old form of \u3048\u308B)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"irregular ru verb, plain form ends with -ri\",\n [\n \"irregular_ru_verb_plain_form_ending_with_ri\",\n \"irregular '\u308B' verb, plain form ends with '-\u308A'\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\n \"su verb - precursor to the modern suru\",\n [\"su_verb\", \"'\u3059' verb - precursor to the modern \u3059\u308B\", \"\u52D5\u8A5E\"],\n ],\n [\"suru verb - included\", [\"suru_verb\", \"'\u3059\u308B' verb - included\", \"\u52D5\u8A5E\"]],\n [\n \"ichidan verb - zuru verb (alternative form of -jiru verbs)\",\n [\n \"ichidan_verb::zuru\",\n \"Ichidan verb - '\u305A\u308B' verb (alternative form of '-\u3058\u308B' verbs)\",\n \"\u52D5\u8A5E\",\n ],\n ],\n [\"agriculture\", [\"agriculture\", \"Agriculture term\"]],\n [\"anatomy\", [\"anatomical\", \"Anatomical term\"]],\n [\"archeology\", [\"archeology\", \"Archeology term\"]],\n [\"architecture\", [\"architecture\", \"Architecture term\"]],\n [\"art, aesthetics\", [\"art/aesthetics\", \"Art, aesthetics\"]],\n [\"astronomy\", [\"astronomy\", \"Astronomy term\"]],\n [\"audiovisual\", [\"audiovisual\", \"Audiovisual\"]],\n [\"aviation\", [\"aviation\", \"Aviation\"]],\n [\"baseball\", [\"baseball\", \"Baseball term\"]],\n [\"biochemistry\", [\"biochemistry\", \"Biochemistry term\"]],\n [\"biology\", [\"biology\", \"Biology term\"]],\n [\"botany\", [\"botany\", \"Botany term\"]],\n [\"botany term\", [\"botany\", \"Botany term\"]],\n [\"boxing\", [\"boxing\", \"Boxing term\"]],\n [\"buddhism\", [\"buddhism\", \"Buddhist term\"]],\n [\"business\", [\"business\", \"Business term\"]],\n [\"chemistry\", [\"chemistry\", \"Chemistry term\"]],\n [\"chinese mythology\", [\"mythology::chinese\", \"Chinese mythology\"]],\n [\"civil engineering\", [\"civil_engineering\", \"Civil engineering\"]],\n [\"clothing\", [\"clothing\", \"Clothing\"]],\n [\"computing\", [\"computing\", \"Computing\"]],\n [\"crystallography\", [\"crystallography\", \"Crystallography\"]],\n [\"dentistry\", [\"dentistry\", \"Dentistry\"]],\n [\"ecology\", [\"ecology\", \"Ecology\"]],\n [\"economics\", [\"economics\", \"Economics term\"]],\n [\n \"electricity, elec. eng.\",\n [\"electrical_engineering\", \"Electrical engineering\"],\n ],\n [\"electronics\", [\"electronics\", \"Electronics\"]],\n [\"embryology\", [\"embryology\", \"Embryology\"]],\n [\"engineering\", [\"engineering\", \"Engineering term\"]],\n [\"entomology\", [\"entomology\", \"Entomology\"]],\n [\"figure skating\", [\"figure_skating\", \"Figure skating\"]],\n [\"film\", [\"film\", \"Film\"]],\n [\"finance\", [\"finance\", \"Finance term\"]],\n [\"food, cooking\", [\"food\", \"Food term\"]],\n [\"gardening, horticulture\", [\"gardening\", \"Gardening\"]],\n [\"geography\", [\"geography\", \"Geography term\"]],\n [\"geometry\", [\"geometry\", \"Geometry term\"]],\n [\"geometry term\", [\"geometry\", \"Geometry term\"]],\n [\"greek mythology\", [\"mythology::greek\", \"Greek mythology\"]],\n [\"horse racing\", [\"horse_racing\", \"Horse racing\"]],\n [\"internet\", [\"internet\", \"Internet\"]],\n [\"japanese mythology\", [\"mythology::japanese\", \"Japanese mythology\"]],\n [\"kabuki\", [\"kabuki\", \"Kabuki\"]],\n [\"law\", [\"law\", \"Law term\"]],\n [\"linguistics\", [\"linguistics\", \"Linguistics terminology\"]],\n [\"martial arts\", [\"martial_arts\", \"Martial arts term\"]],\n [\"mahjong\", [\"mahjong\", \"Mahjong term\"]],\n [\"manga\", [\"manga\", \"Manga term\"]],\n [\"mathematics\", [\"mathematics\", \"Mathematics term\"]],\n [\n \"mechanical engineering\",\n [\"mechanical_engineering\", \"Mechanical engineering\"],\n ],\n [\"medicine\", [\"medicine\", \"Medicine term\"]],\n [\"military\", [\"military\", \"Military term\"]],\n [\"mineralogy\", [\"mineralogy\", \"Mineralogy term\"]],\n [\"mining\", [\"mining\", \"Mining term\"]],\n [\"motorsport\", [\"motorsport\", \"Motorsport\"]],\n [\"noh\", [\"noh\", \"Noh term\"]],\n [\"ornithology\", [\"ornithology\", \"Ornithology\"]],\n [\"paleontology\", [\"paleontology\", \"Paleontology\"]],\n [\"pathology\", [\"pathology\", \"Pathology\"]],\n [\"pharmacology\", [\"pharmacology\", \"Pharmacology\"]],\n [\"photography\", [\"photography\", \"Photography\"]],\n [\"physics\", [\"physics\", \"Physics terminology\"]],\n [\"politics\", [\"politics\", \"Politics term\"]],\n [\"printing\", [\"printing\", \"Printing term\"]],\n [\n \"professional wrestling\",\n [\"professional_wrestling\", \"Professional wrestling term\"],\n ],\n [\"psychoanalysis\", [\"psychoanalysis\", \"Psychoanalysis term\"]],\n [\"psychology\", [\"psychology\", \"Psychology term\"]],\n [\"railway\", [\"railway_station\", \"Railway station\"]],\n [\"roman mythology\", [\"mythology::roman\", \"Roman mythology\"]],\n [\"shinto\", [\"shinto\", \"Shinto term\"]],\n [\"shogi\", [\"shogi\", \"Shogi term\"]],\n [\"skiing\", [\"skiing\", \"Skiing\"]],\n [\"sports\", [\"sports\", \"Sports term\"]],\n [\"stock market\", [\"stock_market\", \"Stock market\"]],\n [\"sumo\", [\"sumo\", \"Sumo term\"]],\n [\"surgery\", [\"surgery\", \"Surgery\"]],\n [\"telecommunications\", [\"telecommunications\", \"Telecommunications\"]],\n [\"television\", [\"television\", \"Television\"]],\n [\"veterinary terms\", [\"veterinary\", \"Veterinary term\"]],\n [\"video games\", [\"video_games\", \"Video games term\"]],\n [\"zoology\", [\"zoology\", \"Zoology term\"]],\n [\"equivalent\", [\"equivalent\", \"Equivalent\"]],\n [\"edo-period term\", [\"edo-period\", \"Edo-period term\"]],\n [\"heian-period term\", [\"heian-period\", \"Heian-period term\"]],\n [\n \"imperial japanese army jargon\",\n [\"imperial_japanese_army_jargon\", \"Imperial Japanese army jargon\"],\n ],\n [\n \"meiji and taish\u014D-era term\",\n [\"meiji_and_taishou_era\", \"Meiji and Taish\u014D-era term\"],\n ],\n [\n \"after -masu base of verb; indicates contempt or disdain for another's actions\",\n [\n \"after::masu_stem\",\n \"After '-\u307E\u3059' base of verb; indicates contempt or disdain for another's actions\",\n ],\n ],\n [\n \"after -masu stem of verb; indicates an action is being directed to someone\",\n [\n \"after::masu_stem\",\n \"After '-\u307E\u3059' stem of verb; indicates an action is being directed to someone\",\n ],\n ],\n [\n \"after -masu stem of verb; often \u3050\u308B\u3057\u3044\",\n [\"after::masu_stem\", \"After '-\u307E\u3059' stem of verb; often \u3050\u308B\u3057\u3044\"],\n ],\n [\n \"after -masu stems, onomatopoeic and mimetic words\",\n [\"after::masu_stem\", \"After '-\u307E\u3059' stems, onomatopoeic and mimetic words\"],\n ],\n [\n \"after a -masu stem, esp. of a suru verb\",\n [\"after::masu_stem\", \"After a '-\u307E\u3059' stem, esp. of a \u3059\u308B verb\"],\n ],\n [\"after a -nai stem\", [\"after::nai_stem\", \"After a '-\u306A\u3044' stem\"]],\n [\"after a name\", [\"after::name\", \"After a name\"]],\n [\"after a noun (+ \u306E)\", [\"after::noun\", \"After a noun (+ \u306E)\"]],\n [\n \"after a noun at the end of an interjection\",\n [\"after::noun\", \"After a noun at the end of an interjection\"],\n ],\n [\n \"after a noun indicating a person\",\n [\"after::noun\", \"After a noun indicating a person\"],\n ],\n [\n \"after a noun or -masu stem\",\n [\"after::noun_or_masu_stem\", \"After a noun or '-\u307E\u3059' stem\"],\n ],\n [\n \"after a noun or counter\",\n [\"after::noun_or_counter\", \"After a noun or counter\"],\n ],\n [\n \"after a noun or na-adjective; in conditional clauses\",\n [\n \"after::noun_or_na-adjective\",\n \"After a noun or \u306A-adjective; in conditional clauses\",\n ],\n ],\n [\n \"after a noun or pronoun\",\n [\"after::noun_or_pronoun\", \"After a noun or pronoun\"],\n ],\n [\n \"after a noun, adverb or adj. stem\",\n [\n \"after::noun_adverb_or_adjective_stem\",\n \"After a noun, adverb or adjective stem\",\n ],\n ],\n [\"after a number n\", [\"after::number\", \"After a number\"]],\n [\n \"after a number of people\",\n [\"after::number_of_people\", \"After a number of people\"],\n ],\n [\n \"after a number or counter\",\n [\"after::number_or_counter\", \"After a number or counter\"],\n ],\n [\"after a quantity\", [\"after::quantity\", \"After a quantity\"]],\n [\n \"after a quantity, age, time, etc.\",\n [\"after::quantity\", \"After a quantity, age, time, etc.\"],\n ],\n [\"after a surname\", [\"after::surname\", \"After a surname\"]],\n [\n \"after a time, date, etc.\",\n [\"after::time_date\", \"After a time, date, etc.\"],\n ],\n [\n \"after a verb in the past tense\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after a volitional form\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\n \"after an adjective, verb, or noun\",\n [\"after::adjective_verb_or_noun\", \"After an adjective, verb, or noun\"],\n ],\n [\"after an adverb\", [\"after::adverb\", \"After an adverb\"]],\n [\"after an age\", [\"after::age\", \"After an age\"]],\n [\n \"after an interrogative\",\n [\"after::interrogative\", \"After an interrogative\"],\n ],\n [\n \"after conditional -ba form of verb\",\n [\"after::conditional_ba_verb_form\", \"After conditional '-\u3070' form of verb\"],\n ],\n [\n \"after dictionary form verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\"after neg. verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"after negative verb\", [\"with::negative_verb\", \"With negative verb\"]],\n [\n \"after past tense verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after plain form of a verb or adjective\",\n [\n \"after::plain_verb_or_adjective_form\",\n \"After present form of a verb or an adjective stem\",\n ],\n ],\n [\n \"after the -nai stem of a verb\",\n [\"after::nai_stem\", \"After a '-\u306A\u3044' stem\"],\n ],\n [\n \"after the -ta form of a verb\",\n [\"after::past_verb_form\", \"After the '\u305F' form of a verb\"],\n ],\n [\n \"after the -te form of a verb or adjective\",\n [\n \"after::te_verb_or_adjective_form\",\n \"After the '\u3066' form of a verb or adjective\",\n ],\n ],\n [\n \"after the dictionary form of verb\",\n [\"after::plain_verb_form\", \"After present form of a verb\"],\n ],\n [\n \"after the stem of an adjective\",\n [\"after::adjective_stem\", \"After adjective stem\"],\n ],\n [\n \"after the volitional form of verb\",\n [\"after::volitional_verb_form\", \"After volitional form of verb\"],\n ],\n [\"at sentence end\", [\"at_sentence_end\", \"At sentence end\"]],\n [\n \"at sentence end after the -masu form of a verb\",\n [\"at_sentence_end\", \"At sentence end after the '-\u307E\u3059' form of a verb\"],\n ],\n [\n \"at sentence end after the question marker \u304B\",\n [\"at_sentence_end\", \"At sentence end after the question marker \u304B\"],\n ],\n [\n \"at sentence end; adds emphasis; usu. \u3063\u305F\u3089\",\n [\"at_sentence_end\", \"At sentence end; adds emphasis; usu. \u3063\u305F\u3089\"],\n ],\n [\n \"at sentence end; expresses depth of feeling or emphasis\",\n [\n \"at_sentence_end\",\n \"At sentence end; expresses depth of feeling or emphasis\",\n ],\n ],\n [\n \"at sentence end; gives reason for an unstated but deducible conclusion\",\n [\n \"at_sentence_end\",\n \"At sentence end; gives reason for an unstated but deducible conclusion\",\n ],\n ],\n [\n \"at sentence end; used as a request for confirmation or agreement\",\n [\n \"at_sentence_end\",\n \"At sentence end; used as a request for confirmation or agreement\",\n ],\n ],\n [\n \"at sentence end; used to express one's thoughts or feelings\",\n [\n \"at_sentence_end\",\n \"At sentence end; used to express one's thoughts or feelings\",\n ],\n ],\n [\n \"at sentence end; used to make a sentence threatening or ironic\",\n [\n \"at_sentence_end\",\n \"At sentence end; used to make a sentence threatening or ironic\",\n ],\n ],\n [\n \"at sentence end; used to make an informal request\",\n [\"at_sentence_end\", \"At sentence end; used to make an informal request\"],\n ],\n [\n \"at sentence end; with a negative\",\n [\"at_sentence_end\", \"At sentence end; with a negative\"],\n ],\n [\"at sentence-end\", [\"at_sentence_end\", \"At sentence end\"]],\n [\n \"at sentence-end; indicates certainty, emphasis, contempt, request, warning, etc.\",\n [\n \"at_sentence_end\",\n \"At sentence end; indicates certainty, emphasis, contempt, request, warning, etc.\",\n ],\n ],\n [\n \"at sentence-end; indicates certainty, emphasis, etc.\",\n [\"at_sentence_end\", \"At sentence end; indicates certainty, emphasis, etc.\"],\n ],\n [\n \"sentence end, mainly masc.\",\n [\"at_sentence_end\", \"At sentence end, mainly masculine\"],\n ],\n [\"sentence final\", [\"at_sentence_end\", \"At sentence end\"]],\n [\"at start of sentence\", [\"at_sentence_start\", \"At sentence start\"]],\n [\"at the start of a sentence\", [\"at_sentence_start\", \"At sentence start\"]],\n [\"before a noun\", [\"before::noun\", \"Before a noun\"]],\n [\"before a verb\", [\"before::verb\", \"Before a verb\"]],\n [\"emphatic\", [\"emphatic\", \"Emphatic\"]],\n [\"fig.\", [\"figurative\", \"Figurative\"]],\n [\"figurative\", [\"figurative\", \"Figurative\"]],\n [\"followed by a counter\", [\"after::counter\", \"Followed by a counter\"]],\n [\n \"followed by a counter and \u304B\",\n [\"after::counter\", \"Followed by a counter and \u304B\"],\n ],\n [\n \"followed by a verb in negative form\",\n [\"after::negative_verb\", \"Followed by a verb in negative form\"],\n ],\n [\"following adj. stem\", [\"after::adjective_stem\", \"After adjective stem\"]],\n [\n \"following adj. stem or noun\",\n [\"after::adjective_stem_or_noun\", \"After adjective stem or noun\"],\n ],\n [\n \"following the te-form of a verb\",\n [\"after::te_form\", \"After the '\u3066' form of a verb\"],\n ],\n [\n \"follows verbs, adjectives\",\n [\"after::verb_or_adjective\", \"After a verb or an adjective\"],\n ],\n [\n \"formal or literary polite copula\",\n [\"formal_or_literary_polite_copula\", \"Formal or literary polite copula\"],\n ],\n [\"general term\", [\"general\", \"General term\"]],\n [\"in a negative sentence\", [\"with::negative_verb\", \"With negative verb\"]],\n [\"non-standard\", [\"non-standard\", \"Non-standard usage\"]],\n [\"non-standard usage\", [\"non-standard\", \"Non-standard usage\"]],\n [\"orig. meaning\", [\"original_meaning\", \"Original meaning\"]],\n [\"original meaning\", [\"original_meaning\", \"Original meaning\"]],\n [\"plain copula\", [\"plain_copula\", \"Plain copula\"]],\n [\"vocative\", [\"vocative\", \"Vocative\"]],\n [\n \"with a verb in the negative\",\n [\"with::negative_verb\", \"With negative verb\"],\n ],\n [\n \"with an interrogative word\",\n [\"with::interrogative\", \"With an interrogative\"],\n ],\n [\n \"with neg. verb or adjective\",\n [\"with::negative_verb_or_adjective\", \"With negative verb or adjective\"],\n ],\n]);\n", "import libxml from \"libxmljs2\";\nimport xml from \"xml2js\";\nimport iconv from \"iconv-lite\";\nimport {\n noteHeaderKeys,\n noteMap,\n notSearchedForms,\n regexps,\n} from \"./constants\";\nimport {\n DefaultNoteInfo,\n Definition,\n DictKanji,\n DictKanjiForm,\n DictKanjiReading,\n DictKanjiReadingMeaning,\n DictKanjiReadingMeaningGroup,\n DictKanjiWithRadicals,\n DictMeaning,\n DictRadical,\n DictReading,\n DictTranslation,\n DictWord,\n EntryMaps,\n ExamplePart,\n Grammar,\n JaWiktionaryEntry,\n JLPT,\n Kana,\n Kanji,\n KanjiComponent,\n KanjiEntryMap,\n KanjiForm,\n KanjiSVGMap,\n KanjiWordsMap,\n NoteAndTag,\n Phrase,\n POS,\n Radical,\n Reading,\n ReadingsKanjiFormsPair,\n Result,\n StringNumber,\n TanakaExample,\n TanakaID,\n Translation,\n Word,\n WordDefinitionPair,\n WordDefinitionsMap,\n WordExamplesMap,\n WordIDEntryMap,\n} from \"./types\";\nimport { ReadStream } from \"fs\";\nimport { createInterface, Interface } from \"readline\";\n\nconst Kuroshiro: any = require(\"kuroshiro\");\nconst KuromojiAnalyzer: any = require(\"kuroshiro-analyzer-kuromoji\");\n\n/**\n * Capitalizes a string.\n * @param value The string to capitalize\n * @returns The capitalized string\n */\nexport function capitalizeString(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\n/**\n * Checks if the argument is an array and has at least one element.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array and has at least one element\n */\nexport function isValidArrayWithFirstElement(arg: unknown): arg is any[] {\n return Array.isArray(arg) && arg.length > 0;\n}\n\n/**\n * Checks if the argument is an array of strings.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array of strings\n */\nexport function isStringArray(arg: unknown): arg is string[] {\n return (\n isValidArrayWithFirstElement(arg) &&\n arg.every((element: any) => typeof element === \"string\")\n );\n}\n\n/**\n * Checks if the argument is an array of object.\n * @param arg The argument\n * @returns Whether or not {@link arg} is an array of objects\n */\nexport function isObjectArray(arg: unknown): arg is any[] {\n return (\n isValidArrayWithFirstElement(arg) &&\n arg.every((element: unknown) => typeof element === \"object\")\n );\n}\n\n/**\n * Shuffles an array using the `Fisher\u2013Yates shuffle` algorithm\n * @param arr The array to be shuffled\n * @returns The shuffled array\n */\nexport function shuffleArray<T>(arr: readonly T[]): T[] {\n const a: T[] = arr.slice();\n\n for (let i: number = a.length - 1; i > 0; i--) {\n const j: number = Math.floor(Math.random() * (i + 1));\n const tmp: T = a[i]!;\n a[i] = a[j]!;\n a[j] = tmp;\n }\n\n return a;\n}\n\n/**\n * Filters out all the old/rare or (if {@link wordIsCommon} is `true`) uncommon readings and kanji forms of a JMdict entry.\n * @param readings The word's readings\n * @param kanjiForms The word's kanji forms\n * @param wordIsCommon Whether or not the word is common\n * @returns An object containing the valid readings and kanji forms of the word\n */\nexport function getValidForms(\n readings: readonly DictReading[],\n kanjiForms?: readonly DictKanjiForm[] | undefined,\n wordIsCommon?: true | undefined,\n): ReadingsKanjiFormsPair {\n const kanjiFormRestrictions: Set<string> = new Set<string>();\n\n const validReadings: DictReading[] = readings.filter(\n (reading: DictReading) => {\n if (\n reading.notes === undefined ||\n !reading.notes.some((note: string) => notSearchedForms.has(note))\n ) {\n if (reading.kanjiFormRestrictions) {\n for (const kfr of reading.kanjiFormRestrictions)\n kanjiFormRestrictions.add(kfr);\n\n return true;\n }\n\n if (wordIsCommon === undefined || reading.commonness !== undefined)\n return true;\n }\n\n return false;\n },\n );\n\n const existValidKf: boolean | undefined = kanjiForms\n ? kanjiForms.some(\n (kf: DictKanjiForm) =>\n ((kf.notes === undefined ||\n !kf.notes.some((note: string) => notSearchedForms.has(note))) &&\n (wordIsCommon === undefined || kf.commonness !== undefined)) ||\n kanjiFormRestrictions.has(kf.form),\n )\n : undefined;\n\n const validKanjiForms: DictKanjiForm[] | undefined = kanjiForms\n ? kanjiForms.filter((kanjiForm: DictKanjiForm) => {\n if (existValidKf === true)\n return (\n ((kanjiForm.notes === undefined ||\n !kanjiForm.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (wordIsCommon === undefined ||\n kanjiForm.commonness !== undefined)) ||\n kanjiFormRestrictions.has(kanjiForm.form)\n );\n else return true;\n })\n : undefined;\n\n return {\n readings: validReadings,\n ...(validKanjiForms ? { kanjiForms: validKanjiForms } : {}),\n };\n}\n\n/**\n * Converts a JMdict `JMdict_e` file into an array of {@link DictWord} objects.\n * @param xmlString The raw `JMdict_e` file contents\n * @param examples An array of converted `Tanaka Corpus` examples\n * @returns An array of converted {@link DictWord} objects\n */\nexport function convertJMdict(\n xmlString: string,\n examples?: readonly TanakaExample[] | undefined,\n): DictWord[] {\n const dictParsed: libxml.Document = libxml.parseXml(xmlString, {\n dtdvalid: true,\n nonet: false,\n noent: true,\n recover: false,\n });\n const dict: DictWord[] = [];\n\n xml.parseString(dictParsed, (_err: Error | null, result: any) => {\n const tanakaParts: Set<string> | undefined =\n examples && examples.length > 0\n ? new Set<string>(\n examples.flatMap((example: TanakaExample) =>\n example.parts.flatMap((part: ExamplePart) => [\n part.baseForm,\n ...(part.reading ? [part.reading] : []),\n ...(part.inflectedForm ? [part.inflectedForm] : []),\n ...(part.referenceID ? [part.referenceID] : []),\n ]),\n ),\n )\n : undefined;\n\n for (const entry of result.JMdict.entry) {\n const entryObj: DictWord = {\n id: entry.ent_seq[0],\n readings: [],\n meanings: [],\n };\n\n const kanjiForms: any = entry.k_ele;\n const readings: any = entry.r_ele;\n const meanings: any = entry.sense;\n\n if (isObjectArray(kanjiForms)) {\n entryObj.kanjiForms = [];\n\n for (const kanjiForm of kanjiForms) {\n const form: DictKanjiForm = {\n form: kanjiForm.keb[0],\n };\n\n if (isStringArray(kanjiForm.ke_inf)) form.notes = kanjiForm.ke_inf;\n if (isStringArray(kanjiForm.ke_pri)) {\n form.commonness = kanjiForm.ke_pri;\n\n if (entryObj.isCommon === undefined) entryObj.isCommon = true;\n }\n\n entryObj.kanjiForms.push(form);\n }\n }\n\n for (const reading of readings) {\n const readingObj: DictReading = {\n reading: reading.reb[0],\n };\n\n if (isStringArray(reading.re_inf)) readingObj.notes = reading.re_inf;\n if (isStringArray(reading.re_restr))\n readingObj.kanjiFormRestrictions = reading.re_restr;\n if (isStringArray(reading.re_pri)) {\n readingObj.commonness = reading.re_pri;\n\n if (entryObj.isCommon === undefined) entryObj.isCommon = true;\n }\n\n entryObj.readings.push(readingObj);\n }\n\n let usuallyInKanaMeanings: number = 0;\n\n for (const meaning of meanings) {\n const meaningObj: DictMeaning = { partOfSpeech: [], translations: [] };\n\n meaningObj.partOfSpeech = meaning.pos;\n\n meaningObj.translations = [];\n\n for (const gloss of meaning.gloss)\n if (typeof gloss === \"string\") meaningObj.translations.push(gloss);\n else if (\n typeof gloss === \"object\" &&\n gloss._ &&\n typeof gloss._ === \"string\" &&\n gloss.$ &&\n typeof gloss.$ === \"object\" &&\n gloss.$.g_type &&\n (gloss.$.g_type === \"lit\" ||\n gloss.$.g_type === \"expl\" ||\n gloss.$.g_type === \"tm\")\n )\n meaningObj.translations.push({\n translation: gloss._,\n type: gloss.$.g_type,\n });\n\n if (isStringArray(meaning.xref)) meaningObj.references = meaning.xref;\n if (isStringArray(meaning.stagk))\n meaningObj.kanjiFormRestrictions = meaning.stagk;\n if (isStringArray(meaning.stagr))\n meaningObj.readingRestrictions = meaning.stagr;\n if (isStringArray(meaning.ant)) meaningObj.antonyms = meaning.ant;\n if (isStringArray(meaning.field)) meaningObj.fields = meaning.field;\n if (isStringArray(meaning.s_inf)) meaningObj.info = meaning.s_inf;\n if (isStringArray(meaning.misc)) {\n meaningObj.misc = meaning.misc;\n\n if (\n meaningObj.misc &&\n meaningObj.misc.includes(\"word usually written using kana alone\")\n )\n usuallyInKanaMeanings++;\n }\n if (isStringArray(meaning.dial)) meaningObj.dialects = meaning.dial;\n\n entryObj.meanings.push(meaningObj);\n }\n\n if (entryObj.meanings.length === usuallyInKanaMeanings)\n entryObj.usuallyInKana = true;\n\n if (examples) {\n let existsExample: boolean = false;\n\n if (tanakaParts && tanakaParts.has(entryObj.id)) existsExample = true;\n\n if (!existsExample) {\n const rkf: ReadingsKanjiFormsPair = getValidForms(\n entryObj.readings,\n entryObj.kanjiForms,\n entryObj.isCommon,\n );\n\n const readings: Set<string> = new Set<string>(\n rkf.readings.map((r: DictReading) => r.reading),\n );\n const kanjiForms: Set<string> | undefined = rkf.kanjiForms\n ? new Set<string>(\n rkf.kanjiForms.map((kf: DictKanjiForm) => kf.form),\n )\n : undefined;\n\n if (kanjiForms && kanjiForms.size > 0 && tanakaParts)\n for (const kf of kanjiForms)\n if (tanakaParts.has(kf)) {\n existsExample = true;\n break;\n }\n if (\n entryObj.kanjiForms === undefined &&\n readings.size > 0 &&\n tanakaParts\n )\n for (const r of readings)\n if (tanakaParts.has(r)) {\n existsExample = true;\n break;\n }\n }\n\n if (existsExample) entryObj.hasPhrases = true;\n }\n\n dict.push(entryObj);\n }\n });\n\n return dict;\n}\n\n/**\n * Converts a KANJIDIC `kanjidic2.xml` file into an array of {@link DictKanji} objects.\n * @param xmlString The raw `kanjidic2.xml` file contents\n * @returns An array of converted {@link DictKanji} objects\n */\nexport function convertKanjiDic(xmlString: string): DictKanji[] {\n const dictParsed: libxml.Document = libxml.parseXml(xmlString, {\n dtdvalid: true,\n nonet: false,\n noent: true,\n recover: false,\n });\n const dict: DictKanji[] = [];\n\n xml.parseString(dictParsed, (_err: Error | null, result: any) => {\n for (const entry of result.kanjidic2.character) {\n const kanjiObj: DictKanji = {\n kanji: entry.literal[0],\n readingMeaning: [],\n };\n\n if (typeof kanjiObj.kanji === \"string\" && kanjiObj.kanji.length === 1) {\n const misc: any = entry.misc[0];\n\n kanjiObj.misc = { strokeNumber: misc.stroke_count[0] };\n\n if (isStringArray(misc.grade)) kanjiObj.misc.grade = misc.grade[0];\n if (isStringArray(misc.freq)) kanjiObj.misc.frequency = misc.freq[0];\n if (\n isStringArray(misc.jlpt) &&\n [\"5\", \"4\", \"3\", \"2\", \"1\"].includes(misc.jlpt[0])\n )\n kanjiObj.misc.jlpt = `N${misc.jlpt[0]}` as JLPT;\n\n if (isObjectArray(entry.reading_meaning))\n for (const rm of entry.reading_meaning) {\n const rmObj: DictKanjiReadingMeaning = { groups: [] };\n\n for (const group of rm.rmgroup) {\n const groupObj: DictKanjiReadingMeaningGroup = {\n readings: [],\n meanings: [],\n };\n\n if (isObjectArray(group.reading))\n for (const reading of group.reading)\n if (\n reading._ &&\n typeof reading._ === \"string\" &&\n reading.$ &&\n typeof reading.$ === \"object\" &&\n reading.$.r_type &&\n (reading.$.r_type === \"ja_on\" ||\n reading.$.r_type === \"ja_kun\")\n )\n groupObj.readings!.push({\n reading: reading._,\n type: reading.$.r_type,\n });\n\n if (Array.isArray(group.meaning))\n for (const meaning of group.meaning)\n if (typeof meaning === \"string\") {\n if (\n kanjiObj.isKokuji === undefined &&\n meaning === \"(kokuji)\"\n ) {\n kanjiObj.isKokuji = true;\n continue;\n }\n\n groupObj.meanings!.push(meaning);\n }\n if (\n groupObj.readings!.length > 0 ||\n groupObj.meanings!.length > 0\n ) {\n if (groupObj.readings!.length === 0) delete groupObj.readings;\n if (groupObj.meanings!.length === 0) delete groupObj.meanings;\n\n rmObj.groups!.push(groupObj);\n }\n }\n\n if (isStringArray(rm.nanori) && rm.nanori.length > 0)\n rmObj.nanori = rm.nanori;\n\n if (rmObj.groups!.length > 0 || rmObj.nanori)\n kanjiObj.readingMeaning!.push(rmObj);\n }\n\n dict.push(kanjiObj);\n }\n }\n });\n\n return dict;\n}\n\n/**\n * Converts a Tanaka Corpus `examples.utf` file into an array of {@link TanakaExample} objects.\n * @param tanakaString The raw contents of a `examples.utf` file\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects\n */\nexport function convertTanakaCorpus(tanakaString: string): TanakaExample[] {\n const tanakaArray: TanakaExample[] = [];\n const tanakaParsed: string[] = tanakaString.split(\"\\n\");\n\n for (let i: number = 0; i <= tanakaParsed.length; i += 2) {\n let a: string | undefined = tanakaParsed[i];\n let b: string | undefined = tanakaParsed[i + 1];\n\n if (a && b && a.startsWith(\"A: \") && b.startsWith(\"B: \")) {\n a = a.replace(\"A: \", \"\");\n b = b.replace(\"B: \", \"\");\n\n const idMatch: RegExpExecArray | null = regexps.tanakaID.exec(a);\n\n const aParts: string[] = a.replace(regexps.tanakaID, \"\").split(\"\\t\");\n\n const bRawParts = b\n .split(\" \")\n .filter((part: string) => part.trim().length !== 0);\n\n const bParts: ExamplePart[] = [];\n\n for (const part of bRawParts) {\n const partMatches: RegExpExecArray | null =\n regexps.tanakaPart.exec(part);\n\n const baseForm: string = partMatches?.groups![\"base\"]!;\n\n const examplePart: ExamplePart = { baseForm: baseForm };\n\n const reading: string | undefined = partMatches?.groups![\"reading\"];\n const glossNumber: string | undefined =\n partMatches?.groups![\"glossnum\"];\n const inflectedForm: string | undefined =\n partMatches?.groups![\"inflection\"];\n\n if (reading)\n if (regexps.tanakaReferenceID.test(reading)) {\n const referenceID: RegExpExecArray | null =\n regexps.tanakaReferenceID.exec(reading);\n\n examplePart.referenceID = referenceID?.groups![\n \"entryid\"\n ] as StringNumber;\n } else examplePart.reading = reading;\n\n if (glossNumber)\n examplePart.glossNumber = glossNumber.startsWith(\"0\")\n ? Number.parseInt(glossNumber.substring(1))\n : Number.parseInt(glossNumber);\n if (inflectedForm) examplePart.inflectedForm = inflectedForm;\n if (baseForm.endsWith(\"~\")) {\n examplePart.edited = true;\n examplePart.baseForm = examplePart.baseForm.replace(\"~\", \"\");\n }\n\n bParts.push(examplePart);\n }\n\n const phrase: string = aParts[0]!;\n const translation: string = aParts[1]!;\n\n tanakaArray.push({\n id: idMatch?.groups![\"id\"]?.trim() as TanakaID,\n phrase: phrase.trim(),\n translation: translation.trim(),\n parts: bParts,\n });\n }\n }\n\n return tanakaArray;\n}\n\n/**\n * Converts a Tanaka Corpus `examples.utf` file into an array of {@link TanakaExample} objects (with furigana).\n * @param tanakaString The raw contents of a `examples.utf` file\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects (with furigana)\n */\nexport async function convertTanakaCorpusWithFurigana(\n tanakaString: string,\n): Promise<TanakaExample[]> {\n return new Promise<TanakaExample[]>(\n async (\n resolve: (value: TanakaExample[] | PromiseLike<TanakaExample[]>) => void,\n ) => {\n let tanakaArray: TanakaExample[] = convertTanakaCorpus(tanakaString);\n\n const kuroshiro: any = new Kuroshiro.default();\n\n await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any = kuroshiro.convert.bind(kuroshiro);\n\n tanakaArray = await Promise.all(\n tanakaArray.map(async (ex: TanakaExample) => {\n let furigana: string | undefined = undefined;\n\n if (convert !== null && !ex.phrase.includes(\"\u30FB\"))\n furigana = (await convert(ex.phrase, {\n to: \"hiragana\",\n mode: \"furigana\",\n })) as string;\n\n if (furigana) ex.furigana = furigana;\n\n return ex;\n }),\n );\n\n resolve(tanakaArray);\n },\n );\n}\n\n/**\n * Converts a `radkfile2` file (EUC-JP encoded) into an array of {@link DictRadical} objects.\n * @param radkBuffer A `radkfile2` buffer\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @returns An array of converted {@link DictRadical} objects\n */\nexport function convertRadkFile(\n radkBuffer: Buffer<ArrayBuffer>,\n kanjiDic: readonly DictKanji[],\n): DictRadical[] {\n const fileParsed: string[] = iconv\n .decode(radkBuffer, \"euc-jp\")\n .split(\"\\n\")\n .filter((line: string) => !line.startsWith(\"#\"));\n const radicals: DictRadical[] = [];\n\n for (let i = 0; i < fileParsed.length; i++) {\n const line: string | undefined = fileParsed[i];\n\n if (line && line.startsWith(\"$ \")) {\n const radical: DictRadical = {\n radical: line.charAt(2).trim(),\n strokes: line.substring(4).trim(),\n };\n\n let j: number = i + 1;\n let kanjiLine: string | undefined = fileParsed[j];\n\n const kanjiList: DictKanji[] = [];\n\n while (kanjiLine && !kanjiLine.startsWith(\"$ \")) {\n const kanjis: string[] = kanjiLine.split(\"\");\n\n for (const kanji of kanjis) {\n const foundKanji: DictKanji = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === kanji,\n )!;\n\n let kanjiObj: DictKanji = { kanji: kanji };\n\n kanjiObj = foundKanji;\n\n kanjiList.push(kanjiObj);\n }\n\n kanjiLine = fileParsed[++j];\n if (!kanjiLine) continue;\n\n if (kanjiLine.startsWith(\"$ \")) i = j - 1;\n }\n\n if (kanjiList.length > 0) radical.kanji = kanjiList;\n\n radicals.push(radical);\n }\n }\n\n return radicals;\n}\n\n/**\n * Converts a `kradfile2` file (EUC-JP encoded) into an array of {@link DictKanjiWithRadicals} objects.\n * @param kradBuffer A `kradfile2` buffer\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @param katakanaList An array of katakana {@link Kana} objects\n * @returns An array of converted {@link DictKanjiWithRadicals} objects\n */\nexport function convertKradFile(\n kradBuffer: Buffer<ArrayBuffer>,\n kanjiDic: readonly DictKanji[],\n katakanaList: readonly Kana[],\n): DictKanjiWithRadicals[] {\n const fileParsed: string[] = iconv\n .decode(kradBuffer, \"euc-jp\")\n .split(\"\\n\")\n .filter((line: string) => !line.startsWith(\"#\"));\n const kanjiWithRadicals: DictKanjiWithRadicals[] = [];\n\n for (const line of fileParsed) {\n if (line.length > 0) {\n const split: string[] = line.split(\" : \");\n\n const kanjiChar: string = split[0]!;\n const radicalsRow: string = split[1]!;\n\n const kanji: DictKanjiWithRadicals = {\n kanji: kanjiChar,\n radicals: [],\n };\n\n const radicals: string[] = radicalsRow.split(\" \");\n\n for (const radical of radicals) {\n const foundRadical: DictKanji | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === radical,\n );\n\n let radicalObj: DictKanji = foundRadical ?? { kanji: radical };\n\n if (!foundRadical) {\n const katakanaChar: Kana | undefined = katakanaList.find(\n (kana: Kana) => kana.kana === radical,\n );\n if (!katakanaChar) continue;\n\n radicalObj = {\n kanji: katakanaChar.kana,\n readingMeaning: [\n {\n groups: [\n {\n readings: [{ reading: katakanaChar.kana, type: \"ja_on\" }],\n meanings: [katakanaChar.reading],\n },\n ],\n },\n ],\n };\n }\n\n kanji.radicals.push(radicalObj);\n }\n\n if (kanji.kanji.length === 1 && kanji.radicals.length > 0)\n kanjiWithRadicals.push(kanji);\n }\n }\n\n return kanjiWithRadicals;\n}\n\n/**\n * Maps entry properties (IDs and kanji) with other entries.\n *\n * - {@link jmDict} => {@link WordIDEntryMap}, {@link KanjiWordsMap}\n *\n * - {@link kanjiDic} => {@link KanjiEntryMap}, {@link KanjiSVGMap} (only if {@link svgList} is present)\n *\n * - {@link tanakaExamples} (requires {@link jmDict}) => {@link WordExamplesMap}\n *\n * - {@link wordDefinitionPairs} => {@link WordDefinitionsMap}\n *\n * @param jmDict An array of converted `JMdict` entries\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @param tanakaExamples An array of converted `Tanaka Corpus` examples\n * @param wordDefinitionPairs An array of `ja.wiktionary.org` word-definitions pairs\n * @param svgList An array of SVG file names\n * @returns An object containing of any entry maps, their presence being dependent on the provided arguments.\n */\nexport function createEntryMaps(\n jmDict?: readonly DictWord[],\n kanjiDic?: readonly DictKanji[],\n tanakaExamples?: readonly TanakaExample[],\n wordDefinitionPairs?: readonly WordDefinitionPair[],\n svgList?: readonly string[],\n): EntryMaps {\n const kanjiEntryMap: KanjiEntryMap = new Map<string, DictKanji>();\n const wordIDEntryMap: WordIDEntryMap = new Map<StringNumber, DictWord>();\n const kanjiWordsMap: KanjiWordsMap = new Map<string, DictWord[]>();\n const wordExamplesMap: WordExamplesMap = new Map<\n StringNumber,\n TanakaExample[]\n >();\n const wordDefinitionsMap: WordDefinitionsMap = new Map<\n StringNumber,\n Definition[]\n >();\n const kanjiSVGMap: KanjiSVGMap = new Map<string, string>();\n\n const wordPartsMap: Map<StringNumber, Set<string>> = new Map<\n StringNumber,\n Set<string>\n >();\n const partExamplesMap: Map<string, TanakaExample[]> = new Map<\n string,\n TanakaExample[]\n >();\n const entryParts: Set<string> = new Set<string>();\n\n if (kanjiDic)\n for (const kanji of kanjiDic) kanjiEntryMap.set(kanji.kanji, kanji);\n if (wordDefinitionPairs)\n for (const pair of wordDefinitionPairs)\n wordDefinitionsMap.set(pair.wordID, pair.definitions);\n\n if (kanjiDic && svgList)\n for (const kanji of kanjiDic) {\n const codePoint: string = kanji.kanji\n .codePointAt(0)!\n .toString(16)\n .toLowerCase();\n\n const svg: string | undefined = svgList.find((file: string) => {\n const baseName: string = file.split(\".\")[0]!.toLowerCase();\n\n return baseName === codePoint || baseName === `0${codePoint}`;\n });\n\n if (svg) kanjiSVGMap.set(kanji.kanji, svg);\n }\n\n if (jmDict) {\n for (const word of jmDict) {\n wordIDEntryMap.set(word.id, word);\n\n if (word.kanjiForms)\n for (const kf of word.kanjiForms)\n for (const char of kf.form\n .split(\"\")\n .filter((c: string) => regexps.kanji.test(c))) {\n if (!kanjiWordsMap.has(char)) kanjiWordsMap.set(char, [word]);\n else kanjiWordsMap.get(char)!.push(word);\n }\n\n if (tanakaExamples) {\n const rkf: ReadingsKanjiFormsPair = getValidForms(\n word.readings,\n word.kanjiForms,\n word.isCommon,\n );\n\n const localPartParts: Set<string> = new Set<string>();\n\n if (rkf.readings.length > 0)\n for (const reading of rkf.readings) {\n entryParts.add(reading.reading);\n localPartParts.add(reading.reading);\n }\n\n if (rkf.kanjiForms && rkf.kanjiForms.length > 0)\n for (const kanjiForm of rkf.kanjiForms) {\n entryParts.add(kanjiForm.form);\n localPartParts.add(kanjiForm.form);\n }\n\n entryParts.add(word.id);\n localPartParts.add(word.id);\n\n wordPartsMap.set(word.id, localPartParts);\n }\n }\n\n if (tanakaExamples) {\n for (const ex of tanakaExamples) {\n for (const part of ex.parts) {\n if (entryParts.has(part.baseForm)) {\n let exList: TanakaExample[] | undefined = partExamplesMap.get(\n part.baseForm,\n );\n if (!exList) {\n exList = [];\n partExamplesMap.set(part.baseForm, exList);\n }\n\n exList.push(ex);\n }\n if (part.reading && entryParts.has(part.reading)) {\n let exList: TanakaExample[] | undefined = partExamplesMap.get(\n part.reading,\n );\n if (!exList) {\n exList = [];\n partExamplesMap.set(part.reading, exList);\n }\n\n exList.push(ex);\n }\n if (part.inflectedForm && entryParts.has(part.inflectedForm)) {\n let exList: TanakaExample[] | undefined = partExamplesMap.get(\n part.inflectedForm,\n );\n if (!exList) {\n exList = [];\n partExamplesMap.set(part.inflectedForm, exList);\n }\n\n exList.push(ex);\n }\n\n if (part.referenceID && entryParts.has(part.referenceID)) {\n let exList: TanakaExample[] | undefined = partExamplesMap.get(\n part.referenceID,\n );\n if (!exList) {\n exList = [];\n partExamplesMap.set(part.referenceID, exList);\n }\n\n exList.push(ex);\n }\n }\n }\n\n for (const word of jmDict) {\n const entryParts: Set<string> = wordPartsMap.get(word.id)!;\n\n const seenEx: Set<string> = new Set<string>();\n const validExamples: TanakaExample[] = [];\n\n for (const p of entryParts) {\n const examplesForPart: TanakaExample[] | undefined = partExamplesMap\n .get(p)\n ?.filter((ex: TanakaExample) => !seenEx.has(ex.id));\n if (!examplesForPart) continue;\n\n for (const ex of examplesForPart) {\n seenEx.add(ex.id);\n validExamples.push(ex);\n }\n }\n\n if (validExamples.length > 0)\n wordExamplesMap.set(word.id, validExamples);\n }\n }\n }\n\n return {\n ...(wordIDEntryMap.size > 0 ? { wordIDEntryMap: wordIDEntryMap } : {}),\n ...(kanjiWordsMap.size > 0 ? { kanjiWordsMap: kanjiWordsMap } : {}),\n ...(kanjiEntryMap.size > 0 ? { kanjiEntryMap: kanjiEntryMap } : {}),\n ...(wordExamplesMap.size > 0 ? { wordExamplesMap: wordExamplesMap } : {}),\n ...(wordDefinitionsMap.size > 0\n ? { wordDefinitionsMap: wordDefinitionsMap }\n : {}),\n ...(kanjiSVGMap.size > 0 ? { kanjiSVGMap: kanjiSVGMap } : {}),\n };\n}\n\nfunction mapEntry(entry: any): JaWiktionaryEntry {\n return {\n word: entry.word,\n pos_title: entry.pos_title,\n senses: entry.senses\n .filter(\n (sense: any) =>\n (isObjectArray(sense.form_of) &&\n sense.form_of.every(\n (form: any) => form.word && typeof form.word === \"string\",\n )) ||\n isStringArray(sense.glosses),\n )\n .map((sense: any) => ({\n ...(sense.form_of\n ? {\n form_of: sense.form_of.map((form: any) => form.word),\n }\n : {}),\n glosses: sense.glosses,\n })),\n ...(isObjectArray(entry.forms) &&\n entry.forms.every((form: any) => typeof form.form === \"string\")\n ? { forms: entry.forms.map((form: any) => form.form) }\n : {}),\n };\n}\n\n/**\n * Converts and filters a `ja.wiktionary.org` JSONL dump (sync)\n *\n * The dump file needs to be converted from a `jawiktionary-latest-pages-articles.xml.bz2` file from {@link https://dumps.wikimedia.org/jawiktionary/latest/} using {@link https://github.com/tatuylonen/wiktextract | wiktextract}.\n * @param buffer A JSONL dump file buffer\n * @returns An array containing only the Japanese entries\n */\nexport function convertJawiktionarySync(buffer: Buffer): JaWiktionaryEntry[] {\n const lines = buffer.toString(\"utf-8\").split(\"\\n\");\n const entries: JaWiktionaryEntry[] = [];\n\n for (let i: number = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const obj: any = JSON.parse(line);\n\n if (\n obj &&\n typeof obj === \"object\" &&\n typeof obj.lang === \"string\" &&\n (obj.lang === \"\u65E5\u672C\u8A9E\" || obj.lang === \"\u53E4\u5178\u65E5\u672C\u8A9E\")\n )\n entries.push(mapEntry(obj));\n }\n\n return entries;\n}\n\n/**\n * Converts and filters a `ja.wiktionary.org` JSONL dump (async)\n *\n * The dump file needs to be converted from a `jawiktionary-latest-pages-articles.xml.bz2` file from {@link https://dumps.wikimedia.org/jawiktionary/latest/} using {@link https://github.com/tatuylonen/wiktextract | wiktextract}.\n * @param stream A JSONL dump file stream\n * @returns An array containing only the Japanese entries\n */\nexport async function convertJawiktionaryAsync(\n stream: ReadStream,\n): Promise<JaWiktionaryEntry[]> {\n return new Promise<JaWiktionaryEntry[]>(\n async (\n resolve: (\n value: JaWiktionaryEntry[] | PromiseLike<JaWiktionaryEntry[]>,\n ) => void,\n ) => {\n const rl: Interface = createInterface({\n input: stream,\n crlfDelay: Infinity,\n });\n\n const entries: JaWiktionaryEntry[] = [];\n\n for await (const line of rl) {\n const obj: any = JSON.parse(line.trim());\n\n if (\n obj &&\n typeof obj === \"object\" &&\n typeof obj.lang === \"string\" &&\n (obj.lang === \"\u65E5\u672C\u8A9E\" || obj.lang === \"\u53E4\u5178\u65E5\u672C\u8A9E\")\n )\n entries.push(mapEntry(obj));\n }\n\n rl.close();\n stream.close();\n stream.destroy();\n\n resolve(entries);\n },\n );\n}\n\nfunction parseEntry(\n entry: JaWiktionaryEntry,\n definitions: Definition[],\n definitionMap: Map<string, { count: number }>,\n): void {\n for (const sense of entry.senses) {\n const definition: string = sense.glosses.join(\"\");\n\n if (!definitions.some((def: Definition) => def.definition === definition)) {\n if (!definitionMap.has(definition))\n definitionMap.set(definition, { count: 1 });\n else definitionMap.get(definition)!.count++;\n\n definitions.push({ definition: definition });\n }\n }\n}\n\n/**\n * Pairs Japanese definitions with JMdict word entries\n * @param entryList An array containing `ja.wiktionary.org` Japanese entries (converted using {@link convertJawiktionarySync} or {@link convertJawiktionaryAsync})\n * @param jmDict An array of converted `JMdict` entries\n * @returns A promise resolving with an array of {@link WordDefinitionPair} objects\n */\nexport function getWordDefinitions(\n entryList: readonly JaWiktionaryEntry[],\n jmDict: readonly DictWord[],\n): WordDefinitionPair[] {\n const entries: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n\n for (const entry of entryList) {\n const ent: JaWiktionaryEntry[] | undefined = entries.get(entry.word);\n\n if (ent) ent.push(entry);\n else entries.set(entry.word, [entry]);\n }\n\n const japaneseDefinitions: WordDefinitionPair[] = [];\n const definitionMap: Map<string, { count: number }> = new Map<\n string,\n { count: number }\n >();\n\n const wordFormsMap: Map<\n StringNumber,\n { readings: Set<string>; kanjiForms?: Set<string> | undefined }\n > = new Map<\n StringNumber,\n { readings: Set<string>; kanjiForms?: Set<string> | undefined }\n >();\n const validReadings: Set<string> = new Set<string>();\n const validKanjiForms: Set<string> = new Set<string>();\n const validForms: Set<string> = new Set<string>();\n\n for (const word of jmDict) {\n const wordReadings: Set<string> = new Set<string>();\n const wordKanjiForms: Set<string> = new Set<string>();\n\n const rkf: ReadingsKanjiFormsPair = getValidForms(\n word.readings,\n word.kanjiForms,\n word.isCommon,\n );\n\n if (rkf.readings.length > 0)\n for (const r of rkf.readings) {\n validReadings.add(r.reading);\n wordReadings.add(r.reading);\n validForms.add(r.reading);\n }\n if (rkf.kanjiForms && rkf.kanjiForms.length > 0)\n for (const kf of rkf.kanjiForms) {\n validKanjiForms.add(kf.form);\n wordKanjiForms.add(kf.form);\n validForms.add(kf.form);\n }\n\n wordFormsMap.set(word.id, {\n readings: wordReadings,\n ...(wordKanjiForms.size > 0 ? { kanjiForms: wordKanjiForms } : {}),\n });\n }\n\n const validTitleEntries: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n const entriesWithFormTitlesGlobal: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n const entriesWithFormsGlobal: Map<string, JaWiktionaryEntry[]> = new Map<\n string,\n JaWiktionaryEntry[]\n >();\n\n const validFormOfEntries: Set<string> = new Set<string>();\n const validGlossesEntries: Set<string> = new Set<string>();\n const validFormsEntries: Set<string> = new Set<string>();\n\n const ents = Array.from(entries.values()).flat();\n\n for (const entry of ents) {\n let valid: boolean = false;\n\n if (validKanjiForms && validKanjiForms.has(entry.word)) {\n valid = true;\n\n for (const sense of entry.senses) {\n if (\n sense.form_of &&\n sense.form_of.some((form: string) => validReadings.has(form))\n )\n validFormOfEntries.add(entry.word);\n\n for (const gloss of sense.glosses) {\n let hasForm: boolean = false;\n\n if (gloss.includes(\"\u8868\u8A18\") || gloss.includes(\"\u53C2\u7167\"))\n for (const r of validForms)\n if (gloss.includes(r)) {\n hasForm = true;\n break;\n }\n\n if (hasForm) validGlossesEntries.add(entry.word);\n }\n }\n\n if (entry.forms)\n for (const form of entry.forms)\n if (validReadings.has(form)) validFormsEntries.add(entry.word);\n }\n\n if (validReadings.has(entry.word)) {\n valid = true;\n const ftEntry = entriesWithFormTitlesGlobal.get(entry.word);\n\n if (ftEntry) ftEntry.push(entry);\n else entriesWithFormTitlesGlobal.set(entry.word, [entry]);\n }\n\n if (valid) {\n const tEntry = validTitleEntries.get(entry.word);\n\n if (tEntry) tEntry.push(entry);\n else validTitleEntries.set(entry.word, [entry]);\n }\n\n if (\n entry.forms &&\n (validKanjiForms.has(entry.word) || validReadings.has(entry.word)) &&\n entry.forms.some(\n (form: string) => validKanjiForms.has(form) || validReadings.has(form),\n )\n ) {\n const wfEntry = entriesWithFormsGlobal.get(entry.word);\n\n if (wfEntry) wfEntry.push(entry);\n else entriesWithFormsGlobal.set(entry.word, [entry]);\n }\n }\n\n ents.length = 0;\n\n const posMap: Map<\n POS,\n {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n }\n > = new Map<\n POS,\n {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n }\n >();\n\n const vte: JaWiktionaryEntry[] = Array.from(\n validTitleEntries.values(),\n ).flat();\n const fge: JaWiktionaryEntry[] = Array.from(\n entriesWithFormTitlesGlobal.values(),\n ).flat();\n const wfe: JaWiktionaryEntry[] = Array.from(\n entriesWithFormsGlobal.values(),\n ).flat();\n\n for (const pos of [\n \"\u540D\u8A5E\",\n \"\u52D5\u8A5E\",\n \"\u6210\u53E5\",\n \"\u526F\u8A5E\",\n \"\u5F62\u5BB9\u52D5\u8A5E\",\n \"\u52A9\u8A5E\",\n \"\u611F\u52D5\u8A5E\",\n \"\u4EE3\u540D\u8A5E\",\n \"\u63A5\u5C3E\u8F9E\",\n \"\u63A5\u982D\u8A9E\",\n \"\u9020\u8A9E\u6210\u5206\",\n \"\u7565\u8A9E\",\n \"\u56FA\u6709\u540D\u8A5E\",\n \"\u4EBA\u79F0\u4EE3\u540D\u8A5E\",\n \"\u63A5\u982D\u8F9E\",\n \"\u63A5\u7D9A\u52A9\u8A5E\",\n \"\u9593\u6295\u8A5E\",\n \"\u52A9\u52D5\u8A5E\",\n \"\u5F62\u5BB9\u8A5E\",\n \"\u7E2E\u7D04\u5F62\",\n \"\u63A5\u8F9E\",\n \"\u63A5\u7D9A\u8A5E\",\n \"\u9023\u4F53\u8A5E\",\n \"\u4EBA\u540D\",\n \"\u8A18\u53F7\",\n \"\u6570\u8A5E\",\n \"\u6163\u7528\u53E5\",\n \"\u3053\u3068\u308F\u3056\",\n \"\u52A9\u6570\u8A5E\",\n \"\u82F1\u6570\u5B57\u6DF7\u5408\u8868\u8A18\",\n \"\u52D5\u8A5E\u53E5\",\n \"\u6210\u8A9E\",\n \"\u610F\u7FA9\",\n \"\u982D\u5B57\u8A9E\",\n \"\u63A5\u5C3E\u8A9E\",\n ]) {\n posMap.set(pos as POS, {});\n\n for (const te of vte)\n if (te.pos_title === pos || te.pos_title === \"\u548C\u8A9E\u306E\u6F22\u5B57\u8868\u8A18\") {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.title === undefined)\n posEntries.title = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined = posEntries.title.get(\n te.word,\n );\n\n if (entryList) entryList.push(te);\n else posEntries.title.set(te.word, [te]);\n }\n\n for (const ft of fge)\n if (ft.pos_title === pos) {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.formTitle === undefined)\n posEntries.formTitle = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined =\n posEntries.formTitle.get(ft.word);\n\n if (entryList) entryList.push(ft);\n else posEntries.formTitle.set(ft.word, [ft]);\n }\n\n for (const wf of wfe)\n if (wf.pos_title === pos) {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos as POS)!;\n\n if (posEntries.form === undefined)\n posEntries.form = new Map<string, JaWiktionaryEntry[]>();\n\n const entryList: JaWiktionaryEntry[] | undefined = posEntries.form.get(\n wf.word,\n );\n\n if (entryList) entryList.push(wf);\n else posEntries.form.set(wf.word, [wf]);\n }\n }\n\n vte.length = 0;\n fge.length = 0;\n wfe.length = 0;\n\n const wordEntriesPairs: {\n word: DictWord;\n readings: Set<string>;\n kanjiForms?: Set<string>;\n forms: Set<string>;\n entriesWithTitles: JaWiktionaryEntry[];\n entriesWithFormTitles: JaWiktionaryEntry[];\n entriesWithForms: JaWiktionaryEntry[];\n }[] = [];\n\n for (const word of jmDict) {\n const poses: Set<POS> = new Set<POS>();\n\n for (const m of word.meanings)\n for (const note of m.partOfSpeech) {\n const noteEntry:\n | readonly [string, string]\n | readonly [string, string, POS | readonly POS[]]\n | undefined = noteMap.get(note);\n\n if (noteEntry && noteEntry.length === 3) {\n const notePos: POS | readonly POS[] = noteEntry[2];\n\n if (Array.isArray(notePos))\n for (const pos of notePos) {\n if (!poses.has(pos)) poses.add(pos);\n }\n else if (typeof notePos === \"string\" && !poses.has(notePos))\n poses.add(notePos);\n }\n }\n\n const rkf: { readings: Set<string>; kanjiForms?: Set<string> | undefined } =\n wordFormsMap.get(word.id)!;\n\n const entriesWithTitles: JaWiktionaryEntry[] = [];\n const entriesWithFormTitles: JaWiktionaryEntry[] = [];\n const entriesWithForms: JaWiktionaryEntry[] = [];\n\n if (poses.size > 0)\n for (const pos of poses) {\n const posEntries: {\n title?: Map<string, JaWiktionaryEntry[]>;\n formTitle?: Map<string, JaWiktionaryEntry[]>;\n form?: Map<string, JaWiktionaryEntry[]>;\n } = posMap.get(pos)!;\n\n if (rkf.kanjiForms)\n for (const kf of rkf.kanjiForms) {\n const te: JaWiktionaryEntry[] | undefined =\n posEntries.title?.get(kf);\n const fe: JaWiktionaryEntry[] | undefined =\n posEntries.form?.get(kf);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n validFormOfEntries.has(ent.word) ||\n validGlossesEntries.has(ent.word) ||\n validFormsEntries.has(ent.word),\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: string) =>\n rkf.kanjiForms!.has(form) || rkf.readings.has(form),\n ),\n ),\n );\n }\n\n for (const r of rkf.readings) {\n const te: JaWiktionaryEntry[] | undefined = posEntries.title?.get(r);\n const fe: JaWiktionaryEntry[] | undefined = posEntries.form?.get(r);\n const fte: JaWiktionaryEntry[] | undefined =\n posEntries.formTitle?.get(r);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n (ent.forms &&\n rkf.kanjiForms &&\n ent.forms.some((form: string) =>\n rkf.kanjiForms!.has(form),\n )) ||\n rkf.kanjiForms === undefined,\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: string) =>\n (rkf.kanjiForms && rkf.kanjiForms.has(form)) ||\n rkf.readings.has(form),\n ),\n ),\n );\n if (fte) entriesWithFormTitles.push(...fte);\n }\n }\n\n if (\n entriesWithTitles.length === 0 &&\n entriesWithFormTitles.length === 0 &&\n entriesWithForms.length === 0\n ) {\n if (rkf.kanjiForms)\n for (const kf of rkf.kanjiForms) {\n const te: JaWiktionaryEntry[] | undefined = validTitleEntries.get(kf);\n const fe: JaWiktionaryEntry[] | undefined =\n entriesWithFormsGlobal.get(kf);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n validFormOfEntries.has(ent.word) ||\n validGlossesEntries.has(ent.word) ||\n validFormsEntries.has(ent.word),\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: string) =>\n rkf.kanjiForms!.has(form) || rkf.readings.has(form),\n ),\n ),\n );\n }\n\n for (const r of rkf.readings) {\n const te: JaWiktionaryEntry[] | undefined = validTitleEntries.get(r);\n const fe: JaWiktionaryEntry[] | undefined =\n entriesWithFormsGlobal.get(r);\n const fte: JaWiktionaryEntry[] | undefined =\n entriesWithFormTitlesGlobal.get(r);\n\n if (te)\n entriesWithTitles.push(\n ...te.filter(\n (ent: JaWiktionaryEntry) =>\n (ent.forms &&\n rkf.kanjiForms &&\n ent.forms.some((form: string) =>\n rkf.kanjiForms!.has(form),\n )) ||\n rkf.kanjiForms === undefined,\n ),\n );\n if (fe)\n entriesWithForms.push(\n ...fe.filter(\n (ent: JaWiktionaryEntry) =>\n ent.forms &&\n ent.forms.some(\n (form: string) =>\n (rkf.kanjiForms && rkf.kanjiForms.has(form)) ||\n rkf.readings.has(form),\n ),\n ),\n );\n if (fte) entriesWithFormTitles.push(...fte);\n }\n }\n\n if (\n entriesWithTitles.length > 0 &&\n (entriesWithFormTitles.length > 0 || entriesWithForms.length > 0)\n )\n wordEntriesPairs.push({\n word: word,\n readings: rkf.readings,\n ...(rkf.kanjiForms ? { kanjiForms: rkf.kanjiForms } : {}),\n forms: rkf.kanjiForms\n ? rkf.readings.union(rkf.kanjiForms)\n : rkf.readings,\n entriesWithTitles: entriesWithTitles,\n entriesWithFormTitles: entriesWithFormTitles,\n entriesWithForms: entriesWithForms,\n });\n }\n\n for (const pair of wordEntriesPairs) {\n const definitions: Definition[] = [];\n\n const kanjiFormEntries: JaWiktionaryEntry[] = [];\n const entriesWithForms: JaWiktionaryEntry[] = [];\n const readingEntries: JaWiktionaryEntry[] = [];\n\n const titleFormMap: Map<string, Set<string>> = new Map<\n string,\n Set<string>\n >();\n const refsMap: Map<string, Set<string>> = new Map<string, Set<string>>();\n const readingForms: Set<string> = new Set<string>();\n\n for (const ent of pair.entriesWithTitles) {\n const validFormOf: boolean = validFormOfEntries.has(ent.word);\n const validGlosses: boolean = validGlossesEntries.has(ent.word);\n const validForms: boolean = validFormsEntries.has(ent.word);\n\n const hasKanjiForms: boolean =\n ent.forms !== undefined &&\n pair.kanjiForms !== undefined &&\n ent.forms.some((form: string) => pair.kanjiForms!.has(form));\n\n if (\n pair.kanjiForms &&\n pair.kanjiForms.has(ent.word) &&\n (validFormOf || validGlosses || validForms)\n ) {\n kanjiFormEntries.push(ent);\n\n if ((validFormOf || validGlosses) && ent.senses)\n for (const sense of ent.senses) {\n if (validFormOf && sense.form_of) {\n for (const form of sense.form_of)\n if (pair.readings.has(form)) {\n const elem: Set<string> | undefined = titleFormMap.get(form);\n\n if (!elem)\n titleFormMap.set(form, new Set<string>([ent.word]));\n else elem.add(ent.word);\n }\n }\n\n if (validGlosses)\n for (const gloss of sense.glosses)\n if (gloss.includes(\"\u8868\u8A18\") || gloss.includes(\"\u53C2\u7167\"))\n for (const f of pair.forms)\n if (gloss.includes(f)) {\n const elem: Set<string> | undefined = refsMap.get(f);\n\n if (!elem) refsMap.set(f, new Set<string>([ent.word]));\n else elem.add(ent.word);\n }\n }\n\n if (validForms && ent.forms)\n for (const form of ent.forms)\n if (pair.readings.has(form)) readingForms.add(form);\n }\n\n if (pair.readings.has(ent.word) && hasKanjiForms)\n entriesWithForms.push(ent);\n if (pair.kanjiForms === undefined && pair.readings.has(ent.word))\n readingEntries.push(ent);\n }\n\n for (const entry of pair.entriesWithForms) {\n const elem: Set<string> | undefined = titleFormMap.get(entry.word);\n\n if (\n elem &&\n entry.forms &&\n entry.forms.some((form: string) => elem.has(form))\n )\n entriesWithForms.push(entry);\n }\n\n for (const entry of pair.entriesWithFormTitles) {\n if (readingForms.has(entry.word)) {\n entriesWithForms.push(entry);\n continue;\n }\n\n const ft: Set<string> | undefined = refsMap.get(entry.word);\n\n if (ft && !ft.isDisjointFrom(pair.forms)) entriesWithForms.push(entry);\n }\n\n if (kanjiFormEntries.length > 0)\n for (const entry of kanjiFormEntries)\n if (entry.pos_title !== \"\u548C\u8A9E\u306E\u6F22\u5B57\u8868\u8A18\")\n parseEntry(entry, definitions, definitionMap);\n\n if (entriesWithForms.length > 0)\n for (const ref of entriesWithForms)\n parseEntry(ref, definitions, definitionMap);\n\n if (readingEntries.length > 0)\n for (const readingEntry of readingEntries)\n parseEntry(readingEntry, definitions, definitionMap);\n\n if (definitions.length > 0)\n japaneseDefinitions.push({\n wordID: pair.word.id,\n definitions: definitions,\n });\n }\n\n for (let i: number = 0; i < japaneseDefinitions.length; i++) {\n const pair: WordDefinitionPair = japaneseDefinitions[i]!;\n\n for (let j: number = 0; j < pair.definitions.length; j++) {\n const defCount: { count: number } | undefined = definitionMap.get(\n pair.definitions[j]!.definition,\n );\n\n if (defCount && defCount.count > 1)\n pair.definitions[j]!.mayNotBeAccurate = true;\n }\n\n japaneseDefinitions[i] = pair;\n }\n\n return japaneseDefinitions;\n}\n\n/**\n * Pairs Japanese definitions with JMdict word entries (with furigana)\n * @param entryList An array containing `ja.wiktionary.org` Japanese entries (converted using {@link convertJawiktionarySync} or {@link convertJawiktionaryAsync})\n * @param jmDict An array of converted `JMdict` entries\n * @returns A promise resolving with an array of {@link WordDefinitionPair} objects (with furigana)\n */\nexport async function getWordDefinitionsWithFurigana(\n entryList: readonly JaWiktionaryEntry[],\n jmDict: readonly DictWord[],\n): Promise<WordDefinitionPair[]> {\n return new Promise<WordDefinitionPair[]>(async (resolve) => {\n const japaneseDefinitions: WordDefinitionPair[] = getWordDefinitions(\n entryList,\n jmDict,\n );\n\n const kuroshiro: any = new Kuroshiro.default();\n await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any = kuroshiro.convert.bind(kuroshiro);\n\n for (let i: number = 0; i < japaneseDefinitions.length; i++) {\n const pair: WordDefinitionPair = japaneseDefinitions[i]!;\n\n for (let j: number = 0; j < pair.definitions.length; j++)\n if (!pair.definitions[j]!.definition.includes(\"\u30FB\"))\n pair.definitions[j]!.furigana = (await convert(\n pair.definitions[j]!.definition,\n {\n to: \"hiragana\",\n mode: \"furigana\",\n },\n )) as string;\n\n japaneseDefinitions[i] = pair;\n }\n\n resolve(japaneseDefinitions);\n });\n}\n\nfunction lookupWordNote(\n key: string,\n notes: string[],\n tags: string[],\n): NoteAndTag {\n const info:\n | readonly [string, string]\n | readonly [string, string, POS | readonly POS[]]\n | undefined = noteMap.get(key.toLowerCase());\n\n if (!info) {\n notes.push(key);\n\n return { note: key };\n }\n\n const tag: string = `word::${info[0]}`;\n\n if (!tags.includes(tag)) tags.push(tag);\n notes.push(info[1]);\n\n return { note: info[1], tag: tag };\n}\n\nconst wordAddNoteArray: (\n arr: string[] | undefined,\n cb: (v: string) => void,\n) => void = (arr: string[] | undefined, cb: (v: string) => void) => {\n if (!arr) return;\n for (const v of arr) cb(v);\n};\n\n/**\n * Transforms a converted `JMdict` entry into a more readable format, by providing either its JMdict entry ID or the {@link DictWord} object directly.\n * @param word The ID of the `JMdict` entry (requires {@link dict}) or a {@link DictWord} object\n * @param dict An array converted `JMdict` entries or a {@link WordIDEntryMap} *(not needed if {@link word} is a {@link DictWord} object)*\n * @param kanjiDic An array of converted `KANJIDIC` entries or a {@link KanjiEntryMap}\n * @param examples An array of converted `Tanaka Corpus` examples or a {@link WordExamplesMap}\n * @param definitions An array of `ja.wiktionary.org` word-definitions pairs or a {@link WordDefinitionsMap}\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link DictWord} object or `undefined` if entry is not found\n */\nexport function getWord(\n word: StringNumber | DictWord,\n dict?: readonly DictWord[] | WordIDEntryMap,\n kanjiDic?: readonly DictKanji[] | KanjiEntryMap,\n examples?: readonly TanakaExample[] | WordExamplesMap,\n definitions?: readonly WordDefinitionPair[] | WordDefinitionsMap,\n noteTypeName?: string,\n deckPath?: string,\n): Word | undefined {\n let dictWord: DictWord | undefined = undefined;\n\n if (typeof word === \"string\" && dict) {\n if (Array.isArray(dict))\n dictWord = (dict as readonly DictWord[]).find(\n (entry: DictWord) => entry.id === word,\n );\n if (dict instanceof Map) dictWord = dict.get(word);\n }\n\n if (typeof word === \"object\") dictWord = word;\n\n if (dictWord) {\n const word: Word = {\n id: dictWord.id,\n readings: [],\n translations: [],\n noteID: `word_${dictWord.id}`,\n noteTypeName: noteTypeName,\n deckPath: deckPath,\n tags: [],\n };\n\n if (dictWord.isCommon === true) {\n word.common = true;\n word.tags!.push(\"word::common\");\n }\n\n if (dictWord.kanjiForms)\n word.kanjiForms = dictWord.kanjiForms.map(\n (dictKanjiForm: DictKanjiForm) => ({\n kanjiForm: dictKanjiForm.form,\n ...(dictKanjiForm.notes\n ? {\n notes: dictKanjiForm.notes.map((note: string) => {\n const noteAndTag: NoteAndTag = lookupWordNote(\n note,\n [],\n word.tags!,\n );\n\n return capitalizeString(noteAndTag.note);\n }),\n }\n : {}),\n ...(dictKanjiForm.commonness && dictKanjiForm.commonness.length > 0\n ? { common: true }\n : {}),\n }),\n );\n\n word.readings = dictWord.readings.map((dictReading: DictReading) => ({\n reading: dictReading.reading,\n ...(dictReading.kanjiFormRestrictions || dictReading.notes\n ? {\n notes: [\n ...(dictReading.kanjiFormRestrictions\n ? dictReading.kanjiFormRestrictions.map(\n (restriction: string) =>\n `Reading restricted to ${restriction}`,\n )\n : []),\n ...(dictReading.notes\n ? dictReading.notes.map((note: string) => {\n const noteAndTag: NoteAndTag = lookupWordNote(\n note,\n [],\n word.tags!,\n );\n\n return capitalizeString(noteAndTag.note);\n })\n : []),\n ],\n }\n : {}),\n ...(dictReading.commonness && dictReading.commonness.length > 0\n ? { common: true }\n : {}),\n }));\n\n word.translations = [];\n\n for (const dictMeaning of dictWord.meanings) {\n const translationTypes: string[] = [];\n const translations: string[] = dictMeaning.translations.map(\n (\n translation:\n | string\n | { translation: string; type: \"lit\" | \"expl\" | \"tm\" },\n ) => {\n if (typeof translation === \"string\") return translation;\n else {\n const translationNoteAndTag:\n | readonly [string, string]\n | readonly [string, string, POS | readonly POS[]] = noteMap.get(\n translation.type,\n )!;\n\n translationTypes.push(translationNoteAndTag[1]);\n word.tags!.push(`word::${translationNoteAndTag[0]}`);\n\n return translation.translation;\n }\n },\n );\n\n const notes: string[] = [];\n\n wordAddNoteArray(\n dictMeaning.kanjiFormRestrictions,\n (restriction: string) =>\n notes.push(`Meaning restricted to ${restriction}`),\n );\n wordAddNoteArray(dictMeaning.readingRestrictions, (restriction: string) =>\n notes.push(`Meaning restricted to ${restriction}`),\n );\n for (const t of translationTypes) notes.push(t);\n wordAddNoteArray(dictMeaning.partOfSpeech, (pos: string) =>\n lookupWordNote(pos, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.fields, (field: string) =>\n lookupWordNote(field, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.dialects, (dialect: string) =>\n lookupWordNote(dialect, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.antonyms, (antonym: string) =>\n notes.push(`Antonym: ${antonym}`),\n );\n wordAddNoteArray(dictMeaning.references, (reference: string) =>\n notes.push(`Related: ${reference}`),\n );\n wordAddNoteArray(dictMeaning.info, (info: string) =>\n lookupWordNote(info, notes, word.tags!),\n );\n wordAddNoteArray(dictMeaning.misc, (misc: string) =>\n lookupWordNote(misc, notes, word.tags!),\n );\n\n for (let i: number = 0; i < notes.length; i++)\n notes[i] = capitalizeString(notes[i]!);\n\n word.translations.push({\n translation: translations.join(\"; \"),\n notes: notes,\n });\n }\n\n if (dictWord.usuallyInKana === true) {\n word.usuallyInKana = true;\n word.tags!.push(\"word::usually_in_kana_for_all_senses\");\n }\n\n if (kanjiDic && word.kanjiForms) {\n const kanji: Kanji[] = [];\n const seenChars: Set<string> = new Set<string>();\n\n for (const kanjiForm of word.kanjiForms)\n for (const char of kanjiForm.kanjiForm\n .split(\"\")\n .filter((c: string) => regexps.kanji.test(c))) {\n if (seenChars.has(char)) continue;\n seenChars.add(char);\n\n const kanjiEntry: DictKanji | undefined =\n kanjiDic instanceof Map ? kanjiDic.get(char) : undefined;\n\n const kanjiObj: Kanji | undefined = getKanji(\n kanjiEntry ?? char,\n Array.isArray(kanjiDic) ? (kanjiDic as DictKanji[]) : undefined,\n );\n\n if (kanjiObj)\n kanji.push({\n kanji: kanjiObj.kanji,\n ...(kanjiObj.meanings && kanjiObj.meanings.length > 0\n ? { meanings: kanjiObj.meanings }\n : {}),\n });\n }\n\n if (kanji.length > 0) word.kanji = kanji;\n }\n\n if (dictWord.hasPhrases !== undefined && examples) {\n const exampleList: readonly TanakaExample[] = Array.isArray(examples)\n ? (examples as readonly TanakaExample[])\n : ((examples as WordExamplesMap).get(dictWord.id) ?? []);\n\n const rkf: ReadingsKanjiFormsPair = getValidForms(\n dictWord.readings,\n dictWord.kanjiForms,\n dictWord.isCommon,\n );\n\n const readings: Set<string> = new Set<string>(\n rkf.readings.map((r: DictReading) => r.reading),\n );\n const kanjiForms: Set<string> | undefined = rkf.kanjiForms\n ? new Set<string>(rkf.kanjiForms.map((kf: DictKanjiForm) => kf.form))\n : undefined;\n\n let kanjiFormExamples: {\n ex: TanakaExample;\n partIndex: number;\n form?: string | undefined;\n }[] = [];\n const readingMatchingKanjiFormExamples: {\n ex: TanakaExample;\n partIndex: number;\n }[] = [];\n const readingExamples: { ex: TanakaExample; partIndex: number }[] = [];\n const readingMatchingKanjiForms: Set<string> = new Set<string>();\n\n for (const example of exampleList)\n for (let i: number = 0; i < example.parts.length; i++) {\n const part: ExamplePart = example.parts[i]!;\n\n const readingAsReadingMatch: boolean =\n part.reading !== undefined && readings.has(part.reading);\n const readingAsInflectedFormMatch: boolean =\n part.inflectedForm !== undefined &&\n readings.has(part.inflectedForm);\n\n const referenceIDMatch: boolean = part.referenceID === dictWord.id;\n\n if (\n (kanjiForms && kanjiForms.has(part.baseForm)) ||\n referenceIDMatch\n ) {\n if (readingAsReadingMatch || readingAsInflectedFormMatch) {\n readingMatchingKanjiFormExamples.push({\n ex: example,\n partIndex: i,\n });\n\n readingMatchingKanjiForms.add(part.baseForm);\n } else\n kanjiFormExamples.push({\n ex: example,\n partIndex: i,\n form: part.baseForm,\n });\n\n break;\n }\n\n const readingAsBaseFormMatch: boolean = readings.has(part.baseForm);\n\n if (\n (readingAsBaseFormMatch || referenceIDMatch) &&\n kanjiForms === undefined\n ) {\n readingExamples.push({ ex: example, partIndex: i });\n\n break;\n }\n }\n\n if (readingMatchingKanjiForms.size > 0)\n kanjiFormExamples = kanjiFormExamples.filter(\n (ex: {\n ex: TanakaExample;\n partIndex: number;\n form?: string | undefined;\n }) => ex.form && readingMatchingKanjiForms.has(ex.form),\n );\n\n const includeKanjiFormExamples: boolean = word.kanjiForms !== undefined;\n\n let wordExamples: { ex: TanakaExample; partIndex: number }[] = [\n ...(includeKanjiFormExamples\n ? [...readingMatchingKanjiFormExamples, ...kanjiFormExamples]\n : readingExamples),\n ];\n\n readingMatchingKanjiForms.clear();\n\n const glossSpecificExamples: {\n ex: TanakaExample;\n partIndex: number;\n }[] = [];\n const seenPhrases: Set<string> = new Set<string>();\n\n for (let i: number = 0; i < word.translations.length; i++) {\n outer: for (const example of wordExamples) {\n if (seenPhrases.has(example.ex.phrase)) continue;\n\n for (let j: number = 0; j < example.ex.parts.length; j++) {\n const part: ExamplePart = example.ex.parts[j]!;\n\n if (j === example.partIndex && part.glossNumber === i + 1) {\n example.ex.glossNumber = {\n wordId: word.id!,\n glossNumber: i + 1,\n };\n\n glossSpecificExamples.push(example);\n seenPhrases.add(example.ex.phrase);\n\n break outer;\n }\n }\n }\n }\n\n if (glossSpecificExamples.length === word.translations.length)\n wordExamples = glossSpecificExamples;\n else if (glossSpecificExamples.length > 0) {\n const exes: {\n ex: TanakaExample;\n partIndex: number;\n }[] = glossSpecificExamples;\n\n if (exes.length < 5) {\n wordExamples = wordExamples.filter(\n (ex: { ex: TanakaExample; partIndex: number }) =>\n !seenPhrases.has(ex.ex.phrase),\n );\n\n if (wordExamples.length > 0)\n for (const ex of wordExamples) {\n exes.push(ex);\n\n if (exes.length === 5) break;\n }\n }\n\n wordExamples = exes;\n }\n\n if (wordExamples.length > 0) {\n word.phrases = (\n wordExamples.length > 5 ? wordExamples.slice(0, 5) : wordExamples\n ).map((ex: { ex: TanakaExample; partIndex: number }) => ({\n phrase: ex.ex.furigana ?? ex.ex.phrase,\n translation: ex.ex.translation,\n originalPhrase: ex.ex.phrase,\n ...(ex.ex.glossNumber ? { glossNumber: ex.ex.glossNumber } : {}),\n }));\n\n word.tags!.push(\"word::has_phrases\");\n if (glossSpecificExamples.length > 0)\n word.tags!.push(\"word::has_meaning-specific_phrases\");\n }\n }\n\n if (definitions) {\n const defs: readonly Definition[] | undefined = Array.isArray(definitions)\n ? definitions.find((wdp: WordDefinitionPair) => wdp.wordID === word.id!)\n ?.definitions\n : (definitions as WordDefinitionsMap).get(word.id!);\n\n if (defs) word.definitions = [...defs];\n }\n\n return word;\n } else return undefined;\n}\n\n/**\n * Transforms a converted `KANJIDIC` entry into a more readable format, by providing either the kanji or the {@link DictKanji} object directly.\n * @param kanji The kanji character (requires {@link dict}) or a {@link DictKanji} object\n * @param dict An array of converted `KANJIDIC` entries or a {@link KanjiEntryMap} (not needed if {@link kanji} is a {@link DictKanji} object)\n * @param jmDict An array of converted `JMdict` entries or a {@link KanjiWordsMap}\n * @param svgList An array of SVG file names or a {@link KanjiSVGMap}\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link DictKanji} object or `undefined` if entry is not found\n */\nexport function getKanji(\n kanji: string | DictKanji,\n dict?: readonly DictKanji[] | KanjiEntryMap,\n jmDict?: readonly DictWord[] | KanjiWordsMap,\n svgList?: readonly string[] | KanjiSVGMap,\n noteTypeName?: string,\n deckPath?: string,\n): Kanji | undefined {\n let dictKanji: DictKanji | undefined = undefined;\n\n if (typeof kanji === \"string\" && dict)\n dictKanji = Array.isArray(dict)\n ? dict.find((entry: DictKanji) => entry.kanji === kanji)\n : (dict as KanjiEntryMap).get(kanji);\n else if (typeof kanji === \"object\") dictKanji = kanji;\n\n if (dictKanji) {\n const kanji: Kanji = {\n kanji: dictKanji.kanji,\n strokes: dictKanji.misc!.strokeNumber,\n ...(dictKanji.misc && dictKanji.misc.grade\n ? { grade: dictKanji.misc.grade }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.frequency\n ? { frequency: dictKanji.misc.frequency }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.jlpt\n ? { jlpt: dictKanji.misc.jlpt }\n : {}),\n noteID: `kanji_${dictKanji.kanji}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n tags: [],\n };\n\n if (dictKanji.readingMeaning && dictKanji.readingMeaning.length > 0) {\n const meanings: string[] = [];\n const nanori: string[] = [];\n const onyomi: string[] = [];\n const kunyomi: string[] = [];\n\n for (const rm of dictKanji.readingMeaning) {\n if (rm.nanori && rm.nanori.length > 0) nanori.push(...rm.nanori);\n\n for (const group of rm.groups!) {\n if (group.readings) {\n onyomi.push(\n ...group.readings\n .filter((reading: DictKanjiReading) => reading.type === \"ja_on\")\n .map((reading: DictKanjiReading) => reading.reading),\n );\n kunyomi.push(\n ...group.readings\n .filter(\n (reading: DictKanjiReading) => reading.type === \"ja_kun\",\n )\n .map((reading: DictKanjiReading) => reading.reading),\n );\n }\n\n if (group.meanings && group.meanings.length > 0)\n meanings.push(...group.meanings);\n }\n }\n\n if (meanings.length > 0) kanji.meanings = meanings;\n if (nanori.length > 0) kanji.nanori = nanori;\n if (onyomi.length > 0) kanji.onyomi = onyomi;\n if (kunyomi.length > 0) kanji.kunyomi = kunyomi;\n }\n\n if (jmDict) {\n let kanjiWords: readonly DictWord[] | Word[] | undefined = Array.isArray(\n jmDict,\n )\n ? (jmDict as readonly DictWord[])\n : (jmDict as KanjiWordsMap).get(kanji.kanji);\n\n const firstKfWords: readonly DictWord[] | undefined = kanjiWords?.filter(\n (word: DictWord) =>\n word.kanjiForms && word.kanjiForms[0]!.form.includes(kanji.kanji),\n );\n\n if (firstKfWords && firstKfWords.length > 0) kanjiWords = firstKfWords;\n\n if (kanjiWords) {\n const validWords: Word[] = [];\n\n for (const word of kanjiWords) {\n const kanjiForm: string | undefined = (\n firstKfWords && firstKfWords.length > 0\n ? word.kanjiForms![0]\n : word.kanjiForms!.find((kf: DictKanjiForm) =>\n kf.form.includes(kanji.kanji),\n )\n )?.form;\n\n if (kanjiForm) {\n const reading: string | undefined = (\n firstKfWords && firstKfWords.length > 0\n ? word.readings[0]\n : word.readings.find(\n (reading: DictReading) =>\n reading.kanjiFormRestrictions &&\n reading.kanjiFormRestrictions.includes(kanjiForm),\n )\n )?.reading;\n if (!reading) continue;\n\n const translation: DictTranslation | undefined = (\n firstKfWords && firstKfWords.length > 0\n ? word.meanings[0]\n : word.meanings.find(\n (m: DictMeaning) =>\n m.translations &&\n m.kanjiFormRestrictions &&\n m.kanjiFormRestrictions.includes(kanjiForm),\n )\n )?.translations!.map((t: DictTranslation) =>\n typeof t === \"string\" ? t : t.translation,\n )[0];\n if (!translation) continue;\n\n validWords.push({\n kanjiForms: [{ kanjiForm: kanjiForm }],\n readings: [{ reading: reading }],\n translations: [\n {\n translation: translation,\n },\n ],\n });\n }\n\n if (validWords.length === 3) break;\n }\n\n if (validWords.length > 0) kanji.words = validWords;\n }\n }\n\n if (svgList) {\n const codePoint: string = kanji.kanji\n .codePointAt(0)!\n .toString(16)\n .toLowerCase();\n\n const svg: string | undefined = Array.isArray(svgList)\n ? svgList.find((svgFile: string) =>\n [`${codePoint}.svg`, `0${codePoint}.svg`].includes(\n svgFile.toLowerCase(),\n ),\n )\n : (svgList as KanjiSVGMap).get(kanji.kanji);\n\n if (svg) kanji.svg = svg;\n }\n\n if (kanji.tags && dictKanji.isKokuji === true) {\n kanji.kokuji = true;\n kanji.tags.push(\"kanji::kokuji\");\n }\n\n kanji.tags!.push(\n `kanji::strokes::${kanji.strokes}`,\n ...(kanji.frequency ? [`kanji::frequency::${kanji.frequency}`] : []),\n ...(kanji.grade ? [`kanji::grade::${kanji.grade}`] : []),\n ...(kanji.jlpt\n ? [`kanji::pre-2010_jlpt::${kanji.jlpt.toLowerCase()}`]\n : []),\n `kanji::onyomi::${kanji.onyomi?.length ?? 0}`,\n `kanji::kunyomi::${kanji.kunyomi?.length ?? 0}`,\n `kanji::nanori::${kanji.nanori?.length ?? 0}`,\n `kanji::words::${kanji.words?.length ?? 0}`,\n ...(kanji.svg ? [\"kanji::has_svg\"] : []),\n );\n\n return kanji;\n } else return undefined;\n}\n\n/**\n * Same as {@link getKanji}, but with possible extra info.\n * @param info Additional info for the kanji (mnemonic, components, words)\n * @param kanji The kanji character or a {@link DictKanji} object\n * @param dict An array of converted KANJIDIC entries or a {@link KanjiEntryMap} *(not needed if {@link kanji} is a {@link DictKanji} object)*\n * @param useWords Whether or not to use the words provided in the `info` object (if present) instead of other words from `JMdict`\n * @param jmDict An array of converted `JMdict` entries or a {@link KanjiWordsMap}\n * @param svgList An array of SVG file names or a {@link KanjiSVGMap}\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @param sourceURL A link leading to the source of {@link info}\n * @returns The transformed {@link DictKanji} object\n */\nexport function getKanjiExtended(\n info: Kanji,\n kanji: string | DictKanji,\n dict?: readonly DictKanji[] | KanjiEntryMap,\n useWords?: true,\n jmDict?: readonly DictWord[] | KanjiWordsMap,\n svgList?: readonly string[] | KanjiSVGMap,\n noteTypeName?: string,\n deckPath?: string,\n sourceURL?: string,\n): Kanji | undefined {\n const kanjiObj: Kanji | undefined = getKanji(\n kanji,\n dict,\n jmDict,\n svgList,\n noteTypeName,\n deckPath,\n );\n\n if (kanjiObj) {\n let usedInfo: boolean = false;\n\n if (info.components) {\n kanjiObj.components = info.components;\n usedInfo = true;\n }\n if (info.mnemonic && info.mnemonic.length > 0) {\n kanjiObj.mnemonic = info.mnemonic;\n usedInfo = true;\n }\n if (useWords === true && info.words && info.words.length > 0) {\n kanjiObj.words = info.words;\n usedInfo = true;\n }\n\n if (kanjiObj.components)\n kanjiObj.tags!.push(`kanji::components::${kanjiObj.components.length}`);\n\n if (kanjiObj.mnemonic && kanjiObj.mnemonic.length > 0)\n kanjiObj.tags!.push(\"kanji::has_mnemonic\");\n\n if (useWords === true && kanjiObj.words && info.words)\n kanjiObj.tags!.forEach((tag: string, index: number) => {\n if (tag.startsWith(\"kanji::words::\") && kanjiObj.words) {\n kanjiObj.tags!.splice(\n index,\n 1,\n `kanji::words::${kanjiObj.words.length}`,\n );\n }\n });\n\n if (sourceURL && info.externalInfo === true && usedInfo)\n kanjiObj.source = sourceURL;\n\n return kanjiObj;\n } else return undefined;\n}\n\nexport function isWord(entry: Result): entry is Word {\n return (\n (entry as Word).translations !== undefined &&\n (entry as Word).readings !== undefined\n );\n}\n\nexport function isRadical(entry: Result): entry is Radical {\n return (entry as Radical).radical !== undefined;\n}\n\nexport function isKanji(entry: Result): entry is Kanji {\n return (\n (entry as Word).translations === undefined &&\n (entry as Word).readings === undefined &&\n (entry as Radical).radical === undefined &&\n (entry as Kanji).kanji !== undefined\n );\n}\n\nexport function isKana(entry: Result): entry is Kana {\n return (entry as Kana).kana !== undefined;\n}\n\nexport function isGrammar(entry: Result): entry is Grammar {\n return (entry as Grammar).point !== undefined;\n}\n\nconst createNotes: (notes: string[], phrase?: true) => string = (\n notes: string[],\n phrase?: true,\n) =>\n `${phrase === true ? \"<details><summary>Show translation</summary>\" : \"\"}<ul class=\"note-list\">${notes.map((note: string) => `<li class=\"note\">${note}</li>`).join(\"\")}</ul>${phrase === true ? \"</details>\" : \"\"}`;\nconst createEntry: (\n entry: string,\n notes?: string[],\n phrase?: true,\n glossSpecific?: true,\n) => string = (\n entry: string,\n notes?: string[],\n phrase?: true,\n glossSpecific?: true,\n) =>\n `<div class=\"entry${glossSpecific ? \" gloss-specific\" : \"\"}\">${entry}${notes && notes.length > 0 ? createNotes(notes, phrase) : \"\"}</div>`;\nconst noKanjiForms: string =\n '<span class=\"word word-kanjiform\">(no kanji forms)</span>';\n\n/**\n * Generates an array where each field holds an entry\u2019s info wrapped in HTML tags.\n * @param entry Any type of mapped entry ({@link Word}, {@link Kanji}, {@link Radical}, {@link Kana}, {@link Grammar})\n * @returns An array of fields, each corresponding to an Anki note type field\n */\nexport function generateAnkiNote(entry: Result): string[] {\n const fields: string[] = [];\n\n if (isWord(entry)) {\n const firstReading: string = createEntry(\n `<span class=\"word word-reading\">${entry.readings[0]!.reading}${entry.readings[0]!.audio !== undefined ? `<br>[sound:${entry.readings[0]!.audio}]` : \"\"}</span>`,\n entry.readings[0]!.notes,\n );\n const otherReadings: string | undefined =\n entry.readings.length > 1\n ? `<details><summary>Show other readings</summary>${entry.readings\n .slice(1)\n .map((readingEntry: Reading) =>\n createEntry(\n `<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`,\n readingEntry.notes,\n ),\n )\n .join(\"\")}</details>`\n : undefined;\n const readingsField: string = [firstReading, ...(otherReadings ?? [])].join(\n \"\",\n );\n\n const firstKanjiForm: string | undefined = entry.kanjiForms\n ? createEntry(\n `<span class=\"word word-kanjiform\"><ruby><rb>${entry.kanjiForms[0]!.kanjiForm}</rb><rt>${entry.readings[0]!.reading}</rt></ruby></span>`,\n entry.kanjiForms[0]!.notes,\n )\n : undefined;\n const otherKanjiForms: string | undefined =\n entry.kanjiForms && entry.kanjiForms.length > 1\n ? `<details><summary>Show other kanji forms</summary>${entry.kanjiForms\n .slice(1)\n .map((kanjiFormEntry: KanjiForm) => {\n const restrictedReading: Reading | undefined =\n entry.readings.find(\n (r: Reading) =>\n r.notes &&\n r.notes.includes(\n `Reading restricted to ${kanjiFormEntry.kanjiForm}`,\n ),\n );\n\n return `${createEntry(`<span class=\"word word-kanjiform\">${restrictedReading ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${restrictedReading ? `</rb><rt>${restrictedReading.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}`;\n })\n .join(\"\")}</details>`\n : undefined;\n\n const kanjiFormsField: string | undefined = firstKanjiForm\n ? [firstKanjiForm, ...(otherKanjiForms ?? [])].join(\"\")\n : undefined;\n\n const firstThreeTranslations: string = entry.translations\n .slice(0, 3)\n .map(\n (translationEntry: Translation, index: number) =>\n `${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes, undefined, entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? true : undefined)}`,\n )\n .join(\"\");\n\n const otherTranslations: string | undefined =\n entry.translations.length > 3\n ? `<details><summary>Show other translations</summary>${entry.translations\n .map((translationEntry: Translation, index: number) =>\n index > 2\n ? `${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes, undefined, entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? true : undefined)}`\n : \"null\",\n )\n .filter((translation: string) => translation !== \"null\")\n .join(\"\")}</details>`\n : undefined;\n\n const translationsField: string = [\n firstThreeTranslations,\n ...(otherTranslations ?? []),\n ].join(\"\");\n\n fields.push(\n ...(entry.kanjiForms && kanjiFormsField && !entry.usuallyInKana\n ? [kanjiFormsField, readingsField]\n : [\n readingsField,\n entry.kanjiForms && kanjiFormsField\n ? kanjiFormsField\n : noKanjiForms,\n ]),\n translationsField,\n entry.phrases\n ? entry.phrases\n .map((phraseEntry: Phrase, index: number) =>\n createEntry(\n `<span class=\"word word-phrase\"><span class=\"word word-phrase-original\">${phraseEntry.originalPhrase}</span><span class=\"word word-phrase-furigana\">${phraseEntry.phrase}</span></span>`,\n [phraseEntry.translation],\n true,\n entry.translations.some(\n (_translation: Translation, index2: number) =>\n index === index2 &&\n phraseEntry.glossNumber &&\n phraseEntry.glossNumber.wordId === entry.id &&\n phraseEntry.glossNumber.glossNumber === index2 + 1,\n )\n ? true\n : undefined,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-phrase\">(no phrases) (Search on dictionaries!)</span>',\n entry.definitions\n ? entry.definitions\n .map((definitionEntry: Definition) =>\n createEntry(\n `<span class=\"word word-definition${definitionEntry.mayNotBeAccurate === true ? \" mnba\" : \"\"}\"><span class=\"word word-definition-original\">${definitionEntry.definition}</span><span class=\"word word-definition-furigana\">${definitionEntry.furigana ?? definitionEntry.definition}</span></span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-definition\">(no definitions)</span>',\n entry.kanji\n ? entry.kanji\n .map((kanjiEntry: Kanji) =>\n createEntry(\n `<span class=\"word word-kanji\">${kanjiEntry.kanji}${kanjiEntry.meanings === undefined ? \" (no meanings)\" : \"\"}</span>`,\n kanjiEntry.meanings,\n ),\n )\n .join(\"\")\n : '<span class=\"word word-kanji\">(no kanji)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n }\n\n if (isRadical(entry))\n fields.push(\n createEntry(\n `<span class=\"radical radical-character\">${entry.radical}</span>`,\n ),\n createEntry(\n `<span class=\"radical radical-reading\">${entry.reading}</span>`,\n ),\n entry.meanings\n .map((meaningEntry: string) =>\n createEntry(\n `<span class=\"radical radical-meaning\">${meaningEntry}</span>`,\n ),\n )\n .join(\"\"),\n entry.mnemonic\n ? createEntry(\n `<span class=\"radical radical-mnemonic\">${entry.mnemonic}</span>`,\n )\n : '<span class=\"radical radical-mnemonic\">(no mnemonic) (Come up with your own!)</span>',\n entry.kanji\n ? entry.kanji\n .map((kanji: Kanji) =>\n createEntry(\n `<span class=\"radical radical-kanji\">${kanji.kanji}${kanji.meanings && kanji.meanings.length === 1 ? ` - ${kanji.meanings[0]}` : \"\"}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"radical radical-kanji\">(no \"used-in\" kanji)</span>',\n entry.strokes\n ? createEntry(\n `<span class=\"radical radical-strokes\">${entry.strokes}<br>${entry.svg ? `<img class=\"radical radical-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.radical} stroke order SVG\">` : \"(no stroke order SVG available)\"}</span>`,\n )\n : '<span class=\"radical radical-strokes\">(no stroke number)</span>',\n entry.sources\n ? `<span class=\"radical radical-source\">${entry.sources.map((source: string, index: number) => `<a href=\"${source}\" target=\"_blank\">Source ${index + 1}</a>`).join(\"<br>\")}</span>`\n : '<span class=\"radical radical-source\">(no sources)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isKanji(entry))\n fields.push(\n createEntry(`<span class=\"kanji kanji-character\">${entry.kanji}</span>`),\n entry.meanings\n ? entry.meanings\n .map((meaningEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-meaning\">${meaningEntry}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-meaning\">(no meanings)</span>',\n entry.onyomi\n ? entry.onyomi\n .map((onyomiEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-onyomi\">${onyomiEntry}</span>`,\n ),\n )\n .join(\"\")\n : `<span class=\"kanji kanji-onyomi\">(no onyomi) ${entry.kokuji === true ? \"(kokuji)\" : \"\"}</span`,\n entry.kunyomi\n ? entry.kunyomi\n .map((kunyomiEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-kunyomi\">${kunyomiEntry}</span>`,\n ),\n )\n .join(\"\")\n : `<span class=\"kanji kanji-kunyomi\">(no kunyomi) ${entry.kokuji === true ? \"(kokuji)\" : \"\"}</span>`,\n entry.nanori\n ? entry.nanori\n .map((nanoriEntry: string) =>\n createEntry(\n `<span class=\"kanji kanji-nanori\">${nanoriEntry}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-nanori\">(no nanori)</span>',\n entry.components\n ? entry.components\n .map((componentEntry: KanjiComponent) =>\n createEntry(\n `<span class=\"kanji kanji-component\">${componentEntry.component}${componentEntry.meaning ? ` - ${componentEntry.meaning}` : \"\"}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-component\">(no components)</span>',\n entry.mnemonic\n ? createEntry(\n `<span class=\"kanji kanji-mnemonic\">${entry.mnemonic}</span>`,\n )\n : '<span class=\"kanji kanji-mnemonic\">(no mnemonic) (Come up with your own!)</span>',\n entry.words\n ? entry.words\n .map((word: Word) =>\n createEntry(\n `<span class=\"kanji kanji-words\">${word.kanjiForms![0]!.kanjiForm} / ${word.readings[0]!.reading} - ${word.translations[0]!.translation}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"kanji kanji-words\">(no words) (Search on dictionaries!)</span>',\n entry.strokes\n ? createEntry(\n `<span class=\"kanji kanji-strokes\">${entry.strokes}<br>${entry.svg ? `<img class=\"kanji kanji-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.kanji} stroke order SVG\">` : \"(no stroke order SVG available)\"}</span>`,\n )\n : '<span class=\"kanji kanji-strokes\">(no stroke number)</span>',\n entry.source\n ? `<span class=\"kanji kanji-source\"><a href=\"${entry.source}\" target=\"_blank\">Source</a></span>`\n : '<span class=\"kanji kanji-source\">(no components/mnemonic source)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isKana(entry))\n fields.push(\n createEntry(`<span class=\"kana kana-character\">${entry.kana}</span>`),\n createEntry(\n `<span class=\"kana kana-reading\">${entry.reading}${entry.audio !== undefined ? `<br>[sound:${entry.audio}]` : \"\"}</span>`,\n ),\n entry.svg\n ? createEntry(\n `<img class=\"kana kana-stroke-order\" src=\"${entry.svg}\" alt=\"${entry.kana} stroke order SVG\">`,\n )\n : \"(no stroke order SVG available)\",\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n if (isGrammar(entry))\n fields.push(\n createEntry(`<span class=\"grammar grammar-point\">${entry.point}</span>`),\n entry.readings\n ? entry.readings\n .map((readingEntry: Reading) =>\n createEntry(\n `<span class=\"grammar grammar-reading\">${readingEntry.reading}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-reading\">(no additional readings)</span>',\n createEntry(\n `<span class=\"grammar grammar-meaning\">${entry.meaning.meaning}${entry.meaning.example && entry.meaning.example.length > 0 ? `<br><span class=\"grammar grammar-meaning-example\">${entry.meaning.example}</span>` : \"\"}</span>`,\n ),\n entry.usages\n ? entry.usages\n .map((usage) =>\n createEntry(\n `<span class=\"grammar grammar-usage\">${usage}</span>`,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-usage\">(no usages)</span>',\n entry.phrases\n ? entry.phrases\n .map((phraseEntry: Phrase) =>\n createEntry(\n `<span class=\"grammar grammar-phrase\"><span class=\"grammar grammar-phrase-original\">${phraseEntry.originalPhrase}</span><span class=\"grammar grammar-phrase-furigana\">${phraseEntry.phrase}</span></span>`,\n [phraseEntry.translation],\n true,\n ),\n )\n .join(\"\")\n : '<span class=\"grammar grammar-phrase\">(no phrases) (Search on dictionaries!)</span>',\n entry.source\n ? `<span class=\"grammar grammar-source\"><a href=\"${entry.source}\" target=\"_blank\">Source</a></span>`\n : '<span class=\"grammar grammar-source\">(no source)</span>',\n ...(entry.tags && entry.tags.length > 0\n ? [\n entry.tags\n .map((tag: string) =>\n tag.trim().toLowerCase().replaceAll(\" \", \"::\"),\n )\n .join(\" \"),\n ]\n : []),\n );\n\n return fields.map((field: string) => field.replaceAll(\"\\n\", \"<br>\"));\n}\n\n/**\n * Generates an Anki notes file with each entry\u2019s info organized into fields, either in HTML or plain text.\n * @param list An array containing any type of transformed entries ({@link Word}, {@link Kanji}, {@link Radical}, {@link Kana}, {@link Grammar})\n * @param defaultNoteInfo An object with options regarding default values of some note information\n * @returns The resulting Anki notes file's content\n */\nexport function generateAnkiNotesFile(\n list: readonly Result[],\n defaultNoteInfo?: DefaultNoteInfo | undefined,\n): string {\n const headers: string[] = [noteHeaderKeys.separator, noteHeaderKeys.html];\n let ankiNotes: string = \"\";\n\n if (list.length > 0) {\n if (defaultNoteInfo === undefined) defaultNoteInfo = {};\n\n const infoValues: any[] = Object.values(defaultNoteInfo);\n\n let invalidList: boolean = false;\n\n const firstEntry: Result = list[0]!;\n const firstEntryInfo: {\n readonly guid: \"string\" | \"undefined\";\n readonly noteType: \"string\" | \"undefined\";\n readonly deckPath: \"string\" | \"undefined\";\n } = {\n guid: typeof firstEntry.noteID as \"string\" | \"undefined\",\n noteType: typeof firstEntry.noteTypeName as \"string\" | \"undefined\",\n deckPath: typeof firstEntry.deckPath as \"string\" | \"undefined\",\n };\n\n if (\n infoValues.length === 0 ||\n infoValues.some((value: any) => value === true || value === undefined)\n )\n for (const res of list)\n if (\n (defaultNoteInfo.guid === true && res.noteID === undefined) ||\n (defaultNoteInfo.noteType === true &&\n res.noteTypeName === undefined) ||\n (defaultNoteInfo.deckPath === true && res.deckPath === undefined) ||\n (defaultNoteInfo.guid === undefined &&\n typeof res.noteID !== firstEntryInfo.guid) ||\n (defaultNoteInfo.noteType === undefined &&\n typeof res.noteTypeName !== firstEntryInfo.noteType) ||\n (defaultNoteInfo.deckPath === undefined &&\n typeof res.deckPath !== firstEntryInfo.deckPath)\n ) {\n invalidList = true;\n break;\n }\n\n if (invalidList) throw new Error(\"Invalid result list\");\n\n const hasHeader: {\n guid: boolean;\n noteType: boolean;\n deckPath: boolean;\n tags: boolean;\n } = { guid: false, noteType: false, deckPath: false, tags: false };\n let headerCount: 0 | 1 | 2 | 3 = 0;\n\n ankiNotes = list\n .filter((result: Result) => result.doNotCreateNote === undefined)\n .map((result: Result) => {\n if (\n typeof defaultNoteInfo!.guid === \"string\" &&\n result.noteID === undefined\n ) {\n if (isWord(result) && result.id) result.noteID = result.id;\n if (isKanji(result)) result.noteID = result.kanji;\n if (isRadical(result)) result.noteID = result.radical;\n if (isKana(result)) result.noteID = result.kana;\n if (isGrammar(result) && result.id) result.noteID = result.id;\n }\n\n if (\n typeof defaultNoteInfo!.noteType === \"string\" &&\n result.noteTypeName === undefined\n )\n result.noteTypeName = defaultNoteInfo!.noteType;\n if (\n typeof defaultNoteInfo!.deckPath === \"string\" &&\n result.deckPath === undefined\n )\n result.deckPath = defaultNoteInfo!.deckPath;\n\n if (!hasHeader.guid && result.noteID) {\n headers.push(`${noteHeaderKeys.guid}${++headerCount}`);\n hasHeader.guid = true;\n }\n if (!hasHeader.noteType && result.noteTypeName) {\n headers.push(`${noteHeaderKeys.notetype}${++headerCount}`);\n hasHeader.noteType = true;\n }\n if (!hasHeader.deckPath && result.deckPath) {\n headers.push(`${noteHeaderKeys.deck}${++headerCount}`);\n hasHeader.deckPath = true;\n }\n\n const note: string[] = generateAnkiNote(result);\n\n if (!hasHeader.tags) {\n headers.push(`${noteHeaderKeys.tags}${note.length + headerCount}`);\n hasHeader.tags = true;\n }\n\n return `${result.noteID ? `${result.noteID}\\t` : \"\"}${result.noteTypeName ? `${result.noteTypeName}\\t` : \"\"}${result.deckPath ? `${result.deckPath}\\t` : \"\"}${note.join(\"\\t\")}`;\n })\n .join(\"\\n\")\n .trim();\n }\n\n return `${headers.join(\"\\n\")}\\n\\n${ankiNotes}`;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,UAAyB;AAAA,EACpC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO,WAAC,oBAAgB,GAAC;AAAA,EACzB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YACE;AAAA,EACF,mBAAmB;AACrB;AAEO,IAAM,iBAAiC;AAAA,EAC5C,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AACR;AAEO,IAAM,mBAAgC,oBAAI,IAAY;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,UAGT,oBAAI,IAGN;AAAA,EACA,CAAC,aAAa,CAAC,sBAAsB,oBAAoB,CAAC;AAAA,EAC1D,CAAC,gBAAgB,CAAC,yBAAyB,4BAAuB,CAAC;AAAA,EACnE,CAAC,cAAc,CAAC,uBAAuB,qBAAqB,CAAC;AAAA,EAC7D,CAAC,cAAc,CAAC,uBAAuB,yBAAoB,CAAC;AAAA,EAC5D,CAAC,aAAa,CAAC,sBAAsB,yBAAoB,CAAC;AAAA,EAC1D,CAAC,gBAAgB,CAAC,yBAAyB,+BAAqB,CAAC;AAAA,EACjE,CAAC,cAAc,CAAC,uBAAuB,qBAAqB,CAAC;AAAA,EAC7D,CAAC,gBAAgB,CAAC,yBAAyB,+BAAqB,CAAC;AAAA,EACjE,CAAC,aAAa,CAAC,sBAAsB,yBAAoB,CAAC;AAAA,EAC1D,CAAC,eAAe,CAAC,wBAAwB,0BAAqB,CAAC;AAAA,EAC/D,CAAC,YAAY,CAAC,qBAAqB,mBAAmB,CAAC;AAAA,EACvD,CAAC,eAAe,CAAC,wBAAwB,sBAAsB,CAAC;AAAA,EAChE,CAAC,iBAAiB,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,EACtD,CAAC,mBAAmB,CAAC,oBAAoB,kBAAkB,CAAC;AAAA,EAC5D,CAAC,OAAO,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EAC9C,CAAC,QAAQ,CAAC,eAAe,aAAa,CAAC;AAAA,EACvC,CAAC,MAAM,CAAC,aAAa,WAAW,CAAC;AAAA,EACjC,CAAC,yBAAyB,CAAC,gBAAgB,oBAAe,oBAAK,CAAC;AAAA,EAChE,CAAC,oBAAoB,CAAC,mBAAmB,0BAAgB,0BAAM,CAAC;AAAA,EAChE;AAAA,IACE;AAAA,IACA,CAAC,eAAe,eAAe,CAAC,gBAAM,0BAAM,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,uBAAuB,uBAAuB,oBAAK;AAAA,EACtD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oCAAoC,kCAAkC;AAAA,EACzE;AAAA,EACA,CAAC,WAAW,CAAC,WAAW,WAAW,CAAC,sBAAO,gCAAO,CAAC,CAAC;AAAA,EACpD,CAAC,oBAAoB,CAAC,UAAU,UAAU,cAAI,CAAC;AAAA,EAC/C;AAAA,IACE;AAAA,IACA,CAAC,aAAa,uCAAkC,cAAI;AAAA,EACtD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,2BAA2B,8BAA8B;AAAA,EAC5D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,aAAa,kCAA6B,CAAC,gBAAM,0BAAM,CAAC;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,eAAe,sCAA4B,cAAI;AAAA,EAClD;AAAA,EACA,CAAC,yBAAyB,CAAC,aAAa,+BAAqB,cAAI,CAAC;AAAA,EAClE,CAAC,6BAA6B,CAAC,aAAa,6BAAmB,cAAI,CAAC;AAAA,EACpE,CAAC,gBAAgB,CAAC,gBAAgB,gBAAgB,cAAI,CAAC;AAAA,EACvD;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,mCAA8B,cAAI;AAAA,EACvD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oBAAoB,mCAA8B,cAAI;AAAA,EACzD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,mCAA8B,cAAI;AAAA,EACxD;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,CAAC,6BAA6B,CAAC,aAAa,+BAAqB,cAAI,CAAC;AAAA,EACtE,CAAC,mBAAmB,CAAC,mBAAmB,mBAAmB,cAAI,CAAC;AAAA,EAChE,CAAC,qBAAqB,CAAC,qBAAqB,qBAAqB,cAAI,CAAC;AAAA,EACtE,CAAC,kBAAkB,CAAC,kBAAkB,kBAAkB,CAAC,gBAAM,oBAAK,CAAC,CAAC;AAAA,EACtE;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,uBAAuB,CAAC,gBAAM,oBAAK,CAAC;AAAA,EAC/D;AAAA,EACA,CAAC,aAAa,CAAC,aAAa,aAAa,CAAC,gBAAM,oBAAK,CAAC,CAAC;AAAA,EACvD,CAAC,gBAAgB,CAAC,eAAe,cAAc,CAAC;AAAA,EAChD;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,mCAA8B;AAAA,EACnD;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oBAAoB,0CAAgC;AAAA,EACvD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oBAAoB,0CAAgC;AAAA,EACvD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oBAAoB,0CAAgC;AAAA,EACvD;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,4BAA4B,oDAA0C;AAAA,EACzE;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,mCAA8B;AAAA,EAC1D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,8BAA8B;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,8BAA8B;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,mCAA8B;AAAA,EAC1D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,+BAA+B,+BAA+B;AAAA,EACjE;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,mCAA8B;AAAA,EAC1D;AAAA,EACA,CAAC,wBAAwB,CAAC,yBAAyB,sBAAsB,CAAC;AAAA,EAC1E,CAAC,sBAAsB,CAAC,uBAAuB,oBAAoB,CAAC;AAAA,EACpE,CAAC,kBAAkB,CAAC,uBAAuB,oBAAoB,CAAC;AAAA,EAChE,CAAC,mBAAmB,CAAC,uBAAuB,oBAAoB,CAAC;AAAA,EACjE;AAAA,IACE;AAAA,IACA,CAAC,uBAAuB,oBAAoB;AAAA,EAC9C;AAAA,EACA,CAAC,6BAA6B,CAAC,uBAAuB,oBAAoB,CAAC;AAAA,EAC3E,CAAC,sBAAsB,CAAC,uBAAuB,oBAAoB,CAAC;AAAA,EACpE;AAAA,IACE;AAAA,IACA,CAAC,6BAA6B,0BAA0B;AAAA,EAC1D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,mCAA8B;AAAA,EACnD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,gCAAgC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,gCAAgC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,gCAAgC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,yBAAyB;AAAA,EACpD;AAAA,EACA,CAAC,uBAAuB,CAAC,qBAAqB,qBAAqB,CAAC;AAAA,EACpE,CAAC,gBAAgB,CAAC,eAAe,cAAc,CAAC;AAAA,EAChD,CAAC,UAAU,CAAC,UAAU,UAAU,CAAC,sBAAO,oBAAK,CAAC,CAAC;AAAA,EAC/C;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,gBAAM,4BAAQ,sBAAO,oBAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,CAAC,UAAU,CAAC,UAAU,UAAU,CAAC,sBAAO,oBAAK,CAAC,CAAC;AAAA,EAC/C;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,gBAAM,4BAAQ,sBAAO,oBAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,CAAC,WAAW,CAAC,WAAW,WAAW,oBAAK,CAAC;AAAA,EACzC,CAAC,WAAW,CAAC,WAAW,WAAW,cAAI,CAAC;AAAA,EACxC,CAAC,YAAY,CAAC,YAAY,YAAY,CAAC,gBAAM,0BAAM,CAAC,CAAC;AAAA,EACrD,CAAC,eAAe,CAAC,eAAe,eAAe,oBAAK,CAAC;AAAA,EACrD;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,gBAAM,gBAAM,sBAAO,sBAAO,oBAAK;AAAA,IAClC;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,gBAAM,gBAAM,sBAAO,sBAAO,oBAAK;AAAA,IAClC;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,gBAAgB,gBAAgB,CAAC,sBAAO,oBAAK,CAAC;AAAA,EACjD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,WAAW,WAAW,CAAC,gBAAM,gBAAM,sBAAO,sBAAO,0BAAM,CAAC;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,cAAc,cAAc,CAAC,gBAAM,gBAAM,sBAAO,oBAAK,CAAC;AAAA,EACzD;AAAA,EACA,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC;AAAA,EACrC,CAAC,iBAAiB,CAAC,YAAY,UAAU,CAAC;AAAA,EAC1C,CAAC,cAAc,CAAC,SAAS,OAAO,CAAC;AAAA,EACjC,CAAC,QAAQ,CAAC,QAAQ,MAAM,CAAC;AAAA,EACzB,CAAC,iBAAiB,CAAC,iBAAiB,eAAe,CAAC;AAAA,EACpD,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B,CAAC,kBAAkB,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,EACvD,CAAC,0BAA0B,CAAC,oBAAoB,qBAAqB,CAAC;AAAA,EACtE,CAAC,6BAA6B,CAAC,UAAU,QAAQ,CAAC;AAAA,EAClD,CAAC,cAAc,CAAC,cAAc,YAAY,CAAC;AAAA,EAC3C,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC;AAAA,EACxC,CAAC,eAAe,CAAC,eAAe,aAAa,CAAC;AAAA,EAC9C,CAAC,gBAAgB,CAAC,gBAAgB,gBAAgB,CAAC,gBAAM,oBAAK,CAAC,CAAC;AAAA,EAChE,CAAC,yBAAyB,CAAC,iBAAiB,eAAe,CAAC;AAAA,EAC5D,CAAC,2BAA2B,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EAClE;AAAA,IACE;AAAA,IACA,CAAC,YAAY,6CAA6C;AAAA,EAC5D;AAAA,EACA,CAAC,8BAA8B,CAAC,YAAY,4BAA4B,CAAC;AAAA,EACzE,CAAC,8BAA8B,CAAC,YAAY,4BAA4B,CAAC;AAAA,EACzE,CAAC,qBAAqB,CAAC,qBAAqB,mBAAmB,CAAC;AAAA,EAChE;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,wBAAwB;AAAA,EACrD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,wBAAwB;AAAA,EACrD;AAAA,EACA,CAAC,uBAAuB,CAAC,qBAAqB,mBAAmB,CAAC;AAAA,EAClE;AAAA,IACE;AAAA,IACA,CAAC,sBAAsB,yBAAyB;AAAA,EAClD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,kCAAkC;AAAA,EACxD;AAAA,EACA,CAAC,4BAA4B,CAAC,SAAS,0BAA0B,CAAC;AAAA,EAClE,CAAC,0BAA0B,CAAC,mBAAmB,wBAAwB,CAAC;AAAA,EACxE,CAAC,mBAAmB,CAAC,wBAAwB,sBAAsB,CAAC;AAAA,EACpE;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,2BAA2B;AAAA,EACtD;AAAA,EACA,CAAC,wBAAwB,CAAC,mBAAmB,sBAAsB,CAAC;AAAA,EACpE;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,sBAAsB;AAAA,EAC5C;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,8BAA8B,kCAAkC;AAAA,EACnE;AAAA,EACA,CAAC,mBAAmB,CAAC,yBAAyB,sBAAsB,CAAC;AAAA,EACrE,CAAC,qBAAqB,CAAC,yBAAyB,sBAAsB,CAAC;AAAA,EACvE,CAAC,oBAAoB,CAAC,eAAe,kBAAkB,CAAC;AAAA,EACxD,CAAC,wBAAwB,CAAC,wBAAwB,sBAAsB,CAAC;AAAA,EACzE,CAAC,iBAAiB,CAAC,YAAY,eAAe,CAAC;AAAA,EAC/C,CAAC,uBAAuB,CAAC,WAAW,qBAAqB,CAAC;AAAA,EAC1D,CAAC,aAAa,CAAC,QAAQ,WAAW,CAAC;AAAA,EACnC,CAAC,kBAAkB,CAAC,aAAa,gBAAgB,CAAC;AAAA,EAClD,CAAC,mBAAmB,CAAC,cAAc,iBAAiB,CAAC;AAAA,EACrD,CAAC,WAAW,CAAC,WAAW,SAAS,CAAC;AAAA,EAClC,CAAC,qBAAqB,CAAC,gBAAgB,mBAAmB,CAAC;AAAA,EAC3D,CAAC,2BAA2B,CAAC,eAAe,yBAAyB,CAAC;AAAA,EACtE,CAAC,eAAe,CAAC,UAAU,aAAa,CAAC;AAAA,EACzC,CAAC,aAAa,CAAC,QAAQ,WAAW,CAAC;AAAA,EACnC,CAAC,kBAAkB,CAAC,aAAa,gBAAgB,CAAC;AAAA,EAClD,CAAC,iBAAiB,CAAC,YAAY,eAAe,CAAC;AAAA,EAC/C,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA,EAC5C,CAAC,cAAc,CAAC,SAAS,YAAY,CAAC;AAAA,EACtC,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B,CAAC,iBAAiB,CAAC,YAAY,eAAe,CAAC;AAAA,EAC/C,CAAC,SAAS,CAAC,SAAS,YAAY,CAAC;AAAA,EACjC,CAAC,cAAc,CAAC,SAAS,YAAY,CAAC;AAAA,EACtC,CAAC,WAAW,CAAC,WAAW,cAAc,CAAC;AAAA,EACvC,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA,EAC5C,CAAC,eAAe,CAAC,eAAe,kBAAkB,CAAC;AAAA,EACnD,CAAC,eAAe,CAAC,UAAU,aAAa,CAAC;AAAA,EACzC,CAAC,gBAAgB,CAAC,gBAAgB,cAAc,CAAC;AAAA,EACjD,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA,EAC5C,CAAC,kBAAkB,CAAC,aAAa,gBAAgB,CAAC;AAAA,EAClD,CAAC,iBAAiB,CAAC,YAAY,eAAe,CAAC;AAAA,EAC/C,CAAC,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAChD,CAAC,mBAAmB,CAAC,cAAc,iBAAiB,CAAC;AAAA,EACrD,CAAC,YAAY,CAAC,YAAY,eAAe,CAAC;AAAA,EAC1C,CAAC,oBAAoB,CAAC,eAAe,kBAAkB,CAAC;AAAA,EACxD,CAAC,qBAAqB,CAAC,gBAAgB,mBAAmB,CAAC;AAAA,EAC3D,CAAC,oBAAoB,CAAC,eAAe,kBAAkB,CAAC;AAAA,EACxD,CAAC,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAChD,CAAC,YAAY,CAAC,OAAO,UAAU,CAAC;AAAA,EAChC,CAAC,iBAAiB,CAAC,YAAY,eAAe,CAAC;AAAA,EAC/C,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA,EAC5C,CAAC,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAChD,CAAC,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAChD,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA,EAC5C,CAAC,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAChD,CAAC,YAAY,CAAC,YAAY,eAAe,CAAC;AAAA,EAC1C,CAAC,aAAa,CAAC,MAAM,gBAAgB,CAAC;AAAA,EACtC,CAAC,QAAQ,CAAC,QAAQ,WAAW,CAAC;AAAA,EAC9B,CAAC,WAAW,CAAC,WAAW,cAAc,CAAC;AAAA,EACvC,CAAC,eAAe,CAAC,eAAe,uBAAuB,CAAC;AAAA,EACxD,CAAC,gBAAgB,CAAC,gBAAgB,wBAAwB,CAAC;AAAA,EAC3D,CAAC,sBAAsB,CAAC,mBAAmB,iCAA4B,CAAC;AAAA,EACxE,CAAC,YAAY,CAAC,YAAY,kBAAkB,CAAC;AAAA,EAC7C;AAAA,IACE;AAAA,IACA,CAAC,UAAU,qCAAqC;AAAA,EAClD;AAAA,EACA,CAAC,WAAW,CAAC,WAAW,iBAAiB,CAAC;AAAA,EAC1C;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,iCAAiC;AAAA,EACvD;AAAA,EACA,CAAC,yBAAyB,CAAC,kBAAkB,uBAAuB,CAAC;AAAA,EACrE,CAAC,yBAAyB,CAAC,yBAAyB,uBAAuB,CAAC;AAAA,EAC5E,CAAC,gBAAgB,CAAC,gBAAgB,4BAAuB,CAAC;AAAA,EAC1D,CAAC,yBAAyB,CAAC,yBAAyB,uBAAuB,CAAC;AAAA,EAC5E;AAAA,IACE;AAAA,IACA,CAAC,yBAAyB,uBAAuB;AAAA,EACnD;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,gCAAgC;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,gCAAgC;AAAA,EAC3D;AAAA,EACA,CAAC,0BAA0B,CAAC,mBAAmB,wBAAwB,CAAC;AAAA,EACxE;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,wBAAwB;AAAA,EACrD;AAAA,EACA,CAAC,2BAA2B,CAAC,YAAY,UAAU,CAAC;AAAA,EACpD,CAAC,WAAW,CAAC,YAAY,UAAU,CAAC;AAAA,EACpC,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC;AAAA,EACxC,CAAC,cAAc,CAAC,iBAAiB,eAAe,CAAC;AAAA,EACjD,CAAC,gBAAgB,CAAC,gBAAgB,cAAc,CAAC;AAAA,EACjD,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC;AAAA,EACrC,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC;AAAA,EACrC,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B,CAAC,kCAAkC,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EACzE,CAAC,WAAW,CAAC,WAAW,SAAS,CAAC;AAAA,EAClC;AAAA,IACE;AAAA,IACA,CAAC,0BAA0B,8CAA8C;AAAA,EAC3E;AAAA,EACA,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B,CAAC,UAAU,CAAC,UAAU,QAAQ,CAAC;AAAA,EAC/B,CAAC,eAAe,CAAC,eAAe,aAAa,CAAC;AAAA,EAC9C,CAAC,gCAAgC,CAAC,iBAAiB,eAAe,CAAC;AAAA,EACnE,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC;AAAA,EACxC,CAAC,UAAU,CAAC,UAAU,QAAQ,CAAC;AAAA,EAC/B,CAAC,qBAAqB,CAAC,qBAAqB,mBAAmB,CAAC;AAAA,EAChE,CAAC,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EAC5B;AAAA,IACE;AAAA,IACA,CAAC,kCAAkC,kCAAkC;AAAA,EACvE;AAAA,EACA,CAAC,cAAc,CAAC,cAAc,YAAY,CAAC;AAAA,EAC3C,CAAC,iBAAiB,CAAC,YAAY,UAAU,CAAC;AAAA,EAC1C,CAAC,gBAAgB,CAAC,gBAAgB,cAAc,CAAC;AAAA,EACjD,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC;AAAA,EACxC,CAAC,aAAa,CAAC,QAAQ,MAAM,CAAC;AAAA,EAC9B,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC;AAAA,EACrC,CAAC,WAAW,CAAC,WAAW,SAAS,CAAC;AAAA,EAClC,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC;AAAA,EACxC,CAAC,mBAAmB,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EAC1D,CAAC,qBAAqB,CAAC,qBAAqB,mBAAmB,CAAC;AAAA,EAChE;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,kCAAkC;AAAA,EACxD;AAAA,EACA,CAAC,qBAAqB,CAAC,gBAAgB,mBAAmB,CAAC;AAAA,EAC3D;AAAA,IACE;AAAA,IACA,CAAC,eAAe,2CAA2C;AAAA,EAC7D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,sBAAsB;AAAA,EAC5C;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,qBAAqB,sDAA6B,oBAAK;AAAA,EAC1D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,mBAAmB,oCAA0B;AAAA,EAChD;AAAA,EACA,CAAC,4BAA4B,CAAC,iBAAiB,8BAAyB,CAAC;AAAA,EACzE;AAAA,IACE;AAAA,IACA,CAAC,gBAAgB,oBAAe,0BAAM;AAAA,EACxC;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,oBAAoB,oCAA0B;AAAA,EACjD;AAAA,EACA,CAAC,UAAU,CAAC,UAAU,QAAQ,CAAC;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,gBAAM,gBAAM,sBAAO,sBAAO,oBAAK;AAAA,IAClC;AAAA,EACF;AAAA,EACA,CAAC,sCAAsC,CAAC,kBAAkB,gBAAgB,CAAC;AAAA,EAC3E,CAAC,eAAe,CAAC,eAAe,aAAa,CAAC;AAAA,EAC9C,CAAC,iCAAiC,CAAC,iBAAiB,eAAe,CAAC;AAAA,EACpE,CAAC,gBAAgB,CAAC,gBAAgB,cAAc,CAAC;AAAA,EACjD,CAAC,oBAAoB,CAAC,oBAAoB,oBAAoB,cAAI,CAAC;AAAA,EACnE;AAAA,IACE;AAAA,IACA,CAAC,wBAAwB,mDAAoC,cAAI;AAAA,EACnE;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,iBAAiB,6CAAwC,cAAI;AAAA,EAChE;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;A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",
|
|
6
|
+
"names": ["libxml", "xml", "readings", "kanjiForms", "iconv", "entryParts", "entryList", "validForms", "word", "_a", "kanji", "reading"]
|
|
7
7
|
}
|