mirror of
https://github.com/kmein/niveum
synced 2026-03-21 20:31:07 +01:00
372 lines
3.4 KiB
JavaScript
372 lines
3.4 KiB
JavaScript
|
|
#!/usr/bin/env node
|
|||
|
|
"use strict";
|
|||
|
|
const { createInterface } = require("readline");
|
|||
|
|
|
|||
|
|
const xsampa = [
|
|||
|
|
"_R_F",
|
|||
|
|
"J\\_<",
|
|||
|
|
"_H_T",
|
|||
|
|
"G\\_<",
|
|||
|
|
"_B_L",
|
|||
|
|
"|\\|\\",
|
|||
|
|
"r\\`",
|
|||
|
|
"<R>",
|
|||
|
|
"g_<",
|
|||
|
|
"<F>",
|
|||
|
|
"d_<",
|
|||
|
|
"b_<",
|
|||
|
|
"_?\\",
|
|||
|
|
"z\\",
|
|||
|
|
"z`",
|
|||
|
|
"X\\",
|
|||
|
|
"x\\",
|
|||
|
|
"_x",
|
|||
|
|
"_X",
|
|||
|
|
"_w",
|
|||
|
|
"v\\",
|
|||
|
|
"_v",
|
|||
|
|
"U\\",
|
|||
|
|
"t`",
|
|||
|
|
"_t",
|
|||
|
|
"_T",
|
|||
|
|
"s\\",
|
|||
|
|
"s`",
|
|||
|
|
"r\\",
|
|||
|
|
"r`",
|
|||
|
|
"_r",
|
|||
|
|
"R\\",
|
|||
|
|
"_R",
|
|||
|
|
"_q",
|
|||
|
|
"p\\",
|
|||
|
|
"_o",
|
|||
|
|
"O\\",
|
|||
|
|
"_O",
|
|||
|
|
"n`",
|
|||
|
|
"_n",
|
|||
|
|
"N\\",
|
|||
|
|
"_N",
|
|||
|
|
"_m",
|
|||
|
|
"M\\",
|
|||
|
|
"_M",
|
|||
|
|
"l\\",
|
|||
|
|
"l`",
|
|||
|
|
"_l",
|
|||
|
|
"L\\",
|
|||
|
|
"_L",
|
|||
|
|
"_k",
|
|||
|
|
"K\\",
|
|||
|
|
"j\\",
|
|||
|
|
"_j",
|
|||
|
|
"J\\",
|
|||
|
|
"I\\",
|
|||
|
|
"h\\",
|
|||
|
|
"_h",
|
|||
|
|
"H\\",
|
|||
|
|
"_H",
|
|||
|
|
"G\\",
|
|||
|
|
"_G",
|
|||
|
|
"_F",
|
|||
|
|
"_e",
|
|||
|
|
"d`",
|
|||
|
|
"_d",
|
|||
|
|
"_c",
|
|||
|
|
"B\\",
|
|||
|
|
"_B",
|
|||
|
|
"_a",
|
|||
|
|
"_A",
|
|||
|
|
"3\\",
|
|||
|
|
"_0",
|
|||
|
|
"@\\",
|
|||
|
|
"?\\",
|
|||
|
|
"!\\",
|
|||
|
|
":\\",
|
|||
|
|
"-\\",
|
|||
|
|
"_+",
|
|||
|
|
"_\\",
|
|||
|
|
"_}",
|
|||
|
|
'_"',
|
|||
|
|
"_/",
|
|||
|
|
"_-",
|
|||
|
|
"_>",
|
|||
|
|
"_=",
|
|||
|
|
"_~",
|
|||
|
|
"_^",
|
|||
|
|
"|\\",
|
|||
|
|
"||",
|
|||
|
|
">\\",
|
|||
|
|
"=\\",
|
|||
|
|
"<\\",
|
|||
|
|
"Z",
|
|||
|
|
"z",
|
|||
|
|
"y",
|
|||
|
|
"Y",
|
|||
|
|
"X",
|
|||
|
|
"x",
|
|||
|
|
"w",
|
|||
|
|
"W",
|
|||
|
|
"v",
|
|||
|
|
"V",
|
|||
|
|
"u",
|
|||
|
|
"U",
|
|||
|
|
"T",
|
|||
|
|
"t",
|
|||
|
|
"s",
|
|||
|
|
"S",
|
|||
|
|
"r",
|
|||
|
|
"R",
|
|||
|
|
"q",
|
|||
|
|
"Q",
|
|||
|
|
"p",
|
|||
|
|
"P",
|
|||
|
|
"O",
|
|||
|
|
"o",
|
|||
|
|
"N",
|
|||
|
|
"n",
|
|||
|
|
"m",
|
|||
|
|
"M",
|
|||
|
|
"l",
|
|||
|
|
"L",
|
|||
|
|
"k",
|
|||
|
|
"K",
|
|||
|
|
"j",
|
|||
|
|
"J",
|
|||
|
|
"i",
|
|||
|
|
"I",
|
|||
|
|
"h",
|
|||
|
|
"H",
|
|||
|
|
"g",
|
|||
|
|
"G",
|
|||
|
|
"f",
|
|||
|
|
"F",
|
|||
|
|
"E",
|
|||
|
|
"e",
|
|||
|
|
"@",
|
|||
|
|
"D",
|
|||
|
|
"d",
|
|||
|
|
"C",
|
|||
|
|
"c",
|
|||
|
|
"B",
|
|||
|
|
"b",
|
|||
|
|
"{",
|
|||
|
|
"a",
|
|||
|
|
"A",
|
|||
|
|
"9",
|
|||
|
|
"8",
|
|||
|
|
"7",
|
|||
|
|
"6",
|
|||
|
|
"5",
|
|||
|
|
"4",
|
|||
|
|
"3",
|
|||
|
|
"2",
|
|||
|
|
"1",
|
|||
|
|
"%",
|
|||
|
|
"&",
|
|||
|
|
"}",
|
|||
|
|
'"',
|
|||
|
|
"'",
|
|||
|
|
".",
|
|||
|
|
"?",
|
|||
|
|
"!",
|
|||
|
|
":",
|
|||
|
|
"|",
|
|||
|
|
"=",
|
|||
|
|
"~",
|
|||
|
|
"^",
|
|||
|
|
"`"
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const ipa = [
|
|||
|
|
" ᷈",
|
|||
|
|
"ʄ",
|
|||
|
|
" ᷄",
|
|||
|
|
"ʛ",
|
|||
|
|
" ᷅",
|
|||
|
|
"ǁ",
|
|||
|
|
"ɻ",
|
|||
|
|
"↗",
|
|||
|
|
"ɠ",
|
|||
|
|
"↘",
|
|||
|
|
"ɗ",
|
|||
|
|
"ɓ",
|
|||
|
|
"ˤ",
|
|||
|
|
"ʑ",
|
|||
|
|
"ʐ",
|
|||
|
|
"ħ",
|
|||
|
|
"ɧ",
|
|||
|
|
" ̽",
|
|||
|
|
" ̆",
|
|||
|
|
"ʷ",
|
|||
|
|
"ʋ",
|
|||
|
|
" ̬",
|
|||
|
|
"ᵿ",
|
|||
|
|
"ʈ",
|
|||
|
|
" ̤",
|
|||
|
|
" ̋",
|
|||
|
|
"ɕ",
|
|||
|
|
"ʂ",
|
|||
|
|
"ɹ",
|
|||
|
|
"ɽ",
|
|||
|
|
" ̝",
|
|||
|
|
"ʀ",
|
|||
|
|
" ̌",
|
|||
|
|
" ̙",
|
|||
|
|
"ɸ",
|
|||
|
|
" ̞",
|
|||
|
|
"ʘ",
|
|||
|
|
" ̹",
|
|||
|
|
"ɳ",
|
|||
|
|
"ⁿ",
|
|||
|
|
"ɴ",
|
|||
|
|
" ̼",
|
|||
|
|
" ̻",
|
|||
|
|
"ɰ",
|
|||
|
|
" ̄",
|
|||
|
|
"ɺ",
|
|||
|
|
"ɭ",
|
|||
|
|
"ˡ",
|
|||
|
|
"ʟ",
|
|||
|
|
" ̀",
|
|||
|
|
" ̰",
|
|||
|
|
"ɮ",
|
|||
|
|
"ʝ",
|
|||
|
|
"ʲ",
|
|||
|
|
"ɟ",
|
|||
|
|
"ᵻ",
|
|||
|
|
"ɦ",
|
|||
|
|
"ʰ",
|
|||
|
|
"ʜ",
|
|||
|
|
" ́",
|
|||
|
|
"ɢ",
|
|||
|
|
"ˠ",
|
|||
|
|
" ̂",
|
|||
|
|
" ̴",
|
|||
|
|
"ɖ",
|
|||
|
|
" ̪",
|
|||
|
|
" ̜",
|
|||
|
|
"ʙ",
|
|||
|
|
" ̏",
|
|||
|
|
" ̺",
|
|||
|
|
" ̘",
|
|||
|
|
"ɞ",
|
|||
|
|
" ̥",
|
|||
|
|
"ɘ",
|
|||
|
|
"ʕ",
|
|||
|
|
"ǃ",
|
|||
|
|
"ˑ",
|
|||
|
|
"‿",
|
|||
|
|
" ̟",
|
|||
|
|
"̂",
|
|||
|
|
" ̚",
|
|||
|
|
" ̈",
|
|||
|
|
"̌",
|
|||
|
|
" ̠",
|
|||
|
|
"ʼ",
|
|||
|
|
" ̩",
|
|||
|
|
"̃",
|
|||
|
|
" ̯",
|
|||
|
|
"ǀ",
|
|||
|
|
"‖",
|
|||
|
|
"ʡ",
|
|||
|
|
"ǂ",
|
|||
|
|
"ʢ",
|
|||
|
|
"ʒ",
|
|||
|
|
"z",
|
|||
|
|
"y",
|
|||
|
|
"ʏ",
|
|||
|
|
"χ",
|
|||
|
|
"x",
|
|||
|
|
"w",
|
|||
|
|
"ʍ",
|
|||
|
|
"v",
|
|||
|
|
"ʌ",
|
|||
|
|
"u",
|
|||
|
|
"ʊ",
|
|||
|
|
"θ",
|
|||
|
|
"t",
|
|||
|
|
"s",
|
|||
|
|
"ʃ",
|
|||
|
|
"r",
|
|||
|
|
"ʁ",
|
|||
|
|
"q",
|
|||
|
|
"ɒ",
|
|||
|
|
"p",
|
|||
|
|
"ʋ",
|
|||
|
|
"ɔ",
|
|||
|
|
"o",
|
|||
|
|
"ŋ",
|
|||
|
|
"n",
|
|||
|
|
"m",
|
|||
|
|
"ɯ",
|
|||
|
|
"l",
|
|||
|
|
"ʎ",
|
|||
|
|
"k",
|
|||
|
|
"ɬ",
|
|||
|
|
"j",
|
|||
|
|
"ɲ",
|
|||
|
|
"i",
|
|||
|
|
"ɪ",
|
|||
|
|
"h",
|
|||
|
|
"ɥ",
|
|||
|
|
"ɡ",
|
|||
|
|
"ɣ",
|
|||
|
|
"f",
|
|||
|
|
"ɱ",
|
|||
|
|
"ɛ",
|
|||
|
|
"e",
|
|||
|
|
"ə",
|
|||
|
|
"ð",
|
|||
|
|
"d",
|
|||
|
|
"ç",
|
|||
|
|
"c",
|
|||
|
|
"β",
|
|||
|
|
"b",
|
|||
|
|
"æ",
|
|||
|
|
"a",
|
|||
|
|
"ɑ",
|
|||
|
|
"œ",
|
|||
|
|
"ɵ",
|
|||
|
|
"ɤ",
|
|||
|
|
"ɐ",
|
|||
|
|
"ɫ",
|
|||
|
|
"ɾ",
|
|||
|
|
"ɜ",
|
|||
|
|
"ø",
|
|||
|
|
"ɨ",
|
|||
|
|
"ˌ",
|
|||
|
|
"ɶ",
|
|||
|
|
"ʉ",
|
|||
|
|
"ˈ",
|
|||
|
|
"ʲ",
|
|||
|
|
".",
|
|||
|
|
"ʔ",
|
|||
|
|
"ꜜ",
|
|||
|
|
"ː",
|
|||
|
|
"|",
|
|||
|
|
"̩",
|
|||
|
|
"̃",
|
|||
|
|
"ꜛ",
|
|||
|
|
"˞"
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const convertChar = (inputList, outputList) => input => {
|
|||
|
|
const index = inputList.findIndex(letter => letter == input);
|
|||
|
|
return index ? outputList[index] : input;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const convertString = (inputList, outputList) => string =>
|
|||
|
|
string
|
|||
|
|
.split("")
|
|||
|
|
.map(convertChar(inputList, outputList))
|
|||
|
|
.join("");
|
|||
|
|
|
|||
|
|
const ipaToXsampa = convertString(ipa, xsampa);
|
|||
|
|
const xsampaToIpa = convertString(xsampa, ipa);
|
|||
|
|
|
|||
|
|
const readlineInterface = createInterface({
|
|||
|
|
input: process.stdin,
|
|||
|
|
output: process.stdout,
|
|||
|
|
terminal: false
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
readlineInterface.on("line", line => console.log(xsampaToIpa(line)));
|