Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 KB | None | 0 0
  1. /* eslint-disable no-fallthrough */
  2. const JapaneseLatin = {
  3. ba: 'ба',
  4. cha: 'ця',
  5. da: 'да',
  6. ga: 'га',
  7. ha: 'ха',
  8. ja: 'дзя',
  9. ka: 'ка',
  10. ma: 'ма',
  11. na: 'на',
  12. pa: 'па',
  13. ra: 'ра',
  14. sa: 'са',
  15. sha: 'ся',
  16. ta: 'та',
  17. wa: 'ўа',
  18. ya: 'я',
  19. za: 'дза',
  20. be: 'бэ',
  21. de: 'дэ',
  22. ge: 'гэ',
  23. he: 'хэ',
  24. ke: 'кэ',
  25. me: 'мэ',
  26. ne: 'нэ',
  27. pe: 'пэ',
  28. re: 'рэ',
  29. se: 'сэ',
  30. te: 'тэ',
  31. ze: 'дзэ',
  32. bi: 'бі',
  33. chi: 'ці',
  34. gi: 'гі',
  35. hi: 'хі',
  36. ji: 'дзі',
  37. ki: 'кі',
  38. mi: 'мі',
  39. ni: 'ні',
  40. pi: 'пі',
  41. ri: 'ры',
  42. ro: 'ро',
  43. shi: 'сі',
  44. bo: 'бо',
  45. cho: 'цё',
  46. do: 'до',
  47. go: 'го',
  48. ho: 'хо',
  49. jo: 'дзё',
  50. ko: 'ко',
  51. mo: 'мо',
  52. no: 'но',
  53. po: 'по',
  54. so: 'со',
  55. sho: 'сё',
  56. to: 'то',
  57. wo: 'ўо',
  58. yo: 'ё',
  59. zo: 'дзо',
  60. bu: 'бу',
  61. chu: 'цю',
  62. fu: 'фу',
  63. gu: 'гу',
  64. ju: 'дзю',
  65. ku: 'ку',
  66. mu: 'му',
  67. nu: 'ну',
  68. pu: 'пу',
  69. ru: 'ру',
  70. su: 'су',
  71. shu: 'сю',
  72. tsu: 'цу',
  73. yu: 'ю',
  74. zu: 'дзу',
  75. bya: 'бя',
  76. gya: 'гя',
  77. hya: 'хя',
  78. kya: 'кя',
  79. mya: 'мя',
  80. nya: 'ня',
  81. pya: 'пя',
  82. rya: 'р’я',
  83. byo: 'бё',
  84. gyo: 'гё',
  85. hyo: 'хё',
  86. kyo: 'кё',
  87. myo: 'мё',
  88. nyo: 'нё',
  89. pyo: 'пё',
  90. ryo: 'р’ё',
  91. byu: 'бю',
  92. gyu: 'гю',
  93. hyu: 'хю',
  94. kyu: 'кю',
  95. myu: 'мю',
  96. nyu: 'ню',
  97. pyu: 'пю',
  98. ryu: 'р’ю',
  99. Ba: 'Ба',
  100. Cha: 'Ця',
  101. Da: 'Да',
  102. Ga: 'Га',
  103. Ha: 'Ха',
  104. Ja: 'Дзя',
  105. Ka: 'Ка',
  106. Ma: 'Ма',
  107. Na: 'На',
  108. Pa: 'Па',
  109. Ra: 'Ра',
  110. Sa: 'Са',
  111. Sha: 'Ся',
  112. Ta: 'Та',
  113. Wa: 'Ўа',
  114. Ya: 'Я',
  115. Za: 'Дза',
  116. Be: 'Бэ',
  117. De: 'Дэ',
  118. Ge: 'Гэ',
  119. He: 'Хэ',
  120. Ke: 'Кэ',
  121. Me: 'Мэ',
  122. Ne: 'Нэ',
  123. Pe: 'Пэ',
  124. Re: 'Рэ',
  125. Se: 'Сэ',
  126. Te: 'Тэ',
  127. Ze: 'Дзэ',
  128. Bi: 'Бі',
  129. Chi: 'Ці',
  130. Gi: 'Гі',
  131. Hi: 'Хі',
  132. Ji: 'Дзі',
  133. Ki: 'Кі',
  134. Mi: 'Мі',
  135. Ni: 'Ні',
  136. Pi: 'Пі',
  137. Ri: 'Ры',
  138. Ro: 'Ро',
  139. Shi: 'Сі',
  140. Bo: 'Бо',
  141. Cho: 'Цё',
  142. Do: 'До',
  143. Go: 'Го',
  144. Ho: 'Хо',
  145. Jo: 'Дзё',
  146. Ko: 'Ко',
  147. Mo: 'Мо',
  148. No: 'Но',
  149. Po: 'По',
  150. So: 'Со',
  151. Sho: 'Сё',
  152. To: 'То',
  153. Wo: 'Ўо',
  154. Yo: 'Ё',
  155. Zo: 'Дзо',
  156. Bu: 'Бу',
  157. Chu: 'Цю',
  158. Fu: 'Фу',
  159. Gu: 'Гу',
  160. Ju: 'Дзю',
  161. Ku: 'Ку',
  162. Mu: 'Му',
  163. Nu: 'Ну',
  164. Pu: 'Пу',
  165. Ru: 'Ру',
  166. Su: 'Су',
  167. Shu: 'Сю',
  168. Tsu: 'Цу',
  169. Yu: 'Ю',
  170. Zu: 'Дзу',
  171. Bya: 'Бя',
  172. Gya: 'Гя',
  173. Hya: 'Хя',
  174. Kya: 'Кя',
  175. Mya: 'Мя',
  176. Nya: 'Ня',
  177. Pya: 'Пя',
  178. Rya: 'Р’я',
  179. Byo: 'Бё',
  180. Gyo: 'Гё',
  181. Hyo: 'Хё',
  182. Kyo: 'Кё',
  183. Myo: 'Мё',
  184. Nyo: 'Нё',
  185. Pyo: 'Пё',
  186. Ryo: 'Р’ё',
  187. Byu: 'Бю',
  188. Gyu: 'Гю',
  189. Hyu: 'Хю',
  190. Kyu: 'Кю',
  191. Myu: 'Мю',
  192. Nyu: 'Ню',
  193. Pyu: 'Пю',
  194. Ryu: 'Р’ю',
  195. Ue: 'Уэ',
  196. ue: 'уэ',
  197. Ua: 'Уа',
  198. ua: 'уа',
  199. Ui: 'Уі',
  200. ui: 'уі',
  201. Uo: 'Уо',
  202. uo: 'уо',
  203. }
  204.  
  205. const oneDigit = {
  206. o: 'ў',
  207. O: 'О',
  208. a: 'а',
  209. i: 'і',
  210. n: 'н',
  211. e: 'э',
  212. E: 'Э',
  213. u: 'ў',
  214. U: 'У',
  215. A: 'А',
  216. I: 'І',
  217. N: 'Н',
  218. }
  219.  
  220. const translit = translit => {
  221. let merch, tmp, tmp2
  222.  
  223. const output = translit.map((slog, i, array) => {
  224. const lastChar = Array.from(translit.values()).pop()
  225.  
  226. if (
  227. slog.length === 1 &&
  228. slog === lastChar &&
  229. merch !== undefined &&
  230. merch.charAt(1) === lastChar
  231. ) {
  232. return ''
  233. }
  234.  
  235. if (JapaneseLatin[slog]) {
  236. if (slog === lastChar && merch !== undefined) {
  237. return ''
  238. }
  239. if (tmp2 !== undefined) {
  240. return
  241. }
  242. if (merch !== undefined && oneDigit[merch.charAt(1)]) {
  243. if (JapaneseLatin[merch.charAt(2) + slog.charAt(1)]) {
  244. const s = oneDigit[merch.charAt(1)] + JapaneseLatin[merch.charAt(2) + slog.charAt(1)]
  245. merch = undefined
  246. return s
  247. }
  248. }
  249. if (slog === lastChar && lastChar === 'wa') {
  250. return 'ва'
  251. }
  252. return JapaneseLatin[slog]
  253. } else {
  254. if (merch === undefined) {
  255. if (slog === lastChar) {
  256. if (tmp !== undefined && tmp.charAt(2) === lastChar) {
  257. return ''
  258. } else {
  259. if (tmp2 !== undefined && tmp2.charAt(3) === oneDigit[slog]) {
  260. return ''
  261. }
  262. return oneDigit[slog]
  263. }
  264. } else {
  265. merch = slog + array[i + 1].charAt(0)
  266. }
  267. }
  268. if (JapaneseLatin[merch]) {
  269. let a
  270. if (merch.slice(1) === lastChar) {
  271. a = JapaneseLatin[merch]
  272. } else if (merch === undefined && merch.slice(2) === lastChar) {
  273. a = ''
  274. } else {
  275. a = JapaneseLatin[merch]
  276. tmp = merch
  277. merch = undefined
  278. }
  279.  
  280. return a
  281. } else if (JapaneseLatin[merch.charAt(1) + merch.charAt(2)]) {
  282. let o
  283. if (JapaneseLatin[merch.charAt(1) + merch.charAt(2)]) {
  284. if (merch.charAt(0) === array[i + 1].charAt(1)) {
  285. o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
  286. } else {
  287. if (i !== 0 && slog.charAt(0) === merch.charAt(1)) {
  288. o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
  289. } else {
  290. if (tmp !== undefined && tmp.charAt(2) === merch.charAt(0)) {
  291. o = JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
  292. } else {
  293. o = oneDigit[merch.charAt(0)] + JapaneseLatin[merch.charAt(1) + merch.charAt(2)]
  294. }
  295. }
  296. }
  297. }
  298.  
  299. if (array[i + 1].charAt(1) === lastChar.charAt(1)) {
  300. merch = array[i + 1].charAt(1)
  301. } else {
  302. merch = array[i + 1].charAt(1) + array[i + 2]
  303. }
  304.  
  305. if (
  306. merch === lastChar.charAt(1) &&
  307. array[i + 1] === lastChar &&
  308. oneDigit[merch] &&
  309. o.charAt(2) !== oneDigit[merch] &&
  310. slog !== lastChar
  311. ) {
  312. tmp2 = o + oneDigit[merch]
  313. merch = undefined
  314.  
  315. return tmp2
  316. } else {
  317. return o
  318. }
  319. } else {
  320. if (merch !== undefined && JapaneseLatin[merch.charAt(0) + merch.charAt(1)]) {
  321. const u = JapaneseLatin[merch.charAt(0) + merch.charAt(1)]
  322. merch = merch.charAt(2) + array[i + 2].charAt(0)
  323. return u
  324. }
  325. return oneDigit[merch]
  326. }
  327. }
  328. })
  329. return output.join('')
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement