rsyntaxtree 0.9.1 → 1.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69c3a36921d2441f35c9729197aaea3ded204780b7033361a3434605e17e70cb
4
- data.tar.gz: 342c7b8e779e2fca098d441f11ea7a458e050e42b49957369a7af3ac9ffd5ce8
3
+ metadata.gz: e607ace251c646cc6fb11c4eac44834afc4dd6989ce4433b2f511f1bf8df2329
4
+ data.tar.gz: 495e68852573a083b6352a7809622ef453926738dbb02f03d93220e12bac66e1
5
5
  SHA512:
6
- metadata.gz: ddffb304231af332a8de21e29a97943570b8297749c7368c536b0f15103a392c4f10f1b6c77c79c0ab8b48a3fbe05ccfcc09da69b20b53c0f5a41692245d5137
7
- data.tar.gz: 0c6a91490bdf0a26bcfed5cdad68bc25fdd9252577b86a638a8a6ce72a4c5c297324dda81e9e0f1852bee545d437d16f625ec312141fd8a56868b691d9bd05b6
6
+ metadata.gz: 5998d2729ec817aaadb60ac773acf9c846bd7d624bbb650e9e8dfb3c66e35300ae6ba6887d3cf5dfe1a45e1394fe64ce7b4ce64bfe3bfd8a73581d1c8cffafd2
7
+ data.tar.gz: 354536b8f8ea955b3acad905ed9b185be1876f7da37f114c0e55753fa870dab1ec98587b5a163e97680e51c6361b861f302ed3b4b8b053b8c6171aa526108f6d
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,171 @@
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
+ make_balance lib/rsyntaxtree/base_graph.rb /^ def make_balance(id = 1)$/;" f class:RSyntaxTree.BaseGraph
112
+ make_tree lib/rsyntaxtree/string_parser.rb /^ def make_tree(parent)$/;" f class:RSyntaxTree.StringParser
113
+ node_centering lib/rsyntaxtree/base_graph.rb /^ def node_centering$/;" f class:RSyntaxTree.BaseGraph
114
+ parse lib/rsyntaxtree/markup_parser.rb /^ def parse(txt)$/;" f class:Markup
115
+ parse lib/rsyntaxtree/markup_parser.rb /^ def parse(txt)$/;" f module:Markup
116
+ parse lib/rsyntaxtree/string_parser.rb /^ def parse$/;" f class:RSyntaxTree.StringParser
117
+ parse_list lib/rsyntaxtree/base_graph.rb /^ def parse_list$/;" f class:RSyntaxTree.BaseGraph
118
+ pos lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
119
+ pos= lib/rsyntaxtree/string_parser.rb /^ attr_accessor :data, :elist, :pos, :id, :level$/;" A class:RSyntaxTree.StringParser
120
+ rsyntaxtree rsyntaxtree.gemspec /^ s.name = "rsyntaxtree"$/;" g
121
+ set_element_width lib/rsyntaxtree/elementlist.rb /^ def set_element_width(id, width)$/;" f class:RSyntaxTree.ElementList
122
+ set_hierarchy lib/rsyntaxtree/elementlist.rb /^ def set_hierarchy$/;" f class:RSyntaxTree.ElementList
123
+ set_indent lib/rsyntaxtree/elementlist.rb /^ def set_indent(id, indent)$/;" f class:RSyntaxTree.ElementList
124
+ set_tspan lib/rsyntaxtree/svg_graph.rb /^ def set_tspan(this_x, this_y, style, decoration, fontstyle, text)$/;" f class:RSyntaxTree.SVGGraph
125
+ setup lib/rsyntaxtree/element.rb /^ def setup$/;" f class:RSyntaxTree.Element
126
+ setup test/markup_parser_test.rb /^ def setup$/;" f class:MarkupParserTest
127
+ split_by_emoji lib/rsyntaxtree/utils.rb /^ def split_by_emoji$/;" f class:String
128
+ svg_data lib/rsyntaxtree/svg_graph.rb /^ def svg_data$/;" f class:RSyntaxTree.SVGGraph
129
+ test_evaluator test/markup_parser_test.rb /^ def test_evaluator$/;" f
130
+ test_evaluator test/markup_parser_test.rb /^ def test_evaluator$/;" f class:MarkupParserTest
131
+ test_rule_bold test/markup_parser_test.rb /^ def test_rule_bold$/;" f
132
+ test_rule_bold test/markup_parser_test.rb /^ def test_rule_bold$/;" f class:MarkupParserTest
133
+ test_rule_bolditalic test/markup_parser_test.rb /^ def test_rule_bolditalic$/;" f
134
+ test_rule_bolditalic test/markup_parser_test.rb /^ def test_rule_bolditalic$/;" f class:MarkupParserTest
135
+ test_rule_border test/markup_parser_test.rb /^ def test_rule_border$/;" f
136
+ test_rule_border test/markup_parser_test.rb /^ def test_rule_border$/;" f class:MarkupParserTest
137
+ test_rule_box test/markup_parser_test.rb /^ def test_rule_box$/;" f
138
+ test_rule_box test/markup_parser_test.rb /^ def test_rule_box$/;" f class:MarkupParserTest
139
+ test_rule_brackets test/markup_parser_test.rb /^ def test_rule_brackets$/;" f class:MarkupParserTest
140
+ test_rule_cr test/markup_parser_test.rb /^ def test_rule_cr$/;" f class:MarkupParserTest
141
+ test_rule_escaped test/markup_parser_test.rb /^ def test_rule_escaped$/;" f class:MarkupParserTest
142
+ test_rule_italic test/markup_parser_test.rb /^ def test_rule_italic$/;" f
143
+ test_rule_italic test/markup_parser_test.rb /^ def test_rule_italic$/;" f class:MarkupParserTest
144
+ test_rule_line test/markup_parser_test.rb /^ def test_rule_line$/;" f
145
+ test_rule_line test/markup_parser_test.rb /^ def test_rule_line$/;" f class:MarkupParserTest
146
+ test_rule_lines test/markup_parser_test.rb /^ def test_rule_lines$/;" f
147
+ test_rule_lines test/markup_parser_test.rb /^ def test_rule_lines$/;" f class:MarkupParserTest
148
+ test_rule_linethrough test/markup_parser_test.rb /^ def test_rule_linethrough$/;" f
149
+ test_rule_linethrough test/markup_parser_test.rb /^ def test_rule_linethrough$/;" f class:MarkupParserTest
150
+ test_rule_markup test/markup_parser_test.rb /^ def test_rule_markup$/;" f
151
+ test_rule_markup test/markup_parser_test.rb /^ def test_rule_markup$/;" f class:MarkupParserTest
152
+ test_rule_non_escaped test/markup_parser_test.rb /^ def test_rule_non_escaped$/;" f
153
+ test_rule_non_escaped test/markup_parser_test.rb /^ def test_rule_non_escaped$/;" f class:MarkupParserTest
154
+ test_rule_overline test/markup_parser_test.rb /^ def test_rule_overline$/;" f
155
+ test_rule_overline test/markup_parser_test.rb /^ def test_rule_overline$/;" f class:MarkupParserTest
156
+ test_rule_path test/markup_parser_test.rb /^ def test_rule_path$/;" f class:MarkupParserTest
157
+ test_rule_subscript test/markup_parser_test.rb /^ def test_rule_subscript$/;" f
158
+ test_rule_subscript test/markup_parser_test.rb /^ def test_rule_subscript$/;" f class:MarkupParserTest
159
+ test_rule_superscript test/markup_parser_test.rb /^ def test_rule_superscript$/;" f
160
+ test_rule_superscript test/markup_parser_test.rb /^ def test_rule_superscript$/;" f class:MarkupParserTest
161
+ test_rule_text test/markup_parser_test.rb /^ def test_rule_text$/;" f
162
+ test_rule_text test/markup_parser_test.rb /^ def test_rule_text$/;" f class:MarkupParserTest
163
+ test_rule_triangle test/markup_parser_test.rb /^ def test_rule_triangle$/;" f class:MarkupParserTest
164
+ test_rule_underline test/markup_parser_test.rb /^ def test_rule_underline$/;" f
165
+ test_rule_underline test/markup_parser_test.rb /^ def test_rule_underline$/;" f class:MarkupParserTest
166
+ triangle_to_parent lib/rsyntaxtree/svg_graph.rb /^ def triangle_to_parent(parent, child)$/;" f class:RSyntaxTree.SVGGraph
167
+ valid lib/rsyntaxtree/string_parser.rb /^ def self.valid?(data)$/;" F class:RSyntaxTree.StringParser
168
+ valid? lib/rsyntaxtree/string_parser.rb /^ def self.valid?(data)$/;" S class:RSyntaxTree.StringParser
169
+ width lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
170
+ width= lib/rsyntaxtree/svg_graph.rb /^ attr_accessor :width, :height$/;" A class:RSyntaxTree.SVGGraph
171
+ 🌲 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
@@ -30,7 +30,6 @@ where [options] are:
30
30
  -s, --fontsize=<i> Size: 8-26 (default: 16)
