interscript 0.1.6 → 2.1.0a9

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 (226) 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 +3 -39
  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/exe/interscript +6 -0
  19. data/interscript.gemspec +31 -0
  20. data/lib/interscript.rb +81 -127
  21. data/lib/interscript/command.rb +5 -5
  22. data/lib/interscript/compiler.rb +22 -0
  23. data/lib/interscript/compiler/javascript.rb +292 -0
  24. data/lib/interscript/compiler/ruby.rb +262 -0
  25. data/lib/interscript/dsl.rb +67 -0
  26. data/lib/interscript/dsl/aliases.rb +23 -0
  27. data/lib/interscript/dsl/document.rb +46 -0
  28. data/lib/interscript/dsl/group.rb +45 -0
  29. data/lib/interscript/dsl/group/parallel.rb +6 -0
  30. data/lib/interscript/dsl/items.rb +89 -0
  31. data/lib/interscript/dsl/metadata.rb +26 -0
  32. data/lib/interscript/dsl/stage.rb +6 -0
  33. data/lib/interscript/dsl/symbol_mm.rb +11 -0
  34. data/lib/interscript/dsl/tests.rb +12 -0
  35. data/lib/interscript/interpreter.rb +251 -0
  36. data/lib/interscript/node.rb +25 -0
  37. data/lib/interscript/node/alias_def.rb +15 -0
  38. data/lib/interscript/node/dependency.rb +13 -0
  39. data/lib/interscript/node/document.rb +45 -0
  40. data/lib/interscript/node/group.rb +34 -0
  41. data/lib/interscript/node/group/parallel.rb +9 -0
  42. data/lib/interscript/node/group/sequential.rb +2 -0
  43. data/lib/interscript/node/item.rb +52 -0
  44. data/lib/interscript/node/item/alias.rb +42 -0
  45. data/lib/interscript/node/item/any.rb +61 -0
  46. data/lib/interscript/node/item/capture.rb +50 -0
  47. data/lib/interscript/node/item/group.rb +51 -0
  48. data/lib/interscript/node/item/repeat.rb +40 -0
  49. data/lib/interscript/node/item/stage.rb +23 -0
  50. data/lib/interscript/node/item/string.rb +51 -0
  51. data/lib/interscript/node/metadata.rb +18 -0
  52. data/lib/interscript/node/rule.rb +6 -0
  53. data/lib/interscript/node/rule/funcall.rb +18 -0
  54. data/lib/interscript/node/rule/run.rb +15 -0
  55. data/lib/interscript/node/rule/sub.rb +65 -0
  56. data/lib/interscript/node/stage.rb +19 -0
  57. data/lib/interscript/node/tests.rb +15 -0
  58. data/lib/interscript/stdlib.rb +211 -0
  59. data/lib/interscript/utils/regexp_converter.rb +283 -0
  60. data/lib/interscript/version.rb +1 -1
  61. data/requirements.txt +1 -0
  62. metadata +75 -339
  63. data/README.adoc +0 -298
  64. data/bin/rspec +0 -29
  65. data/lib/__pycache__/g2pwrapper.cpython-38.pyc +0 -0
  66. data/lib/g2pwrapper.py +0 -34
  67. data/lib/interscript-opal.rb +0 -2
  68. data/lib/interscript/fs.rb +0 -71
  69. data/lib/interscript/mapping.rb +0 -142
  70. data/lib/interscript/opal.rb +0 -27
  71. data/lib/interscript/opal/maps.js.erb +0 -10
  72. data/lib/interscript/opal_map_translate.rb +0 -12
  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 -38912
  76. data/maps/alalc-amh-Ethi-Latn-1997.yaml +0 -509
  77. data/maps/alalc-amh-Ethi-Latn-2011.yaml +0 -138
  78. data/maps/alalc-ara-Arab-Latn-1997.yaml +0 -1283
  79. data/maps/alalc-asm-Deva-Latn-1997.yaml +0 -159
  80. data/maps/alalc-aze-Cyrl-Latn-1997.yaml +0 -141
  81. data/maps/alalc-bel-Cyrl-Latn-1997.yaml +0 -125
  82. data/maps/alalc-ben-Beng-Latn-2017.yaml +0 -130
  83. data/maps/alalc-bul-Cyrl-Latn-1997.yaml +0 -94
  84. data/maps/alalc-ell-Grek-Latn-1997.yaml +0 -624
  85. data/maps/alalc-ell-Grek-Latn-2010.yaml +0 -627
  86. data/maps/alalc-hin-Deva-Latn-2020.yaml +0 -159
  87. data/maps/alalc-kat-Geok-Latn-1997.yaml +0 -111
  88. data/maps/alalc-kat-Geor-Latn-1997.yaml +0 -146
  89. data/maps/alalc-kor-Hang-Latn-1997.yaml +0 -94
  90. data/maps/alalc-mar-Deva-Latn-1997.yaml +0 -170
  91. data/maps/alalc-mkd-Cyrl-Latn-1997.yaml +0 -114
  92. data/maps/alalc-mkd-Cyrl-Latn-2013.yaml +0 -103
  93. data/maps/alalc-pan-Deva-Latn-1997.yaml +0 -237
  94. data/maps/alalc-rus-Cyrl-Latn-1997.yaml +0 -221
  95. data/maps/alalc-rus-Cyrl-Latn-2012.yaml +0 -162
  96. data/maps/alalc-srp-Cyrl-Latn-1997.yaml +0 -114
  97. data/maps/alalc-srp-Cyrl-Latn-2013.yaml +0 -135
  98. data/maps/alalc-ukr-Cyrl-Latn-1997.yaml +0 -141
  99. data/maps/alalc-ukr-Cyrl-Latn-2011.yaml +0 -16
  100. data/maps/apcbg-bul-Cyrl-Latn-1995.yaml +0 -283
  101. data/maps/bas-rus-Cyrl-Latn-2017-bss.yaml +0 -174
  102. data/maps/bas-rus-Cyrl-Latn-2017-oss.yaml +0 -169
  103. data/maps/bgn-jpn-Hrkt-Latn-1962.yaml +0 -292
  104. data/maps/bgn-kor-Hang-Latn-1943.yaml +0 -31
  105. data/maps/bgn-kor-Kore-Latn-1943.yaml +0 -31
  106. data/maps/bgna-bul-Cyrl-Latn-2006.yaml +0 -208
  107. data/maps/bgna-bul-Cyrl-Latn-2009.yaml +0 -208
  108. data/maps/bgnpcgn-amh-Ethi-Latn-1967.yaml +0 -528
  109. data/maps/bgnpcgn-ara-Arab-Latn-1956.yaml +0 -592
  110. data/maps/bgnpcgn-arm-Armn-Latn-1981.yaml +0 -108
  111. data/maps/bgnpcgn-aze-Cyrl-Latn-1993.yaml +0 -104
  112. data/maps/bgnpcgn-bak-Cyrl-Latn-2007.yaml +0 -184
  113. data/maps/bgnpcgn-bel-Cyrl-Latn-1979.yaml +0 -285
  114. data/maps/bgnpcgn-bul-Cyrl-Latn-1952.yaml +0 -115
  115. data/maps/bgnpcgn-bul-Cyrl-Latn-2013.yaml +0 -38
  116. data/maps/bgnpcgn-ell-Grek-Latn-1962.yaml +0 -701
  117. data/maps/bgnpcgn-ell-Grek-Latn-1996.yaml +0 -19
  118. data/maps/bgnpcgn-jpn-Hrkt-Latn-1976.yaml +0 -257
  119. data/maps/bgnpcgn-kat-Geor-Latn-1981.yaml +0 -127
  120. data/maps/bgnpcgn-kat-Geor-Latn-2009.yaml +0 -42
  121. data/maps/bgnpcgn-kor-Hang-Latn-kn-1945.yaml +0 -253
  122. data/maps/bgnpcgn-kor-Hang-Latn-rok-2011.yaml +0 -48
  123. data/maps/bgnpcgn-kor-Kore-Latn-rok-2011.yaml +0 -48
  124. data/maps/bgnpcgn-mkd-Cyrl-Latn-1981.yaml +0 -159
  125. data/maps/bgnpcgn-mkd-Cyrl-Latn-2013.yaml +0 -190
  126. data/maps/bgnpcgn-nep-Deva-Latn-2011.yaml +0 -200
  127. data/maps/bgnpcgn-per-Arab-Latn-1956.yaml +0 -92
  128. data/maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml +0 -314
  129. data/maps/bgnpcgn-srp-Cyrl-Latn-2005.yaml +0 -166
  130. data/maps/bgnpcgn-ukr-Cyrl-Latn-1965.yaml +0 -162
  131. data/maps/bgnpcgn-ukr-Cyrl-Latn-2019.yaml +0 -208
  132. data/maps/bgnpcgn-zho-Hans-Latn-1979.yaml +0 -7456
  133. data/maps/bis-asm-Beng-Latn-13194-1991.yaml +0 -159
  134. data/maps/bis-ben-Beng-Latn-13194-1991.yaml +0 -156
  135. data/maps/bis-dev-Deva-Latn-13194-1991.yaml +0 -184
  136. data/maps/bis-gjr-Gujr-Latn-13194-1991.yaml +0 -166
  137. data/maps/bis-knd-Knda-Latn-13194-1991.yaml +0 -173
  138. data/maps/bis-mlm-Mlym-Latn-13194-1991.yaml +0 -176
  139. data/maps/bis-ori-Orya-Latn-13194-1991.yaml +0 -160
  140. data/maps/bis-pnj-Guru-Latn-13194-1991.yaml +0 -175
  141. data/maps/bis-tel-Telu-Latn-13194-1991.yaml +0 -170
  142. data/maps/bis-tml-Taml-Latn-13194-1991.yaml +0 -155
  143. data/maps/by-bel-Cyrl-Latn-1998.yaml +0 -168
  144. data/maps/by-bel-Cyrl-Latn-2007.yaml +0 -115
  145. data/maps/dos-nep-Deva-Latn-1997.yaml +0 -33
  146. data/maps/elot-ell-Grek-Latn-743-1982-tl.yaml +0 -684
  147. data/maps/elot-ell-Grek-Latn-743-1982-ts.yaml +0 -680
  148. data/maps/elot-ell-Grek-Latn-743-2001-tl.yaml +0 -19
  149. data/maps/elot-ell-Grek-Latn-743-2001-ts.yaml +0 -31
  150. data/maps/ggg-kat-Geor-Latn-2002.yaml +0 -88
  151. data/maps/gki-bel-Cyrl-Latn-1992.yaml +0 -33
  152. data/maps/gki-bel-Cyrl-Latn-2000.yaml +0 -201
  153. data/maps/gost-rus-Cyrl-Latn-16876-71-1983.yaml +0 -186
  154. data/maps/hk-yue-Hani-Latn-1888.yaml +0 -38497
  155. data/maps/icao-bel-Cyrl-Latn-9303.yaml +0 -136
  156. data/maps/icao-bul-Cyrl-Latn-9303.yaml +0 -118
  157. data/maps/icao-heb-Hebr-Latn-9303.yaml +0 -151
  158. data/maps/icao-mkd-Cyrl-Latn-9303.yaml +0 -117
  159. data/maps/icao-per-Arab-Latn-9303.yaml +0 -103
  160. data/maps/icao-rus-Cyrl-Latn-9303.yaml +0 -117
  161. data/maps/icao-srp-Cyrl-Latn-9303.yaml +0 -117
  162. data/maps/icao-ukr-Cyrl-Latn-9303.yaml +0 -119
  163. data/maps/iso-ara-Arab-Latn-233-1984.yaml +0 -323
  164. data/maps/iso-ell-Grek-Latn-843-1997-t1.yaml +0 -609
  165. data/maps/iso-ell-Grek-Latn-843-1997-t2.yaml +0 -40
  166. data/maps/iso-jpn-Hrkt-Latn-3602-1989.yaml +0 -62
  167. data/maps/iso-rus-Cyrl-Latn-9-1995.yaml +0 -271
  168. data/maps/iso-tha-Thai-Latn-11940-1998.yaml +0 -109
  169. data/maps/kp-kor-Hang-Latn-2002.yaml +0 -901
  170. data/maps/lshk-yue-Hani-Latn-jyutping-1993.yaml +0 -44820
  171. data/maps/mext-jpn-Hrkt-Latn-1954.yaml +0 -411
  172. data/maps/moct-kor-Hang-Latn-2000.yaml +0 -803
  173. data/maps/mofa-jpn-Hrkt-Latn-1989.yaml +0 -541
  174. data/maps/mvd-bel-Cyrl-Latn-2008.yaml +0 -225
  175. data/maps/mvd-bel-Cyrl-Latn-2010.yaml +0 -63
  176. data/maps/mvd-rus-Cyrl-Latn-2008.yaml +0 -109
  177. data/maps/mvd-rus-Cyrl-Latn-2010.yaml +0 -37
  178. data/maps/nil-kor-Hang-Hang-jamo.yaml +0 -11193
  179. data/maps/odni-aze-Cyrl-Latn-2015.yaml +0 -144
  180. data/maps/odni-bel-Cyrl-Latn-2015.yaml +0 -148
  181. data/maps/odni-bul-Cyrl-Latn-2015.yaml +0 -96
  182. data/maps/odni-hin-Deva-Latn-2015.yaml +0 -258
  183. data/maps/odni-kat-Geor-Latn-2015.yaml +0 -87
  184. data/maps/odni-kaz-Cyrl-Latn-2015.yaml +0 -148
  185. data/maps/odni-kir-Cyrl-Latn-2015.yaml +0 -136
  186. data/maps/odni-mkd-Cyrl-Latn-2015.yaml +0 -122
  187. data/maps/odni-rus-Cyrl-Latn-2015.yaml +0 -77
  188. data/maps/odni-srp-Cyrl-Latn-2015.yaml +0 -129
  189. data/maps/odni-tat-Cyrl-Latn-2015.yaml +0 -142
  190. data/maps/odni-tgk-Cyrl-Latn-2015.yaml +0 -148
  191. data/maps/odni-uig-Cyrl-Latn-2015.yaml +0 -138
  192. data/maps/odni-ukr-Cyrl-Latn-2015.yaml +0 -157
  193. data/maps/odni-urd-Arab-Latn-2015.yaml +0 -221
  194. data/maps/odni-uzb-Cyrl-Latn-2015.yaml +0 -166
  195. data/maps/royin-tha-Thai-Latn-1939-generic.yaml +0 -90
  196. data/maps/royin-tha-Thai-Latn-1968.yaml +0 -179
  197. data/maps/royin-tha-Thai-Latn-1999-chained.yaml +0 -180
  198. data/maps/royin-tha-Thai-Latn-1999.yaml +0 -76
  199. data/maps/sac-zho-Hans-Latn-1979.yaml +0 -24759
  200. data/maps/ses-ara-Arab-Latn-1930.yaml +0 -279
  201. data/maps/stategeocadastre-ukr-Cyrl-Latn-1993.yaml +0 -222
  202. data/maps/ua-ukr-Cyrl-Latn-1996.yaml +0 -193
  203. data/maps/un-ara-Arab-Latn-1971.yaml +0 -139
  204. data/maps/un-ara-Arab-Latn-1972.yaml +0 -159
  205. data/maps/un-ara-Arab-Latn-2017.yaml +0 -420
  206. data/maps/un-bel-Cyrl-Latn-2007.yaml +0 -114
  207. data/maps/un-ben-Beng-Latn-2016.yaml +0 -534
  208. data/maps/un-ell-Grek-Latn-1987-tl.yaml +0 -31
  209. data/maps/un-ell-Grek-Latn-1987-ts.yaml +0 -19
  210. data/maps/un-ell-Grek-Latn-phonetic-1987.yaml +0 -780
  211. data/maps/un-mon-Mong-Latn-2013.yaml +0 -99
  212. data/maps/un-nep-Deva-Latn-1972.yaml +0 -163
  213. data/maps/un-rus-Cyrl-Latn-1987.yaml +0 -166
  214. data/maps/un-ukr-Cyrl-Latn-1998.yaml +0 -30
  215. data/maps/ungegn-amh-Ethi-Latn-2016.yaml +0 -575
  216. data/maps/var-jpn-Hrkt-Latn-hepburn-1886.yaml +0 -406
  217. data/maps/var-jpn-Hrkt-Latn-hepburn-1954.yaml +0 -386
  218. data/maps/var-kor-Hang-Latn-mr-1939.yaml +0 -1054
  219. data/maps/var-kor-Kore-Hang-2013.yaml +0 -59754
  220. data/maps/var-kor-Kore-Latn-mr-1939.yaml +0 -36
  221. data/maps/var-tha-Thai-Thai-phonemic.yaml +0 -59
  222. data/maps/var-tha-Thai-Zsym-ipa.yaml +0 -301
  223. data/maps/var-zho-Hani-Latn-1979.yaml +0 -38908
  224. data/spec/interscript/mapping_spec.rb +0 -42
  225. data/spec/interscript_spec.rb +0 -26
  226. data/spec/spec_helper.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7557ea1ca381562c61be7dbbeab2ea4adc42ef57ce857ef86acd62a08e5ce588
