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
@@ -1,8 +1,7 @@
|
|
1
1
|
class Interscript::Node::Rule::Run < Interscript::Node::Rule
|
2
|
-
attr_accessor :stage
|
3
|
-
def initialize stage
|
2
|
+
attr_accessor :stage
|
3
|
+
def initialize stage
|
4
4
|
@stage = stage
|
5
|
-
@reverse_run = reverse_run
|
6
5
|
end
|
7
6
|
|
8
7
|
def to_hash
|
@@ -10,19 +9,7 @@ class Interscript::Node::Rule::Run < Interscript::Node::Rule
|
|
10
9
|
:stage => self.stage.to_hash }
|
11
10
|
end
|
12
11
|
|
13
|
-
def reverse
|
14
|
-
Interscript::Node::Rule::Run.new(stage,
|
15
|
-
reverse_run: reverse_run.nil? ? nil : !reverse_run
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
def ==(other)
|
20
|
-
super && self.stage == other.stage
|
21
|
-
end
|
22
|
-
|
23
12
|
def inspect
|
24
|
-
|
25
|
-
out += ", reverse_run: #{@reverse_run.inspect}" unless reverse_run.nil?
|
26
|
-
out
|
13
|
+
"run #{@stage.inspect}"
|
27
14
|
end
|
28
15
|
end
|
@@ -1,19 +1,12 @@
|
|
1
1
|
class Interscript::Node::Rule::Sub < Interscript::Node::Rule
|
2
2
|
attr_accessor :from, :to
|
3
3
|
attr_accessor :before, :not_before, :after, :not_after
|
4
|
-
attr_accessor :reverse_before, :reverse_not_before, :reverse_after, :reverse_not_after
|
5
|
-
attr_accessor :reverse_run
|
6
4
|
attr_accessor :priority
|
7
5
|
|
8
|
-
def initialize
|
9
|
-
before: nil, not_before: nil,
|
10
|
-
after: nil, not_after: nil,
|
11
|
-
priority: nil, reverse_run: nil)
|
6
|
+
def initialize from, to, before: nil, not_before: nil, after: nil, not_after: nil, priority: nil
|
12
7
|
self.from = Interscript::Node::Item.try_convert from
|
13
8
|
if to == :upcase
|
14
9
|
self.to = :upcase
|
15
|
-
elsif to == :downcase
|
16
|
-
self.to = :downcase
|
17
10
|
else
|
18
11
|
self.to = Interscript::Node::Item.try_convert to
|
19
12
|
end
|
@@ -23,8 +16,6 @@ class Interscript::Node::Rule::Sub < Interscript::Node::Rule
|
|
23
16
|
#raise TypeError, "Can't supply both before and not_before" if before && not_before
|
24
17
|
#raise TypeError, "Can't supply both after and not_after" if after && not_after
|
25
18
|
|
26
|
-
self.reverse_run = reverse_run
|
27
|
-
|
28
19
|
self.before = Interscript::Node::Item.try_convert(before) if before
|
29
20
|
self.after = Interscript::Node::Item.try_convert(after) if after
|
30
21
|
self.not_before = Interscript::Node::Item.try_convert(not_before) if not_before
|
@@ -46,13 +37,7 @@ class Interscript::Node::Rule::Sub < Interscript::Node::Rule
|
|
46
37
|
puts params.inspect if $DEBUG
|
47
38
|
hash = { :class => self.class.to_s,
|
48
39
|
:from => self.from.to_hash,
|
49
|
-
:to => Symbol === self.to ? self.to : self.to.to_hash
|
50
|
-
:reverse_run => self.reverse_run,
|
51
|
-
:before => self.before&.to_hash,
|
52
|
-
:not_before => self.not_before&.to_hash,
|
53
|
-
:after => self.after&.to_hash,
|
54
|
-
:not_after => self.not_after&.to_hash,
|
55
|
-
:priority => self.priority
|
40
|
+
:to => Symbol === self.to ? self.to : self.to.to_hash
|
56
41
|
}
|
57
42
|
|
58
43
|
hash[:before] = self.before&.to_hash if self.before
|
@@ -64,165 +49,19 @@ class Interscript::Node::Rule::Sub < Interscript::Node::Rule
|
|
64
49
|
hash
|
65
50
|
end
|
66
51
|
|
67
|
-
def reverse
|
68
|
-
if to == :upcase
|
69
|
-
xfrom = from.downcase
|
70
|
-
xto = :downcase
|
71
|
-
elsif to == :downcase
|
72
|
-
xfrom = from.upcase
|
73
|
-
xto = :upcase
|
74
|
-
else
|
75
|
-
xto, xfrom = reverse_transfer(from, to)
|
76
|
-
end
|
77
|
-
|
78
|
-
# A special case: sub "a", "" shouldn't be present in a reverse map
|
79
|
-
rrun = self.reverse_run.nil? ? nil : !self.reverse_run
|
80
|
-
if rrun.nil? && !has_assertions? &&
|
81
|
-
(xfrom == "" ||
|
82
|
-
(Interscript::Node::Item::String === xfrom && xfrom.data == '') ||
|
83
|
-
(Interscript::Node::Item::Alias === xfrom && xfrom.name == :none)
|
84
|
-
)
|
85
|
-
|
86
|
-
rrun = true
|
87
|
-
end
|
88
|
-
|
89
|
-
Interscript::Node::Rule::Sub.new(xfrom, xto,
|
90
|
-
before: before, after: after,
|
91
|
-
not_before: not_before, not_after: not_after,
|
92
|
-
|
93
|
-
reverse_run: rrun,
|
94
|
-
|
95
|
-
priority: priority ? -priority : nil
|
96
|
-
)
|
97
|
-
end
|
98
|
-
|
99
|
-
def has_assertions?
|
100
|
-
!!(before || not_before || not_after || after)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Attempt to transfer some references to boundary/line_begin around.
|
104
|
-
# Those in general should go into before/after clauses, but for now
|
105
|
-
# let's try to get the best compatibility possible. Also, CaptureGroup,
|
106
|
-
# CaptureRef need to be shifted around
|
107
|
-
def reverse_transfer from, to
|
108
|
-
# This part is about moving initial and final boundary like aliases
|
109
|
-
case from
|
110
|
-
when Interscript::Node::Item::Group
|
111
|
-
first = from.children.first
|
112
|
-
last = from.children.last
|
113
|
-
|
114
|
-
if Interscript::Node::Item::Alias === first && first.boundary_like?
|
115
|
-
out = Interscript::Node::Item::Group.new + first + to
|
116
|
-
to = out.compact
|
117
|
-
|
118
|
-
from = from.dup.tap do |i|
|
119
|
-
i.children = i.children[1..-1]
|
120
|
-
end.compact
|
121
|
-
end
|
122
|
-
|
123
|
-
if Interscript::Node::Item::Alias === last && last.boundary_like?
|
124
|
-
out = Interscript::Node::Item::Group.new + to + last
|
125
|
-
to = out.compact
|
126
|
-
|
127
|
-
from = from.dup.tap do |i|
|
128
|
-
i.children = i.children[0..-2]
|
129
|
-
end.compact
|
130
|
-
end
|
131
|
-
when Interscript::Node::Item::Alias
|
132
|
-
if from.boundary_like?
|
133
|
-
to = if from.name.to_s.end_with? "_end"
|
134
|
-
Interscript::Node::Item::Group.new + to + from
|
135
|
-
else
|
136
|
-
Interscript::Node::Item::Group.new + from + to
|
137
|
-
end
|
138
|
-
from = Interscript::Node::Item::Alias.new(:none)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
# This part is about moving backreferences
|
143
|
-
state = {left:[], right:[]}
|
144
|
-
|
145
|
-
from = reverse_transfer_visit(from, :from, state)
|
146
|
-
to = reverse_transfer_visit(to, :to, state)
|
147
|
-
|
148
|
-
[from, to]
|
149
|
-
end
|
150
|
-
|
151
|
-
private def reverse_transfer_visit(node, type, state)
|
152
|
-
node = Interscript::Node::Item.try_convert(node)
|
153
|
-
|
154
|
-
case node
|
155
|
-
when Interscript::Node::Item::Alias
|
156
|
-
if node.name == :kor_maybedash
|
157
|
-
state[:left] << node
|
158
|
-
Interscript::Node::Item::CaptureRef.new(state[:left].length)
|
159
|
-
else
|
160
|
-
node
|
161
|
-
end
|
162
|
-
when Interscript::Node::Item::String
|
163
|
-
node
|
164
|
-
when Interscript::Node::Item::Any
|
165
|
-
if Array === node.value
|
166
|
-
node.dup.tap do |i|
|
167
|
-
i.value = i.value.map { |c| reverse_transfer_visit(c, type, state) }
|
168
|
-
end
|
169
|
-
else
|
170
|
-
node
|
171
|
-
end
|
172
|
-
when Interscript::Node::Item::Group
|
173
|
-
node.dup.tap do |i|
|
174
|
-
i.children = i.children.map { |c| reverse_transfer_visit(c, type, state) }
|
175
|
-
end
|
176
|
-
when Interscript::Node::Item::Repeat
|
177
|
-
node.dup.tap do |i|
|
178
|
-
i.data = reverse_transfer_visit(i.data, type, state)
|
179
|
-
end
|
180
|
-
when Interscript::Node::Item::CaptureRef
|
181
|
-
if type == :from
|
182
|
-
node
|
183
|
-
elsif state[:right][node.id]
|
184
|
-
node
|
185
|
-
else
|
186
|
-
state[:right][node.id] = true
|
187
|
-
state[:left][node.id - 1] or raise "Capture count doesn't match"
|
188
|
-
end
|
189
|
-
when Interscript::Node::Item::CaptureGroup
|
190
|
-
state[:left] << node
|
191
|
-
out = Interscript::Node::Item::CaptureRef.new(state[:left].length)
|
192
|
-
reverse_transfer_visit(node.data, type, state) # Visit but don't care
|
193
|
-
out
|
194
|
-
else
|
195
|
-
raise "Type #{node.class} unhandled!"
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def ==(other)
|
200
|
-
super &&
|
201
|
-
self.from == other.from &&
|
202
|
-
self.to == other.to &&
|
203
|
-
self.before == other.before &&
|
204
|
-
self.after == other.after &&
|
205
|
-
self.not_before == other.not_before &&
|
206
|
-
self.not_after == other.not_after &&
|
207
|
-
self.priority == other.priority
|
208
|
-
end
|
209
|
-
|
210
52
|
def inspect
|
211
53
|
out = "sub "
|
212
54
|
params = []
|
213
55
|
params << @from.inspect
|
214
|
-
if
|
215
|
-
params <<
|
56
|
+
if @to == :upcase
|
57
|
+
params << "upcase"
|
216
58
|
else
|
217
59
|
params << @to.inspect
|
218
60
|
end
|
219
|
-
params << "reverse_run: #{@reverse_run.inspect}" unless @reverse_run.nil?
|
220
|
-
|
221
61
|
params << "before: #{@before.inspect}" if @before
|
222
62
|
params << "after: #{@after.inspect}" if @after
|
223
63
|
params << "not_before: #{@not_before.inspect}" if @not_before
|
224
64
|
params << "not_after: #{@not_after.inspect}" if @not_after
|
225
|
-
|
226
65
|
params << "priority: #{@priority.inspect}" if @priority
|
227
66
|
out << params.join(", ")
|
228
67
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
class Interscript::Node::Stage < Interscript::Node::Group::Sequential
|
2
|
-
attr_accessor :name, :doc_name
|
2
|
+
attr_accessor :name, :doc_name
|
3
3
|
|
4
|
-
def initialize
|
4
|
+
def initialize name = :main
|
5
5
|
@name = name
|
6
|
-
|
7
|
-
@dont_reverse = dont_reverse
|
8
|
-
super(reverse_run: reverse_run)
|
6
|
+
super()
|
9
7
|
end
|
10
8
|
|
11
9
|
def to_hash
|
@@ -14,32 +12,8 @@ class Interscript::Node::Stage < Interscript::Node::Group::Sequential
|
|
14
12
|
:children => @children.map{|x| x.to_hash} }
|
15
13
|
end
|
16
14
|
|
17
|
-
def reverse
|
18
|
-
return self if dont_reverse
|
19
|
-
|
20
|
-
@reverse ||= begin
|
21
|
-
self.class.new(name,
|
22
|
-
doc_name: Interscript::Node::Document.reverse_name(doc_name),
|
23
|
-
reverse_run: reverse_run.nil? ? nil : !reverse_run
|
24
|
-
).tap do |r|
|
25
|
-
r.children = self.children.reverse.map(&:reverse)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def ==(other)
|
31
|
-
super &&
|
32
|
-
self.name == other.name &&
|
33
|
-
self.reverse_run == other.reverse_run &&
|
34
|
-
self.dont_reverse == other.dont_reverse
|
35
|
-
end
|
36
|
-
|
37
15
|
def inspect
|
38
|
-
|
39
|
-
args << "#{@name}" if @name != :main
|
40
|
-
args << "dont_reverse: true" if dont_reverse
|
41
|
-
name = ""
|
42
|
-
name = "(#{args.join(", ")})" unless args.empty?
|
16
|
+
name = "(#{@name})" if @name != :main
|
43
17
|
"stage#{name} {\n#{super}\n}"
|
44
18
|
end
|
45
19
|
end
|
@@ -8,16 +8,6 @@ class Interscript::Node::Tests < Interscript::Node
|
|
8
8
|
@data << pair
|
9
9
|
end
|
10
10
|
|
11
|
-
def reverse
|
12
|
-
self.class.new(data.map do |from,to,reverse_run|
|
13
|
-
[to, from, reverse_run == nil ? nil : !reverse_run]
|
14
|
-
end)
|
15
|
-
end
|
16
|
-
|
17
|
-
def ==(other)
|
18
|
-
super && self.data == other.data
|
19
|
-
end
|
20
|
-
|
21
11
|
def to_hash
|
22
12
|
{ :class => self.class.to_s,
|
23
13
|
:data => @data }
|
data/lib/interscript/node.rb
CHANGED
data/lib/interscript/stdlib.rb
CHANGED
@@ -22,10 +22,6 @@ class Interscript::Stdlib
|
|
22
22
|
! %i[none space].include?(a)
|
23
23
|
end
|
24
24
|
|
25
|
-
def self.boundary_like_alias?(a)
|
26
|
-
%i[line_start line_end string_start string_end boundary non_word_boundary].include?(a)
|
27
|
-
end
|
28
|
-
|
29
25
|
@treecache = {}
|
30
26
|
|
31
27
|
def self.parallel_regexp_compile(subs_hash)
|
@@ -171,20 +167,7 @@ class Interscript::Stdlib
|
|
171
167
|
end
|
172
168
|
|
173
169
|
def self.available_functions
|
174
|
-
%i[title_case downcase compose decompose separate
|
175
|
-
end
|
176
|
-
|
177
|
-
def self.reverse_function
|
178
|
-
{
|
179
|
-
title_case: :downcase, # Those two are best-effort,
|
180
|
-
downcase: :title_case, # but probably wrong.
|
181
|
-
|
182
|
-
compose: :decompose,
|
183
|
-
decompose: :compose,
|
184
|
-
|
185
|
-
separate: :unseparate,
|
186
|
-
unseparate: :separate
|
187
|
-
}
|
170
|
+
%i[title_case downcase compose decompose separate secryst]
|
188
171
|
end
|
189
172
|
|
190
173
|
module Functions
|
@@ -194,13 +177,8 @@ class Interscript::Stdlib
|
|
194
177
|
output
|
195
178
|
end
|
196
179
|
|
197
|
-
def self.downcase(output,
|
198
|
-
|
199
|
-
output = output.gsub(/^(.)/, &:downcase)
|
200
|
-
output = output.gsub(/#{word_separator}(.)/, &:downcase) unless word_separator == ''
|
201
|
-
else
|
202
|
-
output.downcase
|
203
|
-
end
|
180
|
+
def self.downcase(output, _:nil)
|
181
|
+
output.downcase
|
204
182
|
end
|
205
183
|
|
206
184
|
def self.compose(output, _:nil)
|
@@ -215,10 +193,6 @@ class Interscript::Stdlib
|
|
215
193
|
output.split("").join(separator)
|
216
194
|
end
|
217
195
|
|
218
|
-
def self.unseparate(output, separator: " ")
|
219
|
-
output.split(separator).join("")
|
220
|
-
end
|
221
|
-
|
222
196
|
@secryst_models = {}
|
223
197
|
def self.secryst(output, model:)
|
224
198
|
require "secryst" rescue nil # Try to load secryst, but don't fail hard if not possible.
|
@@ -233,21 +207,5 @@ class Interscript::Stdlib
|
|
233
207
|
@secryst_models[model].translate(i)
|
234
208
|
end.join("\n")
|
235
209
|
end
|
236
|
-
|
237
|
-
def self.rababa(output, config:)
|
238
|
-
require "rababa" rescue nil # Try to load rababa, but don't fail hard if not possible.
|
239
|
-
unless defined? Rababa
|
240
|
-
raise StandardError, "Rababa is not loaded. Please read docs/Usage_with_Rababa.adoc"
|
241
|
-
end
|
242
|
-
|
243
|
-
config_value = Interscript.rababa_configs[config]
|
244
|
-
model_uri = config_value['model']
|
245
|
-
rababa_config = config_value['config']
|
246
|
-
model_path = Interscript.rababa_provision(config, model_uri)
|
247
|
-
|
248
|
-
@rababa_diacritizer ||= Rababa::Diacritizer.new(model_path, rababa_config)
|
249
|
-
|
250
|
-
@rababa_diacritizer.diacritize_text(output)
|
251
|
-
end
|
252
210
|
end
|
253
211
|
end
|
data/lib/interscript/version.rb
CHANGED
@@ -10,7 +10,6 @@ class Interscript::Node::Group
|
|
10
10
|
more << "after: #{rule.after.to_html(map)}" if rule.after
|
11
11
|
more << "<nobr>not before:</nobr> #{rule.not_before.to_html(map)}" if rule.not_before
|
12
12
|
more << "<nobr>not after:</nobr> #{rule.not_after.to_html(map)}" if rule.not_after
|
13
|
-
more << "<nobr>reverse run:</nobr> #{rule.reverse_run}" unless rule.reverse_run.nil?
|
14
13
|
more = more.join(", ")
|
15
14
|
|
16
15
|
out << {
|
@@ -25,14 +24,11 @@ class Interscript::Node::Group
|
|
25
24
|
children: rule.to_visualization_array(map)
|
26
25
|
}
|
27
26
|
when Interscript::Node::Rule::Funcall
|
28
|
-
more = rule.kwargs.map do |k,v|
|
29
|
-
"#{k.to_s.gsub("_", " ")}: #{v}"
|
30
|
-
end
|
31
|
-
more << "<nobr>reverse run:</nobr> #{rule.reverse_run}" unless rule.reverse_run.nil?
|
32
|
-
|
33
27
|
out << {
|
34
28
|
type: rule.name.to_s.gsub("_", " ").gsub(/^(.)/, &:upcase),
|
35
|
-
more:
|
29
|
+
more: rule.kwargs.map do |k,v|
|
30
|
+
"#{k.to_s.gsub("_", " ")}: #{v}"
|
31
|
+
end.join(", ")
|
36
32
|
}
|
37
33
|
when Interscript::Node::Rule::Run
|
38
34
|
if rule.stage.map
|
@@ -43,14 +39,10 @@ class Interscript::Node::Group
|
|
43
39
|
stage = rule.stage.name
|
44
40
|
end
|
45
41
|
|
46
|
-
more = []
|
47
|
-
more << "<nobr>reverse run:</nobr> #{rule.reverse_run}" unless rule.reverse_run.nil?
|
48
|
-
|
49
42
|
out << {
|
50
43
|
type: "Run",
|
51
44
|
doc: doc.name,
|
52
|
-
stage: stage
|
53
|
-
more: more.join(", "),
|
45
|
+
stage: stage
|
54
46
|
}
|
55
47
|
else
|
56
48
|
out << {
|
data/lib/interscript.rb
CHANGED
@@ -53,16 +53,6 @@ module Interscript
|
|
53
53
|
output_file
|
54
54
|
end
|
55
55
|
|
56
|
-
# Detects the transliteration that gives the most close approximation
|
57
|
-
# of transliterating source into destination.
|
58
|
-
#
|
59
|
-
# Set multiple: true to get a full report.
|
60
|
-
def detect(source, destination, **kwargs)
|
61
|
-
detector = Detector.new
|
62
|
-
detector.set_from_kwargs(**kwargs)
|
63
|
-
detector.(source, destination)
|
64
|
-
end
|
65
|
-
|
66
56
|
def map_gems
|
67
57
|
@map_gems ||= Gem.find_latest_files('interscript-maps.yaml').map do |i|
|
68
58
|
[i, YAML.load_file(i)]
|
@@ -86,56 +76,6 @@ module Interscript
|
|
86
76
|
end.compact.flatten
|
87
77
|
end
|
88
78
|
|
89
|
-
def rababa_configs
|
90
|
-
@rababa_configs ||= map_gems.map do |i,v|
|
91
|
-
v["rababa-configs"]
|
92
|
-
end.compact.inject({}) do |a,b|
|
93
|
-
a.merge(b)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# This code is borrowed from Secryst and should end up in Rababa, but for now,
|
98
|
-
# let's keep it here.
|
99
|
-
def rababa_provision(model_name, model_uri)
|
100
|
-
require 'fileutils'
|
101
|
-
require 'open-uri'
|
102
|
-
|
103
|
-
# We provision the environment in the following way:
|
104
|
-
# First, we try the RABABA_DATA environment variable. If that's available,
|
105
|
-
# we use it to store the Rababa data we need. Otherwise, we try the following
|
106
|
-
# paths:
|
107
|
-
|
108
|
-
possible_paths = [
|
109
|
-
"/var/lib/rababa",
|
110
|
-
"/usr/local/share/rababa",
|
111
|
-
"/usr/share/rababa",
|
112
|
-
File.join(Dir.home, ".local/share/rababa")
|
113
|
-
]
|
114
|
-
|
115
|
-
# We find the first writable path
|
116
|
-
|
117
|
-
write_path = nil
|
118
|
-
|
119
|
-
([ENV["RABABA_DATA"]] + possible_paths).compact.each do |path|
|
120
|
-
FileUtils.mkdir_p(path)
|
121
|
-
write_path = path unless write_path
|
122
|
-
rescue
|
123
|
-
end
|
124
|
-
|
125
|
-
raise StandardError, "Can't find a writable path for Rababa. Consider setting a RABABA_DATA environment variable" unless write_path
|
126
|
-
|
127
|
-
model_path = "#{write_path}/model-#{model_name}.onnx"
|
128
|
-
|
129
|
-
# Redownload every hour
|
130
|
-
if File.exist?(model_path) && File.mtime(model_path) + 3600 >= Time.now
|
131
|
-
return model_path
|
132
|
-
else
|
133
|
-
data = URI.open(model_uri).read
|
134
|
-
File.write(model_path, data)
|
135
|
-
return model_path
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
79
|
def map_aliases
|
140
80
|
return @map_aliases if @map_aliases
|
141
81
|
|
@@ -159,22 +99,6 @@ module Interscript
|
|
159
99
|
|
160
100
|
basename ? imps.map { |j| File.basename(j, ".#{ext}") } : imps
|
161
101
|
end
|
162
|
-
|
163
|
-
# Removes the excluded maps for a given compiler and RUBY_PLATFORM.
|
164
|
-
# To be used by tests
|
165
|
-
# and builders. It uses the `skip` directive in interscript-maps.yaml
|
166
|
-
def exclude_maps(maps, compiler:, platform: true)
|
167
|
-
map_gems.each do |i,v|
|
168
|
-
[compiler.name, (Gem::Platform.local.os if platform)].compact.each do |name|
|
169
|
-
skips = v.dig('skip', name) || []
|
170
|
-
skips.each do |skip|
|
171
|
-
skip_re = /#{Regexp.escape(skip).gsub("\\*", ".*?")}/
|
172
|
-
maps = maps.grep_v(skip_re)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
maps
|
177
|
-
end
|
178
102
|
end
|
179
103
|
end
|
180
104
|
|
@@ -185,5 +109,3 @@ require "interscript/interpreter"
|
|
185
109
|
|
186
110
|
require 'interscript/dsl'
|
187
111
|
require 'interscript/node'
|
188
|
-
|
189
|
-
require 'interscript/detector'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interscript
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
@@ -26,20 +26,6 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: interscript-maps
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 2.1.0a
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 2.1.0a
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: text
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
@@ -84,7 +70,6 @@ files:
|
|
84
70
|
- lib/interscript/compiler.rb
|
85
71
|
- lib/interscript/compiler/javascript.rb
|
86
72
|
- lib/interscript/compiler/ruby.rb
|
87
|
-
- lib/interscript/detector.rb
|
88
73
|
- lib/interscript/dsl.rb
|
89
74
|
- lib/interscript/dsl/aliases.rb
|
90
75
|
- lib/interscript/dsl/document.rb
|
@@ -119,7 +104,6 @@ files:
|
|
119
104
|
- lib/interscript/node/stage.rb
|
120
105
|
- lib/interscript/node/tests.rb
|
121
106
|
- lib/interscript/stdlib.rb
|
122
|
-
- lib/interscript/utils/helpers.rb
|
123
107
|
- lib/interscript/utils/regexp_converter.rb
|
124
108
|
- lib/interscript/version.rb
|
125
109
|
- lib/interscript/visualize.rb
|
@@ -145,9 +129,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
129
|
version: 2.3.0
|
146
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
131
|
requirements:
|
148
|
-
- - "
|
132
|
+
- - ">="
|
149
133
|
- !ruby/object:Gem::Version
|
150
|
-
version:
|
134
|
+
version: '0'
|
151
135
|
requirements: []
|
152
136
|
rubygems_version: 3.1.6
|
153
137
|
signing_key:
|
data/lib/interscript/detector.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require "text"
|
2
|
-
|
3
|
-
class Interscript::Detector
|
4
|
-
attr_accessor :compiler
|
5
|
-
attr_accessor :distance_computer
|
6
|
-
attr_accessor :map_pattern
|
7
|
-
|
8
|
-
# TODO: use transliterate_each
|
9
|
-
attr_accessor :each
|
10
|
-
|
11
|
-
attr_accessor :load_path
|
12
|
-
attr_accessor :cache
|
13
|
-
|
14
|
-
# Returns a summary of all detected transliterations
|
15
|
-
attr_accessor :multiple
|
16
|
-
|
17
|
-
def initialize
|
18
|
-
@compiler = Interscript::Interpreter
|
19
|
-
@distance_computer = DistanceComputer::Levenshtein
|
20
|
-
@map_pattern = "*"
|
21
|
-
|
22
|
-
@each = false
|
23
|
-
|
24
|
-
@load_path = false
|
25
|
-
@cache = CACHE
|
26
|
-
end
|
27
|
-
|
28
|
-
def set_from_kwargs(**kwargs)
|
29
|
-
kwargs.each do |k,v|
|
30
|
-
self.public_send(:"#{k}=", v)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def call(source, destination)
|
35
|
-
maps = Interscript.maps(select: @map_pattern, load_path: @load_path)
|
36
|
-
|
37
|
-
summary = maps.map do |map|
|
38
|
-
try_dest = Interscript.transliterate(map, source, compiler: @compiler)
|
39
|
-
|
40
|
-
[map, try_dest]
|
41
|
-
end.map do |map, try_dest|
|
42
|
-
dist = @distance_computer.(try_dest, destination)
|
43
|
-
|
44
|
-
[map, dist]
|
45
|
-
end.sort_by(&:last).to_h
|
46
|
-
|
47
|
-
if @multiple
|
48
|
-
summary.to_h
|
49
|
-
else
|
50
|
-
summary.first.first
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
CACHE = {}
|
55
|
-
|
56
|
-
# A DistanceComputer needs to respond to #call(source, destination)
|
57
|
-
module DistanceComputer
|
58
|
-
Levenshtein = Text::Levenshtein.method(:distance)
|
59
|
-
end
|
60
|
-
end
|