31
31
  -c, --color=<s> Color text and bars: on or off (default: on)
32
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
33
  -m, --margin=<i> Margin: 0-120 (default: 0)
35
34
  -v, --vheight=<f> Connector Height: 0.5-2.0 (default: 1.0)
36
35
  -e, --version Print version and exit
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,20 +23,18 @@ 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"
@@ -44,15 +43,14 @@ end
44
43
  Optimist::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
45
44
  Optimist::die :format, "must be png, jpg, gif, or svg" unless /\A(png|jpg|gif|pdf|svg)\z/ =~ opts[:format]
46
45
  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]
46
+ Optimist::die :fontstyle, "must be sans, serif, cjk" unless /\A(sans|serif|cjk)\z/ =~ opts[:fontstyle]
48
47
  Optimist::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
49
48
  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
49
+ Optimist::die :color, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:color]
50
+ Optimist::die :symmetrize, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:symmetrize]
51
+ Optimist::die :margin, "must be in the range of 0-10" if opts[:margin] < 0 || opts[:margin] > 10
54
52
  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]
53
+ Optimist::die :transparent, "must be either on or off" unless /\A(on|off|true|false)\z/ =~ opts[:transparent]
56
54
 
57
55
  string_opts = {}
58
56
  opts.each do |key, value|
