interscript 0.1.9 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +29 -0
  5. data/LICENSE.adoc +31 -0
  6. data/README.md +3 -0
  7. data/Rakefile +53 -0
  8. data/bin/console +14 -0
  9. data/bin/interscript +5 -0
  10. data/bin/maps_analyze_staging +168 -0
  11. data/bin/maps_debug_compilers +58 -0
  12. data/bin/maps_debug_ordering +88 -0
  13. data/bin/maps_debug_ruby_compile +24 -0
  14. data/bin/maps_debug_step_by_step +44 -0
  15. data/bin/maps_optimize_order +112 -0
  16. data/bin/maps_v1_analyze_regexps +45 -0
  17. data/bin/maps_v1_to_v2 +426 -0
  18. data/bin/setup +8 -0
  19. data/exe/interscript +6 -0
  20. data/interscript.gemspec +31 -0
  21. data/lib/interscript.rb +80 -135
  22. data/lib/interscript/command.rb +5 -5
  23. data/lib/interscript/compiler.rb +22 -0
  24. data/lib/interscript/compiler/javascript.rb +292 -0
  25. data/lib/interscript/compiler/ruby.rb +262 -0
  26. data/lib/interscript/dsl.rb +67 -0
  27. data/lib/interscript/dsl/aliases.rb +23 -0
  28. data/lib/interscript/dsl/document.rb +46 -0
  29. data/lib/interscript/dsl/group.rb +45 -0
  30. data/lib/interscript/dsl/group/parallel.rb +6 -0
  31. data/lib/interscript/dsl/items.rb +89 -0
  32. data/lib/interscript/dsl/metadata.rb +26 -0
  33. data/lib/interscript/dsl/stage.rb +6 -0
  34. data/lib/interscript/dsl/symbol_mm.rb +11 -0
  35. data/lib/interscript/dsl/tests.rb +12 -0
  36. data/lib/interscript/interpreter.rb +251 -0
  37. data/lib/interscript/node.rb +25 -0
  38. data/lib/interscript/node/alias_def.rb +15 -0
  39. data/lib/interscript/node/dependency.rb +13 -0
  40. data/lib/interscript/node/document.rb +45 -0
  41. data/lib/interscript/node/group.rb +34 -0
  42. data/lib/interscript/node/group/parallel.rb +9 -0
  43. data/lib/interscript/node/group/sequential.rb +2 -0
  44. data/lib/interscript/node/item.rb +52 -0
  45. data/lib/interscript/node/item/alias.rb +42 -0
  46. data/lib/interscript/node/item/any.rb +61 -0
  47. data/lib/interscript/node/item/capture.rb +50 -0
  48. data/lib/interscript/node/item/group.rb +51 -0
  49. data/lib/interscript/node/item/repeat.rb +40 -0
  50. data/lib/interscript/node/item/stage.rb +23 -0
  51. data/lib/interscript/node/item/string.rb +51 -0
  52. data/lib/interscript/node/metadata.rb +18 -0
  53. data/lib/interscript/node/rule.rb +6 -0
  54. data/lib/interscript/node/rule/funcall.rb +18 -0
  55. data/lib/interscript/node/rule/run.rb +15 -0
  56. data/lib/interscript/node/rule/sub.rb +65 -0
  57. data/lib/interscript/node/stage.rb +19 -0
  58. data/lib/interscript/node/tests.rb +15 -0
  59. data/lib/interscript/stdlib.rb +211 -0
  60. data/lib/interscript/utils/regexp_converter.rb +283 -0
  61. data/lib/interscript/version.rb +1 -1
  62. data/requirements.txt +1 -0
  63. metadata +73 -458
  64. data/README.adoc +0 -296
  65. data/aliases.json +0 -1
  66. data/lib/g2pwrapper.py +0 -34
  67. data/lib/interscript/fs.rb +0 -96
  68. data/lib/interscript/mapping.rb +0 -144
  69. data/lib/interscript/opal.rb +0 -196
  70. data/lib/interscript/opal/entrypoint.rb +0 -20
  71. data/lib/interscript/opal/exports.rb +0 -11
  72. data/lib/interscript/opal/maps.js.erb +0 -8
  73. data/lib/model-7 +0 -0
  74. data/lib/tha-pt-b-7 +0 -0
  75. data/maps/acadsin-zho-Hani-Latn-2002.yaml +0 -38916
  76. data/maps/alalc-amh-Ethi-Latn-1997.yaml +0 -513
  77. data/maps/alalc-amh-Ethi-Latn-2011.yaml +0 -138
  78. data/maps/alalc-ara-Arab-Latn-1997.yaml +0 -1287
  79. data/maps/alalc-asm-Deva-Latn-1997.yaml +0 -259
  80. data/maps/alalc-asm-Deva-Latn-2012.yaml +0 -55
  81. data/maps/alalc-aze-Arab-Latn-1997.yaml +0 -376
  82. data/maps/alalc-aze-Cyrl-Latn-1997.yaml +0 -145
  83. data/maps/alalc-bel-Cyrl-Latn-1997.yaml +0 -129
  84. data/maps/alalc-ben-Beng-Latn-1997.yaml +0 -291
  85. data/maps/alalc-ben-Beng-Latn-2017.yaml +0 -130
  86. data/maps/alalc-bul-Cyrl-Latn-1997.yaml +0 -98
  87. data/maps/alalc-div-Thaa-Latn-1997.yaml +0 -211
  88. data/maps/alalc-ell-Grek-Latn-1997.yaml +0 -628
  89. data/maps/alalc-ell-Grek-Latn-2010.yaml +0 -626
  90. data/maps/alalc-guj-Gujr-Latn-1997.yaml +0 -266
  91. data/maps/alalc-guj-Gujr-Latn-2011.yaml +0 -64
  92. data/maps/alalc-hin-Deva-Latn-1997.yaml +0 -303
  93. data/maps/alalc-hin-Deva-Latn-2011.yaml +0 -65
  94. data/maps/alalc-kan-Kana-Latn-1997.yaml +0 -274
  95. data/maps/alalc-kan-Kana-Latn-2011.yaml +0 -63
  96. data/maps/alalc-kat-Geok-Latn-1997.yaml +0 -111
  97. data/maps/alalc-kat-Geor-Latn-1997.yaml +0 -150
  98. data/maps/alalc-kor-Hang-Latn-1997.yaml +0 -98
  99. data/maps/alalc-mal-Mlym-Latn-1997.yaml +0 -303
  100. data/maps/alalc-mal-Mlym-Latn-2012.yaml +0 -73
  101. data/maps/alalc-mar-Deva-Latn-1997.yaml +0 -189
  102. data/maps/alalc-mar-Deva-Latn-2011.yaml +0 -45
  103. data/maps/alalc-mkd-Cyrl-Latn-1997.yaml +0 -114
  104. data/maps/alalc-mkd-Cyrl-Latn-2013.yaml +0 -103
  105. data/maps/alalc-mon-Cyrl-Latn-1997.yaml +0 -220
  106. data/maps/alalc-ori-Orya-Latn-1997.yaml +0 -284
  107. data/maps/alalc-ori-Orya-Latn-2011.yaml +0 -67
  108. data/maps/alalc-pan-Guru-Latn-1997.yaml +0 -256
  109. data/maps/alalc-pan-Guru-Latn-2011.yaml +0 -78
  110. data/maps/alalc-per-Arab-Latn-1997.yaml +0 -375
  111. data/maps/alalc-pli-Deva-Latn-2012.yaml +0 -144
  112. data/maps/alalc-pra-Deva-Latn-2012.yaml +0 -47
  113. data/maps/alalc-rus-Cyrl-Latn-1997.yaml +0 -225
  114. data/maps/alalc-rus-Cyrl-Latn-2012.yaml +0 -162
  115. data/maps/alalc-san-Deva-Latn-2012.yaml +0 -241
  116. data/maps/alalc-sin-Sinh-Latn-1997.yaml +0 -292
  117. data/maps/alalc-sin-Sinh-Latn-2011.yaml +0 -71
  118. data/maps/alalc-srp-Cyrl-Latn-1997.yaml +0 -118
  119. data/maps/alalc-srp-Cyrl-Latn-2013.yaml +0 -135
  120. data/maps/alalc-tam-Taml-Latn-1997.yaml +0 -62
  121. data/maps/alalc-tam-Taml-Latn-2011.yaml +0 -58
  122. data/maps/alalc-tel-Telu-Latn-1997.yaml +0 -284
  123. data/maps/alalc-tel-Telu-Latn-2011.yaml +0 -64
  124. data/maps/alalc-ukr-Cyrl-Latn-1997.yaml +0 -145
  125. data/maps/alalc-ukr-Cyrl-Latn-2011.yaml +0 -16
  126. data/maps/apcbg-bul-Cyrl-Latn-1995.yaml +0 -283
  127. data/maps/az-aze-Cyrl-Latn-1939.yaml +0 -105
  128. data/maps/az-aze-Cyrl-Latn-1958.yaml +0 -45
  129. data/maps/bas-rus-Cyrl-Latn-2017-bss.yaml +0 -174
  130. data/maps/bas-rus-Cyrl-Latn-2017-oss.yaml +0 -169
  131. data/maps/bgn-jpn-Hrkt-Latn-1962.yaml +0 -292
  132. data/maps/bgn-kor-Hang-Latn-1943.yaml +0 -35
  133. data/maps/bgn-kor-Kore-Latn-1943.yaml +0 -31
  134. data/maps/bgna-bul-Cyrl-Latn-2006.yaml +0 -208
  135. data/maps/bgna-bul-Cyrl-Latn-2009.yaml +0 -208
  136. data/maps/bgnpcgn-amh-Ethi-Latn-1967.yaml +0 -532
  137. data/maps/bgnpcgn-ara-Arab-Latn-1956.yaml +0 -598
  138. data/maps/bgnpcgn-arm-Armn-Latn-1981.yaml +0 -108
  139. data/maps/bgnpcgn-aze-Cyrl-Latn-1993.yaml +0 -111
  140. data/maps/bgnpcgn-bak-Cyrl-Latn-2007.yaml +0 -188
  141. data/maps/bgnpcgn-bal-Arab-Latn-2008.yaml +0 -329
  142. data/maps/bgnpcgn-bel-Cyrl-Latn-1979.yaml +0 -289
  143. data/maps/bgnpcgn-bul-Cyrl-Latn-1952.yaml +0 -119
  144. data/maps/bgnpcgn-bul-Cyrl-Latn-2013.yaml +0 -42
  145. data/maps/bgnpcgn-che-Cyrl-Latn-2008.yaml +0 -184
  146. data/maps/bgnpcgn-div-Thaa-Latn-1988.yaml +0 -75
  147. data/maps/bgnpcgn-ell-Grek-Latn-1962.yaml +0 -705
  148. data/maps/bgnpcgn-ell-Grek-Latn-1996.yaml +0 -23
  149. data/maps/bgnpcgn-far-Latn-Latn-1964.yaml +0 -28
  150. data/maps/bgnpcgn-fas-Arab-Latn-1956.yaml +0 -96
  151. data/maps/bgnpcgn-isl-Latn-Latn-1964.yaml +0 -37
  152. data/maps/bgnpcgn-jpn-Hrkt-Latn-1976.yaml +0 -257
  153. data/maps/bgnpcgn-kat-Geor-Latn-1981.yaml +0 -131
  154. data/maps/bgnpcgn-kat-Geor-Latn-2009.yaml +0 -42
  155. data/maps/bgnpcgn-kaz-Cyrl-Latn-1979.yaml +0 -247
  156. data/maps/bgnpcgn-kir-Cyrl-Latn-1979.yaml +0 -218
  157. data/maps/bgnpcgn-kor-Hang-Latn-kn-1945.yaml +0 -253
  158. data/maps/bgnpcgn-kor-Hang-Latn-rok-2011.yaml +0 -48
  159. data/maps/bgnpcgn-kor-Kore-Latn-rok-2011.yaml +0 -48
  160. data/maps/bgnpcgn-kur-Arab-Latn-2007.yaml +0 -249
  161. data/maps/bgnpcgn-mkd-Cyrl-Latn-1981.yaml +0 -163
  162. data/maps/bgnpcgn-mkd-Cyrl-Latn-2013.yaml +0 -190
  163. data/maps/bgnpcgn-mon-Cyrl-Latn-1964.yaml +0 -223
  164. data/maps/bgnpcgn-nep-Deva-Latn-2011.yaml +0 -230
  165. data/maps/bgnpcgn-per-Arab-Latn-1958.yaml +0 -338
  166. data/maps/bgnpcgn-prs-Arab-Latn-2007.yaml +0 -673
  167. data/maps/bgnpcgn-prs-Arab-Latn-yaghoubi.yaml +0 -459
  168. data/maps/bgnpcgn-pus-Arab-Latn-1968.yaml +0 -377
  169. data/maps/bgnpcgn-rue-Cyrl-Latn-2016.yaml +0 -168
  170. data/maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml +0 -318
  171. data/maps/bgnpcgn-srp-Cyrl-Latn-1962.yaml +0 -73
  172. data/maps/bgnpcgn-srp-Cyrl-Latn-2005.yaml +0 -170
  173. data/maps/bgnpcgn-tat-Cyrl-Latn-2007.yaml +0 -220
  174. data/maps/bgnpcgn-tgk-Cyrl-Latn-1994.yaml +0 -240
  175. data/maps/bgnpcgn-ukr-Cyrl-Latn-1965.yaml +0 -166
  176. data/maps/bgnpcgn-ukr-Cyrl-Latn-2019.yaml +0 -119
  177. data/maps/bgnpcgn-urd-Arab-Latn-2007.yaml +0 -459
  178. data/maps/bgnpcgn-uzb-Cyrl-Latn-1979.yaml +0 -127
  179. data/maps/bgnpcgn-uzb-Cyrl-Latn-2000.yaml +0 -82
  180. data/maps/bgnpcgn-zho-Hans-Latn-1979.yaml +0 -7456
  181. data/maps/bis-asm-Beng-Latn-13194-1991.yaml +0 -159
  182. data/maps/bis-ben-Beng-Latn-13194-1991.yaml +0 -156
  183. data/maps/bis-dev-Deva-Latn-13194-1991.yaml +0 -184
  184. data/maps/bis-guj-Gujr-Latn-13194-1991.yaml +0 -181
  185. data/maps/bis-kan-Kana-Latn-13194-1991.yaml +0 -173
  186. data/maps/bis-mlm-Mlym-Latn-13194-1991.yaml +0 -176
  187. data/maps/bis-ori-Orya-Latn-13194-1991.yaml +0 -175
  188. data/maps/bis-pnj-Guru-Latn-13194-1991.yaml +0 -175
  189. data/maps/bis-tel-Telu-Latn-13194-1991.yaml +0 -170
  190. data/maps/bis-tml-Taml-Latn-13194-1991.yaml +0 -155
  191. data/maps/by-bel-Cyrl-Latn-1998.yaml +0 -172
  192. data/maps/by-bel-Cyrl-Latn-2007.yaml +0 -115
  193. data/maps/din-grc-Grek-Latn-31634-2011-t1.yaml +0 -899
  194. data/maps/din-hin-Deva-Latn-33904-2018.yaml +0 -100
  195. data/maps/din-kat-Geor-Latn-32707-2010.yaml +0 -145
  196. data/maps/din-mar-Deva-Latn-33904-2018.yaml +0 -84
  197. data/maps/din-nep-Deva-Latn-33904-2018.yaml +0 -119
  198. data/maps/din-pli-Deva-Latn-33904-2018.yaml +0 -75
  199. data/maps/din-pra-Deva-Latn-33904-2018.yaml +0 -63
  200. data/maps/din-san-Deva-Latn-33904-2018.yaml +0 -338
  201. data/maps/din-tam-Taml-Latn-33903-2016.yaml +0 -213
  202. data/maps/dos-nep-Deva-Latn-1997.yaml +0 -47
  203. data/maps/elot-ell-Grek-Latn-743-1982-tl.yaml +0 -684
  204. data/maps/elot-ell-Grek-Latn-743-1982-ts.yaml +0 -680
  205. data/maps/elot-ell-Grek-Latn-743-2001-tl.yaml +0 -19
  206. data/maps/elot-ell-Grek-Latn-743-2001-ts.yaml +0 -31
  207. data/maps/ggg-kat-Geor-Latn-2002.yaml +0 -92
  208. data/maps/gki-bel-Cyrl-Latn-1992.yaml +0 -33
  209. data/maps/gki-bel-Cyrl-Latn-2000.yaml +0 -201
  210. data/maps/gost-rus-Cyrl-Latn-16876-71-1983.yaml +0 -190
  211. data/maps/gost-rus-Cyrl-Latn-7.79-2000-2002.yaml +0 -157
  212. data/maps/hk-yue-Hani-Latn-1888.yaml +0 -38497
  213. data/maps/icao-bel-Cyrl-Latn-9303.yaml +0 -136
  214. data/maps/icao-bul-Cyrl-Latn-9303.yaml +0 -118
  215. data/maps/icao-fas-Arab-Latn-9303.yaml +0 -103
  216. data/maps/icao-heb-Hebr-Latn-9303.yaml +0 -151
  217. data/maps/icao-mkd-Cyrl-Latn-9303.yaml +0 -117
  218. data/maps/icao-rus-Cyrl-Latn-9303.yaml +0 -117
  219. data/maps/icao-srp-Cyrl-Latn-9303.yaml +0 -117
  220. data/maps/icao-ukr-Cyrl-Latn-9303.yaml +0 -119
  221. data/maps/iso-ara-Arab-Latn-233-1984.yaml +0 -323
  222. data/maps/iso-asm-Beng-Latn-15919-2001.yaml +0 -75
  223. data/maps/iso-ben-Beng-Latn-15919-2001.yaml +0 -175
  224. data/maps/iso-ell-Grek-Latn-843-1997-t1.yaml +0 -613
  225. data/maps/iso-ell-Grek-Latn-843-1997-t2.yaml +0 -44
  226. data/maps/iso-guj-Gujr-Latn-15919-2001.yaml +0 -220
  227. data/maps/iso-hin-Deva-Latn-15919-2001.yaml +0 -87
  228. data/maps/iso-inc-Deva-Latn-15919-2001.yaml +0 -61
  229. data/maps/iso-jpn-Hrkt-Latn-3602-1989.yaml +0 -66
  230. data/maps/iso-kan-Kana-Latn-15919-2001.yaml +0 -220
  231. data/maps/iso-kat-Geor-Latn-9984-1996.yaml +0 -145
  232. data/maps/iso-kor-Hang-Latn-1996-method1.yaml +0 -240
  233. data/maps/iso-kor-Hang-Latn-1996-method2.yaml +0 -226
  234. data/maps/iso-mal-Mlym-Latn-15919-2001.yaml +0 -281
  235. data/maps/iso-mar-Deva-Latn-15919-2001.yaml +0 -75
  236. data/maps/iso-nep-Deva-Latn-15919-2001.yaml +0 -87
  237. data/maps/iso-ori-Orya-Latn-15919-2001.yaml +0 -193
  238. data/maps/iso-pan-Guru-Latn-15919-2001.yaml +0 -222
  239. data/maps/iso-pli-Beng-Latn-15919-2001.yaml +0 -73
  240. data/maps/iso-pli-Deva-Latn-15919-2001.yaml +0 -74
  241. data/maps/iso-pli-Sinh-Latn-15919-2001.yaml +0 -219
  242. data/maps/iso-pli-Thai-Latn-15919-2001.yaml +0 -55
  243. data/maps/iso-pra-Deva-Latn-15919-2001.yaml +0 -59
  244. data/maps/iso-prs-Arab-Latn-233-3-1999.yaml +0 -366
  245. data/maps/iso-rus-Cyrl-Latn-9-1995.yaml +0 -271
  246. data/maps/iso-san-Deva-Latn-15919-2001.yaml +0 -220
  247. data/maps/iso-tam-Taml-Latn-15919-2001.yaml +0 -159
  248. data/maps/iso-tel-Telu-Latn-15919-2001.yaml +0 -220
  249. data/maps/iso-tha-Thai-Latn-11940-1998.yaml +0 -109
  250. data/maps/kp-kor-Hang-Latn-2002.yaml +0 -909
  251. data/maps/lshk-yue-Hani-Latn-jyutping-1993.yaml +0 -44820
  252. data/maps/masm-mon-Cyrl-Latn-5217-2012.yaml +0 -163
  253. data/maps/masm-mon-Latn-Cyrl-5217-2012.yaml +0 -200
  254. data/maps/mext-jpn-Hrkt-Latn-1954.yaml +0 -411
  255. data/maps/moct-kor-Hang-Latn-2000.yaml +0 -807
  256. data/maps/mofa-jpn-Hrkt-Latn-1989.yaml +0 -541
  257. data/maps/mv-div-Thaa-Latn-1987.yaml +0 -200
  258. data/maps/mvd-bel-Cyrl-Latn-2008.yaml +0 -225
  259. data/maps/mvd-bel-Cyrl-Latn-2010.yaml +0 -63
  260. data/maps/mvd-rus-Cyrl-Latn-2008.yaml +0 -109
  261. data/maps/mvd-rus-Cyrl-Latn-2010.yaml +0 -37
  262. data/maps/odni-ara-Arab-Latn-2004.yaml +0 -137
  263. data/maps/odni-ara-Arab-Latn-2015.yaml +0 -315
  264. data/maps/odni-aze-Cyrl-Latn-2015.yaml +0 -144
  265. data/maps/odni-bel-Cyrl-Latn-2015.yaml +0 -148
  266. data/maps/odni-bul-Cyrl-Latn-2005.yaml +0 -90
  267. data/maps/odni-bul-Cyrl-Latn-2015.yaml +0 -96
  268. data/maps/odni-che-Cyrl-Latn-2015.yaml +0 -169
  269. data/maps/odni-fas-Arab-Latn-2004.yaml +0 -276
  270. data/maps/odni-fas-Arab-Latn-2015.yaml +0 -406
  271. data/maps/odni-hin-Deva-Latn-2004.yaml +0 -182
  272. data/maps/odni-hin-Deva-Latn-2015.yaml +0 -258
  273. data/maps/odni-kat-Geor-Latn-2015.yaml +0 -87
  274. data/maps/odni-kaz-Cyrl-Latn-2015.yaml +0 -148
  275. data/maps/odni-kir-Cyrl-Latn-2015.yaml +0 -136
  276. data/maps/odni-kor-Hang-Latn-2015.yaml +0 -375
  277. data/maps/odni-mkd-Cyrl-Latn-2005.yaml +0 -21
  278. data/maps/odni-mkd-Cyrl-Latn-2015.yaml +0 -122
  279. data/maps/odni-prs-Arab-Latn-2004.yaml +0 -123
  280. data/maps/odni-prs-Arab-Latn-2015.yaml +0 -228
  281. data/maps/odni-rus-Cyrl-Latn-2015.yaml +0 -77
  282. data/maps/odni-srp-Cyrl-Latn-2005.yaml +0 -36
  283. data/maps/odni-srp-Cyrl-Latn-2015.yaml +0 -129
  284. data/maps/odni-tat-Cyrl-Latn-2015.yaml +0 -142
  285. data/maps/odni-tgk-Cyrl-Latn-2015.yaml +0 -148
  286. data/maps/odni-tuk-Cyrl-Latn-2015.yaml +0 -170
  287. data/maps/odni-uig-Cyrl-Latn-2015.yaml +0 -138
  288. data/maps/odni-ukr-Cyrl-Latn-2015.yaml +0 -161
  289. data/maps/odni-urd-Arab-Latn-2015.yaml +0 -221
  290. data/maps/odni-uzb-Cyrl-Latn-2015.yaml +0 -166
  291. data/maps/royin-tha-Thai-Latn-1939-generic.yaml +0 -90
  292. data/maps/royin-tha-Thai-Latn-1968.yaml +0 -183
  293. data/maps/royin-tha-Thai-Latn-1999-chained.yaml +0 -180
  294. data/maps/royin-tha-Thai-Latn-1999.yaml +0 -80
  295. data/maps/sac-zho-Hans-Latn-1979.yaml +0 -24763
  296. data/maps/sasm-mon-Mong-Latn-general-1978.yaml +0 -389
  297. data/maps/sasm-mon-Mong-Latn-phonetic-1978.yaml +0 -354
  298. data/maps/ses-ara-Arab-Latn-1930.yaml +0 -283
  299. data/maps/stategeocadastre-ukr-Cyrl-Latn-1993.yaml +0 -222
  300. data/maps/ua-ukr-Cyrl-Latn-1996.yaml +0 -197
  301. data/maps/ua-ukr-Cyrl-Latn-2007.yaml +0 -75
  302. data/maps/ua-ukr-Cyrl-Latn-2010.yaml +0 -192
  303. data/maps/un-amh-Ethi-Latn-2016.yaml +0 -602
  304. data/maps/un-ara-Arab-Latn-1971.yaml +0 -139
  305. data/maps/un-ara-Arab-Latn-1972.yaml +0 -159
  306. data/maps/un-ara-Arab-Latn-2017.yaml +0 -420
  307. data/maps/un-asm-Beng-Latn-1972.yaml +0 -223
  308. data/maps/un-bel-Cyrl-Latn-2007.yaml +0 -114
  309. data/maps/un-ben-Beng-Latn-2016.yaml +0 -534
  310. data/maps/un-ell-Grek-Latn-1987-phonetic.yaml +0 -780
  311. data/maps/un-ell-Grek-Latn-1987-tl.yaml +0 -31
  312. data/maps/un-ell-Grek-Latn-1987-ts.yaml +0 -19
  313. data/maps/un-guj-Gujr-Latn-1972.yaml +0 -229
  314. data/maps/un-hin-Deva-Latn-2016.yaml +0 -316
  315. data/maps/un-kan-Kana-Latn-2016.yaml +0 -254
  316. data/maps/un-mal-Mlym-Latn-1972.yaml +0 -251
  317. data/maps/un-mar-Deva-Latn-2016.yaml +0 -102
  318. data/maps/un-mon-Mong-Latn-general-2013.yaml +0 -264
  319. data/maps/un-mon-Mong-Latn-phonetic-2013.yaml +0 -264
  320. data/maps/un-nep-Deva-Latn-1972.yaml +0 -269
  321. data/maps/un-nep-Deva-Latn-2013.yaml +0 -74
  322. data/maps/un-ori-Orya-Latn-1972.yaml +0 -247
  323. data/maps/un-pan-Guru-Latn-1972.yaml +0 -402
  324. data/maps/un-prs-Arab-Latn-1967.yaml +0 -236
  325. data/maps/un-rus-Cyrl-Latn-1987.yaml +0 -166
  326. data/maps/un-tam-Taml-Latn-1972.yaml +0 -194
  327. data/maps/un-tel-Telu-Latn-1972.yaml +0 -270
  328. data/maps/un-ukr-Cyrl-Latn-1998.yaml +0 -53
  329. data/maps/un-ukr-Cyrl-Latn-2012.yaml +0 -162
  330. data/maps/un-urd-Arab-Latn-1972.yaml +0 -405
  331. data/maps/var-amh-Ethi-Latn-eae-2003.yaml +0 -466
  332. data/maps/var-gez-Ethi-Latn-eae-2003.yaml +0 -76
  333. data/maps/var-hin-Deva-Latn-hunterian-1872.yaml +0 -221
  334. data/maps/var-jpn-Hrkt-Latn-hepburn-1886.yaml +0 -406
  335. data/maps/var-jpn-Hrkt-Latn-hepburn-1954.yaml +0 -386
  336. data/maps/var-kor-Hang-Hang-jamo.yaml +0 -11193
  337. data/maps/var-kor-Hang-Latn-mr-1939.yaml +0 -1054
  338. data/maps/var-kor-Kore-Hang-2013.yaml +0 -59754
  339. data/maps/var-kor-Kore-Latn-mr-1939.yaml +0 -36
  340. data/maps/var-mar-Deva-Latn-hunterian-1872.yaml +0 -43
  341. data/maps/var-mon-Mong-Latn-1930.yaml +0 -102
  342. data/maps/var-mon-Mong-Latn-lessing.yaml +0 -272
  343. data/maps/var-mon-Mong-Latn-vpmc.yaml +0 -274
  344. data/maps/var-pra-Deva-Latn-iast-1912.yaml +0 -30
  345. data/maps/var-san-Deva-Latn-iast-1912.yaml +0 -149
  346. data/maps/var-tha-Thai-Thai-phonemic.yaml +0 -59
  347. data/maps/var-tha-Thai-Zsym-ipa.yaml +0 -301
  348. data/maps/var-zho-Hani-Latn-wd-1979.yaml +0 -38912
  349. data/spec/interscript/filenames_spec.rb +0 -21
  350. data/spec/interscript/mapping_spec.rb +0 -42
  351. data/spec/interscript_spec.rb +0 -37
  352. data/spec/spec_helper.rb +0 -3
