置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Tja

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [查看] [编辑] [历史] [刷新]

这是为以下模板提供支持的前置模块:

  • {{Kana}}:日文罗马字→日语假名
  • {{Tja}}:日语假名→日文罗马字
  • {{TJa}}:日语假名→日文罗马字(首字母大写)
  • {{日本人名}}:适用于日本人名注音的复杂模板
  1. local module = {}
  2. local getArgs = require('Module:Arguments').getArgs
  3. local kanas = {
  4. {'a', 'あ', 'ア'}, --清音
  5. {'i', 'い', 'イ'},
  6. {'u', 'う', 'ウ'},
  7. {'e', 'え', 'エ'},
  8. {'o', 'お', 'オ'},
  9. {'ka', 'か', 'カ'},
  10. {'ki', 'き', 'キ'},
  11. {'ku', 'く', 'ク'},
  12. {'ke', 'け', 'ケ'},
  13. {'ko', 'こ', 'コ'},
  14. {'sa', 'さ', 'サ'},
  15. {'shi', 'し', 'シ'},
  16. {'su', 'す', 'ス'},
  17. {'se', 'せ', 'セ'},
  18. {'so', 'そ', 'ソ'},
  19. {'ta', 'た', 'タ'},
  20. {'chi', 'ち', 'チ'},
  21. {'tsu', 'つ', 'ツ'},
  22. {'te', 'て', 'テ'},
  23. {'to', 'と', 'ト'},
  24. {'na', 'な', 'ナ'},
  25. {'ni', 'に', 'ニ'},
  26. {'nu', 'ぬ', 'ヌ'},
  27. {'ne', 'ね', 'ネ'},
  28. {'no', 'の', 'ノ'},
  29. {'ha', 'は', 'ハ'},
  30. {'hi', 'ひ', 'ヒ'},
  31. {'fu', 'ふ', 'フ'},
  32. {'he', 'へ', 'ヘ'},
  33. {'ho', 'ほ', 'ホ'},
  34. {'ma', 'ま', 'マ'},
  35. {'mi', 'み', 'ミ'},
  36. {'mu', 'む', 'ム'},
  37. {'me', 'め', 'メ'},
  38. {'mo', 'も', 'モ'},
  39. {'ya', 'や', 'ヤ'},
  40. {'yu', 'ゆ', 'ユ'},
  41. {'yo', 'よ', 'ヨ'},
  42. {'ra', 'ら', 'ラ'},
  43. {'ri', 'り', 'リ'},
  44. {'ru', 'る', 'ル'},
  45. {'re', 'れ', 'レ'},
  46. {'ro', 'ろ', 'ロ'},
  47. {'wa', 'わ', 'ワ'},
  48. {'wo', 'を', 'ヲ'},
  49. {'n', 'ん', 'ン'}, --拨音
  50. {'ga', 'が', 'ガ'}, --浊音
  51. {'gi', 'ぎ', 'ギ'},
  52. {'gu', 'ぐ', 'グ'},
  53. {'ge', 'げ', 'ゲ'},
  54. {'go', 'ご', 'ゴ'},
  55. {'za', 'ざ', 'ザ'},
  56. {'ji', 'じ', 'ジ'},
  57. {'zu', 'ず', 'ズ'},
  58. {'ze', 'ぜ', 'ゼ'},
  59. {'zo', 'ぞ', 'ゾ'},
  60. {'da', 'だ', 'ダ'},
  61. {'ji', 'ぢ', 'ヂ'},
  62. {'zu', 'づ', 'ヅ'},
  63. {'de', 'で', 'デ'},
  64. {'do', 'ど', 'ド'},
  65. {'ba', 'ば', 'バ'},
  66. {'bi', 'び', 'ビ'},
  67. {'bu', 'ぶ', 'ブ'},
  68. {'be', 'べ', 'ベ'},
  69. {'bo', 'ぼ', 'ボ'},
  70. {'pa', 'ぱ', 'パ'}, --半浊音
  71. {'pi', 'ぴ', 'ピ'},
  72. {'pu', 'ぷ', 'プ'},
  73. {'pe', 'ぺ', 'ペ'},
  74. {'po', 'ぽ', 'ポ'},
  75. {'vu', 'ゔ', 'ヴ'}, --外来语
  76. {'wi', 'ゐ', 'ヰ'}, --方言、古语
  77. {'we', 'ゑ', 'ヱ'},
  78. {'-', 'ー', '—'} --长音
  79. }
  80. local youon = {
  81. {'kya', 'きゃ', 'キャ'}, --拗音
  82. {'gya', 'ぎゃ', 'ギャ'},
  83. {'sha', 'しゃ', 'シャ'},
  84. {'ja', 'じゃ', 'ジャ'},
  85. {'cha', 'ちゃ', 'チャ'},
  86. {'ja', 'ぢゃ', 'ヂャ'},
  87. {'nya', 'にゃ', 'ニャ'},
  88. {'hya', 'ひゃ', 'ヒャ'},
  89. {'bya', 'びゃ', 'ビャ'},
  90. {'pya', 'ぴゃ', 'ピャ'},
  91. {'mya', 'みゃ', 'ミャ'},
  92. {'rya', 'りゃ', 'リャ'},
  93. {'kyu', 'きゅ', 'キュ'},
  94. {'gyu', 'ぎゅ', 'ギュ'},
  95. {'shu', 'しゅ', 'シュ'},
  96. {'ju', 'じゅ', 'ジュ'},
  97. {'chu', 'ちゅ', 'チュ'},
  98. {'ju', 'ぢゅ', 'ヂュ'},
  99. {'nyu', 'にゅ', 'ニュ'},
  100. {'hyu', 'ひゅ', 'ヒュ'},
  101. {'byu', 'びゅ', 'ビュ'},
  102. {'pyu', 'ぴゅ', 'ピュ'},
  103. {'myu', 'みゅ', 'ミュ'},
  104. {'ryu', 'りゅ', 'リュ'},
  105. {'kyo', 'きょ', 'キョ'},
  106. {'gyo', 'ぎょ', 'ギョ'},
  107. {'sho', 'しょ', 'ショ'},
  108. {'jo', 'じょ', 'ジョ'},
  109. {'cho', 'ちょ', 'チョ'},
  110. {'jo', 'ぢょ', 'ヂョ'},
  111. {'nyo', 'にょ', 'ニョ'},
  112. {'hyo', 'ひょ', 'ヒョ'},
  113. {'byo', 'びょ', 'ビョ'},
  114. {'pyo', 'ぴょ', 'ピョ'},
  115. {'myo', 'みょ', 'ミョ'},
  116. {'ryo', 'りょ', 'リョ'},
  117. {'yi', 'いぃ', 'イィ'}, --扩展假名,https://en.wikipedia.org/wiki/Hepburn_romanization#Extended_katakana
  118. {'ye', 'いぇ', 'イェ'},
  119. {'wa', 'うぁ', 'ウァ'},
  120. {'wi', 'うぃ', 'ウィ'},
  121. {'wu', 'うぅ', 'ウゥ'},
  122. {'we', 'うぇ', 'ウェ'},
  123. {'wo', 'うぉ', 'ウォ'},
  124. {'wyu', 'うゅ', 'ウュ'},
  125. {'va', 'ゔぁ', 'ヴァ'},
  126. {'vi', 'ゔぃ', 'ヴィ'},
  127. {'ve', 'ゔぇ', 'ヴェ'},
  128. {'vo', 'ゔぉ', 'ヴォ'},
  129. {'vya', 'ゔゃ', 'ヴャ'},
  130. {'vyu', 'ゔゅ', 'ヴュ'},
  131. {'vye', 'ゔぃぇ', 'ウィェ'},
  132. {'vyo', 'ゔょ', 'ヴョ'},
  133. {'kye', 'きぇ', 'キェ'},
  134. {'gye', 'ぎぇ', 'ギェ'},
  135. {'kwa', 'くぁ', 'クァ'},
  136. {'kwi', 'くぃ', 'クィ'},
  137. {'kwe', 'くぇ', 'クェ'},
  138. {'kwo', 'くぉ', 'クォ'},
  139. {'kwa', 'くゎ', 'クヮ'},
  140. {'gwa', 'ぐぁ', 'グァ'},
  141. {'gwi', 'ぐぃ', 'グィ'},
  142. {'gwe', 'ぐぇ', 'グェ'},
  143. {'gwo', 'ぐぉ', 'グォ'},
  144. {'gwa', 'ぐゎ', 'グヮ'},
  145. {'she', 'しぇ', 'シェ'},
  146. {'je', 'じぇ', 'ジェ'},
  147. {'si', 'すぃ', 'スィ'},
  148. {'zi', 'ずぃ', 'ズィ'},
  149. {'che', 'ちぇ', 'チェ'},
  150. {'tsa', 'つぁ', 'ツァ'},
  151. {'tsi', 'つぃ', 'ツィ'},
  152. {'tse', 'つぇ', 'ツェ'},
  153. {'tso', 'つぉ', 'ツォ'},
  154. {'tsyu', 'つゅ', 'ツュ'},
  155. {'ti', 'てぃ', 'ティ'},
  156. {'tu', 'とぅ', 'トゥ'},
  157. {'tyu', 'てゅ', 'テュ'},
  158. {'di', 'でぃ', 'ディ'},
  159. {'du', 'どぅ', 'ドゥ'},
  160. {'dyu', 'でゅ', 'デュ'},
  161. {'nye', 'にぇ', 'ニェ'},
  162. {'hye', 'ひぇ', 'ヒェ'},
  163. {'bye', 'びぇ', 'ビェ'},
  164. {'pye', 'ぴぇ', 'ピェ'},
  165. {'fa', 'ふぁ', 'ファ'},
  166. {'fi', 'ふぃ', 'フィ'},
  167. {'fe', 'ふぇ', 'フェ'},
  168. {'fo', 'ふぉ', 'フォ'},
  169. {'fya', 'ふゃ', 'フャ'},
  170. {'fyu', 'ふゅ', 'フュ'},
  171. {'fye', 'ふぃぇ', 'フィェ'},
  172. {'fyo', 'ふょ', 'フョ'},
  173. {'hu', 'ほぅ', 'ホゥ'},
  174. {'mye', 'みぇ', 'ミェ'},
  175. {'rye', 'りぇ', 'リェ'},
  176. {'va', 'わ゙', 'ヷ'},
  177. {'vi', 'ゐ゙', 'ヸ'},
  178. {'ve', 'ゑ゙', 'ヹ'},
  179. {'vo', 'を゙', 'ヺ'},
  180. }
  181. local hebon = {
  182. {'kyā', 'きゃあ', 'キャア'},
  183. {'gyā', 'ぎゃあ', 'ギャア'},
  184. {'shā', 'しゃあ', 'シャア'},
  185. {'jā', 'じゃあ', 'ジャア'},
  186. {'chā', 'ちゃあ', 'チャア'},
  187. {'jā', 'ぢゃあ', 'ヂャア'},
  188. {'nyā', 'にゃあ', 'ニャア'},
  189. {'hyā', 'ひゃあ', 'ヒャア'},
  190. {'byā', 'びゃあ', 'ビャア'},
  191. {'pyā', 'ぴゃあ', 'ピャア'},
  192. {'myā', 'みゃあ', 'ミャア'},
  193. {'ryā', 'りゃあ', 'リャア'},
  194. {'kyū', 'きゅう', 'キュウ'},
  195. {'gyū', 'ぎゅう', 'ギュウ'},
  196. {'shū', 'しゅう', 'シュウ'},
  197. {'jū', 'じゅう', 'ジュウ'},
  198. {'chū', 'ちゅう', 'チュウ'},
  199. {'jū', 'ぢゅう', 'ヂュウ'},
  200. {'nyū', 'にゅう', 'ニュウ'},
  201. {'hyū', 'ひゅう', 'ヒュウ'},
  202. {'byū', 'びゅう', 'ビュウ'},
  203. {'pyū', 'ぴゅう', 'ピュウ'},
  204. {'myū', 'みゅう', 'ミュウ'},
  205. {'ryū', 'りゅう', 'リュウ'},
  206. {'kyō', 'きょう', 'キョウ'},
  207. {'gyō', 'ぎょう', 'ギョウ'},
  208. {'shō', 'しょう', 'ショウ'},
  209. {'jō', 'じょう', 'ジョウ'},
  210. {'chō', 'ちょう', 'チョウ'},
  211. {'jō', 'ぢょう', 'ヂョウ'},
  212. {'nyō', 'にょう', 'ニョウ'},
  213. {'hyō', 'ひょう', 'ヒョウ'},
  214. {'byō', 'びょう', 'ビョウ'},
  215. {'pyō', 'ぴょう', 'ピョウ'},
  216. {'myō', 'みょう', 'ミョウ'},
  217. {'ryō', 'りょう', 'リョウ'}
  218. }
  219. local sutegana = {
  220. {'la', 'ぁ', 'ァ'}, --小写假名
  221. {'li', 'ぃ', 'ィ'},
  222. {'lu', 'ぅ', 'ゥ'},
  223. {'le', 'ぇ', 'ェ'},
  224. {'lo', 'ぉ', 'ォ'},
  225. {'ltsu', 'っ', 'ッ'},
  226. {'lka', 'ゕ', 'ヵ'},
  227. {'lke', 'ゖ', 'ヶ'},
  228. {'lya', 'ゃ', 'ャ'},
  229. {'lyu', 'ゅ', 'ュ'},
  230. {'lyo', 'ょ', 'ョ'},
  231. {'lwa', 'ゎ', 'ヮ'},
  232. {'lku', 'ㇰ'}, --阿伊努语,朝鲜语和台湾话假名扩展,http://www.geocities.jp/aynuitak/kotoeri4_kanahenkan.htm
  233. {'lshi', 'ㇱ'},
  234. {'lsu', 'ㇲ'},
  235. {'lto', 'ㇳ'},
  236. {'ln', 'ㇴ'},
  237. {'lha', 'ㇵ'},
  238. {'lhi', 'ㇶ'},
  239. {'lfu', 'ㇷ'},
  240. {'lhe', 'ㇸ'},
  241. {'lho', 'ㇹ'},
  242. {'lp', 'ㇷ゚'},
  243. {'lm', 'ㇺ'},
  244. {'lra', 'ㇻ'},
  245. {'lri', 'ㇼ'},
  246. {'lru', 'ㇽ'},
  247. {'lre', 'ㇾ'},
  248. {'lro', 'ㇿ'}
  249. }
  250. local inputSub = { --输入辅助,该table中的替换规则在inputKana中具有最高优先级
  251. {'yi', 'い', 'イ'},
  252. {'wu', 'う', 'ウ'},
  253. {'wi', 'ゐ', 'ヰ'},
  254. {'we', 'ゑ', 'ヱ'},
  255. {'kwa', 'くぁ', 'クァ'},
  256. {'gwa', 'ぐぁ', 'グァ'},
  257. {'si', 'し', 'シ'},
  258. {'ji', 'じ', 'ジ'},
  259. {'zi', 'じ', 'ジ'},
  260. {'zu', 'ず', 'ズ'},
  261. {'ja', 'じゃ', 'ジャ'},
  262. {'ju', 'じゅ', 'ジュ'},
  263. {'jo', 'じょ', 'ジョ'},
  264. {'ti', 'ち', 'チ'},
  265. {'tu', 'つ', 'ツ'},
  266. {'tyu', 'ちゅ', 'チュ'},
  267. {'di', 'ぢ', 'ヂ'},
  268. {'du', 'づ', 'ヅ'},
  269. {'dyu', 'ぢゅ', 'ヂュ'},
  270. {'hu', 'ふ', 'フ'},
  271. {'va', 'ゔぁ', 'ヴァ'},
  272. {'vi', 'ゔぃ', 'ヴィ'},
  273. {'ve', 'ゔぇ', 'ヴェ'},
  274. {'vo', 'ゔぉ', 'ヴォ'},
  275. {'vye', 'ゔぇ', 'ヴェ'},
  276. {'wa', 'わ', 'ワ'},
  277. {'wo', 'を', 'ヲ'},
  278. {'wha', 'うぁ', 'ウァ'}, --罗马字输入表扩展,https://support.microsoft.com/ja-jp/help/883232
  279. {'whi', 'うぃ', 'ウィ'},
  280. {'whu', 'う', 'ウ'},
  281. {'whe', 'うぇ', 'ウェ'},
  282. {'who', 'うぉ', 'ウォ'},
  283. {'ca', 'か', 'カ'},
  284. {'cu', 'く', 'ク'},
  285. {'qu', 'く', 'ク'},
  286. {'co', 'こ', 'コ'},
  287. {'kyi', 'きぃ', 'キィ'},
  288. {'qya', 'くゃ', 'クャ'},
  289. {'qyu', 'くゅ', 'クュ'},
  290. {'qyo', 'くょ', 'クョ'},
  291. {'qwa', 'くぁ', 'クァ'},
  292. {'qa', 'くぁ', 'クァ'},
  293. {'qwi', 'くぃ', 'クィ'},
  294. {'qyi', 'くぃ', 'クィ'},
  295. {'qi', 'くぃ', 'クィ'},
  296. {'qwu', 'くぅ', 'クゥ'},
  297. {'kwu', 'くぅ', 'クゥ'},
  298. {'qwe', 'くぇ', 'クェ'},
  299. {'qye', 'くぇ', 'クェ'},
  300. {'qe', 'くぇ', 'クェ'},
  301. {'qwo', 'くぉ', 'クォ'},
  302. {'qo', 'くぉ', 'クォ'},
  303. {'gyi', 'ぎぃ', 'ギィ'},
  304. {'gwu', 'ぐぅ', 'グゥ'},
  305. {'ci', 'し', 'シ'},
  306. {'ce', 'せ', 'セ'},
  307. {'sya', 'しゃ', 'シャ'},
  308. {'syi', 'しぃ', 'シィ'},
  309. {'syu', 'しゅ', 'シュ'},
  310. {'sye', 'しぇ', 'シェ'},
  311. {'syo', 'しょ', 'ショ'},
  312. {'swa', 'すぁ', 'スァ'},
  313. {'swi', 'すぃ', 'スィ'},
  314. {'swu', 'すぅ', 'スゥ'},
  315. {'swe', 'すぇ', 'スェ'},
  316. {'swo', 'すぉ', 'スォ'},
  317. {'zya', 'じゃ', 'ジャ'},
  318. {'jya', 'じゃ', 'ジャ'},
  319. {'zyi', 'じぃ', 'ジィ'},
  320. {'jyi', 'じぃ', 'ジィ'},
  321. {'zyu', 'じゅ', 'ジュ'},
  322. {'jyu', 'じゅ', 'ジュ'},
  323. {'zye', 'じぇ', 'ジェ'},
  324. {'jye', 'じぇ', 'ジェ'},
  325. {'zyo', 'じょ', 'ジョ'},
  326. {'jyo', 'じょ', 'ジョ'},
  327. {'tya', 'ちゃ', 'チャ'},
  328. {'cya', 'ちゃ', 'チャ'},
  329. {'tyi', 'ちぃ', 'チィ'},
  330. {'cyi', 'ちぃ', 'チィ'},
  331. {'cyu', 'ちゅ', 'チュ'},
  332. {'tye', 'ちぇ', 'チェ'},
  333. {'cye', 'ちぇ', 'チェ'},
  334. {'tyo', 'ちょ', 'チョ'},
  335. {'cyo', 'ちょ', 'チョ'},
  336. {'tha', 'てゃ', 'テャ'},
  337. {'thi', 'てぃ', 'ティ'},
  338. {'thu', 'てゅ', 'テュ'},
  339. {'the', 'てぇ', 'テェ'},
  340. {'tho', 'てょ', 'テョ'},
  341. {'twa', 'とぁ', 'トァ'},
  342. {'twi', 'とぃ', 'トィ'},
  343. {'twu', 'とぅ', 'トゥ'},
  344. {'twe', 'とぇ', 'トェ'},
  345. {'two', 'とぉ', 'トォ'},
  346. {'dya', 'ぢゃ', 'ヂャ'},
  347. {'dyi', 'ぢぃ', 'ヂィ'},
  348. {'dye', 'ぢぇ', 'ヂェ'},
  349. {'dyo', 'ぢょ', 'ヂョ'},
  350. {'dha', 'でゃ', 'デャ'},
  351. {'dhi', 'でぃ', 'ディ'},
  352. {'dhu', 'でゅ', 'デュ'},
  353. {'dhe', 'でぇ', 'デェ'},
  354. {'dho', 'でょ', 'デョ'},
  355. {'dwa', 'どぁ', 'ドァ'},
  356. {'dwi', 'どぃ', 'ドィ'},
  357. {'dwu', 'どぅ', 'ドゥ'},
  358. {'dwe', 'どぇ', 'ドェ'},
  359. {'dwo', 'どぉ', 'ドォ'},
  360. {'nyi', 'にぃ', 'ニィ'},
  361. {'hyi', 'ひぃ', 'ヒィ'},
  362. {'fwa', 'ふぁ', 'ファ'},
  363. {'fwi', 'ふぃ', 'フィ'},
  364. {'fyi', 'ふぃ', 'フィ'},
  365. {'fwu', 'ふぅ', 'フゥ'},
  366. {'fwe', 'ふぇ', 'フェ'},
  367. {'fye', 'ふぇ', 'フェ'},
  368. {'fwo', 'ふぉ', 'フォ'},
  369. {'byi', 'びぃ', 'ビィ'},
  370. {'vyi', 'ゔぃ', 'ヴィ'},
  371. {'pyi', 'ぴぃ', 'ピィ'},
  372. {'myi', 'みぃ', 'ミィ'},
  373. {'ryi', 'りぃ', 'リィ'},
  374. {'nn', 'ん', 'ン'},
  375. {'xn', 'ん', 'ン'},
  376. {'xa', 'ぁ', 'ァ'}, --小写假名输入扩展
  377. {'xi', 'ぃ', 'ィ'},
  378. {'lyi', 'ぃ', 'ィ'},
  379. {'xyi', 'ぃ', 'ィ'},
  380. {'xu', 'ぅ', 'ゥ'},
  381. {'xe', 'ぇ', 'ェ'},
  382. {'lye', 'ぇ', 'ェ'},
  383. {'xye', 'ぇ', 'ェ'},
  384. {'xo', 'ぉ', 'ォ'},
  385. {'xka', 'ゕ', 'ヵ'},
  386. {'xke', 'ゖ', 'ヶ'},
  387. {'ltu', 'っ', 'ッ'},
  388. {'xtu', 'っ', 'ッ'},
  389. {'xtsu', 'っ', 'ッ'},
  390. {'xya', 'ゃ', 'ャ'},
  391. {'xyu', 'ゅ', 'ュ'},
  392. {'xyo', 'ょ', 'ョ'},
  393. {'xwa', 'ゎ', 'ヮ'},
  394. {'xku', 'ㇰ'}, --阿伊努语,朝鲜语和台湾话假名输入扩展
  395. {'xshi', 'ㇱ'},
  396. {'lsi', 'ㇱ'},
  397. {'xsi', 'ㇱ'},
  398. {'xsu', 'ㇲ'},
  399. {'xto', 'ㇳ'},
  400. {'xn', 'ㇴ'},
  401. {'lnu', 'ㇴ'},
  402. {'xnu', 'ㇴ'},
  403. {'xha', 'ㇵ'},
  404. {'xhi', 'ㇶ'},
  405. {'xfu', 'ㇷ'},
  406. {'lhu', 'ㇷ'},
  407. {'xhu', 'ㇷ'},
  408. {'xhe', 'ㇸ'},
  409. {'xho', 'ㇹ'},
  410. {'xp', 'ㇷ゚'},
  411. {'lpu', 'ㇷ゚'},
  412. {'xpu', 'ㇷ゚'},
  413. {'xm', 'ㇺ'},
  414. {'lmu', 'ㇺ'},
  415. {'xmu', 'ㇺ'},
  416. {'xra', 'ㇻ'},
  417. {'xri', 'ㇼ'},
  418. {'xru', 'ㇽ'},
  419. {'xre', 'ㇾ'},
  420. {'xro', 'ㇿ'}
  421. }
  422. function _main(args)
  423. local roma = args[1]
  424. local space = ''
  425. if args['s'] == '1' then
  426. space = ' '
  427. end
  428. roma = string.gsub(roma, "'", '/_delimit_/')
  429. for i=1, mw.ustring.len(roma) do
  430. local kana = mw.ustring.sub(roma, i, i)
  431. if mw.ustring.find(kana, '[っッんン]') then
  432. local next = mw.ustring.sub(roma, i + 1, i + 1)
  433. for k, v in ipairs(kanas) do
  434. for key, val in ipairs(v) do
  435. if kana == 'っ' or kana == 'ッ' then
  436. if next == val then
  437. local nextRomaFirst = string.sub(v[1], 1, 1)
  438. if string.find(nextRomaFirst, '[^an]') then
  439. roma = mw.ustring.gsub(roma, '[っッ]', nextRomaFirst, 1)
  440. end
  441. end
  442. end
  443. end
  444. end
  445. end
  446. end
  447. for i=1, mw.ustring.len(roma) do
  448. local kana = mw.ustring.sub(roma, i, i)
  449. local next = mw.ustring.sub(roma, i + 1, i + 1)
  450. if kana == 'ん' or kana == 'ン' then
  451. if mw.ustring.find(next, '[あいうえおアイウエオやゆよヤユヨ]') then
  452. local left = mw.ustring.sub(roma, 1, i - 1)
  453. local right = mw.ustring.sub(roma, i, -1)
  454. right = mw.ustring.gsub(right, '[んン]', "n'", 1)
  455. roma = left..right
  456. end
  457. end
  458. end
  459. function iter(str, table)
  460. for k, v in ipairs(table) do
  461. for ind, val in ipairs(v) do
  462. repeat
  463. if ind == 1 then break end
  464. str = mw.ustring.gsub(str, val, v[1]..space)
  465. until true
  466. end
  467. end
  468. return str
  469. end
  470. if args['s'] ~= '1' then
  471. roma = iter(roma, hebon)
  472. end
  473. roma = iter(roma, youon)
  474. roma = iter(roma, kanas)
  475. if args['s'] == '1' then
  476. roma = string.reverse(roma):gsub(space, '', 1):reverse()
  477. end
  478. roma = string.gsub(roma, 'cchi', 'tchi'):gsub('ccha', 'tcha'):gsub('cchu', 'tchu'):gsub('ccho', 'tcho')
  479. roma = mw.ustring.gsub(roma, '[っッ]', '')
  480. roma = mw.ustring.gsub(roma, 'a%-', 'ā'):gsub('i%-', 'ī'):gsub('u%-', 'ū'):gsub('e%-', 'ē'):gsub('o%-', 'ō')
  481. :gsub('aa', 'ā'):gsub('uu', 'ū'):gsub('ee', 'ē'):gsub('ou', 'ō'):gsub('oo', 'ō')
  482. roma = string.gsub(roma, '/_delimit_/', '')
  483. return roma
  484. end
  485. function _inputKana(args)
  486. for i, v in ipairs(args) do
  487. args[i] = mw.text.split(v, ' ')
  488. end
  489. function iter(frag, index, roma, tbe)
  490. for i, v in ipairs(tbe) do
  491. for i, value in ipairs(v) do
  492. if roma == value[1] then
  493. if frag[1] ~= 'k' then
  494. frag[index] = value[2]
  495. else
  496. frag[index] = value[3] or value[2]
  497. end
  498. return
  499. end
  500. end
  501. end
  502. end
  503. for i, frag in ipairs(args) do
  504. for index, roma in ipairs(frag) do
  505. iter(frag, index, roma, {
  506. inputSub, youon, kanas, sutegana
  507. })
  508. end
  509. end
  510. local str = ''
  511. for i, v in ipairs(args) do
  512. for i, v in ipairs(v) do
  513. str = str..v
  514. end
  515. end
  516. str = mw.ustring.gsub(str, '—', 'ー'):gsub('k', '')
  517. return str
  518. end
  519. function module.main(frame)
  520. local args = getArgs(frame, {wrappers='Template:Tja'})
  521. return _main(args)
  522. end
  523. function module.inputKana(frame)
  524. local args = getArgs(frame)
  525. return _inputKana(args)
  526. end
  527. return module