yomitan-core 0.1.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 +485 -0
- package/dist/anki-connect-BQyCGW3O.cjs +513 -0
- package/dist/anki-connect-BQyCGW3O.cjs.map +1 -0
- package/dist/anki-connect-CPPuhyiQ.js +6 -0
- package/dist/anki-connect-DbrQHphS.js +495 -0
- package/dist/anki-connect-DbrQHphS.js.map +1 -0
- package/dist/anki-connect-DcheJrp-.cjs +6 -0
- package/dist/anki.cjs +1758 -0
- package/dist/anki.cjs.map +1 -0
- package/dist/anki.d.cts +751 -0
- package/dist/anki.d.cts.map +1 -0
- package/dist/anki.d.ts +751 -0
- package/dist/anki.d.ts.map +1 -0
- package/dist/anki.js +1751 -0
- package/dist/anki.js.map +1 -0
- package/dist/audio-D9DvYyB7.d.cts +48 -0
- package/dist/audio-D9DvYyB7.d.cts.map +1 -0
- package/dist/audio-DQulUkDM.d.ts +48 -0
- package/dist/audio-DQulUkDM.d.ts.map +1 -0
- package/dist/audio-url-generator-BXvQaqUi.cjs +4 -0
- package/dist/audio-url-generator-Dy2hb2Mm.cjs +414 -0
- package/dist/audio-url-generator-Dy2hb2Mm.cjs.map +1 -0
- package/dist/audio-url-generator-Qi0rfzHz.js +4 -0
- package/dist/audio-url-generator-pFQAB5Nb.js +390 -0
- package/dist/audio-url-generator-pFQAB5Nb.js.map +1 -0
- package/dist/audio.cjs +7 -0
- package/dist/audio.d.cts +86 -0
- package/dist/audio.d.cts.map +1 -0
- package/dist/audio.d.ts +86 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +4 -0
- package/dist/batch-processor-BR-gB3H3.js +84 -0
- package/dist/batch-processor-BR-gB3H3.js.map +1 -0
- package/dist/batch-processor-CSF1acTw.cjs +3 -0
- package/dist/batch-processor-DFqM_L-_.cjs +91 -0
- package/dist/batch-processor-DFqM_L-_.cjs.map +1 -0
- package/dist/batch-processor-Quo9jUyf.js +3 -0
- package/dist/chunk-BCwAaXi7.cjs +31 -0
- package/dist/cjk-util-Dp0ZU0sh.cjs +167 -0
- package/dist/cjk-util-Dp0ZU0sh.cjs.map +1 -0
- package/dist/cjk-util-DubXBGDG.js +94 -0
- package/dist/cjk-util-DubXBGDG.js.map +1 -0
- package/dist/core-BUpclilG.d.cts +102 -0
- package/dist/core-BUpclilG.d.cts.map +1 -0
- package/dist/core-DFUj5GtA.d.ts +102 -0
- package/dist/core-DFUj5GtA.d.ts.map +1 -0
- package/dist/database.cjs +7 -0
- package/dist/database.d.cts +4 -0
- package/dist/database.d.ts +4 -0
- package/dist/database.js +5 -0
- package/dist/dictionary-D7l-qFt1.d.cts +316 -0
- package/dist/dictionary-D7l-qFt1.d.cts.map +1 -0
- package/dist/dictionary-_vzfBLWi.d.ts +316 -0
- package/dist/dictionary-_vzfBLWi.d.ts.map +1 -0
- package/dist/dictionary-data-util-CHnRdYZ9.cjs +378 -0
- package/dist/dictionary-data-util-CHnRdYZ9.cjs.map +1 -0
- package/dist/dictionary-data-util-CfOLfEDE.js +323 -0
- package/dist/dictionary-data-util-CfOLfEDE.js.map +1 -0
- package/dist/dictionary-database-BDC2f9zc.d.ts +58 -0
- package/dist/dictionary-database-BDC2f9zc.d.ts.map +1 -0
- package/dist/dictionary-database-CU4TsvCC.js +393 -0
- package/dist/dictionary-database-CU4TsvCC.js.map +1 -0
- package/dist/dictionary-database-DsOi04Sg.d.cts +58 -0
- package/dist/dictionary-database-DsOi04Sg.d.cts.map +1 -0
- package/dist/dictionary-database-lvFvftnO.cjs +412 -0
- package/dist/dictionary-database-lvFvftnO.cjs.map +1 -0
- package/dist/dictionary-importer-BkQQSBhm.d.ts +237 -0
- package/dist/dictionary-importer-BkQQSBhm.d.ts.map +1 -0
- package/dist/dictionary-importer-Cen1z6co.js +1821 -0
- package/dist/dictionary-importer-Cen1z6co.js.map +1 -0
- package/dist/dictionary-importer-DYmmWmcX.cjs +8 -0
- package/dist/dictionary-importer-Da3AuTZw.d.cts +237 -0
- package/dist/dictionary-importer-Da3AuTZw.d.cts.map +1 -0
- package/dist/dictionary-importer-Dhn75iZ4.cjs +1834 -0
- package/dist/dictionary-importer-Dhn75iZ4.cjs.map +1 -0
- package/dist/dictionary-importer-xWkel0h-.js +8 -0
- package/dist/dictionary-update-checker-BNE4pGTx.js +4 -0
- package/dist/dictionary-update-checker-Byjvifd2.cjs +75 -0
- package/dist/dictionary-update-checker-Byjvifd2.cjs.map +1 -0
- package/dist/dictionary-update-checker-YdpalZ41.cjs +4 -0
- package/dist/dictionary-update-checker-kKukiovj.js +69 -0
- package/dist/dictionary-update-checker-kKukiovj.js.map +1 -0
- package/dist/display-generator-BGVWiI0t.js +746 -0
- package/dist/display-generator-BGVWiI0t.js.map +1 -0
- package/dist/display-generator-BMQmG5Ov.cjs +9 -0
- package/dist/display-generator-BxZ7mBjP.js +9 -0
- package/dist/display-generator-DyP-HNzP.cjs +758 -0
- package/dist/display-generator-DyP-HNzP.cjs.map +1 -0
- package/dist/errors-BSezaJwm.cjs +35 -0
- package/dist/errors-BSezaJwm.cjs.map +1 -0
- package/dist/errors-DuuDSO5N.js +22 -0
- package/dist/errors-DuuDSO5N.js.map +1 -0
- package/dist/frequency-ranking-BXjfhhUQ.js +3 -0
- package/dist/frequency-ranking-Cx1kkIrw.cjs +3 -0
- package/dist/frequency-ranking-DEJMTMdg.js +159 -0
- package/dist/frequency-ranking-DEJMTMdg.js.map +1 -0
- package/dist/frequency-ranking-DVYxTXN-.cjs +166 -0
- package/dist/frequency-ranking-DVYxTXN-.cjs.map +1 -0
- package/dist/furigana-5HK97CY8.js +4 -0
- package/dist/furigana-9bBI9-qe.d.ts +47 -0
- package/dist/furigana-9bBI9-qe.d.ts.map +1 -0
- package/dist/furigana-B3-0y231.js +471 -0
- package/dist/furigana-B3-0y231.js.map +1 -0
- package/dist/furigana-CjOhzvZt.d.cts +47 -0
- package/dist/furigana-CjOhzvZt.d.cts.map +1 -0
- package/dist/furigana-DpZLcues.cjs +609 -0
- package/dist/furigana-DpZLcues.cjs.map +1 -0
- package/dist/furigana-h3v2ub4-.cjs +4 -0
- package/dist/import.cjs +12 -0
- package/dist/import.d.cts +107 -0
- package/dist/import.d.cts.map +1 -0
- package/dist/import.d.ts +107 -0
- package/dist/import.d.ts.map +1 -0
- package/dist/import.js +9 -0
- package/dist/index.cjs +275 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +211 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +211 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +238 -0
- package/dist/index.js.map +1 -0
- package/dist/json-DGd-cunA.js +17 -0
- package/dist/json-DGd-cunA.js.map +1 -0
- package/dist/json-DKWp-B7Y.cjs +30 -0
- package/dist/json-DKWp-B7Y.cjs.map +1 -0
- package/dist/language-KN_u-nTR.d.ts +104 -0
- package/dist/language-KN_u-nTR.d.ts.map +1 -0
- package/dist/language-xAbQxgXc.d.cts +104 -0
- package/dist/language-xAbQxgXc.d.cts.map +1 -0
- package/dist/language.cjs +15626 -0
- package/dist/language.cjs.map +1 -0
- package/dist/language.d.cts +959 -0
- package/dist/language.d.cts.map +1 -0
- package/dist/language.d.ts +959 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +15522 -0
- package/dist/language.js.map +1 -0
- package/dist/log-D8KtR3aP.cjs +67 -0
- package/dist/log-D8KtR3aP.cjs.map +1 -0
- package/dist/log-hgSll-dS.js +60 -0
- package/dist/log-hgSll-dS.js.map +1 -0
- package/dist/lookup.cjs +13 -0
- package/dist/lookup.d.cts +161 -0
- package/dist/lookup.d.cts.map +1 -0
- package/dist/lookup.d.ts +161 -0
- package/dist/lookup.d.ts.map +1 -0
- package/dist/lookup.js +10 -0
- package/dist/media-loader-BABA_E4W.js +3 -0
- package/dist/media-loader-Ce9cuANS.cjs +21 -0
- package/dist/media-loader-Ce9cuANS.cjs.map +1 -0
- package/dist/media-loader-qRti-Q6h.js +14 -0
- package/dist/media-loader-qRti-Q6h.js.map +1 -0
- package/dist/media-loader-xlUGaJrx.cjs +3 -0
- package/dist/multi-language-transformer-AlxOM6b3.js +637 -0
- package/dist/multi-language-transformer-AlxOM6b3.js.map +1 -0
- package/dist/multi-language-transformer-MdbQBBOt.cjs +685 -0
- package/dist/multi-language-transformer-MdbQBBOt.cjs.map +1 -0
- package/dist/multi-language-transformer-SEhcJXEB.d.ts +63 -0
- package/dist/multi-language-transformer-SEhcJXEB.d.ts.map +1 -0
- package/dist/multi-language-transformer-Ul9mbRce.d.cts +63 -0
- package/dist/multi-language-transformer-Ul9mbRce.d.cts.map +1 -0
- package/dist/pronunciation-generator-BtBc4q_V.js +397 -0
- package/dist/pronunciation-generator-BtBc4q_V.js.map +1 -0
- package/dist/pronunciation-generator-CBYdXYou.js +4 -0
- package/dist/pronunciation-generator-CFbZlf5J.cjs +445 -0
- package/dist/pronunciation-generator-CFbZlf5J.cjs.map +1 -0
- package/dist/pronunciation-generator-DOz9hEuk.cjs +4 -0
- package/dist/render.cjs +2796 -0
- package/dist/render.cjs.map +1 -0
- package/dist/render.d.cts +424 -0
- package/dist/render.d.cts.map +1 -0
- package/dist/render.d.ts +424 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +2777 -0
- package/dist/render.js.map +1 -0
- package/dist/sentence-parser-BPAJNzqW.js +126 -0
- package/dist/sentence-parser-BPAJNzqW.js.map +1 -0
- package/dist/sentence-parser-BVIOI64h.cjs +132 -0
- package/dist/sentence-parser-BVIOI64h.cjs.map +1 -0
- package/dist/sentence-parser-BoHO3cHn.js +5 -0
- package/dist/sentence-parser-DQVLSW0z.cjs +5 -0
- package/dist/structured-content-generator-BtOApkTW.cjs +4 -0
- package/dist/structured-content-generator-Bx62RYa8.js +4 -0
- package/dist/structured-content-generator-CLnybumI.js +276 -0
- package/dist/structured-content-generator-CLnybumI.js.map +1 -0
- package/dist/structured-content-generator-DrwkB0-k.cjs +282 -0
- package/dist/structured-content-generator-DrwkB0-k.cjs.map +1 -0
- package/dist/text-utilities-B7PIythe.js +8 -0
- package/dist/text-utilities-B7PIythe.js.map +1 -0
- package/dist/text-utilities-Del2Ivkg.cjs +15 -0
- package/dist/text-utilities-Del2Ivkg.cjs.map +1 -0
- package/dist/translator-CRPlPzqi.cjs +1545 -0
- package/dist/translator-CRPlPzqi.cjs.map +1 -0
- package/dist/translator-CWgG5drA.js +1539 -0
- package/dist/translator-CWgG5drA.js.map +1 -0
- package/dist/translator-CaGtJvnQ.cjs +6 -0
- package/dist/translator-Cc6OGxrW.d.ts +180 -0
- package/dist/translator-Cc6OGxrW.d.ts.map +1 -0
- package/dist/translator-CcA-s-W4.d.cts +180 -0
- package/dist/translator-CcA-s-W4.d.cts.map +1 -0
- package/dist/translator-CuJOTK6l.js +6 -0
- package/dist/utilities-C-lbZaJE.cjs +52 -0
- package/dist/utilities-C-lbZaJE.cjs.map +1 -0
- package/dist/utilities-bi3EF-q5.js +33 -0
- package/dist/utilities-bi3EF-q5.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-language-transformer-MdbQBBOt.cjs","names":["languageDescriptors: LanguageDescriptorAny[]","results: Language.LanguageSummary[]","results: Language.LanguageAndReadingNormalizer[]","results: Language.LanguageAndProcessors[]","textPreprocessorsArray: Language.TextProcessorWithId<unknown>[]","textPostprocessorsArray: Language.TextProcessorWithId<unknown>[]","text: string","language: string","results: Language.LanguageAndTransforms[]","descriptor: LanguageTransformDescriptor","conditionEntries: ConditionMapEntries","transforms2: InternalTransform[]","rules2: InternalRule[]","partsOfSpeech: string[]","conditionTypes: string[]","conditionType: string","sourceText: string","inflectionRules: string[]","text: string","conditions: number","trace: Trace","currentConditions: number","nextConditions: number","conditions: ConditionMapEntries","nextFlagIndex: number","targets: ConditionMapEntries","nextTargets: ConditionMapEntries","conditionFlagsMap: Map<string, number>","newFrame: TraceFrame","language: string","partsOfSpeech: string[]","conditionTypes: string[]","conditionType: string","sourceText: string","inflectionRules: string[]"],"sources":["../src/language/language-descriptors.ts","../src/language/languages.ts","../src/language/language-transformer.ts","../src/language/multi-language-transformer.ts"],"sourcesContent":["import type { LanguageDescriptorAny } from '../types/language';\nimport { normalizeRadicalCharacters } from './cjk-util';\nimport { capitalizeFirstLetter, decapitalize, removeAlphabeticDiacritics } from './text-processors';\n\nconst capitalizationPreprocessors = {\n decapitalize,\n capitalizeFirstLetter,\n};\n\nconst languageDescriptors: LanguageDescriptorAny[] = [\n {\n iso: 'bg',\n iso639_3: 'bul',\n name: 'Bulgarian',\n exampleText: 'чета',\n textPreprocessors: capitalizationPreprocessors,\n },\n { iso: 'cs', iso639_3: 'ces', name: 'Czech', exampleText: 'číst', textPreprocessors: capitalizationPreprocessors },\n {\n iso: 'da',\n iso639_3: 'dan',\n name: 'Danish',\n exampleText: 'læse',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'de',\n iso639_3: 'deu',\n name: 'German',\n exampleText: 'lesen',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'el',\n iso639_3: 'ell',\n name: 'Greek',\n exampleText: 'διαβάζω',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'en',\n iso639_3: 'eng',\n name: 'English',\n exampleText: 'read',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'eo',\n iso639_3: 'epo',\n name: 'Esperanto',\n exampleText: 'legi',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'es',\n iso639_3: 'spa',\n name: 'Spanish',\n exampleText: 'leer',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'et',\n iso639_3: 'est',\n name: 'Estonian',\n exampleText: 'lugema',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'fi',\n iso639_3: 'fin',\n name: 'Finnish',\n exampleText: 'lukea',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'fr',\n iso639_3: 'fra',\n name: 'French',\n exampleText: 'lire',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n { iso: 'ga', iso639_3: 'gle', name: 'Irish', exampleText: 'léigh', textPreprocessors: capitalizationPreprocessors },\n {\n iso: 'grc',\n iso639_3: 'grc',\n name: 'Ancient Greek',\n exampleText: 'γράφω',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n { iso: 'he', iso639_3: 'heb', name: 'Hebrew', exampleText: 'קריאה' },\n { iso: 'hi', iso639_3: 'hin', name: 'Hindi', exampleText: 'पढ़ने के लिए' },\n {\n iso: 'hu',\n iso639_3: 'hun',\n name: 'Hungarian',\n exampleText: 'olvasni',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'id',\n iso639_3: 'ind',\n name: 'Indonesian',\n exampleText: 'baca',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n {\n iso: 'it',\n iso639_3: 'ita',\n name: 'Italian',\n exampleText: 'leggere',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n {\n iso: 'la',\n iso639_3: 'lat',\n name: 'Latin',\n exampleText: 'legō',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n { iso: 'lo', iso639_3: 'lao', name: 'Lao', exampleText: 'ອ່ານ' },\n {\n iso: 'lv',\n iso639_3: 'lav',\n name: 'Latvian',\n exampleText: 'lasīt',\n textPreprocessors: capitalizationPreprocessors,\n },\n { iso: 'ja', iso639_3: 'jpn', name: 'Japanese', exampleText: '読め' },\n { iso: 'ka', iso639_3: 'kat', name: 'Georgian', exampleText: 'კითხვა' },\n { iso: 'kn', iso639_3: 'kan', name: 'Kannada', exampleText: 'ಓದು' },\n { iso: 'km', iso639_3: 'khm', name: 'Khmer', exampleText: 'អាន' },\n { iso: 'ko', iso639_3: 'kor', name: 'Korean', exampleText: '읽어' },\n {\n iso: 'mn',\n iso639_3: 'mon',\n name: 'Mongolian',\n exampleText: 'унших',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'mt',\n iso639_3: 'mlt',\n name: 'Maltese',\n exampleText: 'kiteb',\n textPreprocessors: capitalizationPreprocessors,\n },\n { iso: 'nl', iso639_3: 'nld', name: 'Dutch', exampleText: 'lezen', textPreprocessors: capitalizationPreprocessors },\n {\n iso: 'no',\n iso639_3: 'nor',\n name: 'Norwegian',\n exampleText: 'lese',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'pl',\n iso639_3: 'pol',\n name: 'Polish',\n exampleText: 'czytać',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'pt',\n iso639_3: 'por',\n name: 'Portuguese',\n exampleText: 'ler',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'ro',\n iso639_3: 'ron',\n name: 'Romanian',\n exampleText: 'citi',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n {\n iso: 'ru',\n iso639_3: 'rus',\n name: 'Russian',\n exampleText: 'читать',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'sga',\n iso639_3: 'sga',\n name: 'Old Irish',\n exampleText: 'légaid',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n {\n iso: 'sh',\n iso639_3: 'hbs',\n name: 'Serbo-Croatian',\n exampleText: 'čìtati',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'sq',\n iso639_3: 'sqi',\n name: 'Albanian',\n exampleText: 'ndihmoj',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'sv',\n iso639_3: 'swe',\n name: 'Swedish',\n exampleText: 'läsa',\n textPreprocessors: capitalizationPreprocessors,\n },\n { iso: 'th', iso639_3: 'tha', name: 'Thai', exampleText: 'อ่าน' },\n {\n iso: 'tl',\n iso639_3: 'tgl',\n name: 'Tagalog',\n exampleText: 'basahin',\n textPreprocessors: { ...capitalizationPreprocessors, removeAlphabeticDiacritics },\n },\n {\n iso: 'tr',\n iso639_3: 'tur',\n name: 'Turkish',\n exampleText: 'okumak',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'tok',\n iso639_3: 'tok',\n name: 'Toki Pona',\n exampleText: 'wile',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'uk',\n iso639_3: 'ukr',\n name: 'Ukrainian',\n exampleText: 'читати',\n textPreprocessors: capitalizationPreprocessors,\n },\n {\n iso: 'vi',\n iso639_3: 'vie',\n name: 'Vietnamese',\n exampleText: 'đọc',\n textPreprocessors: { ...capitalizationPreprocessors },\n },\n {\n iso: 'cy',\n iso639_3: 'cym',\n name: 'Welsh',\n exampleText: 'ddarllen',\n textPreprocessors: capitalizationPreprocessors,\n },\n { iso: 'yi', iso639_3: 'yid', name: 'Yiddish', exampleText: 'באַשאַפֿן' },\n {\n iso: 'yue',\n iso639_3: 'yue',\n name: 'Cantonese',\n exampleText: '讀',\n textPreprocessors: { normalizeRadicalCharacters },\n },\n {\n iso: 'zh',\n iso639_3: 'zho',\n name: 'Chinese',\n exampleText: '读',\n textPreprocessors: { normalizeRadicalCharacters },\n },\n];\n\nexport const languageDescriptorMap = new Map<string, LanguageDescriptorAny>();\nfor (const languageDescriptor of languageDescriptors) {\n languageDescriptorMap.set(languageDescriptor.iso, languageDescriptor);\n}\n","import type * as Language from '../types/language';\nimport { languageDescriptorMap } from './language-descriptors';\n\nexport function getLanguageSummaries(): Language.LanguageSummary[] {\n const results: Language.LanguageSummary[] = [];\n for (const { name, iso, iso639_3, exampleText } of languageDescriptorMap.values()) {\n results.push({ name, iso, iso639_3, exampleText });\n }\n return results;\n}\n\nexport function getAllLanguageReadingNormalizers(): Language.LanguageAndReadingNormalizer[] {\n const results: Language.LanguageAndReadingNormalizer[] = [];\n for (const { iso, readingNormalizer } of languageDescriptorMap.values()) {\n if (typeof readingNormalizer === 'undefined') {\n continue;\n }\n results.push({ iso, readingNormalizer });\n }\n return results;\n}\n\nexport function getAllLanguageTextProcessors(): Language.LanguageAndProcessors[] {\n const results: Language.LanguageAndProcessors[] = [];\n for (const { iso, textPreprocessors = {}, textPostprocessors = {} } of languageDescriptorMap.values()) {\n const textPreprocessorsArray: Language.TextProcessorWithId<unknown>[] = [];\n for (const [id, textPreprocessor] of Object.entries(textPreprocessors)) {\n textPreprocessorsArray.push({ id, textProcessor: textPreprocessor as Language.TextProcessor<unknown> });\n }\n const textPostprocessorsArray: Language.TextProcessorWithId<unknown>[] = [];\n for (const [id, textPostprocessor] of Object.entries(textPostprocessors)) {\n textPostprocessorsArray.push({ id, textProcessor: textPostprocessor as Language.TextProcessor<unknown> });\n }\n results.push({ iso, textPreprocessors: textPreprocessorsArray, textPostprocessors: textPostprocessorsArray });\n }\n return results;\n}\n\nexport function isTextLookupWorthy(text: string, language: string): boolean {\n const descriptor = languageDescriptorMap.get(language);\n if (typeof descriptor === 'undefined') {\n return false;\n }\n return typeof descriptor.isTextLookupWorthy === 'undefined' || descriptor.isTextLookupWorthy(text);\n}\n\nexport function getAllLanguageTransformDescriptors(): Language.LanguageAndTransforms[] {\n const results: Language.LanguageAndTransforms[] = [];\n for (const { iso, languageTransforms } of languageDescriptorMap.values()) {\n if (languageTransforms) {\n results.push({ iso, languageTransforms });\n }\n }\n return results;\n}\n","import type * as Dictionary from '../types/dictionary';\nimport type { ConditionMapEntries, LanguageTransformDescriptor } from '../types/language-transformer';\nimport { log } from '../util/log';\n\nexport type TraceFrame = {\n transform: string;\n ruleIndex: number;\n text: string;\n};\n\nexport type Trace = TraceFrame[];\n\nexport type TransformedText = {\n text: string;\n conditions: number;\n trace: Trace;\n};\n\ntype InternalRule = {\n type: string;\n isInflected: RegExp;\n deinflect: (inflectedWord: string) => string;\n conditionsIn: number;\n conditionsOut: number;\n};\n\ntype InternalTransform = {\n id: string;\n name: string;\n description?: string;\n rules: InternalRule[];\n heuristic: RegExp;\n};\n\nexport class LanguageTransformer {\n private _nextFlagIndex: number;\n private _transforms: InternalTransform[];\n private _conditionTypeToConditionFlagsMap: Map<string, number>;\n private _partOfSpeechToConditionFlagsMap: Map<string, number>;\n\n constructor() {\n this._nextFlagIndex = 0;\n this._transforms = [];\n this._conditionTypeToConditionFlagsMap = new Map();\n this._partOfSpeechToConditionFlagsMap = new Map();\n }\n\n clear(): void {\n this._nextFlagIndex = 0;\n this._transforms = [];\n this._conditionTypeToConditionFlagsMap.clear();\n this._partOfSpeechToConditionFlagsMap.clear();\n }\n\n addDescriptor(descriptor: LanguageTransformDescriptor): void {\n const { conditions, transforms } = descriptor;\n const conditionEntries: ConditionMapEntries = Object.entries(conditions);\n const { conditionFlagsMap, nextFlagIndex } = this._getConditionFlagsMap(conditionEntries, this._nextFlagIndex);\n\n const transforms2: InternalTransform[] = [];\n\n for (const [transformId, transform] of Object.entries(transforms)) {\n const { name, description, rules } = transform;\n const rules2: InternalRule[] = [];\n for (let j = 0, jj = rules.length; j < jj; ++j) {\n const { type, isInflected, deinflect, conditionsIn, conditionsOut } = rules[j];\n const conditionFlagsIn = this._getConditionFlagsStrict(conditionFlagsMap, conditionsIn);\n if (conditionFlagsIn === null) {\n throw new Error(`Invalid conditionsIn for transform ${transformId}.rules[${j}]`);\n }\n const conditionFlagsOut = this._getConditionFlagsStrict(conditionFlagsMap, conditionsOut);\n if (conditionFlagsOut === null) {\n throw new Error(`Invalid conditionsOut for transform ${transformId}.rules[${j}]`);\n }\n rules2.push({\n type,\n isInflected,\n deinflect,\n conditionsIn: conditionFlagsIn,\n conditionsOut: conditionFlagsOut,\n });\n }\n const isInflectedTests = rules.map((rule) => rule.isInflected);\n const heuristic = new RegExp(isInflectedTests.map((regExp) => regExp.source).join('|'));\n transforms2.push({ id: transformId, name, description, rules: rules2, heuristic });\n }\n\n this._nextFlagIndex = nextFlagIndex;\n for (const transform of transforms2) {\n this._transforms.push(transform);\n }\n\n for (const [type, { isDictionaryForm }] of conditionEntries) {\n const flags = conditionFlagsMap.get(type);\n if (typeof flags === 'undefined') {\n continue;\n }\n this._conditionTypeToConditionFlagsMap.set(type, flags);\n if (isDictionaryForm) {\n this._partOfSpeechToConditionFlagsMap.set(type, flags);\n }\n }\n }\n\n getConditionFlagsFromPartsOfSpeech(partsOfSpeech: string[]): number {\n return this._getConditionFlags(this._partOfSpeechToConditionFlagsMap, partsOfSpeech);\n }\n\n getConditionFlagsFromConditionTypes(conditionTypes: string[]): number {\n return this._getConditionFlags(this._conditionTypeToConditionFlagsMap, conditionTypes);\n }\n\n getConditionFlagsFromConditionType(conditionType: string): number {\n return this._getConditionFlags(this._conditionTypeToConditionFlagsMap, [conditionType]);\n }\n\n transform(sourceText: string): TransformedText[] {\n const results = [LanguageTransformer.createTransformedText(sourceText, 0, [])];\n for (let i = 0; i < results.length; ++i) {\n const { text, conditions, trace } = results[i];\n for (const transform of this._transforms) {\n if (!transform.heuristic.test(text)) {\n continue;\n }\n\n const { id, rules } = transform;\n for (let j = 0, jj = rules.length; j < jj; ++j) {\n const rule = rules[j];\n if (!LanguageTransformer.conditionsMatch(conditions, rule.conditionsIn)) {\n continue;\n }\n const { isInflected, deinflect } = rule;\n if (!isInflected.test(text)) {\n continue;\n }\n\n const isCycle = trace.some(\n (frame) => frame.transform === id && frame.ruleIndex === j && frame.text === text,\n );\n if (isCycle) {\n log.warn(\n new Error(\n `Cycle detected in transform[${id}] rule[${j}] for text: ${text}\\nTrace: ${JSON.stringify(trace)}`,\n ),\n );\n continue;\n }\n\n results.push(\n LanguageTransformer.createTransformedText(\n deinflect(text),\n rule.conditionsOut,\n this._extendTrace(trace, { transform: id, ruleIndex: j, text }),\n ),\n );\n }\n }\n }\n return results;\n }\n\n getUserFacingInflectionRules(inflectionRules: string[]): Dictionary.InflectionRuleChain {\n return inflectionRules.map((rule) => {\n const fullRule = this._transforms.find((transform) => transform.id === rule);\n if (typeof fullRule === 'undefined') {\n return { name: rule };\n }\n const { name, description } = fullRule;\n return description ? { name, description } : { name };\n });\n }\n\n static createTransformedText(text: string, conditions: number, trace: Trace): TransformedText {\n return { text, conditions, trace };\n }\n\n static conditionsMatch(currentConditions: number, nextConditions: number): boolean {\n return currentConditions === 0 || (currentConditions & nextConditions) !== 0;\n }\n\n private _getConditionFlagsMap(\n conditions: ConditionMapEntries,\n nextFlagIndex: number,\n ): { conditionFlagsMap: Map<string, number>; nextFlagIndex: number } {\n const conditionFlagsMap = new Map<string, number>();\n let targets: ConditionMapEntries = conditions;\n while (targets.length > 0) {\n const nextTargets: ConditionMapEntries = [];\n for (const target of targets) {\n const [type, condition] = target;\n const { subConditions } = condition;\n let flags = 0;\n if (typeof subConditions === 'undefined') {\n if (nextFlagIndex >= 32) {\n throw new Error('Maximum number of conditions was exceeded');\n }\n flags = 1 << nextFlagIndex;\n ++nextFlagIndex;\n } else {\n const multiFlags = this._getConditionFlagsStrict(conditionFlagsMap, subConditions);\n if (multiFlags === null) {\n nextTargets.push(target);\n continue;\n }\n flags = multiFlags;\n }\n conditionFlagsMap.set(type, flags);\n }\n if (nextTargets.length === targets.length) {\n throw new Error('Maximum number of conditions was exceeded');\n }\n targets = nextTargets;\n }\n return { conditionFlagsMap, nextFlagIndex };\n }\n\n private _getConditionFlagsStrict(conditionFlagsMap: Map<string, number>, conditionTypes: string[]): number | null {\n let flags = 0;\n for (const conditionType of conditionTypes) {\n const flags2 = conditionFlagsMap.get(conditionType);\n if (typeof flags2 === 'undefined') {\n return null;\n }\n flags |= flags2;\n }\n return flags;\n }\n\n private _getConditionFlags(conditionFlagsMap: Map<string, number>, conditionTypes: string[]): number {\n let flags = 0;\n for (const conditionType of conditionTypes) {\n let flags2 = conditionFlagsMap.get(conditionType);\n if (typeof flags2 === 'undefined') {\n flags2 = 0;\n }\n flags |= flags2;\n }\n return flags;\n }\n\n private _extendTrace(trace: Trace, newFrame: TraceFrame): Trace {\n const newTrace = [newFrame];\n for (const { transform, ruleIndex, text } of trace) {\n newTrace.push({ transform, ruleIndex, text });\n }\n return newTrace;\n }\n}\n","import type * as Dictionary from '../types/dictionary';\nimport { LanguageTransformer } from './language-transformer';\nimport type { TransformedText } from './language-transformer';\nimport { getAllLanguageTransformDescriptors } from './languages';\n\nexport class MultiLanguageTransformer {\n private _languageTransformers: Map<string, LanguageTransformer>;\n\n constructor() {\n this._languageTransformers = new Map();\n }\n\n prepare(): void {\n const languagesWithTransforms = getAllLanguageTransformDescriptors();\n for (const { languageTransforms: descriptor } of languagesWithTransforms) {\n const languageTransformer = new LanguageTransformer();\n languageTransformer.addDescriptor(descriptor);\n this._languageTransformers.set(descriptor.language, languageTransformer);\n }\n }\n\n getConditionFlagsFromPartsOfSpeech(language: string, partsOfSpeech: string[]): number {\n const languageTransformer = this._languageTransformers.get(language);\n return typeof languageTransformer !== 'undefined'\n ? languageTransformer.getConditionFlagsFromPartsOfSpeech(partsOfSpeech)\n : 0;\n }\n\n getConditionFlagsFromConditionTypes(language: string, conditionTypes: string[]): number {\n const languageTransformer = this._languageTransformers.get(language);\n return typeof languageTransformer !== 'undefined'\n ? languageTransformer.getConditionFlagsFromConditionTypes(conditionTypes)\n : 0;\n }\n\n getConditionFlagsFromConditionType(language: string, conditionType: string): number {\n const languageTransformer = this._languageTransformers.get(language);\n return typeof languageTransformer !== 'undefined'\n ? languageTransformer.getConditionFlagsFromConditionType(conditionType)\n : 0;\n }\n\n transform(language: string, sourceText: string): TransformedText[] {\n const languageTransformer = this._languageTransformers.get(language);\n if (typeof languageTransformer === 'undefined') {\n return [LanguageTransformer.createTransformedText(sourceText, 0, [])];\n }\n return languageTransformer.transform(sourceText);\n }\n\n getUserFacingInflectionRules(language: string, inflectionRules: string[]): Dictionary.InflectionRuleChain {\n const languageTransformer = this._languageTransformers.get(language);\n if (typeof languageTransformer === 'undefined') {\n return inflectionRules.map((rule) => ({ name: rule }));\n }\n return languageTransformer.getUserFacingInflectionRules(inflectionRules);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { InflectionRuleChain } from "./dictionary-_vzfBLWi.js";
|
|
2
|
+
import { LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageSummary, LanguageTransformDescriptor } from "./language-KN_u-nTR.js";
|
|
3
|
+
|
|
4
|
+
//#region src/language/languages.d.ts
|
|
5
|
+
declare function getLanguageSummaries(): LanguageSummary[];
|
|
6
|
+
declare function getAllLanguageReadingNormalizers(): LanguageAndReadingNormalizer[];
|
|
7
|
+
declare function getAllLanguageTextProcessors(): LanguageAndProcessors[];
|
|
8
|
+
declare function isTextLookupWorthy(text: string, language: string): boolean;
|
|
9
|
+
declare function getAllLanguageTransformDescriptors(): LanguageAndTransforms[];
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/language/language-transformer.d.ts
|
|
13
|
+
//# sourceMappingURL=languages.d.ts.map
|
|
14
|
+
type TraceFrame = {
|
|
15
|
+
transform: string;
|
|
16
|
+
ruleIndex: number;
|
|
17
|
+
text: string;
|
|
18
|
+
};
|
|
19
|
+
type Trace = TraceFrame[];
|
|
20
|
+
type TransformedText = {
|
|
21
|
+
text: string;
|
|
22
|
+
conditions: number;
|
|
23
|
+
trace: Trace;
|
|
24
|
+
};
|
|
25
|
+
declare class LanguageTransformer {
|
|
26
|
+
private _nextFlagIndex;
|
|
27
|
+
private _transforms;
|
|
28
|
+
private _conditionTypeToConditionFlagsMap;
|
|
29
|
+
private _partOfSpeechToConditionFlagsMap;
|
|
30
|
+
constructor();
|
|
31
|
+
clear(): void;
|
|
32
|
+
addDescriptor(descriptor: LanguageTransformDescriptor): void;
|
|
33
|
+
getConditionFlagsFromPartsOfSpeech(partsOfSpeech: string[]): number;
|
|
34
|
+
getConditionFlagsFromConditionTypes(conditionTypes: string[]): number;
|
|
35
|
+
getConditionFlagsFromConditionType(conditionType: string): number;
|
|
36
|
+
transform(sourceText: string): TransformedText[];
|
|
37
|
+
getUserFacingInflectionRules(inflectionRules: string[]): InflectionRuleChain;
|
|
38
|
+
static createTransformedText(text: string, conditions: number, trace: Trace): TransformedText;
|
|
39
|
+
static conditionsMatch(currentConditions: number, nextConditions: number): boolean;
|
|
40
|
+
private _getConditionFlagsMap;
|
|
41
|
+
private _getConditionFlagsStrict;
|
|
42
|
+
private _getConditionFlags;
|
|
43
|
+
private _extendTrace;
|
|
44
|
+
} //#endregion
|
|
45
|
+
//#region src/language/multi-language-transformer.d.ts
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=language-transformer.d.ts.map
|
|
48
|
+
declare class MultiLanguageTransformer {
|
|
49
|
+
private _languageTransformers;
|
|
50
|
+
constructor();
|
|
51
|
+
prepare(): void;
|
|
52
|
+
getConditionFlagsFromPartsOfSpeech(language: string, partsOfSpeech: string[]): number;
|
|
53
|
+
getConditionFlagsFromConditionTypes(language: string, conditionTypes: string[]): number;
|
|
54
|
+
getConditionFlagsFromConditionType(language: string, conditionType: string): number;
|
|
55
|
+
transform(language: string, sourceText: string): TransformedText[];
|
|
56
|
+
getUserFacingInflectionRules(language: string, inflectionRules: string[]): InflectionRuleChain;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
//# sourceMappingURL=multi-language-transformer.d.ts.map
|
|
61
|
+
|
|
62
|
+
export { LanguageTransformer as LanguageTransformer$1, MultiLanguageTransformer as MultiLanguageTransformer$1, Trace, TraceFrame, TransformedText, getAllLanguageReadingNormalizers as getAllLanguageReadingNormalizers$1, getAllLanguageTextProcessors as getAllLanguageTextProcessors$1, getAllLanguageTransformDescriptors as getAllLanguageTransformDescriptors$1, getLanguageSummaries as getLanguageSummaries$1, isTextLookupWorthy as isTextLookupWorthy$1 };
|
|
63
|
+
//# sourceMappingURL=multi-language-transformer-SEhcJXEB.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-language-transformer-SEhcJXEB.d.ts","names":[],"sources":["../src/language/languages.ts","../src/language/language-transformer.ts","../src/language/multi-language-transformer.ts"],"sourcesContent":null,"mappings":";;;;iBAGgB,oBAAA,CAAA,GAAoB;iBAQpB,gCAAA,CAAA,GAAgC;iBAWhC,4BAAA,CAAA,GAA4B;AAnB5B,iBAmCA,kBAAA,CAnCoB,IAAA,EAAA,MAA4B,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAQhD,iBAmCA,kCAAA,CAAA,CAnCgC,EAmCE,qBAnCuC,EAAA;;;;AAWzF;KClBY,UAAA;;EDDI,SAAA,EAAA,MAAA;EAQA,IAAA,EAAA,MAAA;AAWhB,CAAA;AAgBgB,KC5BJ,KAAA,GAAQ,UD4Bc,EAAA;AAQlB,KClCJ,eAAA,GDkCI;;;SC/BL;AAXX,CAAA;AAMY,cAwBC,mBAAA,CAxBiB;EAElB,QAAA,cAAe;EAsBd,QAAA,WAAA;EAAmB,QAAA,iCAAA;EAAA,QAoBF,gCAAA;EAA2B,WA8DtB,CAAA;EAAe,KAAA,CAAA,CAAA,EAAA,IAAA;EA6CyC,aAWjB,CAAA,UAAA,EAtH5C,2BAsH4C,CAAA,EAAA,IAAA;EAAK,kCAAG,CAAA,aAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAAe,mCAAA,CAAA,cAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;;iCAxD9D;2DAAe;EC/GrC,OAAA,qBAAwB,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EDuKqC,KCvKrC,CAAA,EDuK6C,eCvK7C;EAAA,OAAA,eAAA,CAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAA,QAqCgB,qBAAA;EAAe,QAAA,wBAAA;EAQyC,QAAA,kBAAA;;;;;;cA7ChG,wBAAA;;EFFG,WAAA,CAAA;EAQA,OAAA,CAAA,CAAA,EAAA,IAAA;EAWA,kCAA4B,CAAA,QAAA,EAAA,MAAA,EAAA,aAAkC,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAgB9D,mCAAkB,CAAA,QAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAQlB,kCAAA,CAAA,QAAkC,EAAA,MAAA,EAAA,aAAA,EAAA,MAAkC,CAAA,EAAA,MAAA;mDEJ/B;6EAAe;;;;ADtCpE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { InflectionRuleChain } from "./dictionary-D7l-qFt1.cjs";
|
|
2
|
+
import { LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageSummary, LanguageTransformDescriptor } from "./language-xAbQxgXc.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/language/languages.d.ts
|
|
5
|
+
declare function getLanguageSummaries(): LanguageSummary[];
|
|
6
|
+
declare function getAllLanguageReadingNormalizers(): LanguageAndReadingNormalizer[];
|
|
7
|
+
declare function getAllLanguageTextProcessors(): LanguageAndProcessors[];
|
|
8
|
+
declare function isTextLookupWorthy(text: string, language: string): boolean;
|
|
9
|
+
declare function getAllLanguageTransformDescriptors(): LanguageAndTransforms[];
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/language/language-transformer.d.ts
|
|
13
|
+
//# sourceMappingURL=languages.d.ts.map
|
|
14
|
+
type TraceFrame = {
|
|
15
|
+
transform: string;
|
|
16
|
+
ruleIndex: number;
|
|
17
|
+
text: string;
|
|
18
|
+
};
|
|
19
|
+
type Trace = TraceFrame[];
|
|
20
|
+
type TransformedText = {
|
|
21
|
+
text: string;
|
|
22
|
+
conditions: number;
|
|
23
|
+
trace: Trace;
|
|
24
|
+
};
|
|
25
|
+
declare class LanguageTransformer {
|
|
26
|
+
private _nextFlagIndex;
|
|
27
|
+
private _transforms;
|
|
28
|
+
private _conditionTypeToConditionFlagsMap;
|
|
29
|
+
private _partOfSpeechToConditionFlagsMap;
|
|
30
|
+
constructor();
|
|
31
|
+
clear(): void;
|
|
32
|
+
addDescriptor(descriptor: LanguageTransformDescriptor): void;
|
|
33
|
+
getConditionFlagsFromPartsOfSpeech(partsOfSpeech: string[]): number;
|
|
34
|
+
getConditionFlagsFromConditionTypes(conditionTypes: string[]): number;
|
|
35
|
+
getConditionFlagsFromConditionType(conditionType: string): number;
|
|
36
|
+
transform(sourceText: string): TransformedText[];
|
|
37
|
+
getUserFacingInflectionRules(inflectionRules: string[]): InflectionRuleChain;
|
|
38
|
+
static createTransformedText(text: string, conditions: number, trace: Trace): TransformedText;
|
|
39
|
+
static conditionsMatch(currentConditions: number, nextConditions: number): boolean;
|
|
40
|
+
private _getConditionFlagsMap;
|
|
41
|
+
private _getConditionFlagsStrict;
|
|
42
|
+
private _getConditionFlags;
|
|
43
|
+
private _extendTrace;
|
|
44
|
+
} //#endregion
|
|
45
|
+
//#region src/language/multi-language-transformer.d.ts
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=language-transformer.d.ts.map
|
|
48
|
+
declare class MultiLanguageTransformer {
|
|
49
|
+
private _languageTransformers;
|
|
50
|
+
constructor();
|
|
51
|
+
prepare(): void;
|
|
52
|
+
getConditionFlagsFromPartsOfSpeech(language: string, partsOfSpeech: string[]): number;
|
|
53
|
+
getConditionFlagsFromConditionTypes(language: string, conditionTypes: string[]): number;
|
|
54
|
+
getConditionFlagsFromConditionType(language: string, conditionType: string): number;
|
|
55
|
+
transform(language: string, sourceText: string): TransformedText[];
|
|
56
|
+
getUserFacingInflectionRules(language: string, inflectionRules: string[]): InflectionRuleChain;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
//# sourceMappingURL=multi-language-transformer.d.ts.map
|
|
61
|
+
|
|
62
|
+
export { LanguageTransformer, MultiLanguageTransformer, Trace, TraceFrame, TransformedText, getAllLanguageReadingNormalizers, getAllLanguageTextProcessors, getAllLanguageTransformDescriptors, getLanguageSummaries, isTextLookupWorthy };
|
|
63
|
+
//# sourceMappingURL=multi-language-transformer-Ul9mbRce.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-language-transformer-Ul9mbRce.d.cts","names":[],"sources":["../src/language/languages.ts","../src/language/language-transformer.ts","../src/language/multi-language-transformer.ts"],"sourcesContent":null,"mappings":";;;;iBAGgB,oBAAA,CAAA,GAAoB;iBAQpB,gCAAA,CAAA,GAAgC;iBAWhC,4BAAA,CAAA,GAA4B;AAnB5B,iBAmCA,kBAAA,CAnCoB,IAAA,EAAA,MAA4B,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAQhD,iBAmCA,kCAAA,CAAA,CAnCgC,EAmCE,qBAnCuC,EAAA;;;;AAWzF;KClBY,UAAA;;EDDI,SAAA,EAAA,MAAA;EAQA,IAAA,EAAA,MAAA;AAWhB,CAAA;AAgBgB,KC5BJ,KAAA,GAAQ,UD4Bc,EAAA;AAQlB,KClCJ,eAAA,GDkCI;;;SC/BL;AAXX,CAAA;AAMY,cAwBC,mBAAA,CAxBiB;EAElB,QAAA,cAAe;EAsBd,QAAA,WAAA;EAAmB,QAAA,iCAAA;EAAA,QAoBF,gCAAA;EAA2B,WA8DtB,CAAA;EAAe,KAAA,CAAA,CAAA,EAAA,IAAA;EA6CyC,aAWjB,CAAA,UAAA,EAtH5C,2BAsH4C,CAAA,EAAA,IAAA;EAAK,kCAAG,CAAA,aAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAAe,mCAAA,CAAA,cAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;;iCAxD9D;2DAAe;EC/GrC,OAAA,qBAAwB,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EDuKqC,KCvKrC,CAAA,EDuK6C,eCvK7C;EAAA,OAAA,eAAA,CAAA,iBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAA,QAqCgB,qBAAA;EAAe,QAAA,wBAAA;EAQyC,QAAA,kBAAA;;;;;;cA7ChG,wBAAA;;EFFG,WAAA,CAAA;EAQA,OAAA,CAAA,CAAA,EAAA,IAAA;EAWA,kCAA4B,CAAA,QAAA,EAAA,MAAA,EAAA,aAAkC,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAgB9D,mCAAkB,CAAA,QAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;EAQlB,kCAAA,CAAA,QAAkC,EAAA,MAAA,EAAA,aAAA,EAAA,MAAkC,CAAA,EAAA,MAAA;mDEJ/B;6EAAe;;;;ADtCpE"}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { CJK_IDEOGRAPH_RANGES, isCodePointInRanges } from "./cjk-util-DubXBGDG.js";
|
|
2
|
+
|
|
3
|
+
//#region src/render/japanese-util.ts
|
|
4
|
+
const SMALL_KANA_SET = new Set("ぁぃぅぇぉゃゅょゎァィゥェォャュョヮ");
|
|
5
|
+
const kana = "うゔ-かが-きぎ-くぐ-けげ-こご-さざ-しじ-すず-せぜ-そぞ-ただ-ちぢ-つづ-てで-とど-はばぱひびぴふぶぷへべぺほぼぽワヷ-ヰヸ-ウヴ-ヱヹ-ヲヺ-カガ-キギ-クグ-ケゲ-コゴ-サザ-シジ-スズ-セゼ-ソゾ-タダ-チヂ-ツヅ-テデ-トド-ハバパヒビピフブプヘベペホボポ";
|
|
6
|
+
const DIACRITIC_MAPPING = new Map();
|
|
7
|
+
for (let i = 0, ii = kana.length; i < ii; i += 3) {
|
|
8
|
+
const character = kana[i];
|
|
9
|
+
const dakuten = kana[i + 1];
|
|
10
|
+
const handakuten = kana[i + 2];
|
|
11
|
+
DIACRITIC_MAPPING.set(dakuten, {
|
|
12
|
+
character,
|
|
13
|
+
type: "dakuten"
|
|
14
|
+
});
|
|
15
|
+
if (handakuten !== "-") DIACRITIC_MAPPING.set(handakuten, {
|
|
16
|
+
character,
|
|
17
|
+
type: "handakuten"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Checks if a code point represents a CJK kanji character.
|
|
22
|
+
*/
|
|
23
|
+
function isCodePointKanji(codePoint) {
|
|
24
|
+
return isCodePointInRanges(codePoint, CJK_IDEOGRAPH_RANGES);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Determines whether a mora at a given index has high pitch.
|
|
28
|
+
* @param moraIndex - The 0-based mora index to check.
|
|
29
|
+
* @param pitchAccentValue - The pitch accent pattern (number = downstep position, string = HL pattern).
|
|
30
|
+
* @returns True if the mora at the given index has high pitch.
|
|
31
|
+
*/
|
|
32
|
+
function isMoraPitchHigh(moraIndex, pitchAccentValue) {
|
|
33
|
+
if (typeof pitchAccentValue === "string") return pitchAccentValue[moraIndex] === "H";
|
|
34
|
+
switch (pitchAccentValue) {
|
|
35
|
+
case 0: return moraIndex > 0;
|
|
36
|
+
case 1: return moraIndex < 1;
|
|
37
|
+
default: return moraIndex > 0 && moraIndex < pitchAccentValue;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Determines the pitch accent category for a word.
|
|
42
|
+
* @param text - The reading text.
|
|
43
|
+
* @param pitchAccentValue - The pitch accent pattern.
|
|
44
|
+
* @param isVerbOrAdjective - Whether the word is a verb or adjective (not a noun).
|
|
45
|
+
* @returns The pitch category, or null if it cannot be determined.
|
|
46
|
+
*/
|
|
47
|
+
function getPitchCategory(text, pitchAccentValue, isVerbOrAdjective) {
|
|
48
|
+
const pitchAccentDownstepPosition = typeof pitchAccentValue === "string" ? getDownstepPositions(pitchAccentValue)[0] : pitchAccentValue;
|
|
49
|
+
if (pitchAccentDownstepPosition === 0) return "heiban";
|
|
50
|
+
if (isVerbOrAdjective) return pitchAccentDownstepPosition > 0 ? "kifuku" : null;
|
|
51
|
+
if (pitchAccentDownstepPosition === 1) return "atamadaka";
|
|
52
|
+
if (pitchAccentDownstepPosition > 1) return pitchAccentDownstepPosition >= getKanaMoraCount(text) ? "odaka" : "nakadaka";
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extracts downstep positions from an HL pitch string pattern.
|
|
57
|
+
* @param pitchString - A string of 'H' and 'L' characters representing pitch.
|
|
58
|
+
* @returns Array of downstep positions (1-indexed mora positions where pitch drops).
|
|
59
|
+
*/
|
|
60
|
+
function getDownstepPositions(pitchString) {
|
|
61
|
+
const downsteps = [];
|
|
62
|
+
const moraCount = pitchString.length;
|
|
63
|
+
for (let i = 0; i < moraCount; i++) if (i > 0 && pitchString[i - 1] === "H" && pitchString[i] === "L") downsteps.push(i);
|
|
64
|
+
if (downsteps.length === 0) downsteps.push(pitchString.startsWith("L") ? 0 : -1);
|
|
65
|
+
return downsteps;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Splits a kana text into an array of morae, combining small kana with their preceding character.
|
|
69
|
+
* @param text - The kana text to split.
|
|
70
|
+
* @returns Array of mora strings.
|
|
71
|
+
*/
|
|
72
|
+
function getKanaMorae(text) {
|
|
73
|
+
const morae = [];
|
|
74
|
+
let i;
|
|
75
|
+
for (const c of text) if (SMALL_KANA_SET.has(c) && (i = morae.length) > 0) morae[i - 1] += c;
|
|
76
|
+
else morae.push(c);
|
|
77
|
+
return morae;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Counts the number of morae in a kana text.
|
|
81
|
+
* @param text - The kana text to count morae in.
|
|
82
|
+
* @returns The number of morae.
|
|
83
|
+
*/
|
|
84
|
+
function getKanaMoraCount(text) {
|
|
85
|
+
let moraCount = 0;
|
|
86
|
+
for (const c of text) if (!(SMALL_KANA_SET.has(c) && moraCount > 0)) ++moraCount;
|
|
87
|
+
return moraCount;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Gets diacritic information for a kana character.
|
|
91
|
+
* If the character is a dakuten or handakuten variant, returns the base character and type.
|
|
92
|
+
* @param character - The kana character to check.
|
|
93
|
+
* @returns An object with the base character and diacritic type, or null if not a diacritic variant.
|
|
94
|
+
*/
|
|
95
|
+
function getKanaDiacriticInfo(character) {
|
|
96
|
+
const info = DIACRITIC_MAPPING.get(character);
|
|
97
|
+
return typeof info !== "undefined" ? {
|
|
98
|
+
character: info.character,
|
|
99
|
+
type: info.type
|
|
100
|
+
} : null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/render/pronunciation-generator.ts
|
|
105
|
+
/**
|
|
106
|
+
* Generates DOM elements for pronunciation visualizations including
|
|
107
|
+
* pitch accent text, graphs, and downstep position notation.
|
|
108
|
+
*/
|
|
109
|
+
var PronunciationGenerator = class {
|
|
110
|
+
_document;
|
|
111
|
+
/**
|
|
112
|
+
* Creates a new PronunciationGenerator.
|
|
113
|
+
* @param doc - The Document object to use for creating DOM elements.
|
|
114
|
+
*/
|
|
115
|
+
constructor(doc) {
|
|
116
|
+
this._document = doc;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Creates a span element containing styled mora elements for pronunciation text.
|
|
120
|
+
* @param morae - Array of mora strings.
|
|
121
|
+
* @param pitchPositions - The pitch accent downstep position (number or HL string pattern).
|
|
122
|
+
* @param nasalPositions - Array of 1-indexed mora positions that are nasalized.
|
|
123
|
+
* @param devoicePositions - Array of 1-indexed mora positions that are devoiced.
|
|
124
|
+
* @returns A span element with class `pronunciation-text`.
|
|
125
|
+
*/
|
|
126
|
+
createPronunciationText(morae, pitchPositions, nasalPositions, devoicePositions) {
|
|
127
|
+
const nasalPositionsSet = nasalPositions.length > 0 ? new Set(nasalPositions) : null;
|
|
128
|
+
const devoicePositionsSet = devoicePositions.length > 0 ? new Set(devoicePositions) : null;
|
|
129
|
+
const container = this._document.createElement("span");
|
|
130
|
+
container.className = "pronunciation-text";
|
|
131
|
+
for (let i = 0, ii = morae.length; i < ii; ++i) {
|
|
132
|
+
const i1 = i + 1;
|
|
133
|
+
const mora = morae[i];
|
|
134
|
+
const highPitch = isMoraPitchHigh(i, pitchPositions);
|
|
135
|
+
const highPitchNext = isMoraPitchHigh(i1, pitchPositions);
|
|
136
|
+
const nasal = nasalPositionsSet?.has(i1);
|
|
137
|
+
const devoice = devoicePositionsSet?.has(i1);
|
|
138
|
+
const n1 = this._document.createElement("span");
|
|
139
|
+
n1.className = "pronunciation-mora";
|
|
140
|
+
n1.dataset.position = `${i}`;
|
|
141
|
+
n1.dataset.pitch = highPitch ? "high" : "low";
|
|
142
|
+
n1.dataset.pitchNext = highPitchNext ? "high" : "low";
|
|
143
|
+
const characterNodes = [];
|
|
144
|
+
for (const character of mora) {
|
|
145
|
+
const n2 = this._document.createElement("span");
|
|
146
|
+
n2.className = "pronunciation-character";
|
|
147
|
+
n2.textContent = character;
|
|
148
|
+
n1.appendChild(n2);
|
|
149
|
+
characterNodes.push(n2);
|
|
150
|
+
}
|
|
151
|
+
if (devoice) {
|
|
152
|
+
n1.dataset.devoice = "true";
|
|
153
|
+
const n3 = this._document.createElement("span");
|
|
154
|
+
n3.className = "pronunciation-devoice-indicator";
|
|
155
|
+
n1.appendChild(n3);
|
|
156
|
+
}
|
|
157
|
+
if (nasal && characterNodes.length > 0) {
|
|
158
|
+
n1.dataset.nasal = "true";
|
|
159
|
+
const group = this._document.createElement("span");
|
|
160
|
+
group.className = "pronunciation-character-group";
|
|
161
|
+
const n2 = characterNodes[0];
|
|
162
|
+
const character = n2.textContent;
|
|
163
|
+
const characterInfo = getKanaDiacriticInfo(character);
|
|
164
|
+
if (characterInfo !== null) {
|
|
165
|
+
n1.dataset.originalText = mora;
|
|
166
|
+
n2.dataset.originalText = character;
|
|
167
|
+
n2.textContent = characterInfo.character;
|
|
168
|
+
}
|
|
169
|
+
let n3 = this._document.createElement("span");
|
|
170
|
+
n3.className = "pronunciation-nasal-diacritic";
|
|
171
|
+
n3.textContent = "゚";
|
|
172
|
+
group.appendChild(n3);
|
|
173
|
+
n3 = this._document.createElement("span");
|
|
174
|
+
n3.className = "pronunciation-nasal-indicator";
|
|
175
|
+
group.appendChild(n3);
|
|
176
|
+
n2.parentNode.replaceChild(group, n2);
|
|
177
|
+
group.insertBefore(n2, group.firstChild);
|
|
178
|
+
}
|
|
179
|
+
const line = this._document.createElement("span");
|
|
180
|
+
line.className = "pronunciation-mora-line";
|
|
181
|
+
n1.appendChild(line);
|
|
182
|
+
container.appendChild(n1);
|
|
183
|
+
}
|
|
184
|
+
return container;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Creates an SVG element representing the pitch accent graph.
|
|
188
|
+
* @param morae - Array of mora strings.
|
|
189
|
+
* @param pitchPositions - The pitch accent downstep position (number or HL string pattern).
|
|
190
|
+
* @returns An SVG element with class `pronunciation-graph`.
|
|
191
|
+
*/
|
|
192
|
+
createPronunciationGraph(morae, pitchPositions) {
|
|
193
|
+
const ii = morae.length;
|
|
194
|
+
const svgns = "http://www.w3.org/2000/svg";
|
|
195
|
+
const svg = this._document.createElementNS(svgns, "svg");
|
|
196
|
+
svg.setAttribute("xmlns", svgns);
|
|
197
|
+
svg.setAttribute("class", "pronunciation-graph");
|
|
198
|
+
svg.setAttribute("focusable", "false");
|
|
199
|
+
svg.setAttribute("viewBox", `0 0 ${50 * (ii + 1)} 100`);
|
|
200
|
+
if (ii <= 0) return svg;
|
|
201
|
+
const path1 = this._document.createElementNS(svgns, "path");
|
|
202
|
+
svg.appendChild(path1);
|
|
203
|
+
const path2 = this._document.createElementNS(svgns, "path");
|
|
204
|
+
svg.appendChild(path2);
|
|
205
|
+
const pathPoints = [];
|
|
206
|
+
for (let i = 0; i < ii; ++i) {
|
|
207
|
+
const highPitch = isMoraPitchHigh(i, pitchPositions);
|
|
208
|
+
const highPitchNext = isMoraPitchHigh(i + 1, pitchPositions);
|
|
209
|
+
const x = i * 50 + 25;
|
|
210
|
+
const y = highPitch ? 25 : 75;
|
|
211
|
+
if (highPitch && !highPitchNext) this._addGraphDotDownstep(svg, svgns, x, y);
|
|
212
|
+
else this._addGraphDot(svg, svgns, x, y);
|
|
213
|
+
pathPoints.push(`${x} ${y}`);
|
|
214
|
+
}
|
|
215
|
+
path1.setAttribute("class", "pronunciation-graph-line");
|
|
216
|
+
path1.setAttribute("d", `M${pathPoints.join(" L")}`);
|
|
217
|
+
pathPoints.splice(0, ii - 1);
|
|
218
|
+
{
|
|
219
|
+
const highPitch = isMoraPitchHigh(ii, pitchPositions);
|
|
220
|
+
const x = ii * 50 + 25;
|
|
221
|
+
const y = highPitch ? 25 : 75;
|
|
222
|
+
this._addGraphTriangle(svg, svgns, x, y);
|
|
223
|
+
pathPoints.push(`${x} ${y}`);
|
|
224
|
+
}
|
|
225
|
+
path2.setAttribute("class", "pronunciation-graph-line-tail");
|
|
226
|
+
path2.setAttribute("d", `M${pathPoints.join(" L")}`);
|
|
227
|
+
return svg;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Creates a span element showing the downstep position in bracket notation.
|
|
231
|
+
* @param downstepPositions - The downstep position (number or HL string pattern).
|
|
232
|
+
* @returns A span element with class `pronunciation-downstep-notation`.
|
|
233
|
+
*/
|
|
234
|
+
createPronunciationDownstepPosition(downstepPositions) {
|
|
235
|
+
const downsteps = typeof downstepPositions === "string" ? getDownstepPositions(downstepPositions) : downstepPositions;
|
|
236
|
+
const downstepPositionString = `${downsteps}`;
|
|
237
|
+
const n1 = this._document.createElement("span");
|
|
238
|
+
n1.className = "pronunciation-downstep-notation";
|
|
239
|
+
n1.dataset.downstepPosition = downstepPositionString;
|
|
240
|
+
let n2 = this._document.createElement("span");
|
|
241
|
+
n2.className = "pronunciation-downstep-notation-prefix";
|
|
242
|
+
n2.textContent = "[";
|
|
243
|
+
n1.appendChild(n2);
|
|
244
|
+
n2 = this._document.createElement("span");
|
|
245
|
+
n2.className = "pronunciation-downstep-notation-number";
|
|
246
|
+
n2.textContent = downstepPositionString;
|
|
247
|
+
n1.appendChild(n2);
|
|
248
|
+
n2 = this._document.createElement("span");
|
|
249
|
+
n2.className = "pronunciation-downstep-notation-suffix";
|
|
250
|
+
n2.textContent = "]";
|
|
251
|
+
n1.appendChild(n2);
|
|
252
|
+
return n1;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Creates a Jidoujisho-style pronunciation graph SVG.
|
|
256
|
+
* @param mora - Array of mora strings.
|
|
257
|
+
* @param pitchPositions - The pitch accent downstep position (number or HL string pattern).
|
|
258
|
+
* @returns An SVG element.
|
|
259
|
+
*/
|
|
260
|
+
createPronunciationGraphJJ(mora, pitchPositions) {
|
|
261
|
+
const patt = this._pitchValueToPattJJ(mora.length, pitchPositions);
|
|
262
|
+
const positions = Math.max(mora.length, patt.length);
|
|
263
|
+
const stepWidth = 35;
|
|
264
|
+
const marginLr = 16;
|
|
265
|
+
const svgWidth = Math.max(0, (positions - 1) * stepWidth + marginLr * 2);
|
|
266
|
+
const svgns = "http://www.w3.org/2000/svg";
|
|
267
|
+
const svg = this._document.createElementNS(svgns, "svg");
|
|
268
|
+
svg.setAttribute("xmlns", svgns);
|
|
269
|
+
svg.setAttribute("width", `${svgWidth * (3 / 5)}px`);
|
|
270
|
+
svg.setAttribute("height", "45px");
|
|
271
|
+
svg.setAttribute("viewBox", `0 0 ${svgWidth} 75`);
|
|
272
|
+
if (mora.length <= 0) return svg;
|
|
273
|
+
for (let i = 0; i < mora.length; i++) {
|
|
274
|
+
const xCenter = marginLr + i * stepWidth;
|
|
275
|
+
this._textJJ(xCenter - 11, mora[i], svgns, svg);
|
|
276
|
+
}
|
|
277
|
+
let pathType = "";
|
|
278
|
+
const circles = [];
|
|
279
|
+
const paths = [];
|
|
280
|
+
let prevCenter = [-1, -1];
|
|
281
|
+
for (let i = 0; i < patt.length; i++) {
|
|
282
|
+
const xCenter = marginLr + i * stepWidth;
|
|
283
|
+
const accent = patt[i];
|
|
284
|
+
let yCenter = 0;
|
|
285
|
+
if (accent === "H") yCenter = 5;
|
|
286
|
+
else if (accent === "L") yCenter = 30;
|
|
287
|
+
circles.push(this._circleJJ(xCenter, yCenter, i >= mora.length, svgns));
|
|
288
|
+
if (i > 0) {
|
|
289
|
+
if (prevCenter[1] === yCenter) pathType = "s";
|
|
290
|
+
else if (prevCenter[1] < yCenter) pathType = "d";
|
|
291
|
+
else if (prevCenter[1] > yCenter) pathType = "u";
|
|
292
|
+
paths.push(this._pathJJ(prevCenter[0], prevCenter[1], pathType, stepWidth, svgns));
|
|
293
|
+
}
|
|
294
|
+
prevCenter = [xCenter, yCenter];
|
|
295
|
+
}
|
|
296
|
+
for (const path of paths) svg.appendChild(path);
|
|
297
|
+
for (const circle of circles) svg.appendChild(circle);
|
|
298
|
+
return svg;
|
|
299
|
+
}
|
|
300
|
+
_addGraphDot(container, svgns, x, y) {
|
|
301
|
+
container.appendChild(this._createGraphCircle(svgns, "pronunciation-graph-dot", x, y, "15"));
|
|
302
|
+
}
|
|
303
|
+
_addGraphDotDownstep(container, svgns, x, y) {
|
|
304
|
+
container.appendChild(this._createGraphCircle(svgns, "pronunciation-graph-dot-downstep1", x, y, "15"));
|
|
305
|
+
container.appendChild(this._createGraphCircle(svgns, "pronunciation-graph-dot-downstep2", x, y, "5"));
|
|
306
|
+
}
|
|
307
|
+
_addGraphTriangle(container, svgns, x, y) {
|
|
308
|
+
const node = this._document.createElementNS(svgns, "path");
|
|
309
|
+
node.setAttribute("class", "pronunciation-graph-triangle");
|
|
310
|
+
node.setAttribute("d", "M0 13 L15 -13 L-15 -13 Z");
|
|
311
|
+
node.setAttribute("transform", `translate(${x},${y})`);
|
|
312
|
+
container.appendChild(node);
|
|
313
|
+
}
|
|
314
|
+
_createGraphCircle(svgns, className, x, y, radius) {
|
|
315
|
+
const node = this._document.createElementNS(svgns, "circle");
|
|
316
|
+
node.setAttribute("class", className);
|
|
317
|
+
node.setAttribute("cx", `${x}`);
|
|
318
|
+
node.setAttribute("cy", `${y}`);
|
|
319
|
+
node.setAttribute("r", radius);
|
|
320
|
+
return node;
|
|
321
|
+
}
|
|
322
|
+
_pitchValueToPattJJ(numberOfMora, pitchValue) {
|
|
323
|
+
if (typeof pitchValue === "string") return pitchValue + pitchValue[pitchValue.length - 1];
|
|
324
|
+
if (numberOfMora >= 1) {
|
|
325
|
+
if (pitchValue === 0) return `L${"H".repeat(numberOfMora)}`;
|
|
326
|
+
if (pitchValue === 1) return `H${"L".repeat(numberOfMora)}`;
|
|
327
|
+
if (pitchValue >= 2) {
|
|
328
|
+
const stepdown = pitchValue - 2;
|
|
329
|
+
return `LH${"H".repeat(stepdown)}${"L".repeat(numberOfMora - pitchValue + 1)}`;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return "";
|
|
333
|
+
}
|
|
334
|
+
_circleJJ(x, y, o, svgns) {
|
|
335
|
+
if (o) {
|
|
336
|
+
const node$1 = this._document.createElementNS(svgns, "circle");
|
|
337
|
+
node$1.setAttribute("r", "4");
|
|
338
|
+
node$1.setAttribute("cx", `${x + 4}`);
|
|
339
|
+
node$1.setAttribute("cy", `${y}`);
|
|
340
|
+
node$1.setAttribute("stroke", "currentColor");
|
|
341
|
+
node$1.setAttribute("stroke-width", "2");
|
|
342
|
+
node$1.setAttribute("fill", "none");
|
|
343
|
+
return node$1;
|
|
344
|
+
}
|
|
345
|
+
const node = this._document.createElementNS(svgns, "circle");
|
|
346
|
+
node.setAttribute("r", "5");
|
|
347
|
+
node.setAttribute("cx", `${x}`);
|
|
348
|
+
node.setAttribute("cy", `${y}`);
|
|
349
|
+
node.setAttribute("style", "opacity:1;fill:currentColor;");
|
|
350
|
+
return node;
|
|
351
|
+
}
|
|
352
|
+
_textJJ(x, mora, svgns, svg) {
|
|
353
|
+
if (mora.length === 1) {
|
|
354
|
+
const path = this._document.createElementNS(svgns, "text");
|
|
355
|
+
path.setAttribute("x", `${x}`);
|
|
356
|
+
path.setAttribute("y", "67.5");
|
|
357
|
+
path.setAttribute("style", "font-size:20px;font-family:sans-serif;fill:currentColor;");
|
|
358
|
+
path.textContent = mora;
|
|
359
|
+
svg.appendChild(path);
|
|
360
|
+
} else {
|
|
361
|
+
const path1 = this._document.createElementNS(svgns, "text");
|
|
362
|
+
path1.setAttribute("x", `${x - 5}`);
|
|
363
|
+
path1.setAttribute("y", "67.5");
|
|
364
|
+
path1.setAttribute("style", "font-size:20px;font-family:sans-serif;fill:currentColor;");
|
|
365
|
+
path1.textContent = mora[0];
|
|
366
|
+
svg.appendChild(path1);
|
|
367
|
+
const path2 = this._document.createElementNS(svgns, "text");
|
|
368
|
+
path2.setAttribute("x", `${x + 12}`);
|
|
369
|
+
path2.setAttribute("y", "67.5");
|
|
370
|
+
path2.setAttribute("style", "font-size:14px;font-family:sans-serif;fill:currentColor;");
|
|
371
|
+
path2.textContent = mora[1];
|
|
372
|
+
svg.appendChild(path2);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
_pathJJ(x, y, type, stepWidth, svgns) {
|
|
376
|
+
let delta = "";
|
|
377
|
+
switch (type) {
|
|
378
|
+
case "s":
|
|
379
|
+
delta = `${stepWidth},0`;
|
|
380
|
+
break;
|
|
381
|
+
case "u":
|
|
382
|
+
delta = `${stepWidth},-25`;
|
|
383
|
+
break;
|
|
384
|
+
case "d":
|
|
385
|
+
delta = `${stepWidth},25`;
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
const path = this._document.createElementNS(svgns, "path");
|
|
389
|
+
path.setAttribute("d", `m ${x},${y} ${delta}`);
|
|
390
|
+
path.setAttribute("style", "fill:none;stroke:currentColor;stroke-width:1.5;");
|
|
391
|
+
return path;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
//#endregion
|
|
396
|
+
export { PronunciationGenerator, getDownstepPositions, getKanaDiacriticInfo, getKanaMoraCount, getKanaMorae, getPitchCategory, isCodePointKanji, isMoraPitchHigh };
|
|
397
|
+
//# sourceMappingURL=pronunciation-generator-BtBc4q_V.js.map
|