@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.
- package/README.ja.md +177 -0
- package/README.md +177 -0
- package/dist/cjs/chars.d.ts +3 -0
- package/dist/cjs/chars.js +42 -0
- package/dist/cjs/chars.js.map +1 -0
- package/dist/cjs/index.d.ts +35 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/intrinsics.d.ts +4 -0
- package/dist/cjs/intrinsics.js +33 -0
- package/dist/cjs/intrinsics.js.map +1 -0
- package/dist/cjs/recipes.d.ts +176 -0
- package/dist/cjs/recipes.js +155 -0
- package/dist/cjs/recipes.js.map +1 -0
- package/dist/cjs/transliterators/circled-or-squared.d.ts +27 -0
- package/dist/cjs/transliterators/circled-or-squared.js +491 -0
- package/dist/cjs/transliterators/circled-or-squared.js.map +1 -0
- package/dist/cjs/transliterators/combined.d.ts +15 -0
- package/dist/cjs/transliterators/combined.js +510 -0
- package/dist/cjs/transliterators/combined.js.map +1 -0
- package/dist/cjs/transliterators/hira-kata-composition.d.ts +11 -0
- package/dist/cjs/transliterators/hira-kata-composition.js +46 -0
- package/dist/cjs/transliterators/hira-kata-composition.js.map +1 -0
- package/dist/cjs/transliterators/hira-kata-table.d.ts +4 -0
- package/dist/cjs/transliterators/hira-kata-table.js +80 -0
- package/dist/cjs/transliterators/hira-kata-table.js.map +1 -0
- package/dist/cjs/transliterators/hira-kata.d.ts +6 -0
- package/dist/cjs/transliterators/hira-kata.js +67 -0
- package/dist/cjs/transliterators/hira-kata.js.map +1 -0
- package/dist/cjs/transliterators/hyphens.d.ts +35 -0
- package/dist/cjs/transliterators/hyphens.js +329 -0
- package/dist/cjs/transliterators/hyphens.js.map +1 -0
- package/dist/cjs/transliterators/ideographic-annotations.d.ts +15 -0
- package/dist/cjs/transliterators/ideographic-annotations.js +39 -0
- package/dist/cjs/transliterators/ideographic-annotations.js.map +1 -0
- package/dist/cjs/transliterators/index.d.ts +19 -0
- package/dist/cjs/transliterators/index.js +67 -0
- package/dist/cjs/transliterators/index.js.map +1 -0
- package/dist/cjs/transliterators/ivs-svs-base.d.ts +34 -0
- package/dist/cjs/transliterators/ivs-svs-base.js +567 -0
- package/dist/cjs/transliterators/ivs-svs-base.js.map +1 -0
- package/dist/cjs/transliterators/japanese-iteration-marks.d.ts +4 -0
- package/dist/cjs/transliterators/japanese-iteration-marks.js +206 -0
- package/dist/cjs/transliterators/japanese-iteration-marks.js.map +1 -0
- package/dist/cjs/transliterators/jisx0201-and-alike.d.ts +71 -0
- package/dist/cjs/transliterators/jisx0201-and-alike.js +349 -0
- package/dist/cjs/transliterators/jisx0201-and-alike.js.map +1 -0
- package/dist/cjs/transliterators/kanji-old-new.d.ts +15 -0
- package/dist/cjs/transliterators/kanji-old-new.js +1103 -0
- package/dist/cjs/transliterators/kanji-old-new.js.map +1 -0
- package/dist/cjs/transliterators/mathematical-alphanumerics.d.ts +15 -0
- package/dist/cjs/transliterators/mathematical-alphanumerics.js +765 -0
- package/dist/cjs/transliterators/mathematical-alphanumerics.js.map +1 -0
- package/dist/cjs/transliterators/prolonged-sound-marks.d.ts +13 -0
- package/dist/cjs/transliterators/prolonged-sound-marks.js +147 -0
- package/dist/cjs/transliterators/prolonged-sound-marks.js.map +1 -0
- package/dist/cjs/transliterators/radicals.d.ts +15 -0
- package/dist/cjs/transliterators/radicals.js +327 -0
- package/dist/cjs/transliterators/radicals.js.map +1 -0
- package/dist/cjs/transliterators/spaces.d.ts +15 -0
- package/dist/cjs/transliterators/spaces.js +45 -0
- package/dist/cjs/transliterators/spaces.js.map +1 -0
- package/dist/cjs/types.d.ts +7 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/chars.d.ts +3 -0
- package/dist/esm/chars.js +37 -0
- package/dist/esm/chars.js.map +1 -0
- package/dist/esm/index.d.ts +35 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/intrinsics.d.ts +4 -0
- package/dist/esm/intrinsics.js +28 -0
- package/dist/esm/intrinsics.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/recipes.d.ts +176 -0
- package/dist/esm/recipes.js +151 -0
- package/dist/esm/recipes.js.map +1 -0
- package/dist/esm/transliterators/circled-or-squared.d.ts +27 -0
- package/dist/esm/transliterators/circled-or-squared.js +489 -0
- package/dist/esm/transliterators/circled-or-squared.js.map +1 -0
- package/dist/esm/transliterators/combined.d.ts +15 -0
- package/dist/esm/transliterators/combined.js +508 -0
- package/dist/esm/transliterators/combined.js.map +1 -0
- package/dist/esm/transliterators/hira-kata-composition.d.ts +11 -0
- package/dist/esm/transliterators/hira-kata-composition.js +44 -0
- package/dist/esm/transliterators/hira-kata-composition.js.map +1 -0
- package/dist/esm/transliterators/hira-kata-table.d.ts +4 -0
- package/dist/esm/transliterators/hira-kata-table.js +77 -0
- package/dist/esm/transliterators/hira-kata-table.js.map +1 -0
- package/dist/esm/transliterators/hira-kata.d.ts +6 -0
- package/dist/esm/transliterators/hira-kata.js +65 -0
- package/dist/esm/transliterators/hira-kata.js.map +1 -0
- package/dist/esm/transliterators/hyphens.d.ts +35 -0
- package/dist/esm/transliterators/hyphens.js +326 -0
- package/dist/esm/transliterators/hyphens.js.map +1 -0
- package/dist/esm/transliterators/ideographic-annotations.d.ts +15 -0
- package/dist/esm/transliterators/ideographic-annotations.js +37 -0
- package/dist/esm/transliterators/ideographic-annotations.js.map +1 -0
- package/dist/esm/transliterators/index.d.ts +19 -0
- package/dist/esm/transliterators/index.js +30 -0
- package/dist/esm/transliterators/index.js.map +1 -0
- package/dist/esm/transliterators/ivs-svs-base.d.ts +34 -0
- package/dist/esm/transliterators/ivs-svs-base.js +564 -0
- package/dist/esm/transliterators/ivs-svs-base.js.map +1 -0
- package/dist/esm/transliterators/japanese-iteration-marks.d.ts +4 -0
- package/dist/esm/transliterators/japanese-iteration-marks.js +204 -0
- package/dist/esm/transliterators/japanese-iteration-marks.js.map +1 -0
- package/dist/esm/transliterators/jisx0201-and-alike.d.ts +71 -0
- package/dist/esm/transliterators/jisx0201-and-alike.js +347 -0
- package/dist/esm/transliterators/jisx0201-and-alike.js.map +1 -0
- package/dist/esm/transliterators/kanji-old-new.d.ts +15 -0
- package/dist/esm/transliterators/kanji-old-new.js +1101 -0
- package/dist/esm/transliterators/kanji-old-new.js.map +1 -0
- package/dist/esm/transliterators/mathematical-alphanumerics.d.ts +15 -0
- package/dist/esm/transliterators/mathematical-alphanumerics.js +763 -0
- package/dist/esm/transliterators/mathematical-alphanumerics.js.map +1 -0
- package/dist/esm/transliterators/prolonged-sound-marks.d.ts +13 -0
- package/dist/esm/transliterators/prolonged-sound-marks.js +145 -0
- package/dist/esm/transliterators/prolonged-sound-marks.js.map +1 -0
- package/dist/esm/transliterators/radicals.d.ts +15 -0
- package/dist/esm/transliterators/radicals.js +325 -0
- package/dist/esm/transliterators/radicals.js.map +1 -0
- package/dist/esm/transliterators/spaces.d.ts +15 -0
- package/dist/esm/transliterators/spaces.js +43 -0
- package/dist/esm/transliterators/spaces.js.map +1 -0
- package/dist/esm/types.d.ts +7 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +74 -0
|
@@ -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,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTransliteratorConfigsFromRecipe = void 0;
|
|
4
|
+
const applicationOrder = [
|
|
5
|
+
"kanjiOldNew",
|
|
6
|
+
"replaceSuspiciousHyphensToProlongedSoundMarks",
|
|
7
|
+
"replaceCircledOrSquaredCharacters",
|
|
8
|
+
"replaceCombinedCharacters",
|
|
9
|
+
"replaceIdeographicAnnotations",
|
|
10
|
+
"replaceRadicals",
|
|
11
|
+
"replaceSpaces",
|
|
12
|
+
"replaceHyphens",
|
|
13
|
+
"replaceMathematicalAlphanumerics",
|
|
14
|
+
"combineDecomposedHiraganasAndKatakanas",
|
|
15
|
+
"toFullwidth",
|
|
16
|
+
"hiraKata",
|
|
17
|
+
"replaceJapaneseIterationMarks",
|
|
18
|
+
"toHalfwidth",
|
|
19
|
+
"removeIVSSVS",
|
|
20
|
+
];
|
|
21
|
+
const insertHead = (ctx, config, forceReplace) => {
|
|
22
|
+
const i = ctx.head.findIndex((c) => c[0] === config[0]);
|
|
23
|
+
if (i >= 0) {
|
|
24
|
+
return forceReplace
|
|
25
|
+
? {
|
|
26
|
+
...ctx,
|
|
27
|
+
head: [...ctx.head.slice(0, i), config, ...ctx.head.slice(i + 1)],
|
|
28
|
+
}
|
|
29
|
+
: ctx;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
...ctx,
|
|
33
|
+
head: [config, ...ctx.head],
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const insertMiddle = (ctx, config, forceReplace) => {
|
|
37
|
+
const i = ctx.tail.findIndex((c) => c[0] === config[0]);
|
|
38
|
+
if (i >= 0) {
|
|
39
|
+
return forceReplace
|
|
40
|
+
? {
|
|
41
|
+
...ctx,
|
|
42
|
+
tail: [...ctx.tail.slice(0, i), config, ...ctx.tail.slice(i + 1)],
|
|
43
|
+
}
|
|
44
|
+
: ctx;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
...ctx,
|
|
48
|
+
tail: [config, ...ctx.tail],
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
const insertTail = (ctx, config, forceReplace) => {
|
|
52
|
+
const i = ctx.tail.findIndex((c) => c[0] === config[0]);
|
|
53
|
+
if (i >= 0) {
|
|
54
|
+
return forceReplace
|
|
55
|
+
? {
|
|
56
|
+
...ctx,
|
|
57
|
+
tail: [...ctx.tail.slice(0, i), ...ctx.tail.slice(i + 1), config],
|
|
58
|
+
}
|
|
59
|
+
: ctx;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
...ctx,
|
|
63
|
+
tail: [...ctx.tail, config],
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
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);
|
|
67
|
+
const transliteratorAppliers = {
|
|
68
|
+
kanjiOldNew: (ctx, recipe) => recipe.kanjiOldNew ? insertMiddle(removeIVSSVS(ctx, false, recipe.charset), ["kanji-old-new", {}]) : ctx,
|
|
69
|
+
hiraKata: (ctx, recipe) => (recipe.hiraKata ? insertMiddle(ctx, ["hira-kata", { mode: recipe.hiraKata }]) : ctx),
|
|
70
|
+
replaceJapaneseIterationMarks: (ctx, recipe) => {
|
|
71
|
+
if (!recipe.replaceJapaneseIterationMarks)
|
|
72
|
+
return ctx;
|
|
73
|
+
// Insert HiraKataComposition at head to ensure composed forms
|
|
74
|
+
ctx = insertHead(ctx, ["hira-kata-composition", { composeNonCombiningMarks: true }]);
|
|
75
|
+
// Then insert the japanese-iteration-marks in the middle
|
|
76
|
+
return insertMiddle(ctx, ["japanese-iteration-marks", {}]);
|
|
77
|
+
},
|
|
78
|
+
replaceSuspiciousHyphensToProlongedSoundMarks: (ctx, recipe) => recipe.replaceSuspiciousHyphensToProlongedSoundMarks
|
|
79
|
+
? insertMiddle(ctx, ["prolonged-sound-marks", { replaceProlongedMarksFollowingAlnums: true }])
|
|
80
|
+
: ctx,
|
|
81
|
+
replaceCircledOrSquaredCharacters: (ctx, recipe) => recipe.replaceCircledOrSquaredCharacters
|
|
82
|
+
? insertMiddle(ctx, [
|
|
83
|
+
"circled-or-squared",
|
|
84
|
+
{
|
|
85
|
+
includeEmojis: recipe.replaceCircledOrSquaredCharacters !== "exclude-emojis",
|
|
86
|
+
},
|
|
87
|
+
])
|
|
88
|
+
: ctx,
|
|
89
|
+
replaceCombinedCharacters: (ctx, recipe) => recipe.replaceCombinedCharacters ? insertMiddle(ctx, ["combined", {}]) : ctx,
|
|
90
|
+
replaceIdeographicAnnotations: (ctx, recipe) => recipe.replaceIdeographicAnnotations ? insertMiddle(ctx, ["ideographic-annotations", {}]) : ctx,
|
|
91
|
+
replaceRadicals: (ctx, recipe) => (recipe.replaceRadicals ? insertMiddle(ctx, ["radicals", {}]) : ctx),
|
|
92
|
+
replaceSpaces: (ctx, recipe) => (recipe.replaceSpaces ? insertMiddle(ctx, ["spaces", {}]) : ctx),
|
|
93
|
+
replaceHyphens: (ctx, recipe) => recipe.replaceHyphens
|
|
94
|
+
? insertMiddle(ctx, [
|
|
95
|
+
"hyphens",
|
|
96
|
+
{
|
|
97
|
+
precedence: typeof recipe.replaceHyphens === "boolean" ? ["jisx0208_90_windows", "jisx0201"] : recipe.replaceHyphens,
|
|
98
|
+
},
|
|
99
|
+
])
|
|
100
|
+
: ctx,
|
|
101
|
+
replaceMathematicalAlphanumerics: (ctx, recipe) => recipe.replaceMathematicalAlphanumerics ? insertMiddle(ctx, ["mathematical-alphanumerics", {}]) : ctx,
|
|
102
|
+
combineDecomposedHiraganasAndKatakanas: (ctx, recipe) => recipe.combineDecomposedHiraganasAndKatakanas
|
|
103
|
+
? insertHead(ctx, ["hira-kata-composition", { composeNonCombiningMarks: true }])
|
|
104
|
+
: ctx,
|
|
105
|
+
toHalfwidth: (ctx, recipe) => {
|
|
106
|
+
if (recipe.toHalfwidth && recipe.toFullwidth) {
|
|
107
|
+
throw ["toHalfwidth and toFullwidth are mutually exclusive"];
|
|
108
|
+
}
|
|
109
|
+
return recipe.toHalfwidth
|
|
110
|
+
? insertTail(ctx, [
|
|
111
|
+
"jisx0201-and-alike",
|
|
112
|
+
{ fullwidthToHalfwidth: true, convertGL: true, convertGR: recipe.toHalfwidth === "hankaku-kana" },
|
|
113
|
+
])
|
|
114
|
+
: ctx;
|
|
115
|
+
},
|
|
116
|
+
toFullwidth: (ctx, recipe) => {
|
|
117
|
+
if (recipe.toFullwidth && recipe.toHalfwidth) {
|
|
118
|
+
throw ["toFullwidth and toHalfwidth are mutually exclusive"];
|
|
119
|
+
}
|
|
120
|
+
return recipe.toFullwidth
|
|
121
|
+
? insertTail(ctx, [
|
|
122
|
+
"jisx0201-and-alike",
|
|
123
|
+
{ fullwidthToHalfwidth: false, u005cAsYenSign: recipe.toFullwidth === "u005c-as-yen-sign" },
|
|
124
|
+
])
|
|
125
|
+
: ctx;
|
|
126
|
+
},
|
|
127
|
+
removeIVSSVS: (ctx, recipe) => recipe.removeIVSSVS ? removeIVSSVS(ctx, recipe.removeIVSSVS === "drop-all-selectors", recipe.charset) : ctx,
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Builds an array of {@link TransliteratorConfig} from a recipe object.
|
|
131
|
+
*
|
|
132
|
+
* @param recipe An object that conforms to {@link TransliterationRecipe}.
|
|
133
|
+
* @returns An array of {@link TransliteratorConfig} that can be passed to {@link intrinsics.makeChainedTransliterator}.
|
|
134
|
+
*/
|
|
135
|
+
const buildTransliteratorConfigsFromRecipe = (recipe) => {
|
|
136
|
+
let ctx = { head: [], tail: [] };
|
|
137
|
+
const errors = [];
|
|
138
|
+
for (const k of applicationOrder) {
|
|
139
|
+
try {
|
|
140
|
+
ctx = transliteratorAppliers[k](ctx, recipe);
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
if (!Array.isArray(e)) {
|
|
144
|
+
throw e;
|
|
145
|
+
}
|
|
146
|
+
errors.push([k, e]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (errors.length) {
|
|
150
|
+
throw new Error(errors.map(([tl, errors]) => `${tl}: ${errors.join(", ")}`).join("; "));
|
|
151
|
+
}
|
|
152
|
+
return [...ctx.head, ...ctx.tail];
|
|
153
|
+
};
|
|
154
|
+
exports.buildTransliteratorConfigsFromRecipe = buildTransliteratorConfigsFromRecipe;
|
|
155
|
+
//# sourceMappingURL=recipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|