rsyntaxtree 0.9.3 → 1.0.6
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/.gitignore +2 -0
- data/.tags +179 -0
- data/Gemfile +2 -0
- data/README.md +35 -29
- data/Rakefile +7 -0
- data/bin/rsyntaxtree +42 -31
- data/fonts/OpenMoji-Black.ttf +0 -0
- data/fonts/OpenMoji-Color.ttf +0 -0
- data/img/elements/circle.png +0 -0
- data/img/elements/circle_abc.png +0 -0
- data/img/elements/circle_bold.png +0 -0
- data/img/elements/circle_hatched.png +0 -0
- data/img/elements/circle_one.png +0 -0
- data/img/elements/connector.png +0 -0
- data/img/elements/connector_bold.png +0 -0
- data/img/elements/square.png +0 -0
- data/img/elements/square_abc.png +0 -0
- data/img/elements/square_bold.png +0 -0
- data/img/elements/square_hatched.png +0 -0
- data/img/elements/square_one.png +0 -0
- data/img/rsyntaxtree.png +0 -0
- data/img/sample.png +0 -0
- data/img/sample.svg +38 -0
- data/lib/rsyntaxtree/base_graph.rb +262 -0
- data/lib/rsyntaxtree/element.rb +156 -25
- data/lib/rsyntaxtree/elementlist.rb +16 -13
- data/lib/rsyntaxtree/markup_parser.rb +208 -0
- data/lib/rsyntaxtree/string_parser.rb +187 -204
- data/lib/rsyntaxtree/svg_graph.rb +471 -298
- data/lib/rsyntaxtree/utils.rb +49 -6
- data/lib/rsyntaxtree/version.rb +1 -1
- data/lib/rsyntaxtree.rb +144 -161
- data/rsyntaxtree.gemspec +2 -0
- data/test/markup_parser_test.rb +207 -0
- metadata +52 -11
- data/fonts/latinmodern-math.otf +0 -0
- data/fonts/lmroman10-bold.otf +0 -0
- data/fonts/lmroman10-bolditalic.otf +0 -0
- data/fonts/lmroman10-italic.otf +0 -0
- data/fonts/lmroman10-regular.otf +0 -0
- data/lib/rsyntaxtree/error_message.rb +0 -68
- data/lib/rsyntaxtree/graph.rb +0 -312
- data/lib/rsyntaxtree/tree_graph.rb +0 -327
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82885cdb8bb5fac82224d762cf2244ad8e5c5400d96ffd2f4857f16ad7293827
|
4
|
+
data.tar.gz: 5c00b9970c323030cc0ea9a5e9db35e83bc34ecbe82501e022d2ec1b957b0182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92e0e77a86d01b0c366c9bfd769349652b6773c61937ddc24e9097fe282e76a90d9de91ee931ee73bb1af49535887385e23d10e2d466a47f22abaa6299d6fcdb
|
7
|
+
data.tar.gz: ba0163a1abe6d56c26a82dd5a9e13e85a03f23d5119aed67e32913d99a61e08f1b42889b4b18de3e92add60e64ad52cd2b67451c697d3d2c638b1ab15150146f
|
data/.gitignore
CHANGED
data/.tags
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
2
|
+
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
3
|
+
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
|
4
|
+
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
|
5
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
6
|
+
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
|
7
|
+
!_TAG_PROC_CWD /Users/yohasebe/Dropbox/code/rsyntaxtree/ //
|
8
|
+
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
9
|
+
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
10
|
+
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
11
|
+
!_TAG_PROGRAM_VERSION 5.9.0 /58c0e68a/
|
12
|
+
Author README.md /^### Author$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
13
|
+
BaseGraph lib/rsyntaxtree/base_graph.rb /^ class BaseGraph$/;" c class:RSyntaxTree
|
14
|
+
BaseGraph lib/rsyntaxtree/base_graph.rb /^ class BaseGraph$/;" c module:RSyntaxTree
|
15
|
+
Development README.md /^### Development$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
16
|
+
ETYPE_LEAF lib/rsyntaxtree.rb /^ETYPE_LEAF = 2$/;" C
|
17
|
+
ETYPE_NODE lib/rsyntaxtree.rb /^ETYPE_NODE = 1$/;" C
|
18
|
+
Element lib/rsyntaxtree/element.rb /^ class Element$/;" c class:RSyntaxTree
|
19
|
+
Element lib/rsyntaxtree/element.rb /^ class Element$/;" c module:RSyntaxTree
|
20
|
+
ElementList lib/rsyntaxtree/elementlist.rb /^ class ElementList$/;" c class:RSyntaxTree
|
21
|
+
ElementList lib/rsyntaxtree/elementlist.rb /^ class ElementList$/;" c module:RSyntaxTree
|
22
|
+
Example README.md /^### Example$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
23
|
+
FONT_DIR lib/rsyntaxtree.rb /^FONT_DIR = File.expand_path(File.dirname(__FILE__) + "\/..\/fonts")$/;" C
|
24
|
+
FONT_SCALING lib/rsyntaxtree.rb /^FONT_SCALING = 2$/;" C
|
25
|
+
FontMetrics lib/rsyntaxtree/utils.rb /^module FontMetrics$/;" m
|
26
|
+
Installation README.md /^### Installation$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
27
|
+
License README.md /^### License$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
28
|
+
Markup lib/rsyntaxtree/markup_parser.rb /^module Markup$/;" m
|
29
|
+
MarkupParser lib/rsyntaxtree/markup_parser.rb /^class MarkupParser < Parslet::Parser$/;" c
|
30
|
+
MarkupParserTest test/markup_parser_test.rb /^class MarkupParserTest < Minitest::Test$/;" c
|
31
|
+
RSGenerator lib/rsyntaxtree.rb /^ class RSGenerator$/;" c class:RSyntaxTree
|
32
|
+
RSGenerator lib/rsyntaxtree.rb /^ class RSGenerator$/;" c module:RSyntaxTree
|
33
|
+
RSTError lib/rsyntaxtree.rb /^class RSTError < StandardError$/;" c
|
34
|
+
RSyntaxTree lib/rsyntaxtree.rb /^module RSyntaxTree$/;" m
|
35
|
+
RSyntaxTree lib/rsyntaxtree/base_graph.rb /^module RSyntaxTree$/;" m
|
36
|
+
RSyntaxTree lib/rsyntaxtree/element.rb /^module RSyntaxTree$/;" m
|
37
|
+
RSyntaxTree lib/rsyntaxtree/elementlist.rb /^module RSyntaxTree$/;" m
|
38
|
+
RSyntaxTree lib/rsyntaxtree/string_parser.rb /^module RSyntaxTree$/;" m
|
39
|
+
RSyntaxTree lib/rsyntaxtree/svg_graph.rb /^module RSyntaxTree$/;" m
|
40
|
+
RSyntaxTree lib/rsyntaxtree/version.rb /^module RSyntaxTree$/;" m
|
41
|
+
SUBSCRIPT_CONST lib/rsyntaxtree.rb /^SUBSCRIPT_CONST = 0.7$/;" C
|
42
|
+
SVGGraph lib/rsyntaxtree/svg_graph.rb /^ class SVGGraph < BaseGraph$/;" c class:RSyntaxTree
|
43
|
+
SVGGraph lib/rsyntaxtree/svg_graph.rb /^ class SVGGraph < BaseGraph$/;" c module:RSyntaxTree
|
44
|
+
String lib/rsyntaxtree/utils.rb /^class String$/;" c
|
45
|
+
StringParser lib/rsyntaxtree/string_parser.rb /^ class StringParser$/;" c class:RSyntaxTree
|
46
|
+
StringParser lib/rsyntaxtree/string_parser.rb /^ class StringParser$/;" c module:RSyntaxTree
|
47
|
+
Tips README.md /^### Tips$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
48
|
+
Usage README.md /^### Usage$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
49
|
+
VERSION lib/rsyntaxtree/version.rb /^ VERSION = "1.0.2"$/;" C module:RSyntaxTree
|
50
|
+
WHITESPACE_BLOCK lib/rsyntaxtree.rb /^WHITESPACE_BLOCK = "■"$/;" C
|
51
|
+
Web Interface README.md /^### Web Interface$/;" S chapter:🌲 RSyntaxTree: yet another syntax tree generator in Ruby
|
52
|
+
add lib/rsyntaxtree/elementlist.rb /^ def add(element)$/;" f class:RSyntaxTree.ElementList
|
53
|
+
add_child lib/rsyntaxtree/element.rb /^ def add_child(child_id)$/;" f class:RSyntaxTree.Element
|
54
|
+
all_emoji? lib/rsyntaxtree/utils.rb /^ def all_emoji?$/;" f class:String
|
55
|
+
calculate_height lib/rsyntaxtree/base_graph.rb /^ def calculate_height(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
56
|
+
calculate_indent lib/rsyntaxtree/base_graph.rb /^ def calculate_indent$/;" f class:RSyntaxTree.BaseGraph
|
57
|
+
calculate_level lib/rsyntaxtree/base_graph.rb /^ def calculate_level$/;" f class:RSyntaxTree.BaseGraph
|
58
|
+
calculate_width lib/rsyntaxtree/base_graph.rb /^ def calculate_width(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
59
|
+
check_data lib/rsyntaxtree.rb /^ def self.check_data(text)$/;" F class:RSyntaxTree.RSGenerator
|
60
|
+
check_data lib/rsyntaxtree.rb /^ def self.check_data(text)$/;" S class:RSyntaxTree.RSGenerator
|
61
|
+
contains_cjk? lib/rsyntaxtree/utils.rb /^ def contains_cjk?$/;" f class:String
|
62
|
+
contains_emoji? lib/rsyntaxtree/utils.rb /^ def contains_emoji?$/;" f class:String
|
63
|
+
data lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
64
|
+
data= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
65
|
+
draw_a_path lib/rsyntaxtree/svg_graph.rb /^ def draw_a_path(s_x, s_y, t_x, t_y, target_arrow = :none)$/;" f class:RSyntaxTree.SVGGraph
|
66
|
+
draw_connector lib/rsyntaxtree/base_graph.rb /^ def draw_connector(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
67
|
+
draw_element lib/rsyntaxtree/svg_graph.rb /^ def draw_element(element)$/;" f class:RSyntaxTree.SVGGraph
|
68
|
+
draw_elements lib/rsyntaxtree/base_graph.rb /^ def draw_elements$/;" f class:RSyntaxTree.BaseGraph
|
69
|
+
draw_paths lib/rsyntaxtree/svg_graph.rb /^ def draw_paths$/;" f class:RSyntaxTree.SVGGraph
|
70
|
+
draw_png lib/rsyntaxtree.rb /^ def draw_png(binary = false)$/;" f class:RSyntaxTree.RSGenerator
|
71
|
+
draw_svg lib/rsyntaxtree.rb /^ def draw_svg$/;" f class:RSyntaxTree.RSGenerator
|
72
|
+
draw_tree lib/rsyntaxtree.rb /^ def draw_tree$/;" f class:RSyntaxTree.RSGenerator
|
73
|
+
elements lib/rsyntaxtree/elementlist.rb /^ attr_accessor :elements, :iterator $/;" A class:RSyntaxTree.ElementList
|
74
|
+
elements= lib/rsyntaxtree/elementlist.rb /^ attr_accessor :elements, :iterator $/;" A class:RSyntaxTree.ElementList
|
75
|
+
elist lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
76
|
+
elist= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
77
|
+
generate_line lib/rsyntaxtree/svg_graph.rb /^ def generate_line(x1, y1, x2, y2, col, dashed = false, arrow = false, stroke_width = 1)$/;" f class:RSyntaxTree.SVGGraph
|
78
|
+
get_child_count lib/rsyntaxtree/elementlist.rb /^ def get_child_count(id)$/;" f class:RSyntaxTree.ElementList
|
79
|
+
get_children lib/rsyntaxtree/elementlist.rb /^ def get_children(id)$/;" f class:RSyntaxTree.ElementList
|
80
|
+
get_element_width lib/rsyntaxtree/elementlist.rb /^ def get_element_width(id)$/;" f class:RSyntaxTree.ElementList
|
81
|
+
get_elementlist lib/rsyntaxtree/string_parser.rb /^ def get_elementlist$/;" f class:RSyntaxTree.StringParser
|
82
|
+
get_elements lib/rsyntaxtree/elementlist.rb /^ def get_elements$/;" f class:RSyntaxTree.ElementList
|
83
|
+
get_first lib/rsyntaxtree/elementlist.rb /^ def get_first$/;" f class:RSyntaxTree.ElementList
|
84
|
+
get_id lib/rsyntaxtree/elementlist.rb /^ def get_id(id)$/;" f class:RSyntaxTree.ElementList
|
85
|
+
get_indent lib/rsyntaxtree/elementlist.rb /^ def get_indent(id)$/;" f class:RSyntaxTree.ElementList
|
86
|
+
get_leftmost lib/rsyntaxtree/base_graph.rb /^ def get_leftmost(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
87
|
+
get_level_height lib/rsyntaxtree/elementlist.rb /^ def get_level_height$/;" f class:RSyntaxTree.ElementList
|
88
|
+
get_metrics lib/rsyntaxtree/utils.rb /^ def get_metrics(text, font, fontsize, font_style, font_weight)$/;" f class:FontMetrics
|
89
|
+
get_metrics lib/rsyntaxtree/utils.rb /^ def get_metrics(text, font, fontsize, font_style, font_weight)$/;" f module:FontMetrics
|
90
|
+
get_next lib/rsyntaxtree/elementlist.rb /^ def get_next$/;" f class:RSyntaxTree.ElementList
|
91
|
+
get_next_token lib/rsyntaxtree/string_parser.rb /^ def get_next_token$/;" f class:RSyntaxTree.StringParser
|
92
|
+
get_rightmost lib/rsyntaxtree/base_graph.rb /^ def get_rightmost(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
93
|
+
height lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
|
94
|
+
height= lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
|
95
|
+
id lib/rsyntaxtree/element.rb /^ attr_accessor :id,$/;" A class:RSyntaxTree.Element
|
96
|
+
id lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
97
|
+
id= lib/rsyntaxtree/element.rb /^ attr_accessor :id,$/;" A class:RSyntaxTree.Element
|
98
|
+
id= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
99
|
+
initialize lib/rsyntaxtree.rb /^ def initialize(params = {})$/;" f class:RSyntaxTree.RSGenerator
|
100
|
+
initialize lib/rsyntaxtree.rb /^ def initialize(msg="Error: something unexpected occurred")$/;" f class:RSTError
|
101
|
+
initialize lib/rsyntaxtree/base_graph.rb /^ def initialize(element_list, params)$/;" f class:RSyntaxTree.BaseGraph
|
102
|
+
initialize lib/rsyntaxtree/element.rb /^ def initialize(id, parent, content, level, fontset, fontsize)$/;" f class:RSyntaxTree.Element
|
103
|
+
initialize lib/rsyntaxtree/elementlist.rb /^ def initialize$/;" f class:RSyntaxTree.ElementList
|
104
|
+
initialize lib/rsyntaxtree/string_parser.rb /^ def initialize(str, fontset, fontsize)$/;" f class:RSyntaxTree.StringParser
|
105
|
+
initialize lib/rsyntaxtree/svg_graph.rb /^ def initialize(element_list, params)$/;" f class:RSyntaxTree.SVGGraph
|
106
|
+
iterator lib/rsyntaxtree/elementlist.rb /^ attr_accessor :elements, :iterator $/;" A class:RSyntaxTree.ElementList
|
107
|
+
iterator= lib/rsyntaxtree/elementlist.rb /^ attr_accessor :elements, :iterator $/;" A class:RSyntaxTree.ElementList
|
108
|
+
level lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
109
|
+
level= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
110
|
+
line_to_parent lib/rsyntaxtree/svg_graph.rb /^ def line_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
111
|
+
line_to_parent lib/rsyntaxtree/svg_graph.rb /^ def line_to_parent(parent, child)$/;" f class:RSyntaxTree
|
112
|
+
line_to_parent2 lib/rsyntaxtree/svg_graph.rb /^ def line_to_parent2(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
113
|
+
make_balance lib/rsyntaxtree/base_graph.rb /^ def make_balance(id = 1)$/;" f class:RSyntaxTree.BaseGraph
|
114
|
+
make_tree lib/rsyntaxtree/string_parser.rb /^ def make_tree(parent)$/;" f class:RSyntaxTree.StringParser
|
115
|
+
monoline_to_parent lib/rsyntaxtree/svg_graph.rb /^ def monoline_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
116
|
+
node_centering lib/rsyntaxtree/base_graph.rb /^ def node_centering$/;" f class:RSyntaxTree.BaseGraph
|
117
|
+
parse lib/rsyntaxtree/markup_parser.rb /^ def parse(txt)$/;" f class:Markup
|
118
|
+
parse lib/rsyntaxtree/markup_parser.rb /^ def parse(txt)$/;" f module:Markup
|
119
|
+
parse lib/rsyntaxtree/string_parser.rb /^ def parse$/;" f class:RSyntaxTree.StringParser
|
120
|
+
parse_list lib/rsyntaxtree/base_graph.rb /^ def parse_list$/;" f class:RSyntaxTree.BaseGraph
|
121
|
+
polyline_to_parent lib/rsyntaxtree/svg_graph.rb /^ def polyline_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
122
|
+
polyline_to_parent lib/rsyntaxtree/svg_graph.rb /^ def polyline_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph.line_to_parent
|
123
|
+
pos lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
124
|
+
pos= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
|
125
|
+
rsyntaxtree rsyntaxtree.gemspec /^ s.name = "rsyntaxtree"$/;" g
|
126
|
+
set_element_width lib/rsyntaxtree/elementlist.rb /^ def set_element_width(id, width)$/;" f class:RSyntaxTree.ElementList
|
127
|
+
set_hierarchy lib/rsyntaxtree/elementlist.rb /^ def set_hierarchy$/;" f class:RSyntaxTree.ElementList
|
128
|
+
set_indent lib/rsyntaxtree/elementlist.rb /^ def set_indent(id, indent)$/;" f class:RSyntaxTree.ElementList
|
129
|
+
set_tspan lib/rsyntaxtree/svg_graph.rb /^ def set_tspan(this_x, this_y, style, decoration, fontstyle, text)$/;" f class:RSyntaxTree.SVGGraph
|
130
|
+
setup lib/rsyntaxtree/element.rb /^ def setup$/;" f class:RSyntaxTree.Element
|
131
|
+
setup test/markup_parser_test.rb /^ def setup$/;" f class:MarkupParserTest
|
132
|
+
split_by_emoji lib/rsyntaxtree/utils.rb /^ def split_by_emoji$/;" f class:String
|
133
|
+
svg_data lib/rsyntaxtree/svg_graph.rb /^ def svg_data$/;" f class:RSyntaxTree.SVGGraph
|
134
|
+
test_evaluator test/markup_parser_test.rb /^ def test_evaluator$/;" f
|
135
|
+
test_evaluator test/markup_parser_test.rb /^ def test_evaluator$/;" f class:MarkupParserTest
|
136
|
+
test_rule_bold test/markup_parser_test.rb /^ def test_rule_bold$/;" f
|
137
|
+
test_rule_bold test/markup_parser_test.rb /^ def test_rule_bold$/;" f class:MarkupParserTest
|
138
|
+
test_rule_bolditalic test/markup_parser_test.rb /^ def test_rule_bolditalic$/;" f
|
139
|
+
test_rule_bolditalic test/markup_parser_test.rb /^ def test_rule_bolditalic$/;" f class:MarkupParserTest
|
140
|
+
test_rule_border test/markup_parser_test.rb /^ def test_rule_border$/;" f
|
141
|
+
test_rule_border test/markup_parser_test.rb /^ def test_rule_border$/;" f class:MarkupParserTest
|
142
|
+
test_rule_box test/markup_parser_test.rb /^ def test_rule_box$/;" f
|
143
|
+
test_rule_box test/markup_parser_test.rb /^ def test_rule_box$/;" f class:MarkupParserTest
|
144
|
+
test_rule_brackets test/markup_parser_test.rb /^ def test_rule_brackets$/;" f class:MarkupParserTest
|
145
|
+
test_rule_cr test/markup_parser_test.rb /^ def test_rule_cr$/;" f class:MarkupParserTest
|
146
|
+
test_rule_escaped test/markup_parser_test.rb /^ def test_rule_escaped$/;" f class:MarkupParserTest
|
147
|
+
test_rule_italic test/markup_parser_test.rb /^ def test_rule_italic$/;" f
|
148
|
+
test_rule_italic test/markup_parser_test.rb /^ def test_rule_italic$/;" f class:MarkupParserTest
|
149
|
+
test_rule_line test/markup_parser_test.rb /^ def test_rule_line$/;" f
|
150
|
+
test_rule_line test/markup_parser_test.rb /^ def test_rule_line$/;" f class:MarkupParserTest
|
151
|
+
test_rule_lines test/markup_parser_test.rb /^ def test_rule_lines$/;" f
|
152
|
+
test_rule_lines test/markup_parser_test.rb /^ def test_rule_lines$/;" f class:MarkupParserTest
|
153
|
+
test_rule_linethrough test/markup_parser_test.rb /^ def test_rule_linethrough$/;" f
|
154
|
+
test_rule_linethrough test/markup_parser_test.rb /^ def test_rule_linethrough$/;" f class:MarkupParserTest
|
155
|
+
test_rule_markup test/markup_parser_test.rb /^ def test_rule_markup$/;" f
|
156
|
+
test_rule_markup test/markup_parser_test.rb /^ def test_rule_markup$/;" f class:MarkupParserTest
|
157
|
+
test_rule_non_escaped test/markup_parser_test.rb /^ def test_rule_non_escaped$/;" f
|
158
|
+
test_rule_non_escaped test/markup_parser_test.rb /^ def test_rule_non_escaped$/;" f class:MarkupParserTest
|
159
|
+
test_rule_overline test/markup_parser_test.rb /^ def test_rule_overline$/;" f
|
160
|
+
test_rule_overline test/markup_parser_test.rb /^ def test_rule_overline$/;" f class:MarkupParserTest
|
161
|
+
test_rule_path test/markup_parser_test.rb /^ def test_rule_path$/;" f class:MarkupParserTest
|
162
|
+
test_rule_subscript test/markup_parser_test.rb /^ def test_rule_subscript$/;" f
|
163
|
+
test_rule_subscript test/markup_parser_test.rb /^ def test_rule_subscript$/;" f class:MarkupParserTest
|
164
|
+
test_rule_superscript test/markup_parser_test.rb /^ def test_rule_superscript$/;" f
|
165
|
+
test_rule_superscript test/markup_parser_test.rb /^ def test_rule_superscript$/;" f class:MarkupParserTest
|
166
|
+
test_rule_text test/markup_parser_test.rb /^ def test_rule_text$/;" f
|
167
|
+
test_rule_text test/markup_parser_test.rb /^ def test_rule_text$/;" f class:MarkupParserTest
|
168
|
+
test_rule_triangle test/markup_parser_test.rb /^ def test_rule_triangle$/;" f class:MarkupParserTest
|
169
|
+
test_rule_underline test/markup_parser_test.rb /^ def test_rule_underline$/;" f
|
170
|
+
test_rule_underline test/markup_parser_test.rb /^ def test_rule_underline$/;" f class:MarkupParserTest
|
171
|
+
triangle_to_parent lib/rsyntaxtree/svg_graph.rb /^ def triangle_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
172
|
+
triangle_to_parent lib/rsyntaxtree/svg_graph.rb /^ def triangle_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph.line_to_parent
|
173
|
+
triangle_to_parent lib/rsyntaxtree/svg_graph.rb /^ def triangle_to_parent(parent, child)$/;" f class:RSyntaxTree
|
174
|
+
triangle_to_parent2 lib/rsyntaxtree/svg_graph.rb /^ def triangle_to_parent2(parent, child)$/;" f class:RSyntaxTree.SVGGraph
|
175
|
+
valid lib/rsyntaxtree/string_parser.rb /^ def self.valid?(data)$/;" F class:RSyntaxTree.StringParser
|
176
|
+
valid? lib/rsyntaxtree/string_parser.rb /^ def self.valid?(data)$/;" S class:RSyntaxTree.StringParser
|
177
|
+
width lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
|
178
|
+
width= lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
|
179
|
+
🌲 RSyntaxTree: yet another syntax tree generator in Ruby README.md /^# 🌲 RSyntaxTree: yet another syntax tree generator in Ruby$/;" c
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# 🌲 RSyntaxTree
|
1
|
+
# 🌲 RSyntaxTree
|
2
2
|
|
3
3
|
**RSyntaxTree** is a graphical syntax tree generator written in the Ruby programming language inspired by [phpSyntaxTree](http://ironcreek.net/phpsyntaxtree/).
|
4
4
|
|
@@ -17,51 +17,57 @@ For the web interface, see Usage section of <https://yohasebe.com/rsyntaxtree>.
|
|
17
17
|
For the command-line interface, type `$rsyntaxtree -h` after installation. Here's what you get:
|
18
18
|
|
19
19
|
```text
|
20
|
-
|
20
|
+
SyntaxTree, (linguistic) syntax tree generator written in Ruby.
|
21
21
|
|
22
22
|
Usage:
|
23
23
|
rsyntaxtree [options] "[VP [VP [V set] [NP bracket notation]] [ADV here]]"
|
24
24
|
where [options] are:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
25
|
+
-o, --outdir=<s> Output directory (default: ./)
|
26
|
+
-f, --format=<s> Output format: png, gif, jpg, pdf, or svg (default: png)
|
27
|
+
-l, --leafstyle=<s> visual style of tree leaves: auto, triangle, bar, or nothing (default: auto)
|
28
|
+
-n, --fontstyle=<s> Font style (available when ttf font is specified): sans, serif, cjk (default: sans)
|
29
|
+
-t, --font=<s> Path to a ttf font used to generate tree (optional)
|
30
|
+
-s, --fontsize=<i> Size: 8-26 (default: 16)
|
31
|
+
-m, --margin=<i> Margin: 0-10 (default: 1)
|
32
|
+
-v, --vheight=<f> Connector Height: 0.5-5.0 (default: 2.0)
|
33
|
+
-c, --color=<s> Color text and bars: on or off (default: on)
|
34
|
+
-y, --symmetrize=<s> Generate radically symmetrical, balanced tree: on or off (default: off)
|
35
|
+
-r, --transparent=<s> Make background transparent: on or off (default: off)
|
36
|
+
-p, --polyline=<s> draw polyline connectors: on or off (default: off)
|
37
|
+
-e, --version Print version and exit
|
38
|
+
-h, --help Show this message```
|
38
39
|
```
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
Every branch or leaf of a tree must belong to a node. To create a node, place a label right next to the opening bracket. Arbitrary number of branches can follow with a preceding space.
|
43
|
-
|
44
|
-
There are several modes in which the connectors between terminal nodes and their leaves are drawn differently (auto, triangle, bar, and nothing). In auto mode, a triangle is used if the leaf contains one or more spaces inside (i.e. if it’s a phrase), but if it contains no spaces (i.e. if it is just a word), a straight bar will be drawn instead (unless the leaf contains a "^" symbol at the end which makes it a single-word phrase).
|
45
|
-
|
46
|
-
You can put a subscript to any node by putting the _ character between the main label and the subscript. For example, NP_TOP will be rendered as NP<sub>TOP</sub>. Or you can select the “Auto subscript” option so that nodes of the same label will be automatically numbered. (e.g. NP<sub>1</sub>, NP<sub>2</sub>)</p>
|
47
|
-
|
48
|
-
See https://yohasebe.com/rsyntaxtree for more detailed info about the syntax.
|
41
|
+
See [the documentation](https://yohasebe.com/rsyntaxtree/#documentation) for more detailed info about the syntax.
|
49
42
|
|
50
43
|
### Example
|
51
44
|
|
52
|
-
|
45
|
+
**Input text**
|
53
46
|
|
54
47
|
```text
|
55
|
-
[S
|
48
|
+
[S
|
49
|
+
[NP |R|<>SyntaxTree]
|
50
|
+
[VP
|
51
|
+
[V generates]
|
52
|
+
[NP
|
53
|
+
[Adj #\+multilingual\
|
54
|
+
\+beautiful]
|
55
|
+
[NP syntax\
|
56
|
+
trees]
|
57
|
+
]
|
58
|
+
]
|
59
|
+
]
|
56
60
|
```
|
57
61
|
|
58
|
-
|
62
|
+
**Output (PNG or SVG)**
|
63
|
+
|
64
|
+
<img src='https://github.com/yohasebe/rsyntaxtree/blob/master/img/sample.png?raw=true' width='600' />
|
59
65
|
|
60
|
-
|
66
|
+
See [RSyntaxTree Examples](https://yohasebe.notion.site/yohasebe/RSyntaxTree-Examples-006baf3ac6e84e7193b538a5bf02ad07) for more examples
|
61
67
|
|
62
68
|
### Development
|
63
69
|
|
64
|
-
For the latest updates and downloads please visit http://github.com/yohasebe/rsyntaxtree
|
70
|
+
For the latest updates and downloads please visit <http://github.com/yohasebe/rsyntaxtree>
|
65
71
|
|
66
72
|
### Author
|
67
73
|
|
data/Rakefile
CHANGED
data/bin/rsyntaxtree
CHANGED
@@ -5,6 +5,7 @@ $LOAD_PATH << File.join( File.dirname(__FILE__), '../lib')
|
|
5
5
|
|
6
6
|
require 'rsyntaxtree'
|
7
7
|
require 'optimist'
|
8
|
+
require 'utils'
|
8
9
|
|
9
10
|
opts = Optimist::options do
|
10
11
|
version "RSyntaxTree #{RSyntaxTree::VERSION} (c) 2021 Yoichiro Hasebe"
|
@@ -22,37 +23,37 @@ EOS
|
|
22
23
|
:default => "png"
|
23
24
|
opt :leafstyle, "visual style of tree leaves: auto, triangle, bar, or nothing",
|
24
25
|
:default => "auto"
|
25
|
-
opt :fontstyle, "Font style (available when ttf font is specified): sans, serif, cjk
|
26
|
+
opt :fontstyle, "Font style (available when ttf font is specified): sans, serif, cjk",
|
26
27
|
:default => "sans"
|
27
28
|
opt :font, "Path to a ttf font used to generate tree (optional)", :type => String
|
28
29
|
opt :fontsize, "Size: 8-26",
|
29
30
|
:default => 16
|
30
|
-
opt :margin, "Margin:
|
31
|
+
opt :margin, "Margin: 0-10",
|
31
32
|
:default => 1
|
32
33
|
opt :vheight, "Connector Height: 0.5-5.0",
|
33
|
-
:default =>
|
34
|
+
:default => 2.0
|
34
35
|
opt :color, "Color text and bars: on or off",
|
35
36
|
:default => "on"
|
36
|
-
opt :symmetrize, "Generate symmetrical, balanced tree: on or off",
|
37
|
-
:default => "on"
|
38
|
-
opt :autosub, "Put subscript numbers to nodes: on or off",
|
37
|
+
opt :symmetrize, "Generate radically symmetrical, balanced tree: on or off",
|
39
38
|
:default => "off"
|
40
39
|
opt :transparent, "Make background transparent: on or off",
|
41
40
|
:default => "off"
|
41
|
+
opt :polyline, "draw polyline connectors: on or off",
|
42
|
+
:default => "off"
|
42
43
|
end
|
43
44
|
|
44
45
|
Optimist::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
|
45
46
|
Optimist::die :format, "must be png, jpg, gif, or svg" unless /\A(png|jpg|gif|pdf|svg)\z/ =~ opts[:format]
|
46
47
|
Optimist::die :leafstyle, "must be auto, triangle, bar, or nothing" unless /\A(auto|triangle|bar|nothing)\z/ =~ opts[:leafstyle]
|
47
|
-
Optimist::die :fontstyle, "must be sans, serif, cjk
|
48
|
+
Optimist::die :fontstyle, "must be sans, serif, cjk" unless /\A(sans|serif|cjk)\z/ =~ opts[:fontstyle]
|
48
49
|
Optimist::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
|
49
50
|
Optimist::die :fontsize, "must be in the range of 8-26" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 26
|
50
|
-
Optimist::die :color, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:color]
|
51
|
-
Optimist::die :symmetrize, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:symmetrize]
|
52
|
-
Optimist::die :
|
53
|
-
Optimist::die :margin, "must be in the range of 0-5" if opts[:margin] < 1 || opts[:margin] > 5
|
51
|
+
Optimist::die :color, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:color]
|
52
|
+
Optimist::die :symmetrize, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:symmetrize]
|
53
|
+
Optimist::die :margin, "must be in the range of 0-10" if opts[:margin] < 0 || opts[:margin] > 10
|
54
54
|
Optimist::die :vheight, "must be in the range of 0.5-5.0" if opts[:vheight] < 0.5 || opts[:vheight] > 5.0
|
55
|
-
Optimist::die :transparent, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:transparent]
|
55
|
+
Optimist::die :transparent, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:transparent]
|
56
|
+
Optimist::die :polyline, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:polyline]
|
56
57
|
|
57
58
|
string_opts = {}
|
58
59
|
opts.each do |key, value|
|
@@ -61,26 +62,36 @@ end
|
|
61
62
|
|
62
63
|
data = ARGV[0]
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
begin
|
66
|
+
RSyntaxTree::RSGenerator.check_data(data)
|
67
|
+
rescue RSTError => e
|
68
|
+
puts e
|
66
69
|
exit
|
67
70
|
end
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
rsg = RSGenerator.new(string_opts)
|
72
|
-
ext = string_opts[:format]
|
73
|
-
|
74
|
-
case ext
|
75
|
-
when "
|
76
|
-
|
77
|
-
when "
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
72
|
+
begin
|
73
|
+
string_opts[:data] = data
|
74
|
+
rsg = RSyntaxTree::RSGenerator.new(string_opts)
|
75
|
+
ext = string_opts[:format]
|
76
|
+
filepath = File.expand_path(string_opts[:outdir]) + "/syntree." + ext
|
77
|
+
case ext
|
78
|
+
when "jpg", "gif", "pdf"
|
79
|
+
rsg.draw_tree.write(filepath)
|
80
|
+
when "png"
|
81
|
+
outfile = File.new(filepath, "wb")
|
82
|
+
# outfile.write rsg.draw_png
|
83
|
+
outfile.write rsg.draw_tree
|
84
|
+
outfile.close
|
85
|
+
when "svg"
|
86
|
+
outfile = File.new(filepath, "wb")
|
87
|
+
outfile.write rsg.draw_svg
|
88
|
+
outfile.close
|
89
|
+
end
|
90
|
+
rescue RSTError => e
|
91
|
+
puts e
|
92
|
+
exit
|
93
|
+
rescue => e
|
94
|
+
p e
|
95
|
+
puts "Error: something unexpected occurred"
|
96
|
+
exit
|
85
97
|
end
|
86
|
-
outfile.close
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/img/rsyntaxtree.png
ADDED
Binary file
|
data/img/sample.png
ADDED
Binary file
|
data/img/sample.svg
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg width="1211.119140625" height="941.0" viewBox="-40, -40, 1251.119140625, 981.0" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<defs>
|
5
|
+
<marker id="arrow" markerUnits="strokeWidth" markerWidth="7.823437500000001" markerHeight="7.823437500000001" viewBox="0 0 7.823437500000001 7.823437500000001" refX="3.9117187500000004" refY="0">
|
6
|
+
<polyline fill="none" stroke="purple" stroke-width="1" points="0,7.823437500000001,3.9117187500000004,0,7.823437500000001,7.823437500000001" />
|
7
|
+
</marker>
|
8
|
+
</defs>
|
9
|
+
<rect x="-40" y="-40" width="1251.119140625" height="981.0" stroke="none" fill="white" />"
|
10
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='418.73779296875' y='70.0'><tspan x='418.73779296875' y='70.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">S</tspan></text>
|
11
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='136.2080078125' y='254.0'><tspan x='136.2080078125' y='254.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">NP</tspan></text>
|
12
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: green; font-size: 40px;' x='19.55859375' y='438.0'><tspan x='33.81640625' y='438.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">R</tspan><tspan x='90.857421875' y='438.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">SyntaxTree</tspan></text>
|
13
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='670.267578125' y='254.0'><tspan x='670.267578125' y='254.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">VP</tspan></text>
|
14
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='465.091796875' y='438.0'><tspan x='465.091796875' y='438.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">V</tspan></text>
|
15
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: green; font-size: 40px;' x='386.091796875' y='622.0'><tspan x='386.091796875' y='622.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">generates</tspan></text>
|
16
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='885.443359375' y='438.0'><tspan x='885.443359375' y='438.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">NP</tspan></text>
|
17
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='745.326171875' y='622.0'><tspan x='745.326171875' y='622.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">Adj</tspan></text>
|
18
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: green; font-size: 40px;' x='649.326171875' y='806.0'><tspan x='649.326171875' y='806.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">+multilingual</tspan><tspan x='649.326171875' y='861.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">+beautiful</tspan></text>
|
19
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: blue; font-size: 40px;' x='1020.560546875' y='622.0'><tspan x='1020.560546875' y='622.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">NP</tspan></text>
|
20
|
+
<text white-space='pre' alignment-baseline='text-top' style='fill: green; font-size: 40px;' x='984.560546875' y='806.0'><tspan x='984.560546875' y='806.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">syntax</tspan><tspan x='1001.560546875' y='861.0' style="" text-decoration="" font-family="'Noto Serif', 'Noto Serif JP', OpenMoji, 'OpenMoji Color', 'OpenMoji Black', serif">trees</tspan></text>
|
21
|
+
<line style='stroke:black; stroke-width:2;' x1='163.7080078125' y1='184.0' x2='429.73779296875' y2='93.0' />
|
22
|
+
<line style='stroke:black; stroke-width:2;' x1='695.767578125' y1='184.0' x2='429.73779296875' y2='93.0' />
|
23
|
+
<polygon style='fill: none; stroke: black; stroke-width:2;' points='19.55859375 368.0 307.857421875 368.0 163.7080078125 277.0' />
|
24
|
+
<line style='stroke:black; stroke-width:2;' x1='478.591796875' y1='368.0' x2='695.767578125' y2='277.0' />
|
25
|
+
<line style='stroke:black; stroke-width:2;' x1='912.943359375' y1='368.0' x2='695.767578125' y2='277.0' />
|
26
|
+
<line style='stroke:black; stroke-width:2;' x1='478.591796875' y1='552.0' x2='478.591796875' y2='461.0' />
|
27
|
+
<line style='stroke:black; stroke-width:2;' x1='777.826171875' y1='552.0' x2='912.943359375' y2='461.0' />
|
28
|
+
<line style='stroke:black; stroke-width:2;' x1='1048.060546875' y1='552.0' x2='912.943359375' y2='461.0' />
|
29
|
+
<line style='stroke:black; stroke-width:2;' x1='777.826171875' y1='736.0' x2='777.826171875' y2='645.0' />
|
30
|
+
<line style='stroke:black; stroke-width:2;' x1='1048.060546875' y1='736.0' x2='1048.060546875' y2='645.0' />
|
31
|
+
<rect style='fill: none; stroke: green; stroke-width:2;' x='19.55859375' y='396.0' width='55.0' height='53.0' />
|
32
|
+
|
33
|
+
<line x1='639.546875' y1='743.0' x2='649.326171875' y2='743.0' style='fill: none; stroke: green; stroke-width:2' />
|
34
|
+
<line x1='639.546875' y1='743.0' x2='639.546875' y2='891.0' style='fill: none; stroke: green; stroke-width:2' />
|
35
|
+
<line x1='639.546875' y1='891.0' x2='649.326171875' y2='891.0' style='fill: none; stroke: green; stroke-width:2' />
|
36
|
+
<line x1='916.10546875' y1='743.0' x2='906.326171875' y2='743.0' style='fill: none; stroke: green; stroke-width:2' />
|
37
|
+
<line x1='916.10546875' y1='743.0' x2='916.10546875' y2='891.0' style='fill: none; stroke: green; stroke-width:2' />
|
38
|
+
<line x1='916.10546875' y1='891.0' x2='906.326171875' y2='891.0' style='fill: none; stroke: green; stroke-width:2' /></svg>
|