Created
June 21, 2018 05:18
-
-
Save dicenull/2345ca91ca7f87e70763248a87e4c8bf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="ja"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |
<title>モールス信号変換</title> | |
<style> | |
/* CSSはココ */ | |
input { | |
width: 50px; | |
height: 20px; | |
} | |
input[type="text"] { | |
width: 300px; | |
height: 20px; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>モールス信号変換</h1> | |
<input type="checkbox" id="kana_enabled" size="50">和文モールス符号を使う<br> | |
和文モールスを使う場合、全角カナで入力してください<br> | |
<h3>文字 → モールス信号</h3> | |
文字を入力して変換ボタンを押してください: | |
<br> | |
<input type="text" id="string_input" value="SOS" size="50"> | |
<br> | |
<input type="button" value="変換" onclick="string_to_morse()"> | |
<br> ↓ </br> | |
<div id="morse_output">ここに出ます</div> | |
<h3>モールス信号 → 文字</h3> | |
モールス信号を入力して変換ボタンを押してください: | |
<br> | |
<input type="text" id="morse_input" value="・・・ ーーー ・・・" size="50"> | |
<br> | |
<input type="button" value="変換" onclick="morse_to_string()"> | |
<br> ↓ </br> | |
<div id="string_output">ここに出ます</div> | |
<script> | |
// JavaScript はココ | |
var CodeData = (function() { | |
// 文字からモールス符号のコードへの変換表 | |
var code_table = | |
[ | |
{ | |
// アルファベット | |
'A': '01', 'B': '1000', 'C': '1010', 'D': '100', 'E': '0', | |
'F': '0010', 'G': '110', 'H': '0000', 'I': '00', 'J': '0111', | |
'K': '101', 'L': '0100', 'M': '11', 'N': '10', 'O': '111', | |
'P': '0110', 'Q': '1101', 'R': '010', 'S': '000', 'T': '1', | |
'U': '001', 'V': '0001', 'W': '011', 'X': '1001', 'Y': '1011', | |
'Z': '1100' | |
, | |
// 記号 | |
'.': '010101', ',': '110011', '?': '001100', '!': '101011', | |
'-': '100001', '/': '10010', '@': '011010', '(': '10110', | |
')': '101101' | |
}, | |
{ | |
// カタカナ | |
'ア': '11011', 'イ': '01', 'ウ': '001', 'エ': '10111', 'オ': '01000', | |
'カ': '0100', 'キ': '10100', 'ク': '0001', 'ケ': '1011', 'コ': '1111', | |
'サ': '10101', 'シ': '11010', 'ス': '11101', 'セ': '01110', 'ソ': '1110', | |
'タ': '10', 'チ': '0010', 'ツ': '0110', 'テ': '01011', 'ト': '00100', | |
'ナ': '010', 'ニ': '1010', 'ヌ': '0000', 'ネ': '1101', 'ノ': '0011', | |
'ハ': '1000', 'ヒ': '11001', 'フ': '1100', 'ヘ': '0', 'ホ': '100', | |
'マ': '1001', 'ミ': '00101', 'ム': '1', 'メ': '10001', 'モ': '10010', | |
'ヤ': '011', 'ユ': '10011', 'ヨ': '11', | |
'ラ': '000', 'リ': '110', 'ル': '10110', 'レ': '111', 'ロ': '0101', | |
'ワ': '101', 'ヲ': '0111', 'ン': '01010', '゛': '00', '゜': '00110' | |
, | |
// 記号 | |
'ー': '01101', '、': '010101', '(': '101101', | |
')': '010010' | |
} | |
]; | |
return { | |
// 文字からコードを取得するテーブル | |
CodeTable: function (kana_enabled) { | |
return code_table[kana_enabled]; | |
}, | |
// コードから文字を取得するテーブル | |
CharacterTable: function (kana_enabled) { | |
// モールス符号のコードから文字への変換表 | |
var character_table = []; | |
for (var code_key in code_table[kana_enabled]) { | |
// code_tableのkeyとvalueを入れ替える | |
character_table[code_table[kana_enabled][code_key]] = code_key; | |
} | |
return character_table; | |
} | |
}; | |
})(); | |
// モールスを文字に変換 | |
function morse_to_string() { | |
var morseStr = convert_to_string(document.getElementById("morse_input").value) | |
document.querySelector('#string_output').innerHTML = morseStr | |
} | |
// 文字をモールスに変換 | |
function string_to_morse() { | |
var morseStr = convert_to_morse(document.getElementById("string_input").value) | |
document.querySelector('#morse_output').innerHTML = morseStr | |
} | |
function convert_to_string(morse) { | |
// 和文と英文どちらで変換するかを取得する | |
var kana_enabled = 0; | |
if (document.getElementById("kana_enabled").checked) { | |
kana_enabled = 1; | |
} | |
var output = ''; | |
var codes = to_code(morse); | |
var character_table = CodeData.CharacterTable(kana_enabled); | |
for (var i = 0; i < codes.length; i++) { | |
output += character_table[codes[i]]; | |
} | |
return output; | |
} | |
function convert_to_morse(string) { | |
// 和文と英文どちらで変換するかを取得する | |
var kana_enabled = 0; | |
if (document.getElementById("kana_enabled").checked) { | |
kana_enabled = 1; | |
} | |
// - 入力文字をモールス信号に変換 | |
var output = ''; | |
for (var i = 0; i < string.length; i++) { | |
// モールス符号の間を空けることで読みやすくする | |
if (i > 0) { | |
output += ' '; | |
} | |
// 小文字を大文字に変換することで大文字小文字どちらにも対応 | |
var character_key = string[i].toUpperCase(); | |
// モールス符号のない文字をある文字の組み合わせに置換 | |
character_key = to_convertible_kana(character_key); | |
var code_table = CodeData.CodeTable(kana_enabled); | |
for (var k = 0; k < character_key.length; k++) { | |
if (k > 0) { | |
output += ' '; | |
} | |
output += to_morse(code_table[character_key[k]]); | |
} | |
} | |
return output; | |
} | |
// モールス符号にできない文字を変換可能な文字に置き換える | |
function to_convertible_kana(kana) { | |
var conv_kana = ''; | |
switch (kana) { | |
case 'ガ': | |
case 'ギ': | |
case 'グ': | |
case 'ゲ': | |
case 'ゴ': | |
case 'ザ': | |
case 'ジ': | |
case 'ズ': | |
case 'ゼ': | |
case 'ゾ': | |
case 'ダ': | |
case 'ヂ': | |
case 'ヅ': | |
case 'デ': | |
case 'ド': | |
case 'バ': | |
case 'ビ': | |
case 'ブ': | |
case 'ベ': | |
case 'ボ': | |
// 濁点付き文字を分離 | |
conv_kana += String.fromCharCode(kana.charCodeAt(0) - 1); | |
conv_kana += '゛'; | |
break; | |
case 'パ': | |
case 'ピ': | |
case 'プ': | |
case 'ペ': | |
case 'ポ': | |
// 半濁点付き文字を分離 | |
conv_kana += String.fromCharCode(kana.charCodeAt(0) - 2); | |
conv_kana += '゜'; | |
break; | |
case 'ァ': | |
case 'ィ': | |
case 'ゥ': | |
case 'ェ': | |
case 'ォ': | |
case 'ャ': | |
case 'ュ': | |
case 'ョ': | |
case 'ッ': | |
// 小文字を大文字に変換 | |
conv_kana += String.fromCharCode(kana.charCodeAt(0) + 1); | |
break; | |
default: | |
conv_kana += kana; | |
break; | |
} | |
return conv_kana; | |
} | |
// 01コードからモールス符号に変換する | |
function to_morse(code) { | |
var morse_code = ''; | |
for (var i = 0; i < code.length; i++) { | |
switch (code[i]) { | |
case '0': | |
morse_code += '・'; | |
break; | |
case '1': | |
morse_code += 'ー'; | |
break; | |
} | |
} | |
return morse_code; | |
} | |
// モールス信号から01コードに変換する | |
function to_code(morse) { | |
var code = ''; | |
var codes = []; | |
for (var i = 0; i < morse.length; i++) { | |
switch (morse[i]) { | |
case ' ': | |
case ' ': | |
codes.push(code); | |
code = ''; | |
break; | |
case '・': | |
code += '0'; | |
break; | |
case 'ー': | |
code += '1'; | |
break; | |
} | |
} | |
if (code !== '') { | |
codes.push(code); | |
} | |
return codes; | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment