rsyntaxtree 0.5.1 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
![
|
56
|
+
![RSyntaxTree generates multilingual syntax trees](http://yohasebe.com/img/rsyntaxtree_example3.png)
|
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
|