4
- data.tar.gz: 5099d4a7bf07817155d620db716af452607b8565f4e08d37aa805f486556e0e1
3
+ metadata.gz: 863d75eaef5d110e3460efa16357dd784120a11a119d5e33d6551727f4c9f33f
4
+ data.tar.gz: 91d2a59dc9b03f9c7e8123f0cc0980e7bcde8dc0277f0e77732d80b0cd0e3508
5
5
  SHA512:
6
- metadata.gz: f8a738a34aba269c0a01b4d123f01cc423a3c296541f302f65a6043bd2b618ef2c702f32d469866ee7c488624985b45ed2eee2ad9bbe2955f230b5b45472c364
7
- data.tar.gz: a3a66af7fcb9d8c82bcf927b17ea68686298bccec2f6e8dfac25796e7013b36f68fa9f130bd2fb9e7bc214a528896cafdd41a2f464886f09c504f376c19065d8
6
+ metadata.gz: dd8d30f472a7e3a049c8df13537c280d2b577956ce9439aeecc3164d533453c31bf2b66a662c9a8d09f43a610d3029e699113573c64bb005704b620c8bbb218f
7
+ data.tar.gz: e002aa79cfd6bf3c07403a8a87342383e575b00ffb8e9cc96271a9e0a1390214d13a01a6cdb5665fbadc881eaefbbf915520ee18a12baac1d70bfae1eb37bbd3
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,29 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in interscript.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "rspec", "~> 3.0"
8
+
9
+ gem "interscript-maps", path: "../maps"
10
+
11
+ unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.7")
12
+ group :secryst do
13
+ if File.exist? "../../secryst"
14
+ gem "secryst", path: "../../secryst"
15
+ else
16
+ gem "secryst"
17
+ end
18
+ end
19
+ end
20
+
21
+ gem 'regexp_parser'
22
+
23
+ unless ENV["SKIP_JS"]
24
+ group :jsexec do
25
+ gem 'mini_racer'
26
+ end
27
+ end
28
+
29
+ gem 'simplecov', require: false, group: :test
data/LICENSE.adoc ADDED
@@ -0,0 +1,31 @@
1
+ = Licenses & Copyright
2
+
3
+ This license file adheres to the formatting guidelines of
4
+ https://github.com/nevir/readable-licenses[readable-licenses].
5
+
6
+
7
+ == Ribose BSD 2-Clause License
8
+
9
+ Copyright (c) 2019-, https://www.ribose.com[Ribose Inc].
10
+ All rights reserved.
11
+
12
+ Redistribution and use in source and binary forms, with or without modification,
13
+ are permitted provided that the following conditions are met:
14
+
15
+ 1. Redistributions of source code must retain the above copyright notice,
16
+ this list of conditions and the following disclaimer.
17
+
18
+ 2. Redistributions in binary form must reproduce the above copyright notice,
19
+ this list of conditions and the following disclaimer in the documentation
20
+ and/or other materials provided with the distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
23
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
26
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Interscript
2
+
3
+ Documentation is available directory higher in file README.adoc.
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :compile, [:compiler, :target] do |t, args|
7
+ require "bundler/setup"
8
+ require "interscript"
9
+
10
+ compiler, ext = case args[:compiler]
11
+ when "ruby"
12
+ require "interscript/compiler/ruby"
13
+ [Interscript::Compiler::Ruby, "rb"]
14
+ when "javascript"
15
+ require "interscript/compiler/javascript"
16
+ [Interscript::Compiler::Javascript, "js"]
17
+ end
18
+
19
+ FileUtils.mkdir_p(args[:target])
20
+
21
+ maplist = {}
22
+
23
+ Interscript.maps.each do |map|
24
+ code = compiler.(map).code
25
+ File.write(args[:target] + "/" + map + "." + ext, code)
26
+ maplist[map] = nil
27
+ end
28
+
29
+ Interscript.maps(libraries: true).each do |map|
30
+ code = compiler.(map).code
31
+ File.write(args[:target] + "/" + map + "." + ext, code)
32
+ end
33
+
34
+ File.write(args[:target] + "/index.json", maplist.to_json)
35
+ end
36
+
37
+ task :version, [:ver] do |t, ver|
38
+ ver = ver[:ver]
39
+
40
+ rubyver = File.read(rubyfile = __dir__+"/lib/interscript/version.rb")
41
+ jsver = File.read(jsfile = __dir__+"/../js/package.json")
42
+ mapsver = File.read(mapsfile = __dir__+"/../maps/interscript-maps.gemspec")
43
+
44
+ rubyver = rubyver.gsub(/(VERSION = ")([0-9a-z.-]*)(")/, "\\1#{ver}\\3")
45
+ jsver = jsver.gsub(/("version": ")([0-9a-z.-]*)(")/, "\\1#{ver}\\3")
46
+ mapsver = mapsver.gsub(/(INTERSCRIPT_MAPS_VERSION=")([0-9a-z.-]*)(")/, "\\1#{ver}\\3")
47
+
48
+ File.write(rubyfile, rubyver)
49
+ File.write(jsfile, jsver)
50
+ File.write(mapsfile, mapsver)
51
+ end
52
+
53
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "interscript"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/interscript CHANGED
@@ -1,41 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
-
5
- # resolve bin path, ignoring symlinks
6
- require 'pathname'
7
- bin_file = Pathname.new(__FILE__).realpath
8
-
9
- # add self to libpath
10
- $LOAD_PATH.unshift File.expand_path("../../lib", bin_file)
11
-
12
- # Fixes https://github.com/rubygems/rubygems/issues/1420
13
- require 'rubygems/specification'
14
-
15
- class Gem::Specification
16
- def this; self; end
17
- end
18
-
19
- require 'interscript/command'
20
-
21
- if ARGV.any? && !Interscript::Command.all_tasks.key?(ARGV.first)
22
- ARGV.unshift :translit
23
- end
24
- Interscript::Command.start ARGV
25
-
26
- # if ARGV.empty?
27
- # puts "write source file, source format, and output file"
28
- # else
29
- # args = Hash[ARGV.flat_map { |s| s.scan(/--?([^=\s]+)(?:=(\S+))?/) }]
30
- # input = ARGV[0]
31
- # system_code = args["system"]
32
- # output_file = args["output"]
33
-
34
- # raise "Please enter the system code with --system={system_code}" unless system_code
35
-
36
- # if output_file
37
- # Interscript.transliterate_file(system_code, input, output_file)
38
- # else
39
- # puts Interscript.transliterate(system_code, IO.read(input))
40
- # end
41
- # end
3
+ require 'bundler/setup'
4
+ $LOAD_PATH << "#{__dir__}/../lib"
5
+ load "#{__dir__}/../exe/interscript"
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env ruby
2
+ ENV["INTERSCRIPT_STAGING"] = "1"
3
+ require "bundler/setup"
4
+ require "interscript"
5
+ require "interscript/compiler/ruby"
6
+
7
+ $map_name = ARGV[0]
8
+
9
+ # surpress warnings
10
+ def warn(*)
11
+ end
12
+
13
+
14
+ def debug_single_map(from, expected, result, result2)
15
+ puts ""
16
+ # puts $subs_array.inspect
17
+ # puts $subs_matches.inspect
18
+ puts from.inspect
19
+ puts from.chars.inspect
20
+ puts from.codepoints.map{|cp| '\\u%04x' % cp}.join(' ')
21
+ puts expected
22
+ puts result
23
+ puts result2
24
+ return nil unless $subs_matches
25
+ first_mismatch = $subs_matches.select{|match_data|
26
+ exp = expected[match_data[:begin]...match_data[:end]]
27
+ res = result[match_data[:begin]...match_data[:end]]
28
+ exp != res
29
+ }.first
30
+
31
+ # puts $subs_matches.inspect
32
+ # puts first_mismatch.inspect
33
+ output_string = ''
34
+ last_end = 0
35
+ $subs_matches.each do |match_data|
36
+ substr = from[match_data[:begin]...match_data[:end]]
37
+ if match_data[:begin] != last_end
38
+ output_string << '_' * (match_data[:begin] - last_end)
39
+ end
40
+ output_string << match_data[:result]
41
+
42
+ puts ''
43
+ puts "ERROR " if match_data == first_mismatch
44
+ indent = ' ' * match_data[:begin]
45
+ # puts indent + substr
46
+
47
+
48
+
49
+ matched_rule = $subs_array[match_data[:idx]]
50
+
51
+ if match_data == first_mismatch
52
+ puts indent + matched_rule.inspect + " (#{matched_rule[0].codepoints.map{|cp| '\\u%04x' % cp}.join(' ')})"
53
+ else
54
+ puts indent + matched_rule.inspect + " (#{matched_rule[0].codepoints.map{|cp| '\\u%04x' % cp}.join(' ')})"
55
+ end
56
+
57
+ puts from[0,match_data[:end]]
58
+
59
+ puts expected[0,output_string.size]
60
+ puts output_string
61
+ last_end = match_data[:end]
62
+
63
+
64
+ #return if match_data == first_mismatch
65
+ end
66
+ puts ''
67
+ end
68
+
69
+ def analyze_maps( filelist )
70
+ cache = {}
71
+
72
+ good_total = 0
73
+ almost_total = 0
74
+ bad_total = 0
75
+ passed_total = 0
76
+ for i in filelist
77
+ # used at the bottom
78
+ raw_lines = File.open(i).read.split("\n")
79
+ rules_line = raw_lines.index " # RULES"
80
+ characters_line = raw_lines.index " # CHARACTERS"
81
+ postrules_line = raw_lines.index " # POSTRULES"
82
+
83
+ system_name = File.basename(i, ".imp")
84
+
85
+ print "#{system_name}: "
86
+
87
+ exceptions = []
88
+
89
+ # begin
90
+ system = Interscript.parse(system_name)
91
+ # rescue Exception => e
92
+ # exceptions << e
93
+ # end
94
+ # puts $using_tree.inspect
95
+ if exceptions.length == 0 && system.tests && system.tests.data && system.tests.data.length > 0
96
+ good = 0
97
+ bad = 0
98
+ almost = 0
99
+
100
+ system.tests.data.each do |from,expected|
101
+ testname = from[0...300].gsub("\n", " / ")
102
+
103
+ result = Interscript.transliterate(system_name, from, cache, compiler: Interscript::Interpreter)
104
+ result2 = Interscript.transliterate(system_name, from, cache, compiler: Interscript::Compiler::Ruby)
105
+ if result == nil or result2 == nil
106
+ print '0'
107
+ bad += 1
108
+ elsif result != result2
109
+ # Compiler / Interpreter bug!
110
+ print "!"
111
+ bad += 1
112
+ elsif result == expected
113
+ print "."
114
+ good += 1
115
+ elsif result.unicode_normalize == expected.unicode_normalize
116
+ print ","
117
+ almost += 1
118
+ elsif result.unicode_normalize.chomp == expected.unicode_normalize.chomp
119
+ print ";"
120
+ almost += 1
121
+ else
122
+ print "#"
123
+ debug_single_map(from, expected, result, result2) if $map_name
124
+ bad += 1
125
+ end
126
+ rescue Exception => e
127
+ print "%"
128
+ bad += 1
129
+ exceptions << e
130
+ end
131
+
132
+ if bad == 0
133
+ passed_total += 1
134
+ puts " all tests passed!"
135
+ `git mv #{i} #{i.sub("-staging", "")}` if i.include? '-staging'
136
+ else
137
+ puts " (#{good}/#{good+almost+bad})"
138
+ end
139
+ good_total += good
140
+ almost_total += almost
141
+ bad_total += bad
142
+ elsif exceptions.length != 0
143
+ else
144
+ puts "no tests!"
145
+ end
146
+ puts "warning: postrules before rules\n\n" if (postrules_line||10000000) < (rules_line||0)
147
+ puts "warning: postrules before characters\n\n" if (postrules_line||10000000) < (characters_line||0)
148
+
149
+ Array(exceptions.first).compact.each do |e|
150
+ puts e.full_message
151
+ end
152
+ end
153
+ puts " #{good_total} (#{good_total+almost_total})/#{good_total+almost_total+bad_total}"
154
+ puts " #{passed_total} passed!"
155
+ end
156
+
157
+ #analyze_maps Dir[__dir__+"/../../maps/maps/*.imp"].sort
158
+ if $map_name
159
+ $DEBUG_RE = true
160
+ analyze_maps Dir[__dir__+"/../../maps/maps/#{$map_name}.imp"].sort
161
+ analyze_maps Dir[__dir__+"/../../maps/maps-staging/#{$map_name}.imp"].sort
162
+ else
163
+ analyze_maps Dir[__dir__+"/../../maps/maps-staging/*.imp"].sort
164
+ if ENV['NONSTAGING']
165
+ puts "\n" * 5
166
+ analyze_maps Dir[__dir__+"/../../maps/maps/*.imp"].sort
167
+ end
168
+ end
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "interscript"
4
+ require "interscript/compiler/ruby"
5
+ require "interscript/compiler/javascript"
6
+
7
+ # Differing maps as of writing this code:
8
+ # - alalc-ara-Arab-Latn-1997
9
+ # - alalc-aze-Arab-Latn-1997
10
+ # - alalc-ell-Grek-Latn-2010
11
+ # - bgnpcgn-bal-Arab-Latn-2008
12
+ # - bgnpcgn-per-Arab-Latn-1958
13
+ # - bgnpcgn-prs-Arab-Latn-2007
14
+ # - bgnpcgn-pus-Arab-Latn-1968
15
+ # - bgnpcgn-ukr-Cyrl-Latn-1965
16
+ # - bgnpcgn-urd-Arab-Latn-2007
17
+ # - odni-ara-Arab-Latn-2004
18
+ # - odni-ara-Arab-Latn-2015
19
+ # - stategeocadastre-ukr-Cyrl-Latn-1993
20
+ # - ua-ukr-Cyrl-Latn-1996
21
+ # - un-ara-Arab-Latn-2017
22
+ # - un-ell-Grek-Latn-1987-phonetic
23
+ # - un-prs-Arab-Latn-1967
24
+ # - un-urd-Arab-Latn-1972
25
+
26
+ map = ARGV[0]
27
+
28
+ m = Interscript.parse(map)
29
+
30
+ cr = Interscript::Compiler::Ruby
31
+ mr = cr.(map, debug: true)
32
+ cj = Interscript::Compiler::Javascript
33
+ mj = cj.(map, debug: true)
34
+
35
+ m.tests.data.each do |from, expected|
36
+ r = mr.(from)
37
+ j = mj.(from)
38
+
39
+ next if r == j
40
+
41
+ dr = cr.read_debug_data
42
+ dj = cj.read_debug_data
43
+
44
+ dr.zip(dj).each do |er, ej|
45
+ if er[0] != ej[0]
46
+ puts "First differing rule in map: #{er[1]}, stage #{er[2]}"
47
+ puts "Ruby: #{er[0]}, Javascript: #{ej[0]}"
48
+ puts "Rule:\n#{er[3].gsub(/^/, " ")}"
49
+ puts "Generated Ruby code:\n#{er[4].gsub(/^/, " ")}"
50
+ puts "Generated Javascript code:\n#{ej[4].gsub(/^/, " ")}"
51
+ puts
52
+ break
53
+ end
54
+ end
55
+
56
+ cr.reset_debug_data
57
+ cj.reset_debug_data
58
+ end
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ ENV["INTERSCRIPT_STAGING"] = "1"
3
+ require "bundler/setup"
4
+ require "interscript"
5
+ require "interscript/compiler/ruby"
6
+
7
+ $map_name = ARGV[0]
8
+
9
+ if $map_name
10
+ filelist = [ __dir__+"/../../maps/maps-staging/#{$map_name}.imp" ]
11
+ else
12
+ filelist = Dir[__dir__+"/../../maps/maps-staging/*.imp"].sort
13
+ end
14
+
15
+
16
+ # levenshtein distance algorithm for comparing string similarity
17
+ def ld(s, t)
18
+ v0 = (0..t.length).to_a
19
+ v1 = []
20
+ #p v0
21
+
22
+ s.chars.each_with_index do |s_ch, i|
23
+ v1[0] = i + 1
24
+
25
+ t.chars.each_with_index do |t_ch, j|
26
+ cost = s_ch == t_ch ? 0 : 1
27
+ v1[j + 1] = [v1[j] + 1, v0[j + 1] + 1, v0[j] + cost].min
28
+ end
29
+ v0 = v1.dup
30
+ #p v1
31
+ end
32
+
33
+ v0[t.length]
34
+ end
35
+
36
+
37
+ def score_reordering( system, source, target )
38
+ interpreter = Marshal.load( Marshal.dump( $interpreter ))
39
+ parallel = interpreter.map.stages[:main].children.select{|x| Interscript::Node::Group::Parallel === x}[0]
40
+ parallel.reorder_children(source,target)
41
+ interpreter.map.stages[:main].children[$parallel_idx].children = parallel.children.compact #.reorder_children(source,target)
42
+ delta_sum = 0
43
+ system.tests.data.each do |from, expected|
44
+ result = interpreter.(from)
45
+ delta = ld(expected, result)
46
+ delta_sum += delta
47
+ end;
48
+ delta_sum
49
+ end
50
+
51
+
52
+ for i in filelist
53
+
54
+ begin
55
+ system_name = File.basename(i, ".imp")
56
+ puts "\ndebugging #{system_name}"
57
+
58
+ system = Interscript.parse(system_name);
59
+ if system.tests && system.tests.data && system.tests.data.length > 0
60
+
61
+ $interpreter = Interscript::Interpreter.new.compile(system);
62
+ $orig_parallel = $interpreter.map.stages[:main].children.select{|x| Interscript::Node::Group::Parallel === x}[0].dup;
63
+ $parallel_idx = $interpreter.map.stages[:main].children.each_with_index.select{|x,i| Interscript::Node::Group::Parallel === x}.map{|x,i| i}[0]
64
+ next if !$parallel_idx
65
+ starting_score = score_reordering(system, 0,0)
66
+ parallel_size = $interpreter.map.stages[:main].children.select{|x| Interscript::Node::Group::Parallel === x}[0].children.size
67
+
68
+ puts "starting_score = #{starting_score}"
69
+ source = parallel_size
70
+ while true
71
+ break if source ==0
72
+ target = 0
73
+ curr_score = score_reordering(system, source, target)
74
+ print "#{source} <-> #{target} = #{curr_score}; "
75
+
76
+ if curr_score < starting_score
77
+ puts ''
78
+ puts "#{source} <-> #{target} changes score from #{starting_score} to #{curr_score}"
79
+ pp system.stages[:main].children[$parallel_idx].children[source]
80
+ end
81
+ source = source - 1
82
+ end
83
+ end
84
+ rescue Exception => e
85
+ puts e
86
+ end
87
+
88
+ end