interscript 2.1.0rc4 → 2.1.0
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.
- checksums.yaml +4 -4
- data/Gemfile +0 -6
- data/Rakefile +1 -9
- data/bin/console +8 -4
- data/interscript.gemspec +1 -2
- data/lib/interscript/compiler/javascript.rb +1 -6
- data/lib/interscript/compiler/ruby.rb +0 -5
- data/lib/interscript/dsl/document.rb +1 -2
- data/lib/interscript/dsl/group/parallel.rb +2 -2
- data/lib/interscript/dsl/group.rb +6 -7
- data/lib/interscript/dsl/tests.rb +2 -2
- data/lib/interscript/dsl.rb +2 -35
- data/lib/interscript/interpreter.rb +1 -5
- data/lib/interscript/node/alias_def.rb +0 -6
- data/lib/interscript/node/dependency.rb +0 -16
- data/lib/interscript/node/document.rb +0 -34
- data/lib/interscript/node/group.rb +2 -13
- data/lib/interscript/node/item/alias.rb +0 -12
- data/lib/interscript/node/item/any.rb +0 -7
- data/lib/interscript/node/item/capture.rb +0 -11
- data/lib/interscript/node/item/group.rb +1 -29
- data/lib/interscript/node/item/repeat.rb +0 -4
- data/lib/interscript/node/item/stage.rb +0 -4
- data/lib/interscript/node/item/string.rb +0 -7
- data/lib/interscript/node/item.rb +0 -4
- data/lib/interscript/node/metadata.rb +0 -10
- data/lib/interscript/node/rule/funcall.rb +2 -12
- data/lib/interscript/node/rule/run.rb +3 -16
- data/lib/interscript/node/rule/sub.rb +4 -165
- data/lib/interscript/node/rule.rb +0 -3
- data/lib/interscript/node/stage.rb +4 -30
- data/lib/interscript/node/tests.rb +0 -10
- data/lib/interscript/node.rb +0 -4
- data/lib/interscript/stdlib.rb +3 -45
- data/lib/interscript/version.rb +1 -1
- data/lib/interscript/visualize/json.rb +4 -12
- data/lib/interscript.rb +0 -78
- metadata +3 -19
- data/lib/interscript/detector.rb +0 -60
- data/lib/interscript/utils/helpers.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f92a8060d3eee8e0eb4815795294c045ccc7ad341c92a6ba48cb825be4598b95
|
4
|
+
data.tar.gz: 6b977f41c3b1ba80bf25ef1d120666a228bcfd050f31f0a87a9c9ceeb86f5007
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fc32770358443ca0baae5416a918032b4a169fdc98b32d493fe1a487599fbdf9c5005fb53b98a25e5962f18f2ff52a1667010bda48394e891998437b2a2f1b6
|
7
|
+
data.tar.gz: a96e1cc807ebc83c9630b1a78f5b9c26558f771954b55622ec55d0f0b0ff17601a27a5753ab407dc49ec0db8d960940c811148c2872ba9c56e1b19baa3a7ccb7
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -20,10 +20,7 @@ task :compile, [:compiler, :target] do |t, args|
|
|
20
20
|
|
21
21
|
maplist = {}
|
22
22
|
|
23
|
-
maps
|
24
|
-
maps = Interscript.exclude_maps(maps, compiler: compiler, platform: false)
|
25
|
-
|
26
|
-
maps.each do |map|
|
23
|
+
Interscript.maps.each do |map|
|
27
24
|
code = compiler.(map).code
|
28
25
|
File.write(args[:target] + "/" + map + "." + ext, code)
|
29
26
|
maplist[map] = nil
|
@@ -71,7 +68,6 @@ task :generate_metadata_json do
|
|
71
68
|
require "fileutils"
|
72
69
|
require "json"
|
73
70
|
require "interscript"
|
74
|
-
require "interscript/compiler/javascript"
|
75
71
|
|
76
72
|
FileUtils.rm_rf(file = __dir__+"/metadata.json")
|
77
73
|
|
@@ -79,10 +75,6 @@ task :generate_metadata_json do
|
|
79
75
|
parsed_map = Interscript.parse(map)
|
80
76
|
md = parsed_map.metadata.to_hash
|
81
77
|
md["test"] = parsed_map.tests&.data&.first
|
82
|
-
md["skip_js"] = Interscript.exclude_maps([map],
|
83
|
-
compiler: Interscript::Compiler::Javascript,
|
84
|
-
platform: false,
|
85
|
-
).empty?
|
86
78
|
[map, md]
|
87
79
|
end.to_h
|
88
80
|
|
data/bin/console
CHANGED
@@ -3,8 +3,12 @@
|
|
3
3
|
require "bundler/setup"
|
4
4
|
require "interscript"
|
5
5
|
|
6
|
-
|
7
|
-
|
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
8
|
|
9
|
-
|
10
|
-
|
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/interscript.gemspec
CHANGED
@@ -27,6 +27,5 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
29
|
spec.add_dependency "thor"
|
30
|
-
spec.add_dependency "interscript-maps"
|
31
|
-
spec.add_dependency "text"
|
30
|
+
spec.add_dependency "interscript-maps"
|
32
31
|
end
|
@@ -53,7 +53,6 @@ class Interscript::Compiler::Javascript < Interscript::Compiler
|
|
53
53
|
|
54
54
|
def compile_rule(r, map = @map, wrapper = false)
|
55
55
|
c = ""
|
56
|
-
return c if r.reverse_run == true
|
57
56
|
case r
|
58
57
|
when Interscript::Node::Stage
|
59
58
|
c += "map.stages.#{r.name} = function(s) {\n"
|
@@ -76,7 +75,6 @@ class Interscript::Compiler::Javascript < Interscript::Compiler
|
|
76
75
|
raise ArgumentError, "Can't parallelize rules with :not_before" if i.not_before
|
77
76
|
raise ArgumentError, "Can't parallelize rules with :not_after" if i.not_after
|
78
77
|
|
79
|
-
next if i.reverse_run == true
|
80
78
|
a << [compile_item(i.from, map, :par), compile_item(i.to, map, :parstr)]
|
81
79
|
end
|
82
80
|
ah = a.hash.abs
|
@@ -90,8 +88,7 @@ class Interscript::Compiler::Javascript < Interscript::Compiler
|
|
90
88
|
a = []
|
91
89
|
Interscript::Stdlib.deterministic_sort_by_max_length(r.children).each do |i|
|
92
90
|
raise ArgumentError, "Can't parallelize #{i.class}" unless Interscript::Node::Rule::Sub === i
|
93
|
-
|
94
|
-
next if i.reverse_run == true
|
91
|
+
|
95
92
|
a << [build_regexp(i, map), compile_item(i.to, map, :parstr)]
|
96
93
|
end
|
97
94
|
ah = a.hash.abs
|
@@ -105,8 +102,6 @@ class Interscript::Compiler::Javascript < Interscript::Compiler
|
|
105
102
|
from = %{"#{build_regexp(r, map).gsub("/", "\\\\/")}"}
|
106
103
|
if r.to == :upcase
|
107
104
|
to = 'function(a){return a.toUpperCase();}'
|
108
|
-
elsif r.to == :downcase
|
109
|
-
to = 'function(a){return a.toLowerCase();}'
|
110
105
|
else
|
111
106
|
to = compile_item(r.to, map, :str)
|
112
107
|
end
|
@@ -42,7 +42,6 @@ class Interscript::Compiler::Ruby < Interscript::Compiler
|
|
42
42
|
|
43
43
|
def compile_rule(r, map = @map, wrapper = false)
|
44
44
|
c = ""
|
45
|
-
return c if r.reverse_run == true
|
46
45
|
case r
|
47
46
|
when Interscript::Node::Stage
|
48
47
|
c += "Interscript::Maps.add_map_stage \"#{@map.name}\", #{r.name.inspect} do |s|\n"
|
@@ -66,7 +65,6 @@ class Interscript::Compiler::Ruby < Interscript::Compiler
|
|
66
65
|
raise ArgumentError, "Can't parallelize rules with :not_before" if i.not_before
|
67
66
|
raise ArgumentError, "Can't parallelize rules with :not_after" if i.not_after
|
68
67
|
|
69
|
-
next if i.reverse_run == true
|
70
68
|
a << [compile_item(i.from, map, :par), compile_item(i.to, map, :parstr)]
|
71
69
|
end
|
72
70
|
ah = a.hash.abs
|
@@ -81,7 +79,6 @@ class Interscript::Compiler::Ruby < Interscript::Compiler
|
|
81
79
|
Interscript::Stdlib.deterministic_sort_by_max_length(r.children).each do |i|
|
82
80
|
raise ArgumentError, "Can't parallelize #{i.class}" unless Interscript::Node::Rule::Sub === i
|
83
81
|
|
84
|
-
next if i.reverse_run == true
|
85
82
|
a << [build_regexp(i, map), compile_item(i.to, map, :parstr)]
|
86
83
|
end
|
87
84
|
ah = a.hash.abs
|
@@ -95,8 +92,6 @@ class Interscript::Compiler::Ruby < Interscript::Compiler
|
|
95
92
|
from = "/#{build_regexp(r, map).gsub("/", "\\\\/")}/"
|
96
93
|
if r.to == :upcase
|
97
94
|
to = '&:upcase'
|
98
|
-
elsif r.to == :downcase
|
99
|
-
to = '&:downcase'
|
100
95
|
else
|
101
96
|
to = compile_item(r.to, map, :str)
|
102
97
|
end
|
@@ -37,11 +37,10 @@ class Interscript::DSL::Document
|
|
37
37
|
@node.dep_aliases[dep.name] = dep if dep.name
|
38
38
|
end
|
39
39
|
|
40
|
-
def stage(name = :main,
|
40
|
+
def stage(name = :main, &block)
|
41
41
|
puts "stage(#{name}) from #{self.inspect}" if $DEBUG
|
42
42
|
stage = Interscript::DSL::Stage.new(name, &block)
|
43
43
|
stage.node.doc_name = @node.name
|
44
|
-
stage.node.dont_reverse = dont_reverse
|
45
44
|
@node.stages[name] = stage.node
|
46
45
|
end
|
47
46
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Interscript::DSL::Group::Parallel < Interscript::DSL::Group
|
2
|
-
def initialize(
|
3
|
-
@node = Interscript::Node::Group::Parallel.new
|
2
|
+
def initialize(&block)
|
3
|
+
@node = Interscript::Node::Group::Parallel.new
|
4
4
|
self.instance_exec(&block)
|
5
5
|
end
|
6
6
|
end
|
@@ -8,16 +8,16 @@ class Interscript::DSL::Group
|
|
8
8
|
self.instance_exec(&block)
|
9
9
|
end
|
10
10
|
|
11
|
-
def run(stage
|
11
|
+
def run(stage)
|
12
12
|
if stage.class != Interscript::Node::Item::Stage
|
13
13
|
raise TypeError, "I::Node::Item::Stage expected, got #{stage.class}"
|
14
14
|
end
|
15
|
-
@node.children << Interscript::Node::Rule::Run.new(stage
|
15
|
+
@node.children << Interscript::Node::Rule::Run.new(stage)
|
16
16
|
end
|
17
17
|
|
18
18
|
def sub(from, to, **kwargs, &block)
|
19
|
-
puts "sub(#{from.inspect},#{to},
|
20
|
-
|
19
|
+
puts "sub(#{from.inspect},#{to}, kargs = #{
|
20
|
+
kargs.inspect
|
21
21
|
}) from #{self.inspect}" if $DEBUG
|
22
22
|
|
23
23
|
rule = Interscript::Node::Rule::Sub.new(from, to, **kwargs)
|
@@ -25,7 +25,6 @@ class Interscript::DSL::Group
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def upcase; :upcase; end
|
28
|
-
def downcase; :downcase; end
|
29
28
|
|
30
29
|
Interscript::Stdlib.available_functions.each do |fun|
|
31
30
|
define_method fun do |**kwargs|
|
@@ -36,9 +35,9 @@ class Interscript::DSL::Group
|
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
|
-
def parallel(
|
38
|
+
def parallel(&block)
|
40
39
|
puts "parallel(#{chars.inspect}) from #{self.inspect}" if $DEBUG
|
41
|
-
group = Interscript::DSL::Group::Parallel.new(
|
40
|
+
group = Interscript::DSL::Group::Parallel.new(&block)
|
42
41
|
@node.children << group.node
|
43
42
|
end
|
44
43
|
end
|
data/lib/interscript/dsl.rb
CHANGED
@@ -2,45 +2,12 @@ require "yaml"
|
|
2
2
|
|
3
3
|
module Interscript::DSL
|
4
4
|
@cache = {}
|
5
|
-
def self.parse(map_name
|
5
|
+
def self.parse(map_name)
|
6
6
|
# map name aliases? here may be a place to wrap it
|
7
7
|
|
8
8
|
return @cache[map_name] if @cache[map_name]
|
9
|
-
|
10
|
-
# This is a composition, so let's make a new virtual map
|
11
|
-
# that calls all maps in a sequence.
|
12
|
-
if map_name.include? "|"
|
13
|
-
map_parts = map_name.split("|").map(&:strip)
|
14
|
-
|
15
|
-
doc = Interscript::DSL::Document.new(map_name) do
|
16
|
-
map_parts.each_with_index do |i, idx|
|
17
|
-
dependency i, as: :"part#{idx}"
|
18
|
-
end
|
19
|
-
|
20
|
-
stage {
|
21
|
-
map_parts.each_with_index do |i, idx|
|
22
|
-
run map[:"part#{idx}"].stage.main
|
23
|
-
end
|
24
|
-
}
|
25
|
-
end.node
|
26
|
-
|
27
|
-
return @cache[map_name] = doc
|
28
|
-
end
|
29
|
-
|
30
|
-
path = begin
|
31
|
-
Interscript.locate(map_name)
|
32
|
-
rescue Interscript::MapNotFoundError => e
|
33
|
-
# But maybe we called the map in a reversed fashion?
|
34
|
-
begin
|
35
|
-
raise e if reverse == false # Protect from an infinite loop
|
36
|
-
reverse_name = Interscript::Node::Document.reverse_name(map_name)
|
37
|
-
return @cache[map_name] = parse(reverse_name, reverse: false).reverse
|
38
|
-
rescue Interscript::MapNotFoundError
|
39
|
-
raise e
|
40
|
-
end
|
41
|
-
end
|
9
|
+
path = Interscript.locate(map_name)
|
42
10
|
library = path.end_with?(".iml")
|
43
|
-
|
44
11
|
map_name = File.basename(path, ".imp")
|
45
12
|
map_name = File.basename(map_name, ".iml")
|
46
13
|
|
@@ -76,7 +76,6 @@ class Interscript::Interpreter < Interscript::Compiler
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def execute_rule r
|
79
|
-
return if r.reverse_run == true
|
80
79
|
case r
|
81
80
|
when Interscript::Node::Group::Parallel
|
82
81
|
if r.cached_tree
|
@@ -97,7 +96,6 @@ class Interscript::Interpreter < Interscript::Compiler
|
|
97
96
|
raise ArgumentError, "Can't parallelize rules with :after" if i.after
|
98
97
|
raise ArgumentError, "Can't parallelize rules with :not_before" if i.not_before
|
99
98
|
raise ArgumentError, "Can't parallelize rules with :not_after" if i.not_after
|
100
|
-
next if i.reverse_run == true
|
101
99
|
subs_array << [build_item(i.from, :par), build_item(i.to, :parstr)]
|
102
100
|
end
|
103
101
|
tree = Interscript::Stdlib.parallel_replace_compile_tree(subs_array) #.sort_by{|k,v| -k.length})
|
@@ -110,7 +108,7 @@ class Interscript::Interpreter < Interscript::Compiler
|
|
110
108
|
subs_array = []
|
111
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
|
112
110
|
raise ArgumentError, "Can't parallelize #{i.class}" unless Interscript::Node::Rule::Sub === i
|
113
|
-
|
111
|
+
|
114
112
|
subs_array << [build_regexp(i), build_item(i.to, :parstr)]
|
115
113
|
end
|
116
114
|
r.subs_regexp = Interscript::Stdlib.parallel_regexp_compile(subs_array)
|
@@ -131,8 +129,6 @@ class Interscript::Interpreter < Interscript::Compiler
|
|
131
129
|
when Interscript::Node::Rule::Sub
|
132
130
|
if r.to == :upcase
|
133
131
|
@str = @str.gsub(Regexp.new(build_regexp(r)), &:upcase)
|
134
|
-
elsif r.to == :downcase
|
135
|
-
@str = @str.gsub(Regexp.new(build_regexp(r)), &:downcase)
|
136
132
|
else
|
137
133
|
@str = @str.gsub(Regexp.new(build_regexp(r)), build_item(r.to, :str))
|
138
134
|
end
|
@@ -4,22 +4,6 @@ class Interscript::Node::Dependency < Interscript::Node
|
|
4
4
|
def initialize
|
5
5
|
end
|
6
6
|
|
7
|
-
def reverse
|
8
|
-
rdep = self.class.new
|
9
|
-
rdep.name = name
|
10
|
-
rdep.full_name = Interscript::Node::Document.reverse_name(full_name)
|
11
|
-
rdep.import = import
|
12
|
-
rdep.document = document&.reverse
|
13
|
-
rdep
|
14
|
-
end
|
15
|
-
|
16
|
-
def ==(other)
|
17
|
-
super &&
|
18
|
-
self.full_name == other.full_name &&
|
19
|
-
self.import == other.import &&
|
20
|
-
self.name == other.name
|
21
|
-
end
|
22
|
-
|
23
7
|
def to_hash
|
24
8
|
{ :class => self.class.to_s,
|
25
9
|
:name => @name,
|
@@ -1,7 +1,6 @@
|
|
1
1
|
class Interscript::Node::Document
|
2
2
|
attr_accessor :metadata, :tests, :name
|
3
3
|
attr_accessor :dependencies, :aliases, :stages, :dep_aliases
|
4
|
-
attr_accessor :reversed_from
|
5
4
|
|
6
5
|
def initialize
|
7
6
|
puts "Interscript::Node::Document.new " if $DEBUG
|
@@ -35,39 +34,6 @@ class Interscript::Node::Document
|
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
def reverse
|
39
|
-
@reverse ||= self.class.new.tap do |rdoc|
|
40
|
-
rdoc.name = self.class.reverse_name(name)
|
41
|
-
rdoc.metadata = metadata&.reverse
|
42
|
-
rdoc.tests = tests&.reverse
|
43
|
-
rdoc.dependencies = dependencies.map(&:reverse)
|
44
|
-
rdoc.stages = stages.transform_values(&:reverse)
|
45
|
-
rdoc.dep_aliases = dep_aliases.transform_values(&:reverse)
|
46
|
-
rdoc.aliases = aliases
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.reverse_name(name)
|
51
|
-
newname = (name || "noname").split("-")
|
52
|
-
newname[2], newname[3] = newname[3], newname[2] if newname.length >= 4
|
53
|
-
newname = newname.join("-")
|
54
|
-
if newname == name
|
55
|
-
newname.gsub!("-reverse", "")
|
56
|
-
end
|
57
|
-
if newname == name
|
58
|
-
newname += "-reverse"
|
59
|
-
end
|
60
|
-
newname
|
61
|
-
end
|
62
|
-
|
63
|
-
def ==(other)
|
64
|
-
self.class == other.class &&
|
65
|
-
self.metadata == other.metadata &&
|
66
|
-
self.tests == other.tests &&
|
67
|
-
self.stages == other.stages &&
|
68
|
-
self.aliases == other.aliases
|
69
|
-
end
|
70
|
-
|
71
37
|
def to_hash
|
72
38
|
{ :class => self.class.to_s, :metadata => @metadata&.to_hash,
|
73
39
|
:tests => @tests&.to_hash,
|
@@ -1,8 +1,7 @@
|
|
1
1
|
class Interscript::Node::Group < Interscript::Node
|
2
|
-
attr_accessor :children
|
2
|
+
attr_accessor :children
|
3
3
|
|
4
|
-
def initialize
|
5
|
-
@reverse_run = reverse_run
|
4
|
+
def initialize
|
6
5
|
@children = []
|
7
6
|
end
|
8
7
|
|
@@ -21,21 +20,11 @@ class Interscript::Node::Group < Interscript::Node
|
|
21
20
|
self
|
22
21
|
end
|
23
22
|
|
24
|
-
def reverse
|
25
|
-
self.class.new(reverse_run: reverse_run.nil? ? nil : !reverse_run).tap do |r|
|
26
|
-
r.children = self.children.reverse.map(&:reverse)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
23
|
def to_hash
|
31
24
|
{ :class => self.class.to_s,
|
32
25
|
:children => @children.map{|x| x.to_hash} }
|
33
26
|
end
|
34
27
|
|
35
|
-
def ==(other)
|
36
|
-
super && self.children == other.children && self.reverse_run == other.reverse_run
|
37
|
-
end
|
38
|
-
|
39
28
|
def inspect
|
40
29
|
@children.map(&:inspect).join("\n").gsub(/^/, " ")
|
41
30
|
end
|
@@ -10,10 +10,6 @@ class Interscript::Node::Item::Alias < Interscript::Node::Item
|
|
10
10
|
!map && Interscript::Stdlib::ALIASES.has_key?(name)
|
11
11
|
end
|
12
12
|
|
13
|
-
def boundary_like?
|
14
|
-
Interscript::Stdlib.boundary_like_alias?(name)
|
15
|
-
end
|
16
|
-
|
17
13
|
def max_length
|
18
14
|
if stdlib?
|
19
15
|
([:none].include? name) ? 0 : 1
|
@@ -23,10 +19,6 @@ class Interscript::Node::Item::Alias < Interscript::Node::Item
|
|
23
19
|
end
|
24
20
|
end
|
25
21
|
|
26
|
-
# Not implemented properly
|
27
|
-
def downcase; self; end
|
28
|
-
def upcase; self; end
|
29
|
-
|
30
22
|
def first_string
|
31
23
|
self
|
32
24
|
end
|
@@ -40,10 +32,6 @@ class Interscript::Node::Item::Alias < Interscript::Node::Item
|
|
40
32
|
}
|
41
33
|
end
|
42
34
|
|
43
|
-
def ==(other)
|
44
|
-
super && self.name == other.name && self.map == other.map
|
45
|
-
end
|
46
|
-
|
47
35
|
def inspect
|
48
36
|
if map
|
49
37
|
"map.#{map}.#{name}"
|
@@ -25,9 +25,6 @@ class Interscript::Node::Item::Any < Interscript::Node::Item
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def downcase; self.class.new(self.data.map(&:downcase)); end
|
29
|
-
def upcase; self.class.new(self.data.map(&:upcase)); end
|
30
|
-
|
31
28
|
def first_string
|
32
29
|
case @value
|
33
30
|
when Array
|
@@ -73,10 +70,6 @@ class Interscript::Node::Item::Any < Interscript::Node::Item
|
|
73
70
|
hash
|
74
71
|
end
|
75
72
|
|
76
|
-
def ==(other)
|
77
|
-
super && self.data == other.data
|
78
|
-
end
|
79
|
-
|
80
73
|
def inspect
|
81
74
|
"any(#{value.inspect})"
|
82
75
|
end
|
@@ -15,18 +15,11 @@ class Interscript::Node::Item::CaptureGroup < Interscript::Node::Item
|
|
15
15
|
data.nth_string
|
16
16
|
end
|
17
17
|
|
18
|
-
def downcase; self.dup.tap { |i| i.data = i.data.downcase }; end
|
19
|
-
def upcase; self.dup.tap { |i| i.data = i.data.upcase }; end
|
20
|
-
|
21
18
|
def to_hash
|
22
19
|
{ :class => self.class.to_s,
|
23
20
|
:data => self.data.to_hash }
|
24
21
|
end
|
25
22
|
|
26
|
-
def ==(other)
|
27
|
-
super && self.data == other.data
|
28
|
-
end
|
29
|
-
|
30
23
|
def inspect
|
31
24
|
"capture(#{@data.inspect})"
|
32
25
|
end
|
@@ -51,10 +44,6 @@ class Interscript::Node::Item::CaptureRef < Interscript::Node::Item
|
|
51
44
|
:id => self.id }
|
52
45
|
end
|
53
46
|
|
54
|
-
def ==(other)
|
55
|
-
super && self.id == other.id
|
56
|
-
end
|
57
|
-
|
58
47
|
def inspect
|
59
48
|
"ref(#{@id.inspect})"
|
60
49
|
end
|
@@ -10,35 +10,11 @@ class Interscript::Node::Item::Group < Interscript::Node::Item
|
|
10
10
|
def +(item)
|
11
11
|
item = Interscript::Node::Item.try_convert(item)
|
12
12
|
out = self.dup
|
13
|
-
|
14
|
-
out.children += item.children
|
15
|
-
else
|
16
|
-
out.children << item
|
17
|
-
end
|
13
|
+
out.children << item
|
18
14
|
out.verify!
|
19
15
|
out
|
20
16
|
end
|
21
17
|
|
22
|
-
def compact
|
23
|
-
out = self.dup do |n|
|
24
|
-
n.children = n.children.reject do |i|
|
25
|
-
(Interscript::Node::Alias === i && i.name == :none) ||
|
26
|
-
(Interscript::Node::String === i && i.data == "")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
if out.children.count == 0
|
31
|
-
Interscript::Node::Alias.new(:none)
|
32
|
-
elsif out.children.count == 1
|
33
|
-
out.children.first
|
34
|
-
else
|
35
|
-
out
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def downcase; self.dup.tap { |i| i.children = i.children.map(&:downcase) }; end
|
40
|
-
def upcase; self.dup.tap { |i| i.children = i.children.map(&:upcase) }; end
|
41
|
-
|
42
18
|
# Verify if a group is valid
|
43
19
|
def verify!
|
44
20
|
wrong = @children.find do |i|
|
@@ -69,10 +45,6 @@ class Interscript::Node::Item::Group < Interscript::Node::Item
|
|
69
45
|
:children => self.children.map{|x| x.to_hash} }
|
70
46
|
end
|
71
47
|
|
72
|
-
def ==(other)
|
73
|
-
super && self.children == other.children
|
74
|
-
end
|
75
|
-
|
76
48
|
def inspect
|
77
49
|
@children.map(&:inspect).join("+")
|
78
50
|
end
|
@@ -17,9 +17,6 @@ class Interscript::Node::Item::String < Interscript::Node::Item
|
|
17
17
|
self.data
|
18
18
|
end
|
19
19
|
|
20
|
-
def downcase; self.dup.tap { |i| i.data = i.data.downcase }; end
|
21
|
-
def upcase; self.dup.tap { |i| i.data = i.data.upcase }; end
|
22
|
-
|
23
20
|
alias nth_string first_string
|
24
21
|
|
25
22
|
def + other
|
@@ -36,10 +33,6 @@ class Interscript::Node::Item::String < Interscript::Node::Item
|
|
36
33
|
end
|
37
34
|
end
|
38
35
|
|
39
|
-
def ==(other)
|
40
|
-
super && self.data == other.data
|
41
|
-
end
|
42
|
-
|
43
36
|
def inspect
|
44
37
|
@data.inspect
|
45
38
|
end
|
@@ -36,10 +36,6 @@ class Interscript::Node::Item < Interscript::Node
|
|
36
36
|
:item => self.item }
|
37
37
|
end
|
38
38
|
|
39
|
-
def ==(other)
|
40
|
-
super
|
41
|
-
end
|
42
|
-
|
43
39
|
def self.try_convert(i)
|
44
40
|
i = Interscript::Node::Item::String.new(i) if i.class == ::String
|
45
41
|
raise TypeError, "Wrong type #{i.class}, expected I::Node::Item" unless Interscript::Node::Item === i
|
@@ -11,16 +11,6 @@ class Interscript::Node::MetaData < Interscript::Node
|
|
11
11
|
@data[k]
|
12
12
|
end
|
13
13
|
|
14
|
-
def reverse
|
15
|
-
self.class.new(data.dup, **{}).tap do |rmd|
|
16
|
-
rmd[:source_script], rmd[:destination_script] = rmd[:destination_script], rmd[:source_script]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def ==(other)
|
21
|
-
super && self.data == other.data
|
22
|
-
end
|
23
|
-
|
24
14
|
def to_hash
|
25
15
|
{:class => self.class.to_s,
|
26
16
|
:data => @data}
|
@@ -1,8 +1,7 @@
|
|
1
1
|
class Interscript::Node::Rule::Funcall < Interscript::Node::Rule
|
2
|
-
attr_accessor :name, :kwargs
|
3
|
-
def initialize name,
|
2
|
+
attr_accessor :name, :kwargs
|
3
|
+
def initialize name, **kwargs
|
4
4
|
@name = name
|
5
|
-
@reverse_run = reverse_run
|
6
5
|
@kwargs = kwargs
|
7
6
|
end
|
8
7
|
|
@@ -13,15 +12,6 @@ class Interscript::Node::Rule::Funcall < Interscript::Node::Rule
|
|
13
12
|
}
|
14
13
|
end
|
15
14
|
|
16
|
-
def reverse
|
17
|
-
self.class.new(Interscript::Stdlib.reverse_function[@name.to_sym],
|
18
|
-
reverse_run: reverse_run.nil? ? nil : !reverse_run, **kwargs)
|
19
|
-
end
|
20
|
-
|
21
|
-
def ==
|
22
|
-
super && self.name == other.name && self.kwargs == other.kwargs
|
23
|
-
end
|
24
|
-
|
25
15
|
def inspect
|
26
16
|
"#{@name} #{kwargs.inspect[1..-2]}"
|
27
17
|
end
|