henkan 0.7.0 → 0.9.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/README.md +4 -2
- package/dist/index.cjs.js +8 -156
- package/dist/index.cjs.js.map +3 -3
- package/dist/index.mjs +10 -152
- package/dist/index.mjs.map +2 -2
- package/dist/types/constants.d.ts +0 -3
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/types.d.ts +0 -6
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils.d.ts +7 -17
- package/dist/types/utils.d.ts.map +1 -1
- package/docs/api/README.md +0 -1
- package/docs/api/functions/capitalizeString.md +1 -1
- package/docs/api/functions/convertJMdict.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/generateAnkiNote.md +1 -1
- package/docs/api/functions/generateAnkiNotesFile.md +1 -1
- package/docs/api/functions/getKanji.md +1 -1
- package/docs/api/functions/getKanjiExtended.md +1 -1
- package/docs/api/functions/getWord.md +1 -1
- package/docs/api/functions/isStringArray.md +1 -1
- package/docs/api/functions/isValidArray.md +1 -1
- package/docs/api/functions/isValidArrayWithFirstElement.md +1 -1
- package/docs/api/functions/shuffleArray.md +1 -1
- package/docs/api/functions/synthesizeSpeech.md +13 -25
- 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 +11 -11
- package/docs/api/interfaces/DictRadical.md +4 -4
- package/docs/api/interfaces/DictReading.md +5 -5
- package/docs/api/interfaces/DictWord.md +8 -8
- package/docs/api/interfaces/ExamplePart.md +7 -7
- package/docs/api/interfaces/GlossSpecificNumber.md +3 -3
- package/docs/api/interfaces/Grammar.md +15 -15
- package/docs/api/interfaces/GrammarMeaning.md +3 -3
- package/docs/api/interfaces/Kana.md +11 -11
- package/docs/api/interfaces/Kanji.md +22 -22
- 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/Phrase.md +5 -5
- package/docs/api/interfaces/Radical.md +16 -16
- package/docs/api/interfaces/Reading.md +5 -5
- 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 -20
- package/docs/api/interfaces/Word.md +14 -14
- package/docs/api/type-aliases/Dict.md +1 -1
- package/docs/api/type-aliases/DictName.md +1 -1
- package/docs/api/type-aliases/EntryType.md +1 -1
- package/docs/api/type-aliases/JLPT.md +1 -1
- package/docs/api/type-aliases/Result.md +1 -1
- package/package.json +2 -2
- package/docs/api/functions/makeSSML.md +0 -33
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 { 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 scriptSplit:\n /([\\p{sc=Han}]+|[\\p{sc=Hiragana}]+|[\\p{sc=Katakana}]+|[^\\p{sc=Han}\\p{sc=Hiragana}\\p{sc=Katakana}]+)/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 romajiMap: Record<string, string> = {\n A: \"\u30A8\u30FC\",\n B: \"\u30D3\u30FC\",\n C: \"\u30B7\u30FC\",\n D: \"\u30C7\u30A3\u30FC\",\n E: \"\u30A4\u30FC\",\n F: \"\u30A8\u30D5\",\n G: \"\u30B8\u30FC\",\n H: \"\u30A8\u30A4\u30C1\",\n I: \"\u30A2\u30A4\",\n J: \"\u30B8\u30A7\u30FC\",\n K: \"\u30B1\u30FC\",\n L: \"\u30A8\u30EB\",\n M: \"\u30A8\u30E0\",\n N: \"\u30A8\u30CC\",\n O: \"\u30AA\u30FC\",\n P: \"\u30D4\u30FC\",\n Q: \"\u30AD\u30E5\u30FC\",\n R: \"\u30A2\u30FC\u30EB\",\n S: \"\u30A8\u30B9\",\n T: \"\u30C6\u30A3\u30FC\",\n U: \"\u30E6\u30FC\",\n V: \"\u30D6\u30A4\",\n W: \"\u30C0\u30D6\u30EA\u30E5\u30FC\",\n X: \"\u30A8\u30C3\u30AF\u30B9\",\n Y: \"\u30EF\u30A4\",\n Z: \"\u30BC\u30C3\u30C8\",\n};\n\nexport const numberMap: Record<string, string> = {\n \"0\": \"\u30BC\u30ED\",\n \"1\": \"\u30A4\u30C1\",\n \"2\": \"\u30CB\",\n \"3\": \"\u30B5\u30F3\",\n \"4\": \"\u30E8\u30F3\",\n \"5\": \"\u30B4\",\n \"6\": \"\u30ED\u30AF\",\n \"7\": \"\u30CA\u30CA\",\n \"8\": \"\u30CF\u30C1\",\n \"9\": \"\u30AD\u30E5\u30A6\",\n};\n\nexport const symbolMap: Record<string, string> = {\n \"\uFF04\": \"\u30C9\u30EB\",\n \"%\": \"\u30D1\u30FC\u30BB\u30F3\u30C8\",\n \"\u00A5\": \"\u30A8\u30F3\",\n \"#\": \"\u30B7\u30E3\u30FC\u30D7\",\n \"@\": \"\u30A2\u30C3\u30C8\",\n \"&\": \"\u30A2\u30F3\u30C9\",\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<string, readonly [string, string]> = new Map<\n string,\n readonly [string, string]\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\"]],\n [\"'taru' adjective\", [\"adjective::taru\", \"\u305F\u308B-adjective\"]],\n [\"noun (common) (futsuumeishi)\", [\"common_noun\", \"Common noun\"]],\n [\n \"pre-noun adjectival (rentaishi)\",\n [\"pre-noun_adjectival\", \"Pre-noun adjectival\"],\n ],\n [\n \"noun or verb acting prenominally\",\n [\"noun_or_verb_acting_prenominally\", \"Noun or verb acting prenominally\"],\n ],\n [\"pronoun\", [\"pronoun\", \"Pronoun\"]],\n [\"adverb (fukushi)\", [\"adverb\", \"Adverb\"]],\n [\n \"adverb taking the 'to' particle\",\n [\"takes::to\", \"Adverb taking the '\u3068' particle\"],\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\"],\n ],\n [\n \"noun or participle which takes the aux. verb suru\",\n [\"takes::suru\", \"Takes the aux. verb '\u3059\u308B'\"],\n ],\n [\"suru verb - irregular\", [\"suru_verb\", \"Irregular \u3059\u308B-verb\"]],\n [\"suru verb - special class\", [\"suru_verb\", \"Special \u3059\u308B-verb\"]],\n [\"ichidan verb\", [\"ichidan_verb\", \"Ichidan verb\"]],\n [\n \"godan verb with 'ku' ending\",\n [\"godan::ku::verb\", \"Godan verb with '\u304F' ending\"],\n ],\n [\n \"godan verb with 'gu' ending\",\n [\"godan::gu::verb\", \"Godan verb with '\u3050' ending\"],\n ],\n [\n \"godan verb with 'u' ending\",\n [\"godan::u::verb\", \"Godan verb with '\u3046' ending\"],\n ],\n [\n \"godan verb with 'tsu' ending\",\n [\"godan::tsu::verb\", \"Godan verb with '\u3064' ending\"],\n ],\n [\n \"godan verb with 'ru' ending\",\n [\"godan::ru::verb\", \"Godan verb with '\u308B' ending\"],\n ],\n [\n \"godan verb with 'nu' ending\",\n [\"godan::nu::verb\", \"Godan verb with '\u306C' ending\"],\n ],\n [\n \"godan verb with 'mu' ending\",\n [\"godan::mu::verb\", \"Godan verb with '\u3080' ending\"],\n ],\n [\n \"godan verb with 'bu' ending\",\n [\"godan::bu::verb\", \"Godan verb with '\u3076' ending\"],\n ],\n [\n \"godan verb with 'su' ending\",\n [\"godan::su::verb\", \"Godan verb with '\u3059' ending\"],\n ],\n [\n \"godan verb with 'u' ending (special class)\",\n [\"godan::u::irregular_verb\", \"Irregular godan verb with '\u3046' ending\"],\n ],\n [\n \"godan verb with 'ru' ending (irregular verb)\",\n [\"godan::ru::irregular_verb\", \"Irregular godan verb with '\u308B' ending\"],\n ],\n [\n \"godan verb - -aru special class\",\n [\"godan::aru::irregular_verb\", \"Irregular godan verb with '-\u3042\u308B' ending\"],\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 ],\n ],\n [\n \"irregular nu verb\",\n [\"godan::nu::irregular_verb\", \"Irregular godan verb with '\u306C' ending\"],\n ],\n [\"kuru verb - special class\", [\"kuru_verb\", \"Special '\u304F\u308B' verb\"]],\n [\"transitive verb\", [\"transitive_verb\", \"Transitive verb\"]],\n [\"intransitive verb\", [\"intransitive_verb\", \"Intransitive verb\"]],\n [\"auxiliary verb\", [\"auxiliary_verb\", \"Auxiliary verb\"]],\n [\"auxiliary adjective\", [\"adjective::auxiliary\", \"Auxiliary adjective\"]],\n [\"auxiliary\", [\"auxiliary\", \"Auxiliary\"]],\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\"]],\n [\"noun, used as a prefix\", [\"prefix_noun\", \"Noun, used as a prefix\"]],\n [\"suffix\", [\"suffix\", \"Suffix\"]],\n [\"noun, used as a suffix\", [\"suffix_noun\", \"Noun, used as a suffix\"]],\n [\"counter\", [\"counter\", \"Counter\"]],\n [\"numeric\", [\"numeric\", \"Numeric\"]],\n [\"particle\", [\"particle\", \"Particle\"]],\n [\"conjunction\", [\"conjunction\", \"Conjunction\"]],\n [\"expression\", [\"expression\", \"Expression\"]],\n [\"idiomatic expression\", [\"idiomatic_expression\", \"Idiomatic expression\"]],\n [\"interjection (kandoushi)\", [\"interjection\", \"Interjection\"]],\n [\"proverb\", [\"proverb\", \"Proverb\"]],\n [\"yojijukugo\", [\"yojijukugo\", \"Yojijukugo\"]],\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\"]],\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\"],\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\"],\n ],\n [\n \"archaic/formal form of na-adjective\",\n [\"na-adjective_archaic_or_formal\", \"archaic/formal form of \u306A-adjective\"],\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 [\"expression\", \"Expression (phrase, clause, etc.)\"],\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\"]],\n [\n \"ichidan verb - kureru special class\",\n [\"ichidan_verb::kureru\", \"Ichidan verb - \u304F\u308C\u308B special class\"],\n ],\n [\n \"nidan verb with 'u' ending (archaic)\",\n [\"nidan_verb::u\", \"Nidan verb with '\u3046' ending (archaic)\"],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\n ],\n [\n \"yodan verb with 'bu' ending (archaic)\",\n [\"yodan_verb::bu\", \"Yodan verb with '\u3076' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'gu' ending (archaic)\",\n [\"yodan_verb::gu\", \"Yodan verb with '\u3050' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'hu/fu' ending (archaic)\",\n [\"yodan_verb::hu/fu\", \"Yodan verb with '\u3075' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'ku' ending (archaic)\",\n [\"yodan_verb::ku\", \"Yodan verb with '\u304F' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'mu' ending (archaic)\",\n [\"yodan_verb::mu\", \"Yodan verb with '\u3080' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'nu' ending (archaic)\",\n [\"yodan_verb::nu\", \"Yodan verb with '\u306C' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'ru' ending (archaic)\",\n [\"yodan_verb::ru\", \"Yodan verb with '\u308B' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'su' ending (archaic)\",\n [\"yodan_verb::su\", \"Yodan verb with '\u3059' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'tsu' ending (archaic)\",\n [\"yodan_verb::tsu\", \"Yodan verb with '\u3064' ending (archaic)\"],\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 ],\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 ],\n ],\n [\n \"su verb - precursor to the modern suru\",\n [\"su_verb\", \"'\u3059' verb - precursor to the modern \u3059\u308B\"],\n ],\n [\"suru verb - included\", [\"suru_verb\", \"'\u3059\u308B' verb - included\"]],\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 ],\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 fetch from \"node-fetch\";\nimport {\n noteMap,\n notSearchedForms,\n numberMap,\n regexps,\n romajiMap,\n symbolMap,\n} from \"./constants\";\nimport {\n DictKanji,\n DictKanjiForm,\n DictKanjiReading,\n DictKanjiReadingMeaning,\n DictKanjiReadingMeaningGroup,\n DictKanjiWithRadicals,\n DictMeaning,\n DictRadical,\n DictReading,\n DictWord,\n ExamplePart,\n Grammar,\n Kana,\n Kanji,\n KanjiComponent,\n KanjiForm,\n NoteAndTag,\n Phrase,\n Radical,\n Reading,\n Result,\n TanakaExample,\n Translation,\n Word,\n} from \"./types\";\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: 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 | undefined = a[i];\n const tmp2: T | undefined = a[j];\n\n if (!tmp || !tmp2) throw new Error(\"Invalid array\");\n\n a[i] = tmp2;\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?: TanakaExample[] | undefined,\n): DictWord[] {\n try {\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) throw err;\n\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 ...(isValidArray(entry.ent_seq) &&\n entry.ent_seq[0] &&\n typeof entry.ent_seq[0] === \"string\"\n ? { id: entry.ent_seq[0] }\n : { id: \"\" }),\n readings: [],\n meanings: [],\n };\n\n if (entryObj.id.length === 0) throw new Error(\"Invalid JMdict entry\");\n\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 ...(isValidArrayWithFirstElement(kanjiForm.keb) &&\n typeof kanjiForm.keb[0] === \"string\"\n ? { form: kanjiForm.keb[0] }\n : { form: \"\" }),\n };\n if (form.form.length === 0)\n throw new Error(\n `Invalid JMdict entry kanji form: ${entryObj.id}`,\n );\n\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) entryObj.isCommon = true;\n }\n\n if (form.form.length > 0) entryObj.kanjiForms.push(form);\n }\n }\n\n if (isValidArray(readings))\n for (const reading of readings) {\n const readingObj: DictReading = {\n ...(isValidArrayWithFirstElement(reading.reb) &&\n typeof reading.reb[0] === \"string\"\n ? { reading: reading.reb[0] }\n : { reading: \"\" }),\n };\n if (readingObj.reading.length === 0)\n throw new Error(`Invalid JMdict entry reading: ${entryObj.id}`);\n\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) entryObj.isCommon = true;\n }\n\n if (readingObj.reading.length > 0)\n entryObj.readings.push(readingObj);\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)) meaningObj.antonyms = meaning.ant;\n if (isStringArray(meaning.field))\n 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(\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 (meaningObj.translations && meaningObj.translations.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 ||\n !reading.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (entryObj.isCommon === undefined ||\n (reading.commonness && reading.commonness.length > 0)),\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 (!existsExample && 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 return dict;\n } catch (err: unknown) {\n throw err;\n }\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 try {\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) throw err;\n\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 ...(isValidArrayWithFirstElement(entry.literal) &&\n typeof entry.literal[0] === \"string\"\n ? { kanji: entry.literal[0] }\n : { kanji: \"\" }),\n misc: {\n strokeNumber: \"\",\n },\n readingMeaning: [],\n };\n\n if (kanjiObj.kanji.length === 0)\n throw new Error(\"Invalid KANJIDIC entry\");\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 ...(isValidArrayWithFirstElement(misc.stroke_count) &&\n typeof misc.stroke_count[0] === \"string\"\n ? { strokeNumber: misc.stroke_count[0] }\n : { strokeNumber: \"\" }),\n };\n\n if (kanjiObj.misc.strokeNumber.length === 0)\n throw new Error(`Invalid KANJIDIC entry: ${kanjiObj.kanji}`);\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 )\n kanjiObj.misc.jlpt = misc.jlpt[0];\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 rmObj.groups.push(groupObj);\n }\n\n if (isStringArray(rm.nanori)) rmObj.nanori = rm.nanori;\n\n if (rmObj.groups.length > 0) kanjiObj.readingMeaning.push(rmObj);\n }\n\n if (kanjiObj.kanji.length > 0) dict.push(kanjiObj);\n }\n });\n\n return dict;\n } catch (err: unknown) {\n throw err;\n }\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 * @param generateFurigana Whether or not to generate furigana for the phrase\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects\n */\nexport async function convertTanakaCorpus(\n tanakaString: string,\n generateFurigana?: true,\n): Promise<TanakaExample[]> {\n return await new Promise<TanakaExample[]>(\n async (\n resolve: (value: TanakaExample[] | PromiseLike<TanakaExample[]>) => void,\n reject: (reason?: any) => void,\n ) => {\n try {\n const tanakaArray: TanakaExample[] = [];\n\n const tanakaParsed: string[] = tanakaString.split(\"\\n\");\n\n const kuroshiro: any =\n generateFurigana === true ? new Kuroshiro.default() : null;\n if (kuroshiro !== null) await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any =\n kuroshiro !== null ? kuroshiro.convert.bind(kuroshiro) : null;\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 if (!idMatch || !idMatch.groups || !idMatch.groups[\"id\"])\n throw new Error(`Invalid phrase ID for ${a}`);\n\n const aParts: string[] = a\n .replace(regexps.tanakaID, \"\")\n .split(\"\\t\");\n const bParts: ExamplePart[] = b\n .split(\" \")\n .filter((part: string) => part.trim().length !== 0)\n .map((part: string) => {\n const partMatches: RegExpExecArray | null =\n regexps.tanakaPart.exec(part);\n if (\n !partMatches ||\n !partMatches.groups ||\n partMatches.length === 0\n )\n throw new Error(`Invalid B part: ${part}`);\n\n const baseForm: string | undefined = partMatches.groups[\"base\"];\n if (!baseForm)\n throw new Error(`Invalid base form of B part: ${part}`);\n\n const examplePart: ExamplePart = { baseForm: baseForm };\n\n const reading: string | undefined =\n 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 if (\n !referenceID ||\n !referenceID.groups ||\n !referenceID.groups[\"entryid\"]\n )\n throw new Error(`Invalid reference ID: ${reading}`);\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 return examplePart;\n });\n\n const phrase: string | undefined = aParts[0];\n const translation: string | undefined = aParts[1];\n\n if (phrase && translation) {\n let furigana: string | undefined = undefined;\n\n if (convert !== null && !phrase.includes(\"\u30FB\"))\n furigana = (await convert(phrase, {\n to: \"hiragana\",\n mode: \"furigana\",\n })) as string;\n\n tanakaArray.push({\n id: idMatch.groups[\"id\"].trim() as `${number}_${number}`,\n phrase: phrase.trim(),\n translation: translation.trim(),\n parts: bParts,\n ...(furigana ? { furigana: furigana } : {}),\n });\n }\n }\n }\n\n tanakaParsed.length = 0;\n\n resolve(tanakaArray);\n } catch (err: unknown) {\n reject(err);\n }\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: DictKanji[],\n): DictRadical[] {\n try {\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 if (!line) continue;\n\n if (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 if (!kanjiLine) continue;\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 | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === kanji,\n );\n\n if (foundKanji) kanjiList.push(foundKanji);\n else kanjiList.push({ kanji: kanji, readingMeaning: [] });\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 > 0 && radical.strokes.length > 0)\n radicals.push(radical);\n }\n }\n\n fileParsed.length = 0;\n\n return radicals;\n } catch (err: unknown) {\n throw err;\n }\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: DictKanji[],\n katakanaList: Kana[],\n): DictKanjiWithRadicals[] {\n try {\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) continue;\n\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) continue;\n\n const kanji: DictKanjiWithRadicals = {\n ...(kanjiChar &&\n radicalsRow &&\n kanjiChar.length === 1 &&\n radicalsRow.length > 0\n ? { kanji: kanjiChar }\n : { kanji: \"\" }),\n radicals: [],\n };\n\n if (kanji.kanji.length === 1) {\n const radicals: string[] = radicalsRow.split(\" \");\n\n for (const radical of radicals) {\n let foundRadical: DictKanji | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === radical,\n );\n\n if (!foundRadical) {\n const katakanaChar: Kana | undefined = katakanaList.find(\n (kana: Kana) => kana.kana === radical,\n );\n if (!katakanaChar) continue;\n\n foundRadical = {\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(foundRadical ? foundRadical : radical);\n }\n }\n\n if (kanji.kanji.length === 1 && kanji.radicals.length > 0)\n kanjiWithRadicals.push(kanji);\n }\n\n fileParsed.length = 0;\n\n return kanjiWithRadicals;\n } catch (err: unknown) {\n throw err;\n }\n}\n\nfunction lookupWordNote(\n key: string,\n notes?: string[] | undefined,\n tags?: string[] | undefined,\n required?: boolean | undefined,\n fallback?: string | undefined,\n): NoteAndTag {\n const info: readonly [string, string] | undefined = noteMap.get(\n key.toLowerCase(),\n );\n\n if (!info) {\n if (required) throw new Error(`Invalid note info for ${key}`);\n\n if (notes) notes.push(fallback ?? key);\n\n return { note: fallback ?? 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 {@link id} or the {@link dictWord} object directly.\n * @param dict An array of converted `JMdict` entries\n * @param id The ID of the `JMdict` entry\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @param examples An array of converted `Tanaka Corpus` examples\n * @param dictWord The converted `JMdict` entry\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link Word} object\n */\nexport function getWord(\n dict?: DictWord[],\n id?: string,\n kanjiDic?: DictKanji[],\n examples?: TanakaExample[],\n dictWord?: DictWord,\n noteTypeName?: string,\n deckPath?: string,\n): Word {\n try {\n if (!dictWord && id && dict)\n dictWord = dict.find((entry) => entry.id === id);\n\n if (dictWord) {\n const word: Word = {\n id: dictWord.id,\n readings: [],\n translations: [],\n noteID: `word_${dictWord.id}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n tags: [],\n };\n\n if (dictWord.isCommon === true) word.common = true;\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 false,\n note,\n );\n\n return capitalizeString(noteAndTag.note ?? 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 false,\n note,\n );\n\n return capitalizeString(noteAndTag.note ?? note);\n })\n : []),\n ],\n }\n : {}),\n ...(dictReading.commonness && dictReading.commonness.length > 0\n ? { common: true }\n : {}),\n }));\n\n word.translations = dictWord.meanings.map((dictMeaning: DictMeaning) => {\n if (!dictMeaning.translations)\n throw new Error(`No translations for ${dictWord!.id}`);\n\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 else if (translation.type === \"expl\")\n translationTypes.push(\"Explanation\");\n else if (translation.type === \"tm\")\n translationTypes.push(\"Trademark\");\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!, true),\n );\n wordAddNoteArray(dictMeaning.fields, (field: string) =>\n lookupWordNote(field, notes, word.tags!, false, field),\n );\n wordAddNoteArray(dictMeaning.dialects, (dialect: string) =>\n lookupWordNote(dialect, notes, word.tags!, true),\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!, false, info),\n );\n wordAddNoteArray(dictMeaning.misc, (misc: string) =>\n lookupWordNote(misc, notes, word.tags!, false, misc),\n );\n\n for (let i: number = 0; i < notes.length; i++)\n notes[i] = capitalizeString(notes[i]!);\n\n return {\n translation: translations.join(\"; \"),\n notes: notes,\n };\n });\n\n if (dictWord.usuallyInKana === true) word.usuallyInKana = true;\n\n if (kanjiDic && word.kanjiForms) {\n word.kanji = [];\n\n for (const kanjiForm of word.kanjiForms)\n for (const char of kanjiForm.kanjiForm) {\n if (word.kanji.some((kanji: Kanji) => kanji.kanji === char))\n continue;\n\n const dictKanji: DictKanji | undefined = kanjiDic.find(\n (kanji: DictKanji) => kanji.kanji === char,\n );\n\n if (dictKanji) {\n const kanjiObj: Kanji = getKanji(\n dictKanji.kanji,\n kanjiDic,\n undefined,\n );\n\n word.kanji.push({\n kanji: kanjiObj.kanji,\n ...(kanjiObj.meanings ? { meanings: kanjiObj.meanings } : {}),\n });\n }\n }\n\n if (word.kanji.length === 0) delete word.kanji;\n }\n\n if (dictWord.hasPhrases === true && examples) {\n const readings: Set<string> = new Set<string>(\n word.readings\n .filter(\n (reading: Reading) =>\n (!reading.notes ||\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 const kanjiForms: Set<string> | undefined = word.kanjiForms\n ? new Set<string>(\n word.kanjiForms.map(\n (kanjiForm: KanjiForm) => kanjiForm.kanjiForm,\n ),\n )\n : undefined;\n\n const kanjiFormExamples: TanakaExample[] = [];\n const readingMatchingKanjiFormExamples: TanakaExample[] = [];\n const readingExamples: TanakaExample[] = [];\n\n const partParts: Set<string> = new Set<string>();\n\n for (const example of examples)\n for (const part of example.parts) {\n const readingAsReadingMatch: boolean =\n (part.reading !== undefined && readings.has(part.reading)) ||\n (part.inflectedForm !== undefined &&\n readings.has(part.inflectedForm));\n\n if (\n kanjiForms &&\n kanjiForms.size > 0 &&\n kanjiForms.has(part.baseForm)\n ) {\n if (readingAsReadingMatch) {\n readingMatchingKanjiFormExamples.push(example);\n partParts.add(part.baseForm).add(part.reading!);\n } else {\n kanjiFormExamples.push(example);\n partParts.add(part.baseForm);\n }\n\n break;\n }\n\n const readingAsBaseFormMatch: boolean = readings.has(part.baseForm);\n const referenceIDMatch: boolean =\n part.referenceID !== undefined &&\n word.id !== undefined &&\n part.referenceID === word.id;\n\n if (readingAsBaseFormMatch || referenceIDMatch) {\n readingExamples.push(example);\n\n if (readingAsBaseFormMatch) partParts.add(part.baseForm);\n if (referenceIDMatch) partParts.add(part.referenceID!);\n\n break;\n }\n }\n\n const exampleSize: number =\n readingMatchingKanjiFormExamples.length +\n kanjiFormExamples.length +\n readingExamples.length;\n\n const includeReadingThreshold: number = Math.max(\n 10,\n Math.round(exampleSize * 0.5),\n );\n\n const includeKanjiFormExamples: boolean = word.kanjiForms !== undefined;\n const includeReadingExamples: boolean =\n (readingExamples.length >= includeReadingThreshold &&\n readingExamples.length >= readingMatchingKanjiFormExamples.length &&\n readingExamples.length >= kanjiFormExamples.length) ||\n (readingExamples.length >= includeReadingThreshold &&\n word.usuallyInKana === true) ||\n word.kanjiForms === undefined;\n\n let wordExamples: TanakaExample[] = [\n ...readingMatchingKanjiFormExamples,\n ...(includeKanjiFormExamples ? kanjiFormExamples : []),\n ...(includeReadingExamples ? readingExamples : []),\n ];\n\n const glossSpecificExamples: TanakaExample[] = [];\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.phrase)) continue;\n\n for (const part of example.parts)\n if (\n part.glossNumber === i + 1 &&\n (partParts.has(part.baseForm) ||\n (includeReadingExamples &&\n ((part.reading && partParts.has(part.reading)) ||\n (part.inflectedForm &&\n partParts.has(part.inflectedForm)) ||\n (part.referenceID && partParts.has(part.referenceID)))))\n ) {\n example.glossNumber = {\n wordId: word.id!,\n glossNumber: i + 1,\n };\n\n glossSpecificExamples.push(example);\n seenPhrases.add(example.phrase);\n\n break outer;\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((ex: TanakaExample) => !seenPhrases.has(ex.phrase))\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: TanakaExample) => ({\n phrase: ex.furigana ?? ex.phrase,\n translation: ex.translation,\n originalPhrase: ex.phrase,\n ...(ex.glossNumber ? { glossNumber: ex.glossNumber } : {}),\n }));\n }\n\n return word;\n } else throw new Error(`Word${id ? ` ${id}` : \"\"} not found`);\n } catch (err: unknown) {\n throw err;\n }\n}\n\n/**\n * Transforms a converted `KANJIDIC` entry into a more readable format\n * @param kanjiChar The kanji character\n * @param dict An array of converted `KANJIDIC` entries\n * @param jmDict An array 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\n */\nexport function getKanji(\n kanjiChar: string,\n dict: DictKanji[],\n jmDict?: DictWord[],\n svgList?: string[],\n noteTypeName?: string,\n deckPath?: string,\n): Kanji {\n try {\n const dictKanji: DictKanji | undefined = dict.find(\n (entry: DictKanji) => entry.kanji === kanjiChar,\n );\n\n if (dictKanji) {\n const kanji: Kanji = {\n kanji: dictKanji.kanji,\n ...(dictKanji.misc ? { strokes: dictKanji.misc.strokeNumber } : {}),\n ...(dictKanji.misc && dictKanji.misc.grade\n ? { grade: dictKanji.misc.grade }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.frequency\n ? { grade: dictKanji.misc.frequency }\n : {}),\n noteID: `kanji_${dictKanji.kanji}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n };\n\n for (const rm of dictKanji.readingMeaning) {\n if (rm.nanori && rm.nanori.length > 0) {\n if (kanji.nanori === undefined) kanji.nanori = [];\n kanji.nanori.push(...rm.nanori);\n }\n\n for (const group of rm.groups) {\n kanji.onyomi = group.readings\n .filter((reading: DictKanjiReading) => reading.type === \"ja_on\")\n .map((reading: DictKanjiReading) => reading.reading);\n kanji.kunyomi = group.readings\n .filter((reading: DictKanjiReading) => reading.type === \"ja_kun\")\n .map((reading: DictKanjiReading) => reading.reading);\n\n if (kanji.onyomi.length === 0) delete kanji.onyomi;\n if (kanji.kunyomi.length === 0) delete kanji.kunyomi;\n\n kanji.meanings = group.meanings;\n\n if (kanji.meanings.length === 0) delete kanji.meanings;\n }\n }\n\n if (jmDict) {\n let kanjiWords: DictWord[] | Word[] = jmDict.filter(\n (word: DictWord) =>\n word.kanjiForms && word.kanjiForms[0]!.form.includes(kanji.kanji),\n );\n\n if (kanjiWords.length > 3) kanjiWords = kanjiWords.slice(0, 2);\n\n if (kanjiWords.length > 0)\n kanji.words = kanjiWords.map((word: DictWord) => {\n const wordObj: Word = getWord(\n undefined,\n undefined,\n undefined,\n undefined,\n word,\n undefined,\n );\n\n if (!wordObj.translations)\n throw new Error(`Invalid word: ${word.id}`);\n\n const kanjiForm: KanjiForm = wordObj.kanjiForms![0]!;\n let reading: Reading | undefined = wordObj.readings.find(\n (reading: Reading) =>\n reading.notes &&\n reading.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"reading restricted to \") &&\n note.endsWith(kanjiForm.kanjiForm),\n ),\n );\n let translation: Translation | undefined =\n wordObj.translations.find(\n (translation: Translation) =>\n translation.notes &&\n translation.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"meaning restricted to \") &&\n (note.endsWith(kanjiForm.kanjiForm) ||\n (reading && note.endsWith(reading.reading))),\n ),\n );\n\n if (!reading) reading = wordObj.readings[0]!;\n if (!translation) translation = wordObj.translations[0]!;\n\n return {\n kanjiForms: [kanjiForm],\n readings: [reading],\n translations: [translation],\n };\n });\n\n if (kanjiWords.length !== 3) {\n const wordNumber: number = 3 - kanjiWords.length;\n\n kanjiWords = jmDict\n .filter(\n (word: DictWord) =>\n word.kanjiForms &&\n word.kanjiForms.some((kanjiForm: DictKanjiForm) =>\n kanjiForm.form.includes(kanji.kanji),\n ),\n )\n .map((word: DictWord) => {\n const wordObj: Word = getWord(\n undefined,\n undefined,\n undefined,\n undefined,\n word,\n undefined,\n );\n\n if (!wordObj.translations)\n throw new Error(`Invalid word: ${word.id}`);\n\n const kanjiForm: KanjiForm | undefined = wordObj.kanjiForms!.find(\n (kanjiForm: KanjiForm) =>\n kanjiForm.kanjiForm.includes(kanji.kanji),\n );\n if (!kanjiForm) throw new Error(\"Invalid kanji form\");\n\n let reading: Reading | undefined = wordObj.readings.find(\n (reading: Reading) =>\n reading.notes &&\n reading.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"reading restricted to \") &&\n note.endsWith(kanjiForm.kanjiForm),\n ),\n );\n let translation: Translation | undefined =\n wordObj.translations.find(\n (translation: Translation) =>\n translation.notes &&\n translation.notes.some(\n (note: string) =>\n note\n .toLowerCase()\n .startsWith(\"meaning restricted to \") &&\n (note.endsWith(kanjiForm.kanjiForm) ||\n (reading && note.endsWith(reading.reading))),\n ),\n );\n\n if (!reading) reading = wordObj.readings[0]!;\n if (!translation) translation = wordObj.translations[0]!;\n\n return {\n kanjiForms: [kanjiForm],\n readings: [reading],\n translations: [translation],\n };\n });\n\n if (kanjiWords.length > wordNumber)\n kanjiWords = kanjiWords.slice(0, wordNumber - 1);\n\n if (kanjiWords.length > 0)\n if (kanji.words) kanji.words.push(...kanjiWords);\n else kanji.words = kanjiWords;\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 kanji.tags = [];\n\n if (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(\n (meaning: string) => meaning === \"(kokuji)\",\n ),\n 1,\n );\n }\n\n kanji.tags.push(\n `kanji::onyomi::${kanji.onyomi?.length ?? 0}`,\n `kanji::kunyomi::${kanji.kunyomi?.length ?? 0}`,\n `kanji::nanori::${kanji.nanori?.length ?? 0}`,\n `kanji::strokes::${kanji.strokes ?? \"unknown\"}`,\n `kanji::words::${kanji.words?.length ?? 0}`,\n ...(kanji.svg ? [\"kanji::has_svg\"] : []),\n );\n\n return kanji;\n } else throw new Error(`Kanji ${kanjiChar} not found`);\n } catch (err: unknown) {\n throw err;\n }\n}\n\n/**\n * Same as {@link getKanji}, but with possible extra info.\n * @param kanjiChar The kanji character\n * @param info Additional info from `jpdb.io` for the kanji (mnemonic, components, words)\n * @param dict An array of converted `KANJIDIC` entries\n * @param useJpdbWords Whether or not to use the `jpdb.io` provided words (if present) instead of other words from `JMdict`\n * @param jmDict An array 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\n */\nexport function getKanjiExtended(\n kanjiChar: string,\n info: Kanji,\n dict: DictKanji[],\n useJpdbWords?: true,\n jmDict?: DictWord[],\n svgList?: string[],\n noteTypeName?: string,\n deckPath?: string,\n): Kanji {\n try {\n const kanji: Kanji = getKanji(\n kanjiChar,\n dict,\n jmDict,\n svgList,\n noteTypeName,\n deckPath,\n );\n\n if (info.components && info.components.length > 0)\n kanji.components = info.components;\n if (info.mnemonic && info.mnemonic.length > 0)\n kanji.mnemonic = info.mnemonic;\n if (useJpdbWords === true && info.words && info.words.length > 0)\n kanji.words = info.words;\n\n if (kanji.tags) {\n kanji.tags.push(`kanji::components::${kanji.components?.length ?? 0}`);\n\n if (kanji.mnemonic && kanji.mnemonic.length > 0)\n kanji.tags.push(\"kanji::has_mnemonic\");\n\n if (useJpdbWords === true && kanji.words)\n if (\n !kanji.tags.some((tag: string, index: number) => {\n if (tag.startsWith(\"kanji::words::\")) {\n kanji.tags!.splice(\n index,\n 1,\n `kanji::words::${kanji.words?.length ?? 0}`,\n );\n return true;\n } else return false;\n })\n )\n kanji.tags.push(`kanji::words::${kanji.words?.length ?? 0}`);\n }\n\n if (\n kanji.fromJpdb === true &&\n (kanji.mnemonic ||\n (kanji.components && kanji.components.length > 0) ||\n kanji.words)\n )\n kanji.source = `https://jpdb.io/kanji/${kanji.kanji}#a`;\n\n return kanji;\n } catch (err: unknown) {\n throw err;\n }\n}\n\nconst getCharType: (\n char: string,\n) => \"kanji\" | \"hiragana\" | \"katakana\" | \"other\" = (\n char: string,\n): \"kanji\" | \"hiragana\" | \"katakana\" | \"other\" => {\n if (regexps.kanji.test(char)) return \"kanji\";\n if (regexps.hiragana.test(char)) return \"hiragana\";\n if (regexps.katakana.test(char)) return \"katakana\";\n return \"other\";\n};\n\nconst splitByScript: (text: string) => string[] = (text: string): string[] =>\n text.match(regexps.scriptSplit) || [];\n\nconst convertToHiragana: (str: string) => string = (str: string): string =>\n str.replace(regexps.katakana, (c: string) =>\n String.fromCharCode(c.charCodeAt(0) - 0x60),\n );\n\nconst convertOtherToKatakana: (str: string) => string = (str: string): string =>\n str\n .split(\"\")\n .map((c: string) => {\n if (romajiMap[c.toUpperCase()]) return romajiMap[c.toUpperCase()];\n if (numberMap[c]) return numberMap[c];\n if (symbolMap[c]) return symbolMap[c];\n return c;\n })\n .join(\"\");\n\n/**\n * Builds SSML text for Japanese words\n * @param formText The normal form of the word (usually kanji form)\n * @param fullReading The reading of the word (hiragana or katakana)\n * @returns The SSML text\n */\nexport function makeSSML(formText: string, fullReading: string): string {\n let ssml: string = \"\";\n\n const allTypes: (\"kanji\" | \"hiragana\" | \"katakana\" | \"other\")[] = Array.from(\n formText,\n ).map((c: string) => getCharType(c));\n const uniqueTypes: (\"kanji\" | \"hiragana\" | \"katakana\" | \"other\")[] =\n Array.from(new Set(allTypes));\n\n if (uniqueTypes.length === 1)\n switch (uniqueTypes[0]) {\n case \"kanji\":\n ssml = `<speak><phoneme alphabet=\"x-amazon-yomigana\" ph=\"${fullReading}\">${formText}</phoneme></speak>`;\n\n break;\n case \"katakana\":\n ssml = `<speak><phoneme alphabet=\"x-amazon-pron-kana\" ph=\"${formText}\">${formText}</phoneme></speak>`;\n\n break;\n case \"hiragana\":\n default:\n ssml = `<speak>${formText}</speak>`;\n }\n else {\n const segments: string[] = splitByScript(formText);\n let pureKanjiReading: string = convertToHiragana(fullReading);\n\n segments.forEach((seg: string) => {\n const type: \"kanji\" | \"hiragana\" | \"katakana\" | \"other\" = getCharType(\n seg[0]!,\n );\n\n if (type !== \"kanji\") {\n const converted: string =\n type === \"other\"\n ? convertToHiragana(convertOtherToKatakana(seg))\n : convertToHiragana(seg);\n\n pureKanjiReading = pureKanjiReading.replace(converted, \"\");\n }\n });\n\n const kanjiSegments: string[] = segments.filter(\n (seg: string) => getCharType(seg[0]!) === \"kanji\",\n );\n let readingPointer: number = 0;\n\n const ssmlSegments: string[] = segments.map((seg: string) => {\n const type: \"kanji\" | \"hiragana\" | \"katakana\" | \"other\" = getCharType(\n seg[0]!,\n );\n\n if (type === \"kanji\") {\n const expectedLength: number =\n pureKanjiReading.length / kanjiSegments.length;\n const allocated: string = pureKanjiReading.slice(\n readingPointer,\n readingPointer + Math.ceil(expectedLength),\n );\n\n readingPointer += allocated.length;\n\n return `<phoneme alphabet=\"x-amazon-yomigana\" ph=\"${allocated}\">${seg}</phoneme>`;\n } else if (type === \"katakana\")\n return `<phoneme alphabet=\"x-amazon-pron-kana\" ph=\"${seg}\">${seg}</phoneme>`;\n else if (type === \"other\") {\n const katakanaReading: string = convertOtherToKatakana(seg);\n\n return `<phoneme alphabet=\"x-amazon-pron-kana\" ph=\"${katakanaReading}\">${seg}</phoneme>`;\n } else return seg;\n });\n\n ssml = `<speak>${ssmlSegments.join(\"\")}</speak>`;\n }\n\n return ssml;\n}\n\n/**\n * Synthesizes text to speech audio using {@link [TTSFree.com](https://ttsfree.com/)}.\n * @param ssmlText The text to be spoken, in SSML format\n * @param options Other speech generation settings\n * @returns A promise resolving with a MP3 audio stream buffer\n */\nexport async function synthesizeSpeech(\n ssmlText: string,\n apiKey: string,\n options: {\n voiceService: \"servicebin\" | \"servicegoo\";\n voiceID: string;\n voiceSpeed?: \"-3\" | \"-2\" | \"-1\" | \"0\" | \"1\" | \"2\" | \"3\" | undefined;\n voicePitch?:\n | \"x-high\"\n | \"high\"\n | \"default\"\n | \"low\"\n | \"x-low\"\n | number\n | undefined;\n },\n): Promise<Buffer<ArrayBuffer>> {\n return await new Promise<Buffer<ArrayBuffer>>(\n async (\n resolve: (\n value: Buffer<ArrayBuffer> | PromiseLike<Buffer<ArrayBuffer>>,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n try {\n const res = await fetch(\"https://ttsfree.com/api/v1/tts\", {\n method: \"POST\",\n body: JSON.stringify({\n text: ssmlText,\n ...options,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n apikey: apiKey,\n },\n });\n\n if (!res.ok)\n throw new Error(\n `TTS request failed:\\n${res.status}: ${res.statusText}`,\n );\n\n const data: { status: string; mess: string; audioData: string } =\n (await res.json()) as {\n status: string;\n mess: string;\n audioData: string;\n };\n if (\n data.status !== \"success\" ||\n data.mess !== \"success\" ||\n data.audioData.length === 0\n )\n throw new Error(\"Invalid TTS response data\");\n\n const mp3Buffer: Buffer<ArrayBuffer> = Buffer.from(\n data.audioData,\n \"base64\",\n );\n\n resolve(mp3Buffer);\n } catch (err: unknown) {\n reject(err);\n }\n },\n );\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 (\n (entry as Radical).radical !== undefined &&\n (entry as Radical).reading !== undefined &&\n (entry as Radical).meanings !== undefined\n );\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 (\n (entry as Kana).kana !== undefined && (entry as Kana).reading !== undefined\n );\n}\n\nexport function isGrammar(entry: Result): entry is Grammar {\n return (\n (entry as Grammar).point !== undefined &&\n (entry as Grammar).meaning !== undefined\n );\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) => string = (entry: string, notes?: string[], phrase?: true) =>\n `<div class=\"entry\">${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 if (!entry.noteID) throw new Error(\"Invalid note ID\");\n\n const fields: string[] = [];\n\n if (isWord(entry)) {\n if (!entry.translations) throw new Error(`Invalid word: ${entry.noteID}`);\n\n fields.push(\n ...(entry.kanjiForms && !entry.usuallyInKana\n ? [\n entry.kanjiForms\n .map(\n (kanjiFormEntry: KanjiForm, index: number) =>\n `${index > 0 ? \"<details><summary>Show kanji form</summary>\" : \"\"}${createEntry(`<span class=\"word word-kanjiform\">${index === 0 ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${index === 0 ? `</rb><rt>${entry.readings[0]!.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n entry.readings\n .map(\n (readingEntry: Reading, index: number) =>\n `${index > 0 ? \"<details><summary>Show reading</summary>\" : \"\"}${createEntry(`<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`, readingEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n ]\n : [\n entry.readings\n .map(\n (readingEntry: Reading, index: number) =>\n `${index > 0 ? \"<details><summary>Show reading</summary>\" : \"\"}${createEntry(`<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`, readingEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n entry.kanjiForms\n ? entry.kanjiForms\n .map(\n (kanjiFormEntry: KanjiForm, index: number) =>\n `${index > 0 ? \"<details><summary>Show kanji form</summary>\" : \"\"}${createEntry(`<span class=\"word word-kanjiform\">${index === 0 ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${index === 0 ? `</rb><rt>${entry.readings[0]!.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\")\n : noKanjiForms,\n ]),\n entry.translations\n .map(\n (translationEntry: Translation, index: number) =>\n `<span class=\"word word-index${entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? \" gloss-specific\" : \"\"}\">${index + 1}</span>${index > 2 ? \"<details><summary>Show translation</summary>\" : \"\"}${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes)}${index > 2 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\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.phrases\n ? entry.phrases\n .map(\n (phraseEntry: Phrase, index: number) =>\n `<span class=\"word word-index${entry.translations.some((_translation: Translation, index2: number) => index === index2 && phraseEntry.glossNumber && phraseEntry.glossNumber.wordId === entry.id && phraseEntry.glossNumber.glossNumber === index2 + 1) ? \" gloss-specific\" : \"\"}\">${index + 1}</span>${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 )}`,\n )\n .join(\"\")\n : '<span class=\"word word-phrase\">(no phrases) (Search on dictionaries!)</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=\"kanji kanji-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 .filter(\n (word: Word) => word.translations && word.translations.length > 0,\n )\n .map((word: Word) =>\n createEntry(\n `<span class=\"kanji kanji-words\">${word.kanjiForms && word.kanjiForms.length > 0 ? word.kanjiForms[0]!.kanjiForm : \"(no kanji form)\"} / ${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 if (fields.length > 0)\n return fields.map((field: string) => field.replaceAll(\"\\n\", \"<br>\"));\n else throw new Error(\"Invalid entry\");\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 * @returns The resulting Anki notes file's content or `undefined` if `list` is empty\n */\nexport function generateAnkiNotesFile(list: Result[]): string | undefined {\n if (list.length > 0) {\n const headers: string[] = [\n \"#separator:tab\",\n \"#html:true\",\n \"#guid column:1\",\n \"#notetype column:2\",\n \"#deck column:3\",\n ];\n\n const ankiNotes: string = list\n .filter((result: Result) => result.doNotCreateNote === undefined)\n .map((result: Result) => {\n if (!result.noteID || !result.noteTypeName || !result.deckPath)\n throw new Error(\"Invalid result\");\n\n const note: string[] = generateAnkiNote(result);\n if (headers.length === 5)\n headers.push(`#tags column:${note.length + 3}\\n`);\n\n return `${result.noteID}\\t${result.noteTypeName}\\t${result.deckPath}\\t${note.join(\"\\t\")}`;\n })\n .join(\"\\n\")\n .trim();\n\n if (ankiNotes.length === 0) throw new Error(\"Invalid list\");\n\n return `${headers.join(\"\\n\")}\\n${ankiNotes}`;\n } else console.log(\"No entries available for Anki notes creation\");\n\n return undefined;\n}\n"],
|
|
5
|
-
"mappings": "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;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,2CAAsC;AAAA,EAC3D;AAAA,EACA;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,2CAAsC;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",
|
|
6
|
-
"names": ["libxml", "xml", "readings", "kanjiForms", "iconv", "reading", "translation", "kanjiForm", "_a", "_b"
|
|
4
|
+
"sourcesContent": ["export type * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./utils\";\n", "import { 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 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<string, readonly [string, string]> = new Map<\n string,\n readonly [string, string]\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\"]],\n [\"'taru' adjective\", [\"adjective::taru\", \"\u305F\u308B-adjective\"]],\n [\"noun (common) (futsuumeishi)\", [\"common_noun\", \"Common noun\"]],\n [\n \"pre-noun adjectival (rentaishi)\",\n [\"pre-noun_adjectival\", \"Pre-noun adjectival\"],\n ],\n [\n \"noun or verb acting prenominally\",\n [\"noun_or_verb_acting_prenominally\", \"Noun or verb acting prenominally\"],\n ],\n [\"pronoun\", [\"pronoun\", \"Pronoun\"]],\n [\"adverb (fukushi)\", [\"adverb\", \"Adverb\"]],\n [\n \"adverb taking the 'to' particle\",\n [\"takes::to\", \"Adverb taking the '\u3068' particle\"],\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\"],\n ],\n [\n \"noun or participle which takes the aux. verb suru\",\n [\"takes::suru\", \"Takes the aux. verb '\u3059\u308B'\"],\n ],\n [\"suru verb - irregular\", [\"suru_verb\", \"Irregular \u3059\u308B-verb\"]],\n [\"suru verb - special class\", [\"suru_verb\", \"Special \u3059\u308B-verb\"]],\n [\"ichidan verb\", [\"ichidan_verb\", \"Ichidan verb\"]],\n [\n \"godan verb with 'ku' ending\",\n [\"godan::ku::verb\", \"Godan verb with '\u304F' ending\"],\n ],\n [\n \"godan verb with 'gu' ending\",\n [\"godan::gu::verb\", \"Godan verb with '\u3050' ending\"],\n ],\n [\n \"godan verb with 'u' ending\",\n [\"godan::u::verb\", \"Godan verb with '\u3046' ending\"],\n ],\n [\n \"godan verb with 'tsu' ending\",\n [\"godan::tsu::verb\", \"Godan verb with '\u3064' ending\"],\n ],\n [\n \"godan verb with 'ru' ending\",\n [\"godan::ru::verb\", \"Godan verb with '\u308B' ending\"],\n ],\n [\n \"godan verb with 'nu' ending\",\n [\"godan::nu::verb\", \"Godan verb with '\u306C' ending\"],\n ],\n [\n \"godan verb with 'mu' ending\",\n [\"godan::mu::verb\", \"Godan verb with '\u3080' ending\"],\n ],\n [\n \"godan verb with 'bu' ending\",\n [\"godan::bu::verb\", \"Godan verb with '\u3076' ending\"],\n ],\n [\n \"godan verb with 'su' ending\",\n [\"godan::su::verb\", \"Godan verb with '\u3059' ending\"],\n ],\n [\n \"godan verb with 'u' ending (special class)\",\n [\"godan::u::irregular_verb\", \"Irregular godan verb with '\u3046' ending\"],\n ],\n [\n \"godan verb with 'ru' ending (irregular verb)\",\n [\"godan::ru::irregular_verb\", \"Irregular godan verb with '\u308B' ending\"],\n ],\n [\n \"godan verb - -aru special class\",\n [\"godan::aru::irregular_verb\", \"Irregular godan verb with '-\u3042\u308B' ending\"],\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 ],\n ],\n [\n \"irregular nu verb\",\n [\"godan::nu::irregular_verb\", \"Irregular godan verb with '\u306C' ending\"],\n ],\n [\"kuru verb - special class\", [\"kuru_verb\", \"Special '\u304F\u308B' verb\"]],\n [\"transitive verb\", [\"transitive_verb\", \"Transitive verb\"]],\n [\"intransitive verb\", [\"intransitive_verb\", \"Intransitive verb\"]],\n [\"auxiliary verb\", [\"auxiliary_verb\", \"Auxiliary verb\"]],\n [\"auxiliary adjective\", [\"adjective::auxiliary\", \"Auxiliary adjective\"]],\n [\"auxiliary\", [\"auxiliary\", \"Auxiliary\"]],\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\"]],\n [\"noun, used as a prefix\", [\"prefix_noun\", \"Noun, used as a prefix\"]],\n [\"suffix\", [\"suffix\", \"Suffix\"]],\n [\"noun, used as a suffix\", [\"suffix_noun\", \"Noun, used as a suffix\"]],\n [\"counter\", [\"counter\", \"Counter\"]],\n [\"numeric\", [\"numeric\", \"Numeric\"]],\n [\"particle\", [\"particle\", \"Particle\"]],\n [\"conjunction\", [\"conjunction\", \"Conjunction\"]],\n [\"expression\", [\"expression\", \"Expression\"]],\n [\"idiomatic expression\", [\"idiomatic_expression\", \"Idiomatic expression\"]],\n [\"interjection (kandoushi)\", [\"interjection\", \"Interjection\"]],\n [\"proverb\", [\"proverb\", \"Proverb\"]],\n [\"yojijukugo\", [\"yojijukugo\", \"Yojijukugo\"]],\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\"]],\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\"],\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\"],\n ],\n [\n \"archaic/formal form of na-adjective\",\n [\"na-adjective_archaic_or_formal\", \"archaic/formal form of \u306A-adjective\"],\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 [\"expression\", \"Expression (phrase, clause, etc.)\"],\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\"]],\n [\n \"ichidan verb - kureru special class\",\n [\"ichidan_verb::kureru\", \"Ichidan verb - \u304F\u308C\u308B special class\"],\n ],\n [\n \"nidan verb with 'u' ending (archaic)\",\n [\"nidan_verb::u\", \"Nidan verb with '\u3046' ending (archaic)\"],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\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 ],\n ],\n [\n \"yodan verb with 'bu' ending (archaic)\",\n [\"yodan_verb::bu\", \"Yodan verb with '\u3076' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'gu' ending (archaic)\",\n [\"yodan_verb::gu\", \"Yodan verb with '\u3050' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'hu/fu' ending (archaic)\",\n [\"yodan_verb::hu/fu\", \"Yodan verb with '\u3075' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'ku' ending (archaic)\",\n [\"yodan_verb::ku\", \"Yodan verb with '\u304F' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'mu' ending (archaic)\",\n [\"yodan_verb::mu\", \"Yodan verb with '\u3080' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'nu' ending (archaic)\",\n [\"yodan_verb::nu\", \"Yodan verb with '\u306C' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'ru' ending (archaic)\",\n [\"yodan_verb::ru\", \"Yodan verb with '\u308B' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'su' ending (archaic)\",\n [\"yodan_verb::su\", \"Yodan verb with '\u3059' ending (archaic)\"],\n ],\n [\n \"yodan verb with 'tsu' ending (archaic)\",\n [\"yodan_verb::tsu\", \"Yodan verb with '\u3064' ending (archaic)\"],\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 ],\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 ],\n ],\n [\n \"su verb - precursor to the modern suru\",\n [\"su_verb\", \"'\u3059' verb - precursor to the modern \u3059\u308B\"],\n ],\n [\"suru verb - included\", [\"suru_verb\", \"'\u3059\u308B' verb - included\"]],\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 ],\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 PollyClient,\n SynthesizeSpeechCommand,\n SynthesizeSpeechCommandInput,\n SynthesizeSpeechCommandOutput,\n} from \"@aws-sdk/client-polly\";\nimport { noteMap, notSearchedForms, regexps } from \"./constants\";\nimport {\n DictKanji,\n DictKanjiForm,\n DictKanjiReading,\n DictKanjiReadingMeaning,\n DictKanjiReadingMeaningGroup,\n DictKanjiWithRadicals,\n DictMeaning,\n DictRadical,\n DictReading,\n DictWord,\n ExamplePart,\n Grammar,\n Kana,\n Kanji,\n KanjiComponent,\n KanjiForm,\n NoteAndTag,\n Phrase,\n Radical,\n Reading,\n Result,\n TanakaExample,\n Translation,\n Word,\n} from \"./types\";\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: 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 | undefined = a[i];\n const tmp2: T | undefined = a[j];\n\n if (!tmp || !tmp2) throw new Error(\"Invalid array\");\n\n a[i] = tmp2;\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?: TanakaExample[] | undefined,\n): DictWord[] {\n try {\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) throw err;\n\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 ...(isValidArray(entry.ent_seq) &&\n entry.ent_seq[0] &&\n typeof entry.ent_seq[0] === \"string\"\n ? { id: entry.ent_seq[0] }\n : { id: \"\" }),\n readings: [],\n meanings: [],\n };\n\n if (entryObj.id.length === 0) throw new Error(\"Invalid JMdict entry\");\n\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 ...(isValidArrayWithFirstElement(kanjiForm.keb) &&\n typeof kanjiForm.keb[0] === \"string\"\n ? { form: kanjiForm.keb[0] }\n : { form: \"\" }),\n };\n if (form.form.length === 0)\n throw new Error(\n `Invalid JMdict entry kanji form: ${entryObj.id}`,\n );\n\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) entryObj.isCommon = true;\n }\n\n if (form.form.length > 0) entryObj.kanjiForms.push(form);\n }\n }\n\n if (isValidArray(readings))\n for (const reading of readings) {\n const readingObj: DictReading = {\n ...(isValidArrayWithFirstElement(reading.reb) &&\n typeof reading.reb[0] === \"string\"\n ? { reading: reading.reb[0] }\n : { reading: \"\" }),\n };\n if (readingObj.reading.length === 0)\n throw new Error(`Invalid JMdict entry reading: ${entryObj.id}`);\n\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) entryObj.isCommon = true;\n }\n\n if (readingObj.reading.length > 0)\n entryObj.readings.push(readingObj);\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)) meaningObj.antonyms = meaning.ant;\n if (isStringArray(meaning.field))\n 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(\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 (meaningObj.translations && meaningObj.translations.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 ||\n !reading.notes.some((note: string) =>\n notSearchedForms.has(note),\n )) &&\n (entryObj.isCommon === undefined ||\n (reading.commonness && reading.commonness.length > 0)),\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 (!existsExample && 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 return dict;\n } catch (err: unknown) {\n throw err;\n }\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 try {\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) throw err;\n\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 ...(isValidArrayWithFirstElement(entry.literal) &&\n typeof entry.literal[0] === \"string\"\n ? { kanji: entry.literal[0] }\n : { kanji: \"\" }),\n misc: {\n strokeNumber: \"\",\n },\n readingMeaning: [],\n };\n\n if (kanjiObj.kanji.length === 0)\n throw new Error(\"Invalid KANJIDIC entry\");\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 ...(isValidArrayWithFirstElement(misc.stroke_count) &&\n typeof misc.stroke_count[0] === \"string\"\n ? { strokeNumber: misc.stroke_count[0] }\n : { strokeNumber: \"\" }),\n };\n\n if (kanjiObj.misc.strokeNumber.length === 0)\n throw new Error(`Invalid KANJIDIC entry: ${kanjiObj.kanji}`);\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 )\n kanjiObj.misc.jlpt = misc.jlpt[0];\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 rmObj.groups.push(groupObj);\n }\n\n if (isStringArray(rm.nanori)) rmObj.nanori = rm.nanori;\n\n if (rmObj.groups.length > 0) kanjiObj.readingMeaning.push(rmObj);\n }\n\n if (kanjiObj.kanji.length > 0) dict.push(kanjiObj);\n }\n });\n\n return dict;\n } catch (err: unknown) {\n throw err;\n }\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 * @param generateFurigana Whether or not to generate furigana for the phrase\n * @returns A promise resolving with an array of converted {@link TanakaExample} objects\n */\nexport async function convertTanakaCorpus(\n tanakaString: string,\n generateFurigana?: true,\n): Promise<TanakaExample[]> {\n return await new Promise<TanakaExample[]>(\n async (\n resolve: (value: TanakaExample[] | PromiseLike<TanakaExample[]>) => void,\n reject: (reason?: any) => void,\n ) => {\n try {\n const tanakaArray: TanakaExample[] = [];\n\n const tanakaParsed: string[] = tanakaString.split(\"\\n\");\n\n const kuroshiro: any =\n generateFurigana === true ? new Kuroshiro.default() : null;\n if (kuroshiro !== null) await kuroshiro.init(new KuromojiAnalyzer());\n\n const convert: any =\n kuroshiro !== null ? kuroshiro.convert.bind(kuroshiro) : null;\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 if (!idMatch || !idMatch.groups || !idMatch.groups[\"id\"])\n throw new Error(`Invalid phrase ID for ${a}`);\n\n const aParts: string[] = a\n .replace(regexps.tanakaID, \"\")\n .split(\"\\t\");\n const bParts: ExamplePart[] = b\n .split(\" \")\n .filter((part: string) => part.trim().length !== 0)\n .map((part: string) => {\n const partMatches: RegExpExecArray | null =\n regexps.tanakaPart.exec(part);\n if (\n !partMatches ||\n !partMatches.groups ||\n partMatches.length === 0\n )\n throw new Error(`Invalid B part: ${part}`);\n\n const baseForm: string | undefined = partMatches.groups[\"base\"];\n if (!baseForm)\n throw new Error(`Invalid base form of B part: ${part}`);\n\n const examplePart: ExamplePart = { baseForm: baseForm };\n\n const reading: string | undefined =\n 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 if (\n !referenceID ||\n !referenceID.groups ||\n !referenceID.groups[\"entryid\"]\n )\n throw new Error(`Invalid reference ID: ${reading}`);\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 return examplePart;\n });\n\n const phrase: string | undefined = aParts[0];\n const translation: string | undefined = aParts[1];\n\n if (phrase && translation) {\n let furigana: string | undefined = undefined;\n\n if (convert !== null && !phrase.includes(\"\u30FB\"))\n furigana = (await convert(phrase, {\n to: \"hiragana\",\n mode: \"furigana\",\n })) as string;\n\n tanakaArray.push({\n id: idMatch.groups[\"id\"].trim() as `${number}_${number}`,\n phrase: phrase.trim(),\n translation: translation.trim(),\n parts: bParts,\n ...(furigana ? { furigana: furigana } : {}),\n });\n }\n }\n }\n\n tanakaParsed.length = 0;\n\n resolve(tanakaArray);\n } catch (err: unknown) {\n reject(err);\n }\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: DictKanji[],\n): DictRadical[] {\n try {\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 if (!line) continue;\n\n if (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 if (!kanjiLine) continue;\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 | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === kanji,\n );\n\n if (foundKanji) kanjiList.push(foundKanji);\n else kanjiList.push({ kanji: kanji, readingMeaning: [] });\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 > 0 && radical.strokes.length > 0)\n radicals.push(radical);\n }\n }\n\n fileParsed.length = 0;\n\n return radicals;\n } catch (err: unknown) {\n throw err;\n }\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: DictKanji[],\n katakanaList: Kana[],\n): DictKanjiWithRadicals[] {\n try {\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) continue;\n\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) continue;\n\n const kanji: DictKanjiWithRadicals = {\n ...(kanjiChar &&\n radicalsRow &&\n kanjiChar.length === 1 &&\n radicalsRow.length > 0\n ? { kanji: kanjiChar }\n : { kanji: \"\" }),\n radicals: [],\n };\n\n if (kanji.kanji.length === 1) {\n const radicals: string[] = radicalsRow.split(\" \");\n\n for (const radical of radicals) {\n let foundRadical: DictKanji | undefined = kanjiDic.find(\n (dictKanji: DictKanji) => dictKanji.kanji === radical,\n );\n\n if (!foundRadical) {\n const katakanaChar: Kana | undefined = katakanaList.find(\n (kana: Kana) => kana.kana === radical,\n );\n if (!katakanaChar) continue;\n\n foundRadical = {\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(foundRadical ? foundRadical : radical);\n }\n }\n\n if (kanji.kanji.length === 1 && kanji.radicals.length > 0)\n kanjiWithRadicals.push(kanji);\n }\n\n fileParsed.length = 0;\n\n return kanjiWithRadicals;\n } catch (err: unknown) {\n throw err;\n }\n}\n\nfunction lookupWordNote(\n key: string,\n notes?: string[] | undefined,\n tags?: string[] | undefined,\n required?: boolean | undefined,\n fallback?: string | undefined,\n): NoteAndTag {\n const info: readonly [string, string] | undefined = noteMap.get(\n key.toLowerCase(),\n );\n\n if (!info) {\n if (required) throw new Error(`Invalid note info for ${key}`);\n\n if (notes) notes.push(fallback ?? key);\n\n return { note: fallback ?? 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 {@link id} or the {@link dictWord} object directly.\n * @param dict An array of converted `JMdict` entries\n * @param id The ID of the `JMdict` entry\n * @param kanjiDic An array of converted `KANJIDIC` entries\n * @param examples An array of converted `Tanaka Corpus` examples\n * @param dictWord The converted `JMdict` entry\n * @param noteTypeName The Anki note type name\n * @param deckPath The full Anki deck path\n * @returns The transformed {@link Word} object\n */\nexport function getWord(\n dict?: DictWord[],\n id?: string,\n kanjiDic?: DictKanji[],\n examples?: TanakaExample[],\n dictWord?: DictWord,\n noteTypeName?: string,\n deckPath?: string,\n): Word {\n try {\n if (!dictWord && id && dict)\n dictWord = dict.find((entry) => entry.id === id);\n\n if (dictWord) {\n const word: Word = {\n id: dictWord.id,\n readings: [],\n translations: [],\n noteID: `word_${dictWord.id}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n tags: [],\n };\n\n if (dictWord.isCommon === true) word.common = true;\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 false,\n note,\n );\n\n return capitalizeString(noteAndTag.note ?? 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 false,\n note,\n );\n\n return capitalizeString(noteAndTag.note ?? note);\n })\n : []),\n ],\n }\n : {}),\n ...(dictReading.commonness && dictReading.commonness.length > 0\n ? { common: true }\n : {}),\n }));\n\n word.translations = dictWord.meanings.map((dictMeaning: DictMeaning) => {\n if (!dictMeaning.translations)\n throw new Error(`No translations for ${dictWord!.id}`);\n\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 else if (translation.type === \"expl\")\n translationTypes.push(\"Explanation\");\n else if (translation.type === \"tm\")\n translationTypes.push(\"Trademark\");\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!, true),\n );\n wordAddNoteArray(dictMeaning.fields, (field: string) =>\n lookupWordNote(field, notes, word.tags!, false, field),\n );\n wordAddNoteArray(dictMeaning.dialects, (dialect: string) =>\n lookupWordNote(dialect, notes, word.tags!, true),\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!, false, info),\n );\n wordAddNoteArray(dictMeaning.misc, (misc: string) =>\n lookupWordNote(misc, notes, word.tags!, false, misc),\n );\n\n for (let i: number = 0; i < notes.length; i++)\n notes[i] = capitalizeString(notes[i]!);\n\n return {\n translation: translations.join(\"; \"),\n notes: notes,\n };\n });\n\n if (dictWord.usuallyInKana === true) word.usuallyInKana = true;\n\n if (kanjiDic && word.kanjiForms) {\n word.kanji = [];\n\n for (const kanjiForm of word.kanjiForms)\n for (const char of kanjiForm.kanjiForm) {\n if (word.kanji.some((kanji: Kanji) => kanji.kanji === char))\n continue;\n\n const dictKanji: DictKanji | undefined = kanjiDic.find(\n (kanji: DictKanji) => kanji.kanji === char,\n );\n\n if (dictKanji) {\n const kanjiObj: Kanji = getKanji(\n dictKanji.kanji,\n kanjiDic,\n undefined,\n );\n\n word.kanji.push({\n kanji: kanjiObj.kanji,\n ...(kanjiObj.meanings ? { meanings: kanjiObj.meanings } : {}),\n });\n }\n }\n\n if (word.kanji.length === 0) delete word.kanji;\n }\n\n if (dictWord.hasPhrases === true && examples) {\n const readings: Set<string> = new Set<string>(\n word.readings\n .filter(\n (reading: Reading) =>\n (!reading.notes ||\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 const kanjiForms: Set<string> | undefined = word.kanjiForms\n ? new Set<string>(\n word.kanjiForms.map(\n (kanjiForm: KanjiForm) => kanjiForm.kanjiForm,\n ),\n )\n : undefined;\n\n const kanjiFormExamples: TanakaExample[] = [];\n const readingMatchingKanjiFormExamples: TanakaExample[] = [];\n const readingExamples: TanakaExample[] = [];\n\n const partParts: Set<string> = new Set<string>();\n\n for (const example of examples)\n for (const part of example.parts) {\n const readingAsReadingMatch: boolean =\n (part.reading !== undefined && readings.has(part.reading)) ||\n (part.inflectedForm !== undefined &&\n readings.has(part.inflectedForm));\n\n if (\n kanjiForms &&\n kanjiForms.size > 0 &&\n kanjiForms.has(part.baseForm)\n ) {\n if (readingAsReadingMatch) {\n readingMatchingKanjiFormExamples.push(example);\n partParts.add(part.baseForm).add(part.reading!);\n } else {\n kanjiFormExamples.push(example);\n partParts.add(part.baseForm);\n }\n\n break;\n }\n\n const readingAsBaseFormMatch: boolean = readings.has(part.baseForm);\n const referenceIDMatch: boolean =\n part.referenceID !== undefined &&\n word.id !== undefined &&\n part.referenceID === word.id;\n\n if (readingAsBaseFormMatch || referenceIDMatch) {\n readingExamples.push(example);\n\n if (readingAsBaseFormMatch) partParts.add(part.baseForm);\n if (referenceIDMatch) partParts.add(part.referenceID!);\n\n break;\n }\n }\n\n const exampleSize: number =\n readingMatchingKanjiFormExamples.length +\n kanjiFormExamples.length +\n readingExamples.length;\n\n const includeReadingThreshold: number = Math.max(\n 10,\n Math.round(exampleSize * 0.5),\n );\n\n const includeKanjiFormExamples: boolean = word.kanjiForms !== undefined;\n const includeReadingExamples: boolean =\n (readingExamples.length >= includeReadingThreshold &&\n readingExamples.length >= readingMatchingKanjiFormExamples.length &&\n readingExamples.length >= kanjiFormExamples.length) ||\n (readingExamples.length >= includeReadingThreshold &&\n word.usuallyInKana === true) ||\n word.kanjiForms === undefined;\n\n let wordExamples: TanakaExample[] = [\n ...readingMatchingKanjiFormExamples,\n ...(includeKanjiFormExamples ? kanjiFormExamples : []),\n ...(includeReadingExamples ? readingExamples : []),\n ];\n\n const glossSpecificExamples: TanakaExample[] = [];\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.phrase)) continue;\n\n for (const part of example.parts)\n if (\n part.glossNumber === i + 1 &&\n (partParts.has(part.baseForm) ||\n (includeReadingExamples &&\n ((part.reading && partParts.has(part.reading)) ||\n (part.inflectedForm &&\n partParts.has(part.inflectedForm)) ||\n (part.referenceID && partParts.has(part.referenceID)))))\n ) {\n example.glossNumber = {\n wordId: word.id!,\n glossNumber: i + 1,\n };\n\n glossSpecificExamples.push(example);\n seenPhrases.add(example.phrase);\n\n break outer;\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((ex: TanakaExample) => !seenPhrases.has(ex.phrase))\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: TanakaExample) => ({\n phrase: ex.furigana ?? ex.phrase,\n translation: ex.translation,\n originalPhrase: ex.phrase,\n ...(ex.glossNumber ? { glossNumber: ex.glossNumber } : {}),\n }));\n }\n\n return word;\n } else throw new Error(`Word${id ? ` ${id}` : \"\"} not found`);\n } catch (err: unknown) {\n throw err;\n }\n}\n\n/**\n * Transforms a converted `KANJIDIC` entry into a more readable format\n * @param kanjiChar The kanji character\n * @param dict An array of converted `KANJIDIC` entries\n * @param jmDict An array 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\n */\nexport function getKanji(\n kanjiChar: string,\n dict: DictKanji[],\n jmDict?: DictWord[],\n svgList?: string[],\n noteTypeName?: string,\n deckPath?: string,\n): Kanji {\n try {\n const dictKanji: DictKanji | undefined = dict.find(\n (entry: DictKanji) => entry.kanji === kanjiChar,\n );\n\n if (dictKanji) {\n const kanji: Kanji = {\n kanji: dictKanji.kanji,\n ...(dictKanji.misc ? { strokes: dictKanji.misc.strokeNumber } : {}),\n ...(dictKanji.misc && dictKanji.misc.grade\n ? { grade: dictKanji.misc.grade }\n : {}),\n ...(dictKanji.misc && dictKanji.misc.frequency\n ? { grade: dictKanji.misc.frequency }\n : {}),\n noteID: `kanji_${dictKanji.kanji}`,\n ...(noteTypeName ? { noteTypeName: noteTypeName } : {}),\n ...(deckPath ? { deckPath: deckPath } : {}),\n };\n\n for (const rm of dictKanji.readingMeaning) {\n if (rm.nanori && rm.nanori.length > 0) {\n if (kanji.nanori === undefined) kanji.nanori = [];\n kanji.nanori.push(...rm.nanori);\n }\n\n for (const group of rm.groups) {\n kanji.onyomi = group.readings\n .filter((reading: DictKanjiReading) => reading.type === \"ja_on\")\n .map((reading: DictKanjiReading) => reading.reading);\n kanji.kunyomi = group.readings\n .filter((reading: DictKanjiReading) => reading.type === \"ja_kun\")\n .map((reading: DictKanjiReading) => reading.reading);\n\n if (kanji.onyomi.length === 0) delete kanji.onyomi;\n if (kanji.kunyomi.length === 0) delete kanji.kunyomi;\n\n kanji.meanings = group.meanings;\n\n if (kanji.meanings.length === 0) delete kanji.meanings;\n }\n }\n\n if (jmDict) {\n let kanjiWords: DictWord[] | Word[] = jmDict.filter(\n (word: DictWord) =>\n word.kanjiForms && word.kanjiForms[0]!.form.includes(kanji.kanji),\n );\n\n if (kanjiWords.length > 3) kanjiWords = kanjiWords.slice(0, 2);\n\n if (kanjiWords.length > 0)\n kanji.words = kanjiWords.map((word: DictWord) => {\n const wordObj: Word = getWord(\n undefined,\n undefined,\n undefined,\n undefined,\n word,\n undefined,\n );\n\n if (!wordObj.translations)\n throw new Error(`Invalid word: ${word.id}`);\n\n const kanjiForm: KanjiForm = wordObj.kanjiForms![0]!;\n let reading: Reading | undefined = wordObj.readings.find(\n (reading: Reading) =>\n reading.notes &&\n reading.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"reading restricted to \") &&\n note.endsWith(kanjiForm.kanjiForm),\n ),\n );\n let translation: Translation | undefined =\n wordObj.translations.find(\n (translation: Translation) =>\n translation.notes &&\n translation.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"meaning restricted to \") &&\n (note.endsWith(kanjiForm.kanjiForm) ||\n (reading && note.endsWith(reading.reading))),\n ),\n );\n\n if (!reading) reading = wordObj.readings[0]!;\n if (!translation) translation = wordObj.translations[0]!;\n\n return {\n kanjiForms: [kanjiForm],\n readings: [reading],\n translations: [translation],\n };\n });\n\n if (kanjiWords.length !== 3) {\n const wordNumber: number = 3 - kanjiWords.length;\n\n kanjiWords = jmDict\n .filter(\n (word: DictWord) =>\n word.kanjiForms &&\n word.kanjiForms.some((kanjiForm: DictKanjiForm) =>\n kanjiForm.form.includes(kanji.kanji),\n ),\n )\n .map((word: DictWord) => {\n const wordObj: Word = getWord(\n undefined,\n undefined,\n undefined,\n undefined,\n word,\n undefined,\n );\n\n if (!wordObj.translations)\n throw new Error(`Invalid word: ${word.id}`);\n\n const kanjiForm: KanjiForm | undefined = wordObj.kanjiForms!.find(\n (kanjiForm: KanjiForm) =>\n kanjiForm.kanjiForm.includes(kanji.kanji),\n );\n if (!kanjiForm) throw new Error(\"Invalid kanji form\");\n\n let reading: Reading | undefined = wordObj.readings.find(\n (reading: Reading) =>\n reading.notes &&\n reading.notes.some(\n (note: string) =>\n note.toLowerCase().startsWith(\"reading restricted to \") &&\n note.endsWith(kanjiForm.kanjiForm),\n ),\n );\n let translation: Translation | undefined =\n wordObj.translations.find(\n (translation: Translation) =>\n translation.notes &&\n translation.notes.some(\n (note: string) =>\n note\n .toLowerCase()\n .startsWith(\"meaning restricted to \") &&\n (note.endsWith(kanjiForm.kanjiForm) ||\n (reading && note.endsWith(reading.reading))),\n ),\n );\n\n if (!reading) reading = wordObj.readings[0]!;\n if (!translation) translation = wordObj.translations[0]!;\n\n return {\n kanjiForms: [kanjiForm],\n readings: [reading],\n translations: [translation],\n };\n });\n\n if (kanjiWords.length > wordNumber)\n kanjiWords = kanjiWords.slice(0, wordNumber - 1);\n\n if (kanjiWords.length > 0)\n if (kanji.words) kanji.words.push(...kanjiWords);\n else kanji.words = kanjiWords;\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 kanji.tags = [];\n\n if (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(\n (meaning: string) => meaning === \"(kokuji)\",\n ),\n 1,\n );\n }\n\n kanji.tags.push(\n `kanji::onyomi::${kanji.onyomi?.length ?? 0}`,\n `kanji::kunyomi::${kanji.kunyomi?.length ?? 0}`,\n `kanji::nanori::${kanji.nanori?.length ?? 0}`,\n `kanji::strokes::${kanji.strokes ?? \"unknown\"}`,\n `kanji::words::${kanji.words?.length ?? 0}`,\n ...(kanji.svg ? [\"kanji::has_svg\"] : []),\n );\n\n return kanji;\n } else throw new Error(`Kanji ${kanjiChar} not found`);\n } catch (err: unknown) {\n throw err;\n }\n}\n\n/**\n * Same as {@link getKanji}, but with possible extra info.\n * @param kanjiChar The kanji character\n * @param info Additional info from `jpdb.io` for the kanji (mnemonic, components, words)\n * @param dict An array of converted `KANJIDIC` entries\n * @param useJpdbWords Whether or not to use the `jpdb.io` provided words (if present) instead of other words from `JMdict`\n * @param jmDict An array 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\n */\nexport function getKanjiExtended(\n kanjiChar: string,\n info: Kanji,\n dict: DictKanji[],\n useJpdbWords?: true,\n jmDict?: DictWord[],\n svgList?: string[],\n noteTypeName?: string,\n deckPath?: string,\n): Kanji {\n try {\n const kanji: Kanji = getKanji(\n kanjiChar,\n dict,\n jmDict,\n svgList,\n noteTypeName,\n deckPath,\n );\n\n if (info.components && info.components.length > 0)\n kanji.components = info.components;\n if (info.mnemonic && info.mnemonic.length > 0)\n kanji.mnemonic = info.mnemonic;\n if (useJpdbWords === true && info.words && info.words.length > 0)\n kanji.words = info.words;\n\n if (kanji.tags) {\n kanji.tags.push(`kanji::components::${kanji.components?.length ?? 0}`);\n\n if (kanji.mnemonic && kanji.mnemonic.length > 0)\n kanji.tags.push(\"kanji::has_mnemonic\");\n\n if (useJpdbWords === true && kanji.words)\n if (\n !kanji.tags.some((tag: string, index: number) => {\n if (tag.startsWith(\"kanji::words::\")) {\n kanji.tags!.splice(\n index,\n 1,\n `kanji::words::${kanji.words?.length ?? 0}`,\n );\n return true;\n } else return false;\n })\n )\n kanji.tags.push(`kanji::words::${kanji.words?.length ?? 0}`);\n }\n\n if (\n kanji.fromJpdb === true &&\n (kanji.mnemonic ||\n (kanji.components && kanji.components.length > 0) ||\n kanji.words)\n )\n kanji.source = `https://jpdb.io/kanji/${kanji.kanji}#a`;\n\n return kanji;\n } catch (err: unknown) {\n throw err;\n }\n}\n\n/**\n * Synthesizes text to speech audio using {@link [Amazon Polly](https://aws.amazon.com/polly/)}.\n * @param client An Amazon Polly Client instance\n * @param input The input in SSML format or plain text (adjust `TextType` property in `options`)\n * @param options Speech generation settings\n * @returns A promise resolving with an audio stream buffer or with `null` if the generation failed\n */\nexport async function synthesizeSpeech(\n client: PollyClient,\n input: string,\n options: Omit<SynthesizeSpeechCommandInput, \"Text\">,\n): Promise<Buffer<ArrayBuffer> | null> {\n return await new Promise<Buffer<ArrayBuffer> | null>(\n async (\n resolve: (\n value:\n | Buffer<ArrayBuffer>\n | null\n | PromiseLike<Buffer<ArrayBuffer> | null>,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n try {\n const command: SynthesizeSpeechCommand = new SynthesizeSpeechCommand({\n Text: input,\n ...options,\n });\n const response: SynthesizeSpeechCommandOutput =\n await client.send(command);\n const stream: Buffer<ArrayBuffer> | null = response.AudioStream\n ? Buffer.from(await response.AudioStream.transformToByteArray())\n : null;\n\n resolve(stream);\n } catch (err: unknown) {\n reject(err);\n }\n },\n );\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 (\n (entry as Radical).radical !== undefined &&\n (entry as Radical).reading !== undefined &&\n (entry as Radical).meanings !== undefined\n );\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 (\n (entry as Kana).kana !== undefined && (entry as Kana).reading !== undefined\n );\n}\n\nexport function isGrammar(entry: Result): entry is Grammar {\n return (\n (entry as Grammar).point !== undefined &&\n (entry as Grammar).meaning !== undefined\n );\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) => string = (entry: string, notes?: string[], phrase?: true) =>\n `<div class=\"entry\">${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 if (!entry.noteID) throw new Error(\"Invalid note ID\");\n\n const fields: string[] = [];\n\n if (isWord(entry)) {\n if (!entry.translations) throw new Error(`Invalid word: ${entry.noteID}`);\n\n fields.push(\n ...(entry.kanjiForms && !entry.usuallyInKana\n ? [\n entry.kanjiForms\n .map(\n (kanjiFormEntry: KanjiForm, index: number) =>\n `${index > 0 ? \"<details><summary>Show kanji form</summary>\" : \"\"}${createEntry(`<span class=\"word word-kanjiform\">${index === 0 ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${index === 0 ? `</rb><rt>${entry.readings[0]!.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n entry.readings\n .map(\n (readingEntry: Reading, index: number) =>\n `${index > 0 ? \"<details><summary>Show reading</summary>\" : \"\"}${createEntry(`<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`, readingEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n ]\n : [\n entry.readings\n .map(\n (readingEntry: Reading, index: number) =>\n `${index > 0 ? \"<details><summary>Show reading</summary>\" : \"\"}${createEntry(`<span class=\"word word-reading\">${readingEntry.reading}${readingEntry.audio !== undefined ? `<br>[sound:${readingEntry.audio}]` : \"\"}</span>`, readingEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\n entry.kanjiForms\n ? entry.kanjiForms\n .map(\n (kanjiFormEntry: KanjiForm, index: number) =>\n `${index > 0 ? \"<details><summary>Show kanji form</summary>\" : \"\"}${createEntry(`<span class=\"word word-kanjiform\">${index === 0 ? \"<ruby><rb>\" : \"\"}${kanjiFormEntry.kanjiForm}${index === 0 ? `</rb><rt>${entry.readings[0]!.reading}</rt></ruby>` : \"\"}</span>`, kanjiFormEntry.notes)}${index > 0 ? \"</details>\" : \"\"}`,\n )\n .join(\"\")\n : noKanjiForms,\n ]),\n entry.translations\n .map(\n (translationEntry: Translation, index: number) =>\n `<span class=\"word word-index${entry.phrases && entry.phrases.some((phrase: Phrase, index2: number) => index === index2 && phrase.glossNumber && phrase.glossNumber.wordId === entry.id && phrase.glossNumber.glossNumber === index + 1) ? \" gloss-specific\" : \"\"}\">${index + 1}</span>${index > 2 ? \"<details><summary>Show translation</summary>\" : \"\"}${createEntry(`<span class=\"word word-translation\">${translationEntry.translation}</span>`, translationEntry.notes)}${index > 2 ? \"</details>\" : \"\"}`,\n )\n .join(\"\"),\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.phrases\n ? entry.phrases\n .map(\n (phraseEntry: Phrase, index: number) =>\n `<span class=\"word word-index${entry.translations.some((_translation: Translation, index2: number) => index === index2 && phraseEntry.glossNumber && phraseEntry.glossNumber.wordId === entry.id && phraseEntry.glossNumber.glossNumber === index2 + 1) ? \" gloss-specific\" : \"\"}\">${index + 1}</span>${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 )}`,\n )\n .join(\"\")\n : '<span class=\"word word-phrase\">(no phrases) (Search on dictionaries!)</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=\"kanji kanji-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 .filter(\n (word: Word) => word.translations && word.translations.length > 0,\n )\n .map((word: Word) =>\n createEntry(\n `<span class=\"kanji kanji-words\">${word.kanjiForms && word.kanjiForms.length > 0 ? word.kanjiForms[0]!.kanjiForm : \"(no kanji form)\"} / ${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 if (fields.length > 0)\n return fields.map((field: string) => field.replaceAll(\"\\n\", \"<br>\"));\n else throw new Error(\"Invalid entry\");\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 * @returns The resulting Anki notes file's content or `undefined` if `list` is empty\n */\nexport function generateAnkiNotesFile(list: Result[]): string | undefined {\n if (list.length > 0) {\n const headers: string[] = [\n \"#separator:tab\",\n \"#html:true\",\n \"#guid column:1\",\n \"#notetype column:2\",\n \"#deck column:3\",\n ];\n\n const ankiNotes: string = list\n .filter((result: Result) => result.doNotCreateNote === undefined)\n .map((result: Result) => {\n if (!result.noteID || !result.noteTypeName || !result.deckPath)\n throw new Error(\"Invalid result\");\n\n const note: string[] = generateAnkiNote(result);\n if (headers.length === 5)\n headers.push(`#tags column:${note.length + 3}\\n`);\n\n return `${result.noteID}\\t${result.noteTypeName}\\t${result.deckPath}\\t${note.join(\"\\t\")}`;\n })\n .join(\"\\n\")\n .trim();\n\n if (ankiNotes.length === 0) throw new Error(\"Invalid list\");\n\n return `${headers.join(\"\\n\")}\\n${ankiNotes}`;\n } else console.log(\"No entries available for Anki notes creation\");\n\n return undefined;\n}\n"],
|
|
5
|
+
"mappings": "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B,2CAAsC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;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",
|
|
6
|
+
"names": ["libxml", "xml", "readings", "kanjiForms", "iconv", "reading", "translation", "kanjiForm", "_a", "_b"]
|
|
7
7
|
}
|