@yosina-lib/yosina 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.ja.md +177 -0
  2. package/README.md +177 -0
  3. package/dist/cjs/chars.d.ts +3 -0
  4. package/dist/cjs/chars.js +42 -0
  5. package/dist/cjs/chars.js.map +1 -0
  6. package/dist/cjs/index.d.ts +35 -0
  7. package/dist/cjs/index.js +48 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/intrinsics.d.ts +4 -0
  10. package/dist/cjs/intrinsics.js +33 -0
  11. package/dist/cjs/intrinsics.js.map +1 -0
  12. package/dist/cjs/recipes.d.ts +176 -0
  13. package/dist/cjs/recipes.js +155 -0
  14. package/dist/cjs/recipes.js.map +1 -0
  15. package/dist/cjs/transliterators/circled-or-squared.d.ts +27 -0
  16. package/dist/cjs/transliterators/circled-or-squared.js +491 -0
  17. package/dist/cjs/transliterators/circled-or-squared.js.map +1 -0
  18. package/dist/cjs/transliterators/combined.d.ts +15 -0
  19. package/dist/cjs/transliterators/combined.js +510 -0
  20. package/dist/cjs/transliterators/combined.js.map +1 -0
  21. package/dist/cjs/transliterators/hira-kata-composition.d.ts +11 -0
  22. package/dist/cjs/transliterators/hira-kata-composition.js +46 -0
  23. package/dist/cjs/transliterators/hira-kata-composition.js.map +1 -0
  24. package/dist/cjs/transliterators/hira-kata-table.d.ts +4 -0
  25. package/dist/cjs/transliterators/hira-kata-table.js +80 -0
  26. package/dist/cjs/transliterators/hira-kata-table.js.map +1 -0
  27. package/dist/cjs/transliterators/hira-kata.d.ts +6 -0
  28. package/dist/cjs/transliterators/hira-kata.js +67 -0
  29. package/dist/cjs/transliterators/hira-kata.js.map +1 -0
  30. package/dist/cjs/transliterators/hyphens.d.ts +35 -0
  31. package/dist/cjs/transliterators/hyphens.js +329 -0
  32. package/dist/cjs/transliterators/hyphens.js.map +1 -0
  33. package/dist/cjs/transliterators/ideographic-annotations.d.ts +15 -0
  34. package/dist/cjs/transliterators/ideographic-annotations.js +39 -0
  35. package/dist/cjs/transliterators/ideographic-annotations.js.map +1 -0
  36. package/dist/cjs/transliterators/index.d.ts +19 -0
  37. package/dist/cjs/transliterators/index.js +67 -0
  38. package/dist/cjs/transliterators/index.js.map +1 -0
  39. package/dist/cjs/transliterators/ivs-svs-base.d.ts +34 -0
  40. package/dist/cjs/transliterators/ivs-svs-base.js +567 -0
  41. package/dist/cjs/transliterators/ivs-svs-base.js.map +1 -0
  42. package/dist/cjs/transliterators/japanese-iteration-marks.d.ts +4 -0
  43. package/dist/cjs/transliterators/japanese-iteration-marks.js +206 -0
  44. package/dist/cjs/transliterators/japanese-iteration-marks.js.map +1 -0
  45. package/dist/cjs/transliterators/jisx0201-and-alike.d.ts +71 -0
  46. package/dist/cjs/transliterators/jisx0201-and-alike.js +349 -0
  47. package/dist/cjs/transliterators/jisx0201-and-alike.js.map +1 -0
  48. package/dist/cjs/transliterators/kanji-old-new.d.ts +15 -0
  49. package/dist/cjs/transliterators/kanji-old-new.js +1103 -0
  50. package/dist/cjs/transliterators/kanji-old-new.js.map +1 -0
  51. package/dist/cjs/transliterators/mathematical-alphanumerics.d.ts +15 -0
  52. package/dist/cjs/transliterators/mathematical-alphanumerics.js +765 -0
  53. package/dist/cjs/transliterators/mathematical-alphanumerics.js.map +1 -0
  54. package/dist/cjs/transliterators/prolonged-sound-marks.d.ts +13 -0
  55. package/dist/cjs/transliterators/prolonged-sound-marks.js +147 -0
  56. package/dist/cjs/transliterators/prolonged-sound-marks.js.map +1 -0
  57. package/dist/cjs/transliterators/radicals.d.ts +15 -0
  58. package/dist/cjs/transliterators/radicals.js +327 -0
  59. package/dist/cjs/transliterators/radicals.js.map +1 -0
  60. package/dist/cjs/transliterators/spaces.d.ts +15 -0
  61. package/dist/cjs/transliterators/spaces.js +45 -0
  62. package/dist/cjs/transliterators/spaces.js.map +1 -0
  63. package/dist/cjs/types.d.ts +7 -0
  64. package/dist/cjs/types.js +3 -0
  65. package/dist/cjs/types.js.map +1 -0
  66. package/dist/esm/chars.d.ts +3 -0
  67. package/dist/esm/chars.js +37 -0
  68. package/dist/esm/chars.js.map +1 -0
  69. package/dist/esm/index.d.ts +35 -0
  70. package/dist/esm/index.js +40 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/intrinsics.d.ts +4 -0
  73. package/dist/esm/intrinsics.js +28 -0
  74. package/dist/esm/intrinsics.js.map +1 -0
  75. package/dist/esm/package.json +1 -0
  76. package/dist/esm/recipes.d.ts +176 -0
  77. package/dist/esm/recipes.js +151 -0
  78. package/dist/esm/recipes.js.map +1 -0
  79. package/dist/esm/transliterators/circled-or-squared.d.ts +27 -0
  80. package/dist/esm/transliterators/circled-or-squared.js +489 -0
  81. package/dist/esm/transliterators/circled-or-squared.js.map +1 -0
  82. package/dist/esm/transliterators/combined.d.ts +15 -0
  83. package/dist/esm/transliterators/combined.js +508 -0
  84. package/dist/esm/transliterators/combined.js.map +1 -0
  85. package/dist/esm/transliterators/hira-kata-composition.d.ts +11 -0
  86. package/dist/esm/transliterators/hira-kata-composition.js +44 -0
  87. package/dist/esm/transliterators/hira-kata-composition.js.map +1 -0
  88. package/dist/esm/transliterators/hira-kata-table.d.ts +4 -0
  89. package/dist/esm/transliterators/hira-kata-table.js +77 -0
  90. package/dist/esm/transliterators/hira-kata-table.js.map +1 -0
  91. package/dist/esm/transliterators/hira-kata.d.ts +6 -0
  92. package/dist/esm/transliterators/hira-kata.js +65 -0
  93. package/dist/esm/transliterators/hira-kata.js.map +1 -0
  94. package/dist/esm/transliterators/hyphens.d.ts +35 -0
  95. package/dist/esm/transliterators/hyphens.js +326 -0
  96. package/dist/esm/transliterators/hyphens.js.map +1 -0
  97. package/dist/esm/transliterators/ideographic-annotations.d.ts +15 -0
  98. package/dist/esm/transliterators/ideographic-annotations.js +37 -0
  99. package/dist/esm/transliterators/ideographic-annotations.js.map +1 -0
  100. package/dist/esm/transliterators/index.d.ts +19 -0
  101. package/dist/esm/transliterators/index.js +30 -0
  102. package/dist/esm/transliterators/index.js.map +1 -0
  103. package/dist/esm/transliterators/ivs-svs-base.d.ts +34 -0
  104. package/dist/esm/transliterators/ivs-svs-base.js +564 -0
  105. package/dist/esm/transliterators/ivs-svs-base.js.map +1 -0
  106. package/dist/esm/transliterators/japanese-iteration-marks.d.ts +4 -0
  107. package/dist/esm/transliterators/japanese-iteration-marks.js +204 -0
  108. package/dist/esm/transliterators/japanese-iteration-marks.js.map +1 -0
  109. package/dist/esm/transliterators/jisx0201-and-alike.d.ts +71 -0
  110. package/dist/esm/transliterators/jisx0201-and-alike.js +347 -0
  111. package/dist/esm/transliterators/jisx0201-and-alike.js.map +1 -0
  112. package/dist/esm/transliterators/kanji-old-new.d.ts +15 -0
  113. package/dist/esm/transliterators/kanji-old-new.js +1101 -0
  114. package/dist/esm/transliterators/kanji-old-new.js.map +1 -0
  115. package/dist/esm/transliterators/mathematical-alphanumerics.d.ts +15 -0
  116. package/dist/esm/transliterators/mathematical-alphanumerics.js +763 -0
  117. package/dist/esm/transliterators/mathematical-alphanumerics.js.map +1 -0
  118. package/dist/esm/transliterators/prolonged-sound-marks.d.ts +13 -0
  119. package/dist/esm/transliterators/prolonged-sound-marks.js +145 -0
  120. package/dist/esm/transliterators/prolonged-sound-marks.js.map +1 -0
  121. package/dist/esm/transliterators/radicals.d.ts +15 -0
  122. package/dist/esm/transliterators/radicals.js +325 -0
  123. package/dist/esm/transliterators/radicals.js.map +1 -0
  124. package/dist/esm/transliterators/spaces.d.ts +15 -0
  125. package/dist/esm/transliterators/spaces.js +43 -0
  126. package/dist/esm/transliterators/spaces.js.map +1 -0
  127. package/dist/esm/types.d.ts +7 -0
  128. package/dist/esm/types.js +2 -0
  129. package/dist/esm/types.js.map +1 -0
  130. package/package.json +74 -0
