maruku 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. data/bin/maruku +9 -3
  2. data/docs/changelog.html +52 -4
  3. data/docs/changelog.md +35 -5
  4. data/docs/index.html +13 -5
  5. data/docs/maruku.html +13 -5
  6. data/docs/maruku.md +14 -3
  7. data/lib/maruku/defaults.rb +4 -1
  8. data/lib/maruku/input/parse_block.rb +1 -1
  9. data/lib/maruku/input/parse_span_better.rb +14 -9
  10. data/lib/maruku/input/type_detection.rb +1 -1
  11. data/lib/maruku/input_textile2/t2_parser.rb +1 -1
  12. data/lib/maruku/output/to_html.rb +10 -0
  13. data/lib/maruku/output/to_latex.rb +1 -1
  14. data/lib/maruku/string_utils.rb +4 -0
  15. data/lib/maruku/tests/new_parser.rb +1 -1
  16. data/lib/maruku/version.rb +1 -1
  17. data/maruku_gem.rb +1 -1
  18. data/tests/unittest/email.md +2 -2
  19. data/tests/unittest/inline_html.md +134 -8
  20. data/tests/unittest/links.md +1 -1
  21. data/tests/unittest/links2.md +42 -0
  22. data/tests/unittest/lists10.md +62 -0
  23. data/tests/unittest/lists11.md +57 -0
  24. data/tests/unittest/lists8.md +2 -7
  25. data/tests/unittest/lists_after_paragraph.md +2 -2
  26. data/tests/unittest/misc_sw.md +2 -2
  27. data/tests/unittest/notyet/triggering.md +2 -2
  28. data/tests/unittest/paragraphs.md +1 -1
  29. data/tests/unittest/wrapping.md +2 -2
  30. data/unit_test_block.sh +5 -0
  31. data/unit_test_span.sh +2 -0
  32. metadata +215 -213
  33. data/lib/maruku/ext/diagrams/diagrams.rb +0 -8
  34. data/lib/maruku/ext/diagrams/grid.rb +0 -78
  35. data/lib/maruku/ext/diagrams/inspect.rb +0 -11
  36. data/lib/maruku/ext/diagrams/layout.rb +0 -508
  37. data/lib/maruku/ext/diagrams/parser.rb +0 -219
  38. data/lib/maruku/ext/diagrams/structures.rb +0 -168
  39. data/lib/maruku/ext/diagrams/to_html.rb +0 -37
  40. data/lib/maruku/ext/diagrams/to_latex.rb +0 -103
  41. data/lib/maruku/ext/diagrams/unittest.rb +0 -123
