114 lines
2.8 KiB
JavaScript
114 lines
2.8 KiB
JavaScript
//@date 2022
|
|
|
|
const dict = {
|
|
"ㄱ": "g",
|
|
"ㄴ": "n",
|
|
"ㄷ": "d",
|
|
"ㄹ": "l",
|
|
"ㅁ": "m",
|
|
"ㅂ": "b",
|
|
"ㅅ": "s",
|
|
"ㅇ": "ng",
|
|
"ㅈ": "j",
|
|
"ㅊ": "ch",
|
|
"ㅋ": "k",
|
|
"ㅌ": "t",
|
|
"ㅍ": "p",
|
|
"ㅎ": "h",
|
|
"ㄲ": "k",
|
|
"ㄸ": "tt",
|
|
"ㅃ": "pp",
|
|
"ㅆ": "s",
|
|
"ㅉ": "jj",
|
|
"ㄳ": "gs",
|
|
"ㄵ": "nj",
|
|
"ㄶ": "nh",
|
|
"ㄺ": "lg",
|
|
"ㄻ": "lm",
|
|
"ㄼ": "lb",
|
|
"ㄽ": "ls",
|
|
"ㄾ": "lt",
|
|
"ㄿ": "lp",
|
|
"ㅀ": "lh",
|
|
"ㅄ": "bs",
|
|
"ㅏ": "a",
|
|
"ㅑ": "ya",
|
|
"ㅓ": "o",
|
|
"ㅕ": "yo",
|
|
"ㅗ": "o",
|
|
"ㅛ": "yo",
|
|
"ㅜ": "u",
|
|
"ㅠ": "yu",
|
|
"ㅡ": "u",
|
|
"ㅣ": "i",
|
|
"ㅐ": "e",
|
|
"ㅔ": "e",
|
|
"ㅒ": "ye",
|
|
"ㅖ": "ye",
|
|
"ㅘ": "wa",
|
|
"ㅙ": "oe",
|
|
"ㅚ": "oe",
|
|
"ㅞ": "oe",
|
|
"ㅝ": "wo",
|
|
"ㅟ": "wi",
|
|
"ㅢ": "ui"
|
|
};
|
|
|
|
const hangul_f = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
|
|
const hangul_m = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'];
|
|
const hangul_e = ['', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
|
|
|
|
function convert() {
|
|
let input = document.getElementById("input").value.trim();
|
|
let out = "";
|
|
|
|
for (let i = 0; i < input.length; i++) {
|
|
if (input[i].match(/[\uac00-\ud7af]|[\u1100-\u11ff]|[\u3130-\u318f]|[\ua960-\ua97f]|[\ud7b0-\ud7ff]/g)) {
|
|
const ga = 44032;
|
|
let unicode = input[i].charCodeAt(0);
|
|
unicode = unicode - ga;
|
|
|
|
let fi = parseInt(unicode / 588);
|
|
let mi = parseInt((unicode - (fi * 588)) / 28);
|
|
let ei = parseInt(unicode % 28);
|
|
|
|
if (hangul_f[fi] && hangul_f[fi] != "ㅇ") {
|
|
out += dict[hangul_f[fi]];
|
|
}
|
|
|
|
if (hangul_m[mi]) {
|
|
out += dict[hangul_m[mi]];
|
|
}
|
|
|
|
if (hangul_e[ei]) {
|
|
out += dict[hangul_e[ei]];
|
|
}
|
|
} else {
|
|
out += input[i];
|
|
}
|
|
}
|
|
out = out.charAt(0).toUpperCase() + out.slice(1);
|
|
|
|
for (var i = 0; i < out.length; i++) {
|
|
if (["s", "j", "ch", "h"].includes(out[i])) {
|
|
if (i + 1 < out.length && ["a", "e", "i", "o", "u", "y", "w"].includes(out[i + 1])) {
|
|
continue;
|
|
} else {
|
|
out = out.substring(0, i) + "t" + out.substring(i + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
document.getElementById("out").value = out;
|
|
}
|
|
|
|
function clipboard() {
|
|
// Retrieved from https://www.w3schools.com/howto/howto_js_copy_clipboard.asp on November 12, 2022
|
|
var copyText = document.getElementById("out");
|
|
|
|
copyText.select();
|
|
copyText.setSelectionRange(0, 99999); // For mobile devices
|
|
|
|
navigator.clipboard.writeText(copyText.value);
|
|
alert("Copied the text: " + copyText.value);
|
|
}
|