@@ -0,0 +1,37 @@
1
+ export const buildCharArray = (text) => {
2
+ const retval = [];
3
+ let offset = 0;
4
+ let pc;
5
+ let pcp;
6
+ for (const c of text) {
7
+ const cp = c.codePointAt(0);
8
+ if (pc !== undefined && pcp !== undefined) {
9
+ if ((cp >= 0xfe00 && cp <= 0xfe0f) || (cp >= 0xe0100 && cp <= 0xe01ef)) {
10
+ const cc = pc + c;
11
+ retval.push({ c: cc, offset, source: undefined });
12
+ offset += cc.length;
13
+ pc = pcp = undefined;
14
+ continue;
15
+ }
16
+ retval.push({ c: pc, offset, source: undefined });
17
+ offset += pc.length;
18
+ }
19
+ pc = c;
20
+ pcp = cp;
21
+ }
22
+ if (pc !== undefined && pcp !== undefined) {
23
+ retval.push({ c: pc, offset, source: undefined });
24
+ offset += pc.length;
25
+ }
26
+ // add sentinel
27
+ retval.push({ c: "", offset: offset, source: undefined });
28
+ return retval;
29
+ };
30
+ export const fromChars = (chars) => {
31
+ let result = "";
32
+ for (const c of chars) {
33
+ result += c.c;
34
+ }
35
+ return result;
36
+ };
37
+ //# sourceMappingURL=chars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chars.js","sourceRoot":"","sources":["../../src/chars.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IACrD,MAAM,MAAM,GAAW,EAAE,CAAC;IAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,EAAsB,CAAC;IAC3B,IAAI,GAAuB,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAW,CAAC;QACtC,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC;gBACvE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClD,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;gBACpB,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAClD,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,EAAE,GAAG,CAAC,CAAC;QACP,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IACD,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,eAAe;IACf,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAE,EAAE;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { TransliterationRecipe } from "./recipes.js";
2
+ import type { TransliteratorConfig } from "./transliterators/index.js";
3
+ export { buildCharArray, fromChars } from "./chars.js";
4
+ export { makeChainedTransliterator } from "./intrinsics.js";
5
+ export type { TransliterationRecipe } from "./recipes.js";
6
+ export { buildTransliteratorConfigsFromRecipe } from "./recipes.js";
7
+ export type { TransliteratorConfig } from "./transliterators/index.js";
8
+ /**
9
+ * Frontend convenience function to create a string-to-string transliterator from a recipe or a list of configs.
10
+ *
11
+ * ```typescript
12
+ * export const makeTransliterator = async (configsOrRecipe: (TransliteratorConfig | string)[] | TransliterationRecipe) => {
13
+ * const tl = await makeChainedTransliterator(
14
+ * Array.isArray(configsOrRecipe) ? configsOrRecipe : buildTransliteratorConfigsFromRecipe(configsOrRecipe),
15
+ * );
16
+ * return (in_: string) => {
17
+ * return fromChars(tl(buildCharArray(in_)));
18
+ * };
19
+ * };
20
+ * ```
21
+ *
22
+ * The low-level functions used here are:
23
+ *
24
+ * - {@link makeChainedTransliterator}
25
+ * - {@link fromChars}
26
+ * - {@link buildCharArray}
27
+ * - {@link buildTransliteratorConfigsFromRecipe}
28
+ *
29
+ * Please refer to the description of {@link buildTransliteratorConfigsFromRecipe} for the preferences that can be specified in a recipe. Also,
30
+ * refer to the description of {@link makeChainedTransliterator} and {@link TransliteratorConfig} for the details of the configuration objects.
31
+ *
32
+ * @param configsOrRecipe A recipe or a list of `TransliteratorConfig`s.
33
+ * @returns A transliterator function that takes a string and returns a string.
34
+ */
35
+ export declare const makeTransliterator: (configsOrRecipe: (TransliteratorConfig | string)[] | TransliterationRecipe) => Promise<(in_: string) => string>;
@@ -0,0 +1,40 @@
1
+ import { buildCharArray, fromChars } from "./chars.js";
2
+ import { makeChainedTransliterator } from "./intrinsics.js";
3
+ import { buildTransliteratorConfigsFromRecipe } from "./recipes.js";
4
+ export { buildCharArray, fromChars } from "./chars.js";
5
+ export { makeChainedTransliterator } from "./intrinsics.js";
6
+ export { buildTransliteratorConfigsFromRecipe } from "./recipes.js";
7
+ /**
8
+ * Frontend convenience function to create a string-to-string transliterator from a recipe or a list of configs.
9
+ *
10
+ * ```typescript
11
+ * export const makeTransliterator = async (configsOrRecipe: (TransliteratorConfig | string)[] | TransliterationRecipe) => {
12
+ * const tl = await makeChainedTransliterator(
13
+ * Array.isArray(configsOrRecipe) ? configsOrRecipe : buildTransliteratorConfigsFromRecipe(configsOrRecipe),
14
+ * );
15
+ * return (in_: string) => {
16
+ * return fromChars(tl(buildCharArray(in_)));
17
+ * };
18
+ * };
19
+ * ```
20
+ *
21
+ * The low-level functions used here are:
22
+ *
23
+ * - {@link makeChainedTransliterator}
24
+ * - {@link fromChars}
25
+ * - {@link buildCharArray}
26
+ * - {@link buildTransliteratorConfigsFromRecipe}
27
+ *
28
+ * Please refer to the description of {@link buildTransliteratorConfigsFromRecipe} for the preferences that can be specified in a recipe. Also,
29
+ * refer to the description of {@link makeChainedTransliterator} and {@link TransliteratorConfig} for the details of the configuration objects.
30
+ *
31
+ * @param configsOrRecipe A recipe or a list of `TransliteratorConfig`s.
32
+ * @returns A transliterator function that takes a string and returns a string.
33
+ */
34
+ export const makeTransliterator = async (configsOrRecipe) => {
35
+ const tl = await makeChainedTransliterator(Array.isArray(configsOrRecipe) ? configsOrRecipe : buildTransliteratorConfigsFromRecipe(configsOrRecipe));
36
+ return (in_) => {
37
+ return fromChars(tl(buildCharArray(in_)));
38
+ };
39
+ };
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,oCAAoC,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,oCAAoC,EAAE,MAAM,cAAc,CAAC;AAGpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,eAA0E,EAC1E,EAAE;IACF,MAAM,EAAE,GAAG,MAAM,yBAAyB,CACxC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,oCAAoC,CAAC,eAAe,CAAC,CACzG,CAAC;IACF,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,OAAO,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TransliteratorConfig } from "./transliterators/index.js";
2
+ import type { Char, Transliterator } from "./types.js";
3
+ export declare const makeChainedTransliterator: (transliteratorConfigs: (TransliteratorConfig | string)[]) => Promise<Transliterator>;
4
+ export declare const isTransliterated: (c: Char) => boolean;
@@ -0,0 +1,28 @@
1
+ import { getTransliteratorFactory } from "./transliterators/index.js";
2
+ export const makeChainedTransliterator = async (transliteratorConfigs) => {
3
+ let result;
4
+ for (const config of transliteratorConfigs) {
5
+ const t = typeof config === "string"
6
+ ? (await getTransliteratorFactory(config))({})
7
+ : (await getTransliteratorFactory(config[0]))(config[1]);
8
+ result = ((tt) => (tt !== undefined ? (in_) => t(tt(in_)) : t))(result);
9
+ }
10
+ if (result === undefined) {
11
+ throw new Error("at least one transliterator must be specified");
12
+ }
13
+ return result;
14
+ };
15
+ export const isTransliterated = (c) => {
16
+ for (;;) {
17
+ const s = c.source;
18
+ if (s === undefined) {
19
+ break;
20
+ }
21
+ if (s.c !== c.c) {
22
+ return true;
23
+ }
24
+ c = s;
25
+ }
26
+ return false;
27
+ };
28
+ //# sourceMappingURL=intrinsics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intrinsics.js","sourceRoot":"","sources":["../../src/intrinsics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAC5C,qBAAwD,EAC/B,EAAE;IAC3B,IAAI,MAAkC,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,CAAC,GACL,OAAO,MAAM,KAAK,QAAQ;YACxB,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,MAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,CAAC,CAAC,EAA8B,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAO,EAAE,EAAE;IAC1C,SAAS,CAAC;QACR,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM;QACR,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,176 @@
1
+ import type { Mapping } from "./transliterators/hyphens.js";
2
+ import type { TransliteratorConfig } from "./transliterators/index.js";
3
+ import type { Charset } from "./transliterators/ivs-svs-base.js";
4
+ export type TransliterationRecipe = {
5
+ /**
6
+ * Replace codepoints that correspond to old-style kanji glyphs (旧字体; kyu-ji-tai) with their modern equivalents (新字体; shin-ji-tai).
7
+ * @example
8
+ * ```js
9
+ * // Input: "舊字體の變換"
10
+ * // Output: "旧字体の変換"
11
+ * ```
12
+ */
13
+ kanjiOldNew?: boolean;
14
+ /**
15
+ * Convert between hiragana and katakana scripts.
16
+ * @example
17
+ * ```js
18
+ * // Input: "ひらがな" (with "hira-to-kata")
19
+ * // Output: "ヒラガナ"
20
+ * // Input: "カタカナ" (with "kata-to-hira")
21
+ * // Output: "かたかな"
22
+ * ```
23
+ */
24
+ hiraKata?: "hira-to-kata" | "kata-to-hira";
25
+ /**
26
+ * Replace Japanese iteration marks with the characters they represent.
27
+ * @example
28
+ * ```js
29
+ * // Input: "時々"
30
+ * // Output: "時時"
31
+ * // Input: "いすゞ"
32
+ * // Output: "いすず"
33
+ * ```
34
+ */
35
+ replaceJapaneseIterationMarks?: boolean;
36
+ /**
37
+ * Replace "suspicious" hyphens with prolonged sound marks, and vice versa.
38
+ * @example
39
+ * ```js
40
+ * // Input: "スーパ-" (with hyphen-minus)
41
+ * // Output: "スーパー" (becomes prolonged sound mark)
42
+ * ```
43
+ */
44
+ replaceSuspiciousHyphensToProlongedSoundMarks?: boolean;
45
+ /**
46
+ * Replace circled or squared characters with their corresponding templates.
47
+ * @example
48
+ * ```js
49
+ * // Input: "①②③"
50
+ * // Output: "(1)(2)(3)"
51
+ * // Input: "㊙㊗"
52
+ * // Output: "(秘)(祝)"
53
+ * ```
54
+ */
55
+ replaceCircledOrSquaredCharacters?: boolean | "exclude-emojis";
56
+ /**
57
+ * Replace combined characters with their corresponding characters.
58
+ * @example
59
+ * ```js
60
+ * // Input: "㍻" (single character for Heisei era)
61
+ * // Output: "平成"
62
+ * // Input: "㈱"
63
+ * // Output: "(株)"
64
+ * ```
65
+ */
66
+ replaceCombinedCharacters?: boolean;
67
+ /**
68
+ * Replace ideographic annotations used in the traditional method of Chinese-to-Japanese translation deviced in the ancient Japan.
69
+ * @example
70
+ * ```js
71
+ * // Input: "㆖㆘" (ideographic annotations)
72
+ * // Output: "上下"
73
+ * ```
74
+ */
75
+ replaceIdeographicAnnotations?: boolean;
76
+ /**
77
+ * Replace codepoints for the Kang Xi radicals whose glyphs resemble those of CJK ideographs with the CJK ideograph counterparts.
78
+ * @example
79
+ * ```js
80
+ * // Input: "⾔⾨⾷" (Kangxi radicals)
81
+ * // Output: "言門食" (CJK ideographs)
82
+ * ```
83
+ */
84
+ replaceRadicals?: boolean;
85
+ /**
86
+ * Replace various space characters with plain whitespaces or empty strings.
87
+ * @example
88
+ * ```js
89
+ * // Input: "A B" (ideographic space U+3000)
90
+ * // Output: "A B" (half-width space)
91
+ * // Input: "A B" (non-breaking space U+00A0)
92
+ * // Output: "A B" (regular space)
93
+ * ```
94
+ */
95
+ replaceSpaces?: boolean;
96
+ /**
97
+ * Replace various dash or hyphen symbols with those common in Japanese writing.
98
+ * @example
99
+ * ```js
100
+ * // Input: "2019—2020" (em dash)
101
+ * // Output: "2019-2020" (hyphen-minus)
102
+ * // Input: "A–B" (en dash)
103
+ * // Output: "A-B"
104
+ * ```
105
+ */
106
+ replaceHyphens?: boolean | Mapping[];
107
+ /**
108
+ * Replace mathematical alphanumerics with their plain ASCII equivalents.
109
+ * @example
110
+ * ```js
111
+ * // Input: "𝐀𝐁𝐂" (mathematical bold)
112
+ * // Output: "ABC"
113
+ * // Input: "𝟏𝟐𝟑" (mathematical bold digits)
114
+ * // Output: "123"
115
+ * ```
116
+ */
117
+ replaceMathematicalAlphanumerics?: boolean;
118
+ /**
119
+ * Combine decomposed hiraganas and katakanas into single counterparts.
120
+ * @example
121
+ * ```js
122
+ * // Input: "が" (か + ゙)
123
+ * // Output: "が" (single character)
124
+ * // Input: "ヘ゜" (ヘ + ゜)
125
+ * // Output: "ペ" (single character)
126
+ * ```
127
+ */
128
+ combineDecomposedHiraganasAndKatakanas?: boolean;
129
+ /**
130
+ * Replace half-width characters in that they are marked as half-width or ambiguous in the East Asian Width table to the fullwidth equivalents.
131
+ * Specify `"u005c-as-yen-sign"` instead of a boolean to treat the backslash character (U+005C) as the yen sign in JIS X 0201.
132
+ * @example
133
+ * ```js
134
+ * // Input: "ABC123"
135
+ * // Output: "ABC123"
136
+ * // Input: "カタカナ"
137
+ * // Output: "カタカナ"
138
+ * ```
139
+ */
140
+ toFullwidth?: boolean | "u005c-as-yen-sign";
141
+ /**
142
+ * Replace full-width characters with their half-width equivalents.
143
+ * Specify `"hankaku-kana"` instead of a boolean to handle half-width katakanas too.
144
+ * @example
145
+ * ```js
146
+ * // Input: "ABC123"
147
+ * // Output: "ABC123"
148
+ * // Input: "カタカナ" (with hankaku-kana)
149
+ * // Output: "カタカナ"
150
+ * ```
151
+ */
152
+ toHalfwidth?: boolean | "hankaku-kana";
153
+ /**
154
+ * Replace CJK ideographs followed by IVSes and SVSes with those without selectors based on Adobe-Japan1 character mappings.
155
+ * Specify `"drop-all-selectors"` to get rid of all selectors from the result.
156
+ * @example
157
+ * ```js
158
+ * // Input: "葛󠄀" (葛 + IVS U+E0100)
159
+ * // Output: "葛" (without selector)
160
+ * // Input: "辻󠄀" (辻 + IVS)
161
+ * // Output: "辻"
162
+ * ```
163
+ */
164
+ removeIVSSVS?: boolean | "drop-all-selectors";
165
+ /**
166
+ * Charset assumed during IVS/SVS transliteration. The default is `"unijis_2004"`.
167
+ */
168
+ charset?: Charset;
169
+ };
170
+ /**
171
+ * Builds an array of {@link TransliteratorConfig} from a recipe object.
172
+ *
173
+ * @param recipe An object that conforms to {@link TransliterationRecipe}.
174
+ * @returns An array of {@link TransliteratorConfig} that can be passed to {@link intrinsics.makeChainedTransliterator}.
175
+ */
176
+ export declare const buildTransliteratorConfigsFromRecipe: (recipe: TransliterationRecipe) => TransliteratorConfig[];
@@ -0,0 +1,151 @@
1
+ const applicationOrder = [
2
+ "kanjiOldNew",
3
+ "replaceSuspiciousHyphensToProlongedSoundMarks",
4
+ "replaceCircledOrSquaredCharacters",
5
+ "replaceCombinedCharacters",
6
+ "replaceIdeographicAnnotations",
7
+ "replaceRadicals",
8
+ "replaceSpaces",
9
+ "replaceHyphens",
10
+ "replaceMathematicalAlphanumerics",
11
+ "combineDecomposedHiraganasAndKatakanas",
12
+ "toFullwidth",
13
+ "hiraKata",
14
+ "replaceJapaneseIterationMarks",
15
+ "toHalfwidth",
16
+ "removeIVSSVS",
17
+ ];
18
+ const insertHead = (ctx, config, forceReplace) => {
19
+ const i = ctx.head.findIndex((c) => c[0] === config[0]);
20
+ if (i >= 0) {
21
+ return forceReplace
22
+ ? {
23
+ ...ctx,
24
+ head: [...ctx.head.slice(0, i), config, ...ctx.head.slice(i + 1)],
25
+ }
26
+ : ctx;
27
+ }
28
+ return {
29
+ ...ctx,
30
+ head: [config, ...ctx.head],
31
+ };
32
+ };
33
+ const insertMiddle = (ctx, config, forceReplace) => {
34
+ const i = ctx.tail.findIndex((c) => c[0] === config[0]);
35
+ if (i >= 0) {
36
+ return forceReplace
37
+ ? {
38
+ ...ctx,
39
+ tail: [...ctx.tail.slice(0, i), config, ...ctx.tail.slice(i + 1)],
40
+ }
41
+ : ctx;
42
+ }
43
+ return {
44
+ ...ctx,
45
+ tail: [config, ...ctx.tail],
46
+ };
47
+ };
48
+ const insertTail = (ctx, config, forceReplace) => {
49
+ const i = ctx.tail.findIndex((c) => c[0] === config[0]);
50
+ if (i >= 0) {
51
+ return forceReplace
52
+ ? {
53
+ ...ctx,
54
+ tail: [...ctx.tail.slice(0, i), ...ctx.tail.slice(i + 1), config],
55
+ }
56
+ : ctx;
57
+ }
58
+ return {
59
+ ...ctx,
60
+ tail: [...ctx.tail, config],
61
+ };
62
+ };
63
+ const removeIVSSVS = (ctx, dropSelectorsAltogether, charset) => insertTail(insertHead(ctx, ["ivs-svs-base", { mode: "ivs-or-svs" }], true), ["ivs-svs-base", { mode: "base", dropSelectorsAltogether, charset: charset }], true);
64
+ const transliteratorAppliers = {
65
+ kanjiOldNew: (ctx, recipe) => recipe.kanjiOldNew ? insertMiddle(removeIVSSVS(ctx, false, recipe.charset), ["kanji-old-new", {}]) : ctx,
66
+ hiraKata: (ctx, recipe) => (recipe.hiraKata ? insertMiddle(ctx, ["hira-kata", { mode: recipe.hiraKata }]) : ctx),
67
+ replaceJapaneseIterationMarks: (ctx, recipe) => {
68
+ if (!recipe.replaceJapaneseIterationMarks)
69
+ return ctx;
70
+ // Insert HiraKataComposition at head to ensure composed forms
71
+ ctx = insertHead(ctx, ["hira-kata-composition", { composeNonCombiningMarks: true }]);
72
+ // Then insert the japanese-iteration-marks in the middle
73
+ return insertMiddle(ctx, ["japanese-iteration-marks", {}]);
74
+ },
75
+ replaceSuspiciousHyphensToProlongedSoundMarks: (ctx, recipe) => recipe.replaceSuspiciousHyphensToProlongedSoundMarks
76
+ ? insertMiddle(ctx, ["prolonged-sound-marks", { replaceProlongedMarksFollowingAlnums: true }])
77
+ : ctx,
78
+ replaceCircledOrSquaredCharacters: (ctx, recipe) => recipe.replaceCircledOrSquaredCharacters
79
+ ? insertMiddle(ctx, [
80
+ "circled-or-squared",
81
+ {
82
+ includeEmojis: recipe.replaceCircledOrSquaredCharacters !== "exclude-emojis",
83
+ },
84
+ ])
85
+ : ctx,
86
+ replaceCombinedCharacters: (ctx, recipe) => recipe.replaceCombinedCharacters ? insertMiddle(ctx, ["combined", {}]) : ctx,
87
+ replaceIdeographicAnnotations: (ctx, recipe) => recipe.replaceIdeographicAnnotations ? insertMiddle(ctx, ["ideographic-annotations", {}]) : ctx,
88
+ replaceRadicals: (ctx, recipe) => (recipe.replaceRadicals ? insertMiddle(ctx, ["radicals", {}]) : ctx),
89
+ replaceSpaces: (ctx, recipe) => (recipe.replaceSpaces ? insertMiddle(ctx, ["spaces", {}]) : ctx),
90
+ replaceHyphens: (ctx, recipe) => recipe.replaceHyphens
91
+ ? insertMiddle(ctx, [
92
+ "hyphens",
93
+ {
94
+ precedence: typeof recipe.replaceHyphens === "boolean" ? ["jisx0208_90_windows", "jisx0201"] : recipe.replaceHyphens,
95
+ },
96
+ ])
97
+ : ctx,
98
+ replaceMathematicalAlphanumerics: (ctx, recipe) => recipe.replaceMathematicalAlphanumerics ? insertMiddle(ctx, ["mathematical-alphanumerics", {}]) : ctx,
99
+ combineDecomposedHiraganasAndKatakanas: (ctx, recipe) => recipe.combineDecomposedHiraganasAndKatakanas
100
+ ? insertHead(ctx, ["hira-kata-composition", { composeNonCombiningMarks: true }])
101
+ : ctx,
102
+ toHalfwidth: (ctx, recipe) => {
103
+ if (recipe.toHalfwidth && recipe.toFullwidth) {
104
+ throw ["toHalfwidth and toFullwidth are mutually exclusive"];
105
+ }
106
+ return recipe.toHalfwidth
107
+ ? insertTail(ctx, [
108
+ "jisx0201-and-alike",
109
+ { fullwidthToHalfwidth: true, convertGL: true, convertGR: recipe.toHalfwidth === "hankaku-kana" },
110
+ ])
111
+ : ctx;
112
+ },
113
+ toFullwidth: (ctx, recipe) => {
114
+ if (recipe.toFullwidth && recipe.toHalfwidth) {
115
+ throw ["toFullwidth and toHalfwidth are mutually exclusive"];
116
+ }
117
+ return recipe.toFullwidth
118
+ ? insertTail(ctx, [
119
+ "jisx0201-and-alike",
120
+ { fullwidthToHalfwidth: false, u005cAsYenSign: recipe.toFullwidth === "u005c-as-yen-sign" },
121
+ ])
122
+ : ctx;
123
+ },
124
+ removeIVSSVS: (ctx, recipe) => recipe.removeIVSSVS ? removeIVSSVS(ctx, recipe.removeIVSSVS === "drop-all-selectors", recipe.charset) : ctx,
125
+ };
126
+ /**
127
+ * Builds an array of {@link TransliteratorConfig} from a recipe object.
128
+ *
129
+ * @param recipe An object that conforms to {@link TransliterationRecipe}.
130
+ * @returns An array of {@link TransliteratorConfig} that can be passed to {@link intrinsics.makeChainedTransliterator}.
131
+ */
132
+ export const buildTransliteratorConfigsFromRecipe = (recipe) => {
133
+ let ctx = { head: [], tail: [] };
134
+ const errors = [];
135
+ for (const k of applicationOrder) {
136
+ try {
137
+ ctx = transliteratorAppliers[k](ctx, recipe);
138
+ }
139
+ catch (e) {
140
+ if (!Array.isArray(e)) {
141
+ throw e;
142
+ }
143
+ errors.push([k, e]);
144
+ }
145
+ }
146
+ if (errors.length) {
147
+ throw new Error(errors.map(([tl, errors]) => `${tl}: ${errors.join(", ")}`).join("; "));
148
+ }
149
+ return [...ctx.head, ...ctx.tail];
150
+ };
151
+ //# sourceMappingURL=recipes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/recipes.ts"],"names":[],"mappings":"AA8KA,MAAM,gBAAgB,GAAgC;IACpD,aAAa;IACb,+CAA+C;IAC/C,mCAAmC;IACnC,2BAA2B;IAC3B,+BAA+B;IAC/B,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,kCAAkC;IAClC,wCAAwC;IACxC,aAAa;IACb,UAAU;IACV,+BAA+B;IAC/B,aAAa;IACb,cAAc;CACf,CAAC;AAOF,MAAM,UAAU,GAAG,CACjB,GAAoC,EACpC,MAA4B,EAC5B,YAAsB,EACW,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,YAAY;YACjB,CAAC,CAAC;gBACE,GAAG,GAAG;gBACN,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAClE;YACH,CAAC,CAAC,GAAG,CAAC;IACV,CAAC;IACD,OAAO;QACL,GAAG,GAAG;QACN,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACnB,GAAoC,EACpC,MAA4B,EAC5B,YAAsB,EACW,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,YAAY;YACjB,CAAC,CAAC;gBACE,GAAG,GAAG;gBACN,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAClE;YACH,CAAC,CAAC,GAAG,CAAC;IACV,CAAC;IACD,OAAO;QACL,GAAG,GAAG;QACN,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACjB,GAAoC,EACpC,MAA4B,EAC5B,YAAsB,EACW,EAAE;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,YAAY;YACjB,CAAC,CAAC;gBACE,GAAG,GAAG;gBACN,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;aAClE;YACH,CAAC,CAAC,GAAG,CAAC;IACV,CAAC;IACD,OAAO;QACL,GAAG,GAAG;QACN,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,GAAoC,EAAE,uBAAgC,EAAE,OAAiB,EAAE,EAAE,CACjH,UAAU,CACR,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,EAC/D,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAC7E,IAAI,CACL,CAAC;AAEJ,MAAM,sBAAsB,GAKxB;IACF,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC3B,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IAC1G,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChH,6BAA6B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,CAAC,MAAM,CAAC,6BAA6B;YAAE,OAAO,GAAG,CAAC;QACtD,8DAA8D;QAC9D,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrF,yDAAyD;QACzD,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,6CAA6C,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC7D,MAAM,CAAC,6CAA6C;QAClD,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,oCAAoC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,GAAG;IACT,iCAAiC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACjD,MAAM,CAAC,iCAAiC;QACtC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE;YAChB,oBAAoB;YACpB;gBACE,aAAa,EAAE,MAAM,CAAC,iCAAiC,KAAK,gBAAgB;aAC7E;SACF,CAAC;QACJ,CAAC,CAAC,GAAG;IACT,yBAAyB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACzC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IAC9E,6BAA6B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC7C,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IACjG,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtG,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChG,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC9B,MAAM,CAAC,cAAc;QACnB,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE;YAChB,SAAS;YACT;gBACE,UAAU,EACR,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc;aAC3G;SACF,CAAC;QACJ,CAAC,CAAC,GAAG;IACT,gCAAgC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAChD,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IACvG,sCAAsC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACtD,MAAM,CAAC,sCAAsC;QAC3C,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,GAAG;IACT,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3B,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,oDAAoD,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC,WAAW;YACvB,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACd,oBAAoB;gBACpB,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,KAAK,cAAc,EAAE;aAClG,CAAC;YACJ,CAAC,CAAC,GAAG,CAAC;IACV,CAAC;IACD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3B,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,oDAAoD,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC,WAAW;YACvB,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACd,oBAAoB;gBACpB,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,KAAK,mBAAmB,EAAE;aAC5F,CAAC;YACJ,CAAC,CAAC,GAAG,CAAC;IACV,CAAC;IACD,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC5B,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,KAAK,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;CAC9G,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,MAA6B,EAA0B,EAAE;IAC5G,IAAI,GAAG,GAAoC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAa,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /***
2
+ * Transliterator that replaces circled or squared characters with their corresponding templates.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Char } from "../types.ts";
7
+ export type Options = {
8
+ /**
9
+ * Templates used to render circled or squared characters.
10
+ */
11
+ templates?: {
12
+ circle?: string;
13
+ square?: string;
14
+ };
15
+ /**
16
+ * Whether to include emojis in the transliteration. If false, only non-emoji characters will be processed.
17
+ */
18
+ includeEmojis?: boolean;
19
+ };
20
+ /**
21
+ * A transliterator that replaces circled or squared characters.
22
+ *
23
+ * @param options Options for the transliterator.
24
+ * @returns An iterable that yields transliterated characters.
25
+ */
26
+ declare const _default: (options: Options) => ((_: Iterable<Char>) => Iterable<Char>);
27
+ export default _default;