interscript 2.1.0a9 → 2.1.0b1
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/Rakefile +64 -1
- data/lib/interscript/dsl.rb +2 -1
- data/lib/interscript/dsl/metadata.rb +52 -10
- data/lib/interscript/node/item/any.rb +17 -2
- data/lib/interscript/node/rule/sub.rb +10 -7
- data/lib/interscript/version.rb +1 -1
- data/lib/interscript/visualize.rb +61 -0
- data/lib/interscript/visualize/group.html.erb +59 -0
- data/lib/interscript/visualize/json.rb +57 -0
- data/lib/interscript/visualize/map.html.erb +46 -0
- data/lib/interscript/visualize/nodes.rb +89 -0
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5fc3d229c727e71662e0fd33a1e40424015f2c4caeea2b592a464554a3610ba1
|
4
|
+
data.tar.gz: f254317afa4d3d2372572df7b4751edcfb0fe2f24acc2ffc61978b613d062656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69bf1648abe50c5a27dd3a1c3d96edfd011c790b35fcfdba78ea0dd85c2339497c44add107571b05de4c042889f4b1fe9edb766a31a0613bd1b7d526bc4257de
|
7
|
+
data.tar.gz: 155a553e164a7ce32cf13ead6beaffdeb449937087d86fb605ec7813f818a1985fdc36624db8669f86b2e0bea5377ea853d6e960ed821c811cc016416b857537
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
+
require "bundler/setup"
|
1
2
|
require "bundler/gem_tasks"
|
2
3
|
require "rspec/core/rake_task"
|
3
4
|
|
4
5
|
RSpec::Core::RakeTask.new(:spec)
|
5
6
|
|
6
7
|
task :compile, [:compiler, :target] do |t, args|
|
7
|
-
require "bundler/setup"
|
8
8
|
require "interscript"
|
9
9
|
|
10
10
|
compiler, ext = case args[:compiler]
|
@@ -50,4 +50,67 @@ task :version, [:ver] do |t, ver|
|
|
50
50
|
File.write(mapsfile, mapsver)
|
51
51
|
end
|
52
52
|
|
53
|
+
task :generate_visualization_html do
|
54
|
+
require "fileutils"
|
55
|
+
require "interscript"
|
56
|
+
require "interscript/visualize"
|
57
|
+
|
58
|
+
FileUtils.rm_rf(dir = __dir__+"/visualizations/")
|
59
|
+
FileUtils.mkdir_p(dir)
|
60
|
+
|
61
|
+
Interscript.maps.each do |map|
|
62
|
+
html = Interscript::Visualize.(map)
|
63
|
+
File.write(dir+map+".html", html)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
task :generate_metadata_json do
|
68
|
+
require "fileutils"
|
69
|
+
require "json"
|
70
|
+
require "interscript"
|
71
|
+
|
72
|
+
FileUtils.rm_rf(file = __dir__+"/metadata.json")
|
73
|
+
|
74
|
+
hash = Interscript.maps.map do |map|
|
75
|
+
parsed_map = Interscript.parse(map)
|
76
|
+
md = parsed_map.metadata.to_hash
|
77
|
+
md["test"] = parsed_map.tests&.data&.first
|
78
|
+
[map, md]
|
79
|
+
end.to_h
|
80
|
+
|
81
|
+
File.write(file, JSON.pretty_generate(hash))
|
82
|
+
end
|
83
|
+
|
84
|
+
task :generate_json do
|
85
|
+
require "fileutils"
|
86
|
+
require "json"
|
87
|
+
require "interscript"
|
88
|
+
|
89
|
+
FileUtils.rm_rf(dir = __dir__+"/json/")
|
90
|
+
FileUtils.mkdir_p(dir)
|
91
|
+
|
92
|
+
(Interscript.maps + Interscript.maps(libraries: true)).each do |map|
|
93
|
+
json = JSON.pretty_generate(Interscript.parse(map).to_hash)
|
94
|
+
File.write(dir+map+".json", json)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
task :generate_visualization_json do
|
99
|
+
require "fileutils"
|
100
|
+
require "interscript"
|
101
|
+
require "json"
|
102
|
+
require "interscript/visualize"
|
103
|
+
|
104
|
+
FileUtils.rm_rf(dir = __dir__+"/vis_json/")
|
105
|
+
FileUtils.mkdir_p(dir)
|
106
|
+
|
107
|
+
(Interscript.maps + Interscript.maps(libraries: true)).each do |map_name|
|
108
|
+
map = Interscript.parse(map_name)
|
109
|
+
map.stages.each do |stage_name, stage|
|
110
|
+
json = JSON.pretty_generate(stage.to_visualization_array(map))
|
111
|
+
File.write(dir+map_name+"_#{stage_name}.json", json)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
53
116
|
task :default => :spec
|
data/lib/interscript/dsl.rb
CHANGED
@@ -7,6 +7,7 @@ module Interscript::DSL
|
|
7
7
|
|
8
8
|
return @cache[map_name] if @cache[map_name]
|
9
9
|
path = Interscript.locate(map_name)
|
10
|
+
library = path.end_with?(".iml")
|
10
11
|
map_name = File.basename(path, ".imp")
|
11
12
|
map_name = File.basename(map_name, ".iml")
|
12
13
|
|
@@ -45,7 +46,7 @@ module Interscript::DSL
|
|
45
46
|
YAML.load(yaml, exc_fname)
|
46
47
|
end
|
47
48
|
|
48
|
-
md = Interscript::DSL::Metadata.new(yaml: true) do
|
49
|
+
md = Interscript::DSL::Metadata.new(yaml: true, map_name: map_name, library: library) do
|
49
50
|
yaml.each do |k,v|
|
50
51
|
public_send(k.to_sym, v)
|
51
52
|
end
|
@@ -1,26 +1,68 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
class Interscript::DSL::Metadata
|
2
4
|
attr_accessor :node
|
3
5
|
|
4
|
-
def initialize(yaml: false, &block)
|
6
|
+
def initialize(yaml: false, map_name: "", library: true, &block)
|
5
7
|
raise ArgumentError, "Can't evaluate metadata from Ruby context" unless yaml
|
8
|
+
@map_name = map_name
|
6
9
|
@node = Interscript::Node::MetaData.new
|
7
10
|
self.instance_exec(&block)
|
11
|
+
@node[:nonstandard] = {}
|
12
|
+
|
13
|
+
NECESSARY_KEYS.each do |i|
|
14
|
+
unless @node.data.key? i
|
15
|
+
warn "[#{@map_name}] Necessary key #{i} wasn't defined. Defaulting to an empty string"
|
16
|
+
@node[i] = ""
|
17
|
+
end
|
18
|
+
end unless library
|
19
|
+
end
|
20
|
+
|
21
|
+
STANDARD_STRING_KEYS = %i{authority_id id
|
22
|
+
language source_script destination_script
|
23
|
+
name url creation_date adoption_date description
|
24
|
+
character source confirmation_date}
|
25
|
+
|
26
|
+
STANDARD_ARRAY_KEYS = %i{notes}
|
27
|
+
|
28
|
+
NONSTANDARD_KEYS = %i{special_rules original_description original_notes
|
29
|
+
implementation_notes}
|
30
|
+
|
31
|
+
NECESSARY_KEYS = %i{name language source_script destination_script}
|
32
|
+
|
33
|
+
STANDARD_STRING_KEYS.each do |sym|
|
34
|
+
define_method sym do |stuff|
|
35
|
+
case stuff
|
36
|
+
when String, Integer, Date
|
37
|
+
@node[sym] = stuff.to_s
|
38
|
+
when NilClass
|
39
|
+
else
|
40
|
+
warn "[#{@map_name}] Metadata key #{sym} expects a String, but #{stuff.class} was given"
|
41
|
+
@node[sym] = stuff.inspect
|
42
|
+
end
|
43
|
+
end
|
8
44
|
end
|
9
45
|
|
10
|
-
|
11
|
-
destination_script name url creation_date
|
12
|
-
adoption_date description character notes
|
13
|
-
source confirmation_date}.each do |sym|
|
46
|
+
STANDARD_ARRAY_KEYS.each do |sym|
|
14
47
|
define_method sym do |stuff|
|
15
|
-
|
48
|
+
stuff = Array(stuff)
|
49
|
+
|
50
|
+
stuff.map do |i|
|
51
|
+
case i
|
52
|
+
when String
|
53
|
+
i
|
54
|
+
else
|
55
|
+
warn "[#{@map_name}] Metadata key #{sym} expects all Array elements to be String"
|
56
|
+
i.inspect
|
57
|
+
end
|
58
|
+
end
|
16
59
|
end
|
17
60
|
end
|
18
61
|
|
19
|
-
|
20
|
-
implementation_notes}.each do |sym|
|
62
|
+
NONSTANDARD_KEYS.each do |sym|
|
21
63
|
define_method sym do |stuff|
|
22
|
-
warn "Metadata key #{sym} is non-standard"
|
23
|
-
@node[sym] = stuff
|
64
|
+
warn "[#{@map_name}] Metadata key #{sym} is non-standard"
|
65
|
+
(@node[:nonstandard] ||= {})[sym] = stuff
|
24
66
|
end
|
25
67
|
end
|
26
68
|
end
|
@@ -51,8 +51,23 @@ class Interscript::Node::Item::Any < Interscript::Node::Item
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_hash
|
54
|
-
{ :class => self.class.to_s
|
55
|
-
|
54
|
+
hash = { :class => self.class.to_s }
|
55
|
+
|
56
|
+
case @value
|
57
|
+
when Array
|
58
|
+
hash[:type] = "Array"
|
59
|
+
hash[:data] = data.map { |i| i.to_hash }
|
60
|
+
when ::String
|
61
|
+
hash[:type] = "String"
|
62
|
+
hash[:data] = @value
|
63
|
+
when Range
|
64
|
+
hash[:type] = "Range"
|
65
|
+
hash[:data] = [@value.begin, @value.end]
|
66
|
+
when NilClass
|
67
|
+
hash[:type] = "nil (bug)"
|
68
|
+
end
|
69
|
+
|
70
|
+
hash
|
56
71
|
end
|
57
72
|
|
58
73
|
def inspect
|
@@ -35,15 +35,18 @@ class Interscript::Node::Rule::Sub < Interscript::Node::Rule
|
|
35
35
|
def to_hash
|
36
36
|
puts self.from.inspect if $DEBUG
|
37
37
|
puts params.inspect if $DEBUG
|
38
|
-
{ :class => self.class.to_s,
|
38
|
+
hash = { :class => self.class.to_s,
|
39
39
|
:from => self.from.to_hash,
|
40
|
-
:to => self.to
|
41
|
-
:before => self.before&.to_hash,
|
42
|
-
:not_before => self.not_before&.to_hash,
|
43
|
-
:after => self.after&.to_hash,
|
44
|
-
:not_after => self.not_after&.to_hash,
|
45
|
-
:priority => self.priority
|
40
|
+
:to => Symbol === self.to ? self.to : self.to.to_hash
|
46
41
|
}
|
42
|
+
|
43
|
+
hash[:before] = self.before&.to_hash if self.before
|
44
|
+
hash[:not_before] = self.not_before&.to_hash if self.not_before
|
45
|
+
hash[:after] = self.after&.to_hash if self.after
|
46
|
+
hash[:not_after] = self.not_after&.to_hash if self.not_after
|
47
|
+
hash[:priority] = self.priority if self.priority
|
48
|
+
|
49
|
+
hash
|
47
50
|
end
|
48
51
|
|
49
52
|
def inspect
|
data/lib/interscript/version.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'interscript/visualize/nodes'
|
3
|
+
require 'interscript/visualize/json'
|
4
|
+
|
5
|
+
def h(str)
|
6
|
+
str.to_s.gsub("&", "&").gsub("<", "<").gsub(">", ">").gsub('"', """)
|
7
|
+
end
|
8
|
+
|
9
|
+
class Interscript::Visualize
|
10
|
+
def self.def_template(template)
|
11
|
+
@template = ERB.new(File.read(__dir__+"/visualize/#{template}.html.erb"))
|
12
|
+
end
|
13
|
+
def get_binding; binding; end
|
14
|
+
|
15
|
+
def self.call(*args)
|
16
|
+
return Map.(*args) if self == Interscript::Visualize
|
17
|
+
|
18
|
+
tplctx = self.new(*args)
|
19
|
+
@template.result(tplctx.get_binding)
|
20
|
+
end
|
21
|
+
|
22
|
+
class Map < self
|
23
|
+
def_template :map
|
24
|
+
|
25
|
+
def initialize(map_name)
|
26
|
+
@map = Interscript.parse(map_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_reader :map
|
30
|
+
|
31
|
+
def render_stage(map_name, stage)
|
32
|
+
Stage.(map_name, stage)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Group < self
|
37
|
+
def_template :group
|
38
|
+
|
39
|
+
def initialize(map, group, style=nil)
|
40
|
+
@map = map
|
41
|
+
@group = group
|
42
|
+
@style = style
|
43
|
+
end
|
44
|
+
|
45
|
+
attr_reader :map, :group
|
46
|
+
|
47
|
+
def render_group(map, group, style=nil)
|
48
|
+
Group.(map, group, style)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Stage < Group
|
53
|
+
def_template :group
|
54
|
+
|
55
|
+
def initialize(map_name, stage_name, style=nil)
|
56
|
+
@map = Interscript.parse(map_name)
|
57
|
+
@group = map.stages[stage_name]
|
58
|
+
@style = style
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<table style='<%= @style %>'>
|
2
|
+
<% group.children.each do |rule| %>
|
3
|
+
<tr>
|
4
|
+
<% case rule
|
5
|
+
when Interscript::Node::Rule::Sub %>
|
6
|
+
<td>
|
7
|
+
Replace
|
8
|
+
<td>
|
9
|
+
<%= rule.from.to_html(map) %>
|
10
|
+
<td>
|
11
|
+
<%= Symbol === rule.to ? rule.to : rule.to.to_html(map) %>
|
12
|
+
<td>
|
13
|
+
<%=
|
14
|
+
out = []
|
15
|
+
out << "before: #{rule.before.to_html(map)}" if rule.before
|
16
|
+
out << "after: #{rule.after.to_html(map)}" if rule.after
|
17
|
+
out << "<nobr>not before:</nobr> #{rule.not_before.to_html(map)}" if rule.not_before
|
18
|
+
out << "<nobr>not after:</nobr> #{rule.not_after.to_html(map)}" if rule.not_after
|
19
|
+
out.join(", ")
|
20
|
+
%>
|
21
|
+
<% when Interscript::Node::Group::Parallel %>
|
22
|
+
<td>
|
23
|
+
Parallel
|
24
|
+
<td colspan='3'>
|
25
|
+
<%= render_group map, rule %>
|
26
|
+
</td>
|
27
|
+
<% when Interscript::Node::Rule::Funcall %>
|
28
|
+
<td>
|
29
|
+
<%= h rule.name.to_s.gsub("_", " ").gsub(/^(.)/, &:upcase) %>
|
30
|
+
<td>
|
31
|
+
<%=
|
32
|
+
rule.kwargs.map do |k,v|
|
33
|
+
"#{k.to_s.gsub("_", " ")}: #{v}"
|
34
|
+
end.join(", ")
|
35
|
+
%>
|
36
|
+
<% when Interscript::Node::Rule::Run %>
|
37
|
+
<td>
|
38
|
+
<nobr>Run</nobr>
|
39
|
+
<td>
|
40
|
+
<a href='#' onclick='this.parentNode.lastElementChild.style.display=this.parentNode.lastElementChild.style.display=="none"?"table":"none";return!1'>
|
41
|
+
<%= rule.stage.to_html(map) %>
|
42
|
+
</a>
|
43
|
+
|
44
|
+
<%=
|
45
|
+
if rule.stage.map
|
46
|
+
doc = map.dep_aliases[rule.stage.map].document
|
47
|
+
stage = doc.imported_stages[rule.stage.name]
|
48
|
+
else
|
49
|
+
doc = map
|
50
|
+
stage = map.imported_stages[rule.stage.name]
|
51
|
+
end
|
52
|
+
|
53
|
+
render_group doc, stage, "display: none"
|
54
|
+
%>
|
55
|
+
<% else %>
|
56
|
+
<td colspan='4'><pre><%= h rule.inspect %></pre>
|
57
|
+
<% end %>
|
58
|
+
<% end %>
|
59
|
+
</table>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Interscript::Node::Group
|
2
|
+
def to_visualization_array(map=self)
|
3
|
+
out = []
|
4
|
+
|
5
|
+
self.children.each do |rule|
|
6
|
+
case rule
|
7
|
+
when Interscript::Node::Rule::Sub
|
8
|
+
more = []
|
9
|
+
more << "before: #{rule.before.to_html(map)}" if rule.before
|
10
|
+
more << "after: #{rule.after.to_html(map)}" if rule.after
|
11
|
+
more << "<nobr>not before:</nobr> #{rule.not_before.to_html(map)}" if rule.not_before
|
12
|
+
more << "<nobr>not after:</nobr> #{rule.not_after.to_html(map)}" if rule.not_after
|
13
|
+
more = more.join(", ")
|
14
|
+
|
15
|
+
out << {
|
16
|
+
type: "Replace",
|
17
|
+
from: rule.from.to_html(map),
|
18
|
+
to: Symbol === rule.to ? rule.to : rule.to.to_html(map),
|
19
|
+
more: more
|
20
|
+
}
|
21
|
+
when Interscript::Node::Group::Parallel
|
22
|
+
out << {
|
23
|
+
type: "Parallel",
|
24
|
+
children: rule.to_visualization_array(map)
|
25
|
+
}
|
26
|
+
when Interscript::Node::Rule::Funcall
|
27
|
+
out << {
|
28
|
+
type: rule.name.to_s.gsub("_", " ").gsub(/^(.)/, &:upcase),
|
29
|
+
more: rule.kwargs.map do |k,v|
|
30
|
+
"#{k.to_s.gsub("_", " ")}: #{v}"
|
31
|
+
end.join(", ")
|
32
|
+
}
|
33
|
+
when Interscript::Node::Rule::Run
|
34
|
+
if rule.stage.map
|
35
|
+
doc = map.dep_aliases[rule.stage.map].document
|
36
|
+
stage = rule.stage.name
|
37
|
+
else
|
38
|
+
doc = map
|
39
|
+
stage = rule.stage.name
|
40
|
+
end
|
41
|
+
|
42
|
+
out << {
|
43
|
+
type: "Run",
|
44
|
+
doc: doc.name,
|
45
|
+
stage: stage
|
46
|
+
}
|
47
|
+
else
|
48
|
+
out << {
|
49
|
+
type: "Unknown",
|
50
|
+
more: "<pre>#{h rule.inspect}</pre>"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
out
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<h1><%= h map.name %></h1>
|
2
|
+
|
3
|
+
<dl>
|
4
|
+
<% map.metadata.data.each do |k,v| %>
|
5
|
+
<% case k
|
6
|
+
when :authority_id %>
|
7
|
+
<dt>Authority ID
|
8
|
+
<% when :id %>
|
9
|
+
<dt>Standard ID
|
10
|
+
<% when :language %>
|
11
|
+
<dt>Language
|
12
|
+
<% when :source_script %>
|
13
|
+
<dt>Source script
|
14
|
+
<% when :destination_script %>
|
15
|
+
<dt>Destination script
|
16
|
+
<% when :name %>
|
17
|
+
<dt>Name
|
18
|
+
<% when :url %>
|
19
|
+
<dt>URL
|
20
|
+
<% when :creation_date %>
|
21
|
+
<dt>Creation date
|
22
|
+
<% when :confirmation_date %>
|
23
|
+
<dt>Confirmation date
|
24
|
+
<% when :adoption_date %>
|
25
|
+
<dt>Adoption date
|
26
|
+
<% when :description %>
|
27
|
+
<dt>Description
|
28
|
+
<% when :source %>
|
29
|
+
<dt>Source
|
30
|
+
<% when :notes, :implementation_notes, :special_rules, :original_notes, :original_description # We ignore notes for now %>
|
31
|
+
<% else %>
|
32
|
+
<% p [k, v, map.name] %>
|
33
|
+
<dt><%= h k %>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
<% case k
|
37
|
+
when :url %>
|
38
|
+
<dd><a href="<%= h v %>"><%= h v %></a>
|
39
|
+
<% when :notes, :implementation_notes, :special_rules, :original_notes, :original_description # We ignore notes for now %>
|
40
|
+
<% else %>
|
41
|
+
<dd><%= h v %>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
</dl>
|
45
|
+
|
46
|
+
<%= render_stage(self.map.name, :main) %>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class Interscript::Node::Item
|
2
|
+
class Alias < self
|
3
|
+
def to_html(doc)
|
4
|
+
if map
|
5
|
+
n = doc.dep_aliases[map].full_name
|
6
|
+
"#{name.to_s.gsub("_", " ")} from map #{n}"
|
7
|
+
else
|
8
|
+
"#{name.to_s.gsub("_", " ")}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Stage < self
|
14
|
+
def to_html(doc)
|
15
|
+
if map
|
16
|
+
n = doc.dep_aliases[map].full_name
|
17
|
+
"stage #{name.to_s.gsub("_", " ")} from map #{n}"
|
18
|
+
else
|
19
|
+
"#{name.to_s.gsub("_", " ")}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Any < self
|
25
|
+
def to_html(doc)
|
26
|
+
"<nobr>any (</nobr>" +
|
27
|
+
case @value
|
28
|
+
when Array
|
29
|
+
value.map(&Interscript::Node::Item.method(:try_convert)).map{|i|i.to_html(doc)}.join(", ")
|
30
|
+
when ::String
|
31
|
+
value.split("").map(&Interscript::Node::Item.method(:try_convert)).map{|i|i.to_html(doc)}.join(", ")
|
32
|
+
when Range
|
33
|
+
[value.begin, value.end].map(&Interscript::Node::Item.method(:try_convert)).map{|i|i.to_html(doc)}.join(" to ")
|
34
|
+
else
|
35
|
+
h(value.inspect)
|
36
|
+
end +
|
37
|
+
")"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class CaptureGroup < self
|
42
|
+
def to_html(doc)
|
43
|
+
"<nobr>capture group (</nobr>" +
|
44
|
+
data.to_html(doc) +
|
45
|
+
")"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class CaptureRef < self
|
50
|
+
def to_html(_)
|
51
|
+
"<nobr>capture reference (</nobr>" +
|
52
|
+
id.to_s +
|
53
|
+
")"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Group < self
|
58
|
+
def to_html(doc)
|
59
|
+
@children.map{|i|i.to_html(doc)}.join(" + ")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class Repeat < self
|
64
|
+
def to_html(doc)
|
65
|
+
str = case self
|
66
|
+
when Interscript::Node::Item::Maybe
|
67
|
+
"zero or one "
|
68
|
+
when Interscript::Node::Item::MaybeSome
|
69
|
+
"zero or more of "
|
70
|
+
when Interscript::Node::Item::Some
|
71
|
+
"one or more of "
|
72
|
+
end
|
73
|
+
"<nobr>#{str}(</nobr>#{@data.to_html(doc)})"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class String < self
|
78
|
+
def to_html(_)
|
79
|
+
out = ""
|
80
|
+
self.data.each_char do |i|
|
81
|
+
out << "<ruby>"
|
82
|
+
out << "<kbd>#{h i}</kbd>"
|
83
|
+
out << "<rt>#{"%04x" % i.ord}</rt>"
|
84
|
+
out << "</ruby>"
|
85
|
+
end
|
86
|
+
out
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
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.0b1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
@@ -106,6 +106,11 @@ files:
|
|
106
106
|
- lib/interscript/stdlib.rb
|
107
107
|
- lib/interscript/utils/regexp_converter.rb
|
108
108
|
- lib/interscript/version.rb
|
109
|
+
- lib/interscript/visualize.rb
|
110
|
+
- lib/interscript/visualize/group.html.erb
|
111
|
+
- lib/interscript/visualize/json.rb
|
112
|
+
- lib/interscript/visualize/map.html.erb
|
113
|
+
- lib/interscript/visualize/nodes.rb
|
109
114
|
- requirements.txt
|
110
115
|
homepage: https://www.interscript.com
|
111
116
|
licenses:
|