Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* eslint-disable no-fallthrough */
- const JapaneseLatin = {
- ba: 'ба',
- cha: 'ця',
- da: 'да',
- ga: 'га',
- ha: 'ха',
- ja: 'дзя',
- ka: 'ка',
- ma: 'ма',
- na: 'на',
- pa: 'па',
- ra: 'ра',
- sa: 'са',
- sha: 'ся',
- ta: 'та',
- wa: 'ўа',
- ya: 'я',
- za: 'дза',
- be: 'бэ',
- de: 'дэ',
- ge: 'гэ',
- he: 'хэ',
- ke: 'кэ',
- me: 'мэ',
- ne: 'нэ',
- pe: 'пэ',
- re: 'рэ',
- se: 'сэ',
- te: 'тэ',
- ze: 'дзэ',
- bi: 'бі',
- chi: 'ці',
- gi: 'гі',
- hi: 'хі',
- ji: 'дзі',
- ki: 'кі',
- mi: 'мі',
- ni: 'ні',
- pi: 'пі',
- ri: 'ры',
- ro: 'ро',
- shi: 'сі',
- bo: 'бо',
- cho: 'цё',
- do: 'до',
- go: 'го',
- ho: 'хо',
- jo: 'дзё',
- ko: 'ко',
- mo: 'мо',
- no: 'но',
- po: 'по',
- so: 'со',
- sho: 'сё',
- to: 'то',
- wo: 'ўо',
- yo: 'ё',
- zo: 'дзо',
- bu: 'бу',
- chu: 'цю',
- fu: 'фу',
- gu: 'гу',
- ju: 'дзю',
- ku: 'ку',
- mu: 'му',
- nu: 'ну',
- pu: 'пу',
- ru: 'ру',
- su: 'су',
- shu: 'сю',
- tsu: 'цу',
- yu: 'ю',
- zu: 'дзу',
- bya: 'бя',
- gya: 'гя',
- hya: 'хя',
- kya: 'кя',
- mya: 'мя',
- nya: 'ня',
- pya: 'пя',
- rya: 'р’я',
- byo: 'бё',
- gyo: 'гё',
- hyo: 'хё',
- kyo: 'кё',
- myo: 'мё',
- nyo: 'нё',
- pyo: 'пё',
- ryo: 'р’ё',
- byu: 'бю',
- gyu: 'гю',
- hyu: 'хю',
- kyu: 'кю',
- myu: 'мю',
- nyu: 'ню',
- pyu: 'пю',
- ryu: 'р’ю',
- Ba: 'Ба',
- Cha: 'Ця',
- Da: 'Да',
- Ga: 'Га',
- Ha: 'Ха',
- Ja: 'Дзя',
- Ka: 'Ка',
- Ma: 'Ма',
- Na: 'На',
- Pa: 'Па',
- Ra: 'Ра',
- Sa: 'Са',
- Sha: 'Ся',
- Ta: 'Та',
- Wa: 'Ўа',
- Ya: 'Я',
- Za: 'Дза',
- Be: 'Бэ',
- De: 'Дэ',
- Ge: 'Гэ',
- He: 'Хэ',
- Ke: 'Кэ',
- Me: 'Мэ',
- Ne: 'Нэ',
- Pe: 'Пэ',
- Re: 'Рэ',
- Se: 'Сэ',
- Te: 'Тэ',
- Ze: 'Дзэ',
- Bi: 'Бі',
- Chi: 'Ці',
- Gi: 'Гі',
- Hi: 'Хі',
- Ji: 'Дзі',
- Ki: 'Кі',
- Mi: 'Мі',
- Ni: 'Ні',
- Pi: 'Пі',
- Ri: 'Ры',
- Ro: 'Ро',
- Shi: 'Сі',
- Bo: 'Бо',
- Cho: 'Цё',
- Do: 'До',
- Go: 'Го',
- Ho: 'Хо',
- Jo: 'Дзё',
- Ko: 'Ко',
- Mo: 'Мо',
- No: 'Но',
- Po: 'По',
- So: 'Со',
- Sho: 'Сё',
- To: 'То',
- Wo: 'Ўо',
- Yo: 'Ё',
- Zo: 'Дзо',
- Bu: 'Бу',
- Chu: 'Цю',
- Fu: 'Фу',
- Gu: 'Гу',
- Ju: 'Дзю',
- Ku: 'Ку',
- Mu: 'Му',
- Nu: 'Ну',
- Pu: 'Пу',
- Ru: 'Ру',
- Su: 'Су',
- Shu: 'Сю',
- Tsu: 'Цу',
- Yu: 'Ю',
- Zu: 'Дзу',
- Bya: 'Бя',
- Gya: 'Гя',
- Hya: 'Хя',
- Kya: 'Кя',
- Mya: 'Мя',
- Nya: 'Ня',
- Pya: 'Пя',
- Rya: 'Р’я',
- Byo: 'Бё',
- Gyo: 'Гё',
- Hyo: 'Хё',
- Kyo: 'Кё',
- Myo: 'Мё',
- Nyo: 'Нё',
- Pyo: 'Пё',
- Ryo: 'Р’ё',
- Byu: 'Бю',
- Gyu: 'Гю',
- Hyu: 'Хю',
- Kyu: 'Кю',
- Myu: 'Мю',
- Nyu: 'Ню',
- Pyu: 'Пю',
- Ryu: 'Р’ю',
- Ue: 'Уэ',
- ue: 'уэ',
- Ua: 'Уа',
- ua: 'уа',
- Ui: 'Уі',
- ui: 'уі',
- Uo: 'Уо',
- uo: 'уо',
- }
- const oneDigit = {
- o: 'ў',
- O: 'О',
- a: 'а',
- i: 'і',
- n: 'н',
- e: 'э',
- E: 'Э',
- u: 'ў',
- U: 'У',
- A: 'А',
- I: 'І',
- N: 'Н',
- }
- const translit = translit => {
- let merch, tmp, tmp2
- const output = translit.map((slog, i, array) => {
- const lastChar = Array.from(translit.values()).pop()
- if (
- slog.length === 1 &&
- slog === lastChar &&
- merch !== undefined &&
- merch.charAt(1) === lastChar
- ) {
- return ''
- }
- if (JapaneseLatin[slog]) {
- if (slog === lastChar && merch !== undefined) {
- return ''
- }
- if (tmp2 !== undefined) {
- return
- }
- if (merch !== undefined && oneDigit[merch.charAt(1)]) {
- if (JapaneseLatin[merch.charAt(2) + slog.charAt(1)]) {
- const s = oneDigit[merch.charAt(1)] + JapaneseLatin[merch.charAt(2) + slog.charAt(1)]
- merch = undefined
- return s
- }
- }
- if (slog === lastChar && lastChar === 'wa') {
- return 'ва'
- }
- return JapaneseLatin[slog]
- } else {
- if (merch === undefined) {
- if (slog === lastChar) {
- if (tmp !== undefined && tmp.charAt(2) === lastChar) {
- return ''
- } else {
- if (tmp2 !== undefined && tmp2.charAt(3) === oneDigit[slog]) {
- return ''
- }
- return oneDigit[slog]
- }
- } else {
- merch = slog + array[i + 1].charAt(0)
- }
- }
- if (JapaneseLatin[merch]) {
- let a
- if (merch.slice(1) === lastChar) {
- a = JapaneseLatin[merch]
- } else if (merch === undefined && merch.slice(2) === lastChar) {
- a = ''
- } else {
- a = JapaneseLatin[merch]
- tmp = merch
- merch = undefined
- }
- return a
- } else if (JapaneseLatin[merch.charAt(1) + merch.charAt(2)]) {
- let o
- if (JapaneseLatin[merch.charAt(1) + merch.charAt(2)]) {
- if (merch.charAt(0) === array[i + 1].charAt(1)) {
- o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
- } else {
- if (i !== 0 && slog.charAt(0) === merch.charAt(1)) {
- o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
- } else {
- if (tmp !== undefined && tmp.charAt(2) === merch.charAt(0)) {
- o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
- } else {
- o = oneDigit[merch.charAt(0)] + JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
- }
- }
- }
- }
- if (array[i + 1].charAt(1) === lastChar.charAt(1)) {
- merch = array[i + 1].charAt(1)
- } else {
- merch = array[i + 1].charAt(1) + array[i + 2]
- }
- if (
- merch === lastChar.charAt(1) &&
- array[i + 1] === lastChar &&
- oneDigit[merch] &&
- o.charAt(2) !== oneDigit[merch] &&
- slog !== lastChar
- ) {
- tmp2 = o + oneDigit[merch]
- merch = undefined
- return tmp2
- } else {
- return o
- }
- } else {
- if (merch !== undefined && JapaneseLatin[merch.charAt(0) + merch.charAt(1)]) {
- const u = JapaneseLatin[merch.charAt(0) + merch.charAt(1)]
- merch = merch.charAt(2) + array[i + 2].charAt(0)
- return u
- }
- return oneDigit[merch]
- }
- }
- })
- return output.join('')
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement