jtc-utils
Version:
Utilities for Japanese Traditional Companies
234 lines (230 loc) • 5.77 kB
text/typescript
const M = new Map<string, string>([
["\u3041", "\u30a1"],
["\u3042", "\u30a2"],
["\u3043", "\u30a3"],
["\u3044", "\u30a4"],
["\u3045", "\u30a5"],
["\u3046", "\u30a6"],
["\u3047", "\u30a7"],
["\u3048", "\u30a8"],
["\u3049", "\u30a9"],
["\u304a", "\u30aa"],
["\u304b", "\u30ab"],
["\u304c", "\u30ac"],
["\u304d", "\u30ad"],
["\u304e", "\u30ae"],
["\u304f", "\u30af"],
["\u3050", "\u30b0"],
["\u3051", "\u30b1"],
["\u3052", "\u30b2"],
["\u3053", "\u30b3"],
["\u3054", "\u30b4"],
["\u3055", "\u30b5"],
["\u3056", "\u30b6"],
["\u3057", "\u30b7"],
["\u3058", "\u30b8"],
["\u3059", "\u30b9"],
["\u305a", "\u30ba"],
["\u305b", "\u30bb"],
["\u305c", "\u30bc"],
["\u305d", "\u30bd"],
["\u305e", "\u30be"],
["\u305f", "\u30bf"],
["\u3060", "\u30c0"],
["\u3061", "\u30c1"],
["\u3062", "\u30c2"],
["\u3063", "\u30c3"],
["\u3064", "\u30c4"],
["\u3065", "\u30c5"],
["\u3066", "\u30c6"],
["\u3067", "\u30c7"],
["\u3068", "\u30c8"],
["\u3069", "\u30c9"],
["\u306a", "\u30ca"],
["\u306b", "\u30cb"],
["\u306c", "\u30cc"],
["\u306d", "\u30cd"],
["\u306e", "\u30ce"],
["\u306f", "\u30cf"],
["\u3070", "\u30d0"],
["\u3071", "\u30d1"],
["\u3072", "\u30d2"],
["\u3073", "\u30d3"],
["\u3074", "\u30d4"],
["\u3075", "\u30d5"],
["\u3076", "\u30d6"],
["\u3077", "\u30d7"],
["\u3078", "\u30d8"],
["\u3079", "\u30d9"],
["\u307a", "\u30da"],
["\u307b", "\u30db"],
["\u307c", "\u30dc"],
["\u307d", "\u30dd"],
["\u307e", "\u30de"],
["\u307f", "\u30df"],
["\u3080", "\u30e0"],
["\u3081", "\u30e1"],
["\u3082", "\u30e2"],
["\u3083", "\u30e3"],
["\u3084", "\u30e4"],
["\u3085", "\u30e5"],
["\u3086", "\u30e6"],
["\u3087", "\u30e7"],
["\u3088", "\u30e8"],
["\u3089", "\u30e9"],
["\u308a", "\u30ea"],
["\u308b", "\u30eb"],
["\u308c", "\u30ec"],
["\u308d", "\u30ed"],
["\u308e", "\u30ee"],
["\u308f", "\u30ef"],
["\u308f\u3099", "\u30f7"],
["\u3090", "\u30f0"],
["\u3090\u3099", "\u30f8"],
["\u3091", "\u30f1"],
["\u3091\u3099", "\u30f9"],
["\u3092", "\u30f2"],
["\u3092\u3099", "\u30fa"],
["\u3093", "\u30f3"],
["\u3094", "\u30f4"],
["\u3095", "\u30f5"],
["\u3096", "\u30f6"],
["\u309d", "\u30fd"],
["\u309e", "\u30fe"],
["\uff61", "\u3002"],
["\uff62", "\u300c"],
["\uff63", "\u300d"],
["\uff64", "\u3001"],
["\uff65", "\u30fb"],
["\uff66", "\u30f2"],
["\uff66\uff9e", "\u30fa"],
["\uff67", "\u30a1"],
["\uff68", "\u30a3"],
["\uff69", "\u30a5"],
["\uff6a", "\u30a7"],
["\uff6b", "\u30a9"],
["\uff6c", "\u30e3"],
["\uff6d", "\u30e5"],
["\uff6e", "\u30e7"],
["\uff6f", "\u30c3"],
["\uff70", "\u30fc"],
["\uff71", "\u30a2"],
["\uff72", "\u30a4"],
["\uff73", "\u30a6"],
["\uff73\uff9e", "\u30f4"],
["\uff74", "\u30a8"],
["\uff75", "\u30aa"],
["\uff76", "\u30ab"],
["\uff76\uff9e", "\u30ac"],
["\uff77", "\u30ad"],
["\uff77\uff9e", "\u30ae"],
["\uff78", "\u30af"],
["\uff78\uff9e", "\u30b0"],
["\uff79", "\u30b1"],
["\uff79\uff9e", "\u30b2"],
["\uff7a", "\u30b3"],
["\uff7a\uff9e", "\u30b4"],
["\uff7b", "\u30b5"],
["\uff7b\uff9e", "\u30b6"],
["\uff7c", "\u30b7"],
["\uff7c\uff9e", "\u30b8"],
["\uff7d", "\u30b9"],
["\uff7d\uff9e", "\u30ba"],
["\uff7e", "\u30bb"],
["\uff7e\uff9e", "\u30bc"],
["\uff7f", "\u30bd"],
["\uff7f\uff9e", "\u30be"],
["\uff80", "\u30bf"],
["\uff80\uff9e", "\u30c0"],
["\uff81", "\u30c1"],
["\uff81\uff9e", "\u30c2"],
["\uff82", "\u30c4"],
["\uff82\uff9e", "\u30c5"],
["\uff83", "\u30c6"],
["\uff83\uff9e", "\u30c7"],
["\uff84", "\u30c8"],
["\uff84\uff9e", "\u30c9"],
["\uff85", "\u30ca"],
["\uff86", "\u30cb"],
["\uff87", "\u30cc"],
["\uff88", "\u30cd"],
["\uff89", "\u30ce"],
["\uff8a", "\u30cf"],
["\uff8a\uff9e", "\u30d0"],
["\uff8a\uff9f", "\u30d1"],
["\uff8b", "\u30d2"],
["\uff8b\uff9e", "\u30d3"],
["\uff8b\uff9f", "\u30d4"],
["\uff8c", "\u30d5"],
["\uff8c\uff9e", "\u30d6"],
["\uff8c\uff9f", "\u30d7"],
["\uff8d", "\u30d8"],
["\uff8d\uff9e", "\u30d9"],
["\uff8d\uff9f", "\u30da"],
["\uff8e", "\u30db"],
["\uff8e\uff9e", "\u30dc"],
["\uff8e\uff9f", "\u30dd"],
["\uff8f", "\u30de"],
["\uff90", "\u30df"],
["\uff91", "\u30e0"],
["\uff92", "\u30e1"],
["\uff93", "\u30e2"],
["\uff94", "\u30e4"],
["\uff95", "\u30e6"],
["\uff96", "\u30e8"],
["\uff97", "\u30e9"],
["\uff98", "\u30ea"],
["\uff99", "\u30eb"],
["\uff9a", "\u30ec"],
["\uff9b", "\u30ed"],
["\uff9c", "\u30ef"],
["\uff9c\uff9e", "\u30f7"],
["\uff9d", "\u30f3"],
["\uff9e", "\u309b"],
["\uff9f", "\u309c"],
]);
export function toFullwidthKatakana(str: string): string;
export function toFullwidthKatakana(str: null): null;
export function toFullwidthKatakana(str: undefined): undefined;
export function toFullwidthKatakana(value: string | null | undefined) {
if (!value) {
return value;
}
const array = new Array<string>();
let start = 0;
for (let i = 0; i < value.length; i++) {
const c = value.charAt(i);
if (i + 1 < value.length) {
const c2 = value.charAt(i + 1);
if (
c2 === "\u3099" ||
c2 === "\u309A" ||
c2 === "\uFF9E" ||
c2 === "\uFF9F"
) {
const m = M.get(c + c2);
if (m != null) {
if (start < i) {
array.push(value.substring(start, i));
}
array.push(m);
i++;
start = i + 1;
continue;
}
}
}
const m = M.get(c);
if (m != null) {
if (start < i) {
array.push(value.substring(start, i));
}
array.push(m);
start = i + 1;
}
}
if (start < value.length) {
array.push(value.substring(start));
}
return array.join("");
}