interscript 0.1.6 → 2.1.0a9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/Gemfile +29 -0
- data/LICENSE.adoc +31 -0
- data/README.md +3 -0
- data/Rakefile +53 -0
- data/bin/console +14 -0
- data/bin/interscript +3 -39
- data/bin/maps_analyze_staging +168 -0
- data/bin/maps_debug_compilers +58 -0
- data/bin/maps_debug_ordering +88 -0
- data/bin/maps_debug_ruby_compile +24 -0
- data/bin/maps_debug_step_by_step +44 -0
- data/bin/maps_optimize_order +112 -0
- data/bin/maps_v1_analyze_regexps +45 -0
- data/bin/maps_v1_to_v2 +426 -0
- data/exe/interscript +6 -0
- data/interscript.gemspec +31 -0
- data/lib/interscript.rb +81 -127
- data/lib/interscript/command.rb +5 -5
- data/lib/interscript/compiler.rb +22 -0
- data/lib/interscript/compiler/javascript.rb +292 -0
- data/lib/interscript/compiler/ruby.rb +262 -0
- data/lib/interscript/dsl.rb +67 -0
- data/lib/interscript/dsl/aliases.rb +23 -0
- data/lib/interscript/dsl/document.rb +46 -0
- data/lib/interscript/dsl/group.rb +45 -0
- data/lib/interscript/dsl/group/parallel.rb +6 -0
- data/lib/interscript/dsl/items.rb +89 -0
- data/lib/interscript/dsl/metadata.rb +26 -0
- data/lib/interscript/dsl/stage.rb +6 -0
- data/lib/interscript/dsl/symbol_mm.rb +11 -0
- data/lib/interscript/dsl/tests.rb +12 -0
- data/lib/interscript/interpreter.rb +251 -0
- data/lib/interscript/node.rb +25 -0
- data/lib/interscript/node/alias_def.rb +15 -0
- data/lib/interscript/node/dependency.rb +13 -0
- data/lib/interscript/node/document.rb +45 -0
- data/lib/interscript/node/group.rb +34 -0
- data/lib/interscript/node/group/parallel.rb +9 -0
- data/lib/interscript/node/group/sequential.rb +2 -0
- data/lib/interscript/node/item.rb +52 -0
- data/lib/interscript/node/item/alias.rb +42 -0
- data/lib/interscript/node/item/any.rb +61 -0
- data/lib/interscript/node/item/capture.rb +50 -0
- data/lib/interscript/node/item/group.rb +51 -0
- data/lib/interscript/node/item/repeat.rb +40 -0
- data/lib/interscript/node/item/stage.rb +23 -0
- data/lib/interscript/node/item/string.rb +51 -0
- data/lib/interscript/node/metadata.rb +18 -0
- data/lib/interscript/node/rule.rb +6 -0
- data/lib/interscript/node/rule/funcall.rb +18 -0
- data/lib/interscript/node/rule/run.rb +15 -0
- data/lib/interscript/node/rule/sub.rb +65 -0
- data/lib/interscript/node/stage.rb +19 -0
- data/lib/interscript/node/tests.rb +15 -0
- data/lib/interscript/stdlib.rb +211 -0
- data/lib/interscript/utils/regexp_converter.rb +283 -0
- data/lib/interscript/version.rb +1 -1
- data/requirements.txt +1 -0
- metadata +75 -339
- data/README.adoc +0 -298
- data/bin/rspec +0 -29
- data/lib/__pycache__/g2pwrapper.cpython-38.pyc +0 -0
- data/lib/g2pwrapper.py +0 -34
- data/lib/interscript-opal.rb +0 -2
- data/lib/interscript/fs.rb +0 -71
- data/lib/interscript/mapping.rb +0 -142
- data/lib/interscript/opal.rb +0 -27
- data/lib/interscript/opal/maps.js.erb +0 -10
- data/lib/interscript/opal_map_translate.rb +0 -12
- data/lib/model-7 +0 -0
- data/lib/tha-pt-b-7 +0 -0
- data/maps/acadsin-zho-Hani-Latn-2002.yaml +0 -38912
- data/maps/alalc-amh-Ethi-Latn-1997.yaml +0 -509
- data/maps/alalc-amh-Ethi-Latn-2011.yaml +0 -138
- data/maps/alalc-ara-Arab-Latn-1997.yaml +0 -1283
- data/maps/alalc-asm-Deva-Latn-1997.yaml +0 -159
- data/maps/alalc-aze-Cyrl-Latn-1997.yaml +0 -141
- data/maps/alalc-bel-Cyrl-Latn-1997.yaml +0 -125
- data/maps/alalc-ben-Beng-Latn-2017.yaml +0 -130
- data/maps/alalc-bul-Cyrl-Latn-1997.yaml +0 -94
- data/maps/alalc-ell-Grek-Latn-1997.yaml +0 -624
- data/maps/alalc-ell-Grek-Latn-2010.yaml +0 -627
- data/maps/alalc-hin-Deva-Latn-2020.yaml +0 -159
- data/maps/alalc-kat-Geok-Latn-1997.yaml +0 -111
- data/maps/alalc-kat-Geor-Latn-1997.yaml +0 -146
- data/maps/alalc-kor-Hang-Latn-1997.yaml +0 -94
- data/maps/alalc-mar-Deva-Latn-1997.yaml +0 -170
- data/maps/alalc-mkd-Cyrl-Latn-1997.yaml +0 -114
- data/maps/alalc-mkd-Cyrl-Latn-2013.yaml +0 -103
- data/maps/alalc-pan-Deva-Latn-1997.yaml +0 -237
- data/maps/alalc-rus-Cyrl-Latn-1997.yaml +0 -221
- data/maps/alalc-rus-Cyrl-Latn-2012.yaml +0 -162
- data/maps/alalc-srp-Cyrl-Latn-1997.yaml +0 -114
- data/maps/alalc-srp-Cyrl-Latn-2013.yaml +0 -135
- data/maps/alalc-ukr-Cyrl-Latn-1997.yaml +0 -141
- data/maps/alalc-ukr-Cyrl-Latn-2011.yaml +0 -16
- data/maps/apcbg-bul-Cyrl-Latn-1995.yaml +0 -283
- data/maps/bas-rus-Cyrl-Latn-2017-bss.yaml +0 -174
- data/maps/bas-rus-Cyrl-Latn-2017-oss.yaml +0 -169
- data/maps/bgn-jpn-Hrkt-Latn-1962.yaml +0 -292
- data/maps/bgn-kor-Hang-Latn-1943.yaml +0 -31
- data/maps/bgn-kor-Kore-Latn-1943.yaml +0 -31
- data/maps/bgna-bul-Cyrl-Latn-2006.yaml +0 -208
- data/maps/bgna-bul-Cyrl-Latn-2009.yaml +0 -208
- data/maps/bgnpcgn-amh-Ethi-Latn-1967.yaml +0 -528
- data/maps/bgnpcgn-ara-Arab-Latn-1956.yaml +0 -592
- data/maps/bgnpcgn-arm-Armn-Latn-1981.yaml +0 -108
- data/maps/bgnpcgn-aze-Cyrl-Latn-1993.yaml +0 -104
- data/maps/bgnpcgn-bak-Cyrl-Latn-2007.yaml +0 -184
- data/maps/bgnpcgn-bel-Cyrl-Latn-1979.yaml +0 -285
- data/maps/bgnpcgn-bul-Cyrl-Latn-1952.yaml +0 -115
- data/maps/bgnpcgn-bul-Cyrl-Latn-2013.yaml +0 -38
- data/maps/bgnpcgn-ell-Grek-Latn-1962.yaml +0 -701
- data/maps/bgnpcgn-ell-Grek-Latn-1996.yaml +0 -19
- data/maps/bgnpcgn-jpn-Hrkt-Latn-1976.yaml +0 -257
- data/maps/bgnpcgn-kat-Geor-Latn-1981.yaml +0 -127
- data/maps/bgnpcgn-kat-Geor-Latn-2009.yaml +0 -42
- data/maps/bgnpcgn-kor-Hang-Latn-kn-1945.yaml +0 -253
- data/maps/bgnpcgn-kor-Hang-Latn-rok-2011.yaml +0 -48
- data/maps/bgnpcgn-kor-Kore-Latn-rok-2011.yaml +0 -48
- data/maps/bgnpcgn-mkd-Cyrl-Latn-1981.yaml +0 -159
- data/maps/bgnpcgn-mkd-Cyrl-Latn-2013.yaml +0 -190
- data/maps/bgnpcgn-nep-Deva-Latn-2011.yaml +0 -200
- data/maps/bgnpcgn-per-Arab-Latn-1956.yaml +0 -92
- data/maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml +0 -314
- data/maps/bgnpcgn-srp-Cyrl-Latn-2005.yaml +0 -166
- data/maps/bgnpcgn-ukr-Cyrl-Latn-1965.yaml +0 -162
- data/maps/bgnpcgn-ukr-Cyrl-Latn-2019.yaml +0 -208
- data/maps/bgnpcgn-zho-Hans-Latn-1979.yaml +0 -7456
- data/maps/bis-asm-Beng-Latn-13194-1991.yaml +0 -159
- data/maps/bis-ben-Beng-Latn-13194-1991.yaml +0 -156
- data/maps/bis-dev-Deva-Latn-13194-1991.yaml +0 -184
- data/maps/bis-gjr-Gujr-Latn-13194-1991.yaml +0 -166
- data/maps/bis-knd-Knda-Latn-13194-1991.yaml +0 -173
- data/maps/bis-mlm-Mlym-Latn-13194-1991.yaml +0 -176
- data/maps/bis-ori-Orya-Latn-13194-1991.yaml +0 -160
- data/maps/bis-pnj-Guru-Latn-13194-1991.yaml +0 -175
- data/maps/bis-tel-Telu-Latn-13194-1991.yaml +0 -170
- data/maps/bis-tml-Taml-Latn-13194-1991.yaml +0 -155
- data/maps/by-bel-Cyrl-Latn-1998.yaml +0 -168
- data/maps/by-bel-Cyrl-Latn-2007.yaml +0 -115
- data/maps/dos-nep-Deva-Latn-1997.yaml +0 -33
- data/maps/elot-ell-Grek-Latn-743-1982-tl.yaml +0 -684
- data/maps/elot-ell-Grek-Latn-743-1982-ts.yaml +0 -680
- data/maps/elot-ell-Grek-Latn-743-2001-tl.yaml +0 -19
- data/maps/elot-ell-Grek-Latn-743-2001-ts.yaml +0 -31
- data/maps/ggg-kat-Geor-Latn-2002.yaml +0 -88
- data/maps/gki-bel-Cyrl-Latn-1992.yaml +0 -33
- data/maps/gki-bel-Cyrl-Latn-2000.yaml +0 -201
- data/maps/gost-rus-Cyrl-Latn-16876-71-1983.yaml +0 -186
- data/maps/hk-yue-Hani-Latn-1888.yaml +0 -38497
- data/maps/icao-bel-Cyrl-Latn-9303.yaml +0 -136
- data/maps/icao-bul-Cyrl-Latn-9303.yaml +0 -118
- data/maps/icao-heb-Hebr-Latn-9303.yaml +0 -151
- data/maps/icao-mkd-Cyrl-Latn-9303.yaml +0 -117
- data/maps/icao-per-Arab-Latn-9303.yaml +0 -103
- data/maps/icao-rus-Cyrl-Latn-9303.yaml +0 -117
- data/maps/icao-srp-Cyrl-Latn-9303.yaml +0 -117
- data/maps/icao-ukr-Cyrl-Latn-9303.yaml +0 -119
- data/maps/iso-ara-Arab-Latn-233-1984.yaml +0 -323
- data/maps/iso-ell-Grek-Latn-843-1997-t1.yaml +0 -609
- data/maps/iso-ell-Grek-Latn-843-1997-t2.yaml +0 -40
- data/maps/iso-jpn-Hrkt-Latn-3602-1989.yaml +0 -62
- data/maps/iso-rus-Cyrl-Latn-9-1995.yaml +0 -271
- data/maps/iso-tha-Thai-Latn-11940-1998.yaml +0 -109
- data/maps/kp-kor-Hang-Latn-2002.yaml +0 -901
- data/maps/lshk-yue-Hani-Latn-jyutping-1993.yaml +0 -44820
- data/maps/mext-jpn-Hrkt-Latn-1954.yaml +0 -411
- data/maps/moct-kor-Hang-Latn-2000.yaml +0 -803
- data/maps/mofa-jpn-Hrkt-Latn-1989.yaml +0 -541
- data/maps/mvd-bel-Cyrl-Latn-2008.yaml +0 -225
- data/maps/mvd-bel-Cyrl-Latn-2010.yaml +0 -63
- data/maps/mvd-rus-Cyrl-Latn-2008.yaml +0 -109
- data/maps/mvd-rus-Cyrl-Latn-2010.yaml +0 -37
- data/maps/nil-kor-Hang-Hang-jamo.yaml +0 -11193
- data/maps/odni-aze-Cyrl-Latn-2015.yaml +0 -144
- data/maps/odni-bel-Cyrl-Latn-2015.yaml +0 -148
- data/maps/odni-bul-Cyrl-Latn-2015.yaml +0 -96
- data/maps/odni-hin-Deva-Latn-2015.yaml +0 -258
- data/maps/odni-kat-Geor-Latn-2015.yaml +0 -87
- data/maps/odni-kaz-Cyrl-Latn-2015.yaml +0 -148
- data/maps/odni-kir-Cyrl-Latn-2015.yaml +0 -136
- data/maps/odni-mkd-Cyrl-Latn-2015.yaml +0 -122
- data/maps/odni-rus-Cyrl-Latn-2015.yaml +0 -77
- data/maps/odni-srp-Cyrl-Latn-2015.yaml +0 -129
- data/maps/odni-tat-Cyrl-Latn-2015.yaml +0 -142
- data/maps/odni-tgk-Cyrl-Latn-2015.yaml +0 -148
- data/maps/odni-uig-Cyrl-Latn-2015.yaml +0 -138
- data/maps/odni-ukr-Cyrl-Latn-2015.yaml +0 -157
- data/maps/odni-urd-Arab-Latn-2015.yaml +0 -221
- data/maps/odni-uzb-Cyrl-Latn-2015.yaml +0 -166
- data/maps/royin-tha-Thai-Latn-1939-generic.yaml +0 -90
- data/maps/royin-tha-Thai-Latn-1968.yaml +0 -179
- data/maps/royin-tha-Thai-Latn-1999-chained.yaml +0 -180
- data/maps/royin-tha-Thai-Latn-1999.yaml +0 -76
- data/maps/sac-zho-Hans-Latn-1979.yaml +0 -24759
- data/maps/ses-ara-Arab-Latn-1930.yaml +0 -279
- data/maps/stategeocadastre-ukr-Cyrl-Latn-1993.yaml +0 -222
- data/maps/ua-ukr-Cyrl-Latn-1996.yaml +0 -193
- data/maps/un-ara-Arab-Latn-1971.yaml +0 -139
- data/maps/un-ara-Arab-Latn-1972.yaml +0 -159
- data/maps/un-ara-Arab-Latn-2017.yaml +0 -420
- data/maps/un-bel-Cyrl-Latn-2007.yaml +0 -114
- data/maps/un-ben-Beng-Latn-2016.yaml +0 -534
- data/maps/un-ell-Grek-Latn-1987-tl.yaml +0 -31
- data/maps/un-ell-Grek-Latn-1987-ts.yaml +0 -19
- data/maps/un-ell-Grek-Latn-phonetic-1987.yaml +0 -780
- data/maps/un-mon-Mong-Latn-2013.yaml +0 -99
- data/maps/un-nep-Deva-Latn-1972.yaml +0 -163
- data/maps/un-rus-Cyrl-Latn-1987.yaml +0 -166
- data/maps/un-ukr-Cyrl-Latn-1998.yaml +0 -30
- data/maps/ungegn-amh-Ethi-Latn-2016.yaml +0 -575
- data/maps/var-jpn-Hrkt-Latn-hepburn-1886.yaml +0 -406
- data/maps/var-jpn-Hrkt-Latn-hepburn-1954.yaml +0 -386
- data/maps/var-kor-Hang-Latn-mr-1939.yaml +0 -1054
- data/maps/var-kor-Kore-Hang-2013.yaml +0 -59754
- data/maps/var-kor-Kore-Latn-mr-1939.yaml +0 -36
- data/maps/var-tha-Thai-Thai-phonemic.yaml +0 -59
- data/maps/var-tha-Thai-Zsym-ipa.yaml +0 -301
- data/maps/var-zho-Hani-Latn-1979.yaml +0 -38908
- data/spec/interscript/mapping_spec.rb +0 -42
- data/spec/interscript_spec.rb +0 -26
- data/spec/spec_helper.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 863d75eaef5d110e3460efa16357dd784120a11a119d5e33d6551727f4c9f33f
|
4
|
+
data.tar.gz: 91d2a59dc9b03f9c7e8123f0cc0980e7bcde8dc0277f0e77732d80b0cd0e3508
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd8d30f472a7e3a049c8df13537c280d2b577956ce9439aeecc3164d533453c31bf2b66a662c9a8d09f43a610d3029e699113573c64bb005704b620c8bbb218f
|
7
|
+
data.tar.gz: e002aa79cfd6bf3c07403a8a87342383e575b00ffb8e9cc96271a9e0a1390214d13a01a6cdb5665fbadc881eaefbbf915520ee18a12baac1d70bfae1eb37bbd3
|
data/.gitignore
ADDED
data/.rspec
ADDED
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
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 '
|
4
|
-
|
5
|
-
#
|
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
|