unicode-input-toolconverter 0.2.0 → 0.2.3
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/.nyc_output/out.json +8980 -1849
- package/CHANGES.md +15 -1
- package/README.md +6 -11
- package/_locales/en-US/messages.json +153 -6
- package/_locales/hu-HU/messages.json +153 -6
- package/_locales/pt-BR/messages.json +153 -6
- package/_locales/sv-SE/messages.json +153 -6
- package/babel.config.json +0 -1
- package/browser_action/characterSelection.js +18 -11
- package/browser_action/charrefConverters.js +286 -79
- package/browser_action/chartBuild.js +97 -27
- package/browser_action/encodingBehaviors.js +10 -7
- package/browser_action/entityBehaviors.js +42 -16
- package/browser_action/index-es.html +13 -1
- package/browser_action/index-instrumented.html +13 -1
- package/browser_action/index-pages.html +13 -1
- package/browser_action/index.html +13 -1
- package/browser_action/index.iife.min.js +9 -1
- package/browser_action/index.iife.min.js.map +1 -1
- package/browser_action/index.instrumented.iife.min.js +1 -1
- package/browser_action/index.instrumented.iife.min.js.map +1 -1
- package/browser_action/index.js +5 -5
- package/browser_action/preferences/prefDefaults.js +12 -3
- package/browser_action/service-worker/sw-activateCallback.js +1 -2
- package/browser_action/service-worker/sw-resources.json +6 -4
- package/browser_action/templateUtils/elements.js +12 -1
- package/browser_action/templateUtils/fill.js +6 -0
- package/browser_action/templateUtils/validation.js +4 -1
- package/browser_action/templates/chartBuild.js +167 -102
- package/browser_action/templates/index.js +227 -53
- package/browser_action/templatesElementCustomization/widgets.js +40 -15
- package/browser_action/unicode/UnicodeConverter.js +99 -73
- package/browser_action/unicode/charrefunicodeDb.js +100 -50
- package/browser_action/unicode/getScriptInfoForCodePoint.js +13 -4
- package/browser_action/unicode/hangul.js +27 -20
- package/browser_action/unicode/lastScriptNames.json +1 -1
- package/browser_action/unicode/parseUnihanFromTextFileStrings.js +44 -25
- package/browser_action/unicode/unicodeFieldInfo.js +112 -90
- package/browser_action/unicode/unicodeScripts.js +409 -35
- package/browser_action/unicode/unihan.js +4 -3
- package/browser_action/unicode/unihanDbPopulate.js +7 -2
- package/browser_action/unicode/unihanFields.js +34 -0
- package/browser_action/unicodecharref.js +353 -190
- package/browser_action/utils/DOMUtils.js +95 -34
- package/browser_action/utils/FetchUtils.js +7 -6
- package/browser_action/utils/TextUtils.js +4 -4
- package/browser_action/utils/TypedArrayUtils.js +9 -5
- package/browser_action/utils/semicolonSeparatedToArray.js +3 -3
- package/browser_action/utils/setupServiceWorker.js +2 -2
- package/eslint.config.js +11 -0
- package/icons/openWindow16.png +0 -0
- package/icons/openWindow24.png +0 -0
- package/lib/background.html +7 -0
- package/lib/background.js +2 -2
- package/package.json +80 -70
- package/pnpm-workspace.yaml +8 -0
- package/server.js +66 -51
- package/sw.js +97 -56
- package/tools/entities-import.js +4 -1
- package/tools/findEsResources.js +33 -10
- package/tools/fix-sw-resources-vendor-paths.js +60 -0
- package/tools/list-locales.js +2 -2
- package/tools/parseUnicodeCharts.js +126 -60
- package/tools/ucd-import.js +1 -10
- package/tools/unicode-charts.html +49 -20
- package/tools/unihan-import.js +45 -15
- package/tools/write-sw-version.js +16 -0
- package/tsconfig.json +23 -0
- package/typings/__coverage__.d.ts +5 -0
- package/typings/apple-system-profiler.d.ts +17 -0
- package/typings/commands.d.ts +19 -0
- package/typings/json-6.d.ts +4 -0
- package/typings/rollup-plugin-istanbul.d.ts +3 -0
- package/vendor/camelcase/index.d.ts +154 -0
- package/vendor/camelcase/index.js +137 -23
- package/vendor/fflate/esm/browser.d.ts +1539 -0
- package/vendor/fflate/esm/browser.js +82 -55
- package/vendor/intl-dom/dist/Formatter.d.ts +120 -0
- package/vendor/intl-dom/dist/Formatter.d.ts.map +1 -0
- package/vendor/intl-dom/dist/collation.d.ts +42 -0
- package/vendor/intl-dom/dist/collation.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultAllSubstitutions.d.ts +52 -0
- package/vendor/intl-dom/dist/defaultAllSubstitutions.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultInsertNodes.d.ts +96 -0
- package/vendor/intl-dom/dist/defaultInsertNodes.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultKeyCheckerConverter.d.ts +17 -0
- package/vendor/intl-dom/dist/defaultKeyCheckerConverter.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultLocaleResolver.d.ts +285 -0
- package/vendor/intl-dom/dist/defaultLocaleResolver.d.ts.map +1 -0
- package/vendor/intl-dom/dist/findLocaleStrings.d.ts +88 -0
- package/vendor/intl-dom/dist/findLocaleStrings.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getDOMForLocaleString.d.ts +67 -0
- package/vendor/intl-dom/dist/getDOMForLocaleString.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getMessageForKeyByStyle.d.ts +73 -0
- package/vendor/intl-dom/dist/getMessageForKeyByStyle.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getStringFromMessageAndDefaults.d.ts +26 -0
- package/vendor/intl-dom/dist/getStringFromMessageAndDefaults.d.ts.map +1 -0
- package/vendor/intl-dom/dist/i18n.d.ts +113 -0
- package/vendor/intl-dom/dist/i18n.d.ts.map +1 -0
- package/vendor/intl-dom/dist/index.d.ts +92 -0
- package/vendor/intl-dom/dist/index.d.ts.map +1 -0
- package/vendor/intl-dom/dist/index.esm.d.ts +34 -0
- package/vendor/intl-dom/dist/index.esm.js +854 -896
- package/vendor/intl-dom/dist/index.esm.min.js +4 -0
- package/vendor/intl-dom/dist/index.esm.min.js.map +1 -0
- package/vendor/intl-dom/dist/index.umd.js +2953 -0
- package/vendor/intl-dom/dist/index.umd.min.js +4 -0
- package/vendor/intl-dom/dist/index.umd.min.js.map +1 -0
- package/vendor/intl-dom/dist/promiseChainForValues.d.ts +34 -0
- package/vendor/intl-dom/dist/promiseChainForValues.d.ts.map +1 -0
- package/vendor/intl-dom/dist/shared.d.ts +20 -0
- package/vendor/intl-dom/dist/shared.d.ts.map +1 -0
- package/vendor/intl-dom/dist/utils.d.ts +53 -0
- package/vendor/intl-dom/dist/utils.d.ts.map +1 -0
- package/vendor/jamilih/dist/jml.d.mts +468 -0
- package/vendor/jamilih/dist/{jml-es.js → jml.mjs} +1489 -343
- package/vendor/jquery/dist/jquery.js +1677 -2713
- package/vendor/json-6/dist/index.mjs +2 -0
- package/vendor/miller-columns/CHANGES.md +185 -0
- package/vendor/miller-columns/LICENSE-MIT.txt +21 -0
- package/vendor/miller-columns/README.md +249 -0
- package/vendor/miller-columns/demos/index.html +69 -0
- package/vendor/miller-columns/demos/index.js +72 -0
- package/vendor/miller-columns/dist/index-es.js +748 -0
- package/vendor/miller-columns/dist/index-es.min.d.ts +25 -0
- package/vendor/miller-columns/dist/index-es.min.js +7 -1
- package/vendor/miller-columns/dist/index-umd.js +757 -0
- package/vendor/miller-columns/dist/index-umd.min.js +7 -0
- package/vendor/miller-columns/dist/index.d.ts +25 -0
- package/vendor/miller-columns/dist/millerColumns.d.ts +10 -0
- package/vendor/miller-columns/eslint.config.js +46 -0
- package/vendor/miller-columns/fix-declarations.js +18 -0
- package/vendor/miller-columns/miller-columns.css +24 -1
- package/vendor/miller-columns/package.json +73 -0
- package/vendor/miller-columns/pnpm-workspace.yaml +2 -0
- package/vendor/miller-columns/src/index.js +642 -0
- package/vendor/miller-columns/src/millerColumns.ts +12 -0
- package/vendor/miller-columns/tsconfig-prod.json +23 -0
- package/vendor/miller-columns/tsconfig.json +21 -0
- package/vendor/simple-prefs/dist/index.esm.d.ts +1 -0
- package/vendor/simple-prefs/dist/index.esm.js +164 -216
- package/vendor/simple-prefs/dist/simple-prefs.d.ts +117 -0
- package/lgtm.yml +0 -5
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
const UPPERCASE = /[\p{Lu}]/u;
|
|
2
2
|
const LOWERCASE = /[\p{Ll}]/u;
|
|
3
|
-
const LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/
|
|
4
|
-
const IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u;
|
|
3
|
+
const LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/u;
|
|
5
4
|
const SEPARATORS = /[_.\- ]+/;
|
|
6
5
|
|
|
6
|
+
// The |$ alternative allows matching at end-of-string, capturing empty string
|
|
7
|
+
// This enables NUMBERS_AND_IDENTIFIER to match digits at string end (e.g., "test123")
|
|
8
|
+
const IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u;
|
|
9
|
+
|
|
7
10
|
const LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);
|
|
8
11
|
const SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');
|
|
9
|
-
const NUMBERS_AND_IDENTIFIER = new RegExp(
|
|
12
|
+
const NUMBERS_AND_IDENTIFIER = new RegExp(String.raw`\d+` + IDENTIFIER.source, 'gu');
|
|
10
13
|
|
|
11
14
|
const preserveCamelCase = (string, toLowerCase, toUpperCase, preserveConsecutiveUppercase) => {
|
|
12
15
|
let isLastCharLower = false;
|
|
@@ -16,42 +19,125 @@ const preserveCamelCase = (string, toLowerCase, toUpperCase, preserveConsecutive
|
|
|
16
19
|
|
|
17
20
|
for (let index = 0; index < string.length; index++) {
|
|
18
21
|
const character = string[index];
|
|
22
|
+
|
|
23
|
+
// Was the character 3 positions back inserted as a separator?
|
|
24
|
+
// Prevents excessive separators by checking if we recently inserted one
|
|
25
|
+
// index - 3 accounts for: current character, inserted separator, previous character
|
|
26
|
+
// Default true for early positions activates the preserveConsecutiveUppercase guard
|
|
19
27
|
isLastLastCharPreserved = index > 2 ? string[index - 3] === '-' : true;
|
|
20
28
|
|
|
21
29
|
if (isLastCharLower && UPPERCASE.test(character)) {
|
|
30
|
+
// FooBar → Foo-Bar (insert separator before uppercase)
|
|
22
31
|
string = string.slice(0, index) + '-' + string.slice(index);
|
|
23
32
|
isLastCharLower = false;
|
|
24
33
|
isLastLastCharUpper = isLastCharUpper;
|
|
25
34
|
isLastCharUpper = true;
|
|
26
35
|
index++;
|
|
27
|
-
} else if (
|
|
36
|
+
} else if (
|
|
37
|
+
isLastCharUpper
|
|
38
|
+
&& isLastLastCharUpper
|
|
39
|
+
&& LOWERCASE.test(character)
|
|
40
|
+
&& (!isLastLastCharPreserved || preserveConsecutiveUppercase)
|
|
41
|
+
) {
|
|
42
|
+
// FOOBar → FOO-Bar
|
|
28
43
|
string = string.slice(0, index - 1) + '-' + string.slice(index - 1);
|
|
29
44
|
isLastLastCharUpper = isLastCharUpper;
|
|
30
45
|
isLastCharUpper = false;
|
|
31
46
|
isLastCharLower = true;
|
|
32
47
|
} else {
|
|
33
|
-
isLastCharLower
|
|
48
|
+
isLastCharLower
|
|
49
|
+
= toLowerCase(character) === character
|
|
50
|
+
&& toUpperCase(character) !== character;
|
|
34
51
|
isLastLastCharUpper = isLastCharUpper;
|
|
35
|
-
isLastCharUpper
|
|
52
|
+
isLastCharUpper
|
|
53
|
+
= toUpperCase(character) === character
|
|
54
|
+
&& toLowerCase(character) !== character;
|
|
36
55
|
}
|
|
37
56
|
}
|
|
38
57
|
|
|
39
58
|
return string;
|
|
40
59
|
};
|
|
41
60
|
|
|
42
|
-
const preserveConsecutiveUppercase = (input, toLowerCase) =>
|
|
43
|
-
|
|
61
|
+
const preserveConsecutiveUppercase = (input, toLowerCase) => input.replace(LEADING_CAPITAL, match => toLowerCase(match));
|
|
62
|
+
|
|
63
|
+
const processWithCasePreservation = (input, toLowerCase, preserveConsecutiveUppercase) => {
|
|
64
|
+
let result = '';
|
|
65
|
+
let previousWasNumber = false;
|
|
66
|
+
let previousWasUppercase = false;
|
|
67
|
+
|
|
68
|
+
// Convert input to array for lookahead capability
|
|
69
|
+
const characters = [...input];
|
|
70
|
+
|
|
71
|
+
for (let index = 0; index < characters.length; index++) {
|
|
72
|
+
const character = characters[index];
|
|
73
|
+
const isUpperCase = UPPERCASE.test(character);
|
|
74
|
+
const nextCharIsUpperCase = index + 1 < characters.length && UPPERCASE.test(characters[index + 1]);
|
|
75
|
+
|
|
76
|
+
if (previousWasNumber && /[\p{Alpha}]/u.test(character)) {
|
|
77
|
+
// Letter after number - preserve original case
|
|
78
|
+
result += character;
|
|
79
|
+
previousWasNumber = false;
|
|
80
|
+
previousWasUppercase = isUpperCase;
|
|
81
|
+
} else if (preserveConsecutiveUppercase && isUpperCase && (previousWasUppercase || nextCharIsUpperCase)) {
|
|
82
|
+
// Part of consecutive uppercase sequence when preserveConsecutiveUppercase is true - keep it
|
|
83
|
+
result += character;
|
|
84
|
+
previousWasUppercase = true;
|
|
85
|
+
} else if (/\d/.test(character)) {
|
|
86
|
+
// Number - keep as-is and track it
|
|
87
|
+
result += character;
|
|
88
|
+
previousWasNumber = true;
|
|
89
|
+
previousWasUppercase = false;
|
|
90
|
+
} else if (SEPARATORS.test(character)) {
|
|
91
|
+
// Separator - keep as-is and maintain previousWasNumber state
|
|
92
|
+
result += character;
|
|
93
|
+
previousWasUppercase = false;
|
|
94
|
+
} else {
|
|
95
|
+
// Regular character - lowercase it
|
|
96
|
+
result += toLowerCase(character);
|
|
97
|
+
previousWasNumber = false;
|
|
98
|
+
previousWasUppercase = false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
44
101
|
|
|
45
|
-
return
|
|
102
|
+
return result;
|
|
46
103
|
};
|
|
47
104
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
105
|
+
/**
|
|
106
|
+
Core post-processing:
|
|
107
|
+
- Collapses separators and uppercases the following identifier character.
|
|
108
|
+
- Optionally uppercases the identifier following a numeric sequence.
|
|
109
|
+
|
|
110
|
+
Two-pass strategy prevents conflicts:
|
|
111
|
+
1. NUMBERS_AND_IDENTIFIER: handles digit-to-letter transitions
|
|
112
|
+
2. SEPARATORS_AND_IDENTIFIER: handles separator-to-identifier transitions
|
|
113
|
+
|
|
114
|
+
Example: "b2b_registration" with capitalizeAfterNumber: true
|
|
115
|
+
- Pass 1: "2b" matches, next char is "_" (separator), so don't capitalize → "b2b_registration"
|
|
116
|
+
- Pass 2: "_r" matches, replace with "R" → "b2bRegistration"
|
|
117
|
+
*/
|
|
118
|
+
const postProcess = (input, toUpperCase, {capitalizeAfterNumber}) => {
|
|
119
|
+
const transformNumericIdentifier = capitalizeAfterNumber
|
|
120
|
+
? (match, identifier, offset, string) => {
|
|
121
|
+
const nextCharacter = string.charAt(offset + match.length);
|
|
122
|
+
|
|
123
|
+
// If the numeric+identifier run is immediately followed by a separator,
|
|
124
|
+
// treat it as a continued token and do not force a new word.
|
|
125
|
+
if (SEPARATORS.test(nextCharacter)) {
|
|
126
|
+
return match;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Only uppercase the identifier part (not the digits) for efficiency
|
|
130
|
+
return identifier ? match.slice(0, -identifier.length) + toUpperCase(identifier) : match;
|
|
131
|
+
}
|
|
132
|
+
// When false: numbers do not create a word boundary.
|
|
133
|
+
: match => match;
|
|
51
134
|
|
|
52
135
|
return input
|
|
53
|
-
.replaceAll(NUMBERS_AND_IDENTIFIER,
|
|
54
|
-
.replaceAll(
|
|
136
|
+
.replaceAll(NUMBERS_AND_IDENTIFIER, transformNumericIdentifier)
|
|
137
|
+
.replaceAll(
|
|
138
|
+
SEPARATORS_AND_IDENTIFIER,
|
|
139
|
+
(_, identifier) => toUpperCase(identifier),
|
|
140
|
+
);
|
|
55
141
|
};
|
|
56
142
|
|
|
57
143
|
export default function camelCase(input, options) {
|
|
@@ -62,12 +148,14 @@ export default function camelCase(input, options) {
|
|
|
62
148
|
options = {
|
|
63
149
|
pascalCase: false,
|
|
64
150
|
preserveConsecutiveUppercase: false,
|
|
151
|
+
capitalizeAfterNumber: true,
|
|
65
152
|
...options,
|
|
66
153
|
};
|
|
67
154
|
|
|
68
155
|
if (Array.isArray(input)) {
|
|
69
|
-
input = input
|
|
70
|
-
.
|
|
156
|
+
input = input
|
|
157
|
+
.map(element => element.trim())
|
|
158
|
+
.filter(element => element.length > 0)
|
|
71
159
|
.join('-');
|
|
72
160
|
} else {
|
|
73
161
|
input = input.trim();
|
|
@@ -77,6 +165,14 @@ export default function camelCase(input, options) {
|
|
|
77
165
|
return '';
|
|
78
166
|
}
|
|
79
167
|
|
|
168
|
+
// Preserve leading _ and $ as they have semantic meaning
|
|
169
|
+
const leadingPrefix = input.match(/^[_$]*/)[0];
|
|
170
|
+
input = input.slice(leadingPrefix.length);
|
|
171
|
+
|
|
172
|
+
if (input.length === 0) {
|
|
173
|
+
return leadingPrefix;
|
|
174
|
+
}
|
|
175
|
+
|
|
80
176
|
const toLowerCase = options.locale === false
|
|
81
177
|
? string => string.toLowerCase()
|
|
82
178
|
: string => string.toLocaleLowerCase(options.locale);
|
|
@@ -87,24 +183,42 @@ export default function camelCase(input, options) {
|
|
|
87
183
|
|
|
88
184
|
if (input.length === 1) {
|
|
89
185
|
if (SEPARATORS.test(input)) {
|
|
90
|
-
return
|
|
186
|
+
return leadingPrefix;
|
|
91
187
|
}
|
|
92
188
|
|
|
93
|
-
return options.pascalCase
|
|
189
|
+
return leadingPrefix + (options.pascalCase
|
|
190
|
+
? toUpperCase(input)
|
|
191
|
+
: toLowerCase(input));
|
|
94
192
|
}
|
|
95
193
|
|
|
96
194
|
const hasUpperCase = input !== toLowerCase(input);
|
|
97
195
|
|
|
98
196
|
if (hasUpperCase) {
|
|
99
|
-
input = preserveCamelCase(
|
|
197
|
+
input = preserveCamelCase(
|
|
198
|
+
input,
|
|
199
|
+
toLowerCase,
|
|
200
|
+
toUpperCase,
|
|
201
|
+
options.preserveConsecutiveUppercase,
|
|
202
|
+
);
|
|
100
203
|
}
|
|
101
204
|
|
|
205
|
+
// Strip leading separators eagerly so they do not affect word detection
|
|
102
206
|
input = input.replace(LEADING_SEPARATORS, '');
|
|
103
|
-
input = options.preserveConsecutiveUppercase ? preserveConsecutiveUppercase(input, toLowerCase) : toLowerCase(input);
|
|
104
207
|
|
|
105
|
-
|
|
106
|
-
|
|
208
|
+
// Normalize base casing while preserving intended consecutive uppers
|
|
209
|
+
if (options.capitalizeAfterNumber) {
|
|
210
|
+
// Standard behavior - lowercase everything (or preserve consecutive uppercase)
|
|
211
|
+
input = options.preserveConsecutiveUppercase
|
|
212
|
+
? preserveConsecutiveUppercase(input, toLowerCase)
|
|
213
|
+
: toLowerCase(input);
|
|
214
|
+
} else {
|
|
215
|
+
// Preserve case after numbers (processWithCasePreservation handles preserveConsecutiveUppercase internally)
|
|
216
|
+
input = processWithCasePreservation(input, toLowerCase, options.preserveConsecutiveUppercase);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (options.pascalCase && input.length > 0) {
|
|
220
|
+
input = toUpperCase(input[0]) + input.slice(1);
|
|
107
221
|
}
|
|
108
222
|
|
|
109
|
-
return postProcess(input, toUpperCase);
|
|
223
|
+
return leadingPrefix + postProcess(input, toUpperCase, options);
|
|
110
224
|
}
|