#!/usr/bin/env node "use strict"; const { createInterface } = require("readline"); const xsampa = [ "_R_F", "J\\_<", "_H_T", "G\\_<", "_B_L", "|\\|\\", "r\\`", "", "g_<", "", "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)));