├── .classpath
├── .gitignore
├── .npmignore
├── .project
├── .settings
├── .jsdtscope
├── com.palantir.typescript.prefs
├── org.eclipse.core.resources.prefs
├── org.eclipse.jdt.core.prefs
├── org.eclipse.m2e.core.prefs
├── org.eclipse.wst.jsdt.ui.superType.container
└── org.eclipse.wst.jsdt.ui.superType.name
├── LICENSE
├── README.md
├── demo
├── demo.js
├── index.html
└── style.css
├── dist
├── jaconv.d.ts
├── jaconv.js
├── jaconv.js.map
├── jaconv.mjs
└── jaconv.mjs.map
├── package-lock.json
├── package.json
├── pom.xml
├── src
├── main
│ ├── java
│ │ └── com
│ │ │ └── d_project
│ │ │ └── jaconv
│ │ │ └── JaConv.java
│ └── ts
│ │ ├── jaconv.ts
│ │ └── jaconv
│ │ ├── hebon.ts
│ │ ├── katahira.ts
│ │ └── zenhan.ts
└── test
│ ├── java
│ └── com
│ │ └── d_project
│ │ └── jaconv
│ │ └── JaConvTest.java
│ └── ts
│ └── jaconv
│ ├── hebon.spec.ts
│ ├── katahira.spec.ts
│ └── zenhan.spec.ts
├── tsconfig.json
├── vite.config.mts
└── web-test-runner.config.mjs
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.tscache
2 | /*.tgz
3 | /build
4 | /target
5 | /node_modules
6 | /coverage
7 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | *.tgz
2 | .project
3 | .settings
4 | .classpath
5 | pom.xml
6 | target
7 | src/main/java
8 | src/test/java
9 | coverage
10 | demo
11 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | jaconv
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.wst.jsdt.core.javascriptValidator
10 |
11 |
12 |
13 |
14 | org.eclipse.jdt.core.javabuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.m2e.core.maven2Builder
20 |
21 |
22 |
23 |
24 |
25 | org.eclipse.m2e.core.maven2Nature
26 | org.eclipse.wst.jsdt.core.jsNature
27 | org.eclipse.jdt.core.javanature
28 |
29 |
30 |
31 | 1477081816460
32 |
33 | 26
34 |
35 | org.eclipse.ui.ide.multiFilter
36 | 1.0-name-matches-true-false-node_modules
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/.settings/.jsdtscope:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.settings/com.palantir.typescript.prefs:
--------------------------------------------------------------------------------
1 | build.path.exportedFolder=
2 | build.path.sourceFolder=src
3 | compiler.outputDirOption=
4 | compiler.outputFileOption=
5 | eclipse.preferences.version=1
6 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/main/java=UTF-8
3 | encoding//src/test/java=UTF-8
4 | encoding/=UTF-8
5 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6 | org.eclipse.jdt.core.compiler.compliance=1.8
7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate
8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate
9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate
10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
11 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
12 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
13 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
14 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
15 | org.eclipse.jdt.core.compiler.release=disabled
16 | org.eclipse.jdt.core.compiler.source=1.8
17 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.wst.jsdt.ui.superType.container:
--------------------------------------------------------------------------------
1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary
--------------------------------------------------------------------------------
/.settings/org.eclipse.wst.jsdt.ui.superType.name:
--------------------------------------------------------------------------------
1 | Window
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Kazuhiko Arase
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 日本語文字変換ライブラリ (javascript)
2 | ===
3 |
4 | [online demo](https://kazuhikoarase.github.io/jaconv/demo/#%E3%81%AB%E3%81%BB%E3%82%93%E3%81%94)
5 |
6 | * ヘボン式ローマ字変換
7 | * ひらがな-カタカナ変換
8 | * 全角-半角変換 (英数記号/カタカナ)
9 |
10 | ## API Documentation
11 |
12 | | Param | Type | Description |
13 | | ----- | ------------------- | -------------------- |
14 | | s | string | a string to convert |
15 |
16 | #### jaconv.toHebon(s) => string
17 |
18 | 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。
19 |
20 | ※ ひらがなを一意にアルファベットに変換することを目的としており、一部意図通りに変換されない場合があります
21 |
22 | #### jaconv.toKatakana(s) => string
23 |
24 | 全角ひらがなを全角カタカナに変換します。
25 |
26 | #### jaconv.toHiragana(s) => string
27 |
28 | 全角カタカナを全角ひらがなに変換します。
29 |
30 | #### jaconv.toHanAscii(s) => string
31 |
32 | 全角英数記号を半角に変換します。
33 |
34 | #### jaconv.toZenAscii(s) => string
35 |
36 | 半角英数記号を全角に変換します。
37 |
38 | #### jaconv.toHanKana(s) => string
39 |
40 | 全角カタカナを半角に変換します。
41 |
42 | #### jaconv.toZenKana(s) => string
43 |
44 | 半角カタカナを全角に変換します。
45 |
46 | #### jaconv.toHan(s) => string
47 |
48 | 全角英数記号、カタカナを半角に変換します。
49 | (toHanAscii, toHanKana の組み合わせ)
50 |
51 | #### jaconv.toZen(s) => string
52 |
53 | 半角英数記号、カタカナを全角に変換します。
54 | (toZenAscii, toZenKana の組み合わせ)
55 |
56 | #### jaconv.normalize(s) => string
57 |
58 | 全角英数記号を半角に、半角カタカナを全角に変換します。
59 | (toHanAscii, toZenKana の組み合わせ)
60 |
--------------------------------------------------------------------------------
/demo/demo.js:
--------------------------------------------------------------------------------
1 |
2 | import jaconv from '../dist/jaconv.mjs';
3 |
4 | $(function() {
5 |
6 | var funcs = [
7 | { name: 'toHebon', desc: '全角ひらがなをヘボン式ローマ字で半角英文字に変換' },
8 | { name: 'toKatakana', desc: '全角ひらがなを全角カタカナに変換' },
9 | { name: 'toHiragana', desc: '全角カタカナを全角ひらがなに変換' },
10 | { name: 'toHanAscii', desc: '全角英数記号を半角に変換' },
11 | { name: 'toZenAscii', desc: '半角英数記号を全角に変換' },
12 | { name: 'toHanKana', desc: '全角カタカナを半角に変換' },
13 | { name: 'toZenKana', desc: '半角カタカナを全角に変換' },
14 | { name: 'toHan', desc: '全角英数記号、カタカナを半角に変換' },
15 | { name: 'toZen', desc: '半角英数記号、カタカナを全角に変換' },
16 | { name: 'normalize', desc: '全角英数記号を半角に、半角カタカナを全角に変換' }
17 | ];
18 |
19 | var $inTxt = $('').addClass('txt').
20 | attr('placeholder', 'ここに文字を入力').
21 | on('keyup', function(event) {
22 | if (event.keyCode == 13) {
23 | // ENTER
24 | location.href = '#' + encodeURIComponent($inTxt.val() );
25 | return;
26 | }
27 | $.each(funcs, function(i, func) {
28 | $('#' + func.name).val(jaconv[func.name]($inTxt.val() ) );
29 | } );
30 | });
31 |
32 | var $body = $('#placeHolder').children('TBODY');
33 | var addRow = function($cell1, $cell2) {
34 | $body.append($('
').
35 | append($(' | ').addClass('lbl').append($cell1) ).
36 | append($(' | ').append($cell2) ) );
37 | };
38 | addRow($('').text(''), $inTxt);
39 | $.each(funcs, function(i, func) {
40 | addRow($('').text('jaconv.' + func.name).
41 | attr('title', func.desc),
42 | $('').
43 | addClass('txt').addClass('result').
44 | attr('id', func.name).
45 | attr('tabindex', '-1').
46 | prop('readonly', true) );
47 | });
48 |
49 | if (location.hash.match(/^#(.+)$/) ) {
50 | $inTxt.val(decodeURIComponent(location.hash.substring(1) ) ).
51 | trigger('keyup');
52 | }
53 |
54 | $inTxt.focus();
55 | });
56 |
--------------------------------------------------------------------------------
/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jaconv - 日本語文字変換ライブラリ (javascript)
6 |
7 |
8 |
9 |
10 |
11 | home
12 |
13 | 日本語文字変換ライブラリ (javascript)
14 |
15 |
16 | Contents Copyright © Kazuhiko Arase
17 |
18 |
19 |
--------------------------------------------------------------------------------
/demo/style.css:
--------------------------------------------------------------------------------
1 |
2 | * {
3 | font-family: arial, sans-serif;
4 | }
5 |
6 | H1 { font-size: 20pt; }
7 | H2 { font-size: 16pt; }
8 | H3 { font-size: 14pt; }
9 | H4 { font-size: 11pt; }
10 | H5 { font-size: 10pt; }
11 | H6 { font-size: 9pt; }
12 |
13 | .lbl {
14 | text-align: right;
15 | }
16 |
17 | .txt {
18 | width: 300px;
19 | border: 1px solid #cccccc;
20 | }
21 |
22 | .result {
23 | background-color: #f0f0f0;
24 | }
25 |
--------------------------------------------------------------------------------
/dist/jaconv.d.ts:
--------------------------------------------------------------------------------
1 | declare const _default: {
2 | toHebon: typeof hebon.toHebon;
3 | toHiragana: typeof katahira.toHiragana;
4 | toKatakana: typeof katahira.toKatakana;
5 | normalize: typeof zenhan.normalize;
6 | toHan: typeof zenhan.toHan;
7 | toHanAscii: typeof zenhan.toHanAscii;
8 | toHanKana: typeof zenhan.toHanKana;
9 | toZen: typeof zenhan.toZen;
10 | toZenAscii: typeof zenhan.toZenAscii;
11 | toZenKana: typeof zenhan.toZenKana;
12 | };
13 | export default _default;
14 |
15 | declare namespace hebon {
16 | export {
17 | toHebon
18 | }
19 | }
20 |
21 | declare namespace katahira {
22 | export {
23 | toKatakana,
24 | toHiragana
25 | }
26 | }
27 |
28 | /**
29 | * 全角英数記号を半角に、半角カタカナを全角に変換します。
30 | * (toHanAscii, toZenKana の組み合わせ)
31 | */
32 | declare function normalize(s: string): string;
33 |
34 | /**
35 | * 全角英数記号、カタカナを半角に変換します。
36 | * (toHanAscii, toHanKana の組み合わせ)
37 | */
38 | declare function toHan(s: string): string;
39 |
40 | /**
41 | * 全角英数記号を半角に変換します。
42 | */
43 | declare function toHanAscii(s: string): string;
44 |
45 | /**
46 | * 全角カタカナを半角に変換します。
47 | */
48 | declare function toHanKana(s: string): string;
49 |
50 | /**
51 | * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。
52 | */
53 | declare function toHebon(s: string): string;
54 |
55 | /**
56 | * 全角カタカナを全角ひらがなに変換します。
57 | */
58 | declare function toHiragana(s: string): string;
59 |
60 | /**
61 | * 全角ひらがなを全角カタカナに変換します。
62 | */
63 | declare function toKatakana(s: string): string;
64 |
65 | /**
66 | * 半角英数記号、カタカナを全角に変換します。
67 | * (toZenAscii, toZenKana の組み合わせ)
68 | */
69 | declare function toZen(s: string): string;
70 |
71 | /**
72 | * 半角英数記号を全角に変換します。
73 | */
74 | declare function toZenAscii(s: string): string;
75 |
76 | /**
77 | * 半角カタカナを全角に変換します。
78 | */
79 | declare function toZenKana(s: string): string;
80 |
81 | declare namespace zenhan {
82 | export {
83 | toHanAscii,
84 | toZenAscii,
85 | toHanKana,
86 | toZenKana,
87 | toHan,
88 | toZen,
89 | normalize
90 | }
91 | }
92 |
93 | export { }
94 |
--------------------------------------------------------------------------------
/dist/jaconv.js:
--------------------------------------------------------------------------------
1 | "use strict";const g={あ:"A",い:"I",う:"U",え:"E",お:"O",か:"KA",き:"KI",く:"KU",け:"KE",こ:"KO",さ:"SA",し:"SHI",す:"SU",せ:"SE",そ:"SO",た:"TA",ち:"CHI",つ:"TSU",て:"TE",と:"TO",な:"NA",に:"NI",ぬ:"NU",ね:"NE",の:"NO",は:"HA",ひ:"HI",ふ:"FU",へ:"HE",ほ:"HO",ま:"MA",み:"MI",む:"MU",め:"ME",も:"MO",や:"YA",ゆ:"YU",よ:"YO",ら:"RA",り:"RI",る:"RU",れ:"RE",ろ:"RO",わ:"WA",ゐ:"I",ゑ:"E",を:"O",ぁ:"A",ぃ:"I",ぅ:"U",ぇ:"E",ぉ:"O",が:"GA",ぎ:"GI",ぐ:"GU",げ:"GE",ご:"GO",ざ:"ZA",じ:"JI",ず:"ZU",ぜ:"ZE",ぞ:"ZO",だ:"DA",ぢ:"JI",づ:"ZU",で:"DE",ど:"DO",ば:"BA",び:"BI",ぶ:"BU",べ:"BE",ぼ:"BO",ぱ:"PA",ぴ:"PI",ぷ:"PU",ぺ:"PE",ぽ:"PO",きゃ:"KYA",きゅ:"KYU",きょ:"KYO",しゃ:"SHA",しゅ:"SHU",しょ:"SHO",ちゃ:"CHA",ちゅ:"CHU",ちょ:"CHO",ちぇ:"CHE",にゃ:"NYA",にゅ:"NYU",にょ:"NYO",ひゃ:"HYA",ひゅ:"HYU",ひょ:"HYO",みゃ:"MYA",みゅ:"MYU",みょ:"MYO",りゃ:"RYA",りゅ:"RYU",りょ:"RYO",ぎゃ:"GYA",ぎゅ:"GYU",ぎょ:"GYO",じゃ:"JA",じゅ:"JU",じょ:"JO",びゃ:"BYA",びゅ:"BYU",びょ:"BYO",ぴゃ:"PYA",ぴゅ:"PYU",ぴょ:"PYO"},M={AA:!0,EE:!0,II:!1,OO:!0,OU:!0,UU:!0},h=function(t,o){let n=null,e=null;return o+12&&(c=c.substring(c.length-2)),M[c]&&(r.h="")}o+=r.h}else o+=r.c;n=r.h,e+=r.c.length}return o}const s=12353,m=12438,f=12449,Z=12534;function B(t){let o="";for(let n=0;n",">","?","?","@","@","A","A","B","B","C","C","D","D","E","E","F","F","G","G","H","H","I","I","J","J","K","K","L","L","M","M","N","N","O","O","P","P","Q","Q","R","R","S","S","T","T","U","U","V","V","W","W","X","X","Y","Y","Z","Z","[","[","\\","¥","]","]","^","^","_","_","`","‘","a","a","b","b","c","c","d","d","e","e","f","f","g","g","h","h","i","i","j","j","k","k","l","l","m","m","n","n","o","o","p","p","q","q","r","r","s","s","t","t","u","u","v","v","w","w","x","x","y","y","z","z","{","{","|","|","}","}","~","~"],d=["。","。","「","「","」","」","、","、","・","・","ヲ","ヲ","ァ","ァ","ィ","ィ","ゥ","ゥ","ェ","ェ","ォ","ォ","ャ","ャ","ュ","ュ","ョ","ョ","ッ","ッ","ー","ー","ア","ア","イ","イ","ウ","ウ","エ","エ","オ","オ","カ","カ","キ","キ","ク","ク","ケ","ケ","コ","コ","ガ","ガ","ギ","ギ","グ","グ","ゲ","ゲ","ゴ","ゴ","サ","サ","シ","シ","ス","ス","セ","セ","ソ","ソ","ザ","ザ","ジ","ジ","ズ","ズ","ゼ","ゼ","ゾ","ゾ","タ","タ","チ","チ","ツ","ツ","テ","テ","ト","ト","ダ","ダ","ヂ","ヂ","ヅ","ヅ","デ","デ","ド","ド","ナ","ナ","ニ","ニ","ヌ","ヌ","ネ","ネ","ノ","ノ","ハ","ハ","ヒ","ヒ","フ","フ","ヘ","ヘ","ホ","ホ","バ","バ","ビ","ビ","ブ","ブ","ベ","ベ","ボ","ボ","パ","パ","ピ","ピ","プ","プ","ペ","ペ","ポ","ポ","マ","マ","ミ","ミ","ム","ム","メ","メ","モ","モ","ヤ","ヤ","ユ","ユ","ヨ","ヨ","ラ","ラ","リ","リ","ル","ル","レ","レ","ロ","ロ","ワ","ワ","ン","ン","ヴ","ヴ","゛","゙","゜","゚","ヰ","イ","ヱ","エ","ヮ","ワ","ヵ","カ","ヶ","ケ"],E=function(t){const o={},n={},e=function(a,l){o[a]||(o[a]=l),n[l]||(n[l]=a)},r=function(a,l){const O=l?n:o;let u="";for(let i=0;i 2) {\n htest = htest.substring(htest.length - 2);\n }\n if (aaSet[htest]) {\n hr.h = '';\n }\n }\n\n hebon += hr.h;\n\n } else {\n\n // 変換できない文字の場合\n hebon += hr.c;\n }\n\n lastHebon = hr.h;\n lastChar = hr.c;\n i += hr.c.length;\n }\n\n return hebon;\n}\n","//---------------------------------------------------------------------\n// カタカナ・ひらがな変換\n//\n// 2025/6/23 Kazuhiko Arase\n//\n\nconst minHira = 'ぁ'.charCodeAt(0);\nconst maxHira = 'ゖ'.charCodeAt(0);\nconst minKata= 'ァ'.charCodeAt(0);\nconst maxKata = 'ヶ'.charCodeAt(0);\n\n/**\n * 全角ひらがなを全角カタカナに変換します。\n */\nexport function toKatakana(s : string) {\n let res = '';\n for (let i = 0; i < s.length; i += 1) {\n const cd = s.charCodeAt(i);\n res += (minHira <= cd && cd <= maxHira)?\n String.fromCharCode(cd - minHira + minKata) : s.charAt(i);\n }\n return res;\n}\n\n/**\n * 全角カタカナを全角ひらがなに変換します。\n */\nexport function toHiragana(s : string) {\n let res = '';\n for (let i = 0; i < s.length; i += 1) {\n const cd = s.charCodeAt(i);\n res += (minKata <= cd && cd <= maxKata)?\n String.fromCharCode(cd - minKata + minHira) : s.charAt(i);\n }\n return res;\n}\n","//---------------------------------------------------------------------\n// 全角・半角変換\n//\n// 2005/2/26 Kazuhiko Arase\n//\n\nconst asciiData = [\n\n '\\u0020', '\\u3000',\n '!', '!',\n\n // 2重引用符\n //'\\\"', '"',\n '\\\"', '”', // 一対多の変換の逆変換は先優先\n '\\\"', '“',\n\n '#', '#',\n '$', '$',\n '%', '%',\n '&', '&',\n '\\'', '’',\n '(', '(',\n ')', ')',\n '*', '*',\n '+', '+',\n ',', ',',\n '-', '-',\n '.', '.',\n '/', '/',\n '0', '0',\n '1', '1',\n '2', '2',\n '3', '3',\n '4', '4',\n '5', '5',\n '6', '6',\n '7', '7',\n '8', '8',\n '9', '9',\n ':', ':',\n ';', ';',\n '<', '<',\n '=', '=',\n '>', '>',\n '?', '?',\n '@', '@',\n 'A', 'A',\n 'B', 'B',\n 'C', 'C',\n 'D', 'D',\n 'E', 'E',\n 'F', 'F',\n 'G', 'G',\n 'H', 'H',\n 'I', 'I',\n 'J', 'J',\n 'K', 'K',\n 'L', 'L',\n 'M', 'M',\n 'N', 'N',\n 'O', 'O',\n 'P', 'P',\n 'Q', 'Q',\n 'R', 'R',\n 'S', 'S',\n 'T', 'T',\n 'U', 'U',\n 'V', 'V',\n 'W', 'W',\n 'X', 'X',\n 'Y', 'Y',\n 'Z', 'Z',\n '[', '[',\n\n // 円記号\n //'\\\\', '\',\n '\\\\', '¥',\n\n ']', ']',\n '^', '^',\n '_', '_',\n '`', '‘',\n 'a', 'a',\n 'b', 'b',\n 'c', 'c',\n 'd', 'd',\n 'e', 'e',\n 'f', 'f',\n 'g', 'g',\n 'h', 'h',\n 'i', 'i',\n 'j', 'j',\n 'k', 'k',\n 'l', 'l',\n 'm', 'm',\n 'n', 'n',\n 'o', 'o',\n 'p', 'p',\n 'q', 'q',\n 'r', 'r',\n 's', 's',\n 't', 't',\n 'u', 'u',\n 'v', 'v',\n 'w', 'w',\n 'x', 'x',\n 'y', 'y',\n 'z', 'z',\n '{', '{',\n '|', '|',\n '}', '}',\n '~', '~'\n];\n\nconst kanaData = [\n '。', '。',\n '「', '「',\n '」', '」',\n '、', '、',\n '・', '・',\n 'ヲ', 'ヲ',\n\n 'ァ', 'ァ',\n 'ィ', 'ィ',\n 'ゥ', 'ゥ',\n 'ェ', 'ェ',\n 'ォ', 'ォ',\n\n 'ャ', 'ャ',\n 'ュ', 'ュ',\n 'ョ', 'ョ',\n\n 'ッ', 'ッ',\n\n 'ー', 'ー',\n\n 'ア', 'ア',\n 'イ', 'イ',\n 'ウ', 'ウ',\n 'エ', 'エ',\n 'オ', 'オ',\n\n 'カ', 'カ',\n 'キ', 'キ',\n 'ク', 'ク',\n 'ケ', 'ケ',\n 'コ', 'コ',\n\n 'ガ', 'ガ',\n 'ギ', 'ギ',\n 'グ', 'グ',\n 'ゲ', 'ゲ',\n 'ゴ', 'ゴ',\n\n 'サ', 'サ',\n 'シ', 'シ',\n 'ス', 'ス',\n 'セ', 'セ',\n 'ソ', 'ソ',\n\n 'ザ', 'ザ',\n 'ジ', 'ジ',\n 'ズ', 'ズ',\n 'ゼ', 'ゼ',\n 'ゾ', 'ゾ',\n\n 'タ', 'タ',\n 'チ', 'チ',\n 'ツ', 'ツ',\n 'テ', 'テ',\n 'ト', 'ト',\n\n 'ダ', 'ダ',\n 'ヂ', 'ヂ',\n 'ヅ', 'ヅ',\n 'デ', 'デ',\n 'ド', 'ド',\n\n 'ナ', 'ナ',\n 'ニ', 'ニ',\n 'ヌ', 'ヌ',\n 'ネ', 'ネ',\n 'ノ', 'ノ',\n\n 'ハ', 'ハ',\n 'ヒ', 'ヒ',\n 'フ', 'フ',\n 'ヘ', 'ヘ',\n 'ホ', 'ホ',\n\n 'バ', 'バ',\n 'ビ', 'ビ',\n 'ブ', 'ブ',\n 'ベ', 'ベ',\n 'ボ', 'ボ',\n\n 'パ', 'パ',\n 'ピ', 'ピ',\n 'プ', 'プ',\n 'ペ', 'ペ',\n 'ポ', 'ポ',\n\n 'マ', 'マ',\n 'ミ', 'ミ',\n 'ム', 'ム',\n 'メ', 'メ',\n 'モ', 'モ',\n\n 'ヤ', 'ヤ',\n 'ユ', 'ユ',\n 'ヨ', 'ヨ',\n\n 'ラ', 'ラ',\n 'リ', 'リ',\n 'ル', 'ル',\n 'レ', 'レ',\n 'ロ', 'ロ',\n\n 'ワ', 'ワ',\n 'ン', 'ン',\n\n 'ヴ', 'ヴ',\n\n '゛', '゙',\n '゜', '゚',\n\n 'ヰ', 'イ',\n 'ヱ', 'エ',\n 'ヮ', 'ワ',\n 'ヵ', 'カ',\n 'ヶ', 'ケ'\n];\n\ndeclare type StringMap = { [k : string] : string };\n\nconst createConversionMap = function(data : string[]) {\n\n const map1 : StringMap = {};\n const map2 : StringMap = {};\n\n const add = function(s1 : string, s2 : string) {\n if (!map1[s1]) {\n map1[s1] = s2;\n }\n if (!map2[s2]) {\n map2[s2] = s1;\n }\n };\n\n const convert = function(s : string, reverse : boolean) {\n\n const map = !reverse? map1 : map2;\n\n let converted = '';\n\n for (let i = 0; i < s.length; i += 1) {\n\n if (i + 1 < s.length) {\n const c = map[s.substring(i, i + 2)];\n if (c) {\n converted += c;\n i += 1;\n continue;\n }\n }\n\n const c = map[s.substring(i, i + 1)];\n if (c) {\n converted += c;\n continue;\n }\n\n // 変換テーブルに該当無し\n converted += s.substring(i, i + 1);\n }\n\n return converted;\n }\n\n if (data.length % 2 != 0) {\n throw 'bad data length:' + data.length;\n }\n const len = data.length / 2;\n for (let i = 0; i < len; i += 1) {\n add(data[i * 2], data[i * 2 + 1]);\n }\n\n return { convert : convert };\n};\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (ASCII)\n//\n\nconst asciiMap = createConversionMap(asciiData);\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (カタカナ)\n//\n\nconst kanaMap = createConversionMap(kanaData);\n\n// exports\n\n/**\n * 全角英数記号を半角に変換します。\n */\nexport function toHanAscii(s : string) {\n return asciiMap.convert(s, true);\n}\n\n/**\n * 半角英数記号を全角に変換します。\n */\nexport function toZenAscii(s : string) {\n return asciiMap.convert(s, false);\n}\n\n/**\n * 全角カタカナを半角に変換します。\n */\nexport function toHanKana(s : string) {\n return kanaMap.convert(s, false);\n}\n\n/**\n * 半角カタカナを全角に変換します。\n */\nexport function toZenKana(s : string) {\n return kanaMap.convert(s, true);\n}\n\n/**\n * 全角英数記号、カタカナを半角に変換します。\n * (toHanAscii, toHanKana の組み合わせ)\n */\nexport function toHan(s : string) {\n return toHanAscii(toHanKana(s) );\n}\n\n/**\n * 半角英数記号、カタカナを全角に変換します。\n * (toZenAscii, toZenKana の組み合わせ)\n */\nexport function toZen(s : string) {\n return toZenAscii(toZenKana(s) );\n}\n\n/**\n * 全角英数記号を半角に、半角カタカナを全角に変換します。\n * (toHanAscii, toZenKana の組み合わせ)\n */\nexport function normalize(s : string) {\n return toHanAscii(toZenKana(s) );\n}\n","//---------------------------------------------------------------------\n// 日本語文字変換ライブラリ (javascript)\n//\n// Copyright (c) 2025 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\n\nimport * as hebon from './jaconv/hebon';\nimport * as katahira from './jaconv/katahira';\nimport * as zenhan from './jaconv/zenhan';\n\nexport default {\n\n toHebon: hebon.toHebon,\n\n toHiragana: katahira.toHiragana,\n toKatakana: katahira.toKatakana,\n\n normalize: zenhan.normalize,\n toHan: zenhan.toHan,\n toHanAscii: zenhan.toHanAscii,\n toHanKana: zenhan.toHanKana,\n toZen: zenhan.toZen,\n toZenAscii: zenhan.toZenAscii,\n toZenKana: zenhan.toZenKana,\n};\n"],"names":["hebonMap","aaSet","getHebon","s","index","h","c","toHebon","hebon","lastHebon","i","hr","nextHr","htest","minHira","maxHira","minKata","maxKata","toKatakana","res","cd","toHiragana","asciiData","kanaData","createConversionMap","data","map1","map2","add","s1","s2","convert","reverse","map","converted","len","asciiMap","kanaMap","toHanAscii","toZenAscii","toHanKana","toZenKana","toHan","toZen","normalize","jaconv","hebon.toHebon","katahira.toHiragana","katahira.toKatakana","zenhan.normalize","zenhan.toHan","zenhan.toHanAscii","zenhan.toHanKana","zenhan.toZen","zenhan.toZenAscii","zenhan.toZenKana"],"mappings":"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"}
--------------------------------------------------------------------------------
/dist/jaconv.mjs:
--------------------------------------------------------------------------------
1 | const g = {
2 | あ: "A",
3 | い: "I",
4 | う: "U",
5 | え: "E",
6 | お: "O",
7 | か: "KA",
8 | き: "KI",
9 | く: "KU",
10 | け: "KE",
11 | こ: "KO",
12 | さ: "SA",
13 | し: "SHI",
14 | す: "SU",
15 | せ: "SE",
16 | そ: "SO",
17 | た: "TA",
18 | ち: "CHI",
19 | つ: "TSU",
20 | て: "TE",
21 | と: "TO",
22 | な: "NA",
23 | に: "NI",
24 | ぬ: "NU",
25 | ね: "NE",
26 | の: "NO",
27 | は: "HA",
28 | ひ: "HI",
29 | ふ: "FU",
30 | へ: "HE",
31 | ほ: "HO",
32 | ま: "MA",
33 | み: "MI",
34 | む: "MU",
35 | め: "ME",
36 | も: "MO",
37 | や: "YA",
38 | ゆ: "YU",
39 | よ: "YO",
40 | ら: "RA",
41 | り: "RI",
42 | る: "RU",
43 | れ: "RE",
44 | ろ: "RO",
45 | わ: "WA",
46 | ゐ: "I",
47 | ゑ: "E",
48 | を: "O",
49 | ぁ: "A",
50 | ぃ: "I",
51 | ぅ: "U",
52 | ぇ: "E",
53 | ぉ: "O",
54 | が: "GA",
55 | ぎ: "GI",
56 | ぐ: "GU",
57 | げ: "GE",
58 | ご: "GO",
59 | ざ: "ZA",
60 | じ: "JI",
61 | ず: "ZU",
62 | ぜ: "ZE",
63 | ぞ: "ZO",
64 | だ: "DA",
65 | ぢ: "JI",
66 | づ: "ZU",
67 | で: "DE",
68 | ど: "DO",
69 | ば: "BA",
70 | び: "BI",
71 | ぶ: "BU",
72 | べ: "BE",
73 | ぼ: "BO",
74 | ぱ: "PA",
75 | ぴ: "PI",
76 | ぷ: "PU",
77 | ぺ: "PE",
78 | ぽ: "PO",
79 | きゃ: "KYA",
80 | きゅ: "KYU",
81 | きょ: "KYO",
82 | しゃ: "SHA",
83 | しゅ: "SHU",
84 | しょ: "SHO",
85 | ちゃ: "CHA",
86 | ちゅ: "CHU",
87 | ちょ: "CHO",
88 | ちぇ: "CHE",
89 | にゃ: "NYA",
90 | にゅ: "NYU",
91 | にょ: "NYO",
92 | ひゃ: "HYA",
93 | ひゅ: "HYU",
94 | ひょ: "HYO",
95 | みゃ: "MYA",
96 | みゅ: "MYU",
97 | みょ: "MYO",
98 | りゃ: "RYA",
99 | りゅ: "RYU",
100 | りょ: "RYO",
101 | ぎゃ: "GYA",
102 | ぎゅ: "GYU",
103 | ぎょ: "GYO",
104 | じゃ: "JA",
105 | じゅ: "JU",
106 | じょ: "JO",
107 | びゃ: "BYA",
108 | びゅ: "BYU",
109 | びょ: "BYO",
110 | ぴゃ: "PYA",
111 | ぴゅ: "PYU",
112 | ぴょ: "PYO"
113 | }, M = {
114 | AA: !0,
115 | EE: !0,
116 | II: !1,
117 | // I は連続しても省略しない
118 | OO: !0,
119 | OU: !0,
120 | UU: !0
121 | }, h = function(t, o) {
122 | let n = null, e = null;
123 | return o + 1 < t.length && (e = t.substring(o, o + 2), n = g[e]), !n && o < t.length && (e = t.substring(o, o + 1), n = g[e]), { c: e, h: n || null };
124 | };
125 | function S(t) {
126 | let o = "", n = "", e = 0;
127 | for (; e < t.length; ) {
128 | const r = h(t, e);
129 | if (r.c == "っ") {
130 | const c = h(t, e + 1);
131 | c.h != null && (c.h.indexOf("CH") == 0 ? r.h = "T" : r.h = c.h.substring(0, 1));
132 | } else if (r.c == "ん") {
133 | const c = h(t, e + 1);
134 | c.h != null && "BMP".indexOf(c.h.charAt(0)) != -1 ? r.h = "M" : r.h = "N";
135 | } else r.c == "ー" && (r.h = "");
136 | if (r.h != null) {
137 | if (n != null) {
138 | let c = n + r.h;
139 | c.length > 2 && (c = c.substring(c.length - 2)), M[c] && (r.h = "");
140 | }
141 | o += r.h;
142 | } else
143 | o += r.c;
144 | n = r.h, e += r.c.length;
145 | }
146 | return o;
147 | }
148 | const f = 12353, m = 12438, s = 12449, Z = 12534;
149 | function d(t) {
150 | let o = "";
151 | for (let n = 0; n < t.length; n += 1) {
152 | const e = t.charCodeAt(n);
153 | o += f <= e && e <= m ? String.fromCharCode(e - f + s) : t.charAt(n);
154 | }
155 | return o;
156 | }
157 | function B(t) {
158 | let o = "";
159 | for (let n = 0; n < t.length; n += 1) {
160 | const e = t.charCodeAt(n);
161 | o += s <= e && e <= Z ? String.fromCharCode(e - s + f) : t.charAt(n);
162 | }
163 | return o;
164 | }
165 | const N = [
166 | " ",
167 | " ",
168 | "!",
169 | "!",
170 | // 2重引用符
171 | //'\"', '"',
172 | '"',
173 | "”",
174 | // 一対多の変換の逆変換は先優先
175 | '"',
176 | "“",
177 | "#",
178 | "#",
179 | "$",
180 | "$",
181 | "%",
182 | "%",
183 | "&",
184 | "&",
185 | "'",
186 | "’",
187 | "(",
188 | "(",
189 | ")",
190 | ")",
191 | "*",
192 | "*",
193 | "+",
194 | "+",
195 | ",",
196 | ",",
197 | "-",
198 | "-",
199 | ".",
200 | ".",
201 | "/",
202 | "/",
203 | "0",
204 | "0",
205 | "1",
206 | "1",
207 | "2",
208 | "2",
209 | "3",
210 | "3",
211 | "4",
212 | "4",
213 | "5",
214 | "5",
215 | "6",
216 | "6",
217 | "7",
218 | "7",
219 | "8",
220 | "8",
221 | "9",
222 | "9",
223 | ":",
224 | ":",
225 | ";",
226 | ";",
227 | "<",
228 | "<",
229 | "=",
230 | "=",
231 | ">",
232 | ">",
233 | "?",
234 | "?",
235 | "@",
236 | "@",
237 | "A",
238 | "A",
239 | "B",
240 | "B",
241 | "C",
242 | "C",
243 | "D",
244 | "D",
245 | "E",
246 | "E",
247 | "F",
248 | "F",
249 | "G",
250 | "G",
251 | "H",
252 | "H",
253 | "I",
254 | "I",
255 | "J",
256 | "J",
257 | "K",
258 | "K",
259 | "L",
260 | "L",
261 | "M",
262 | "M",
263 | "N",
264 | "N",
265 | "O",
266 | "O",
267 | "P",
268 | "P",
269 | "Q",
270 | "Q",
271 | "R",
272 | "R",
273 | "S",
274 | "S",
275 | "T",
276 | "T",
277 | "U",
278 | "U",
279 | "V",
280 | "V",
281 | "W",
282 | "W",
283 | "X",
284 | "X",
285 | "Y",
286 | "Y",
287 | "Z",
288 | "Z",
289 | "[",
290 | "[",
291 | // 円記号
292 | //'\\', '\',
293 | "\\",
294 | "¥",
295 | "]",
296 | "]",
297 | "^",
298 | "^",
299 | "_",
300 | "_",
301 | "`",
302 | "‘",
303 | "a",
304 | "a",
305 | "b",
306 | "b",
307 | "c",
308 | "c",
309 | "d",
310 | "d",
311 | "e",
312 | "e",
313 | "f",
314 | "f",
315 | "g",
316 | "g",
317 | "h",
318 | "h",
319 | "i",
320 | "i",
321 | "j",
322 | "j",
323 | "k",
324 | "k",
325 | "l",
326 | "l",
327 | "m",
328 | "m",
329 | "n",
330 | "n",
331 | "o",
332 | "o",
333 | "p",
334 | "p",
335 | "q",
336 | "q",
337 | "r",
338 | "r",
339 | "s",
340 | "s",
341 | "t",
342 | "t",
343 | "u",
344 | "u",
345 | "v",
346 | "v",
347 | "w",
348 | "w",
349 | "x",
350 | "x",
351 | "y",
352 | "y",
353 | "z",
354 | "z",
355 | "{",
356 | "{",
357 | "|",
358 | "|",
359 | "}",
360 | "}",
361 | "~",
362 | "~"
363 | ], P = [
364 | "。",
365 | "。",
366 | "「",
367 | "「",
368 | "」",
369 | "」",
370 | "、",
371 | "、",
372 | "・",
373 | "・",
374 | "ヲ",
375 | "ヲ",
376 | "ァ",
377 | "ァ",
378 | "ィ",
379 | "ィ",
380 | "ゥ",
381 | "ゥ",
382 | "ェ",
383 | "ェ",
384 | "ォ",
385 | "ォ",
386 | "ャ",
387 | "ャ",
388 | "ュ",
389 | "ュ",
390 | "ョ",
391 | "ョ",
392 | "ッ",
393 | "ッ",
394 | "ー",
395 | "ー",
396 | "ア",
397 | "ア",
398 | "イ",
399 | "イ",
400 | "ウ",
401 | "ウ",
402 | "エ",
403 | "エ",
404 | "オ",
405 | "オ",
406 | "カ",
407 | "カ",
408 | "キ",
409 | "キ",
410 | "ク",
411 | "ク",
412 | "ケ",
413 | "ケ",
414 | "コ",
415 | "コ",
416 | "ガ",
417 | "ガ",
418 | "ギ",
419 | "ギ",
420 | "グ",
421 | "グ",
422 | "ゲ",
423 | "ゲ",
424 | "ゴ",
425 | "ゴ",
426 | "サ",
427 | "サ",
428 | "シ",
429 | "シ",
430 | "ス",
431 | "ス",
432 | "セ",
433 | "セ",
434 | "ソ",
435 | "ソ",
436 | "ザ",
437 | "ザ",
438 | "ジ",
439 | "ジ",
440 | "ズ",
441 | "ズ",
442 | "ゼ",
443 | "ゼ",
444 | "ゾ",
445 | "ゾ",
446 | "タ",
447 | "タ",
448 | "チ",
449 | "チ",
450 | "ツ",
451 | "ツ",
452 | "テ",
453 | "テ",
454 | "ト",
455 | "ト",
456 | "ダ",
457 | "ダ",
458 | "ヂ",
459 | "ヂ",
460 | "ヅ",
461 | "ヅ",
462 | "デ",
463 | "デ",
464 | "ド",
465 | "ド",
466 | "ナ",
467 | "ナ",
468 | "ニ",
469 | "ニ",
470 | "ヌ",
471 | "ヌ",
472 | "ネ",
473 | "ネ",
474 | "ノ",
475 | "ノ",
476 | "ハ",
477 | "ハ",
478 | "ヒ",
479 | "ヒ",
480 | "フ",
481 | "フ",
482 | "ヘ",
483 | "ヘ",
484 | "ホ",
485 | "ホ",
486 | "バ",
487 | "バ",
488 | "ビ",
489 | "ビ",
490 | "ブ",
491 | "ブ",
492 | "ベ",
493 | "ベ",
494 | "ボ",
495 | "ボ",
496 | "パ",
497 | "パ",
498 | "ピ",
499 | "ピ",
500 | "プ",
501 | "プ",
502 | "ペ",
503 | "ペ",
504 | "ポ",
505 | "ポ",
506 | "マ",
507 | "マ",
508 | "ミ",
509 | "ミ",
510 | "ム",
511 | "ム",
512 | "メ",
513 | "メ",
514 | "モ",
515 | "モ",
516 | "ヤ",
517 | "ヤ",
518 | "ユ",
519 | "ユ",
520 | "ヨ",
521 | "ヨ",
522 | "ラ",
523 | "ラ",
524 | "リ",
525 | "リ",
526 | "ル",
527 | "ル",
528 | "レ",
529 | "レ",
530 | "ロ",
531 | "ロ",
532 | "ワ",
533 | "ワ",
534 | "ン",
535 | "ン",
536 | "ヴ",
537 | "ヴ",
538 | "゛",
539 | "゙",
540 | "゜",
541 | "゚",
542 | "ヰ",
543 | "イ",
544 | "ヱ",
545 | "エ",
546 | "ヮ",
547 | "ワ",
548 | "ヵ",
549 | "カ",
550 | "ヶ",
551 | "ケ"
552 | ], E = function(t) {
553 | const o = {}, n = {}, e = function(a, l) {
554 | o[a] || (o[a] = l), n[l] || (n[l] = a);
555 | }, r = function(a, l) {
556 | const O = l ? n : o;
557 | let u = "";
558 | for (let i = 0; i < a.length; i += 1) {
559 | if (i + 1 < a.length) {
560 | const Y = O[a.substring(i, i + 2)];
561 | if (Y) {
562 | u += Y, i += 1;
563 | continue;
564 | }
565 | }
566 | const U = O[a.substring(i, i + 1)];
567 | if (U) {
568 | u += U;
569 | continue;
570 | }
571 | u += a.substring(i, i + 1);
572 | }
573 | return u;
574 | };
575 | if (t.length % 2 != 0)
576 | throw "bad data length:" + t.length;
577 | const c = t.length / 2;
578 | for (let a = 0; a < c; a += 1)
579 | e(t[a * 2], t[a * 2 + 1]);
580 | return { convert: r };
581 | }, C = E(N), I = E(P);
582 | function A(t) {
583 | return C.convert(t, !0);
584 | }
585 | function K(t) {
586 | return C.convert(t, !1);
587 | }
588 | function b(t) {
589 | return I.convert(t, !1);
590 | }
591 | function H(t) {
592 | return I.convert(t, !0);
593 | }
594 | function p(t) {
595 | return A(b(t));
596 | }
597 | function v(t) {
598 | return K(H(t));
599 | }
600 | function G(t) {
601 | return A(H(t));
602 | }
603 | const R = {
604 | toHebon: S,
605 | toHiragana: B,
606 | toKatakana: d,
607 | normalize: G,
608 | toHan: p,
609 | toHanAscii: A,
610 | toHanKana: b,
611 | toZen: v,
612 | toZenAscii: K,
613 | toZenKana: H
614 | };
615 | export {
616 | R as default
617 | };
618 | //# sourceMappingURL=jaconv.mjs.map
619 |
--------------------------------------------------------------------------------
/dist/jaconv.mjs.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"jaconv.mjs","sources":["../src/main/ts/jaconv/hebon.ts","../src/main/ts/jaconv/katahira.ts","../src/main/ts/jaconv/zenhan.ts","../src/main/ts/jaconv.ts"],"sourcesContent":["//---------------------------------------------------------------------\n// ヘボン式ローマ字変換\n//\n// Copyright (c) 2011 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\n// 'ん' は、別途ハンドリングするのでデータに含めない\nconst hebonMap : { [ hiragana : string ] : string } = {\n 'あ':'A','い':'I','う':'U','え':'E','お':'O',\n 'か':'KA','き':'KI','く':'KU','け':'KE','こ':'KO',\n 'さ':'SA','し':'SHI','す':'SU','せ':'SE','そ':'SO',\n 'た':'TA','ち':'CHI','つ':'TSU','て':'TE','と':'TO',\n 'な':'NA','に':'NI','ぬ':'NU','ね':'NE','の':'NO',\n 'は':'HA','ひ':'HI','ふ':'FU','へ':'HE','ほ':'HO',\n 'ま':'MA','み':'MI','む':'MU','め':'ME','も':'MO',\n 'や':'YA','ゆ':'YU','よ':'YO',\n 'ら':'RA','り':'RI','る':'RU','れ':'RE','ろ':'RO',\n 'わ':'WA','ゐ':'I','ゑ':'E','を':'O',\n 'ぁ':'A','ぃ':'I','ぅ':'U','ぇ':'E','ぉ':'O',\n 'が':'GA','ぎ':'GI','ぐ':'GU','げ':'GE','ご':'GO',\n 'ざ':'ZA','じ':'JI','ず':'ZU','ぜ':'ZE','ぞ':'ZO',\n 'だ':'DA','ぢ':'JI','づ':'ZU','で':'DE','ど':'DO',\n 'ば':'BA','び':'BI','ぶ':'BU','べ':'BE','ぼ':'BO',\n 'ぱ':'PA','ぴ':'PI','ぷ':'PU','ぺ':'PE','ぽ':'PO',\n 'きゃ':'KYA','きゅ':'KYU','きょ':'KYO',\n 'しゃ':'SHA','しゅ':'SHU','しょ':'SHO',\n 'ちゃ':'CHA','ちゅ':'CHU','ちょ':'CHO','ちぇ':'CHE',\n 'にゃ':'NYA','にゅ':'NYU','にょ':'NYO',\n 'ひゃ':'HYA','ひゅ':'HYU','ひょ':'HYO',\n 'みゃ':'MYA','みゅ':'MYU','みょ':'MYO',\n 'りゃ':'RYA','りゅ':'RYU','りょ':'RYO',\n 'ぎゃ':'GYA','ぎゅ':'GYU','ぎょ':'GYO',\n 'じゃ':'JA','じゅ':'JU','じょ':'JO',\n 'びゃ':'BYA','びゅ':'BYU','びょ':'BYO',\n 'ぴゃ':'PYA','ぴゅ':'PYU','ぴょ':'PYO'\n};\n\nconst aaSet : { [ aa : string ] : boolean } = {\n 'AA': true, 'EE': true, 'II': false, // I は連続しても省略しない\n 'OO': true, 'OU': true, 'UU': true\n};\n\nconst getHebon = function(s : string, index : number) {\n let h : any = null;\n let c : any = null;\n if (index + 1 < s.length) {\n c = s.substring(index, index + 2);\n h = hebonMap[c];\n }\n if (!h && index < s.length) {\n c = s.substring(index, index + 1);\n h = hebonMap[c];\n }\n return {c: c, h: h || null};\n};\n\n/**\n * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。\n */\nexport function toHebon(s : string) {\n\n let hebon = '';\n let lastHebon = '';\n let lastChar :any = '';\n let i = 0;\n\n while (i < s.length) {\n\n const hr = getHebon(s, i);\n\n if (hr.c == 'っ') {\n\n // 'っち'\n const nextHr = getHebon(s, i + 1);\n if (nextHr.h != null) {\n if (nextHr.h.indexOf('CH') == 0) {\n hr.h = 'T';\n } else {\n hr.h = nextHr.h.substring(0, 1);\n }\n }\n\n } else if (hr.c == 'ん') {\n\n // B,M,P の前の 'ん' は 'M' とする。\n const nextHr = getHebon(s, i + 1);\n if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0) ) != -1) {\n hr.h = 'M';\n } else {\n hr.h = 'N';\n }\n\n } else if (hr.c == 'ー') {\n\n // 長音は無視\n hr.h = '';\n }\n\n if (hr.h != null) {\n\n // 変換できる文字の場合\n if (lastHebon != null) {\n\n // 連続する母音の除去\n let htest = lastHebon + hr.h;\n if (htest.length > 2) {\n htest = htest.substring(htest.length - 2);\n }\n if (aaSet[htest]) {\n hr.h = '';\n }\n }\n\n hebon += hr.h;\n\n } else {\n\n // 変換できない文字の場合\n hebon += hr.c;\n }\n\n lastHebon = hr.h;\n lastChar = hr.c;\n i += hr.c.length;\n }\n\n return hebon;\n}\n","//---------------------------------------------------------------------\n// カタカナ・ひらがな変換\n//\n// 2025/6/23 Kazuhiko Arase\n//\n\nconst minHira = 'ぁ'.charCodeAt(0);\nconst maxHira = 'ゖ'.charCodeAt(0);\nconst minKata= 'ァ'.charCodeAt(0);\nconst maxKata = 'ヶ'.charCodeAt(0);\n\n/**\n * 全角ひらがなを全角カタカナに変換します。\n */\nexport function toKatakana(s : string) {\n let res = '';\n for (let i = 0; i < s.length; i += 1) {\n const cd = s.charCodeAt(i);\n res += (minHira <= cd && cd <= maxHira)?\n String.fromCharCode(cd - minHira + minKata) : s.charAt(i);\n }\n return res;\n}\n\n/**\n * 全角カタカナを全角ひらがなに変換します。\n */\nexport function toHiragana(s : string) {\n let res = '';\n for (let i = 0; i < s.length; i += 1) {\n const cd = s.charCodeAt(i);\n res += (minKata <= cd && cd <= maxKata)?\n String.fromCharCode(cd - minKata + minHira) : s.charAt(i);\n }\n return res;\n}\n","//---------------------------------------------------------------------\n// 全角・半角変換\n//\n// 2005/2/26 Kazuhiko Arase\n//\n\nconst asciiData = [\n\n '\\u0020', '\\u3000',\n '!', '!',\n\n // 2重引用符\n //'\\\"', '"',\n '\\\"', '”', // 一対多の変換の逆変換は先優先\n '\\\"', '“',\n\n '#', '#',\n '$', '$',\n '%', '%',\n '&', '&',\n '\\'', '’',\n '(', '(',\n ')', ')',\n '*', '*',\n '+', '+',\n ',', ',',\n '-', '-',\n '.', '.',\n '/', '/',\n '0', '0',\n '1', '1',\n '2', '2',\n '3', '3',\n '4', '4',\n '5', '5',\n '6', '6',\n '7', '7',\n '8', '8',\n '9', '9',\n ':', ':',\n ';', ';',\n '<', '<',\n '=', '=',\n '>', '>',\n '?', '?',\n '@', '@',\n 'A', 'A',\n 'B', 'B',\n 'C', 'C',\n 'D', 'D',\n 'E', 'E',\n 'F', 'F',\n 'G', 'G',\n 'H', 'H',\n 'I', 'I',\n 'J', 'J',\n 'K', 'K',\n 'L', 'L',\n 'M', 'M',\n 'N', 'N',\n 'O', 'O',\n 'P', 'P',\n 'Q', 'Q',\n 'R', 'R',\n 'S', 'S',\n 'T', 'T',\n 'U', 'U',\n 'V', 'V',\n 'W', 'W',\n 'X', 'X',\n 'Y', 'Y',\n 'Z', 'Z',\n '[', '[',\n\n // 円記号\n //'\\\\', '\',\n '\\\\', '¥',\n\n ']', ']',\n '^', '^',\n '_', '_',\n '`', '‘',\n 'a', 'a',\n 'b', 'b',\n 'c', 'c',\n 'd', 'd',\n 'e', 'e',\n 'f', 'f',\n 'g', 'g',\n 'h', 'h',\n 'i', 'i',\n 'j', 'j',\n 'k', 'k',\n 'l', 'l',\n 'm', 'm',\n 'n', 'n',\n 'o', 'o',\n 'p', 'p',\n 'q', 'q',\n 'r', 'r',\n 's', 's',\n 't', 't',\n 'u', 'u',\n 'v', 'v',\n 'w', 'w',\n 'x', 'x',\n 'y', 'y',\n 'z', 'z',\n '{', '{',\n '|', '|',\n '}', '}',\n '~', '~'\n];\n\nconst kanaData = [\n '。', '。',\n '「', '「',\n '」', '」',\n '、', '、',\n '・', '・',\n 'ヲ', 'ヲ',\n\n 'ァ', 'ァ',\n 'ィ', 'ィ',\n 'ゥ', 'ゥ',\n 'ェ', 'ェ',\n 'ォ', 'ォ',\n\n 'ャ', 'ャ',\n 'ュ', 'ュ',\n 'ョ', 'ョ',\n\n 'ッ', 'ッ',\n\n 'ー', 'ー',\n\n 'ア', 'ア',\n 'イ', 'イ',\n 'ウ', 'ウ',\n 'エ', 'エ',\n 'オ', 'オ',\n\n 'カ', 'カ',\n 'キ', 'キ',\n 'ク', 'ク',\n 'ケ', 'ケ',\n 'コ', 'コ',\n\n 'ガ', 'ガ',\n 'ギ', 'ギ',\n 'グ', 'グ',\n 'ゲ', 'ゲ',\n 'ゴ', 'ゴ',\n\n 'サ', 'サ',\n 'シ', 'シ',\n 'ス', 'ス',\n 'セ', 'セ',\n 'ソ', 'ソ',\n\n 'ザ', 'ザ',\n 'ジ', 'ジ',\n 'ズ', 'ズ',\n 'ゼ', 'ゼ',\n 'ゾ', 'ゾ',\n\n 'タ', 'タ',\n 'チ', 'チ',\n 'ツ', 'ツ',\n 'テ', 'テ',\n 'ト', 'ト',\n\n 'ダ', 'ダ',\n 'ヂ', 'ヂ',\n 'ヅ', 'ヅ',\n 'デ', 'デ',\n 'ド', 'ド',\n\n 'ナ', 'ナ',\n 'ニ', 'ニ',\n 'ヌ', 'ヌ',\n 'ネ', 'ネ',\n 'ノ', 'ノ',\n\n 'ハ', 'ハ',\n 'ヒ', 'ヒ',\n 'フ', 'フ',\n 'ヘ', 'ヘ',\n 'ホ', 'ホ',\n\n 'バ', 'バ',\n 'ビ', 'ビ',\n 'ブ', 'ブ',\n 'ベ', 'ベ',\n 'ボ', 'ボ',\n\n 'パ', 'パ',\n 'ピ', 'ピ',\n 'プ', 'プ',\n 'ペ', 'ペ',\n 'ポ', 'ポ',\n\n 'マ', 'マ',\n 'ミ', 'ミ',\n 'ム', 'ム',\n 'メ', 'メ',\n 'モ', 'モ',\n\n 'ヤ', 'ヤ',\n 'ユ', 'ユ',\n 'ヨ', 'ヨ',\n\n 'ラ', 'ラ',\n 'リ', 'リ',\n 'ル', 'ル',\n 'レ', 'レ',\n 'ロ', 'ロ',\n\n 'ワ', 'ワ',\n 'ン', 'ン',\n\n 'ヴ', 'ヴ',\n\n '゛', '゙',\n '゜', '゚',\n\n 'ヰ', 'イ',\n 'ヱ', 'エ',\n 'ヮ', 'ワ',\n 'ヵ', 'カ',\n 'ヶ', 'ケ'\n];\n\ndeclare type StringMap = { [k : string] : string };\n\nconst createConversionMap = function(data : string[]) {\n\n const map1 : StringMap = {};\n const map2 : StringMap = {};\n\n const add = function(s1 : string, s2 : string) {\n if (!map1[s1]) {\n map1[s1] = s2;\n }\n if (!map2[s2]) {\n map2[s2] = s1;\n }\n };\n\n const convert = function(s : string, reverse : boolean) {\n\n const map = !reverse? map1 : map2;\n\n let converted = '';\n\n for (let i = 0; i < s.length; i += 1) {\n\n if (i + 1 < s.length) {\n const c = map[s.substring(i, i + 2)];\n if (c) {\n converted += c;\n i += 1;\n continue;\n }\n }\n\n const c = map[s.substring(i, i + 1)];\n if (c) {\n converted += c;\n continue;\n }\n\n // 変換テーブルに該当無し\n converted += s.substring(i, i + 1);\n }\n\n return converted;\n }\n\n if (data.length % 2 != 0) {\n throw 'bad data length:' + data.length;\n }\n const len = data.length / 2;\n for (let i = 0; i < len; i += 1) {\n add(data[i * 2], data[i * 2 + 1]);\n }\n\n return { convert : convert };\n};\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (ASCII)\n//\n\nconst asciiMap = createConversionMap(asciiData);\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (カタカナ)\n//\n\nconst kanaMap = createConversionMap(kanaData);\n\n// exports\n\n/**\n * 全角英数記号を半角に変換します。\n */\nexport function toHanAscii(s : string) {\n return asciiMap.convert(s, true);\n}\n\n/**\n * 半角英数記号を全角に変換します。\n */\nexport function toZenAscii(s : string) {\n return asciiMap.convert(s, false);\n}\n\n/**\n * 全角カタカナを半角に変換します。\n */\nexport function toHanKana(s : string) {\n return kanaMap.convert(s, false);\n}\n\n/**\n * 半角カタカナを全角に変換します。\n */\nexport function toZenKana(s : string) {\n return kanaMap.convert(s, true);\n}\n\n/**\n * 全角英数記号、カタカナを半角に変換します。\n * (toHanAscii, toHanKana の組み合わせ)\n */\nexport function toHan(s : string) {\n return toHanAscii(toHanKana(s) );\n}\n\n/**\n * 半角英数記号、カタカナを全角に変換します。\n * (toZenAscii, toZenKana の組み合わせ)\n */\nexport function toZen(s : string) {\n return toZenAscii(toZenKana(s) );\n}\n\n/**\n * 全角英数記号を半角に、半角カタカナを全角に変換します。\n * (toHanAscii, toZenKana の組み合わせ)\n */\nexport function normalize(s : string) {\n return toHanAscii(toZenKana(s) );\n}\n","//---------------------------------------------------------------------\n// 日本語文字変換ライブラリ (javascript)\n//\n// Copyright (c) 2025 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\n\nimport * as hebon from './jaconv/hebon';\nimport * as katahira from './jaconv/katahira';\nimport * as zenhan from './jaconv/zenhan';\n\nexport default {\n\n toHebon: hebon.toHebon,\n\n toHiragana: katahira.toHiragana,\n toKatakana: katahira.toKatakana,\n\n normalize: zenhan.normalize,\n toHan: zenhan.toHan,\n toHanAscii: zenhan.toHanAscii,\n toHanKana: zenhan.toHanKana,\n toZen: zenhan.toZen,\n toZenAscii: zenhan.toZenAscii,\n toZenKana: zenhan.toZenKana,\n};\n"],"names":["hebonMap","aaSet","getHebon","s","index","h","c","toHebon","hebon","lastHebon","i","hr","nextHr","htest","minHira","maxHira","minKata","maxKata","toKatakana","res","cd","toHiragana","asciiData","kanaData","createConversionMap","data","map1","map2","add","s1","s2","convert","reverse","map","converted","len","asciiMap","kanaMap","toHanAscii","toZenAscii","toHanKana","toZenKana","toHan","toZen","normalize","jaconv","hebon.toHebon","katahira.toHiragana","katahira.toKatakana","zenhan.normalize","zenhan.toHan","zenhan.toHanAscii","zenhan.toHanKana","zenhan.toZen","zenhan.toZenAscii","zenhan.toZenKana"],"mappings":"AAaA,MAAMA,IAAgD;AAAA,EACpD,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EACpC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAM,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACzC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAM,GAAI;AAAA,EAAM,GAAI;AAAA,EAAK,GAAI;AAAA,EAC1C,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACtB,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EAC7B,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EAAI,GAAI;AAAA,EACpC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EAAK,GAAI;AAAA,EACxC,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EACtC,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAK,IAAK;AAAA,EAAK,IAAK;AAAA,EACzB,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAAA,EAC3B,IAAK;AAAA,EAAM,IAAK;AAAA,EAAM,IAAK;AAC7B,GAEMC,IAAwC;AAAA,EAC5C,IAAM;AAAA,EAAM,IAAM;AAAA,EAAM,IAAM;AAAA;AAAA,EAC9B,IAAM;AAAA,EAAM,IAAM;AAAA,EAAM,IAAM;AAChC,GAEMC,IAAW,SAASC,GAAYC,GAAgB;AACpD,MAAIC,IAAU,MACVC,IAAU;AACd,SAAIF,IAAQ,IAAID,EAAE,WAChBG,IAAIH,EAAE,UAAUC,GAAOA,IAAQ,CAAC,GAChCC,IAAIL,EAASM,CAAC,IAEZ,CAACD,KAAKD,IAAQD,EAAE,WAClBG,IAAIH,EAAE,UAAUC,GAAOA,IAAQ,CAAC,GAChCC,IAAIL,EAASM,CAAC,IAET,EAAC,GAAAA,GAAM,GAAGD,KAAK,KAAA;AACxB;AAKO,SAASE,EAAQJ,GAAY;AAElC,MAAIK,IAAQ,IACRC,IAAY,IAEZC,IAAI;AAER,SAAOA,IAAIP,EAAE,UAAQ;AAEnB,UAAMQ,IAAKT,EAASC,GAAGO,CAAC;AAExB,QAAIC,EAAG,KAAK,KAAK;AAGf,YAAMC,IAASV,EAASC,GAAGO,IAAI,CAAC;AAChC,MAAIE,EAAO,KAAK,SACVA,EAAO,EAAE,QAAQ,IAAI,KAAK,IAC5BD,EAAG,IAAI,MAEPA,EAAG,IAAIC,EAAO,EAAE,UAAU,GAAG,CAAC;AAAA,IAElC,WAESD,EAAG,KAAK,KAAK;AAGtB,YAAMC,IAASV,EAASC,GAAGO,IAAI,CAAC;AAChC,MAAIE,EAAO,KAAK,QAAQ,MAAM,QAAQA,EAAO,EAAE,OAAO,CAAC,CAAE,KAAK,KAC5DD,EAAG,IAAI,MAEPA,EAAG,IAAI;AAAA,IACT,MAEF,CAAWA,EAAG,KAAK,QAGjBA,EAAG,IAAI;AAGT,QAAIA,EAAG,KAAK,MAAM;AAGhB,UAAIF,KAAa,MAAM;AAGrB,YAAII,IAAQJ,IAAYE,EAAG;AAC3B,QAAIE,EAAM,SAAS,MACjBA,IAAQA,EAAM,UAAUA,EAAM,SAAS,CAAC,IAEtCZ,EAAMY,CAAK,MACbF,EAAG,IAAI;AAAA,MACT;AAGF,MAAAH,KAASG,EAAG;AAAA,IAAA;AAKZ,MAAAH,KAASG,EAAG;AAGd,IAAAF,IAAYE,EAAG,GAEfD,KAAKC,EAAG,EAAE;AAAA,EAAA;AAGZ,SAAOH;AACT;AC/HA,MAAMM,IAAU,OACVC,IAAU,OACVC,IAAS,OACTC,IAAU;AAKT,SAASC,EAAWf,GAAY;AACrC,MAAIgB,IAAM;AACV,WAAST,IAAI,GAAGA,IAAIP,EAAE,QAAQO,KAAK,GAAG;AACpC,UAAMU,IAAKjB,EAAE,WAAWO,CAAC;AACzB,IAAAS,KAAQL,KAAWM,KAAMA,KAAML,IAC7B,OAAO,aAAaK,IAAKN,IAAUE,CAAO,IAAIb,EAAE,OAAOO,CAAC;AAAA,EAAA;AAE5D,SAAOS;AACT;AAKO,SAASE,EAAWlB,GAAY;AACrC,MAAIgB,IAAM;AACV,WAAST,IAAI,GAAGA,IAAIP,EAAE,QAAQO,KAAK,GAAG;AACpC,UAAMU,IAAKjB,EAAE,WAAWO,CAAC;AACzB,IAAAS,KAAQH,KAAWI,KAAMA,KAAMH,IAC7B,OAAO,aAAaG,IAAKJ,IAAUF,CAAO,IAAIX,EAAE,OAAOO,CAAC;AAAA,EAAA;AAE5D,SAAOS;AACT;AC7BA,MAAMG,IAAY;AAAA,EAEhB;AAAA,EAAU;AAAA,EACV;AAAA,EAAK;AAAA;AAAA;AAAA,EAIL;AAAA,EAAM;AAAA;AAAA,EACN;AAAA,EAAM;AAAA,EAEN;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAM;AAAA,EACN;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA;AAAA;AAAA,EAIL;AAAA,EAAM;AAAA,EAEN;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AACP,GAEMC,IAAW;AAAA,EACf;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AACP,GAIMC,IAAsB,SAASC,GAAiB;AAEpD,QAAMC,IAAmB,CAAA,GACnBC,IAAmB,CAAA,GAEnBC,IAAM,SAASC,GAAaC,GAAa;AAC7C,IAAKJ,EAAKG,CAAE,MACVH,EAAKG,CAAE,IAAIC,IAERH,EAAKG,CAAE,MACVH,EAAKG,CAAE,IAAID;AAAA,EACb,GAGIE,IAAU,SAAS5B,GAAa6B,GAAmB;AAEvD,UAAMC,IAAOD,IAAgBL,IAAPD;AAEtB,QAAIQ,IAAY;AAEhB,aAAS,IAAI,GAAG,IAAI/B,EAAE,QAAQ,KAAK,GAAG;AAEpC,UAAI,IAAI,IAAIA,EAAE,QAAQ;AACpB,cAAMG,IAAI2B,EAAI9B,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACnC,YAAIG,GAAG;AACL,UAAA4B,KAAa5B,GACb,KAAK;AACL;AAAA,QAAA;AAAA,MACF;AAGF,YAAMA,IAAI2B,EAAI9B,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACnC,UAAIG,GAAG;AACL,QAAA4B,KAAa5B;AACb;AAAA,MAAA;AAIF,MAAA4B,KAAa/B,EAAE,UAAU,GAAG,IAAI,CAAC;AAAA,IAAA;AAGnC,WAAO+B;AAAA,EAAA;AAGT,MAAIT,EAAK,SAAS,KAAK;AACrB,UAAM,qBAAqBA,EAAK;AAElC,QAAMU,IAAMV,EAAK,SAAS;AAC1B,WAASf,IAAI,GAAGA,IAAIyB,GAAKzB,KAAK;AAC5B,IAAAkB,EAAIH,EAAKf,IAAI,CAAC,GAAGe,EAAKf,IAAI,IAAI,CAAC,CAAC;AAGlC,SAAO,EAAE,SAAAqB,EAAA;AACX,GAMMK,IAAWZ,EAAoBF,CAAS,GAMxCe,IAAUb,EAAoBD,CAAQ;AAOrC,SAASe,EAAWnC,GAAY;AACrC,SAAOiC,EAAS,QAAQjC,GAAG,EAAI;AACjC;AAKO,SAASoC,EAAWpC,GAAY;AACrC,SAAOiC,EAAS,QAAQjC,GAAG,EAAK;AAClC;AAKO,SAASqC,EAAUrC,GAAY;AACpC,SAAOkC,EAAQ,QAAQlC,GAAG,EAAK;AACjC;AAKO,SAASsC,EAAUtC,GAAY;AACpC,SAAOkC,EAAQ,QAAQlC,GAAG,EAAI;AAChC;AAMO,SAASuC,EAAMvC,GAAY;AAChC,SAAOmC,EAAWE,EAAUrC,CAAC,CAAE;AACjC;AAMO,SAASwC,EAAMxC,GAAY;AAChC,SAAOoC,EAAWE,EAAUtC,CAAC,CAAE;AACjC;AAMO,SAASyC,EAAUzC,GAAY;AACpC,SAAOmC,EAAWG,EAAUtC,CAAC,CAAE;AACjC;ACjVA,MAAA0C,IAAe;AAAA,EAEb,SAASC;AAAAA,EAET,YAAYC;AAAAA,EACZ,YAAYC;AAAAA,EAEZ,WAAWC;AAAAA,EACX,OAAOC;AAAAA,EACP,YAAYC;AAAAA,EACZ,WAAWC;AAAAA,EACX,OAAOC;AAAAA,EACP,YAAYC;AAAAA,EACZ,WAAWC;AACb;"}
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jaconv",
3 | "version": "1.1.2",
4 | "description": "Japanese character conversion library",
5 | "author": "Kazuhiko Arase",
6 | "main": "dist/jaconv.js",
7 | "module": "dist/jaconv.mjs",
8 | "types": "dist/jaconv.d.ts",
9 | "exports": {
10 | "types": "./dist/jaconv.d.ts",
11 | "require": "./dist/jaconv.js",
12 | "import": "./dist/jaconv.mjs"
13 | },
14 | "directories": {
15 | "dist": "dist"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "https://github.com/kazuhikoarase/jaconv.git"
20 | },
21 | "bugs": {
22 | "url": "https://github.com/kazuhikoarase/jaconv/issues"
23 | },
24 | "keywords": [
25 | "japanese",
26 | "conversion",
27 | "hebon",
28 | "hepburn",
29 | "romaji",
30 | "roman",
31 | "romanization",
32 | "hankaku",
33 | "zenkaku",
34 | "hiragana",
35 | "katakana"
36 | ],
37 | "scripts": {
38 | "dev": "vite",
39 | "build": "vite build",
40 | "test": "wtr"
41 | },
42 | "license": "MIT",
43 | "devDependencies": {
44 | "@open-wc/testing": "^4.0.0",
45 | "@types/node": "^24.0.3",
46 | "@web/dev-server-esbuild": "^1.0.4",
47 | "@web/test-runner": "^0.20.2",
48 | "typescript": "~5.8.3",
49 | "vite": "^6.3.5",
50 | "vite-plugin-dts": "^4.5.4"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
4 | 4.0.0
5 |
6 | com.d_project
7 | jaconv
8 | 0.1.0-SNAPSHOT
9 | jar
10 |
11 | jaconv
12 | Japanese Character Converter
13 | https://github.com/kazuhikoarase/jaconv
14 |
15 |
16 |
17 | MIT License
18 | http://www.opensource.org/licenses/mit-license.php
19 |
20 |
21 |
22 |
23 |
24 | Kazuhiko Arase
25 | kazuhiko.arase@gmail.com
26 | kazuhikoarase
27 | https://kazuhikoarase.github.io/
28 |
29 |
30 |
31 |
32 | scm:git:git://github.com/kazuhikoarase/jaconv.git
33 | scm:git:ssh://github.com:kazuhikoarase/jaconv.git
34 | https://github.com/kazuhikoarase/jaconv/tree/master
35 |
36 |
37 |
38 | UTF-8
39 | UTF-8
40 |
41 |
42 |
43 |
44 | junit
45 | junit
46 | 4.13.1
47 | test
48 |
49 |
50 |
51 |
52 |
53 |
54 | src/test/java
55 |
56 | **/*.java
57 |
58 |
59 |
60 |
61 |
62 | maven-compiler-plugin
63 | 3.7.0
64 |
65 | 1.8
66 | 1.8
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/main/java/com/d_project/jaconv/JaConv.java:
--------------------------------------------------------------------------------
1 | package com.d_project.jaconv;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | /**
7 | * JaConv
8 | * @author kazuhiko arase
9 | */
10 | @SuppressWarnings({"serial", "unused"})
11 | public class JaConv {
12 |
13 | private JaConv() {
14 | }
15 |
16 | protected static class JMap extends HashMap {
17 | JMap _$(K k, V v) { put(k, v); return this; }
18 | }
19 |
20 | // 'ん' は、別途ハンドリングするのでデータに含めない
21 | private static final Map hebonMap =
22 | new JMap().
23 | _$("あ", "A")._$("い", "I")._$("う", "U")._$("え", "E")._$("お", "O").
24 | _$("か", "KA")._$("き", "KI")._$("く", "KU")._$("け", "KE")._$("こ", "KO").
25 | _$("さ", "SA")._$("し", "SHI")._$("す", "SU")._$("せ", "SE")._$("そ", "SO").
26 | _$("た", "TA")._$("ち", "CHI")._$("つ", "TSU")._$("て", "TE")._$("と", "TO").
27 | _$("な", "NA")._$("に", "NI")._$("ぬ", "NU")._$("ね", "NE")._$("の", "NO").
28 | _$("は", "HA")._$("ひ", "HI")._$("ふ", "FU")._$("へ", "HE")._$("ほ", "HO").
29 | _$("ま", "MA")._$("み", "MI")._$("む", "MU")._$("め", "ME")._$("も", "MO").
30 | _$("や", "YA")._$("ゆ", "YU")._$("よ", "YO").
31 | _$("ら", "RA")._$("り", "RI")._$("る", "RU")._$("れ", "RE")._$("ろ", "RO").
32 | _$("わ", "WA")._$("ゐ", "I")._$("ゑ", "E")._$("を", "O").
33 | _$("ぁ", "A")._$("ぃ", "I")._$("ぅ", "U")._$("ぇ", "E")._$("ぉ", "O").
34 | _$("が", "GA")._$("ぎ", "GI")._$("ぐ", "GU")._$("げ", "GE")._$("ご", "GO").
35 | _$("ざ", "ZA")._$("じ", "JI")._$("ず", "ZU")._$("ぜ", "ZE")._$("ぞ", "ZO").
36 | _$("だ", "DA")._$("ぢ", "JI")._$("づ", "ZU")._$("で", "DE")._$("ど", "DO").
37 | _$("ば", "BA")._$("び", "BI")._$("ぶ", "BU")._$("べ", "BE")._$("ぼ", "BO").
38 | _$("ぱ", "PA")._$("ぴ", "PI")._$("ぷ", "PU")._$("ぺ", "PE")._$("ぽ", "PO").
39 | _$("きゃ", "KYA")._$("きゅ", "KYU")._$("きょ", "KYO").
40 | _$("しゃ", "SHA")._$("しゅ", "SHU")._$("しょ", "SHO").
41 | _$("ちゃ", "CHA")._$("ちゅ", "CHU")._$("ちょ", "CHO")._$("ちぇ", "CHE").
42 | _$("にゃ", "NYA")._$("にゅ", "NYU")._$("にょ", "NYO").
43 | _$("ひゃ", "HYA")._$("ひゅ", "HYU")._$("ひょ", "HYO").
44 | _$("みゃ", "MYA")._$("みゅ", "MYU")._$("みょ", "MYO").
45 | _$("りゃ", "RYA")._$("りゅ", "RYU")._$("りょ", "RYO").
46 | _$("ぎゃ", "GYA")._$("ぎゅ", "GYU")._$("ぎょ", "GYO").
47 | _$("じゃ", "JA")._$("じゅ", "JU")._$("じょ", "JO").
48 | _$("びゃ", "BYA")._$("びゅ", "BYU")._$("びょ", "BYO").
49 | _$("ぴゃ", "PYA")._$("ぴゅ", "PYU")._$("ぴょ","PYO");
50 |
51 | private static final Map aaSet =
52 | new JMap().
53 | _$("AA", true)._$("EE", true)._$("II", false). // I は連続しても省略しない
54 | _$("OO", true)._$("OU", true)._$("UU", true);
55 |
56 | protected static Hebon getHebon(String s, int index) {
57 | String h = null;
58 | String c = null;
59 | if (index + 1 < s.length() ) {
60 | c = s.substring(index, index + 2);
61 | h = hebonMap.get(c);
62 | }
63 | if (h == null && index < s.length() ) {
64 | c = s.substring(index, index + 1);
65 | h = hebonMap.get(c);
66 | }
67 | return new Hebon(c, h);
68 | }
69 |
70 | protected static class Hebon {
71 | public String c;
72 | public String h;
73 | public Hebon(String c, String h) {
74 | this.c = c;
75 | this.h = h;
76 | }
77 | }
78 |
79 | /**
80 | * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。
81 | */
82 | public static String toHebon(String s) {
83 |
84 | StringBuilder hebon = new StringBuilder();
85 | String lastHebon = "";
86 | String lastChar = "";
87 | int i = 0;
88 |
89 | while (i < s.length() ) {
90 |
91 | Hebon hr = getHebon(s, i);
92 |
93 | if (hr.c.equals("っ") ) {
94 |
95 | // 'っち'
96 | Hebon nextHr = getHebon(s, i + 1);
97 | if (nextHr.h != null) {
98 | if (nextHr.h.indexOf("CH") == 0) {
99 | hr.h = "T";
100 | } else {
101 | hr.h = nextHr.h.substring(0, 1);
102 | }
103 | }
104 |
105 | } else if (hr.c.equals("ん") ) {
106 |
107 | // B,M,P の前の 'ん' は 'M' とする。
108 | Hebon nextHr = getHebon(s, i + 1);
109 | if (nextHr.h != null && "BMP".indexOf(nextHr.h.charAt(0) ) != -1) {
110 | hr.h = "M";
111 | } else {
112 | hr.h = "N";
113 | }
114 |
115 | } else if (hr.c.equals("ー") ) {
116 |
117 | // 長音は無視
118 | hr.h = "";
119 | }
120 |
121 | if (hr.h != null) {
122 |
123 | // 変換できる文字の場合
124 | if (lastHebon != null) {
125 |
126 | // 連続する母音の除去
127 | String htest = lastHebon + hr.h;
128 | if (htest.length() > 2) {
129 | htest = htest.substring(htest.length() - 2);
130 | }
131 | Boolean b = aaSet.get(htest);
132 | if (b != null && b.booleanValue() ) {
133 | hr.h = "";
134 | }
135 | }
136 |
137 | hebon.append(hr.h);
138 |
139 | } else {
140 |
141 | // 変換できない文字の場合
142 | hebon.append(hr.c);
143 | }
144 |
145 | lastHebon = hr.h;
146 | lastChar = hr.c;
147 | i += hr.c.length();
148 | }
149 |
150 | return hebon.toString();
151 | }
152 |
153 | private static final char minHira = 'ぁ';
154 | private static final char maxHira = 'ゖ';
155 | private static final char minKata= 'ァ';
156 | private static final char maxKata = 'ヶ';
157 |
158 | /**
159 | * 全角ひらがなを全角カタカナに変換します。
160 | */
161 | public static String toKatakana(String s) {
162 | StringBuilder res = new StringBuilder();
163 | for (int i = 0; i < s.length(); i += 1) {
164 | char c = s.charAt(i);
165 | res.append( (minHira <= c && c <= maxHira)?
166 | (char)(c - minHira + minKata) : s.charAt(i) );
167 | }
168 | return res.toString();
169 | }
170 |
171 | /**
172 | * 全角カタカナを全角ひらがなに変換します。
173 | */
174 | public static String toHiragana(String s) {
175 | StringBuilder res = new StringBuilder();
176 | for (int i = 0; i < s.length(); i += 1) {
177 | char c = s.charAt(i);
178 | res.append( (minKata <= c && c <= maxKata)?
179 | (char)(c - minKata + minHira) : s.charAt(i) );
180 | }
181 | return res.toString();
182 | }
183 |
184 | //---------------------------------------------------------
185 | // 全角-半角 マッピング (ASCII)
186 | //
187 |
188 | private static final ConversionMap asciiMap;
189 |
190 | //---------------------------------------------------------
191 | // 全角-半角 マッピング (カタカナ)
192 | //
193 |
194 | private static final ConversionMap kanaMap;
195 |
196 | static {
197 |
198 | String[] asciiData = {
199 |
200 | "\u0020", "\u3000",
201 | "!", "!",
202 |
203 | // 2重引用符
204 | //"\"", """,
205 | "\"", "”", // 一対多の変換の逆変換は先優先
206 | "\"", "“",
207 |
208 | "#", "#",
209 | "$", "$",
210 | "%", "%",
211 | "&", "&",
212 | "\'", "’",
213 | "(", "(",
214 | ")", ")",
215 | "*", "*",
216 | "+", "+",
217 | ",", ",",
218 | "-", "-",
219 | ".", ".",
220 | "/", "/",
221 | "0", "0",
222 | "1", "1",
223 | "2", "2",
224 | "3", "3",
225 | "4", "4",
226 | "5", "5",
227 | "6", "6",
228 | "7", "7",
229 | "8", "8",
230 | "9", "9",
231 | ":", ":",
232 | ";", ";",
233 | "<", "<",
234 | "=", "=",
235 | ">", ">",
236 | "?", "?",
237 | "@", "@",
238 | "A", "A",
239 | "B", "B",
240 | "C", "C",
241 | "D", "D",
242 | "E", "E",
243 | "F", "F",
244 | "G", "G",
245 | "H", "H",
246 | "I", "I",
247 | "J", "J",
248 | "K", "K",
249 | "L", "L",
250 | "M", "M",
251 | "N", "N",
252 | "O", "O",
253 | "P", "P",
254 | "Q", "Q",
255 | "R", "R",
256 | "S", "S",
257 | "T", "T",
258 | "U", "U",
259 | "V", "V",
260 | "W", "W",
261 | "X", "X",
262 | "Y", "Y",
263 | "Z", "Z",
264 | "[", "[",
265 |
266 | // 円記号
267 | //"\\", "\",
268 | "\\", "¥",
269 |
270 | "]", "]",
271 | "^", "^",
272 | "_", "_",
273 | "`", "‘",
274 | "a", "a",
275 | "b", "b",
276 | "c", "c",
277 | "d", "d",
278 | "e", "e",
279 | "f", "f",
280 | "g", "g",
281 | "h", "h",
282 | "i", "i",
283 | "j", "j",
284 | "k", "k",
285 | "l", "l",
286 | "m", "m",
287 | "n", "n",
288 | "o", "o",
289 | "p", "p",
290 | "q", "q",
291 | "r", "r",
292 | "s", "s",
293 | "t", "t",
294 | "u", "u",
295 | "v", "v",
296 | "w", "w",
297 | "x", "x",
298 | "y", "y",
299 | "z", "z",
300 | "{", "{",
301 | "|", "|",
302 | "}", "}",
303 | "~", "~"
304 | };
305 |
306 | String[] kanaData = {
307 | "。", "。",
308 | "「", "「",
309 | "」", "」",
310 | "、", "、",
311 | "・", "・",
312 | "ヲ", "ヲ",
313 |
314 | "ァ", "ァ",
315 | "ィ", "ィ",
316 | "ゥ", "ゥ",
317 | "ェ", "ェ",
318 | "ォ", "ォ",
319 |
320 | "ャ", "ャ",
321 | "ュ", "ュ",
322 | "ョ", "ョ",
323 |
324 | "ッ", "ッ",
325 |
326 | "ー", "ー",
327 |
328 | "ア", "ア",
329 | "イ", "イ",
330 | "ウ", "ウ",
331 | "エ", "エ",
332 | "オ", "オ",
333 |
334 | "カ", "カ",
335 | "キ", "キ",
336 | "ク", "ク",
337 | "ケ", "ケ",
338 | "コ", "コ",
339 |
340 | "ガ", "ガ",
341 | "ギ", "ギ",
342 | "グ", "グ",
343 | "ゲ", "ゲ",
344 | "ゴ", "ゴ",
345 |
346 | "サ", "サ",
347 | "シ", "シ",
348 | "ス", "ス",
349 | "セ", "セ",
350 | "ソ", "ソ",
351 |
352 | "ザ", "ザ",
353 | "ジ", "ジ",
354 | "ズ", "ズ",
355 | "ゼ", "ゼ",
356 | "ゾ", "ゾ",
357 |
358 | "タ", "タ",
359 | "チ", "チ",
360 | "ツ", "ツ",
361 | "テ", "テ",
362 | "ト", "ト",
363 |
364 | "ダ", "ダ",
365 | "ヂ", "ヂ",
366 | "ヅ", "ヅ",
367 | "デ", "デ",
368 | "ド", "ド",
369 |
370 | "ナ", "ナ",
371 | "ニ", "ニ",
372 | "ヌ", "ヌ",
373 | "ネ", "ネ",
374 | "ノ", "ノ",
375 |
376 | "ハ", "ハ",
377 | "ヒ", "ヒ",
378 | "フ", "フ",
379 | "ヘ", "ヘ",
380 | "ホ", "ホ",
381 |
382 | "バ", "バ",
383 | "ビ", "ビ",
384 | "ブ", "ブ",
385 | "ベ", "ベ",
386 | "ボ", "ボ",
387 |
388 | "パ", "パ",
389 | "ピ", "ピ",
390 | "プ", "プ",
391 | "ペ", "ペ",
392 | "ポ", "ポ",
393 |
394 | "マ", "マ",
395 | "ミ", "ミ",
396 | "ム", "ム",
397 | "メ", "メ",
398 | "モ", "モ",
399 |
400 | "ヤ", "ヤ",
401 | "ユ", "ユ",
402 | "ヨ", "ヨ",
403 |
404 | "ラ", "ラ",
405 | "リ", "リ",
406 | "ル", "ル",
407 | "レ", "レ",
408 | "ロ", "ロ",
409 |
410 | "ワ", "ワ",
411 | "ン", "ン",
412 |
413 | "ヴ", "ヴ",
414 |
415 | "゛", "゙",
416 | "゜", "゚",
417 |
418 | "ヰ", "イ",
419 | "ヱ", "エ",
420 | "ヮ", "ワ",
421 | "ヵ", "カ",
422 | "ヶ", "ケ"
423 | };
424 |
425 | asciiMap = new ConversionMap(asciiData);
426 | kanaMap = new ConversionMap(kanaData);
427 | }
428 |
429 | /**
430 | * 全角英数記号を半角に変換します。
431 | */
432 | public static String toHanAscii(String s) {
433 | return asciiMap.convert(s, true);
434 | }
435 |
436 | /**
437 | * 半角英数記号を全角に変換します。
438 | */
439 | public static String toZenAscii(String s) {
440 | return asciiMap.convert(s, false);
441 | }
442 |
443 | /**
444 | * 全角カタカナを半角に変換します。
445 | */
446 | public static String toHanKana(String s) {
447 | return kanaMap.convert(s, false);
448 | }
449 |
450 | /**
451 | * 半角カタカナを全角に変換します。
452 | */
453 | public static String toZenKana(String s) {
454 | return kanaMap.convert(s, true);
455 | }
456 |
457 | /**
458 | * 全角英数記号、カタカナを半角に変換します。
459 | * (toHanAscii, toHanKana の組み合わせ)
460 | */
461 | public static String toHan(String s) {
462 | return toHanAscii(toHanKana(s) );
463 | }
464 |
465 | /**
466 | * 半角英数記号、カタカナを全角に変換します。
467 | * (toZenAscii, toZenKana の組み合わせ)
468 | */
469 | public static String toZen(String s) {
470 | return toZenAscii(toZenKana(s) );
471 | }
472 |
473 | /**
474 | * 全角英数記号を半角に、半角カタカナを全角に変換します。
475 | * (toHanAscii, toZenKana の組み合わせ)
476 | */
477 | public static String normalize(String s) {
478 | return toHanAscii(toZenKana(s) );
479 | }
480 |
481 | protected static class ConversionMap {
482 |
483 | private Map map1 = new HashMap();
484 | private Map map2 = new HashMap();
485 |
486 | public ConversionMap(String[] data) {
487 | if (data.length % 2 != 0) {
488 | throw new IllegalArgumentException("bad data length:" + data.length);
489 | }
490 | int len = data.length / 2;
491 | for (int i = 0; i < len; i += 1) {
492 | add(data[i * 2], data[i * 2 + 1]);
493 | }
494 | }
495 |
496 | protected void add(String s1, String s2) {
497 | if (!map1.containsKey(s1) ) {
498 | map1.put(s1, s2);
499 | }
500 | if (!map2.containsKey(s2) ) {
501 | map2.put(s2, s1);
502 | }
503 | }
504 |
505 | public String convert(String s, boolean reverse) {
506 |
507 | Map map = !reverse? map1 : map2;
508 |
509 | StringBuilder converted = new StringBuilder();
510 |
511 | for (int i = 0; i < s.length(); i += 1) {
512 |
513 | if (i + 1 < s.length() ) {
514 | String c = map.get(s.substring(i, i + 2) );
515 | if (c != null) {
516 | converted.append(c);
517 | i += 1;
518 | continue;
519 | }
520 | }
521 |
522 | String c = map.get(s.substring(i, i + 1) );
523 | if (c != null) {
524 | converted.append(c);
525 | continue;
526 | }
527 |
528 | // 変換テーブルに該当無し
529 | converted.append(s.substring(i, i + 1) );
530 | }
531 |
532 | return converted.toString();
533 | }
534 | }
535 | }
536 |
--------------------------------------------------------------------------------
/src/main/ts/jaconv.ts:
--------------------------------------------------------------------------------
1 | //---------------------------------------------------------------------
2 | // 日本語文字変換ライブラリ (javascript)
3 | //
4 | // Copyright (c) 2025 Kazuhiko Arase
5 | //
6 | // URL: https://github.com/kazuhikoarase/jaconv
7 | //
8 | // Licensed under the MIT license:
9 | // http://www.opensource.org/licenses/mit-license.php
10 | //
11 | //---------------------------------------------------------------------
12 |
13 |
14 | import * as hebon from './jaconv/hebon';
15 | import * as katahira from './jaconv/katahira';
16 | import * as zenhan from './jaconv/zenhan';
17 |
18 | export default {
19 |
20 | toHebon: hebon.toHebon,
21 |
22 | toHiragana: katahira.toHiragana,
23 | toKatakana: katahira.toKatakana,
24 |
25 | normalize: zenhan.normalize,
26 | toHan: zenhan.toHan,
27 | toHanAscii: zenhan.toHanAscii,
28 | toHanKana: zenhan.toHanKana,
29 | toZen: zenhan.toZen,
30 | toZenAscii: zenhan.toZenAscii,
31 | toZenKana: zenhan.toZenKana,
32 | };
33 |
--------------------------------------------------------------------------------
/src/main/ts/jaconv/hebon.ts:
--------------------------------------------------------------------------------
1 | //---------------------------------------------------------------------
2 | // ヘボン式ローマ字変換
3 | //
4 | // Copyright (c) 2011 Kazuhiko Arase
5 | //
6 | // URL: https://github.com/kazuhikoarase/jaconv
7 | //
8 | // Licensed under the MIT license:
9 | // http://www.opensource.org/licenses/mit-license.php
10 | //
11 | //---------------------------------------------------------------------
12 |
13 | // 'ん' は、別途ハンドリングするのでデータに含めない
14 | const hebonMap : { [ hiragana : string ] : string } = {
15 | 'あ':'A','い':'I','う':'U','え':'E','お':'O',
16 | 'か':'KA','き':'KI','く':'KU','け':'KE','こ':'KO',
17 | 'さ':'SA','し':'SHI','す':'SU','せ':'SE','そ':'SO',
18 | 'た':'TA','ち':'CHI','つ':'TSU','て':'TE','と':'TO',
19 | 'な':'NA','に':'NI','ぬ':'NU','ね':'NE','の':'NO',
20 | 'は':'HA','ひ':'HI','ふ':'FU','へ':'HE','ほ':'HO',
21 | 'ま':'MA','み':'MI','む':'MU','め':'ME','も':'MO',
22 | 'や':'YA','ゆ':'YU','よ':'YO',
23 | 'ら':'RA','り':'RI','る':'RU','れ':'RE','ろ':'RO',
24 | 'わ':'WA','ゐ':'I','ゑ':'E','を':'O',
25 | 'ぁ':'A','ぃ':'I','ぅ':'U','ぇ':'E','ぉ':'O',
26 | 'が':'GA','ぎ':'GI','ぐ':'GU','げ':'GE','ご':'GO',
27 | 'ざ':'ZA','じ':'JI','ず':'ZU','ぜ':'ZE','ぞ':'ZO',
28 | 'だ':'DA','ぢ':'JI','づ':'ZU','で':'DE','ど':'DO',
29 | 'ば':'BA','び':'BI','ぶ':'BU','べ':'BE','ぼ':'BO',
30 | 'ぱ':'PA','ぴ':'PI','ぷ':'PU','ぺ':'PE','ぽ':'PO',
31 | 'きゃ':'KYA','きゅ':'KYU','きょ':'KYO',
32 | 'しゃ':'SHA','しゅ':'SHU','しょ':'SHO',
33 | 'ちゃ':'CHA','ちゅ':'CHU','ちょ':'CHO','ちぇ':'CHE',
34 | 'にゃ':'NYA','にゅ':'NYU','にょ':'NYO',
35 | 'ひゃ':'HYA','ひゅ':'HYU','ひょ':'HYO',
36 | 'みゃ':'MYA','みゅ':'MYU','みょ':'MYO',
37 | 'りゃ':'RYA','りゅ':'RYU','りょ':'RYO',
38 | 'ぎゃ':'GYA','ぎゅ':'GYU','ぎょ':'GYO',
39 | 'じゃ':'JA','じゅ':'JU','じょ':'JO',
40 | 'びゃ':'BYA','びゅ':'BYU','びょ':'BYO',
41 | 'ぴゃ':'PYA','ぴゅ':'PYU','ぴょ':'PYO'
42 | };
43 |
44 | const aaSet : { [ aa : string ] : boolean } = {
45 | 'AA': true, 'EE': true, 'II': false, // I は連続しても省略しない
46 | 'OO': true, 'OU': true, 'UU': true
47 | };
48 |
49 | const getHebon = function(s : string, index : number) {
50 | let h : any = null;
51 | let c : any = null;
52 | if (index + 1 < s.length) {
53 | c = s.substring(index, index + 2);
54 | h = hebonMap[c];
55 | }
56 | if (!h && index < s.length) {
57 | c = s.substring(index, index + 1);
58 | h = hebonMap[c];
59 | }
60 | return {c: c, h: h || null};
61 | };
62 |
63 | /**
64 | * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。
65 | */
66 | export function toHebon(s : string) {
67 |
68 | let hebon = '';
69 | let lastHebon = '';
70 | let lastChar :any = '';
71 | let i = 0;
72 |
73 | while (i < s.length) {
74 |
75 | const hr = getHebon(s, i);
76 |
77 | if (hr.c == 'っ') {
78 |
79 | // 'っち'
80 | const nextHr = getHebon(s, i + 1);
81 | if (nextHr.h != null) {
82 | if (nextHr.h.indexOf('CH') == 0) {
83 | hr.h = 'T';
84 | } else {
85 | hr.h = nextHr.h.substring(0, 1);
86 | }
87 | }
88 |
89 | } else if (hr.c == 'ん') {
90 |
91 | // B,M,P の前の 'ん' は 'M' とする。
92 | const nextHr = getHebon(s, i + 1);
93 | if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0) ) != -1) {
94 | hr.h = 'M';
95 | } else {
96 | hr.h = 'N';
97 | }
98 |
99 | } else if (hr.c == 'ー') {
100 |
101 | // 長音は無視
102 | hr.h = '';
103 | }
104 |
105 | if (hr.h != null) {
106 |
107 | // 変換できる文字の場合
108 | if (lastHebon != null) {
109 |
110 | // 連続する母音の除去
111 | let htest = lastHebon + hr.h;
112 | if (htest.length > 2) {
113 | htest = htest.substring(htest.length - 2);
114 | }
115 | if (aaSet[htest]) {
116 | hr.h = '';
117 | }
118 | }
119 |
120 | hebon += hr.h;
121 |
122 | } else {
123 |
124 | // 変換できない文字の場合
125 | hebon += hr.c;
126 | }
127 |
128 | lastHebon = hr.h;
129 | lastChar = hr.c;
130 | i += hr.c.length;
131 | }
132 |
133 | return hebon;
134 | }
135 |
--------------------------------------------------------------------------------
/src/main/ts/jaconv/katahira.ts:
--------------------------------------------------------------------------------
1 | //---------------------------------------------------------------------
2 | // カタカナ・ひらがな変換
3 | //
4 | // 2025/6/23 Kazuhiko Arase
5 | //
6 |
7 | const minHira = 'ぁ'.charCodeAt(0);
8 | const maxHira = 'ゖ'.charCodeAt(0);
9 | const minKata= 'ァ'.charCodeAt(0);
10 | const maxKata = 'ヶ'.charCodeAt(0);
11 |
12 | /**
13 | * 全角ひらがなを全角カタカナに変換します。
14 | */
15 | export function toKatakana(s : string) {
16 | let res = '';
17 | for (let i = 0; i < s.length; i += 1) {
18 | const cd = s.charCodeAt(i);
19 | res += (minHira <= cd && cd <= maxHira)?
20 | String.fromCharCode(cd - minHira + minKata) : s.charAt(i);
21 | }
22 | return res;
23 | }
24 |
25 | /**
26 | * 全角カタカナを全角ひらがなに変換します。
27 | */
28 | export function toHiragana(s : string) {
29 | let res = '';
30 | for (let i = 0; i < s.length; i += 1) {
31 | const cd = s.charCodeAt(i);
32 | res += (minKata <= cd && cd <= maxKata)?
33 | String.fromCharCode(cd - minKata + minHira) : s.charAt(i);
34 | }
35 | return res;
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/ts/jaconv/zenhan.ts:
--------------------------------------------------------------------------------
1 | //---------------------------------------------------------------------
2 | // 全角・半角変換
3 | //
4 | // 2005/2/26 Kazuhiko Arase
5 | //
6 |
7 | const asciiData = [
8 |
9 | '\u0020', '\u3000',
10 | '!', '!',
11 |
12 | // 2重引用符
13 | //'\"', '"',
14 | '\"', '”', // 一対多の変換の逆変換は先優先
15 | '\"', '“',
16 |
17 | '#', '#',
18 | '$', '$',
19 | '%', '%',
20 | '&', '&',
21 | '\'', '’',
22 | '(', '(',
23 | ')', ')',
24 | '*', '*',
25 | '+', '+',
26 | ',', ',',
27 | '-', '-',
28 | '.', '.',
29 | '/', '/',
30 | '0', '0',
31 | '1', '1',
32 | '2', '2',
33 | '3', '3',
34 | '4', '4',
35 | '5', '5',
36 | '6', '6',
37 | '7', '7',
38 | '8', '8',
39 | '9', '9',
40 | ':', ':',
41 | ';', ';',
42 | '<', '<',
43 | '=', '=',
44 | '>', '>',
45 | '?', '?',
46 | '@', '@',
47 | 'A', 'A',
48 | 'B', 'B',
49 | 'C', 'C',
50 | 'D', 'D',
51 | 'E', 'E',
52 | 'F', 'F',
53 | 'G', 'G',
54 | 'H', 'H',
55 | 'I', 'I',
56 | 'J', 'J',
57 | 'K', 'K',
58 | 'L', 'L',
59 | 'M', 'M',
60 | 'N', 'N',
61 | 'O', 'O',
62 | 'P', 'P',
63 | 'Q', 'Q',
64 | 'R', 'R',
65 | 'S', 'S',
66 | 'T', 'T',
67 | 'U', 'U',
68 | 'V', 'V',
69 | 'W', 'W',
70 | 'X', 'X',
71 | 'Y', 'Y',
72 | 'Z', 'Z',
73 | '[', '[',
74 |
75 | // 円記号
76 | //'\\', '\',
77 | '\\', '¥',
78 |
79 | ']', ']',
80 | '^', '^',
81 | '_', '_',
82 | '`', '‘',
83 | 'a', 'a',
84 | 'b', 'b',
85 | 'c', 'c',
86 | 'd', 'd',
87 | 'e', 'e',
88 | 'f', 'f',
89 | 'g', 'g',
90 | 'h', 'h',
91 | 'i', 'i',
92 | 'j', 'j',
93 | 'k', 'k',
94 | 'l', 'l',
95 | 'm', 'm',
96 | 'n', 'n',
97 | 'o', 'o',
98 | 'p', 'p',
99 | 'q', 'q',
100 | 'r', 'r',
101 | 's', 's',
102 | 't', 't',
103 | 'u', 'u',
104 | 'v', 'v',
105 | 'w', 'w',
106 | 'x', 'x',
107 | 'y', 'y',
108 | 'z', 'z',
109 | '{', '{',
110 | '|', '|',
111 | '}', '}',
112 | '~', '~'
113 | ];
114 |
115 | const kanaData = [
116 | '。', '。',
117 | '「', '「',
118 | '」', '」',
119 | '、', '、',
120 | '・', '・',
121 | 'ヲ', 'ヲ',
122 |
123 | 'ァ', 'ァ',
124 | 'ィ', 'ィ',
125 | 'ゥ', 'ゥ',
126 | 'ェ', 'ェ',
127 | 'ォ', 'ォ',
128 |
129 | 'ャ', 'ャ',
130 | 'ュ', 'ュ',
131 | 'ョ', 'ョ',
132 |
133 | 'ッ', 'ッ',
134 |
135 | 'ー', 'ー',
136 |
137 | 'ア', 'ア',
138 | 'イ', 'イ',
139 | 'ウ', 'ウ',
140 | 'エ', 'エ',
141 | 'オ', 'オ',
142 |
143 | 'カ', 'カ',
144 | 'キ', 'キ',
145 | 'ク', 'ク',
146 | 'ケ', 'ケ',
147 | 'コ', 'コ',
148 |
149 | 'ガ', 'ガ',
150 | 'ギ', 'ギ',
151 | 'グ', 'グ',
152 | 'ゲ', 'ゲ',
153 | 'ゴ', 'ゴ',
154 |
155 | 'サ', 'サ',
156 | 'シ', 'シ',
157 | 'ス', 'ス',
158 | 'セ', 'セ',
159 | 'ソ', 'ソ',
160 |
161 | 'ザ', 'ザ',
162 | 'ジ', 'ジ',
163 | 'ズ', 'ズ',
164 | 'ゼ', 'ゼ',
165 | 'ゾ', 'ゾ',
166 |
167 | 'タ', 'タ',
168 | 'チ', 'チ',
169 | 'ツ', 'ツ',
170 | 'テ', 'テ',
171 | 'ト', 'ト',
172 |
173 | 'ダ', 'ダ',
174 | 'ヂ', 'ヂ',
175 | 'ヅ', 'ヅ',
176 | 'デ', 'デ',
177 | 'ド', 'ド',
178 |
179 | 'ナ', 'ナ',
180 | 'ニ', 'ニ',
181 | 'ヌ', 'ヌ',
182 | 'ネ', 'ネ',
183 | 'ノ', 'ノ',
184 |
185 | 'ハ', 'ハ',
186 | 'ヒ', 'ヒ',
187 | 'フ', 'フ',
188 | 'ヘ', 'ヘ',
189 | 'ホ', 'ホ',
190 |
191 | 'バ', 'バ',
192 | 'ビ', 'ビ',
193 | 'ブ', 'ブ',
194 | 'ベ', 'ベ',
195 | 'ボ', 'ボ',
196 |
197 | 'パ', 'パ',
198 | 'ピ', 'ピ',
199 | 'プ', 'プ',
200 | 'ペ', 'ペ',
201 | 'ポ', 'ポ',
202 |
203 | 'マ', 'マ',
204 | 'ミ', 'ミ',
205 | 'ム', 'ム',
206 | 'メ', 'メ',
207 | 'モ', 'モ',
208 |
209 | 'ヤ', 'ヤ',
210 | 'ユ', 'ユ',
211 | 'ヨ', 'ヨ',
212 |
213 | 'ラ', 'ラ',
214 | 'リ', 'リ',
215 | 'ル', 'ル',
216 | 'レ', 'レ',
217 | 'ロ', 'ロ',
218 |
219 | 'ワ', 'ワ',
220 | 'ン', 'ン',
221 |
222 | 'ヴ', 'ヴ',
223 |
224 | '゛', '゙',
225 | '゜', '゚',
226 |
227 | 'ヰ', 'イ',
228 | 'ヱ', 'エ',
229 | 'ヮ', 'ワ',
230 | 'ヵ', 'カ',
231 | 'ヶ', 'ケ'
232 | ];
233 |
234 | declare type StringMap = { [k : string] : string };
235 |
236 | const createConversionMap = function(data : string[]) {
237 |
238 | const map1 : StringMap = {};
239 | const map2 : StringMap = {};
240 |
241 | const add = function(s1 : string, s2 : string) {
242 | if (!map1[s1]) {
243 | map1[s1] = s2;
244 | }
245 | if (!map2[s2]) {
246 | map2[s2] = s1;
247 | }
248 | };
249 |
250 | const convert = function(s : string, reverse : boolean) {
251 |
252 | const map = !reverse? map1 : map2;
253 |
254 | let converted = '';
255 |
256 | for (let i = 0; i < s.length; i += 1) {
257 |
258 | if (i + 1 < s.length) {
259 | const c = map[s.substring(i, i + 2)];
260 | if (c) {
261 | converted += c;
262 | i += 1;
263 | continue;
264 | }
265 | }
266 |
267 | const c = map[s.substring(i, i + 1)];
268 | if (c) {
269 | converted += c;
270 | continue;
271 | }
272 |
273 | // 変換テーブルに該当無し
274 | converted += s.substring(i, i + 1);
275 | }
276 |
277 | return converted;
278 | }
279 |
280 | if (data.length % 2 != 0) {
281 | throw 'bad data length:' + data.length;
282 | }
283 | const len = data.length / 2;
284 | for (let i = 0; i < len; i += 1) {
285 | add(data[i * 2], data[i * 2 + 1]);
286 | }
287 |
288 | return { convert : convert };
289 | };
290 |
291 | //---------------------------------------------------------
292 | // 全角-半角 マッピング (ASCII)
293 | //
294 |
295 | const asciiMap = createConversionMap(asciiData);
296 |
297 | //---------------------------------------------------------
298 | // 全角-半角 マッピング (カタカナ)
299 | //
300 |
301 | const kanaMap = createConversionMap(kanaData);
302 |
303 | // exports
304 |
305 | /**
306 | * 全角英数記号を半角に変換します。
307 | */
308 | export function toHanAscii(s : string) {
309 | return asciiMap.convert(s, true);
310 | }
311 |
312 | /**
313 | * 半角英数記号を全角に変換します。
314 | */
315 | export function toZenAscii(s : string) {
316 | return asciiMap.convert(s, false);
317 | }
318 |
319 | /**
320 | * 全角カタカナを半角に変換します。
321 | */
322 | export function toHanKana(s : string) {
323 | return kanaMap.convert(s, false);
324 | }
325 |
326 | /**
327 | * 半角カタカナを全角に変換します。
328 | */
329 | export function toZenKana(s : string) {
330 | return kanaMap.convert(s, true);
331 | }
332 |
333 | /**
334 | * 全角英数記号、カタカナを半角に変換します。
335 | * (toHanAscii, toHanKana の組み合わせ)
336 | */
337 | export function toHan(s : string) {
338 | return toHanAscii(toHanKana(s) );
339 | }
340 |
341 | /**
342 | * 半角英数記号、カタカナを全角に変換します。
343 | * (toZenAscii, toZenKana の組み合わせ)
344 | */
345 | export function toZen(s : string) {
346 | return toZenAscii(toZenKana(s) );
347 | }
348 |
349 | /**
350 | * 全角英数記号を半角に、半角カタカナを全角に変換します。
351 | * (toHanAscii, toZenKana の組み合わせ)
352 | */
353 | export function normalize(s : string) {
354 | return toHanAscii(toZenKana(s) );
355 | }
356 |
--------------------------------------------------------------------------------
/src/test/java/com/d_project/jaconv/JaConvTest.java:
--------------------------------------------------------------------------------
1 | package com.d_project.jaconv;
2 |
3 | import org.junit.Assert;
4 | import org.junit.Test;
5 |
6 | public class JaConvTest {
7 |
8 | @Test
9 | public void toHebon() {
10 | Assert.assertEquals("HEBONSHIKIROMAJI", JaConv.toHebon("へぼんしきろーまじ") );
11 | Assert.assertEquals("NIHONGO", JaConv.toHebon("にほんご") );
12 | Assert.assertEquals("NIHOMBASHI", JaConv.toHebon("にほんばし") );
13 | Assert.assertEquals("IIDABASHI", JaConv.toHebon("いいだばし") );
14 | Assert.assertEquals("OITA", JaConv.toHebon("おおいた") );
15 | Assert.assertEquals("TOKYO", JaConv.toHebon("とうきょう") );
16 | Assert.assertEquals("ROPPONGI", JaConv.toHebon("ろっぽんぎ") );
17 | Assert.assertEquals("GUMMA", JaConv.toHebon("ぐんま") );
18 | Assert.assertEquals("HAMPUKU", JaConv.toHebon("はんぷく") );
19 | Assert.assertEquals("カタカナ", JaConv.toHebon("カタカナ") );
20 | Assert.assertEquals("KITCHIN", JaConv.toHebon("きっちん") );
21 | }
22 |
23 | @Test
24 | public void toKatakana() {
25 | Assert.assertEquals("アアアAA11", JaConv.toKatakana("あアアAA11") );
26 | }
27 |
28 | @Test
29 | public void toHiragana() {
30 | Assert.assertEquals("ああアAA11", JaConv.toHiragana("あアアAA11") );
31 | }
32 |
33 | @Test
34 | public void toHanAscii() {
35 | Assert.assertEquals("あアアAA11", JaConv.toHanAscii("あアアAA11") );
36 | Assert.assertEquals("\"\"", JaConv.toHanAscii("“”") );
37 | Assert.assertEquals("'", JaConv.toHanAscii("’") );
38 | Assert.assertEquals("`", JaConv.toHanAscii("‘") );
39 | Assert.assertEquals("\\", JaConv.toHanAscii("¥") );
40 | }
41 |
42 | @Test
43 | public void toZenAscii() {
44 | Assert.assertEquals("あアアAA11", JaConv.toZenAscii("あアアAA11") );
45 | Assert.assertEquals("”", JaConv.toZenAscii("\"") );
46 | Assert.assertEquals("’", JaConv.toZenAscii("'") );
47 | Assert.assertEquals("‘", JaConv.toZenAscii("`") );
48 | Assert.assertEquals("¥", JaConv.toZenAscii("\\") );
49 | }
50 |
51 | @Test
52 | public void toHanKana() {
53 | Assert.assertEquals("あアアAA11", JaConv.toHanKana("あアアAA11") );
54 | Assert.assertEquals("ギャ", JaConv.toHanKana("ギャ") );
55 | Assert.assertEquals("ギャ", JaConv.toHanKana("キ゛ャ") );
56 | Assert.assertEquals("ピン", JaConv.toHanKana("ヒ゜ン") );
57 | }
58 |
59 | @Test
60 | public void toZenKana() {
61 | Assert.assertEquals("あアアAA11", JaConv.toZenKana("あアアAA11") );
62 | Assert.assertEquals("ギャ", JaConv.toZenKana("ギャ") );
63 | Assert.assertEquals("ピン", JaConv.toZenKana("ピン") );
64 | }
65 |
66 | @Test
67 | public void toHan() {
68 | Assert.assertEquals("あアアAA11", JaConv.toHan("あアアAA11") );
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/test/ts/jaconv/hebon.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect } from "@open-wc/testing";
2 | import jaconv from '../../../main/ts/jaconv.ts';
3 |
4 | describe('hebon', function() {
5 | it('toHebon', function() {
6 | expect(jaconv.toHebon('へぼんしきろーまじ') ).to.equal('HEBONSHIKIROMAJI');
7 | expect(jaconv.toHebon('にほんご') ).to.equal('NIHONGO');
8 | expect(jaconv.toHebon('にほんばし') ).to.equal('NIHOMBASHI');
9 | expect(jaconv.toHebon('いいだばし') ).to.equal('IIDABASHI');
10 | expect(jaconv.toHebon('おおいた') ).to.equal('OITA');
11 | expect(jaconv.toHebon('とうきょう') ).to.equal('TOKYO');
12 | expect(jaconv.toHebon('ろっぽんぎ') ).to.equal('ROPPONGI');
13 | expect(jaconv.toHebon('ぐんま') ).to.equal('GUMMA');
14 | expect(jaconv.toHebon('はんぷく') ).to.equal('HAMPUKU');
15 | expect(jaconv.toHebon('カタカナ') ).to.equal('カタカナ');
16 | expect(jaconv.toHebon('きっちん') ).to.equal('KITCHIN');
17 | });
18 | });
19 |
--------------------------------------------------------------------------------
/src/test/ts/jaconv/katahira.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect } from "@open-wc/testing";
2 | import jaconv from '../../../main/ts/jaconv.ts';
3 |
4 | describe('katahira', function() {
5 | it('toKatakana', function() {
6 | expect(jaconv.toKatakana('あアアAA11') ).to.equal('アアアAA11');
7 | });
8 | it('toHiragana', function() {
9 | expect(jaconv.toHiragana('あアアAA11') ).to.equal('ああアAA11');
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/src/test/ts/jaconv/zenhan.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect } from "@open-wc/testing";
2 | import jaconv from '../../../main/ts/jaconv.ts';
3 |
4 | describe('zenhan', function() {
5 | it('toHanAscii', function() {
6 | expect(jaconv.toHanAscii('あアアAA11') ).to.equal('あアアAA11');
7 | expect(jaconv.toHanAscii('“”') ).to.equal('""');
8 | expect(jaconv.toHanAscii('’') ).to.equal("'");
9 | expect(jaconv.toHanAscii('‘') ).to.equal('`');
10 | expect(jaconv.toHanAscii('¥') ).to.equal('\\');
11 | });
12 | it('toZenAscii', function() {
13 | expect(jaconv.toZenAscii('あアアAA11') ).to.equal('あアアAA11');
14 | expect(jaconv.toZenAscii('"') ).to.equal('”');
15 | expect(jaconv.toZenAscii("'") ).to.equal("’");
16 | expect(jaconv.toZenAscii('`') ).to.equal("‘");
17 | expect(jaconv.toZenAscii('\\') ).to.equal("¥");
18 | });
19 | it('toHanKana', function() {
20 | expect(jaconv.toHanKana('あアアAA11') ).to.equal('あアアAA11');
21 | expect(jaconv.toHanKana('ギャ') ).to.equal('ギャ');
22 | expect(jaconv.toHanKana('キ゛ャ') ).to.equal('ギャ');
23 | expect(jaconv.toHanKana('ヒ゜ン') ).to.equal('ピン');
24 | });
25 | it('toZenKana', function() {
26 | expect(jaconv.toZenKana('あアアAA11') ).to.equal('あアアAA11');
27 | expect(jaconv.toZenKana('ギャ') ).to.equal('ギャ');
28 | expect(jaconv.toZenKana('ピン') ).to.equal('ピン');
29 | });
30 | it('toHan', function() {
31 | expect(jaconv.toHan('あアアAA11') ).to.equal('あアアAA11');
32 | });
33 | it('toZen', function() {
34 | expect(jaconv.toZen('あアアAA11') ).to.equal('あアアAA11');
35 | });
36 | it('normalize', function() {
37 | expect(jaconv.normalize('あアアAA11') ).to.equal('あアアAA11');
38 | });
39 | });
40 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "module": "ESNext",
6 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
7 | "skipLibCheck": true,
8 |
9 | /* Declaration and Map files */
10 | "declaration": true,
11 | "declarationMap": true,
12 |
13 | /* Bundler mode */
14 | "moduleResolution": "bundler",
15 | "allowImportingTsExtensions": true,
16 | "verbatimModuleSyntax": true,
17 | "moduleDetection": "force",
18 | "noEmit": true,
19 |
20 | /* Linting */
21 | "strict": true,
22 | "noUnusedLocals": true,
23 | "noUnusedParameters": true,
24 | "erasableSyntaxOnly": true,
25 | "noFallthroughCasesInSwitch": true,
26 | "noUncheckedSideEffectImports": true
27 | },
28 | "include": [ "src/main/ts" ]
29 | }
30 |
--------------------------------------------------------------------------------
/vite.config.mts:
--------------------------------------------------------------------------------
1 | import { dirname, resolve } from 'node:path';
2 | import { fileURLToPath } from 'node:url';
3 | import { defineConfig } from 'vite';
4 | import dts from 'vite-plugin-dts';
5 |
6 | const __dirname = dirname(fileURLToPath(import.meta.url))
7 |
8 | export default defineConfig({
9 | build: {
10 | outDir: 'dist',
11 | sourcemap: true,
12 | lib: {
13 | entry: resolve(__dirname, 'src/main/ts/jaconv.ts'),
14 | name: 'jaconv',
15 | fileName: 'jaconv',
16 | formats: ['cjs', 'es'],
17 | },
18 | },
19 | plugins: [
20 | dts({
21 | rollupTypes : true,
22 | })
23 | ]
24 | });
25 |
--------------------------------------------------------------------------------
/web-test-runner.config.mjs:
--------------------------------------------------------------------------------
1 | import { esbuildPlugin } from '@web/dev-server-esbuild';
2 |
3 | export default {
4 | files: [ '**/*.spec.ts', ],
5 | plugins: [ esbuildPlugin({ ts: true }) ],
6 | nodeResolve: true,
7 | coverage : true,
8 | };
9 |
--------------------------------------------------------------------------------