@@ -61,26 +59,35 @@ end
61
59
 
62
60
  data = ARGV[0]
63
61
 
64
- unless data && RSGenerator.check_data(data)
65
- puts "Error: given bracket notation is invalid; try 'rsyntaxtree --help' "
62
+ begin
63
+ RSyntaxTree::RSGenerator.check_data(data)
64
+ rescue RSTError => e
65
+ puts e
66
66
  exit
67
67
  end
68
68
 
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
69
+ begin
70
+ string_opts[:data] = data
71
+ rsg = RSyntaxTree::RSGenerator.new(string_opts)
72
+ ext = string_opts[:format]
73
+ filepath = File.expand_path(string_opts[:outdir]) + "/syntree." + ext
74
+ case ext
75
+ when "jpg", "gif", "pdf"
76
+ rsg.draw_tree.write(filepath)
77
+ when "png"
78
+ outfile = File.new(filepath, "wb")
79
+ # outfile.write rsg.draw_png
80
+ outfile.write rsg.draw_tree
81
+ outfile.close
82
+ when "svg"
83
+ outfile = File.new(filepath, "wb")
84
+ outfile.write rsg.draw_svg
85
+ outfile.close
86
+ end
87
+ rescue RSTError => e
88
+ puts e
89
+ exit
90
+ rescue => e
91
+ puts "Error: something unexpected occurred"
92
+ exit
85
93
  end
