yomitan-core 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/dist/anki-connect-B2UXtiUS.js +6 -0
- package/dist/anki-connect-BXvjYYm0.cjs +6 -0
- package/dist/{anki-connect-B_YpChhu.cjs → anki-connect-DGx7Gr0H.cjs} +3 -3
- package/dist/{anki-connect-B_YpChhu.cjs.map → anki-connect-DGx7Gr0H.cjs.map} +1 -1
- package/dist/{anki-connect-697E04LF.js → anki-connect-Dau8nAXZ.js} +3 -3
- package/dist/{anki-connect-697E04LF.js.map → anki-connect-Dau8nAXZ.js.map} +1 -1
- package/dist/anki.cjs +6 -6
- package/dist/anki.d.cts.map +1 -1
- package/dist/anki.d.ts +2 -2
- package/dist/anki.d.ts.map +1 -1
- package/dist/anki.js +6 -6
- package/dist/{audio-ZuaDkaUZ.d.ts → audio-DN-FhZ5k.d.ts} +1 -1
- package/dist/{audio-ZuaDkaUZ.d.ts.map → audio-DN-FhZ5k.d.ts.map} +1 -1
- package/dist/{audio-url-generator-CgTMaTM2.js → audio-url-generator-C7mkxYeq.js} +2 -2
- package/dist/{audio-url-generator-CfXaxZ47.cjs → audio-url-generator-CZECihX-.cjs} +2 -2
- package/dist/{audio-url-generator-C23AXVj1.cjs → audio-url-generator-CorFRyBU.cjs} +2 -2
- package/dist/{audio-url-generator-C23AXVj1.cjs.map → audio-url-generator-CorFRyBU.cjs.map} +1 -1
- package/dist/{audio-url-generator-DykdzZJu.js → audio-url-generator-_6Qk0i3T.js} +2 -2
- package/dist/{audio-url-generator-DykdzZJu.js.map → audio-url-generator-_6Qk0i3T.js.map} +1 -1
- package/dist/audio.cjs +2 -2
- package/dist/audio.d.ts +2 -2
- package/dist/audio.js +2 -2
- package/dist/{batch-processor-CXZZhx5t.js → batch-processor-BR-gB3H3.js} +1 -1
- package/dist/{batch-processor-CXZZhx5t.js.map → batch-processor-BR-gB3H3.js.map} +1 -1
- package/dist/batch-processor-CSF1acTw.cjs +3 -0
- package/dist/{batch-processor-C8pSzqRE.cjs → batch-processor-DFqM_L-_.cjs} +1 -1
- package/dist/{batch-processor-C8pSzqRE.cjs.map → batch-processor-DFqM_L-_.cjs.map} +1 -1
- package/dist/batch-processor-Quo9jUyf.js +3 -0
- package/dist/{core-C_0QjRBI.d.ts → core-CRjMTF7c.d.ts} +1 -1
- package/dist/{core-C_0QjRBI.d.ts.map → core-CRjMTF7c.d.ts.map} +1 -1
- package/dist/database.d.ts +3 -3
- package/dist/debug-I2dyAd2e.cjs +51 -0
- package/dist/debug-I2dyAd2e.cjs.map +1 -0
- package/dist/debug-hF63AFkq.js +38 -0
- package/dist/debug-hF63AFkq.js.map +1 -0
- package/dist/{dictionary-CfzEFbXZ.d.ts → dictionary-DdxghSJP.d.ts} +1 -1
- package/dist/{dictionary-CfzEFbXZ.d.ts.map → dictionary-DdxghSJP.d.ts.map} +1 -1
- package/dist/{dictionary-data-util-BY_72f3u.cjs → dictionary-data-util-DmLJMtGc.cjs} +1 -1
- package/dist/{dictionary-data-util-BY_72f3u.cjs.map → dictionary-data-util-DmLJMtGc.cjs.map} +1 -1
- package/dist/{dictionary-data-util-CKDT7n2t.js → dictionary-data-util-gUUD9ElK.js} +1 -1
- package/dist/{dictionary-data-util-CKDT7n2t.js.map → dictionary-data-util-gUUD9ElK.js.map} +1 -1
- package/dist/{dictionary-database-BRAqOF_M.d.ts → dictionary-database-D0lvK2n3.d.ts} +2 -2
- package/dist/{dictionary-database-BRAqOF_M.d.ts.map → dictionary-database-D0lvK2n3.d.ts.map} +1 -1
- package/dist/{dictionary-importer-C7mNL5CJ.js → dictionary-importer-BPlLeF5R.js} +5 -5
- package/dist/{dictionary-importer-C7mNL5CJ.js.map → dictionary-importer-BPlLeF5R.js.map} +1 -1
- package/dist/{dictionary-importer-CbMwsqEX.cjs → dictionary-importer-BvgP1Fs9.cjs} +5 -5
- package/dist/{dictionary-importer-CbMwsqEX.cjs.map → dictionary-importer-BvgP1Fs9.cjs.map} +1 -1
- package/dist/{dictionary-importer-C-AlWsIN.d.ts → dictionary-importer-CDbCAbwG.d.ts} +2 -2
- package/dist/{dictionary-importer-C-AlWsIN.d.ts.map → dictionary-importer-CDbCAbwG.d.ts.map} +1 -1
- package/dist/dictionary-importer-DEMVqTjR.js +8 -0
- package/dist/dictionary-importer-Luz6usUQ.cjs +8 -0
- package/dist/{dictionary-update-checker-DE2ymYcs.js → dictionary-update-checker-CLbtQ48X.js} +2 -2
- package/dist/{dictionary-update-checker-DE2ymYcs.js.map → dictionary-update-checker-CLbtQ48X.js.map} +1 -1
- package/dist/dictionary-update-checker-CsS7MxK_.js +4 -0
- package/dist/{dictionary-update-checker-CU3q0aoP.cjs → dictionary-update-checker-DgjPsURI.cjs} +2 -2
- package/dist/{dictionary-update-checker-xIwF77-R.cjs → dictionary-update-checker-DmiIUoKw.cjs} +2 -2
- package/dist/{dictionary-update-checker-xIwF77-R.cjs.map → dictionary-update-checker-DmiIUoKw.cjs.map} +1 -1
- package/dist/{display-generator-vjbG05fn.js → display-generator-BAEJDrHT.js} +9 -7
- package/dist/display-generator-BAEJDrHT.js.map +1 -0
- package/dist/display-generator-D5fkD0JI.cjs +10 -0
- package/dist/display-generator-DZLMaVuP.js +10 -0
- package/dist/{display-generator-BhV_MOD1.cjs → display-generator-D_0chBzj.cjs} +9 -7
- package/dist/display-generator-D_0chBzj.cjs.map +1 -0
- package/dist/{errors-ZI2FcGUl.cjs → errors-0pIJI6N2.cjs} +1 -1
- package/dist/{errors-ZI2FcGUl.cjs.map → errors-0pIJI6N2.cjs.map} +1 -1
- package/dist/{errors-D2JfYV-C.js → errors-DvKlMRXC.js} +1 -1
- package/dist/{errors-D2JfYV-C.js.map → errors-DvKlMRXC.js.map} +1 -1
- package/dist/frequency-ranking-BXjfhhUQ.js +3 -0
- package/dist/{frequency-ranking-DmNIoxut.cjs → frequency-ranking-Cx1kkIrw.cjs} +1 -1
- package/dist/{frequency-ranking-DzbdZghE.js → frequency-ranking-DEJMTMdg.js} +1 -1
- package/dist/{frequency-ranking-DzbdZghE.js.map → frequency-ranking-DEJMTMdg.js.map} +1 -1
- package/dist/{frequency-ranking-Dm6xCMkY.cjs → frequency-ranking-DVYxTXN-.cjs} +1 -1
- package/dist/{frequency-ranking-Dm6xCMkY.cjs.map → frequency-ranking-DVYxTXN-.cjs.map} +1 -1
- package/dist/furigana-MU_j_m5i.cjs +5 -0
- package/dist/{furigana-BnY7-dJ-.cjs → furigana-SZuBaUyl.cjs} +2 -2
- package/dist/{furigana-BnY7-dJ-.cjs.map → furigana-SZuBaUyl.cjs.map} +1 -1
- package/dist/furigana-ZCs0Xs0b.js +5 -0
- package/dist/{furigana-CI6LUA-6.js → furigana-h18vaQ7a.js} +2 -2
- package/dist/{furigana-CI6LUA-6.js.map → furigana-h18vaQ7a.js.map} +1 -1
- package/dist/import.cjs +6 -6
- package/dist/import.d.ts +3 -3
- package/dist/import.js +6 -6
- package/dist/index.cjs +44 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -18
- package/dist/index.js.map +1 -1
- package/dist/{japanese-BVV1Ctk-.cjs → japanese-C83fmEfb.cjs} +1 -1
- package/dist/{japanese-BVV1Ctk-.cjs.map → japanese-C83fmEfb.cjs.map} +1 -1
- package/dist/{japanese-DhmmW35J.js → japanese-OKEGf_i4.js} +2 -2
- package/dist/{japanese-DhmmW35J.js.map → japanese-OKEGf_i4.js.map} +1 -1
- package/dist/{json-CyQBn52D.cjs → json-Cdj6aIOQ.cjs} +1 -1
- package/dist/{json-CyQBn52D.cjs.map → json-Cdj6aIOQ.cjs.map} +1 -1
- package/dist/{json-DTq_IXXF.js → json-rIgOFqVY.js} +1 -1
- package/dist/{json-DTq_IXXF.js.map → json-rIgOFqVY.js.map} +1 -1
- package/dist/{language-DFFp_7nc.d.ts → language-DMwuc2-C.d.ts} +1 -1
- package/dist/{language-DFFp_7nc.d.ts.map → language-DMwuc2-C.d.ts.map} +1 -1
- package/dist/language.cjs +12 -12
- package/dist/language.d.cts +41 -3
- package/dist/language.d.cts.map +1 -1
- package/dist/language.d.ts +44 -6
- package/dist/language.d.ts.map +1 -1
- package/dist/language.js +5 -5
- package/dist/lookup.cjs +7 -6
- package/dist/lookup.d.cts +5 -78
- package/dist/lookup.d.cts.map +1 -1
- package/dist/lookup.d.ts +8 -81
- package/dist/lookup.d.ts.map +1 -1
- package/dist/lookup.js +7 -6
- package/dist/{media-loader-CMEuD0fn.js → media-loader-C1WZVVaA.js} +1 -1
- package/dist/{media-loader-CMEuD0fn.js.map → media-loader-C1WZVVaA.js.map} +1 -1
- package/dist/media-loader-CWNb22gc.cjs +3 -0
- package/dist/media-loader-CrQnDnSp.js +3 -0
- package/dist/{media-loader-DS2ZXpSI.cjs → media-loader-RE32nGs3.cjs} +1 -1
- package/dist/{media-loader-DS2ZXpSI.cjs.map → media-loader-RE32nGs3.cjs.map} +1 -1
- package/dist/{multi-language-transformer-CjLO0S8V.d.ts → multi-language-transformer-CFu0CVWY.d.ts} +3 -3
- package/dist/{multi-language-transformer-CjLO0S8V.d.ts.map → multi-language-transformer-CFu0CVWY.d.ts.map} +1 -1
- package/dist/multi-language-transformer-Dk8S4W6j.js +12503 -0
- package/dist/multi-language-transformer-Dk8S4W6j.js.map +1 -0
- package/dist/{multi-language-transformer-B2133Zg_.cjs → multi-language-transformer-N66Mmb2E.cjs} +9614 -5
- package/dist/multi-language-transformer-N66Mmb2E.cjs.map +1 -0
- package/dist/{pronunciation-generator-cNtAQi5s.js → pronunciation-generator-BXcwS3By.js} +2 -2
- package/dist/{pronunciation-generator-cNtAQi5s.js.map → pronunciation-generator-BXcwS3By.js.map} +1 -1
- package/dist/{pronunciation-generator-CPwnr43z.cjs → pronunciation-generator-CP1kjYje.cjs} +1 -1
- package/dist/{pronunciation-generator-B8y__W7I.cjs → pronunciation-generator-CeC3LFPU.cjs} +1 -1
- package/dist/{pronunciation-generator-B8y__W7I.cjs.map → pronunciation-generator-CeC3LFPU.cjs.map} +1 -1
- package/dist/{pronunciation-generator-BvTbUlOy.js → pronunciation-generator-I1xpdJu0.js} +1 -1
- package/dist/render.cjs +96 -8
- package/dist/render.cjs.map +1 -1
- package/dist/render.d.cts +33 -3
- package/dist/render.d.cts.map +1 -1
- package/dist/render.d.ts +35 -5
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +95 -9
- package/dist/render.js.map +1 -1
- package/dist/{sentence-parser-DUQJ3cTT.cjs → sentence-parser-8i1Y_OGS.cjs} +74 -46
- package/dist/sentence-parser-8i1Y_OGS.cjs.map +1 -0
- package/dist/{translator-TiTDVbmS.d.cts → sentence-parser-BQpu2oSA.d.cts} +80 -4
- package/dist/sentence-parser-BQpu2oSA.d.cts.map +1 -0
- package/dist/{sentence-parser-sx7y6Oyh.js → sentence-parser-CXDs4R_c.js} +74 -46
- package/dist/sentence-parser-CXDs4R_c.js.map +1 -0
- package/dist/{translator-CYvGmODX.d.ts → sentence-parser-CmsHUc_p.d.ts} +81 -5
- package/dist/sentence-parser-CmsHUc_p.d.ts.map +1 -0
- package/dist/sentence-parser-DQccqSpq.cjs +6 -0
- package/dist/sentence-parser-DsleseSI.js +6 -0
- package/dist/structured-content-generator-BhEkwa0T.js +4 -0
- package/dist/{structured-content-generator-C5Hhaurz.cjs → structured-content-generator-CokLKgrb.cjs} +2 -2
- package/dist/{structured-content-generator-C5Hhaurz.cjs.map → structured-content-generator-CokLKgrb.cjs.map} +1 -1
- package/dist/{structured-content-generator-D48bLhPA.cjs → structured-content-generator-_z5dJECG.cjs} +2 -2
- package/dist/{structured-content-generator-aJieXElq.js → structured-content-generator-gnjtdBcC.js} +2 -2
- package/dist/{structured-content-generator-aJieXElq.js.map → structured-content-generator-gnjtdBcC.js.map} +1 -1
- package/dist/{text-utilities-CFDC9Bkr.cjs → text-utilities-CTsN1Bq8.cjs} +1 -1
- package/dist/{text-utilities-CFDC9Bkr.cjs.map → text-utilities-CTsN1Bq8.cjs.map} +1 -1
- package/dist/{text-utilities-D5eno9GK.js → text-utilities-DjLdStjv.js} +1 -1
- package/dist/{text-utilities-D5eno9GK.js.map → text-utilities-DjLdStjv.js.map} +1 -1
- package/dist/translator-BGI37WRC.js +7 -0
- package/dist/translator-Cd1ECBM1.cjs +7 -0
- package/dist/{translator-B1uTusjx.cjs → translator-ClzybVmi.cjs} +2 -2
- package/dist/{translator-B1uTusjx.cjs.map → translator-ClzybVmi.cjs.map} +1 -1
- package/dist/{translator-CrDE1UJW.js → translator-jFVzLjEs.js} +2 -2
- package/dist/{translator-CrDE1UJW.js.map → translator-jFVzLjEs.js.map} +1 -1
- package/package.json +1 -1
- package/dist/anki-connect-D-02BbHi.cjs +0 -6
- package/dist/anki-connect-Vn-cnxs8.js +0 -6
- package/dist/batch-processor-DItpL6Pp.js +0 -3
- package/dist/batch-processor-fiLvFS2_.cjs +0 -3
- package/dist/dictionary-importer-B9M3SD2y.js +0 -8
- package/dist/dictionary-importer-DnR8Bsai.cjs +0 -8
- package/dist/dictionary-update-checker-Cnjz4tQD.js +0 -4
- package/dist/display-generator-BhV_MOD1.cjs.map +0 -1
- package/dist/display-generator-Cn4vCiSI.js +0 -10
- package/dist/display-generator-G2e03o0R.cjs +0 -10
- package/dist/display-generator-vjbG05fn.js.map +0 -1
- package/dist/frequency-ranking-B-kvnxro.js +0 -3
- package/dist/furigana-cpPhFnBv.cjs +0 -5
- package/dist/furigana-kZjqnnFC.js +0 -5
- package/dist/japanese-DdsS8rT1.d.ts +0 -41
- package/dist/japanese-DdsS8rT1.d.ts.map +0 -1
- package/dist/japanese-DgmP3i76.d.cts +0 -41
- package/dist/japanese-DgmP3i76.d.cts.map +0 -1
- package/dist/media-loader-BBTESZXn.cjs +0 -3
- package/dist/media-loader-CNKoAjQs.js +0 -3
- package/dist/multi-language-transformer-B2133Zg_.cjs.map +0 -1
- package/dist/multi-language-transformer-BkwMTV2g.js +0 -2893
- package/dist/multi-language-transformer-BkwMTV2g.js.map +0 -1
- package/dist/sentence-parser-B-gM8mKk.js +0 -5
- package/dist/sentence-parser-Cp3cm_QU.cjs +0 -5
- package/dist/sentence-parser-DUQJ3cTT.cjs.map +0 -1
- package/dist/sentence-parser-sx7y6Oyh.js.map +0 -1
- package/dist/structured-content-generator-Dww8IT7Y.js +0 -4
- package/dist/translator-BiTHo9Nm.js +0 -7
- package/dist/translator-CYvGmODX.d.ts.map +0 -1
- package/dist/translator-TiTDVbmS.d.cts.map +0 -1
- package/dist/translator-Y7Haj_qJ.cjs +0 -7
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/settings.ts","../src/util/errors.ts","../src/util/event-dispatcher.ts","../src/util/log.ts","../src/index.ts"],"sourcesContent":null,"mappings":";;;;;;;;;;KAAY,kBAAA;KAEA,cAAA;WACC;SACF;QACD;eACO;;KAGL,cAAA;;;EATA,cAAA,EAAA,MAAkB;EAElB,uBAAc,EAAA,MAAA,GAAA,IAAA;EAAA,4BAAA,EAAA,WAAA,GAAA,YAAA;CAAA;AAEf,KAaC,YAAA,GAbD;EAAY,OACb,EAAA,OAAA;EAAW,OACJ,EAaJ,kBAbI,EAAA;EAAkB,MAAA,EAAA,MAAA;AAGnC,CAAA;AAQY,KAMA,kBAAA,GAJC;EAID,IAAA,EAAA,MAAA;EAMA,GAAA,EAAA,MAAA;EAOA,KAAA,EAAA,MAAA;;KAPA,WAAA;;;;kBAIQ;AC9BpB,CAAA;KDiCY,kBAAA;;;ICpBI,cAAO,EAAA,MAAkB;;;;;;;;;;cAb5B,YAAA,SAAqB,KAAK;;;;;;;ADH3B,iBCgBI,OAAA,CDhBc,KAAA,EAAA,OAAA,CAAA,ECgBW,KDhBX;;;;AAE9B;;;;cEGa,iCAAiC;;;wBAOpB,WAAW,sBAAsB,gBAAgB,cAAc,UAAU;mBAW9E,WAAW,sBAAsB,iBAAiB,aAAa,UAAU;oBASxE,WAAW,sBAAsB,iBAAiB,aAAa,UAAU;EFhCnF,YAAA,CAAA,cEkDmB,UFlDD,CEkDY,QFlDZ,CAAA,CAAA,CAAA,SAAA,EEkDkC,KFlDlC,CAAA,EAAA,OAAA;AAE9B;;;;;KGFY,QAAA;KAEA,UAAA;;;;;;cAON,MAAA;;;EHTM,SAAA,CAAA,IAAA,EAAA,MAAkB,CAAA,EAAA,IAAA;EAElB,GAAA,CAAA,OAAA,EAAA,OAAc,EAAA,GAAA,cAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA;EAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAA,KACb,CAAA,KAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAc,eAChB,CAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EG4BgC,QH5BhC,EAAA,OAAA,CAAA,EG4BoD,UH5BpD,CAAA,EAAA,IAAA;;AAEM,cG8EJ,GH9EI,EG8ED,MH9EC;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/settings.ts","../src/util/errors.ts","../src/util/event-dispatcher.ts","../src/util/log.ts","../src/index.ts"],"sourcesContent":null,"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ApiReflectResult, CanAddNotesDetail, CardId, CardInfo, DeferredPromiseDetails, EventArgument, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, RejectionReason, SafeAny, SerializableObject, Timeout, TokenObject, TokenString, TypeofResult, UnknownObject } from "./core-
|
|
2
|
-
import { Content, Data, DictionaryEntry, DictionaryEntryType, Element, FontStyle, FontWeight, Image, ImageAppearance, ImageElement, ImageElementBase, ImageRendering, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, KanjiDictionaryEntry, KanjiFrequency, KanjiStat, KanjiStatGroups, LineBreak, LinkElement, PhoneticTranscription, PitchAccent, Pronunciation, PronunciationGeneric, PronunciationType, SizeUnits, StructuredContentStyle, StyledElement, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermFrequency, TermHeadword, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessorRuleChainCandidate, UnstyledElement, VerticalAlign, WordBreak } from "./dictionary-
|
|
3
|
-
import { AudioInfo, AudioSourceInfo, AudioSourceType, AudioTtsInfo, AudioUrlInfo, CustomAudioList, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse } from "./audio-
|
|
4
|
-
import { BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, DeinflectFunction, IsTextLookupWorthyFunction, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, ReadingNormalizer, Rule, RuleI18n, SuffixRule, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorWithId, Transform, TransformI18n, TransformMapObject } from "./language-
|
|
5
|
-
import { ArchiveFileMap, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, DeleteDictionaryProgressCallback, ImageImportRequirement, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, OnProgressCallback, ProgressData, QueryDetails, QueryResult, StructuredContentImageImportRequirement, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount } from "./dictionary-importer-
|
|
6
|
-
import { DictionaryDB$1 as DictionaryDB, YomitanDatabase$1 as YomitanDatabase } from "./dictionary-database-
|
|
7
|
-
import { FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsMode, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, KanjiEnabledDictionaryMap, SearchResolution, TermEnabledDictionaryMap, Translator$1 as Translator } from "./
|
|
8
|
-
import { MultiLanguageTransformer$1 as MultiLanguageTransformer, getAllLanguageTextProcessors$1 as getAllLanguageTextProcessors, getLanguageSummaries$1 as getLanguageSummaries, isTextLookupWorthy$1 as isTextLookupWorthy } from "./multi-language-transformer-
|
|
1
|
+
import { ApiReflectResult, CanAddNotesDetail, CardId, CardInfo, DeferredPromiseDetails, EventArgument, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, RejectionReason, SafeAny, SerializableObject, Timeout, TokenObject, TokenString, TypeofResult, UnknownObject } from "./core-CRjMTF7c.js";
|
|
2
|
+
import { Content, Data, DictionaryEntry, DictionaryEntryType, Element, FontStyle, FontWeight, Image, ImageAppearance, ImageElement, ImageElementBase, ImageRendering, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, KanjiDictionaryEntry, KanjiFrequency, KanjiStat, KanjiStatGroups, LineBreak, LinkElement, PhoneticTranscription, PitchAccent, Pronunciation, PronunciationGeneric, PronunciationType, SizeUnits, StructuredContentStyle, StyledElement, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermFrequency, TermHeadword, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessorRuleChainCandidate, UnstyledElement, VerticalAlign, WordBreak } from "./dictionary-DdxghSJP.js";
|
|
3
|
+
import { AudioInfo, AudioSourceInfo, AudioSourceType, AudioTtsInfo, AudioUrlInfo, CustomAudioList, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse } from "./audio-DN-FhZ5k.js";
|
|
4
|
+
import { BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, DeinflectFunction, IsTextLookupWorthyFunction, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, ReadingNormalizer, Rule, RuleI18n, SuffixRule, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorWithId, Transform, TransformI18n, TransformMapObject } from "./language-DMwuc2-C.js";
|
|
5
|
+
import { ArchiveFileMap, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, DeleteDictionaryProgressCallback, ImageImportRequirement, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, OnProgressCallback, ProgressData, QueryDetails, QueryResult, StructuredContentImageImportRequirement, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount } from "./dictionary-importer-CDbCAbwG.js";
|
|
6
|
+
import { DictionaryDB$1 as DictionaryDB, YomitanDatabase$1 as YomitanDatabase } from "./dictionary-database-D0lvK2n3.js";
|
|
7
|
+
import { FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsMode, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, KanjiEnabledDictionaryMap, ParseTextHeadword, ParseTextLine, ParseTextResultItem, ParseTextSegment, SearchResolution, TermEnabledDictionaryMap, Translator$1 as Translator } from "./sentence-parser-CmsHUc_p.js";
|
|
8
|
+
import { MultiLanguageTransformer$1 as MultiLanguageTransformer, getAllLanguageTextProcessors$1 as getAllLanguageTextProcessors, getLanguageSummaries$1 as getLanguageSummaries, isTextLookupWorthy$1 as isTextLookupWorthy } from "./multi-language-transformer-CFu0CVWY.js";
|
|
9
9
|
|
|
10
10
|
//#region src/types/settings.d.ts
|
|
11
11
|
type AnkiDuplicateScope = 'collection' | 'deck' | 'deck-root';
|
|
@@ -181,7 +181,7 @@ declare class YomitanCore {
|
|
|
181
181
|
removeNonJapaneseCharacters?: boolean;
|
|
182
182
|
deinflect?: boolean;
|
|
183
183
|
textReplacements?: (FindTermsTextReplacement[] | null)[];
|
|
184
|
-
}): Promise<
|
|
184
|
+
}): Promise<ParseTextResultItem[]>;
|
|
185
185
|
generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]>;
|
|
186
186
|
batchLookup(texts: string[], config: {
|
|
187
187
|
language?: string;
|
|
@@ -216,5 +216,5 @@ declare class YomitanCore {
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
//#endregion
|
|
219
|
-
export { AnkiDuplicateScope, AnkiOptions, ApiReflectResult, ArchiveFileMap, AudioInfo, AudioOptions, AudioSourceInfo, AudioSourceOptions, AudioSourceType, AudioTtsInfo, AudioUrlInfo, BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, CanAddNotesDetail, CardId, CardInfo, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, Content, CustomAudioList, Data, DeferredPromiseDetails, DeinflectFunction, DictionaryDB, DictionaryEntry, DictionaryEntryType, DictionaryUpdateInfo, Element, EventArgument, EventDispatcher, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, FontStyle, FontWeight, FrequencyRankingResult, FuriganaSegment, GeneralOptions, Image, ImageAppearance, ImageElement, ImageElementBase, ImageImportRequirement, ImageRendering, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, IsTextLookupWorthyFunction, KanjiDictionaryEntry, KanjiEnabledDictionaryMap, KanjiFrequency, KanjiStat, KanjiStatGroups, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, LineBreak, LinkElement, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, OnProgressCallback, PhoneticTranscription, PitchAccent, ProfileOptions, ProgressData, Pronunciation, PronunciationGeneric, PronunciationType, QueryDetails, QueryResult, ReadingNormalizer, RejectionReason, Rule, RuleI18n, SafeAny, SearchResolution, SerializableObject, SizeUnits, StructuredContentImageImportRequirement, StructuredContentStyle, StyledElement, SuffixRule, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermEnabledDictionaryMap, TermFrequency, TermHeadword, TermLookupResult, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorRuleChainCandidate, TextProcessorWithId, Timeout, TokenObject, TokenString, Transform, TransformI18n, TransformMapObject, TranslationOptions, TypeofResult, UnknownObject, UnstyledElement, VerticalAlign, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse, WordBreak, YomitanCore, YomitanCoreConfig, YomitanDatabase, YomitanError, YomitanCore as default, log, toError };
|
|
219
|
+
export { AnkiDuplicateScope, AnkiOptions, ApiReflectResult, ArchiveFileMap, AudioInfo, AudioOptions, AudioSourceInfo, AudioSourceOptions, AudioSourceType, AudioTtsInfo, AudioUrlInfo, BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, CanAddNotesDetail, CardId, CardInfo, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, Content, CustomAudioList, Data, DeferredPromiseDetails, DeinflectFunction, DictionaryDB, DictionaryEntry, DictionaryEntryType, DictionaryUpdateInfo, Element, EventArgument, EventDispatcher, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, FontStyle, FontWeight, FrequencyRankingResult, FuriganaSegment, GeneralOptions, Image, ImageAppearance, ImageElement, ImageElementBase, ImageImportRequirement, ImageRendering, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, IsTextLookupWorthyFunction, KanjiDictionaryEntry, KanjiEnabledDictionaryMap, KanjiFrequency, KanjiStat, KanjiStatGroups, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, LineBreak, LinkElement, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, OnProgressCallback, ParseTextHeadword, ParseTextLine, ParseTextResultItem, ParseTextSegment, PhoneticTranscription, PitchAccent, ProfileOptions, ProgressData, Pronunciation, PronunciationGeneric, PronunciationType, QueryDetails, QueryResult, ReadingNormalizer, RejectionReason, Rule, RuleI18n, SafeAny, SearchResolution, SerializableObject, SizeUnits, StructuredContentImageImportRequirement, StructuredContentStyle, StyledElement, SuffixRule, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermEnabledDictionaryMap, TermFrequency, TermHeadword, TermLookupResult, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorRuleChainCandidate, TextProcessorWithId, Timeout, TokenObject, TokenString, Transform, TransformI18n, TransformMapObject, TranslationOptions, TypeofResult, UnknownObject, UnstyledElement, VerticalAlign, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse, WordBreak, YomitanCore, YomitanCoreConfig, YomitanDatabase, YomitanError, YomitanCore as default, log, toError };
|
|
220
220
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/settings.ts","../src/util/errors.ts","../src/util/event-dispatcher.ts","../src/util/log.ts","../src/index.ts"],"sourcesContent":null,"mappings":";;;;;;;;;;KAAY,kBAAA;KAEA,cAAA;WACC;SACF;QACD;eACO;;KAGL,cAAA;;;EATA,cAAA,EAAA,MAAkB;EAElB,uBAAc,EAAA,MAAA,GAAA,IAAA;EAAA,4BAAA,EAAA,WAAA,GAAA,YAAA;CAAA;AAEf,KAaC,YAAA,GAbD;EAAY,OACb,EAAA,OAAA;EAAW,OACJ,EAaJ,kBAbI,EAAA;EAAkB,MAAA,EAAA,MAAA;AAGnC,CAAA;AAQY,KAMA,kBAAA,GAJC;EAID,IAAA,EAAA,MAAA;EAMA,GAAA,EAAA,MAAA;EAOA,KAAA,EAAA,MAAA;;KAPA,WAAA;;;;kBAIQ;AC9BpB,CAAA;KDiCY,kBAAA;;;ICpBI,cAAO,EAAA,MAAkB;;;;;;;;;;cAb5B,YAAA,SAAqB,KAAK;;;;;;;ADH3B,iBCgBI,OAAA,CDhBc,KAAA,EAAA,OAAA,CAAA,ECgBW,KDhBX;;;;AAE9B;;;;cEGa,iCAAiC;;;wBAOpB,WAAW,sBAAsB,gBAAgB,cAAc,UAAU;mBAW9E,WAAW,sBAAsB,iBAAiB,aAAa,UAAU;oBASxE,WAAW,sBAAsB,iBAAiB,aAAa,UAAU;EFhCnF,YAAA,CAAA,cEkDmB,UFlDD,CEkDY,QFlDZ,CAAA,CAAA,CAAA,SAAA,EEkDkC,KFlDlC,CAAA,EAAA,OAAA;AAE9B;;;;;KGFY,QAAA;KAEA,UAAA;;;;;;cAON,MAAA;;;EHTM,SAAA,CAAA,IAAA,EAAA,MAAkB,CAAA,EAAA,IAAA;EAElB,GAAA,CAAA,OAAA,EAAA,OAAc,EAAA,GAAA,cAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA;EAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAA,KACb,CAAA,KAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAc,eAChB,CAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EG4BgC,QH5BhC,EAAA,OAAA,CAAA,EG4BoD,UH5BpD,CAAA,EAAA,IAAA;;AAEM,cG8EJ,GH9EI,EG8ED,MH9EC;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/settings.ts","../src/util/errors.ts","../src/util/event-dispatcher.ts","../src/util/log.ts","../src/index.ts"],"sourcesContent":null,"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,10 @@ import { log } from "./log-hgSll-dS.js";
|
|
|
2
2
|
import "./utilities-bi3EF-q5.js";
|
|
3
3
|
import { DictionaryDB, YomitanDatabase } from "./dictionary-database-CU4TsvCC.js";
|
|
4
4
|
import "./cjk-util-DubXBGDG.js";
|
|
5
|
-
import "./
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
5
|
+
import { MultiLanguageTransformer, getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from "./multi-language-transformer-Dk8S4W6j.js";
|
|
6
|
+
import "./japanese-OKEGf_i4.js";
|
|
7
|
+
import { codePointPreview, debugYomitanCore } from "./debug-hF63AFkq.js";
|
|
8
|
+
import { YomitanError, toError } from "./errors-DvKlMRXC.js";
|
|
8
9
|
|
|
9
10
|
//#region src/util/event-dispatcher.ts
|
|
10
11
|
/**
|
|
@@ -90,7 +91,7 @@ var YomitanCore = class {
|
|
|
90
91
|
async getTranslator() {
|
|
91
92
|
this._ensureInitialized();
|
|
92
93
|
if (!this._translator) {
|
|
93
|
-
const { Translator } = await import("./translator-
|
|
94
|
+
const { Translator } = await import("./translator-BGI37WRC.js");
|
|
94
95
|
this._translator = new Translator(this._db);
|
|
95
96
|
this._translator.prepare();
|
|
96
97
|
}
|
|
@@ -106,8 +107,8 @@ var YomitanCore = class {
|
|
|
106
107
|
}
|
|
107
108
|
async importDictionary(archive, options) {
|
|
108
109
|
this._ensureInitialized();
|
|
109
|
-
const { DictionaryImporterClass: DictionaryImporter } = await import("./dictionary-importer-
|
|
110
|
-
const { NoOpMediaLoader } = await import("./media-loader-
|
|
110
|
+
const { DictionaryImporterClass: DictionaryImporter } = await import("./dictionary-importer-DEMVqTjR.js");
|
|
111
|
+
const { NoOpMediaLoader } = await import("./media-loader-CrQnDnSp.js");
|
|
111
112
|
const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);
|
|
112
113
|
const details = {
|
|
113
114
|
prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,
|
|
@@ -158,12 +159,24 @@ var YomitanCore = class {
|
|
|
158
159
|
}
|
|
159
160
|
async parseText(text, options) {
|
|
160
161
|
this._ensureInitialized();
|
|
162
|
+
debugYomitanCore("index", "parseText:start", {
|
|
163
|
+
textLength: text.length,
|
|
164
|
+
textPreview: text.slice(0, 120),
|
|
165
|
+
textCodePoints: codePointPreview(text),
|
|
166
|
+
language: options.language ?? "ja",
|
|
167
|
+
enabledDictionaryCount: options.enabledDictionaryMap.size,
|
|
168
|
+
enabledDictionaryNames: [...options.enabledDictionaryMap.keys()],
|
|
169
|
+
scanLength: options.scanLength ?? options.maxLength ?? 20,
|
|
170
|
+
searchResolution: options.searchResolution ?? "letter",
|
|
171
|
+
removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,
|
|
172
|
+
deinflect: options.deinflect
|
|
173
|
+
});
|
|
161
174
|
if (!this._sentenceParser) {
|
|
162
175
|
const translator = await this.getTranslator();
|
|
163
|
-
const { SentenceParser } = await import("./sentence-parser-
|
|
176
|
+
const { SentenceParser } = await import("./sentence-parser-DsleseSI.js");
|
|
164
177
|
this._sentenceParser = new SentenceParser(translator);
|
|
165
178
|
}
|
|
166
|
-
|
|
179
|
+
const parsedLines = await this._sentenceParser.parseText(text, options.language ?? "ja", {
|
|
167
180
|
enabledDictionaryMap: options.enabledDictionaryMap,
|
|
168
181
|
scanLength: options.scanLength,
|
|
169
182
|
maxLength: options.maxLength,
|
|
@@ -172,16 +185,29 @@ var YomitanCore = class {
|
|
|
172
185
|
deinflect: options.deinflect,
|
|
173
186
|
textReplacements: options.textReplacements
|
|
174
187
|
});
|
|
188
|
+
debugYomitanCore("index", "parseText:complete", {
|
|
189
|
+
parseLineCount: parsedLines.length,
|
|
190
|
+
segmentCount: parsedLines.reduce((count, line) => count + line.length, 0),
|
|
191
|
+
lineSegmentCounts: parsedLines.map((line) => line.length),
|
|
192
|
+
selectableSegmentCount: parsedLines.reduce((count, line) => count + line.filter((segment) => Array.isArray(segment.headwords)).length, 0)
|
|
193
|
+
});
|
|
194
|
+
return [{
|
|
195
|
+
id: "scan",
|
|
196
|
+
source: "scanning-parser",
|
|
197
|
+
dictionary: null,
|
|
198
|
+
index: 0,
|
|
199
|
+
content: parsedLines
|
|
200
|
+
}];
|
|
175
201
|
}
|
|
176
202
|
async generateFurigana(text, reading) {
|
|
177
|
-
const { generateFurigana } = await import("./furigana-
|
|
203
|
+
const { generateFurigana } = await import("./furigana-ZCs0Xs0b.js");
|
|
178
204
|
return generateFurigana(text, reading);
|
|
179
205
|
}
|
|
180
206
|
async batchLookup(texts, config) {
|
|
181
207
|
this._ensureInitialized();
|
|
182
208
|
if (!this._batchProcessor) {
|
|
183
209
|
const translator = await this.getTranslator();
|
|
184
|
-
const { BatchProcessor } = await import("./batch-processor-
|
|
210
|
+
const { BatchProcessor } = await import("./batch-processor-Quo9jUyf.js");
|
|
185
211
|
this._batchProcessor = new BatchProcessor(translator);
|
|
186
212
|
}
|
|
187
213
|
const results = await this._batchProcessor.batchLookup(texts, {
|
|
@@ -199,30 +225,30 @@ var YomitanCore = class {
|
|
|
199
225
|
async getFrequencyRanking(term, dictionaries, reading) {
|
|
200
226
|
this._ensureInitialized();
|
|
201
227
|
if (!this._frequencyRanker) {
|
|
202
|
-
const { FrequencyRanker } = await import("./frequency-ranking-
|
|
228
|
+
const { FrequencyRanker } = await import("./frequency-ranking-BXjfhhUQ.js");
|
|
203
229
|
this._frequencyRanker = new FrequencyRanker(this._db);
|
|
204
230
|
}
|
|
205
231
|
return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);
|
|
206
232
|
}
|
|
207
233
|
async checkForUpdates(names) {
|
|
208
234
|
this._ensureInitialized();
|
|
209
|
-
const { DictionaryUpdateChecker } = await import("./dictionary-update-checker-
|
|
235
|
+
const { DictionaryUpdateChecker } = await import("./dictionary-update-checker-CsS7MxK_.js");
|
|
210
236
|
const checker = new DictionaryUpdateChecker(this._db);
|
|
211
237
|
return await checker.checkForUpdates(names);
|
|
212
238
|
}
|
|
213
239
|
async getAudioUrls(term, reading, sources, languageSummary) {
|
|
214
|
-
const { AudioUrlGenerator } = await import("./audio-url-generator-
|
|
240
|
+
const { AudioUrlGenerator } = await import("./audio-url-generator-C7mkxYeq.js");
|
|
215
241
|
const generator = new AudioUrlGenerator();
|
|
216
242
|
return await generator.getUrls(term, reading, sources, languageSummary);
|
|
217
243
|
}
|
|
218
244
|
async createAnkiClient(config) {
|
|
219
|
-
const { AnkiConnect } = await import("./anki-connect-
|
|
245
|
+
const { AnkiConnect } = await import("./anki-connect-B2UXtiUS.js");
|
|
220
246
|
return new AnkiConnect(config);
|
|
221
247
|
}
|
|
222
248
|
async createRenderer() {
|
|
223
|
-
const displayGen = await import("./display-generator-
|
|
224
|
-
const structuredGen = await import("./structured-content-generator-
|
|
225
|
-
const pronunciationGen = await import("./pronunciation-generator-
|
|
249
|
+
const displayGen = await import("./display-generator-DZLMaVuP.js");
|
|
250
|
+
const structuredGen = await import("./structured-content-generator-BhEkwa0T.js");
|
|
251
|
+
const pronunciationGen = await import("./pronunciation-generator-I1xpdJu0.js");
|
|
226
252
|
return {
|
|
227
253
|
DisplayGenerator: displayGen.DisplayGenerator,
|
|
228
254
|
StructuredContentGenerator: structuredGen.StructuredContentGenerator,
|
|
@@ -230,7 +256,7 @@ var YomitanCore = class {
|
|
|
230
256
|
};
|
|
231
257
|
}
|
|
232
258
|
async createAudioUrlGenerator() {
|
|
233
|
-
const { AudioUrlGenerator } = await import("./audio-url-generator-
|
|
259
|
+
const { AudioUrlGenerator } = await import("./audio-url-generator-C7mkxYeq.js");
|
|
234
260
|
return new AudioUrlGenerator();
|
|
235
261
|
}
|
|
236
262
|
_ensureInitialized() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["eventName: TName","details: EventArgument<TSurface, TName>","callback: EventHandler<TSurface, TName>","config?: YomitanCoreConfig","archive: ArrayBuffer","options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n }","details: DictionaryImporterTypes.ImportDetails","name: string","onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback","text: string","config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n }","mode: FindTermsMode","findOptions: Translation.FindTermsOptions","config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n }","findOptions: Translation.FindKanjiOptions","options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n }","reading: string","texts: string[]","config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n }","term: string","dictionaries: string[]","reading?: string","names?: string[]","sources: { type: string; url: string; voice: string }[]","languageSummary: { name: string; iso: string; exampleText: string }","config?: { server?: string; apiKey?: string }"],"sources":["../src/util/event-dispatcher.ts","../src/index.ts"],"sourcesContent":["import type { EventArgument, EventHandler, EventHandlerAny, EventNames, EventSurface } from '../types/core';\n\n/**\n * Base class that controls basic event dispatching.\n */\nexport class EventDispatcher<TSurface extends EventSurface> {\n private _eventMap: Map<EventNames<TSurface>, EventHandlerAny[]>;\n\n constructor() {\n this._eventMap = new Map();\n }\n\n trigger<TName extends EventNames<TSurface>>(eventName: TName, details: EventArgument<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n for (const callback of callbacks) {\n callback(details);\n }\n return true;\n }\n\n on<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): void {\n let callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n callbacks = [];\n this._eventMap.set(eventName, callbacks);\n }\n callbacks.push(callback as EventHandlerAny);\n }\n\n off<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n const ii = callbacks.length;\n for (let i = 0; i < ii; ++i) {\n if (callbacks[i] === callback) {\n callbacks.splice(i, 1);\n if (callbacks.length === 0) {\n this._eventMap.delete(eventName);\n }\n return true;\n }\n }\n return false;\n }\n\n hasListeners<TName extends EventNames<TSurface>>(eventName: TName): boolean {\n const callbacks = this._eventMap.get(eventName);\n return typeof callbacks !== 'undefined' && callbacks.length > 0;\n }\n}\n","// Main entry point for yomitan-core\nimport { DictionaryDB } from './database/dictionary-database';\nimport type { DictionaryImporterClass } from './import/dictionary-importer';\nimport { getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from './language/languages';\nimport { MultiLanguageTransformer } from './language/multi-language-transformer';\nimport type { BatchProcessor as BatchProcessorClass } from './lookup/batch-processor';\nimport type { FrequencyRanker as FrequencyRankerClass } from './lookup/frequency-ranking';\nimport type { SentenceParser as SentenceParserClass } from './lookup/sentence-parser';\nimport type { FindTermsMode, Translator as TranslatorClass } from './lookup/translator';\nimport type * as Dictionary from './types/dictionary';\nimport type * as DictionaryDatabase from './types/dictionary-database';\nimport type * as DictionaryImporterTypes from './types/dictionary-importer';\nimport type * as Translation from './types/translation';\n\n// Re-export all types\nexport * from './types/index';\n\n// Re-export utilities\nexport { YomitanError, toError } from './util/errors';\nexport { EventDispatcher } from './util/event-dispatcher';\nexport { log } from './util/log';\n\n// Re-export key classes from submodules\nexport { DictionaryDB } from './database/dictionary-database';\nexport { YomitanDatabase } from './database/schema';\n\nexport interface YomitanCoreConfig {\n /** Database name (default: 'dict') */\n databaseName?: string;\n /** Whether to automatically initialize language transformers (default: true) */\n initLanguage?: boolean;\n}\n\nexport interface TermLookupResult {\n entries: Dictionary.TermDictionaryEntry[];\n originalTextLength: number;\n}\n\nexport interface FuriganaSegment {\n text: string;\n reading: string;\n}\n\nexport interface FrequencyRankingResult {\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n harmonicMean: number;\n}\n\nexport interface DictionaryUpdateInfo {\n dictionaryName: string;\n currentRevision: string;\n latestRevision: string;\n hasUpdate: boolean;\n downloadUrl?: string;\n}\n\nexport class YomitanCore {\n private _db: DictionaryDB;\n private _multiLanguageTransformer: MultiLanguageTransformer;\n private _translator: TranslatorClass | null = null;\n private _sentenceParser: SentenceParserClass | null = null;\n private _batchProcessor: BatchProcessorClass | null = null;\n private _frequencyRanker: FrequencyRankerClass | null = null;\n private _initialized = false;\n private _config: Required<YomitanCoreConfig>;\n\n constructor(config?: YomitanCoreConfig) {\n this._config = {\n databaseName: config?.databaseName ?? 'dict',\n initLanguage: config?.initLanguage ?? true,\n };\n this._db = new DictionaryDB(this._config.databaseName);\n this._multiLanguageTransformer = new MultiLanguageTransformer();\n }\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n await this._db.open();\n\n if (this._config.initLanguage) {\n this._multiLanguageTransformer.prepare();\n }\n\n this._initialized = true;\n }\n\n async dispose(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n this._db.close();\n this._translator = null;\n this._sentenceParser = null;\n this._batchProcessor = null;\n this._frequencyRanker = null;\n this._initialized = false;\n }\n\n get isReady(): boolean {\n return this._initialized;\n }\n\n get database(): DictionaryDB {\n this._ensureInitialized();\n return this._db;\n }\n\n async getTranslator(): Promise<TranslatorClass> {\n this._ensureInitialized();\n if (!this._translator) {\n const { Translator } = await import('./lookup/translator');\n this._translator = new Translator(this._db);\n this._translator.prepare();\n }\n return this._translator;\n }\n\n get language(): {\n summaries: ReturnType<typeof getLanguageSummaries>;\n textProcessors: ReturnType<typeof getAllLanguageTextProcessors>;\n transformer: MultiLanguageTransformer;\n isTextLookupWorthy: typeof isTextLookupWorthy;\n } {\n return {\n summaries: getLanguageSummaries(),\n textProcessors: getAllLanguageTextProcessors(),\n transformer: this._multiLanguageTransformer,\n isTextLookupWorthy,\n };\n }\n\n // ---- Dictionary Management ----\n\n async importDictionary(\n archive: ArrayBuffer,\n options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n },\n ): Promise<DictionaryImporterTypes.ImportResult> {\n this._ensureInitialized();\n const { DictionaryImporterClass: DictionaryImporter } = await import('./import/dictionary-importer');\n const { NoOpMediaLoader } = await import('./import/media-loader');\n\n const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);\n const details: DictionaryImporterTypes.ImportDetails = {\n prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,\n yomitanVersion: options?.yomitanVersion ?? '0.0.0',\n };\n return await importer.importDictionary(this._db, archive, details);\n }\n\n async deleteDictionary(\n name: string,\n onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback,\n ): Promise<void> {\n this._ensureInitialized();\n await this._db.deleteDictionary(name, onProgress);\n }\n\n async getDictionaryInfo(): Promise<DictionaryImporterTypes.Summary[]> {\n this._ensureInitialized();\n return await this._db.getDictionaryInfo();\n }\n\n // ---- Core Lookup ----\n\n async findTerms(\n text: string,\n config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n },\n ): Promise<TermLookupResult> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n const mode: FindTermsMode = config.mode ?? 'group';\n\n const findOptions: Translation.FindTermsOptions = {\n matchType: config.options?.matchType ?? 'exact',\n deinflect: config.options?.deinflect ?? true,\n primaryReading: config.options?.primaryReading ?? '',\n mainDictionary: config.options?.mainDictionary ?? '',\n sortFrequencyDictionary: config.options?.sortFrequencyDictionary ?? null,\n sortFrequencyDictionaryOrder: config.options?.sortFrequencyDictionaryOrder ?? 'descending',\n removeNonJapaneseCharacters: config.options?.removeNonJapaneseCharacters ?? false,\n textReplacements: config.options?.textReplacements ?? [null],\n enabledDictionaryMap: config.enabledDictionaryMap,\n excludeDictionaryDefinitions: config.options?.excludeDictionaryDefinitions ?? null,\n searchResolution: config.options?.searchResolution ?? 'letter',\n language: config.language ?? 'ja',\n };\n\n const { dictionaryEntries, originalTextLength } = await translator.findTerms(mode, text, findOptions);\n\n return { entries: dictionaryEntries, originalTextLength };\n }\n\n async findKanji(\n text: string,\n config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n },\n ): Promise<Dictionary.KanjiDictionaryEntry[]> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n\n const findOptions: Translation.FindKanjiOptions = {\n enabledDictionaryMap: config.enabledDictionaryMap,\n removeNonJapaneseCharacters: config.removeNonJapaneseCharacters ?? true,\n };\n\n return await translator.findKanji(text, findOptions);\n }\n\n // ---- Additional Features ----\n\n async parseText(\n text: string,\n options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n },\n ): Promise<unknown[]> {\n this._ensureInitialized();\n if (!this._sentenceParser) {\n const translator = await this.getTranslator();\n const { SentenceParser } = await import('./lookup/sentence-parser');\n this._sentenceParser = new SentenceParser(translator);\n }\n return await this._sentenceParser.parseText(text, options.language ?? 'ja', {\n enabledDictionaryMap: options.enabledDictionaryMap,\n scanLength: options.scanLength,\n maxLength: options.maxLength,\n searchResolution: options.searchResolution,\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n textReplacements: options.textReplacements,\n });\n }\n\n async generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]> {\n const { generateFurigana } = await import('./language/ja/furigana');\n return generateFurigana(text, reading);\n }\n\n async batchLookup(\n texts: string[],\n config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n },\n ): Promise<Map<string, TermLookupResult>> {\n this._ensureInitialized();\n if (!this._batchProcessor) {\n const translator = await this.getTranslator();\n const { BatchProcessor } = await import('./lookup/batch-processor');\n this._batchProcessor = new BatchProcessor(translator);\n }\n const results = await this._batchProcessor.batchLookup(texts, {\n language: config.language,\n enabledDictionaryMap: config.enabledDictionaryMap,\n concurrency: config.concurrency,\n });\n const mapped = new Map<string, TermLookupResult>();\n for (const [key, value] of results) {\n mapped.set(key, { entries: value.entries, originalTextLength: value.originalTextLength });\n }\n return mapped;\n }\n\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRankingResult> {\n this._ensureInitialized();\n if (!this._frequencyRanker) {\n const { FrequencyRanker } = await import('./lookup/frequency-ranking');\n this._frequencyRanker = new FrequencyRanker(this._db);\n }\n return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);\n }\n\n async checkForUpdates(names?: string[]): Promise<DictionaryUpdateInfo[]> {\n this._ensureInitialized();\n const { DictionaryUpdateChecker } = await import('./import/dictionary-update-checker');\n const checker = new DictionaryUpdateChecker(this._db);\n return await checker.checkForUpdates(names);\n }\n\n async getAudioUrls(\n term: string,\n reading: string,\n sources: { type: string; url: string; voice: string }[],\n languageSummary: { name: string; iso: string; exampleText: string },\n ): Promise<unknown[]> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n const generator = new AudioUrlGenerator();\n return (await generator.getUrls(term, reading, sources as any[], languageSummary as any)) as unknown[];\n }\n\n // ---- Factory Methods ----\n\n async createAnkiClient(config?: { server?: string; apiKey?: string }): Promise<unknown> {\n const { AnkiConnect } = await import('./anki/anki-connect');\n return new AnkiConnect(config);\n }\n\n async createRenderer(): Promise<{\n DisplayGenerator: unknown;\n StructuredContentGenerator: unknown;\n PronunciationGenerator: unknown;\n }> {\n const displayGen = await import('./render/display-generator');\n const structuredGen = await import('./render/structured-content-generator');\n const pronunciationGen = await import('./render/pronunciation-generator');\n return {\n DisplayGenerator: displayGen.DisplayGenerator,\n StructuredContentGenerator: structuredGen.StructuredContentGenerator,\n PronunciationGenerator: pronunciationGen.PronunciationGenerator,\n };\n }\n\n async createAudioUrlGenerator(): Promise<unknown> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n return new AudioUrlGenerator();\n }\n\n // ---- Private ----\n\n private _ensureInitialized(): void {\n if (!this._initialized) {\n throw new Error('YomitanCore is not initialized. Call initialize() first.');\n }\n }\n}\n\n// Default export\nexport default YomitanCore;\n"],"mappings":";;;;;;;;;;;;AAKA,IAAa,kBAAb,MAA4D;CACxD,AAAQ;CAER,cAAc;AACV,OAAK,YAAY,IAAI;CACxB;CAED,QAA4CA,WAAkBC,SAAkD;EAC5G,MAAM,YAAY,KAAK,UAAU,IAAI,UAAU;AAC/C,aAAW,cAAc,YACrB,QAAO;AAEX,OAAK,MAAM,YAAY,UACnB,UAAS,QAAQ;AAErB,SAAO;CACV;CAED,GAAuCD,WAAkBE,UAA+C;EACpG,IAAI,YAAY,KAAK,UAAU,IAAI,UAAU;AAC7C,aAAW,cAAc,aAAa;AAClC,eAAY,CAAE;AACd,QAAK,UAAU,IAAI,WAAW,UAAU;EAC3C;AACD,YAAU,KAAK,SAA4B;CAC9C;CAED,IAAwCF,WAAkBE,UAAkD;EACxG,MAAM,YAAY,KAAK,UAAU,IAAI,UAAU;AAC/C,aAAW,cAAc,YACrB,QAAO;EAEX,MAAM,KAAK,UAAU;AACrB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EACtB,KAAI,UAAU,OAAO,UAAU;AAC3B,aAAU,OAAO,GAAG,EAAE;AACtB,OAAI,UAAU,WAAW,EACrB,MAAK,UAAU,OAAO,UAAU;AAEpC,UAAO;EACV;AAEL,SAAO;CACV;CAED,aAAiDF,WAA2B;EACxE,MAAM,YAAY,KAAK,UAAU,IAAI,UAAU;AAC/C,gBAAc,cAAc,eAAe,UAAU,SAAS;CACjE;AACJ;;;;ACED,IAAa,cAAb,MAAyB;CACrB,AAAQ;CACR,AAAQ;CACR,AAAQ,cAAsC;CAC9C,AAAQ,kBAA8C;CACtD,AAAQ,kBAA8C;CACtD,AAAQ,mBAAgD;CACxD,AAAQ,eAAe;CACvB,AAAQ;CAER,YAAYG,QAA4B;AACpC,OAAK,UAAU;GACX,cAAc,QAAQ,gBAAgB;GACtC,cAAc,QAAQ,gBAAgB;EACzC;AACD,OAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;AACzC,OAAK,4BAA4B,IAAI;CACxC;CAED,MAAM,aAA4B;AAC9B,MAAI,KAAK,aACL;AAGJ,QAAM,KAAK,IAAI,MAAM;AAErB,MAAI,KAAK,QAAQ,aACb,MAAK,0BAA0B,SAAS;AAG5C,OAAK,eAAe;CACvB;CAED,MAAM,UAAyB;AAC3B,OAAK,KAAK,aACN;AAEJ,OAAK,IAAI,OAAO;AAChB,OAAK,cAAc;AACnB,OAAK,kBAAkB;AACvB,OAAK,kBAAkB;AACvB,OAAK,mBAAmB;AACxB,OAAK,eAAe;CACvB;CAED,IAAI,UAAmB;AACnB,SAAO,KAAK;CACf;CAED,IAAI,WAAyB;AACzB,OAAK,oBAAoB;AACzB,SAAO,KAAK;CACf;CAED,MAAM,gBAA0C;AAC5C,OAAK,oBAAoB;AACzB,OAAK,KAAK,aAAa;GACnB,MAAM,EAAE,YAAY,GAAG,MAAM,OAAO;AACpC,QAAK,cAAc,IAAI,WAAW,KAAK;AACvC,QAAK,YAAY,SAAS;EAC7B;AACD,SAAO,KAAK;CACf;CAED,IAAI,WAKF;AACE,SAAO;GACH,WAAW,sBAAsB;GACjC,gBAAgB,8BAA8B;GAC9C,aAAa,KAAK;GAClB;EACH;CACJ;CAID,MAAM,iBACFC,SACAC,SAK6C;AAC7C,OAAK,oBAAoB;EACzB,MAAM,EAAE,yBAAyB,oBAAoB,GAAG,MAAM,OAAO;EACrE,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;EAEzC,MAAM,WAAW,IAAI,mBAAmB,IAAI,mBAAmB,SAAS;EACxE,MAAMC,UAAiD;GACnD,0BAA0B,SAAS,4BAA4B;GAC/D,gBAAgB,SAAS,kBAAkB;EAC9C;AACD,SAAO,MAAM,SAAS,iBAAiB,KAAK,KAAK,SAAS,QAAQ;CACrE;CAED,MAAM,iBACFC,MACAC,YACa;AACb,OAAK,oBAAoB;AACzB,QAAM,KAAK,IAAI,iBAAiB,MAAM,WAAW;CACpD;CAED,MAAM,oBAAgE;AAClE,OAAK,oBAAoB;AACzB,SAAO,MAAM,KAAK,IAAI,mBAAmB;CAC5C;CAID,MAAM,UACFC,MACAC,QAMyB;AACzB,OAAK,oBAAoB;EACzB,MAAM,aAAa,MAAM,KAAK,eAAe;EAC7C,MAAMC,OAAsB,OAAO,QAAQ;EAE3C,MAAMC,cAA4C;GAC9C,WAAW,OAAO,SAAS,aAAa;GACxC,WAAW,OAAO,SAAS,aAAa;GACxC,gBAAgB,OAAO,SAAS,kBAAkB;GAClD,gBAAgB,OAAO,SAAS,kBAAkB;GAClD,yBAAyB,OAAO,SAAS,2BAA2B;GACpE,8BAA8B,OAAO,SAAS,gCAAgC;GAC9E,6BAA6B,OAAO,SAAS,+BAA+B;GAC5E,kBAAkB,OAAO,SAAS,oBAAoB,CAAC,IAAK;GAC5D,sBAAsB,OAAO;GAC7B,8BAA8B,OAAO,SAAS,gCAAgC;GAC9E,kBAAkB,OAAO,SAAS,oBAAoB;GACtD,UAAU,OAAO,YAAY;EAChC;EAED,MAAM,EAAE,mBAAmB,oBAAoB,GAAG,MAAM,WAAW,UAAU,MAAM,MAAM,YAAY;AAErG,SAAO;GAAE,SAAS;GAAmB;EAAoB;CAC5D;CAED,MAAM,UACFH,MACAI,QAI0C;AAC1C,OAAK,oBAAoB;EACzB,MAAM,aAAa,MAAM,KAAK,eAAe;EAE7C,MAAMC,cAA4C;GAC9C,sBAAsB,OAAO;GAC7B,6BAA6B,OAAO,+BAA+B;EACtE;AAED,SAAO,MAAM,WAAW,UAAU,MAAM,YAAY;CACvD;CAID,MAAM,UACFL,MACAM,SAoBkB;AAClB,OAAK,oBAAoB;AACzB,OAAK,KAAK,iBAAiB;GACvB,MAAM,aAAa,MAAM,KAAK,eAAe;GAC7C,MAAM,EAAE,gBAAgB,GAAG,MAAM,OAAO;AACxC,QAAK,kBAAkB,IAAI,eAAe;EAC7C;AACD,SAAO,MAAM,KAAK,gBAAgB,UAAU,MAAM,QAAQ,YAAY,MAAM;GACxE,sBAAsB,QAAQ;GAC9B,YAAY,QAAQ;GACpB,WAAW,QAAQ;GACnB,kBAAkB,QAAQ;GAC1B,6BAA6B,QAAQ;GACrC,WAAW,QAAQ;GACnB,kBAAkB,QAAQ;EAC7B,EAAC;CACL;CAED,MAAM,iBAAiBN,MAAcO,SAA6C;EAC9E,MAAM,EAAE,kBAAkB,GAAG,MAAM,OAAO;AAC1C,SAAO,iBAAiB,MAAM,QAAQ;CACzC;CAED,MAAM,YACFC,OACAC,QAKsC;AACtC,OAAK,oBAAoB;AACzB,OAAK,KAAK,iBAAiB;GACvB,MAAM,aAAa,MAAM,KAAK,eAAe;GAC7C,MAAM,EAAE,gBAAgB,GAAG,MAAM,OAAO;AACxC,QAAK,kBAAkB,IAAI,eAAe;EAC7C;EACD,MAAM,UAAU,MAAM,KAAK,gBAAgB,YAAY,OAAO;GAC1D,UAAU,OAAO;GACjB,sBAAsB,OAAO;GAC7B,aAAa,OAAO;EACvB,EAAC;EACF,MAAM,SAAS,IAAI;AACnB,OAAK,MAAM,CAAC,KAAK,MAAM,IAAI,QACvB,QAAO,IAAI,KAAK;GAAE,SAAS,MAAM;GAAS,oBAAoB,MAAM;EAAoB,EAAC;AAE7F,SAAO;CACV;CAED,MAAM,oBAAoBC,MAAcC,cAAwBC,SAAmD;AAC/G,OAAK,oBAAoB;AACzB,OAAK,KAAK,kBAAkB;GACxB,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;AACzC,QAAK,mBAAmB,IAAI,gBAAgB,KAAK;EACpD;AACD,SAAO,MAAM,KAAK,iBAAiB,oBAAoB,MAAM,cAAc,QAAQ;CACtF;CAED,MAAM,gBAAgBC,OAAmD;AACrE,OAAK,oBAAoB;EACzB,MAAM,EAAE,yBAAyB,GAAG,MAAM,OAAO;EACjD,MAAM,UAAU,IAAI,wBAAwB,KAAK;AACjD,SAAO,MAAM,QAAQ,gBAAgB,MAAM;CAC9C;CAED,MAAM,aACFH,MACAH,SACAO,SACAC,iBACkB;EAClB,MAAM,EAAE,mBAAmB,GAAG,MAAM,OAAO;EAC3C,MAAM,YAAY,IAAI;AACtB,SAAQ,MAAM,UAAU,QAAQ,MAAM,SAAS,SAAkB,gBAAuB;CAC3F;CAID,MAAM,iBAAiBC,QAAiE;EACpF,MAAM,EAAE,aAAa,GAAG,MAAM,OAAO;AACrC,SAAO,IAAI,YAAY;CAC1B;CAED,MAAM,iBAIH;EACC,MAAM,aAAa,MAAM,OAAO;EAChC,MAAM,gBAAgB,MAAM,OAAO;EACnC,MAAM,mBAAmB,MAAM,OAAO;AACtC,SAAO;GACH,kBAAkB,WAAW;GAC7B,4BAA4B,cAAc;GAC1C,wBAAwB,iBAAiB;EAC5C;CACJ;CAED,MAAM,0BAA4C;EAC9C,MAAM,EAAE,mBAAmB,GAAG,MAAM,OAAO;AAC3C,SAAO,IAAI;CACd;CAID,AAAQ,qBAA2B;AAC/B,OAAK,KAAK,aACN,OAAM,IAAI,MAAM;CAEvB;AACJ;AAGD,kBAAe"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["eventName: TName","details: EventArgument<TSurface, TName>","callback: EventHandler<TSurface, TName>","config?: YomitanCoreConfig","archive: ArrayBuffer","options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n }","details: DictionaryImporterTypes.ImportDetails","name: string","onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback","text: string","config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n }","mode: FindTermsMode","findOptions: Translation.FindTermsOptions","config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n }","findOptions: Translation.FindKanjiOptions","options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n }","reading: string","texts: string[]","config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n }","term: string","dictionaries: string[]","reading?: string","names?: string[]","sources: { type: string; url: string; voice: string }[]","languageSummary: { name: string; iso: string; exampleText: string }","config?: { server?: string; apiKey?: string }"],"sources":["../src/util/event-dispatcher.ts","../src/index.ts"],"sourcesContent":["import type { EventArgument, EventHandler, EventHandlerAny, EventNames, EventSurface } from '../types/core';\n\n/**\n * Base class that controls basic event dispatching.\n */\nexport class EventDispatcher<TSurface extends EventSurface> {\n private _eventMap: Map<EventNames<TSurface>, EventHandlerAny[]>;\n\n constructor() {\n this._eventMap = new Map();\n }\n\n trigger<TName extends EventNames<TSurface>>(eventName: TName, details: EventArgument<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n for (const callback of callbacks) {\n callback(details);\n }\n return true;\n }\n\n on<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): void {\n let callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n callbacks = [];\n this._eventMap.set(eventName, callbacks);\n }\n callbacks.push(callback as EventHandlerAny);\n }\n\n off<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n const ii = callbacks.length;\n for (let i = 0; i < ii; ++i) {\n if (callbacks[i] === callback) {\n callbacks.splice(i, 1);\n if (callbacks.length === 0) {\n this._eventMap.delete(eventName);\n }\n return true;\n }\n }\n return false;\n }\n\n hasListeners<TName extends EventNames<TSurface>>(eventName: TName): boolean {\n const callbacks = this._eventMap.get(eventName);\n return typeof callbacks !== 'undefined' && callbacks.length > 0;\n }\n}\n","// Main entry point for yomitan-core\nimport { DictionaryDB } from './database/dictionary-database';\nimport type { DictionaryImporterClass } from './import/dictionary-importer';\nimport { getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from './language/languages';\nimport { MultiLanguageTransformer } from './language/multi-language-transformer';\nimport type { BatchProcessor as BatchProcessorClass } from './lookup/batch-processor';\nimport type { FrequencyRanker as FrequencyRankerClass } from './lookup/frequency-ranking';\nimport type { ParseTextResultItem } from './lookup/sentence-parser';\nimport type { SentenceParser as SentenceParserClass } from './lookup/sentence-parser';\nimport type { FindTermsMode, Translator as TranslatorClass } from './lookup/translator';\nimport type * as Dictionary from './types/dictionary';\nimport type * as DictionaryDatabase from './types/dictionary-database';\nimport type * as DictionaryImporterTypes from './types/dictionary-importer';\nimport type * as Translation from './types/translation';\nimport { codePointPreview, debugYomitanCore } from './util/debug';\n\n// Re-export all types\nexport * from './types/index';\n\n// Re-export utilities\nexport { YomitanError, toError } from './util/errors';\nexport { EventDispatcher } from './util/event-dispatcher';\nexport { log } from './util/log';\n\n// Re-export key classes from submodules\nexport { DictionaryDB } from './database/dictionary-database';\nexport { YomitanDatabase } from './database/schema';\n\nexport interface YomitanCoreConfig {\n /** Database name (default: 'dict') */\n databaseName?: string;\n /** Whether to automatically initialize language transformers (default: true) */\n initLanguage?: boolean;\n}\n\nexport interface TermLookupResult {\n entries: Dictionary.TermDictionaryEntry[];\n originalTextLength: number;\n}\n\nexport interface FuriganaSegment {\n text: string;\n reading: string;\n}\n\nexport interface FrequencyRankingResult {\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n harmonicMean: number;\n}\n\nexport interface DictionaryUpdateInfo {\n dictionaryName: string;\n currentRevision: string;\n latestRevision: string;\n hasUpdate: boolean;\n downloadUrl?: string;\n}\n\nexport class YomitanCore {\n private _db: DictionaryDB;\n private _multiLanguageTransformer: MultiLanguageTransformer;\n private _translator: TranslatorClass | null = null;\n private _sentenceParser: SentenceParserClass | null = null;\n private _batchProcessor: BatchProcessorClass | null = null;\n private _frequencyRanker: FrequencyRankerClass | null = null;\n private _initialized = false;\n private _config: Required<YomitanCoreConfig>;\n\n constructor(config?: YomitanCoreConfig) {\n this._config = {\n databaseName: config?.databaseName ?? 'dict',\n initLanguage: config?.initLanguage ?? true,\n };\n this._db = new DictionaryDB(this._config.databaseName);\n this._multiLanguageTransformer = new MultiLanguageTransformer();\n }\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n await this._db.open();\n\n if (this._config.initLanguage) {\n this._multiLanguageTransformer.prepare();\n }\n\n this._initialized = true;\n }\n\n async dispose(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n this._db.close();\n this._translator = null;\n this._sentenceParser = null;\n this._batchProcessor = null;\n this._frequencyRanker = null;\n this._initialized = false;\n }\n\n get isReady(): boolean {\n return this._initialized;\n }\n\n get database(): DictionaryDB {\n this._ensureInitialized();\n return this._db;\n }\n\n async getTranslator(): Promise<TranslatorClass> {\n this._ensureInitialized();\n if (!this._translator) {\n const { Translator } = await import('./lookup/translator');\n this._translator = new Translator(this._db);\n this._translator.prepare();\n }\n return this._translator;\n }\n\n get language(): {\n summaries: ReturnType<typeof getLanguageSummaries>;\n textProcessors: ReturnType<typeof getAllLanguageTextProcessors>;\n transformer: MultiLanguageTransformer;\n isTextLookupWorthy: typeof isTextLookupWorthy;\n } {\n return {\n summaries: getLanguageSummaries(),\n textProcessors: getAllLanguageTextProcessors(),\n transformer: this._multiLanguageTransformer,\n isTextLookupWorthy,\n };\n }\n\n // ---- Dictionary Management ----\n\n async importDictionary(\n archive: ArrayBuffer,\n options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n },\n ): Promise<DictionaryImporterTypes.ImportResult> {\n this._ensureInitialized();\n const { DictionaryImporterClass: DictionaryImporter } = await import('./import/dictionary-importer');\n const { NoOpMediaLoader } = await import('./import/media-loader');\n\n const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);\n const details: DictionaryImporterTypes.ImportDetails = {\n prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,\n yomitanVersion: options?.yomitanVersion ?? '0.0.0',\n };\n return await importer.importDictionary(this._db, archive, details);\n }\n\n async deleteDictionary(\n name: string,\n onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback,\n ): Promise<void> {\n this._ensureInitialized();\n await this._db.deleteDictionary(name, onProgress);\n }\n\n async getDictionaryInfo(): Promise<DictionaryImporterTypes.Summary[]> {\n this._ensureInitialized();\n return await this._db.getDictionaryInfo();\n }\n\n // ---- Core Lookup ----\n\n async findTerms(\n text: string,\n config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n },\n ): Promise<TermLookupResult> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n const mode: FindTermsMode = config.mode ?? 'group';\n\n const findOptions: Translation.FindTermsOptions = {\n matchType: config.options?.matchType ?? 'exact',\n deinflect: config.options?.deinflect ?? true,\n primaryReading: config.options?.primaryReading ?? '',\n mainDictionary: config.options?.mainDictionary ?? '',\n sortFrequencyDictionary: config.options?.sortFrequencyDictionary ?? null,\n sortFrequencyDictionaryOrder: config.options?.sortFrequencyDictionaryOrder ?? 'descending',\n removeNonJapaneseCharacters: config.options?.removeNonJapaneseCharacters ?? false,\n textReplacements: config.options?.textReplacements ?? [null],\n enabledDictionaryMap: config.enabledDictionaryMap,\n excludeDictionaryDefinitions: config.options?.excludeDictionaryDefinitions ?? null,\n searchResolution: config.options?.searchResolution ?? 'letter',\n language: config.language ?? 'ja',\n };\n\n const { dictionaryEntries, originalTextLength } = await translator.findTerms(mode, text, findOptions);\n\n return { entries: dictionaryEntries, originalTextLength };\n }\n\n async findKanji(\n text: string,\n config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n },\n ): Promise<Dictionary.KanjiDictionaryEntry[]> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n\n const findOptions: Translation.FindKanjiOptions = {\n enabledDictionaryMap: config.enabledDictionaryMap,\n removeNonJapaneseCharacters: config.removeNonJapaneseCharacters ?? true,\n };\n\n return await translator.findKanji(text, findOptions);\n }\n\n // ---- Additional Features ----\n\n async parseText(\n text: string,\n options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n },\n ): Promise<ParseTextResultItem[]> {\n this._ensureInitialized();\n debugYomitanCore('index', 'parseText:start', {\n textLength: text.length,\n textPreview: text.slice(0, 120),\n textCodePoints: codePointPreview(text),\n language: options.language ?? 'ja',\n enabledDictionaryCount: options.enabledDictionaryMap.size,\n enabledDictionaryNames: [...options.enabledDictionaryMap.keys()],\n scanLength: options.scanLength ?? options.maxLength ?? 20,\n searchResolution: options.searchResolution ?? 'letter',\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n });\n\n if (!this._sentenceParser) {\n const translator = await this.getTranslator();\n const { SentenceParser } = await import('./lookup/sentence-parser');\n this._sentenceParser = new SentenceParser(translator);\n }\n const parsedLines = await this._sentenceParser.parseText(text, options.language ?? 'ja', {\n enabledDictionaryMap: options.enabledDictionaryMap,\n scanLength: options.scanLength,\n maxLength: options.maxLength,\n searchResolution: options.searchResolution,\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n textReplacements: options.textReplacements,\n });\n debugYomitanCore('index', 'parseText:complete', {\n parseLineCount: parsedLines.length,\n segmentCount: parsedLines.reduce((count, line) => count + line.length, 0),\n lineSegmentCounts: parsedLines.map((line) => line.length),\n selectableSegmentCount: parsedLines.reduce(\n (count, line) => count + line.filter((segment) => Array.isArray(segment.headwords)).length,\n 0,\n ),\n });\n\n return [\n {\n id: 'scan',\n source: 'scanning-parser',\n dictionary: null,\n index: 0,\n content: parsedLines,\n },\n ];\n }\n\n async generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]> {\n const { generateFurigana } = await import('./language/ja/furigana');\n return generateFurigana(text, reading);\n }\n\n async batchLookup(\n texts: string[],\n config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n },\n ): Promise<Map<string, TermLookupResult>> {\n this._ensureInitialized();\n if (!this._batchProcessor) {\n const translator = await this.getTranslator();\n const { BatchProcessor } = await import('./lookup/batch-processor');\n this._batchProcessor = new BatchProcessor(translator);\n }\n const results = await this._batchProcessor.batchLookup(texts, {\n language: config.language,\n enabledDictionaryMap: config.enabledDictionaryMap,\n concurrency: config.concurrency,\n });\n const mapped = new Map<string, TermLookupResult>();\n for (const [key, value] of results) {\n mapped.set(key, { entries: value.entries, originalTextLength: value.originalTextLength });\n }\n return mapped;\n }\n\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRankingResult> {\n this._ensureInitialized();\n if (!this._frequencyRanker) {\n const { FrequencyRanker } = await import('./lookup/frequency-ranking');\n this._frequencyRanker = new FrequencyRanker(this._db);\n }\n return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);\n }\n\n async checkForUpdates(names?: string[]): Promise<DictionaryUpdateInfo[]> {\n this._ensureInitialized();\n const { DictionaryUpdateChecker } = await import('./import/dictionary-update-checker');\n const checker = new DictionaryUpdateChecker(this._db);\n return await checker.checkForUpdates(names);\n }\n\n async getAudioUrls(\n term: string,\n reading: string,\n sources: { type: string; url: string; voice: string }[],\n languageSummary: { name: string; iso: string; exampleText: string },\n ): Promise<unknown[]> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n const generator = new AudioUrlGenerator();\n return (await generator.getUrls(term, reading, sources as any[], languageSummary as any)) as unknown[];\n }\n\n // ---- Factory Methods ----\n\n async createAnkiClient(config?: { server?: string; apiKey?: string }): Promise<unknown> {\n const { AnkiConnect } = await import('./anki/anki-connect');\n return new AnkiConnect(config);\n }\n\n async createRenderer(): Promise<{\n DisplayGenerator: unknown;\n StructuredContentGenerator: unknown;\n PronunciationGenerator: unknown;\n }> {\n const displayGen = await import('./render/display-generator');\n const structuredGen = await import('./render/structured-content-generator');\n const pronunciationGen = await import('./render/pronunciation-generator');\n return {\n DisplayGenerator: displayGen.DisplayGenerator,\n StructuredContentGenerator: structuredGen.StructuredContentGenerator,\n PronunciationGenerator: pronunciationGen.PronunciationGenerator,\n };\n }\n\n async createAudioUrlGenerator(): Promise<unknown> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n return new AudioUrlGenerator();\n }\n\n // ---- Private ----\n\n private _ensureInitialized(): void {\n if (!this._initialized) {\n throw new Error('YomitanCore is not initialized. Call initialize() first.');\n }\n }\n}\n\n// Default export\nexport default YomitanCore;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"japanese-BVV1Ctk-.cjs","names":["HIRAGANA_RANGE: CodepointRange","KATAKANA_RANGE: CodepointRange","HIRAGANA_CONVERSION_RANGE: CodepointRange","KATAKANA_CONVERSION_RANGE: CodepointRange","KANA_RANGES: CodepointRange[]","JAPANESE_RANGES: CodepointRange[]","CJK_IDEOGRAPH_RANGES","CJK_PUNCTUATION_RANGE","FULLWIDTH_CHARACTER_RANGES","previousCharacter: string","text: string","reading: string","readingNormalized: string","groups: FuriganaGroup[]","groupsStart: number","result: FuriganaSegment[] | null","newSegments: FuriganaSegment[]","text1: string","text2: string","codePoint: number","str: string","moraIndex: number","pitchAccentValue: number | string","isVerbOrAdjective: boolean","pitchString: string","downsteps: number[]","morae: string[]","i: number","character: string","CJK_COMPATIBILITY","term: string","groupPre: FuriganaGroup | null","isKanaPre: boolean | null","source: string","segments: FuriganaSegment[]","fullCollapse: boolean"],"sources":["../src/language/ja/japanese.ts"],"sourcesContent":["import {\n CJK_COMPATIBILITY,\n CJK_IDEOGRAPH_RANGES,\n CJK_PUNCTUATION_RANGE,\n FULLWIDTH_CHARACTER_RANGES,\n isCodePointInRange,\n isCodePointInRanges,\n} from '../cjk-util';\nimport type { CodepointRange } from '../cjk-util';\n\nexport type FuriganaSegment = {\n text: string;\n reading: string;\n};\n\nexport type FuriganaGroup = {\n isKana: boolean;\n text: string;\n textNormalized: string | null;\n};\n\nexport type DiacriticType = 'dakuten' | 'handakuten';\n\nexport type PitchCategory = 'heiban' | 'atamadaka' | 'nakadaka' | 'odaka' | 'kifuku';\n\nconst HIRAGANA_SMALL_TSU_CODE_POINT = 0x3063;\nconst KATAKANA_SMALL_TSU_CODE_POINT = 0x30c3;\nconst KATAKANA_SMALL_KA_CODE_POINT = 0x30f5;\nconst KATAKANA_SMALL_KE_CODE_POINT = 0x30f6;\nconst KANA_PROLONGED_SOUND_MARK_CODE_POINT = 0x30fc;\n\nconst HIRAGANA_RANGE: CodepointRange = [0x3040, 0x309f];\nconst KATAKANA_RANGE: CodepointRange = [0x30a0, 0x30ff];\n\nconst HIRAGANA_CONVERSION_RANGE: CodepointRange = [0x3041, 0x3096];\nconst KATAKANA_CONVERSION_RANGE: CodepointRange = [0x30a1, 0x30f6];\n\nconst KANA_RANGES: CodepointRange[] = [HIRAGANA_RANGE, KATAKANA_RANGE];\n\nconst JAPANESE_RANGES: CodepointRange[] = [\n HIRAGANA_RANGE,\n KATAKANA_RANGE,\n ...CJK_IDEOGRAPH_RANGES,\n [0xff66, 0xff9f], // Halfwidth katakana\n [0x30fb, 0x30fc], // Katakana punctuation\n [0xff61, 0xff65], // Kana punctuation\n CJK_PUNCTUATION_RANGE,\n ...FULLWIDTH_CHARACTER_RANGES,\n];\n\nconst SMALL_KANA_SET = new Set('ぁぃぅぇぉゃゅょゎァィゥェォャュョヮ');\n\nconst HALFWIDTH_KATAKANA_MAPPING = new Map<string, string>([\n ['・', '・--'],\n ['ヲ', 'ヲヺ-'],\n ['ァ', 'ァ--'],\n ['ィ', 'ィ--'],\n ['ゥ', 'ゥ--'],\n ['ェ', 'ェ--'],\n ['ォ', 'ォ--'],\n ['ャ', 'ャ--'],\n ['ュ', 'ュ--'],\n ['ョ', 'ョ--'],\n ['ッ', 'ッ--'],\n ['ー', 'ー--'],\n ['ア', 'ア--'],\n ['イ', 'イ--'],\n ['ウ', 'ウヴ-'],\n ['エ', 'エ--'],\n ['オ', 'オ--'],\n ['カ', 'カガ-'],\n ['キ', 'キギ-'],\n ['ク', 'クグ-'],\n ['ケ', 'ケゲ-'],\n ['コ', 'コゴ-'],\n ['サ', 'サザ-'],\n ['シ', 'シジ-'],\n ['ス', 'スズ-'],\n ['セ', 'セゼ-'],\n ['ソ', 'ソゾ-'],\n ['タ', 'タダ-'],\n ['チ', 'チヂ-'],\n ['ツ', 'ツヅ-'],\n ['テ', 'テデ-'],\n ['ト', 'トド-'],\n ['ナ', 'ナ--'],\n ['ニ', 'ニ--'],\n ['ヌ', 'ヌ--'],\n ['ネ', 'ネ--'],\n ['ノ', 'ノ--'],\n ['ハ', 'ハバパ'],\n ['ヒ', 'ヒビピ'],\n ['フ', 'フブプ'],\n ['ヘ', 'ヘベペ'],\n ['ホ', 'ホボポ'],\n ['マ', 'マ--'],\n ['ミ', 'ミ--'],\n ['ム', 'ム--'],\n ['メ', 'メ--'],\n ['モ', 'モ--'],\n ['ヤ', 'ヤ--'],\n ['ユ', 'ユ--'],\n ['ヨ', 'ヨ--'],\n ['ラ', 'ラ--'],\n ['リ', 'リ--'],\n ['ル', 'ル--'],\n ['レ', 'レ--'],\n ['ロ', 'ロ--'],\n ['ワ', 'ワ--'],\n ['ン', 'ン--'],\n]);\n\nconst VOWEL_TO_KANA_MAPPING = new Map<string, string>([\n ['a', 'ぁあかがさざただなはばぱまゃやらゎわヵァアカガサザタダナハバパマャヤラヮワヵヷ'],\n ['i', 'ぃいきぎしじちぢにひびぴみりゐィイキギシジチヂニヒビピミリヰヸ'],\n ['u', 'ぅうくぐすずっつづぬふぶぷむゅゆるゥウクグスズッツヅヌフブプムュユルヴ'],\n ['e', 'ぇえけげせぜてでねへべぺめれゑヶェエケゲセゼテデネヘベペメレヱヶヹ'],\n ['o', 'ぉおこごそぞとどのほぼぽもょよろをォオコゴソゾトドノホボポモョヨロヲヺ'],\n ['', 'のノ'],\n]);\n\nconst KANA_TO_VOWEL_MAPPING = new Map<string, string>();\nfor (const [vowel, characters] of VOWEL_TO_KANA_MAPPING) {\n for (const character of characters) {\n KANA_TO_VOWEL_MAPPING.set(character, vowel);\n }\n}\n\nconst kana =\n 'うゔ-かが-きぎ-くぐ-けげ-こご-さざ-しじ-すず-せぜ-そぞ-ただ-ちぢ-つづ-てで-とど-はばぱひびぴふぶぷへべぺほぼぽワヷ-ヰヸ-ウヴ-ヱヹ-ヲヺ-カガ-キギ-クグ-ケゲ-コゴ-サザ-シジ-スズ-セゼ-ソゾ-タダ-チヂ-ツヅ-テデ-トド-ハバパヒビピフブプヘベペホボポ';\nconst DIACRITIC_MAPPING = new Map<string, { character: string; type: DiacriticType }>();\nfor (let i = 0, ii = kana.length; i < ii; i += 3) {\n const character = kana[i];\n const dakuten = kana[i + 1];\n const handakuten = kana[i + 2];\n DIACRITIC_MAPPING.set(dakuten, { character, type: 'dakuten' });\n if (handakuten !== '-') {\n DIACRITIC_MAPPING.set(handakuten, { character, type: 'handakuten' });\n }\n}\n\nfunction getProlongedHiragana(previousCharacter: string): string | null {\n switch (KANA_TO_VOWEL_MAPPING.get(previousCharacter)) {\n case 'a':\n return 'あ';\n case 'i':\n return 'い';\n case 'u':\n return 'う';\n case 'e':\n return 'え';\n case 'o':\n return 'う';\n default:\n return null;\n }\n}\n\nfunction createFuriganaSegment(text: string, reading: string): FuriganaSegment {\n return { text, reading };\n}\n\nfunction segmentizeFurigana(\n reading: string,\n readingNormalized: string,\n groups: FuriganaGroup[],\n groupsStart: number,\n): FuriganaSegment[] | null {\n const groupCount = groups.length - groupsStart;\n if (groupCount <= 0) {\n return reading.length === 0 ? [] : null;\n }\n\n const group = groups[groupsStart];\n const { isKana, text } = group;\n const textLength = text.length;\n if (isKana) {\n const { textNormalized } = group;\n if (textNormalized !== null && readingNormalized.startsWith(textNormalized)) {\n const segments = segmentizeFurigana(\n reading.substring(textLength),\n readingNormalized.substring(textLength),\n groups,\n groupsStart + 1,\n );\n if (segments !== null) {\n if (reading.startsWith(text)) {\n segments.unshift(createFuriganaSegment(text, ''));\n } else {\n segments.unshift(...getFuriganaKanaSegments(text, reading));\n }\n return segments;\n }\n }\n return null;\n }\n let result: FuriganaSegment[] | null = null;\n for (let i = reading.length; i >= textLength; --i) {\n const segments = segmentizeFurigana(\n reading.substring(i),\n readingNormalized.substring(i),\n groups,\n groupsStart + 1,\n );\n if (segments !== null) {\n if (result !== null) {\n // More than one way to segmentize the tail; mark as ambiguous\n return null;\n }\n const segmentReading = reading.substring(0, i);\n segments.unshift(createFuriganaSegment(text, segmentReading));\n result = segments;\n }\n // There is only one way to segmentize the last non-kana group\n if (groupCount === 1) {\n break;\n }\n }\n return result;\n}\n\nfunction getFuriganaKanaSegments(text: string, reading: string): FuriganaSegment[] {\n const textLength = text.length;\n const newSegments: FuriganaSegment[] = [];\n let start = 0;\n let state = reading[0] === text[0];\n for (let i = 1; i < textLength; ++i) {\n const newState = reading[i] === text[i];\n if (state === newState) {\n continue;\n }\n newSegments.push(createFuriganaSegment(text.substring(start, i), state ? '' : reading.substring(start, i)));\n state = newState;\n start = i;\n }\n newSegments.push(\n createFuriganaSegment(text.substring(start, textLength), state ? '' : reading.substring(start, textLength)),\n );\n return newSegments;\n}\n\nfunction getStemLength(text1: string, text2: string): number {\n const minLength = Math.min(text1.length, text2.length);\n if (minLength === 0) {\n return 0;\n }\n\n let i = 0;\n while (true) {\n const char1 = text1.codePointAt(i) as number;\n const char2 = text2.codePointAt(i) as number;\n if (char1 !== char2) {\n break;\n }\n const charLength = String.fromCodePoint(char1).length;\n i += charLength;\n if (i >= minLength) {\n if (i > minLength) {\n i -= charLength; // Don't consume partial UTF16 surrogate characters\n }\n break;\n }\n }\n return i;\n}\n\n// Character code testing functions\n\nexport function isCodePointKanji(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, CJK_IDEOGRAPH_RANGES);\n}\n\nexport function isCodePointKana(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, KANA_RANGES);\n}\n\nexport function isCodePointJapanese(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, JAPANESE_RANGES);\n}\n\n// String testing functions\n\nexport function isStringEntirelyKana(str: string): boolean {\n if (str.length === 0) {\n return false;\n }\n for (const c of str) {\n if (!isCodePointInRanges(c.codePointAt(0) as number, KANA_RANGES)) {\n return false;\n }\n }\n return true;\n}\n\nexport function isStringPartiallyJapanese(str: string): boolean {\n if (str.length === 0) {\n return false;\n }\n for (const c of str) {\n if (isCodePointInRanges(c.codePointAt(0) as number, JAPANESE_RANGES)) {\n return true;\n }\n }\n return false;\n}\n\n// Mora functions\n\nexport function isMoraPitchHigh(moraIndex: number, pitchAccentValue: number | string): boolean {\n if (typeof pitchAccentValue === 'string') {\n return pitchAccentValue[moraIndex] === 'H';\n }\n switch (pitchAccentValue) {\n case 0:\n return moraIndex > 0;\n case 1:\n return moraIndex < 1;\n default:\n return moraIndex > 0 && moraIndex < pitchAccentValue;\n }\n}\n\nexport function getPitchCategory(\n text: string,\n pitchAccentValue: number | string,\n isVerbOrAdjective: boolean,\n): PitchCategory | null {\n const pitchAccentDownstepPosition =\n typeof pitchAccentValue === 'string' ? getDownstepPositions(pitchAccentValue)[0] : pitchAccentValue;\n if (pitchAccentDownstepPosition === 0) {\n return 'heiban';\n }\n if (isVerbOrAdjective) {\n return pitchAccentDownstepPosition > 0 ? 'kifuku' : null;\n }\n if (pitchAccentDownstepPosition === 1) {\n return 'atamadaka';\n }\n if (pitchAccentDownstepPosition > 1) {\n return pitchAccentDownstepPosition >= getKanaMoraCount(text) ? 'odaka' : 'nakadaka';\n }\n return null;\n}\n\nexport function getDownstepPositions(pitchString: string): number[] {\n const downsteps: number[] = [];\n const moraCount = pitchString.length;\n for (let i = 0; i < moraCount; i++) {\n if (i > 0 && pitchString[i - 1] === 'H' && pitchString[i] === 'L') {\n downsteps.push(i);\n }\n }\n if (downsteps.length === 0) {\n downsteps.push(pitchString.startsWith('L') ? 0 : -1);\n }\n return downsteps;\n}\n\nexport function getKanaMorae(text: string): string[] {\n const morae: string[] = [];\n let i: number;\n for (const c of text) {\n if (SMALL_KANA_SET.has(c) && (i = morae.length) > 0) {\n morae[i - 1] += c;\n } else {\n morae.push(c);\n }\n }\n return morae;\n}\n\nexport function getKanaMoraCount(text: string): number {\n let moraCount = 0;\n for (const c of text) {\n if (!(SMALL_KANA_SET.has(c) && moraCount > 0)) {\n ++moraCount;\n }\n }\n return moraCount;\n}\n\n// Conversion functions\n\nexport function convertKatakanaToHiragana(text: string, keepProlongedSoundMarks = false): string {\n let result = '';\n const offset = HIRAGANA_CONVERSION_RANGE[0] - KATAKANA_CONVERSION_RANGE[0];\n for (let char of text) {\n const codePoint = char.codePointAt(0) as number;\n switch (codePoint) {\n case KATAKANA_SMALL_KA_CODE_POINT:\n case KATAKANA_SMALL_KE_CODE_POINT:\n // No change\n break;\n case KANA_PROLONGED_SOUND_MARK_CODE_POINT:\n if (!keepProlongedSoundMarks && result.length > 0) {\n const char2 = getProlongedHiragana(result[result.length - 1]);\n if (char2 !== null) {\n char = char2;\n }\n }\n break;\n default:\n if (isCodePointInRange(codePoint, KATAKANA_CONVERSION_RANGE)) {\n char = String.fromCodePoint(codePoint + offset);\n }\n break;\n }\n result += char;\n }\n return result;\n}\n\nexport function convertHiraganaToKatakana(text: string): string {\n let result = '';\n const offset = KATAKANA_CONVERSION_RANGE[0] - HIRAGANA_CONVERSION_RANGE[0];\n for (let char of text) {\n const codePoint = char.codePointAt(0) as number;\n if (isCodePointInRange(codePoint, HIRAGANA_CONVERSION_RANGE)) {\n char = String.fromCodePoint(codePoint + offset);\n }\n result += char;\n }\n return result;\n}\n\nexport function convertAlphanumericToFullWidth(text: string): string {\n let result = '';\n for (const char of text) {\n let c = char.codePointAt(0) as number;\n if (c >= 0x30 && c <= 0x39) {\n // ['0', '9']\n c += 0xff10 - 0x30;\n } else if (c >= 0x41 && c <= 0x5a) {\n // ['A', 'Z']\n c += 0xff21 - 0x41;\n } else if (c >= 0x61 && c <= 0x7a) {\n // ['a', 'z']\n c += 0xff41 - 0x61;\n }\n result += String.fromCodePoint(c);\n }\n return result;\n}\n\nexport function convertFullWidthAlphanumericToNormal(text: string): string {\n let result = '';\n const length = text.length;\n for (let i = 0; i < length; i++) {\n let c = text[i].codePointAt(0) as number;\n if (c >= 0xff10 && c <= 0xff19) {\n // ['0', '9']\n c -= 0xff10 - 0x30;\n } else if (c >= 0xff21 && c <= 0xff3a) {\n // ['A', 'Z']\n c -= 0xff21 - 0x41;\n } else if (c >= 0xff41 && c <= 0xff5a) {\n // ['a', 'z']\n c -= 0xff41 - 0x61;\n }\n result += String.fromCodePoint(c);\n }\n return result;\n}\n\nexport function convertHalfWidthKanaToFullWidth(text: string): string {\n let result = '';\n\n for (let i = 0, ii = text.length; i < ii; ++i) {\n const c = text[i];\n const mapping = HALFWIDTH_KATAKANA_MAPPING.get(c);\n if (typeof mapping !== 'string') {\n result += c;\n continue;\n }\n\n let index = 0;\n switch (text.charCodeAt(i + 1)) {\n case 0xff9e: // Dakuten\n index = 1;\n break;\n case 0xff9f: // Handakuten\n index = 2;\n break;\n }\n\n let c2 = mapping[index];\n if (index > 0) {\n if (c2 === '-') {\n // Invalid\n index = 0;\n c2 = mapping[0];\n } else {\n ++i;\n }\n }\n\n result += c2;\n }\n\n return result;\n}\n\nexport function getKanaDiacriticInfo(character: string): { character: string; type: DiacriticType } | null {\n const info = DIACRITIC_MAPPING.get(character);\n return typeof info !== 'undefined' ? { character: info.character, type: info.type } : null;\n}\n\nfunction dakutenAllowed(codePoint: number): boolean {\n return (\n (codePoint >= 0x304b && codePoint <= 0x3068) ||\n (codePoint >= 0x306f && codePoint <= 0x307b) ||\n (codePoint >= 0x30ab && codePoint <= 0x30c8) ||\n (codePoint >= 0x30cf && codePoint <= 0x30db)\n );\n}\n\nfunction handakutenAllowed(codePoint: number): boolean {\n return (codePoint >= 0x306f && codePoint <= 0x307b) || (codePoint >= 0x30cf && codePoint <= 0x30db);\n}\n\nexport function normalizeCombiningCharacters(text: string): string {\n let result = '';\n let i = text.length - 1;\n while (i > 0) {\n if (text[i] === '\\u3099') {\n const dakutenCombinee = text[i - 1].codePointAt(0);\n if (dakutenCombinee && dakutenAllowed(dakutenCombinee)) {\n result = String.fromCodePoint(dakutenCombinee + 1) + result;\n i -= 2;\n continue;\n }\n } else if (text[i] === '\\u309A') {\n const handakutenCombinee = text[i - 1].codePointAt(0);\n if (handakutenCombinee && handakutenAllowed(handakutenCombinee)) {\n result = String.fromCodePoint(handakutenCombinee + 2) + result;\n i -= 2;\n continue;\n }\n }\n result = text[i] + result;\n i--;\n }\n if (i === 0) {\n result = text[0] + result;\n }\n return result;\n}\n\nexport function normalizeCJKCompatibilityCharacters(text: string): string {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const codePoint = text[i].codePointAt(0);\n result += codePoint && isCodePointInRange(codePoint, CJK_COMPATIBILITY) ? text[i].normalize('NFKD') : text[i];\n }\n return result;\n}\n\n// Furigana distribution\n\nexport function distributeFurigana(term: string, reading: string): FuriganaSegment[] {\n if (reading === term) {\n return [createFuriganaSegment(term, '')];\n }\n\n const groups: FuriganaGroup[] = [];\n let groupPre: FuriganaGroup | null = null;\n let isKanaPre: boolean | null = null;\n for (const c of term) {\n const codePoint = c.codePointAt(0) as number;\n const isKana = isCodePointKana(codePoint);\n if (isKana === isKanaPre) {\n (groupPre as FuriganaGroup).text += c;\n } else {\n groupPre = { isKana, text: c, textNormalized: null };\n groups.push(groupPre);\n isKanaPre = isKana;\n }\n }\n for (const group of groups) {\n if (group.isKana) {\n group.textNormalized = convertKatakanaToHiragana(group.text);\n }\n }\n\n const readingNormalized = convertKatakanaToHiragana(reading);\n const segments = segmentizeFurigana(reading, readingNormalized, groups, 0);\n if (segments !== null) {\n return segments;\n }\n\n // Fallback\n return [createFuriganaSegment(term, reading)];\n}\n\nexport function distributeFuriganaInflected(term: string, reading: string, source: string): FuriganaSegment[] {\n const termNormalized = convertKatakanaToHiragana(term);\n const readingNormalized = convertKatakanaToHiragana(reading);\n const sourceNormalized = convertKatakanaToHiragana(source);\n\n let mainText = term;\n let stemLength = getStemLength(termNormalized, sourceNormalized);\n\n const readingStemLength = getStemLength(readingNormalized, sourceNormalized);\n if (readingStemLength > 0 && readingStemLength >= stemLength) {\n mainText = reading;\n stemLength = readingStemLength;\n reading = `${source.substring(0, stemLength)}${reading.substring(stemLength)}`;\n }\n\n const segments: FuriganaSegment[] = [];\n if (stemLength > 0) {\n mainText = `${source.substring(0, stemLength)}${mainText.substring(stemLength)}`;\n const segments2 = distributeFurigana(mainText, reading);\n let consumed = 0;\n for (const segment of segments2) {\n const { text } = segment;\n const start = consumed;\n consumed += text.length;\n if (consumed < stemLength) {\n segments.push(segment);\n } else if (consumed === stemLength) {\n segments.push(segment);\n break;\n } else {\n if (start < stemLength) {\n segments.push(createFuriganaSegment(mainText.substring(start, stemLength), ''));\n }\n break;\n }\n }\n }\n\n if (stemLength < source.length) {\n const remainder = source.substring(stemLength);\n const segmentCount = segments.length;\n if (segmentCount > 0 && segments[segmentCount - 1].reading.length === 0) {\n segments[segmentCount - 1].text += remainder;\n } else {\n segments.push(createFuriganaSegment(remainder, ''));\n }\n }\n\n return segments;\n}\n\n// Miscellaneous\n\nexport function isEmphaticCodePoint(codePoint: number): boolean {\n return (\n codePoint === HIRAGANA_SMALL_TSU_CODE_POINT ||\n codePoint === KATAKANA_SMALL_TSU_CODE_POINT ||\n codePoint === KANA_PROLONGED_SOUND_MARK_CODE_POINT\n );\n}\n\nexport function collapseEmphaticSequences(text: string, fullCollapse: boolean): string {\n let left = 0;\n while (left < text.length && isEmphaticCodePoint(text.codePointAt(left) as number)) {\n ++left;\n }\n let right = text.length - 1;\n while (right >= 0 && isEmphaticCodePoint(text.codePointAt(right) as number)) {\n --right;\n }\n if (left > right) {\n return text;\n }\n\n const leadingEmphatics = text.substring(0, left);\n const trailingEmphatics = text.substring(right + 1);\n let middle = '';\n let currentCollapsedCodePoint = -1;\n\n for (let i = left; i <= right; ++i) {\n const char = text[i];\n const codePoint = char.codePointAt(0) as number;\n if (isEmphaticCodePoint(codePoint)) {\n if (currentCollapsedCodePoint !== codePoint) {\n currentCollapsedCodePoint = codePoint;\n if (!fullCollapse) {\n middle += char;\n }\n }\n } else {\n currentCollapsedCodePoint = -1;\n middle += char;\n }\n }\n\n return leadingEmphatics + middle + trailingEmphatics;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"japanese-C83fmEfb.cjs","names":["HIRAGANA_RANGE: CodepointRange","KATAKANA_RANGE: CodepointRange","HIRAGANA_CONVERSION_RANGE: CodepointRange","KATAKANA_CONVERSION_RANGE: CodepointRange","KANA_RANGES: CodepointRange[]","JAPANESE_RANGES: CodepointRange[]","CJK_IDEOGRAPH_RANGES","CJK_PUNCTUATION_RANGE","FULLWIDTH_CHARACTER_RANGES","previousCharacter: string","text: string","reading: string","readingNormalized: string","groups: FuriganaGroup[]","groupsStart: number","result: FuriganaSegment[] | null","newSegments: FuriganaSegment[]","text1: string","text2: string","codePoint: number","str: string","moraIndex: number","pitchAccentValue: number | string","isVerbOrAdjective: boolean","pitchString: string","downsteps: number[]","morae: string[]","i: number","character: string","CJK_COMPATIBILITY","term: string","groupPre: FuriganaGroup | null","isKanaPre: boolean | null","source: string","segments: FuriganaSegment[]","fullCollapse: boolean"],"sources":["../src/language/ja/japanese.ts"],"sourcesContent":["import {\n CJK_COMPATIBILITY,\n CJK_IDEOGRAPH_RANGES,\n CJK_PUNCTUATION_RANGE,\n FULLWIDTH_CHARACTER_RANGES,\n isCodePointInRange,\n isCodePointInRanges,\n} from '../cjk-util';\nimport type { CodepointRange } from '../cjk-util';\n\nexport type FuriganaSegment = {\n text: string;\n reading: string;\n};\n\nexport type FuriganaGroup = {\n isKana: boolean;\n text: string;\n textNormalized: string | null;\n};\n\nexport type DiacriticType = 'dakuten' | 'handakuten';\n\nexport type PitchCategory = 'heiban' | 'atamadaka' | 'nakadaka' | 'odaka' | 'kifuku';\n\nconst HIRAGANA_SMALL_TSU_CODE_POINT = 0x3063;\nconst KATAKANA_SMALL_TSU_CODE_POINT = 0x30c3;\nconst KATAKANA_SMALL_KA_CODE_POINT = 0x30f5;\nconst KATAKANA_SMALL_KE_CODE_POINT = 0x30f6;\nconst KANA_PROLONGED_SOUND_MARK_CODE_POINT = 0x30fc;\n\nconst HIRAGANA_RANGE: CodepointRange = [0x3040, 0x309f];\nconst KATAKANA_RANGE: CodepointRange = [0x30a0, 0x30ff];\n\nconst HIRAGANA_CONVERSION_RANGE: CodepointRange = [0x3041, 0x3096];\nconst KATAKANA_CONVERSION_RANGE: CodepointRange = [0x30a1, 0x30f6];\n\nconst KANA_RANGES: CodepointRange[] = [HIRAGANA_RANGE, KATAKANA_RANGE];\n\nconst JAPANESE_RANGES: CodepointRange[] = [\n HIRAGANA_RANGE,\n KATAKANA_RANGE,\n ...CJK_IDEOGRAPH_RANGES,\n [0xff66, 0xff9f], // Halfwidth katakana\n [0x30fb, 0x30fc], // Katakana punctuation\n [0xff61, 0xff65], // Kana punctuation\n CJK_PUNCTUATION_RANGE,\n ...FULLWIDTH_CHARACTER_RANGES,\n];\n\nconst SMALL_KANA_SET = new Set('ぁぃぅぇぉゃゅょゎァィゥェォャュョヮ');\n\nconst HALFWIDTH_KATAKANA_MAPPING = new Map<string, string>([\n ['・', '・--'],\n ['ヲ', 'ヲヺ-'],\n ['ァ', 'ァ--'],\n ['ィ', 'ィ--'],\n ['ゥ', 'ゥ--'],\n ['ェ', 'ェ--'],\n ['ォ', 'ォ--'],\n ['ャ', 'ャ--'],\n ['ュ', 'ュ--'],\n ['ョ', 'ョ--'],\n ['ッ', 'ッ--'],\n ['ー', 'ー--'],\n ['ア', 'ア--'],\n ['イ', 'イ--'],\n ['ウ', 'ウヴ-'],\n ['エ', 'エ--'],\n ['オ', 'オ--'],\n ['カ', 'カガ-'],\n ['キ', 'キギ-'],\n ['ク', 'クグ-'],\n ['ケ', 'ケゲ-'],\n ['コ', 'コゴ-'],\n ['サ', 'サザ-'],\n ['シ', 'シジ-'],\n ['ス', 'スズ-'],\n ['セ', 'セゼ-'],\n ['ソ', 'ソゾ-'],\n ['タ', 'タダ-'],\n ['チ', 'チヂ-'],\n ['ツ', 'ツヅ-'],\n ['テ', 'テデ-'],\n ['ト', 'トド-'],\n ['ナ', 'ナ--'],\n ['ニ', 'ニ--'],\n ['ヌ', 'ヌ--'],\n ['ネ', 'ネ--'],\n ['ノ', 'ノ--'],\n ['ハ', 'ハバパ'],\n ['ヒ', 'ヒビピ'],\n ['フ', 'フブプ'],\n ['ヘ', 'ヘベペ'],\n ['ホ', 'ホボポ'],\n ['マ', 'マ--'],\n ['ミ', 'ミ--'],\n ['ム', 'ム--'],\n ['メ', 'メ--'],\n ['モ', 'モ--'],\n ['ヤ', 'ヤ--'],\n ['ユ', 'ユ--'],\n ['ヨ', 'ヨ--'],\n ['ラ', 'ラ--'],\n ['リ', 'リ--'],\n ['ル', 'ル--'],\n ['レ', 'レ--'],\n ['ロ', 'ロ--'],\n ['ワ', 'ワ--'],\n ['ン', 'ン--'],\n]);\n\nconst VOWEL_TO_KANA_MAPPING = new Map<string, string>([\n ['a', 'ぁあかがさざただなはばぱまゃやらゎわヵァアカガサザタダナハバパマャヤラヮワヵヷ'],\n ['i', 'ぃいきぎしじちぢにひびぴみりゐィイキギシジチヂニヒビピミリヰヸ'],\n ['u', 'ぅうくぐすずっつづぬふぶぷむゅゆるゥウクグスズッツヅヌフブプムュユルヴ'],\n ['e', 'ぇえけげせぜてでねへべぺめれゑヶェエケゲセゼテデネヘベペメレヱヶヹ'],\n ['o', 'ぉおこごそぞとどのほぼぽもょよろをォオコゴソゾトドノホボポモョヨロヲヺ'],\n ['', 'のノ'],\n]);\n\nconst KANA_TO_VOWEL_MAPPING = new Map<string, string>();\nfor (const [vowel, characters] of VOWEL_TO_KANA_MAPPING) {\n for (const character of characters) {\n KANA_TO_VOWEL_MAPPING.set(character, vowel);\n }\n}\n\nconst kana =\n 'うゔ-かが-きぎ-くぐ-けげ-こご-さざ-しじ-すず-せぜ-そぞ-ただ-ちぢ-つづ-てで-とど-はばぱひびぴふぶぷへべぺほぼぽワヷ-ヰヸ-ウヴ-ヱヹ-ヲヺ-カガ-キギ-クグ-ケゲ-コゴ-サザ-シジ-スズ-セゼ-ソゾ-タダ-チヂ-ツヅ-テデ-トド-ハバパヒビピフブプヘベペホボポ';\nconst DIACRITIC_MAPPING = new Map<string, { character: string; type: DiacriticType }>();\nfor (let i = 0, ii = kana.length; i < ii; i += 3) {\n const character = kana[i];\n const dakuten = kana[i + 1];\n const handakuten = kana[i + 2];\n DIACRITIC_MAPPING.set(dakuten, { character, type: 'dakuten' });\n if (handakuten !== '-') {\n DIACRITIC_MAPPING.set(handakuten, { character, type: 'handakuten' });\n }\n}\n\nfunction getProlongedHiragana(previousCharacter: string): string | null {\n switch (KANA_TO_VOWEL_MAPPING.get(previousCharacter)) {\n case 'a':\n return 'あ';\n case 'i':\n return 'い';\n case 'u':\n return 'う';\n case 'e':\n return 'え';\n case 'o':\n return 'う';\n default:\n return null;\n }\n}\n\nfunction createFuriganaSegment(text: string, reading: string): FuriganaSegment {\n return { text, reading };\n}\n\nfunction segmentizeFurigana(\n reading: string,\n readingNormalized: string,\n groups: FuriganaGroup[],\n groupsStart: number,\n): FuriganaSegment[] | null {\n const groupCount = groups.length - groupsStart;\n if (groupCount <= 0) {\n return reading.length === 0 ? [] : null;\n }\n\n const group = groups[groupsStart];\n const { isKana, text } = group;\n const textLength = text.length;\n if (isKana) {\n const { textNormalized } = group;\n if (textNormalized !== null && readingNormalized.startsWith(textNormalized)) {\n const segments = segmentizeFurigana(\n reading.substring(textLength),\n readingNormalized.substring(textLength),\n groups,\n groupsStart + 1,\n );\n if (segments !== null) {\n if (reading.startsWith(text)) {\n segments.unshift(createFuriganaSegment(text, ''));\n } else {\n segments.unshift(...getFuriganaKanaSegments(text, reading));\n }\n return segments;\n }\n }\n return null;\n }\n let result: FuriganaSegment[] | null = null;\n for (let i = reading.length; i >= textLength; --i) {\n const segments = segmentizeFurigana(\n reading.substring(i),\n readingNormalized.substring(i),\n groups,\n groupsStart + 1,\n );\n if (segments !== null) {\n if (result !== null) {\n // More than one way to segmentize the tail; mark as ambiguous\n return null;\n }\n const segmentReading = reading.substring(0, i);\n segments.unshift(createFuriganaSegment(text, segmentReading));\n result = segments;\n }\n // There is only one way to segmentize the last non-kana group\n if (groupCount === 1) {\n break;\n }\n }\n return result;\n}\n\nfunction getFuriganaKanaSegments(text: string, reading: string): FuriganaSegment[] {\n const textLength = text.length;\n const newSegments: FuriganaSegment[] = [];\n let start = 0;\n let state = reading[0] === text[0];\n for (let i = 1; i < textLength; ++i) {\n const newState = reading[i] === text[i];\n if (state === newState) {\n continue;\n }\n newSegments.push(createFuriganaSegment(text.substring(start, i), state ? '' : reading.substring(start, i)));\n state = newState;\n start = i;\n }\n newSegments.push(\n createFuriganaSegment(text.substring(start, textLength), state ? '' : reading.substring(start, textLength)),\n );\n return newSegments;\n}\n\nfunction getStemLength(text1: string, text2: string): number {\n const minLength = Math.min(text1.length, text2.length);\n if (minLength === 0) {\n return 0;\n }\n\n let i = 0;\n while (true) {\n const char1 = text1.codePointAt(i) as number;\n const char2 = text2.codePointAt(i) as number;\n if (char1 !== char2) {\n break;\n }\n const charLength = String.fromCodePoint(char1).length;\n i += charLength;\n if (i >= minLength) {\n if (i > minLength) {\n i -= charLength; // Don't consume partial UTF16 surrogate characters\n }\n break;\n }\n }\n return i;\n}\n\n// Character code testing functions\n\nexport function isCodePointKanji(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, CJK_IDEOGRAPH_RANGES);\n}\n\nexport function isCodePointKana(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, KANA_RANGES);\n}\n\nexport function isCodePointJapanese(codePoint: number): boolean {\n return isCodePointInRanges(codePoint, JAPANESE_RANGES);\n}\n\n// String testing functions\n\nexport function isStringEntirelyKana(str: string): boolean {\n if (str.length === 0) {\n return false;\n }\n for (const c of str) {\n if (!isCodePointInRanges(c.codePointAt(0) as number, KANA_RANGES)) {\n return false;\n }\n }\n return true;\n}\n\nexport function isStringPartiallyJapanese(str: string): boolean {\n if (str.length === 0) {\n return false;\n }\n for (const c of str) {\n if (isCodePointInRanges(c.codePointAt(0) as number, JAPANESE_RANGES)) {\n return true;\n }\n }\n return false;\n}\n\n// Mora functions\n\nexport function isMoraPitchHigh(moraIndex: number, pitchAccentValue: number | string): boolean {\n if (typeof pitchAccentValue === 'string') {\n return pitchAccentValue[moraIndex] === 'H';\n }\n switch (pitchAccentValue) {\n case 0:\n return moraIndex > 0;\n case 1:\n return moraIndex < 1;\n default:\n return moraIndex > 0 && moraIndex < pitchAccentValue;\n }\n}\n\nexport function getPitchCategory(\n text: string,\n pitchAccentValue: number | string,\n isVerbOrAdjective: boolean,\n): PitchCategory | null {\n const pitchAccentDownstepPosition =\n typeof pitchAccentValue === 'string' ? getDownstepPositions(pitchAccentValue)[0] : pitchAccentValue;\n if (pitchAccentDownstepPosition === 0) {\n return 'heiban';\n }\n if (isVerbOrAdjective) {\n return pitchAccentDownstepPosition > 0 ? 'kifuku' : null;\n }\n if (pitchAccentDownstepPosition === 1) {\n return 'atamadaka';\n }\n if (pitchAccentDownstepPosition > 1) {\n return pitchAccentDownstepPosition >= getKanaMoraCount(text) ? 'odaka' : 'nakadaka';\n }\n return null;\n}\n\nexport function getDownstepPositions(pitchString: string): number[] {\n const downsteps: number[] = [];\n const moraCount = pitchString.length;\n for (let i = 0; i < moraCount; i++) {\n if (i > 0 && pitchString[i - 1] === 'H' && pitchString[i] === 'L') {\n downsteps.push(i);\n }\n }\n if (downsteps.length === 0) {\n downsteps.push(pitchString.startsWith('L') ? 0 : -1);\n }\n return downsteps;\n}\n\nexport function getKanaMorae(text: string): string[] {\n const morae: string[] = [];\n let i: number;\n for (const c of text) {\n if (SMALL_KANA_SET.has(c) && (i = morae.length) > 0) {\n morae[i - 1] += c;\n } else {\n morae.push(c);\n }\n }\n return morae;\n}\n\nexport function getKanaMoraCount(text: string): number {\n let moraCount = 0;\n for (const c of text) {\n if (!(SMALL_KANA_SET.has(c) && moraCount > 0)) {\n ++moraCount;\n }\n }\n return moraCount;\n}\n\n// Conversion functions\n\nexport function convertKatakanaToHiragana(text: string, keepProlongedSoundMarks = false): string {\n let result = '';\n const offset = HIRAGANA_CONVERSION_RANGE[0] - KATAKANA_CONVERSION_RANGE[0];\n for (let char of text) {\n const codePoint = char.codePointAt(0) as number;\n switch (codePoint) {\n case KATAKANA_SMALL_KA_CODE_POINT:\n case KATAKANA_SMALL_KE_CODE_POINT:\n // No change\n break;\n case KANA_PROLONGED_SOUND_MARK_CODE_POINT:\n if (!keepProlongedSoundMarks && result.length > 0) {\n const char2 = getProlongedHiragana(result[result.length - 1]);\n if (char2 !== null) {\n char = char2;\n }\n }\n break;\n default:\n if (isCodePointInRange(codePoint, KATAKANA_CONVERSION_RANGE)) {\n char = String.fromCodePoint(codePoint + offset);\n }\n break;\n }\n result += char;\n }\n return result;\n}\n\nexport function convertHiraganaToKatakana(text: string): string {\n let result = '';\n const offset = KATAKANA_CONVERSION_RANGE[0] - HIRAGANA_CONVERSION_RANGE[0];\n for (let char of text) {\n const codePoint = char.codePointAt(0) as number;\n if (isCodePointInRange(codePoint, HIRAGANA_CONVERSION_RANGE)) {\n char = String.fromCodePoint(codePoint + offset);\n }\n result += char;\n }\n return result;\n}\n\nexport function convertAlphanumericToFullWidth(text: string): string {\n let result = '';\n for (const char of text) {\n let c = char.codePointAt(0) as number;\n if (c >= 0x30 && c <= 0x39) {\n // ['0', '9']\n c += 0xff10 - 0x30;\n } else if (c >= 0x41 && c <= 0x5a) {\n // ['A', 'Z']\n c += 0xff21 - 0x41;\n } else if (c >= 0x61 && c <= 0x7a) {\n // ['a', 'z']\n c += 0xff41 - 0x61;\n }\n result += String.fromCodePoint(c);\n }\n return result;\n}\n\nexport function convertFullWidthAlphanumericToNormal(text: string): string {\n let result = '';\n const length = text.length;\n for (let i = 0; i < length; i++) {\n let c = text[i].codePointAt(0) as number;\n if (c >= 0xff10 && c <= 0xff19) {\n // ['0', '9']\n c -= 0xff10 - 0x30;\n } else if (c >= 0xff21 && c <= 0xff3a) {\n // ['A', 'Z']\n c -= 0xff21 - 0x41;\n } else if (c >= 0xff41 && c <= 0xff5a) {\n // ['a', 'z']\n c -= 0xff41 - 0x61;\n }\n result += String.fromCodePoint(c);\n }\n return result;\n}\n\nexport function convertHalfWidthKanaToFullWidth(text: string): string {\n let result = '';\n\n for (let i = 0, ii = text.length; i < ii; ++i) {\n const c = text[i];\n const mapping = HALFWIDTH_KATAKANA_MAPPING.get(c);\n if (typeof mapping !== 'string') {\n result += c;\n continue;\n }\n\n let index = 0;\n switch (text.charCodeAt(i + 1)) {\n case 0xff9e: // Dakuten\n index = 1;\n break;\n case 0xff9f: // Handakuten\n index = 2;\n break;\n }\n\n let c2 = mapping[index];\n if (index > 0) {\n if (c2 === '-') {\n // Invalid\n index = 0;\n c2 = mapping[0];\n } else {\n ++i;\n }\n }\n\n result += c2;\n }\n\n return result;\n}\n\nexport function getKanaDiacriticInfo(character: string): { character: string; type: DiacriticType } | null {\n const info = DIACRITIC_MAPPING.get(character);\n return typeof info !== 'undefined' ? { character: info.character, type: info.type } : null;\n}\n\nfunction dakutenAllowed(codePoint: number): boolean {\n return (\n (codePoint >= 0x304b && codePoint <= 0x3068) ||\n (codePoint >= 0x306f && codePoint <= 0x307b) ||\n (codePoint >= 0x30ab && codePoint <= 0x30c8) ||\n (codePoint >= 0x30cf && codePoint <= 0x30db)\n );\n}\n\nfunction handakutenAllowed(codePoint: number): boolean {\n return (codePoint >= 0x306f && codePoint <= 0x307b) || (codePoint >= 0x30cf && codePoint <= 0x30db);\n}\n\nexport function normalizeCombiningCharacters(text: string): string {\n let result = '';\n let i = text.length - 1;\n while (i > 0) {\n if (text[i] === '\\u3099') {\n const dakutenCombinee = text[i - 1].codePointAt(0);\n if (dakutenCombinee && dakutenAllowed(dakutenCombinee)) {\n result = String.fromCodePoint(dakutenCombinee + 1) + result;\n i -= 2;\n continue;\n }\n } else if (text[i] === '\\u309A') {\n const handakutenCombinee = text[i - 1].codePointAt(0);\n if (handakutenCombinee && handakutenAllowed(handakutenCombinee)) {\n result = String.fromCodePoint(handakutenCombinee + 2) + result;\n i -= 2;\n continue;\n }\n }\n result = text[i] + result;\n i--;\n }\n if (i === 0) {\n result = text[0] + result;\n }\n return result;\n}\n\nexport function normalizeCJKCompatibilityCharacters(text: string): string {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const codePoint = text[i].codePointAt(0);\n result += codePoint && isCodePointInRange(codePoint, CJK_COMPATIBILITY) ? text[i].normalize('NFKD') : text[i];\n }\n return result;\n}\n\n// Furigana distribution\n\nexport function distributeFurigana(term: string, reading: string): FuriganaSegment[] {\n if (reading === term) {\n return [createFuriganaSegment(term, '')];\n }\n\n const groups: FuriganaGroup[] = [];\n let groupPre: FuriganaGroup | null = null;\n let isKanaPre: boolean | null = null;\n for (const c of term) {\n const codePoint = c.codePointAt(0) as number;\n const isKana = isCodePointKana(codePoint);\n if (isKana === isKanaPre) {\n (groupPre as FuriganaGroup).text += c;\n } else {\n groupPre = { isKana, text: c, textNormalized: null };\n groups.push(groupPre);\n isKanaPre = isKana;\n }\n }\n for (const group of groups) {\n if (group.isKana) {\n group.textNormalized = convertKatakanaToHiragana(group.text);\n }\n }\n\n const readingNormalized = convertKatakanaToHiragana(reading);\n const segments = segmentizeFurigana(reading, readingNormalized, groups, 0);\n if (segments !== null) {\n return segments;\n }\n\n // Fallback\n return [createFuriganaSegment(term, reading)];\n}\n\nexport function distributeFuriganaInflected(term: string, reading: string, source: string): FuriganaSegment[] {\n const termNormalized = convertKatakanaToHiragana(term);\n const readingNormalized = convertKatakanaToHiragana(reading);\n const sourceNormalized = convertKatakanaToHiragana(source);\n\n let mainText = term;\n let stemLength = getStemLength(termNormalized, sourceNormalized);\n\n const readingStemLength = getStemLength(readingNormalized, sourceNormalized);\n if (readingStemLength > 0 && readingStemLength >= stemLength) {\n mainText = reading;\n stemLength = readingStemLength;\n reading = `${source.substring(0, stemLength)}${reading.substring(stemLength)}`;\n }\n\n const segments: FuriganaSegment[] = [];\n if (stemLength > 0) {\n mainText = `${source.substring(0, stemLength)}${mainText.substring(stemLength)}`;\n const segments2 = distributeFurigana(mainText, reading);\n let consumed = 0;\n for (const segment of segments2) {\n const { text } = segment;\n const start = consumed;\n consumed += text.length;\n if (consumed < stemLength) {\n segments.push(segment);\n } else if (consumed === stemLength) {\n segments.push(segment);\n break;\n } else {\n if (start < stemLength) {\n segments.push(createFuriganaSegment(mainText.substring(start, stemLength), ''));\n }\n break;\n }\n }\n }\n\n if (stemLength < source.length) {\n const remainder = source.substring(stemLength);\n const segmentCount = segments.length;\n if (segmentCount > 0 && segments[segmentCount - 1].reading.length === 0) {\n segments[segmentCount - 1].text += remainder;\n } else {\n segments.push(createFuriganaSegment(remainder, ''));\n }\n }\n\n return segments;\n}\n\n// Miscellaneous\n\nexport function isEmphaticCodePoint(codePoint: number): boolean {\n return (\n codePoint === HIRAGANA_SMALL_TSU_CODE_POINT ||\n codePoint === KATAKANA_SMALL_TSU_CODE_POINT ||\n codePoint === KANA_PROLONGED_SOUND_MARK_CODE_POINT\n );\n}\n\nexport function collapseEmphaticSequences(text: string, fullCollapse: boolean): string {\n let left = 0;\n while (left < text.length && isEmphaticCodePoint(text.codePointAt(left) as number)) {\n ++left;\n }\n let right = text.length - 1;\n while (right >= 0 && isEmphaticCodePoint(text.codePointAt(right) as number)) {\n --right;\n }\n if (left > right) {\n return text;\n }\n\n const leadingEmphatics = text.substring(0, left);\n const trailingEmphatics = text.substring(right + 1);\n let middle = '';\n let currentCollapsedCodePoint = -1;\n\n for (let i = left; i <= right; ++i) {\n const char = text[i];\n const codePoint = char.codePointAt(0) as number;\n if (isEmphaticCodePoint(codePoint)) {\n if (currentCollapsedCodePoint !== codePoint) {\n currentCollapsedCodePoint = codePoint;\n if (!fullCollapse) {\n middle += char;\n }\n }\n } else {\n currentCollapsedCodePoint = -1;\n middle += char;\n }\n }\n\n return leadingEmphatics + middle + trailingEmphatics;\n}\n"],"mappings":"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"}
|
|
@@ -461,5 +461,5 @@ function collapseEmphaticSequences(text, fullCollapse) {
|
|
|
461
461
|
}
|
|
462
462
|
|
|
463
463
|
//#endregion
|
|
464
|
-
export { collapseEmphaticSequences as collapseEmphaticSequences$1, convertAlphanumericToFullWidth, convertFullWidthAlphanumericToNormal, convertHalfWidthKanaToFullWidth, convertHiraganaToKatakana as convertHiraganaToKatakana$1, convertKatakanaToHiragana, distributeFurigana, distributeFuriganaInflected, getDownstepPositions
|
|
465
|
-
//# sourceMappingURL=japanese-
|
|
464
|
+
export { collapseEmphaticSequences as collapseEmphaticSequences$1, convertAlphanumericToFullWidth, convertFullWidthAlphanumericToNormal, convertHalfWidthKanaToFullWidth, convertHiraganaToKatakana as convertHiraganaToKatakana$1, convertKatakanaToHiragana, distributeFurigana, distributeFuriganaInflected, getDownstepPositions, getKanaDiacriticInfo, getKanaMoraCount, getKanaMorae, getPitchCategory, isCodePointJapanese, isCodePointKana, isCodePointKanji, isEmphaticCodePoint, isMoraPitchHigh, isStringEntirelyKana, isStringPartiallyJapanese, normalizeCJKCompatibilityCharacters as normalizeCJKCompatibilityCharacters$1, normalizeCombiningCharacters as normalizeCombiningCharacters$1 };
|
|
465
|
+
//# sourceMappingURL=japanese-OKEGf_i4.js.map
|