かな全角→半角

by s_yoshiki

HTML

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.js"></script>
<div class="ui container">
    <div class="ui equal width aligned padded grid fullheight">
        <div class="one column ui form">
            <div class="field">
                <label>input</label>
                <textarea id="src"></textarea>
                <label>output</label>
                <textarea id="dst"></textarea>
				<p>&nbsp;</p>
                <div class="ui form right aligned">
                    <button class="ui button primary big" id="run">run</button>
                </div>
				<p>&nbsp;</p>
				<select id="kana-type">
					<option value="all" selected>全て変換</option>
					<option value="hiragana">かなのみ変換</option>
					<option value="katakana">カナのみ変換</option>
				</select>
            </div>
        </div>
    </div>
</div>

JavaScript

const KANA = {
	"normal": {
		"src": {
			"hiragana":"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉヵヶっゃゅょゎ。、「」ー",
			"katakana":"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ。、「」ー",
		},
		"dst": "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョワ。、「」-",
		"suffix" : ""
	},
	"dakuon": {
		"src" : {
            "hiragana": "がぎぐげござじずぜぞだぢづでどばびぶべぼゔ",
			"katakana": "ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ",
		},
		"dst":"カキクケコサシスセソタチツテトハヒフヘホウ",
		"suffix" : "゙"
	},
	"handakuon": {
		"src": {
			"hiragana": "ぱぴぷぺぽ",
			"katakana": "パピプペポ",
		},
		"dst" : "ハヒフヘホ",
		"suffix" : "゚"
	}
};


document.getElementById("run").addEventListener("click", (e) => {
	var input = document.getElementById("src")
	var output = document.getElementById("dst")
	var type = document.getElementById("kana-type")
	
	output.value = ""
	
	var zenkaku = []
	var hankaku = []

	for (var key1 in KANA) {
		var src = KANA[key1].src
		var dst = KANA[key1].dst
		var suffix = ""

		if (KANA[key1].suffix) {
			suffix = KANA[key1].suffix
		}

		for (var key2 in src) {
			if (type.value === "all" || key2 === type.value) {
				var row = src[key2]
				for (var j = 0; j < row.length; j++) {
					zenkaku.push(row[j] + suffix)
					hankaku.push(dst[j] + suffix)
				}
			}
		}
	}

	input.value.split("").forEach((e) => {
		for (var i = 0; i < zenkaku.length; i++) {
			if (zenkaku[i] == e) {
				output.value += hankaku[i]
				return
			}
		}
		output.value += e
	})
})