@@ -12,6 +12,18 @@ export namespace KanaUtils {
1212 export function toAll ( input : string ) {
1313 return [ toRomaji ( input ) , toHiragana ( input ) , toKatakana ( input ) ] ;
1414 }
15+ export function toDakuten ( input : string ) {
16+ return transpileLangSymbol ( toDakutenLookup , 3 , input ) ;
17+ }
18+ export function toHandakuten ( input : string ) {
19+ return transpileLangSymbol ( toHandakutenLookup , 3 , input ) ;
20+ }
21+ export function fromDakuten ( input : string ) {
22+ return transpileLangSymbol ( fromDakutenLookup , 3 , input ) ;
23+ }
24+ export function fromHandakuten ( input : string ) {
25+ return transpileLangSymbol ( fromHandakutenLookup , 3 , input ) ;
26+ }
1527}
1628
1729( window as any ) . KanaUtils = KanaUtils ;
@@ -52,6 +64,69 @@ function transpileLangSymbol(
5264 return transpiled ;
5365}
5466
67+ function initDiacriticMaps ( ) {
68+ if ( toDakutenLookup . size !== 0 ) return ;
69+
70+ const dakutenChars = [
71+ [ "が" , "か" ] ,
72+ [ "ぎ" , "き" ] ,
73+ [ "ぐ" , "く" ] ,
74+ [ "げ" , "け" ] ,
75+ [ "ご" , "こ" ] ,
76+ [ "ざ" , "さ" ] ,
77+ [ "じ" , "し" ] ,
78+ [ "ず" , "す" ] ,
79+ [ "ぜ" , "せ" ] ,
80+ [ "ぞ" , "そ" ] ,
81+ [ "だ" , "た" ] ,
82+ [ "ぢ" , "ち" ] ,
83+ [ "づ" , "つ" ] ,
84+ [ "で" , "て" ] ,
85+ [ "ど" , "と" ] ,
86+ [ "ば" , "な" ] ,
87+ [ "び" , "ひ" ] ,
88+ [ "ぶ" , "ふ" ] ,
89+ [ "べ" , "へ" ] ,
90+ [ "ぼ" , "ほ" ] ,
91+ ] ;
92+
93+ for ( const [ hiraganaDakuten , hiraganaNormal ] of dakutenChars ) {
94+ const katakanaDakuten = KanaUtils . toKatakana ( hiraganaDakuten ) ;
95+ const katakanaNormal = KanaUtils . toKatakana ( hiraganaNormal ) ;
96+ const romajiDakuten = KanaUtils . toRomaji ( hiraganaDakuten ) ;
97+ const romajiNormal = KanaUtils . toRomaji ( hiraganaNormal ) ;
98+
99+ toDakutenLookup . set ( hiraganaNormal , hiraganaDakuten ) ;
100+ toDakutenLookup . set ( katakanaNormal , katakanaDakuten ) ;
101+ toDakutenLookup . set ( romajiNormal , romajiDakuten ) ;
102+ fromDakutenLookup . set ( hiraganaDakuten , hiraganaNormal ) ;
103+ fromDakutenLookup . set ( katakanaDakuten , katakanaNormal ) ;
104+ fromDakutenLookup . set ( romajiDakuten , romajiNormal ) ;
105+ }
106+
107+ const handakutenChars = [
108+ [ "ぱ " , "は" ] ,
109+ [ "ぴ " , "ひ" ] ,
110+ [ "ぷ " , "ふ" ] ,
111+ [ "ぺ " , "へ" ] ,
112+ [ "ぽ " , "ほ" ] ,
113+ ] ;
114+ for ( const [ hiraganaDakuten , hiraganaNormal ] of handakutenChars ) {
115+ const katakanaDakuten = KanaUtils . toKatakana ( hiraganaDakuten ) ;
116+ const katakanaNormal = KanaUtils . toKatakana ( hiraganaNormal ) ;
117+ const romajiDakuten = KanaUtils . toRomaji ( hiraganaDakuten ) ;
118+ const romajiNormal = KanaUtils . toRomaji ( hiraganaNormal ) ;
119+
120+ toHandakutenLookup . set ( hiraganaNormal , hiraganaDakuten ) ;
121+ toHandakutenLookup . set ( katakanaNormal , katakanaDakuten ) ;
122+ toHandakutenLookup . set ( romajiNormal , romajiDakuten ) ;
123+ fromHandakutenLookup . set ( hiraganaDakuten , hiraganaNormal ) ;
124+ fromHandakutenLookup . set ( katakanaDakuten , katakanaNormal ) ;
125+ fromHandakutenLookup . set ( romajiDakuten , romajiNormal ) ;
126+ }
127+ }
128+
129+ /* [hiragana, katakana, romaji] */
55130const symbolGroupings : [ string , string , string ] [ ] = [
56131 [ "あ" , "ア" , "a" ] ,
57132 [ "い" , "イ" , "i" ] ,
@@ -213,4 +288,8 @@ const katakanaLookup = new Map<string, string>([
213288 ...symbolGroupings . map ( ( [ , katakana , romaji ] ) => [ romaji , katakana ] ) ,
214289] as [ string , string ] [ ] ) ;
215290
216- console . log ( katakanaLookup ) ;
291+ let toDakutenLookup = new Map < string , string > ( ) ;
292+ let toHandakutenLookup = new Map < string , string > ( ) ;
293+ let fromDakutenLookup = new Map < string , string > ( ) ;
294+ let fromHandakutenLookup = new Map < string , string > ( ) ;
295+ initDiacriticMaps ( ) ;
0 commit comments