@@ -0,0 +1,6 @@
1
+ class Interscript::DSL::Group::Parallel < Interscript::DSL::Group
2
+ def initialize(&block)
3
+ @node = Interscript::Node::Group::Parallel.new
4
+ self.instance_exec(&block)
5
+ end
6
+ end
@@ -0,0 +1,89 @@
1
+ module Interscript::DSL::Items
2
+ include Interscript::DSL::SymbolMM
3
+
4
+ def method_missing sym, *args, **kwargs, &block
5
+ super if args.length > 0
6
+ super if kwargs.length > 0
7
+ super if sym.to_s =~ /[?!=]\z/
8
+ super unless sym.to_s =~ /\A[\w\d]+\z/
9
+ super if block_given?
10
+
11
+ Interscript::Node::Item::Alias.new(sym)
12
+ end
13
+
14
+ def any(*chars)
15
+ puts "any(#{chars.inspect}) from #{self.inspect}" if $DEBUG
16
+ Interscript::Node::Item::Any.new(*chars)
17
+ end
18
+
19
+ # a?
20
+ def maybe(*chars)
21
+ puts "maybe(#{chars.inspect}) from #{self.inspect}" if $DEBUG
22
+ Interscript::Node::Item::Maybe.new(*chars)
23
+ end
24
+
25
+ def maybe_some(*chars)
26
+ puts "maybe_some(#{chars.inspect}) from #{self.inspect}" if $DEBUG
27
+ Interscript::Node::Item::MaybeSome.new(*chars)
28
+ end
29
+
30
+ def some(*chars)
31
+ puts "some(#{chars.inspect}) from #{self.inspect}" if $DEBUG
32
+ Interscript::Node::Item::Some.new(*chars)
33
+ end
34
+
35
+ # (...)
36
+ def capture(expr)
37
+ puts "capture(#{expr.inspect}) from #{self.inspect}" if $DEBUG
38
+ Interscript::Node::Item::CaptureGroup.new(expr)
39
+ end
40
+
41
+ # \1
42
+ def ref(int)
43
+ puts "ref(#{int.inspect}) from #{self.inspect}" if $DEBUG
44
+ Interscript::Node::Item::CaptureRef.new(int)
45
+ end
46
+
47
+ # Implementation of `map.x`
48
+ def map; Interscript::DSL::Items::Maps; end
49
+
50
+ # Implementation of `stage.x`
51
+ def stage; Stages.new; end
52
+
53
+ # Implementation of `map.x`
54
+ module Maps
55
+ class << self
56
+ # Select a remote map
57
+ def [] map
58
+ Symbol === map or raise TypeError, "A map name must be a Symbol, not #{alias_name.class}"
59
+ Map.new(map)
60
+ end
61
+ alias method_missing []
62
+ end
63
+ end
64
+
65
+ # Implementation of `map.x.aliasname` and `map.x.stage.stagename`
66
+ class Map
67
+ def initialize name; @name = name; end
68
+
69
+ # Implementation of `map.x.aliasname`
70
+ def [] alias_name
71
+ Symbol === alias_name or raise TypeError, "An alias name must be a Symbol, not #{alias_name.class}"
72
+ Interscript::Node::Item::Alias.new(alias_name, map: @name)
73
+ end
74
+ alias method_missing []
75
+
76
+ # Implementation of `map.x.stage.stagename`
77
+ def stage; Stages.new(@name); end
78
+ end
79
+
80
+ # Implementation of `map.x.stage.stagename` and `stage.stagename`
81
+ class Stages
82
+ def initialize map=nil; @map = map; end
83
+
84
+ def [] stage
85
+ Interscript::Node::Item::Stage.new(stage, map: @map)
86
+ end
87
+ alias method_missing []
88
+ end
89
+ end
@@ -0,0 +1,26 @@
1
+ class Interscript::DSL::Metadata
2
+ attr_accessor :node
3
+
4
+ def initialize(yaml: false, &block)
5
+ raise ArgumentError, "Can't evaluate metadata from Ruby context" unless yaml
6
+ @node = Interscript::Node::MetaData.new
7
+ self.instance_exec(&block)
8
+ end
9
+
10
+ %i{authority_id id language source_script
11
+ destination_script name url creation_date
12
+ adoption_date description character notes
13
+ source confirmation_date}.each do |sym|
14
+ define_method sym do |stuff|
15
+ @node[sym] = stuff
16
+ end
17
+ end
18
+
19
+ %i{special_rules original_description original_notes
20
+ implementation_notes}.each do |sym|
21
+ define_method sym do |stuff|
22
+ warn "Metadata key #{sym} is non-standard"
23
+ @node[sym] = stuff
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ class Interscript::DSL::Stage < Interscript::DSL::Group
2
+ def initialize(name = :main, &block)
3
+ @node = Interscript::Node::Stage.new(name)
4
+ self.instance_exec(&block)
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ module Interscript::DSL::SymbolMM
2
+ def method_missing sym, *args, **kwargs, &block
3
+ super if args.length > 0
4
+ super if kwargs.length > 0
5
+ super if sym.to_s =~ /[?!=]\z/
6
+ super unless sym.to_s =~ /\A[\w\d]+\z/
7
+ super if block_given?
8
+
9
+ sym.to_sym
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ class Interscript::DSL::Tests
2
+ attr_accessor :node
3
+
4
+ def initialize(&block)
5
+ @node = Interscript::Node::Tests.new
6
+ self.instance_exec(&block)
7
+ end
8
+
9
+ def test(from,to)
10
+ @node << [from, to]
11
+ end
12
+ end
@@ -0,0 +1,251 @@
1
+ class Interscript::Interpreter < Interscript::Compiler
2
+ attr_accessor :map
3
+ def compile(map, _:nil)
4
+ @map = map
5
+ self
6
+ end
7
+
8
+ def call(str, stage=:main, each: false, &block)
9
+ stage = @map.stages[stage]
10
+ s =
11
+ if each
12
+ e = Enumerator.new do |yielder|
13
+ options = []
14
+ options_set = false
15
+ choices = nil
16
+
17
+ i = 0
18
+
19
+ loop do
20
+ result = nil
21
+
22
+ f = Fiber.new do
23
+ $select_nth_string = true
24
+ result = Stage.new(@map, str).execute_rule(stage)
25
+ $select_nth_string = false
26
+ Fiber.yield(:end)
27
+ end
28
+
29
+ iter = 0
30
+
31
+ loop do
32
+ break if f.resume == :end
33
+ # hash is unused for now... some problems may arise in certain
34
+ # scenarios that are not a danger right now, but i'm genuinely
35
+ # unsure how it can be handled.
36
+ #
37
+ # This scenario is described in a commented out test.
38
+ type, value, hash = f.resume
39
+ if options_set
40
+ f.resume(choices[i][iter])
41
+ else
42
+ options[iter] = value
43
+ f.resume(0)
44
+ end
45
+ iter += 1
46
+ end
47
+
48
+ unless options_set
49
+ options_set = true
50
+
51
+ opts = options.map { |i| (0...i).to_a }
52
+ choices = opts[0].product(*opts[1..-1])
53
+ end
54
+
55
+ yielder.yield(result)
56
+
57
+ i += 1
58
+ break if i == choices.length
59
+ end
60
+ end
61
+
62
+ if block_given?
63
+ e.each(&block)
64
+ else
65
+ e
66
+ end
67
+ else
68
+ Stage.new(@map, str).execute_rule(stage)
69
+ end
70
+ end
71
+
72
+ class Stage
73
+ def initialize(map, str)
74
+ @str = str
75
+ @map = map
76
+ end
77
+
78
+ def execute_rule r
79
+ case r
80
+ when Interscript::Node::Group::Parallel
81
+ if r.cached_tree
82
+ @str = Interscript::Stdlib.parallel_replace_tree(@str, r.cached_tree)
83
+ elsif r.subs_regexp && r.subs_replacements
84
+ if $DEBUG_RE
85
+ @str = Interscript::Stdlib.parallel_regexp_gsub_debug(@str, r.subs_regexp, r.subs_replacements)
86
+ else
87
+ @str = Interscript::Stdlib.parallel_regexp_gsub(@str, r.subs_regexp, r.subs_replacements)
88
+ end
89
+ else
90
+ begin
91
+ # Try to build a tree
92
+ subs_array = []
93
+ r.children.each do |i|
94
+ raise ArgumentError, "Can't parallelize #{i.class}" unless Interscript::Node::Rule::Sub === i
95
+ raise ArgumentError, "Can't parallelize rules with :before" if i.before
96
+ raise ArgumentError, "Can't parallelize rules with :after" if i.after
97
+ raise ArgumentError, "Can't parallelize rules with :not_before" if i.not_before
98
+ raise ArgumentError, "Can't parallelize rules with :not_after" if i.not_after
99
+ subs_array << [build_item(i.from, :par), build_item(i.to, :parstr)]
100
+ end
101
+ tree = Interscript::Stdlib.parallel_replace_compile_tree(subs_array) #.sort_by{|k,v| -k.length})
102
+ @str = Interscript::Stdlib.parallel_replace_tree(@str, tree)
103
+ r.cached_tree = tree
104
+ # $using_tree = true
105
+ rescue
106
+ # $using_tree = false
107
+ # Otherwise let's build a megaregexp
108
+ subs_array = []
109
+ Interscript::Stdlib.deterministic_sort_by_max_length(r.children).each do |i| # rule.from.max_length gives somewhat better test results, why is that
110
+ raise ArgumentError, "Can't parallelize #{i.class}" unless Interscript::Node::Rule::Sub === i
111
+
112
+ subs_array << [build_regexp(i), build_item(i.to, :parstr)]
113
+ end
114
+ r.subs_regexp = Interscript::Stdlib.parallel_regexp_compile(subs_array)
115
+ r.subs_replacements = subs_array.map(&:last)
116
+ if $DEBUG_RE
117
+ # puts subs_array.inspect
118
+ $subs_array = subs_array
119
+ @str = Interscript::Stdlib.parallel_regexp_gsub_debug(@str, r.subs_regexp, r.subs_replacements)
120
+ else
121
+ @str = Interscript::Stdlib.parallel_regexp_gsub(@str, r.subs_regexp, r.subs_replacements)
122
+ end
123
+ end
124
+ end
125
+ when Interscript::Node::Group
126
+ r.children.each do |t|
127
+ execute_rule(t)
128
+ end
129
+ when Interscript::Node::Rule::Sub
130
+ if r.to == :upcase
131
+ @str = @str.gsub(Regexp.new(build_regexp(r)), &:upcase)
132
+ else
133
+ @str = @str.gsub(Regexp.new(build_regexp(r)), build_item(r.to, :str))
134
+ end
135
+ when Interscript::Node::Rule::Funcall
136
+ @str = Interscript::Stdlib::Functions.public_send(r.name, @str, **r.kwargs)
137
+ when Interscript::Node::Rule::Run
138
+ if r.stage.map
139
+ doc = @map.dep_aliases[r.stage.map].document
140
+ stage = doc.imported_stages[r.stage.name]
141
+ @str = Stage.new(doc, @str).execute_rule(stage)
142
+ else
143
+ stage = @map.imported_stages[r.stage.name]
144
+ @str = Stage.new(@map, @str).execute_rule(stage)
145
+ end
146
+ end
147
+
148
+ @str
149
+ end
150
+
151
+ def build_regexp(r)
152
+ from = build_item(r.from, :re)
153
+ before = build_item(r.before, :re) if r.before
154
+ after = build_item(r.after, :re) if r.after
155
+ not_before = build_item(r.not_before, :re) if r.not_before
156
+ not_after = build_item(r.not_after, :re) if r.not_after
157
+
158
+ re = ""
159
+ re += "(?<=#{before})" if before
160
+ re += "(?<!#{not_before})" if not_before
161
+ re += from
162
+ re += "(?!#{not_after})" if not_after
163
+ re += "(?=#{after})" if after
164
+ re
165
+ end
166
+
167
+ def build_item i, target=nil, doc=@map
168
+ i = i.nth_string if %i[str parstr].include? target
169
+ i = Interscript::Node::Item.try_convert(i)
170
+ target = :par if target == :parstr
171
+
172
+ out = case i
173
+ when Interscript::Node::Item::Alias
174
+ if i.map
175
+ d = doc.dep_aliases[i.map].document
176
+ a = d.imported_aliases[i.name]
177
+ raise ArgumentError, "Alias #{i.name} of #{i.stage.map} not found" unless a
178
+ build_item(a.data, target, d)
179
+ elsif Interscript::Stdlib::ALIASES.include?(i.name)
180
+ if target != :re && Interscript::Stdlib.re_only_alias?(i.name)
181
+ raise ArgumentError, "Can't use #{i.name} in a #{target} context"
182
+ end
183
+ Interscript::Stdlib::ALIASES[i.name]
184
+ else
185
+ a = doc.imported_aliases[i.name]
186
+ raise ArgumentError, "Alias #{i.name} not found" unless a
187
+ build_item(a.data, target, doc)
188
+ end
189
+ when Interscript::Node::Item::String
190
+ if [:str, :par].include? target
191
+ i.data
192
+ else#if target == :re
193
+ Regexp.escape(i.data)
194
+ end
195
+ when Interscript::Node::Item::Group
196
+ if target == :par
197
+ i.children.map do |j|
198
+ build_item(j, target, doc)
199
+ end.reduce([""]) do |j,k|
200
+ Array(j).product(Array(k)).map(&:join)
201
+ end
202
+ else
203
+ i.children.map { |j| build_item(j, target, doc) }.join
204
+ end
205
+ when Interscript::Node::Item::CaptureGroup
206
+ if target == :par
207
+ raise ArgumentError, "Can't use a CaptureGroup in a #{target} context"
208
+ end
209
+ "(" + build_item(i.data, target, doc) + ")"
210
+ when Interscript::Node::Item::Maybe,
211
+ Interscript::Node::Item::MaybeSome,
212
+ Interscript::Node::Item::Some
213
+
214
+ resuffix = { Interscript::Node::Item::Maybe => "?" ,
215
+ Interscript::Node::Item::Some => "+" ,
216
+ Interscript::Node::Item::MaybeSome => "*" }[i.class]
217
+
218
+ if target == :par
219
+ raise ArgumentError, "Can't use a MaybeSome in a #{target} context"
220
+ end
221
+ if Interscript::Node::Item::String === i.data && i.data.data.length != 1
222
+ "(?:" + build_item(i.data, target, doc) + ")" + resuffix
223
+ else
224
+ build_item(i.data, target, doc) + resuffix
225
+ end
226
+ when Interscript::Node::Item::CaptureRef
227
+ if target == :par
228
+ raise ArgumentError, "Can't use CaptureRef in parallel mode"
229
+ end
230
+ "\\#{i.id}"
231
+ when Interscript::Node::Item::Any
232
+ if target == :str
233
+ # We may never reach this point
234
+ raise ArgumentError, "Can't use Any in a string context"
235
+ elsif target == :par
236
+ i.data.map(&:data)
237
+ elsif target == :re
238
+ case i.value
239
+ when Array
240
+ data = i.data.map { |j| build_item(j, target, doc) }
241
+ "(?:"+data.join("|")+")"
242
+ when String
243
+ "[#{Regexp.escape(i.value)}]"
244
+ when Range
245
+ "[#{Regexp.escape(i.value.first)}-#{Regexp.escape(i.value.last)}]"
246
+ end
247
+ end
248
+ end
249
+ end
250
+ end
251
+ end
@@ -0,0 +1,25 @@
1
+
2
+ class Interscript::Node
3
+ def initialize
4
+ raise NotImplementedError, "You can't construct a Node directly"
5
+ end
6
+
7
+ def to_hash
8
+ { :class => self.class.to_s,
9
+ :question => "is something missing?"
10
+ }
11
+ end
12
+ end
13
+
14
+
15
+ require "interscript/node/group"
16
+ require "interscript/node/document"
17
+
18
+ require "interscript/node/metadata"
19
+ require 'interscript/node/alias_def'
20
+ require 'interscript/node/dependency'
21
+ require 'interscript/node/tests'
22
+
23
+ require "interscript/node/stage"
24
+ require "interscript/node/rule"
25
+ require "interscript/node/item"
@@ -0,0 +1,15 @@
1
+ class Interscript::Node::AliasDef < Interscript::Node
2
+ attr_accessor :name, :data, :doc_name
3
+
4
+ def initialize(name, data)
5
+ data = Interscript::Node::Item.try_convert(data)
6
+ @name = name
7
+ @data = data
8
+ end
9
+
10
+ def to_hash
11
+ { :class => self.class.to_s,
12
+ :name => @name,
13
+ :data => @data.to_hash }
14
+ end
15
+ end