rsyntaxtree 0.9.3 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.tags +179 -0
  4. data/Gemfile +2 -0
  5. data/README.md +35 -29
  6. data/Rakefile +7 -0
  7. data/bin/rsyntaxtree +42 -31
  8. data/fonts/OpenMoji-Black.ttf +0 -0
  9. data/fonts/OpenMoji-Color.ttf +0 -0
  10. data/img/elements/circle.png +0 -0
  11. data/img/elements/circle_abc.png +0 -0
  12. data/img/elements/circle_bold.png +0 -0
  13. data/img/elements/circle_hatched.png +0 -0
  14. data/img/elements/circle_one.png +0 -0
  15. data/img/elements/connector.png +0 -0
  16. data/img/elements/connector_bold.png +0 -0
  17. data/img/elements/square.png +0 -0
  18. data/img/elements/square_abc.png +0 -0
  19. data/img/elements/square_bold.png +0 -0
  20. data/img/elements/square_hatched.png +0 -0
  21. data/img/elements/square_one.png +0 -0
  22. data/img/rsyntaxtree.png +0 -0
  23. data/img/sample.png +0 -0
  24. data/img/sample.svg +38 -0
  25. data/lib/rsyntaxtree/base_graph.rb +262 -0
  26. data/lib/rsyntaxtree/element.rb +156 -25
  27. data/lib/rsyntaxtree/elementlist.rb +16 -13
  28. data/lib/rsyntaxtree/markup_parser.rb +208 -0
  29. data/lib/rsyntaxtree/string_parser.rb +187 -204
  30. data/lib/rsyntaxtree/svg_graph.rb +471 -298
  31. data/lib/rsyntaxtree/utils.rb +49 -6
  32. data/lib/rsyntaxtree/version.rb +1 -1
  33. data/lib/rsyntaxtree.rb +144 -161
  34. data/rsyntaxtree.gemspec +2 -0
  35. data/test/markup_parser_test.rb +207 -0
  36. metadata +52 -11
  37. data/fonts/latinmodern-math.otf +0 -0
  38. data/fonts/lmroman10-bold.otf +0 -0
  39. data/fonts/lmroman10-bolditalic.otf +0 -0
  40. data/fonts/lmroman10-italic.otf +0 -0
  41. data/fonts/lmroman10-regular.otf +0 -0
  42. data/lib/rsyntaxtree/error_message.rb +0 -68
  43. data/lib/rsyntaxtree/graph.rb +0 -312
  44. data/lib/rsyntaxtree/tree_graph.rb +0 -327
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 146c2bdc6330d735c979a82c0d83fc1351ad486a49e4e66b833d12adde1a5cd4
4
- data.tar.gz: b45b7ecef617e60aea43f621914653dd0c027710d6f563a401eea5e88b670cf6
3
+ metadata.gz: 82885cdb8bb5fac82224d762cf2244ad8e5c5400d96ffd2f4857f16ad7293827
4
+ data.tar.gz: 5c00b9970c323030cc0ea9a5e9db35e83bc34ecbe82501e022d2ec1b957b0182
5
5
  SHA512:
6
- metadata.gz: daf6f67fcbb8887f7e183b6a0fdf232e7d5027d5b2f5e02dbc48e455eef0581a08a6c3e623c0b1dbea512bed8b2d40e8d76e8d8b01e206671357596e93bf65a3
7
- data.tar.gz: 6343039919b40954e2c37a9b9267143607d0efecb0d81689b8fefcad6b2201b513b2d6d9cade7e55452d9ee5916bc4490415c03c4a5560d798c2889d65142937
6
+ metadata.gz: 92e0e77a86d01b0c366c9bfd769349652b6773c61937ddc24e9097fe282e76a90d9de91ee931ee73bb1af49535887385e23d10e2d466a47f22abaa6299d6fcdb
7
+ data.tar.gz: ba0163a1abe6d56c26a82dd5a9e13e85a03f23d5119aed67e32913d99a61e08f1b42889b4b18de3e92add60e64ad52cd2b67451c697d3d2c638b1ab15150146f
data/.gitignore CHANGED
@@ -12,3 +12,5 @@ logs/
12
12
 
13
13
  bin/rsync_code
14
14
  bin/linktree.rb
15
+ tags
16
+ .tags
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
@@ -2,3 +2,5 @@ source "http://rubygems.org"
2
2
 
3
3
  gem 'rmagick'
4
4
  gem 'optimist'
5
+ gem 'parslet'
6
+ gem 'rsvg2'
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 🌲 RSyntaxTree: yet another syntax tree generator in Ruby
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
- RSyntaxTree, (linguistic) syntax tree generator written in Ruby.
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
- -o, --outdir=<s> Output directory (default: ./)
26
- -f, --format=<s> Output format: png, 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: sans, serif, cjk, math (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
- -c, --color=<s> Color text and bars: on or off (default: on)
32
- -y, --symmetrize=<s> Generate symmetrical, balanced tree: on or off (default: on)
33
- -a, --autosub=<s> Put subscript numbers to nodes: on or off (default: off)
34
- -m, --margin=<i> Margin: 0-120 (default: 0)
35
- -v, --vheight=<f> Connector Height: 0.5-2.0 (default: 1.0)
36
- -e, --version Print version and exit
37
- -h, --help Show this message
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
- ### Tips
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&#8217;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 &#8220;Auto subscript&#8221; 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
- Bracket notation (auto-subscript-on):
45
+ **Input text**
53
46
 
54
47
  ```text
55
- [S [NP RSyntaxTree^][VP [V generates][NP [Adj multilingual] [NP syntax trees]]]]
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
- Resulting PNG
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
- ![RSyntaxTree generates multilingual syntax trees](https://i.gyazo.com/6bb68b0bdb35d7a10c4a11d5788d484f.png)
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
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ task default: "test"
5
+
6
+ Rake::TestTask.new do |task|
7
+ task.pattern = "test/*_test.rb"
8
+ end
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, math",
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: 1-5",
31
+ opt :margin, "Margin: 0-10",
31
32
  :default => 1
32
33
  opt :vheight, "Connector Height: 0.5-5.0",
33
- :default => 1.0
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, math" unless /\A(sans|serif|cjk|math)\z/ =~ opts[:fontstyle]
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 :autosub, "must be either on or off" unless /\A(on|off)\z/ =~ opts[:autosub]
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
- unless data && RSGenerator.check_data(data)
65
- puts "Error: given bracket notation is invalid; try 'rsyntaxtree --help' "
65
+ begin
66
+ RSyntaxTree::RSGenerator.check_data(data)
67
+ rescue RSTError => e
68
+ puts e
66
69
  exit
67
70
  end
68
71
 
69
- string_opts[:data] = data
70
-
71
- rsg = RSGenerator.new(string_opts)
72
- ext = string_opts[:format]
73
- outfile = File.new(File.expand_path(string_opts[:outdir]) + "/syntree." + ext, "wb")
74
- case ext
75
- when "png"
76
- outfile.write rsg.draw_png
77
- when "jpg"
78
- outfile.write rsg.draw_jpg
79
- when "gif"
80
- outfile.write rsg.draw_gif
81
- when "pdf"
82
- outfile.write rsg.draw_pdf
83
- when "svg"
84
- outfile.write rsg.draw_svg
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
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>