@@ -1,78 +0,0 @@
1
- module Diagrams
2
-
3
- class Grid
4
- attr_accessor :width, :height
5
-
6
- def initialize(width, height, init)
7
- @width, @height = width, height
8
- @data = Array.new
9
- height.times do @data.push [init]*@width end
10
- @init = init
11
- end
12
-
13
- def get(x, y)
14
- @data[y][x]
15
- end
16
-
17
- def set(x, y, v)
18
- @data[y][x] = v || @init
19
- end
20
-
21
- def inspect
22
- @data.map{|x|
23
- x.map{|y|
24
- case y
25
- when true; '#'
26
- when false, nil; ' '
27
- when Fixnum; y.chr
28
- end
29
- }.join
30
- }.join("\n")
31
- end
32
-
33
- def inspect2(valid)
34
- s = ""
35
-
36
- s += "+" + "-"*@width + "+\n"
37
- for y in 0..(@height-1)
38
- s += "|"
39
- for x in 0..(@width-1)
40
- s += valid.get(x,y) ? get(x,y).chr : " "
41
- end
42
- s += "|"
43
- s += "\n"
44
- end
45
- s += "+" + "-"*@width + "+\n"
46
- s
47
- end
48
-
49
- def each
50
- for y in 0..(height-1)
51
- for x in 0..(width-1)
52
- e = get(x,y)
53
- yield x,y,e
54
- end
55
- end
56
- end
57
-
58
- def set_area(x,y,w,h,e)
59
- for i in (x..x+w-1)
60
- for j in (y..y+h-1)
61
- set(i,j,e)
62
- end
63
- end
64
- end
65
-
66
- def read_area(x,y,w,h)
67
- s = ""
68
- for j in (y..y+h-1)
69
- for i in (x..x+w-1)
70
- s << get(i,j)
71
- end
72
- s << "\n"
73
- end
74
- s
75
- end
76
- end
77
-
78
- end
@@ -1,11 +0,0 @@
1
- module Diagrams
2
-
3
- class Arrow
4
- def inspect
5
- "Arrow (#{(@cap1||?-).chr},#{(@cap2||?-).chr}) "+
6
- "from #{@start_link.class} to #{@end_link.class} "+
7
- " #{@start_pos.inspect} -> #{@end_pos.inspect}"
8
- end
9
- end
10
-
11
- end
@@ -1,508 +0,0 @@
1
- require 'set'
2
-
3
- module Diagrams
4
-
5
- class SSimple
6
- attr_accessor :begin, :end # begin and end variables
7
- attr_accessor :spring
8
- def get_spring() @spring end
9
- def internal_variables() [] end
10
- end
11
-
12
- class SParallel
13
- attr_accessor :begin, :end # begin and end variables
14
- attr_accessor :children
15
- def internal_variables()
16
- @children.map{|x|x.internal_variables}.flatten
17
- end
18
- end
19
-
20
-
21
- class VarGraph
22
- class Node
23
- attr_accessor :name
24
- attr_accessor :children
25
- attr_accessor :parents
26
-
27
- attr_accessor :next # closure of children
28
- attr_accessor :prev # closure of parents
29
-
30
- def initialize(name_)
31
- @name = name_
32
- @children = []
33
- @parents = []
34
- @next = []
35
- @prev = []
36
- end
37
-
38
- def inspect() "N[#{@name}]" end
39
- alias to_s inspect
40
-
41
- # return parents
42
- def compute_parents_closure
43
- @parents.each do |parent| # xxx rifare
44
- parent.compute_parents_closure
45
- end
46
-
47
- @prev = @parents.map do |p| p.prev end.flatten
48
- @prev += @parents
49
- @prev.uniq!
50
- end
51
-
52
- def compute_children_closure
53
- @children.each do |child| # xxx rifare
54
- child.compute_children_closure
55
- end
56
-
57
- @next = @children.map do |c| c.next end.flatten
58
- @next += @children
59
- @next.uniq!
60
- end
61
-
62
- def dist_up() @parents.empty? ? 0 : @parents.map{|x| x.dist_up}.max+1 end
63
- def dist_down() @children.empty? ? 0 : @children.map{|x| x.dist_down}.max+1 end
64
-
65
- end
66
-
67
- def ==(other)
68
- self.name == other.name
69
- end
70
-
71
- attr_accessor :name2node
72
-
73
- def initialize
74
- self.name2node = {}
75
- end
76
-
77
- def add_edge(var1, var2)
78
- raise "var1 = var2 = #{var1.inspect}" if var1 == var2
79
-
80
- name2node[var1] = Node.new(var1) if not name2node.has_key? var1
81
- name2node[var2] = Node.new(var2) if not name2node.has_key? var2
82
-
83
- n1,n2 = name2node[var1],name2node[var2]
84
-
85
- n1.children.push n2
86
- n2.parents.push n1
87
- end
88
-
89
- def compute_closure
90
- @name2node.each do |var, node|
91
- node.compute_children_closure
92
- node.compute_parents_closure
93
- end
94
-
95
- @name2node.each do |var, node|
96
- # puts "Node #{var} -> #{node.next.inspect}"
97
- # puts "Node #{var} <- #{node.prev.inspect}"
98
- end
99
- end
100
-
101
- def go_recursive(node_head, id)
102
- sub = []
103
- node_head.children.each do |child|
104
- if child.parents.size == 1
105
- sub.push child
106
- end
107
- end
108
-
109
- puts "#{id} Found #{sub.size} subs: #{sub.inspect}"
110
-
111
- node_head.children.each do |child|
112
- if (not sub.include?(child)) and child.parents.size != 1
113
- adottare = []
114
- sub.each do |su|
115
- if child.prev.include? su
116
- adottare.push su
117
- end
118
- end
119
-
120
- puts "#{id} child #{child} might be associated with #{adottare.inspect} - #{child.parents.inspect}"
121
-
122
- end
123
- end
124
-
125
- sub.each_with_index do |sub, i|
126
- puts "#{id}/#{i}: #{sub}"
127
- go_recursive(sub, "#{id}/#{i}")
128
- end
129
- end
130
-
131
- def go!
132
-
133
- def do_it(name2node, function)
134
- dist2nodes = []
135
- name2node.each do |var, node|
136
- dist = node.send function
137
- dist2nodes[dist] =[] if dist2nodes[dist] == nil
138
- dist2nodes[dist].push node
139
- end
140
- dist2nodes
141
- end
142
-
143
- up = do_it(@name2node, :dist_up)
144
- down = do_it(@name2node, :dist_down)
145
-
146
- up.each_with_index do |nodes, i|
147
- puts "U Generation #{i}: #{nodes.inspect}"
148
- end
149
- down.each_with_index do |nodes, i|
150
- puts "D Generation #{i}: #{nodes.inspect}"
151
- end
152
-
153
- # go_recursive(@name2node[DIAG_TL], "root")
154
- end
155
- end
156
-
157
- class Layout
158
- def initialize
159
- @hsystem = VarGraph.new
160
- @vsystem = VarGraph.new
161
-
162
- @hlink,@vlink = {},{}
163
- @hsprings,@vsprings={},{}
164
- end
165
-
166
- def to_dot()
167
- return to_dot_links(@hlink,@hsprings), to_dot_links(@vlink,@vsprings)
168
- end
169
-
170
- def to_dot_links(links, springs)
171
- s = "digraph diagram {\n"
172
- links.each do |var, to_other|
173
- if not to_other.empty?
174
- var_ = var.gsub(/^[^_]+_/,'')
175
- s += "\t#{var} [label = \"#{var_}\" ];\n"
176
- to_other.each do |v2, spring|
177
- s += "\t #{var} -> #{v2} [ label = \"#{spring.inspect}\"];\n"
178
- end
179
- end
180
- end
181
- s += "}\n"
182
- end
183
-
184
- def add_var(s)
185
- @hlink[s]=[] if not @hlink[s]
186
- @vlink[s]=[] if not @vlink[s]
187
- end
188
-
189
- # var2-var1 = spring
190
- def add_con_h(var1,var2,hspring)
191
- add_var var1; add_var var2;
192
- @hlink[var1].push [var2, hspring]
193
- @hsprings[[var1,var2]] = hspring
194
-
195
- @hsystem.add_edge(var1, var2)
196
- end
197
-
198
- def add_con_v(var1,var2,vspring)
199
- add_var var1; add_var var2;
200
- @vlink[var1].push [var2, vspring]
201
- @vsprings[[var1,var2]] = vspring
202
-
203
- @vsystem.add_edge(var1, var2)
204
- end
205
-
206
- def get_preferred(var1, var2)
207
- hpaths = rec_paths(@hlink, var1, var2)
208
- vpaths = rec_paths(@vlink, var1, var2)
209
- puts inspect
210
- hpaths.each do |h|
211
- puts "H: #{h.inspect}"
212
- end
213
- vpaths.each do |v|
214
- puts "V: #{v.inspect}"
215
- end
216
-
217
- hsprings =
218
- hpaths.map do |h|
219
- ss = []
220
- for i in 0..(h.size-2)
221
- v1,v2 = h[i],h[i+1]
222
- ss.push @hsprings[[v1,v2]]
223
- end
224
- ss
225
- end
226
- vsprings =
227
- vpaths.map do |h|
228
- ss = []
229
- for i in 0..(h.size-2)
230
- v1,v2 = h[i],h[i+1]
231
- ss.push @vsprings[[v1,v2]]
232
- end
233
- ss
234
- end
235
-
236
-
237
- def go_up_parallel(par)
238
- final = par[0]
239
- for i in 1..(par.size-1)
240
- final = Spring.parallel(final, par[i])
241
- end
242
- final
243
- end
244
-
245
- def go_up_series(series)
246
- tot = series[0]
247
- for i in 1..(series.size-1)
248
- tot = Spring.series(tot, series[i])
249
- end
250
- tot
251
- end
252
-
253
- def compress(x)
254
- t = x.map do |s| go_up_series(s) end
255
- final = go_up_parallel(t)
256
- end
257
-
258
- def sum_of_shrink(series)
259
- sum = 0
260
- series.each do |s| sum += s.shrink end
261
- sum
262
- end
263
-
264
- def sum_of_stretch(series)
265
- sum = 0
266
- series.each do |s| sum += s.stretch end
267
- sum
268
- end
269
-
270
- def go_back(imposed, series)
271
- pref = go_up_series(series)
272
- if pref.pref > imposed
273
- # must shrink
274
- shrink = pref.pref - imposed
275
- sum = sum_of_shrink(series)
276
- series.each do |s|
277
- its_shrink = (s.shrink / sum) * shrink
278
- its_imposed = s.pref - its_shrink
279
- if s.imposed
280
- s.imposed = (its_imposed+ s.imposed)*0.5
281
- else
282
- s.imposed = its_imposed
283
- end
284
- s.pref = s.pref*0.5 + s.imposed*0.5
285
- end
286
- else
287
- # must stretch
288
- stretch = imposed - pref.pref
289
- sum = sum_of_stretch(series)
290
- series.each do |s|
291
- its_stretch = (s.stretch / sum) * stretch
292
- its_imposed = s.pref + its_stretch
293
- if s.imposed
294
- s.imposed = (its_imposed+ s.imposed)*0.5
295
- else
296
- s.imposed = its_imposed
297
- end
298
- s.pref = s.pref*0.5 + s.imposed*0.5
299
- end
300
- end
301
- end
302
-
303
- for i in 0..100
304
- hpref = compress(hsprings)
305
- vpref = compress(vsprings)
306
-
307
- width = hpref.pref
308
- height = vpref.pref
309
-
310
- hsprings.each do |series| go_back(height, series) end
311
- vsprings.each do |series| go_back(width, series) end
312
- end
313
-
314
- hpaths.each do |h|
315
- ss = []
316
- len = 0
317
- for i in 0..(h.size-2)
318
- v1,v2 = h[i],h[i+1]
319
- this = @hsprings[[v1,v2]].imposed
320
- puts "#{v1} - #{v2} | "+ ("%0.2f" % this)
321
- len += this
322
- end
323
- puts "LEN: #{len}"
324
- ss
325
- end
326
-
327
- return hpref,vpref
328
- end
329
-
330
- # returns [] if there isn't one
331
- def rec_paths(links, var1, var2)
332
- all_paths = []
333
- (links[var1] || []).each do |v, spring|
334
- if v == var2
335
- all_paths.push [var2]
336
- else
337
- all_paths = all_paths + rec_paths(links, v, var2)
338
- end
339
- end
340
- all_paths.map{|x| [var1]+x}
341
- end
342
-
343
-
344
- def algo2
345
- @hsystem.compute_closure
346
- @hsystem.go!
347
- =begin
348
- def reduce(links, varA, varZ)
349
- paths = rec_paths(links, varA, varZ)
350
-
351
- puts "Found #{paths.size} paths:"
352
- paths.each_with_index do |path, i|
353
- puts "path #{i}: #{path.inspect}"
354
- end
355
-
356
- var2path = {}
357
-
358
- paths.each_with_index do |path, p|
359
- for i in 1..path.size-2
360
- var = path[i]
361
- var2path[var] ||= []
362
- var2path[var].push p
363
- end
364
- end
365
-
366
- var2path.each do |v, paths|
367
- puts "var #{v} -> #{paths.inspect}"
368
- end
369
- end
370
-
371
- reduce(@hlink, DIAG_TL, DIAG_BR)
372
- =end
373
-
374
- end
375
-
376
- def inspect
377
- s = ""
378
- @hlink.each do |v1,a|
379
- a.each do |v2, spring|
380
- s += "#{v1.inspect} -> #{v2.inspect} (#{spring.inspect})\n"
381
- end
382
- end
383
- s
384
- end
385
- end
386
-
387
- DIAG_TL = "tl"
388
- DIAG_BR = "br"
389
-
390
- class Diagram
391
-
392
-
393
- def top_right(i); "#{@diag_id}_b#{i}_tr"; end
394
-
395
- def assign_variables(diag_id)
396
- @boxes.each_with_index do |b, i|
397
- b.v_tl = "#{diag_id}_b#{i}_tl"
398
- b.v_br = "#{diag_id}_b#{i}_br"
399
- end
400
- @arrows.each_with_index do |a, i|
401
- a.v_start = "#{diag_id}_a#{i}_start"
402
- a.v_end = "#{diag_id}_a#{i}_end"
403
- end
404
- @points.each_with_index do |p, i|
405
- p.v_p = "#{diag_id}_p#{i}_p"
406
- end
407
- end
408
-
409
- def do_layout(diag_id)
410
- def margin_con() Spring.new(30,0,30,1,1000) end
411
- def arrow_con() Spring.new(30,1,60,100,1000) end
412
- def zero_con() Spring.new(0,0,0,0,0) end
413
- def positive_con(pref) Spring.new(0,1,pref,1000,1000) end
414
-
415
- @diag_id = diag_id
416
- assign_variables(diag_id)
417
-
418
- l = Layout.new
419
- @boxes.each do |b|
420
- # size of the box is copied from b.hs and b.vs
421
- l.add_con_h(b.v_tl, b.v_br, b.hs)
422
- l.add_con_v(b.v_tl, b.v_br, b.vs)
423
- # should not be outside of the diagram
424
- l.add_con_h(DIAG_TL, b.v_tl, margin_con)
425
- l.add_con_h(b.v_br, DIAG_BR, margin_con)
426
- l.add_con_v(DIAG_TL, b.v_tl, margin_con)
427
- l.add_con_v(b.v_br, DIAG_BR, margin_con)
428
- # now, for each arrow
429
- b.links[:N].each{|a|
430
- l.add_con_v(a.v_end, b.v_tl, zero_con)
431
- l.add_con_h(b.v_tl, a.v_end, positive_con(b.hs.pref/2))
432
- l.add_con_h(a.v_end, b.v_br, positive_con(b.hs.pref/2))
433
- }
434
- b.links[:S].each{|a|
435
- l.add_con_v(b.v_br, a.v_start, zero_con)
436
- l.add_con_h(b.v_tl, a.v_start, positive_con(b.hs.pref/2))
437
- l.add_con_h(a.v_start, b.v_br, positive_con(b.hs.pref/2))
438
- }
439
- b.links[:W].each{|a|
440
- l.add_con_h(a.v_end, b.v_tl, zero_con)
441
- l.add_con_v(b.v_tl, a.v_end, positive_con(b.vs.pref/2))
442
- l.add_con_v(a.v_end, b.v_br, positive_con(b.vs.pref/2))
443
- }
444
- b.links[:E].each{|a|
445
- l.add_con_h(b.v_br, a.v_start, zero_con)
446
- l.add_con_v(b.v_tl, a.v_start, positive_con(b.vs.pref/2))
447
- l.add_con_v(a.v_start, b.v_br, positive_con(b.vs.pref/2))
448
- }
449
-
450
- b.aligned[:t].each do |b2| l.add_con_v(b2.v_tl, b.v_tl, zero_con) end
451
- b.aligned[:b].each do |b2| l.add_con_v(b2.v_br, b.v_br, zero_con) end
452
- b.aligned[:l].each do |b2| l.add_con_h(b2.v_tl, b.v_tl, zero_con) end
453
- b.aligned[:r].each do |b2| l.add_con_h(b2.v_br, b.v_br, zero_con) end
454
- end
455
-
456
- @points.each do |p|
457
- # should not be outside of the diagram
458
- l.add_con_h(DIAG_TL, p.v_p, margin_con)
459
- l.add_con_h(p.v_p, DIAG_BR, margin_con)
460
- l.add_con_v(DIAG_TL, p.v_p, margin_con)
461
- l.add_con_v(p.v_p, DIAG_BR, margin_con)
462
- # now, for each arrow
463
- p.links[:N].each{|a|
464
- l.add_con_v(a.v_end, p.v_p, zero_con)
465
- l.add_con_h(a.v_end, p.v_p, zero_con)
466
- }
467
- p.links[:S].each{|a|
468
- l.add_con_v(p.v_p, a.v_start, zero_con)
469
- l.add_con_h(p.v_p, a.v_start, zero_con)
470
- }
471
- p.links[:W].each{|a|
472
- l.add_con_h(a.v_end, p.v_p, zero_con)
473
- l.add_con_v(a.v_end, p.v_p, zero_con)
474
- }
475
- p.links[:E].each{|a|
476
- l.add_con_h(p.v_p, a.v_start, zero_con)
477
- l.add_con_v(p.v_p, a.v_start, zero_con)
478
- }
479
-
480
- p.aligned[:t].each do |p2| l.add_con_v(p2.v_p, p.v_p, zero_con) end
481
- p.aligned[:l].each do |p2| l.add_con_h(p2.v_p, p.v_p, zero_con) end
482
- end
483
-
484
- @arrows.each do |a|
485
- if a.is_vert?
486
- l.add_con_v(a.v_start, a.v_end, arrow_con)
487
- l.add_con_h(a.v_start, a.v_end, zero_con)
488
- else
489
- l.add_con_h(a.v_start, a.v_end, arrow_con)
490
- l.add_con_v(a.v_start, a.v_end, zero_con)
491
- end
492
- end
493
-
494
- doth, dotv = l.to_dot
495
- File.open("#{diag_id}_h.dot",'w') do |f| f.write doth end
496
- File.open("#{diag_id}_v.dot",'w') do |f| f.write dotv end
497
-
498
- l.algo2
499
- # hs, vs = l.get_preferred(DIAG_TL, DIAG_BR)
500
-
501
- # puts "Preferred hs = #{hs.inspect}"
502
- # puts "Preferred vs = #{vs.inspect}"
503
- end
504
-
505
- end
506
-
507
-
508
- end