rsyntaxtree 0.5.1 → 0.6.5
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.
- data/README.md +6 -4
- data/bin/rsyntaxtree +4 -4
- data/lib/rsyntaxtree/element.rb +10 -3
- data/lib/rsyntaxtree/svg_graph.rb +45 -17
- data/lib/rsyntaxtree/tree_graph.rb +33 -8
- data/lib/rsyntaxtree/version.rb +1 -1
- data/lib/rsyntaxtree.rb +5 -1
- data/public/js/rsyntaxtree.js +4 -3
- data/views/footer.haml +1 -1
- data/views/index.haml +13 -3
- data/views/navbar.haml +1 -1
- metadata +13 -13
data/README.md
CHANGED
@@ -27,7 +27,7 @@ For the command-line interface, type `$rsyntaxtree -h` after installation. Here'
|
|
27
27
|
where [options] are:
|
28
28
|
--outdir, -o <s>: Output directory (default: present working directory) (default: ./)
|
29
29
|
--format, -f <s>: Output format: png, pdf, or svg (default: png)
|
30
|
-
--leafstyle, -l <s>: visual style of tree leaves: triangle, bar, or nothing (default:
|
30
|
+
--leafstyle, -l <s>: visual style of tree leaves: auto, triangle, bar, or nothing (default: auto)
|
31
31
|
--fontstyle, -n <s>: Font style: sans-serif, serif, jp-gothic, jp-mincho, cjk (default: cjk)
|
32
32
|
--font, -t <s>: Path to a ttf font used to generate tree
|
33
33
|
--fontsize, -s <i>: Font size: 8-20 (default: 16)
|
@@ -39,7 +39,9 @@ For the command-line interface, type `$rsyntaxtree -h` after installation. Here'
|
|
39
39
|
|
40
40
|
### Tips
|
41
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.
|
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 shape of connectors between a terminal node and its leaf 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).
|
43
45
|
|
44
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>
|
45
47
|
|
@@ -47,11 +49,11 @@ You can put a subscript to any node by putting the _ character between the main
|
|
47
49
|
|
48
50
|
Bracket notation (auto-subscript-on):
|
49
51
|
|
50
|
-
[
|
52
|
+
[S [NP RSyntaxTree^][VP [V generates][NP multilingual syntax trees]]]
|
51
53
|
|
52
54
|
Resulting PNG
|
53
55
|
|
54
|
-

|
55
57
|
|
56
58
|
### Development
|
57
59
|
|
data/bin/rsyntaxtree
CHANGED
@@ -12,7 +12,7 @@ opts = Trollop::options do
|
|
12
12
|
RSyntaxTree, (linguistic) syntax tree generator written in Ruby.
|
13
13
|
|
14
14
|
Usage:
|
15
|
-
rsyntaxtree [options] "[
|
15
|
+
rsyntaxtree [options] "[VP [VP [V set] [NP bracket notation]] [ADV here]]"
|
16
16
|
where [options] are:
|
17
17
|
EOS
|
18
18
|
|
@@ -20,8 +20,8 @@ EOS
|
|
20
20
|
:default => "./"
|
21
21
|
opt :format, "Output format: png, pdf, or svg",
|
22
22
|
:default => "png"
|
23
|
-
opt :leafstyle, "visual style of tree leaves: triangle, bar, or nothing",
|
24
|
-
:default => "
|
23
|
+
opt :leafstyle, "visual style of tree leaves: auto, triangle, bar, or nothing",
|
24
|
+
:default => "auto"
|
25
25
|
opt :fontstyle, "Font style (available when ttf font is specified): sans-serif, serif, jp-gothic, jp-mincho, cjk",
|
26
26
|
:default => "cjk"
|
27
27
|
opt :font, "Path to a ttf font used to generate tree (optional)", :type => String
|
@@ -37,7 +37,7 @@ end
|
|
37
37
|
|
38
38
|
Trollop::die :outdir, "must be an exsting directory path" unless FileTest::directory?(opts[:outdir])
|
39
39
|
Trollop::die :format, "must be png or svg" unless /\A(png|pdf|svg)\z/ =~ opts[:format]
|
40
|
-
Trollop::die :leafstyle, "must be triangle, bar, or nothing" unless /\A(triangle|bar|nothing)\z/ =~ opts[:leafstyle]
|
40
|
+
Trollop::die :leafstyle, "must be auto, triangle, bar, or nothing" unless /\A(auto|triangle|bar|nothing)\z/ =~ opts[:leafstyle]
|
41
41
|
Trollop::die :fontstyle, "must be sans-serif, serif, jp-gothic, jp-mincho, or cjk" unless /\A(sans\-serif|serif|jp\-gothic|jp\-mincho|cjk)\z/ =~ opts[:fontstyle]
|
42
42
|
Trollop::die :font, "must be path to an existing ttf font" if opts[:font] && !File::exists?(opts[:font])
|
43
43
|
Trollop::die :fontsize, "must be in the range 8-20" unless opts[:fontsize] >= 8 && opts[:fontsize] <= 20
|
data/lib/rsyntaxtree/element.rb
CHANGED
@@ -33,15 +33,22 @@ ETYPE_LEAF = 2
|
|
33
33
|
|
34
34
|
class Element
|
35
35
|
|
36
|
-
attr_accessor :id, :parent, :type, :content, :level, :width, :indent
|
37
|
-
def initialize(id = 0, parent = 0, content =
|
36
|
+
attr_accessor :id, :parent, :type, :content, :level, :width, :indent, :triangle
|
37
|
+
def initialize(id = 0, parent = 0, content = "", level = 0, type = ETYPE_LEAF)
|
38
38
|
@id = id # Unique element id
|
39
39
|
@parent = parent # Parent element id
|
40
40
|
@type = type # Element type
|
41
|
-
@content = content.strip # The actual element content
|
42
41
|
@level = level # Element level in the tree (0=top etc...)
|
43
42
|
@width = 0 # Width of the element in pixels
|
44
43
|
@indent = 0 # Drawing offset
|
44
|
+
# content = content.strip
|
45
|
+
if /\A.+\^\z/ =~ content.strip
|
46
|
+
@content = content.gsub("^"){""} # The actual element content
|
47
|
+
@triangle = true # draw triangle instead of stright bar when in auto mode
|
48
|
+
else
|
49
|
+
@content = content.gsub("^"){""} # The actual element content
|
50
|
+
@triangle = false # draw triangle instead of stright bar when in auto mode
|
51
|
+
end
|
45
52
|
end
|
46
53
|
|
47
54
|
# Debug helper function
|
@@ -33,9 +33,10 @@ include Magick
|
|
33
33
|
|
34
34
|
# constant variables are already set in tree_graph.rb
|
35
35
|
|
36
|
-
class SVGGraph
|
37
36
|
|
38
|
-
|
37
|
+
class SVGGraph
|
38
|
+
|
39
|
+
def initialize(e_list, symmetrize = true, color = true, leafstyle = "auto",
|
39
40
|
font = "Helvetica", font_size = 10, simple = false)
|
40
41
|
|
41
42
|
# Store parameters
|
@@ -52,7 +53,7 @@ class SVGGraph
|
|
52
53
|
@e_height = @font_size + E_PADD * 2
|
53
54
|
h = @e_list.get_level_height
|
54
55
|
w = calc_level_width(0)
|
55
|
-
w_px = w + B_SIDE
|
56
|
+
w_px = w + B_SIDE
|
56
57
|
h_px = h * @e_height + (h-1) * (V_SPACE + @font_size) + B_TOPBOT * 2
|
57
58
|
@height = h_px
|
58
59
|
@width = w_px
|
@@ -210,21 +211,25 @@ EOD
|
|
210
211
|
end
|
211
212
|
|
212
213
|
# Draw a triangle between child/parent elements
|
213
|
-
def triangle_to_parent(fromX, fromY, fromW, toW, textW)
|
214
|
+
def triangle_to_parent(fromX, fromY, fromW, toW, textW, symmetrize = true)
|
214
215
|
if (fromY == 0)
|
215
216
|
return
|
216
217
|
end
|
217
|
-
|
218
|
+
|
218
219
|
toX = fromX
|
219
|
-
|
220
|
-
fromTop = row2px(fromY)
|
221
|
-
|
222
220
|
fromCenter = (fromX + fromW / 2 + B_SIDE)
|
223
|
-
|
224
|
-
|
225
|
-
|
221
|
+
|
222
|
+
fromTop = row2px(fromY).ceil
|
223
|
+
fromLeft1 = (fromCenter + textW / 2).ceil
|
224
|
+
fromLeft2 = (fromCenter - textW / 2).ceil
|
226
225
|
toBot = (row2px(fromY - 1) + @e_height)
|
227
|
-
|
226
|
+
|
227
|
+
if symmetrize
|
228
|
+
toLeft = (toX + textW / 2 + B_SIDE)
|
229
|
+
else
|
230
|
+
toLeft = (toX + textW / 2 + B_SIDE * 3)
|
231
|
+
end
|
232
|
+
|
228
233
|
polygon_data = @polygon_styles.sub(/X1/, fromLeft1.ceil.to_s)
|
229
234
|
polygon_data = polygon_data.sub(/Y1/, fromTop.ceil.to_s)
|
230
235
|
polygon_data = polygon_data.sub(/X2/, fromLeft2.ceil.to_s)
|
@@ -233,6 +238,8 @@ EOD
|
|
233
238
|
@tree_data += polygon_data.sub(/Y3/, toBot.ceil.to_s)
|
234
239
|
end
|
235
240
|
|
241
|
+
|
242
|
+
|
236
243
|
# If a node element text is wider than the sum of it's
|
237
244
|
# child elements, then the child elements need to
|
238
245
|
# be resized to even out the space. This function
|
@@ -345,10 +352,17 @@ EOD
|
|
345
352
|
draw_element(x, i, cw, j.content, j.type)
|
346
353
|
if(j.parent != 0 )
|
347
354
|
words = j.content.split(" ")
|
348
|
-
unless @leafstyle == "nothing" && ETYPE_LEAF == j.type
|
349
|
-
if (@leafstyle == "triangle" && ETYPE_LEAF == j.type && x == parent_indent && words.length >
|
355
|
+
unless @leafstyle == "nothing" && ETYPE_LEAF == j.type
|
356
|
+
if (@leafstyle == "triangle" && ETYPE_LEAF == j.type && x == parent_indent && words.length > 0)
|
350
357
|
txt_width = img_get_txt_width(j.content, @font, @font_size)
|
351
358
|
triangle_to_parent(x, i, cw, @e_list.get_element_width(j.parent), txt_width)
|
359
|
+
elsif (@leafstyle == "auto" && ETYPE_LEAF == j.type && x == parent_indent)
|
360
|
+
if words.length > 1 || j.triangle
|
361
|
+
txt_width = img_get_txt_width(j.content, @font, @font_size)
|
362
|
+
triangle_to_parent(x, i, cw, @e_list.get_element_width(j.parent), txt_width, @symmetrize)
|
363
|
+
else
|
364
|
+
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
365
|
+
end
|
352
366
|
else
|
353
367
|
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
354
368
|
end
|
@@ -384,10 +398,17 @@ EOD
|
|
384
398
|
k = @e_list.get_id(child)
|
385
399
|
words = k.content.split(" ")
|
386
400
|
dw = img_get_txt_width(k.content, @font, @font_size)
|
387
|
-
unless @leafstyle == "nothing" && ETYPE_LEAF == k.type
|
388
|
-
if (@leafstyle == "triangle" && ETYPE_LEAF == k.type && k.indent == j.indent && words.length >
|
401
|
+
unless @leafstyle == "nothing" && ETYPE_LEAF == k.type
|
402
|
+
if (@leafstyle == "triangle" && ETYPE_LEAF == k.type && k.indent == j.indent && words.length > 0)
|
389
403
|
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
390
404
|
triangle_to_parent(k.indent, curlevel + 1, dw, tw, txt_width)
|
405
|
+
elsif (@leafstyle == "auto" && ETYPE_LEAF == k.type && k.indent == j.indent)
|
406
|
+
if words.length > 1 || k.triangle
|
407
|
+
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
408
|
+
triangle_to_parent(k.indent, curlevel + 1, dw, tw, txt_width)
|
409
|
+
else
|
410
|
+
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
411
|
+
end
|
391
412
|
else
|
392
413
|
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
393
414
|
end
|
@@ -422,10 +443,17 @@ EOD
|
|
422
443
|
words = k.content.split(" ")
|
423
444
|
dw = img_get_txt_width(k.content, @font, @font_size)
|
424
445
|
unless @leafstyle == "nothing" && ETYPE_LEAF == k.type
|
425
|
-
if (@leafstyle == "triangle" && ETYPE_LEAF == k.type && words.length >
|
446
|
+
if (@leafstyle == "triangle" && ETYPE_LEAF == k.type && words.length > 0)
|
426
447
|
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
427
448
|
triangle_to_parent(k.indent, curlevel + 1, dw,
|
428
449
|
@e_list.get_element_width(k.parent), txt_width)
|
450
|
+
elsif (@leafstyle == "auto" && ETYPE_LEAF == k.type)
|
451
|
+
if words.length > 1 || k.triangle
|
452
|
+
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
453
|
+
triangle_to_parent(k.indent, curlevel + 1, dw, tw, txt_width)
|
454
|
+
else
|
455
|
+
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
456
|
+
end
|
429
457
|
else
|
430
458
|
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
431
459
|
end
|
@@ -42,7 +42,7 @@ B_TOPBOT = 5
|
|
42
42
|
|
43
43
|
class TreeGraph
|
44
44
|
|
45
|
-
def initialize(e_list, symmetrize = true, color = true, terminal = "
|
45
|
+
def initialize(e_list, symmetrize = true, color = true, terminal = "auto",
|
46
46
|
font = "Helvetica", font_size = 10, simple = false)
|
47
47
|
|
48
48
|
# Store parameters
|
@@ -113,7 +113,7 @@ class TreeGraph
|
|
113
113
|
|
114
114
|
# Add the element into the tree (draw it)
|
115
115
|
def draw_element(x, y, w, string, type)
|
116
|
-
|
116
|
+
string = string.sub(/\^\z/){""}
|
117
117
|
# Calculate element dimensions and position
|
118
118
|
if (type == ETYPE_LEAF) and @terminal == "nothing"
|
119
119
|
top = row2px(y - 1) + (@font_size * 1.5)
|
@@ -201,7 +201,7 @@ class TreeGraph
|
|
201
201
|
end
|
202
202
|
|
203
203
|
# Draw a triangle between child/parent elements
|
204
|
-
def triangle_to_parent(fromX, fromY, fromW, toX, textW)
|
204
|
+
def triangle_to_parent(fromX, fromY, fromW, toX, textW, symmetrize = true)
|
205
205
|
if (fromY == 0)
|
206
206
|
return
|
207
207
|
end
|
@@ -213,8 +213,12 @@ class TreeGraph
|
|
213
213
|
fromLeft1 = (fromCenter + textW / 2).ceil
|
214
214
|
fromLeft2 = (fromCenter - textW / 2).ceil
|
215
215
|
toBot = (row2px(fromY - 1) + @e_height)
|
216
|
-
|
217
|
-
|
216
|
+
if symmetrize
|
217
|
+
toLeft = (toX + textW / 2 + B_SIDE)
|
218
|
+
else
|
219
|
+
toLeft = (toX + textW / 2 + B_SIDE * 3)
|
220
|
+
end
|
221
|
+
|
218
222
|
@gc.fill("none")
|
219
223
|
@gc.stroke @col_line
|
220
224
|
@gc.stroke_width 1
|
@@ -334,9 +338,16 @@ class TreeGraph
|
|
334
338
|
if(j.parent != 0 )
|
335
339
|
words = j.content.split(" ")
|
336
340
|
unless @terminal == "nothing" && ETYPE_LEAF == j.type
|
337
|
-
if (@terminal == "triangle" && ETYPE_LEAF == j.type && x == parent_indent && words.length >
|
341
|
+
if (@terminal == "triangle" && ETYPE_LEAF == j.type && x == parent_indent && words.length > 0)
|
338
342
|
txt_width = img_get_txt_width(j.content, @font, @font_size)
|
339
343
|
triangle_to_parent(x, i, cw, @e_list.get_element_width(j.parent), txt_width)
|
344
|
+
elsif (@terminal == "auto" && ETYPE_LEAF == j.type && x == parent_indent)
|
345
|
+
if words.length > 1 || j.triangle
|
346
|
+
txt_width = img_get_txt_width(j.content, @font, @font_size)
|
347
|
+
triangle_to_parent(x, i, cw, @e_list.get_element_width(j.parent), txt_width, @symmetrize)
|
348
|
+
else
|
349
|
+
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
350
|
+
end
|
340
351
|
else
|
341
352
|
line_to_parent(x, i, cw, @e_list.get_indent(j.parent), @e_list.get_element_width(j.parent))
|
342
353
|
end
|
@@ -374,9 +385,16 @@ class TreeGraph
|
|
374
385
|
words = k.content.split(" ")
|
375
386
|
dw = img_get_txt_width(k.content, @font, @font_size)
|
376
387
|
unless @terminal == "nothing" && ETYPE_LEAF == k.type
|
377
|
-
if (@terminal == "triangle" && ETYPE_LEAF == k.type && k.indent == j.indent && words.length >
|
388
|
+
if (@terminal == "triangle" && ETYPE_LEAF == k.type && k.indent == j.indent && words.length > 0)
|
378
389
|
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
379
390
|
triangle_to_parent(k.indent, curlevel + 1, dw, tw, txt_width)
|
391
|
+
elsif (@terminal == "auto" && ETYPE_LEAF == k.type && k.indent == j.indent)
|
392
|
+
if words.length > 1 || k.triangle
|
393
|
+
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
394
|
+
triangle_to_parent(k.indent, curlevel + 1, dw, tw, txt_width)
|
395
|
+
else
|
396
|
+
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
397
|
+
end
|
380
398
|
else
|
381
399
|
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
382
400
|
end
|
@@ -411,10 +429,17 @@ class TreeGraph
|
|
411
429
|
words = k.content.split(" ")
|
412
430
|
dw = img_get_txt_width(k.content, @font, @font_size)
|
413
431
|
unless @terminal == "nothing" && ETYPE_LEAF == k.type
|
414
|
-
if (@terminal == "triangle" && ETYPE_LEAF == k.type && words.length >
|
432
|
+
if (@terminal == "triangle" && ETYPE_LEAF == k.type && words.length > 0)
|
415
433
|
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
416
434
|
triangle_to_parent(k.indent, curlevel + 1, dw,
|
417
435
|
@e_list.get_element_width(k.parent), txt_width)
|
436
|
+
elsif (@terminal == "auto" && ETYPE_LEAF == k.type)
|
437
|
+
if words.length > 1 || k.triangle
|
438
|
+
txt_width = img_get_txt_width(k.content, @font, @font_size)
|
439
|
+
triangle_to_parent(k.indent, curlevel + 1, dw, @e_list.get_element_width(k.parent), txt_width)
|
440
|
+
else
|
441
|
+
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
442
|
+
end
|
418
443
|
else
|
419
444
|
line_to_parent(k.indent, curlevel + 1, dw, j.indent, tw)
|
420
445
|
end
|
data/lib/rsyntaxtree/version.rb
CHANGED
data/lib/rsyntaxtree.rb
CHANGED
@@ -68,6 +68,10 @@ class RSGenerator
|
|
68
68
|
new_params["font"] = FONT_DIR + "/ipamp.ttf"
|
69
69
|
elsif value == "cjk"
|
70
70
|
new_params["font"] = FONT_DIR + "/wqy-zenhei.ttf"
|
71
|
+
elsif value == "aru"
|
72
|
+
new_params["font"] = FONT_DIR + "/ArialUnicode.ttf"
|
73
|
+
elsif value == "tnr"
|
74
|
+
new_params["font"] = FONT_DIR + "/TimesNewRoman.ttf"
|
71
75
|
end
|
72
76
|
else
|
73
77
|
new_params[key] = value
|
@@ -81,7 +85,7 @@ class RSGenerator
|
|
81
85
|
"autosub" => false,
|
82
86
|
"fontsize" => 18,
|
83
87
|
"format" => "png",
|
84
|
-
"leafstyle" => "
|
88
|
+
"leafstyle" => "auto",
|
85
89
|
"font" => FONT_DIR + "/ipagp.ttf",
|
86
90
|
"filename" => "syntree",
|
87
91
|
"data" => "",
|
data/public/js/rsyntaxtree.js
CHANGED
@@ -17,13 +17,14 @@ $(function(){
|
|
17
17
|
}
|
18
18
|
|
19
19
|
function draw_graph(data){
|
20
|
-
$("#result").html("<img id='tree_image'>");
|
21
20
|
$.ajax({
|
22
21
|
url: 'draw_png',
|
23
22
|
type: 'POST',
|
24
23
|
data: make_params(data),
|
25
|
-
success: function (
|
26
|
-
|
24
|
+
success: function (raw_data) {
|
25
|
+
var png_img = 'data:image/png;base64, ' + raw_data;
|
26
|
+
$("#result").html("<img id='tree_image'>");
|
27
|
+
$('#tree_image').attr('src', png_img);
|
27
28
|
}
|
28
29
|
});
|
29
30
|
}
|
data/views/footer.haml
CHANGED
data/views/index.haml
CHANGED
@@ -11,11 +11,12 @@
|
|
11
11
|
#alert{:style => "height:20px;"}
|
12
12
|
.span12
|
13
13
|
%textarea.span12{:id => "data", :cols => 100, :style => "font-size: 11pt; height: 4em;line-height: 140%;"}
|
14
|
-
[S [NP RSyntaxTree][VP [V generates][NP multilingual syntax trees]]]
|
14
|
+
[S [NP RSyntaxTree^][VP [V generates][NP multilingual syntax trees]]]
|
15
15
|
.row
|
16
16
|
.span2
|
17
17
|
%h4 Leaf-style
|
18
18
|
%select{:name => "leafstyle", :style => "width:110px;"}
|
19
|
+
%option{:value => "auto"}Auto
|
19
20
|
%option{:value => "triangle"}Triangle
|
20
21
|
%option{:value => "bar"}Bar
|
21
22
|
%option{:value => "nothing"}Nothing
|
@@ -27,6 +28,9 @@
|
|
27
28
|
%option{:value => "jp-gothic"}JP-Gothic
|
28
29
|
%option{:value => "jp-mincho"}JP-Mincho
|
29
30
|
%option{:value => "cjk"}CJK
|
31
|
+
%option{:value => "cjk"}CJK
|
32
|
+
%option{:value => "aru"}ARU
|
33
|
+
%option{:value => "tnr"}TNR
|
30
34
|
.span2
|
31
35
|
%h4 Font-size
|
32
36
|
%select{:name => "fontsize", :style => "width:60px;"}
|
@@ -107,8 +111,14 @@
|
|
107
111
|
%p
|
108
112
|
Every branch or leaf of a tree must belong to a node. To create a node, place a label
|
109
113
|
right next to the opening bracket. Arbitrary number of branches can follow with a
|
110
|
-
preceding space.
|
111
|
-
|
114
|
+
preceding space.
|
115
|
+
|
116
|
+
%p
|
117
|
+
There are several modes in which the shape of connectors between a terminal node and its leaf are
|
118
|
+
drawn differently (auto, triangle, bar, and nothing). In auto mode, a triangle is used if the leaf
|
119
|
+
contains one or more spaces inside (i.e. if it’s a phrase), but if it contains no spaces (i.e. if
|
120
|
+
it is just a word), a straight bar will be drawn instead (unless the leaf contains a "^" symbol at the end
|
121
|
+
which makes it a single-word phrase).
|
112
122
|
|
113
123
|
%p
|
114
124
|
You can put a subscript to any node by putting the _ character between the main label and
|
data/views/navbar.haml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsyntaxtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5
|
4
|
+
version: 0.6.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
16
|
-
requirement: &
|
16
|
+
requirement: &70313691199800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70313691199800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &70313691199380 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70313691199380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: haml
|
38
|
-
requirement: &
|
38
|
+
requirement: &70313681798040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70313681798040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shotgun
|
49
|
-
requirement: &
|
49
|
+
requirement: &70313691228640 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70313691228640
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: trollop
|
60
|
-
requirement: &
|
60
|
+
requirement: &70313691228220 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70313691228220
|
69
69
|
description: Yet another syntax tree generator made with Ruby and RMagick
|
70
70
|
email:
|
71
71
|
- yohasebe@gmail.com
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project: rsyntaxtree
|
135
|
-
rubygems_version: 1.8.
|
135
|
+
rubygems_version: 1.8.17
|
136
136
|
signing_key:
|
137
137
|
specification_version: 3
|
138
138
|
summary: RSyntaxTree is a graphical syntax tree generator written in Ruby
|