86
- outfile.close
Binary file
Binary file
@@ -0,0 +1,262 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ #==========================
5
+ # graph.rb
6
+ #==========================
7
+ #
8
+ # Image utility functions to inspect text font metrics
9
+ # Copyright (c) 2007-2021 Yoichiro Hasebe <yohasebe@gmail.com>
10
+
11
+ require 'utils'
12
+
13
+ module RSyntaxTree
14
+ class BaseGraph
15
+
16
+ def initialize(element_list, params)
17
+
18
+ @element_list = element_list
19
+ @symmetrize = params[:symmetrize]
20
+
21
+ if params[:color]
22
+ @col_node = "blue"
23
+ @col_leaf = "green"
24
+ @col_path = "purple"
25
+ else
26
+ @col_node = "black"
27
+ @col_leaf = "black"
28
+ @col_path = "black"
29
+ end
30
+
31
+ @col_bg = "none"
32
+ @col_fg = "black"
33
+ @col_line = "black"
34
+
35
+ @leafstyle = params[:leafstyle]
36
+ @fontset = params[:fontset]
37
+ @fontsize = params[:fontsize]
38
+ end
39
+
40
+ def calculate_level
41
+ @element_list.get_elements.select{|e| e.type == 2}.each do |e|
42
+ e.level = @element_list.get_id(e.parent).level + 1
43
+ end
44
+ end
45
+
46
+ def calculate_width(id = 1)
47
+ target = @element_list.get_id(id)
48
+ if target.children.empty?
49
+ target.width = target.content_width + $h_gap_between_nodes * 4
50
+
51
+ parent = @element_list.get_id(target.parent)
52
+ while parent && parent.children.size == 1
53
+ w = parent.content_width
54
+ target.width = w + $h_gap_between_nodes * 4 if w > target.content_width
55
+ parent = @element_list.get_id(parent.parent)
56
+ end
57
+ return target.width
58
+ else
59
+ if target.width != 0
60
+ return target.width
61
+ else
62
+ accum_array = []
63
+ target.children.each do |c|
64
+ accum_array << calculate_width(c)
65
+ end
66
+ if @symmetrize
67
+ accum_width = accum_array.max * target.children.size
68
+ else
69
+ accum_width = accum_array.sum
70
+ end
71
+
72
+ target.width = [accum_width, target.content_width].max
73
+ end
74
+
75
+ return target.width
76
+ end
77
+ end
78
+
79
+ def calculate_height(id = 1)
80
+ target = @element_list.get_id(id)
81
+ if id == 1
82
+ target.vertical_indent = 0
83
+ else
84
+ parent = @element_list.get_id(target.parent)
85
+
86
+ if !target.triangle && @leafstyle == "nothing" && ETYPE_LEAF == target.type && parent.children.size == 1
87
+ vertical_indent = parent.vertical_indent + parent.content_height
88
+ else
89
+ vertical_indent = parent.vertical_indent + parent.content_height + $height_connector
90
+ end
91
+
92
+ target.vertical_indent = vertical_indent
93
+ end
94
+
95
+ if target.children.empty?
96
+ target.height = target.content_height
97
+ vertical_end = target.vertical_indent + target.content_height
98
+ else
99
+ accum_array = []
100
+ target.children.each do |c|
101
+ accum_array << calculate_height(c)
102
+ end
103
+ target.height = accum_array.max - target.vertical_indent
104
+ vertical_end = accum_array.max
105
+ end
106
+ return vertical_end
107
+ end
108
+
109
+ def make_balance(id = 1)
110
+ target = @element_list.get_id(id)
111
+ if target.children.empty?
112
+ parent = @element_list.get_id(target.parent)
113
+ accum_array = []
114
+ parent.children.each do |c|
115
+ accum_array << @element_list.get_id(c).width
116
+ end
117
+ max = accum_array.max
118
+ parent.children.each do |c|
119
+ @element_list.get_id(c).width = max
120
+ end
121
+ return max
122
+ else
123
+ accum_array = []
124
+ target.children.each do |c|
125
+ accum_array << make_balance(c)
126
+ end
127
+ accum_width = accum_array.max
128
+ max = [accum_width, target.content_width].max
129
+ target.children.each do |c|
130
+ @element_list.get_id(c).width = max
131
+ end
132
+ return target.width
133
+ end
134
+ end
135
+
136
+ def calculate_indent
137
+ node_groups = @element_list.get_elements.group_by {|e| e.parent}
138
+ node_groups.each do |k, v|
139
+ next if k == 0
140
+ parent = @element_list.get_id(k)
141
+ if @symmetrize
142
+ num_leaves = v.size
143
+ partition_width = parent.width / num_leaves
144
+ left_offset = parent.horizontal_indent + parent.content_width / 2.0 - parent.width / 2.0
145
+ v.each do |e|
146
+ indent = left_offset + (partition_width - e.content_width) / 2.0
147
+ e.horizontal_indent = indent
148
+ left_offset += partition_width
149
+ end
150
+ else
151
+ left_offset = parent.horizontal_indent + parent.content_width / 2.0 - parent.width / 2.0
152
+ v.each do |e|
153
+ indent = left_offset + (e.width - e.content_width) / 2.0
154
+ e.horizontal_indent = indent
155
+ left_offset += e.width
156
+ end
157
+ end
158
+ end
159
+ end
160
+
161
+ def draw_elements
162
+ @element_list.get_elements.each do |element|
163
+ draw_element(element)
164
+ end
165
+ end
166
+
167
+ def draw_connector(id = 1)
168
+ parent = @element_list.get_id(id)
169
+ children = parent.children.map{|c| @element_list.get_id(c)}
170
+
171
+ if children.empty?
172
+ ;
173
+ elsif children.size == 1
174
+ child = children[0]
175
+ if (@leafstyle == "auto")
176
+ if child.contains_phrase || child.triangle
177
+ triangle_to_parent(parent, child)
178
+ else
179
+ line_to_parent(parent, child)
180
+ end
181
+ elsif(@leafstyle == "bar")
182
+ if child.triangle
183
+ triangle_to_parent(parent, child)
184
+ else
185
+ line_to_parent(parent, child)
186
+ end
187
+ elsif(@leafstyle == "nothing")
188
+ if child.triangle
189
+ triangle_to_parent(parent, child)
190
+ elsif ETYPE_LEAF == child.type
191
+ child.vertical_indent = parent.vertical_indent + parent.content_height + $height_connector / 2
192
+ end
193
+ end
194
+ else
195
+ children.each do |child|
196
+ line_to_parent(parent, child)
197
+ end
198
+ end
199
+
200
+ parent.children.each do |c|
201
+ draw_connector(c)
202
+ end
203
+ end
204
+
205
+ def get_leftmost(id = 1)
206
+ target = @element_list.get_id(id)
207
+ target_indent = target.horizontal_indent
208
+ children_indent = target.children.map{|c| get_leftmost(c)}
209
+ (children_indent << target_indent).min
210
+ end
211
+
212
+ def get_rightmost(id = 1)
213
+ target = @element_list.get_id(id)
214
+ target_right_end = target.horizontal_indent + target.content_width
215
+ children_right_end = target.children.map{|c| get_rightmost(c)}
216
+ (children_right_end << target_right_end).max
217
+ end
218
+
219
+ def node_centering
220
+ node_groups = @element_list.get_elements.group_by {|e| e.parent}
221
+ node_groups.sort_by{|k, v| -k}.each do |k, v|
222
+ next if k == 0
223
+ parent = @element_list.get_id(k)
224
+ child_positions =v.map {|child| child.horizontal_indent + child.content_width / 2 }
225
+ parent.horizontal_indent = child_positions.min + (child_positions.max - child_positions.min - parent.content_width) / 2
226
+ end
227
+ end
228
+
229
+ def parse_list
230
+ calculate_level
231
+ calculate_width
232
+ make_balance if @symmetrize
233
+ calculate_indent
234
+ node_centering
235
+
236
+ top = @element_list.get_id(1)
237
+ diff = top.horizontal_indent
238
+ @element_list.get_elements.each do |e|
239
+ e.horizontal_indent -= diff
240
+ end
241
+
242
+ offset_l = (top.horizontal_indent - get_leftmost) + $h_gap_between_nodes
243
+ offset_r = top.width / 2 - offset_l - $h_gap_between_nodes
244
+
245
+ @element_list.get_elements.each do |e|
246
+ e.horizontal_indent += offset_l
247
+ end
248
+
249
+ calculate_height
250
+ draw_elements
251
+ draw_connector
252
+ num_paths = draw_paths
253
+
254
+ # width = get_rightmost - get_leftmost + $h_gap_between_nodes * 2
255
+ width = get_rightmost - get_leftmost + $h_gap_between_nodes
256
+ height = @element_list.get_id(1).height
257
+ height = @height if @height > height
258
+
259
+ return {height: height, width: width}
260
+ end
261
+ end
262
+ end