trac-wiki 0.2.21 → 0.2.23

Sign up to get free protection for your applications and to get access to all the features.
@@ -282,9 +282,14 @@ module TracWiki
282
282
  # make_local_link("LocalLink") #=> "/LocalLink"
283
283
  # make_local_link("Wikipedia:Bread") #=> "http://en.wikipedia.org/wiki/Bread"
284
284
  def make_local_link(link) #:doc:
285
- return "#{@base}#{link}" if no_escape?
286
285
  link, anch = link.split(/#/, 2)
286
+ if no_escape?
287
+ return "#{@base}#{link}" if ! anch
288
+ return "##{anch}" if link == ''
289
+ return "#{@base}#{link}##{anch}"
290
+ end
287
291
  return "#{@base}#{escape_url(link)}" if ! anch
292
+ return "##{escape_url(anch)}" if link == ''
288
293
  "#{@base}#{escape_url(link)}##{escape_url(anch)}"
289
294
  end
290
295
 
@@ -417,6 +422,7 @@ module TracWiki
417
422
  str = $'
418
423
  link, content, whole= $1, $3, $&
419
424
  make_link(link, content, "[#{whole}]")
425
+ # [[ link1 | text2 ]]
420
426
  when /\A \[\[ \s* ([^|]*?) \s* (\|\s*(.*?))? \s* \]\] /mx
421
427
  str = $'
422
428
  link, content, whole= $1, $3, $&
@@ -144,8 +144,8 @@ module TracWiki
144
144
  end
145
145
 
146
146
 
147
- TAGS_APPEND_NL = [:div, :p]
148
- TAGS_FORCE_PAIR = [:a, :td, :h1, :h2, :h3, :h4, :h5, :h6, :div, :strong, :script]
147
+ TAGS_APPEND_NL = [:div, :p, :li, :ol, :ul, :dl, :table, :tr, :td ]
148
+ TAGS_FORCE_PAIR = [:a, :td, :h1, :h2, :h3, :h4, :h5, :h6, :div, :script]
149
149
  TAGS_ALLOVED = [:a,
150
150
  :h1, :h2, :h3, :h4, :h5, :h6,
151
151
  :div, :span, :p, :pre,
@@ -155,7 +155,7 @@ module TracWiki
155
155
  :br , :img, :hr,
156
156
  :form, :textarea, :input, :select, :option,
157
157
  ]
158
- TAGS_SKIP_EMPTY = [ :p ]
158
+ TAGS_SKIP_EMPTY = [ :p , :ol, :li, :strong, :em ]
159
159
  ATTRIBUTES_ALLOWED = { :form => [:action, :meth],
160
160
  :input => [:size, :type, :value, :name],
161
161
  :select => [:multiple, :name],
@@ -178,7 +178,7 @@ module TracWiki
178
178
  attrs.each_pair do |k,v|
179
179
  next if v.nil?
180
180
  k_sym = k.to_sym
181
- next if ! ATTRIBUTES_ALLOWED[:_all].include?(k_sym) && ! tag_attrs.include?(k_sym)
181
+ next if ! ( ATTRIBUTES_ALLOWED[:_all].include?(k_sym) || tag_attrs.include?(k_sym) )
182
182
  next if k == :style && v !~ ATTRIBUTE_STYLE_REX
183
183
  #print "style: #{v}\n" if k == :style
184
184
  ret.push "#{TracWiki::Parser.escapeHTML(k.to_s)}=\"#{TracWiki::Parser.escapeHTML(v.to_s)}\""
@@ -1,3 +1,3 @@
1
1
  module TracWiki
2
- VERSION = '0.2.21'
2
+ VERSION = '0.2.23'
3
3
  end
data/test/parser_test.rb CHANGED
@@ -50,7 +50,7 @@ describe TracWiki::Parser do
50
50
  it 'should not parse linkd' do
51
51
  tc "<p>[[ahoj]]</p>\n", "[[ahoj]]", :no_link => true
52
52
  tc "<p>[[ahoj|bhoj]]</p>\n", "[[ahoj|bhoj]]", :no_link => true
53
- tc "<ul><li>[[ahoj|bhoj]]</li></ul>", "* [[ahoj|bhoj]]", :no_link => true
53
+ tc "<ul><li>[[ahoj|bhoj]]</li>\n</ul>\n", "* [[ahoj|bhoj]]", :no_link => true
54
54
  end
55
55
  it 'should parse bold' do
56
56
  # Bold can be used inside paragraphs
@@ -58,10 +58,10 @@ describe TracWiki::Parser do
58
58
  tc "<p>This <strong>is</strong> bold and <strong>bold</strong>ish</p>\n", "This **is** bold and **bold**ish"
59
59
 
60
60
  # Bold can be used inside list items
61
- tc "<ul><li>This is <strong>bold</strong></li></ul>", "* This is **bold**"
61
+ tc "<ul><li>This is <strong>bold</strong></li>\n</ul>\n", "* This is **bold**"
62
62
 
63
63
  # Bold can be used inside table cells
64
- tc("<table><tr><td>This is <strong>bold</strong></td></tr></table>",
64
+ tc("<table><tr><td>This is <strong>bold</strong></td>\n</tr>\n</table>\n",
65
65
  "||This is **bold**||")
66
66
 
67
67
  # Links can appear inside bold text:
@@ -72,11 +72,11 @@ describe TracWiki::Parser do
72
72
  tc "<p>This <strong>is bold</strong></p>\n", "This **is bold"
73
73
 
74
74
  # Bold will end at the end of list items
75
- tc("<ul><li>Item <strong>bold</strong></li><li>Item normal</li></ul>",
75
+ tc("<ul><li>Item <strong>bold</strong></li>\n<li>Item normal</li>\n</ul>\n",
76
76
  "* Item **bold\n* Item normal")
77
77
 
78
78
  # Bold will end at the end of table cells
79
- tc("<table><tr><td>Item <strong>bold</strong></td><td>Another <strong>bold</strong></td></tr></table>",
79
+ tc("<table><tr><td>Item <strong>bold</strong></td>\n<td>Another <strong>bold</strong></td>\n</tr>\n</table>\n",
80
80
  "||Item **bold||Another **bold||")
81
81
 
82
82
  # Bold should not cross paragraphs
@@ -121,10 +121,10 @@ describe TracWiki::Parser do
121
121
  "This ''is'' italic and ''italic''ish")
122
122
 
123
123
  # Italic can be used inside list items
124
- tc "<ul><li>This is <em>italic</em></li></ul>", "* This is ''italic''"
124
+ tc "<ul><li>This is <em>italic</em></li>\n</ul>\n", "* This is ''italic''"
125
125
 
126
126
  # Italic can be used inside table cells
127
- tc("<table><tr><td>This is <em>italic</em></td></tr></table>",
127
+ tc("<table><tr><td>This is <em>italic</em></td>\n</tr>\n</table>\n",
128
128
  "||This is ''italic''||")
129
129
 
130
130
  # Links can appear inside italic text:
@@ -135,11 +135,11 @@ describe TracWiki::Parser do
135
135
  tc "<p>This <em>is italic</em></p>\n", "This ''is italic"
136
136
 
137
137
  # Italic will end at the end of list items
138
- tc("<ul><li>Item <em>italic</em></li><li>Item normal</li></ul>",
138
+ tc("<ul><li>Item <em>italic</em></li>\n<li>Item normal</li>\n</ul>\n",
139
139
  "* Item ''italic\n* Item normal")
140
140
 
141
141
  # Italic will end at the end of table cells
142
- tc("<table><tr><td>Item <em>italic</em></td><td>Another <em>italic</em></td></tr></table>",
142
+ tc("<table><tr><td>Item <em>italic</em></td>\n<td>Another <em>italic</em></td>\n</tr>\n</table>\n",
143
143
  "||Item ''italic||Another ''italic")
144
144
 
145
145
  # Italic should not cross paragraphs
@@ -295,10 +295,10 @@ describe TracWiki::Parser do
295
295
  tc "<p>This is my text.</p>\n<p>This is more text.</p>\n", "This is\nmy text.\n\n\n\nThis is\nmore text."
296
296
 
297
297
  # A list end paragraphs too.
298
- tc "<p>Hello</p>\n<ul><li>Item</li></ul>", "Hello\n* Item\n"
298
+ tc "<p>Hello</p>\n<ul><li>Item</li>\n</ul>\n", "Hello\n* Item\n"
299
299
 
300
300
  # A table end paragraphs too.
301
- tc "<p>Hello</p>\n<table><tr><td>Cell</td></tr></table>", "Hello\n||Cell||"
301
+ tc "<p>Hello</p>\n<table><tr><td>Cell</td>\n</tr>\n</table>\n", "Hello\n||Cell||"
302
302
 
303
303
  # A nowiki end paragraphs too.
304
304
  tc "<p>Hello</p>\n<pre>nowiki</pre>", "Hello\n{{{\nnowiki\n}}}\n"
@@ -326,15 +326,15 @@ describe TracWiki::Parser do
326
326
  end
327
327
  it 'should parse definition list' do
328
328
  # FIXME: trailing space
329
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python:: \n definition\n"
330
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python::\ndefinition\n"
331
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python::\r\ndefinition\n"
332
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python::\r\n definition\n"
333
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python:: \r\n definition\n"
334
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python:: definition\n"
335
- tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>", "Monty Python:: definition\n"
336
- tc "<dl><dt>Monty::Python</dt><dd> definition</dd></dl>", "Monty::Python:: definition\n"
337
- tc "<dl><dt>::Python</dt><dd> definition</dd></dl>", "::Python:: definition\n"
329
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python:: \n definition\n"
330
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python::\ndefinition\n"
331
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python::\r\ndefinition\n"
332
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python::\r\n definition\n"
333
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python:: \r\n definition\n"
334
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python:: definition\n"
335
+ tc "<dl><dt>Monty Python</dt><dd> definition</dd></dl>\n", "Monty Python:: definition\n"
336
+ tc "<dl><dt>Monty::Python</dt><dd> definition</dd></dl>\n", "Monty::Python:: definition\n"
337
+ tc "<dl><dt>::Python</dt><dd> definition</dd></dl>\n", "::Python:: definition\n"
338
338
  end
339
339
  it 'should not parse definition list' do
340
340
  # FIXME: trailing space
@@ -349,133 +349,133 @@ describe TracWiki::Parser do
349
349
  # List items begin with a * at the beginning of a line.
350
350
  # An item ends at the next *
351
351
 
352
- tc "<ul><li>Item 1 next</li></ul>", "* Item 1\n next\n"
352
+ tc "<ul><li>Item 1 next</li>\n</ul>\n", "* Item 1\n next\n"
353
353
 
354
354
  # Whitespace is optional before and after the *.
355
- tc("<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li></ul>",
355
+ tc("<ul><li>Item 1</li>\n<li>Item 2</li>\n<li>Item 3</li>\n</ul>\n",
356
356
  " * Item 1\n * Item 2\n *\t\tItem 3\n")
357
357
 
358
358
  # A space is required if if the list element starts with bold text.
359
- tc("<ul><li><strong>Item 1</strong></li></ul>", "* **Item 1")
359
+ tc("<ul><li><strong>Item 1</strong></li>\n</ul>\n", "* **Item 1")
360
360
 
361
361
  # An item ends at blank line
362
- tc("<ul><li>Item</li></ul><p>Par</p>\n", "* Item\n\nPar\n")
362
+ tc("<ul><li>Item</li>\n</ul>\n<p>Par</p>\n", "* Item\n\nPar\n")
363
363
 
364
364
  # An item ends at a heading
365
- tc("<ul><li>Item</li></ul><h1>Heading</h1>", "* Item\n= Heading =\n")
365
+ tc("<ul><li>Item</li>\n</ul>\n<h1>Heading</h1>", "* Item\n= Heading =\n")
366
366
 
367
367
  # An item ends at a table
368
- tc("<ul><li>Item</li></ul><table><tr><td>Cell</td></tr></table>", "* Item\n||Cell||\n")
368
+ tc("<ul><li>Item</li>\n</ul>\n<table><tr><td>Cell</td>\n</tr>\n</table>\n", "* Item\n||Cell||\n")
369
369
 
370
370
  # An item ends at a nowiki block
371
- tc("<ul><li>Item</li></ul><pre>Code</pre>", "* Item\n{{{\nCode\n}}}\n")
371
+ tc("<ul><li>Item</li>\n</ul>\n<pre>Code</pre>", "* Item\n{{{\nCode\n}}}\n")
372
372
 
373
373
  # An item can span multiple lines
374
- tc("<ul><li>The quick brown fox jumps over lazy dog.</li><li>Humpty Dumpty sat on a wall.</li></ul>",
374
+ tc("<ul><li>The quick brown fox jumps over lazy dog.</li>\n<li>Humpty Dumpty sat on a wall.</li>\n</ul>\n",
375
375
  "* The quick\nbrown fox\n\tjumps over\nlazy dog.\n* Humpty Dumpty\nsat\t\non a wall.")
376
376
 
377
377
  # An item can contain line breaks
378
- tc("<ul><li>The quick brown<br/>fox jumps over lazy dog.</li></ul>",
378
+ tc("<ul><li>The quick brown<br/>fox jumps over lazy dog.</li>\n</ul>\n",
379
379
  "* The quick brown\\\\fox jumps over lazy dog.")
380
380
 
381
381
  # Nested
382
- tc "<ul><li>Item 1<ul><li>Item 2</li></ul></li><li>Item 3</li></ul>", "* Item 1\n * Item 2\n*\t\tItem 3\n"
382
+ tc "<ul><li>Item 1<ul><li>Item 2</li>\n</ul>\n</li>\n<li>Item 3</li>\n</ul>\n", "* Item 1\n * Item 2\n*\t\tItem 3\n"
383
383
 
384
384
  # Nested up to 5 levels
385
- tc("<ul><li>Item 1<ul><li>Item 2<ul><li>Item 3<ul><li>Item 4<ul><li>Item 5</li></ul></li></ul></li></ul></li></ul></li></ul>",
385
+ tc("<ul><li>Item 1<ul><li>Item 2<ul><li>Item 3<ul><li>Item 4<ul><li>Item 5</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n",
386
386
  "* Item 1\n * Item 2\n * Item 3\n * Item 4\n * Item 5\n")
387
387
 
388
- tc("<ul><li>Item 1<ul><li>Item 2<ul><li>Item 3<ul><li>Item 4</li></ul></li></ul></li></ul></li><li>Item 5</li></ul>",
388
+ tc("<ul><li>Item 1<ul><li>Item 2<ul><li>Item 3<ul><li>Item 4</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Item 5</li>\n</ul>\n",
389
389
  "* Item 1\n * Item 2\n * Item 3\n * Item 4\n* Item 5\n")
390
390
 
391
391
  # ** immediatly following a list element will be treated as a nested unordered element.
392
- tc("<ul><li>Hello, World!<ul><li>Not bold</li></ul></li></ul>",
392
+ tc("<ul><li>Hello, World!<ul><li>Not bold</li>\n</ul>\n</li>\n</ul>\n",
393
393
  "* Hello,\n World!\n * Not bold\n")
394
394
 
395
395
  # ** immediatly following a list element will be treated as a nested unordered element.
396
- tc("<ol><li>Hello, World!<ul><li>Not bold</li></ul></li></ol>",
396
+ tc("<ol><li>Hello, World!<ul><li>Not bold</li>\n</ul>\n</li>\n</ol>\n",
397
397
  "1. Hello,\n World!\n * Not bold\n")
398
398
 
399
399
  # [...] otherwise it will be treated as the beginning of bold text.
400
- tc("<ul><li>Hello, World!</li></ul><p><strong>Not bold</strong></p>\n",
400
+ tc("<ul><li>Hello, World!</li>\n</ul>\n<p><strong>Not bold</strong></p>\n",
401
401
  "* Hello,\nWorld!\n\n**Not bold\n")
402
402
  end
403
403
 
404
404
  it 'should parse ordered lists' do
405
405
  # List items begin with a * at the beginning of a line.
406
406
  # An item ends at the next *
407
- tc "<ol><li>Item 1</li><li>Item 2</li><li>Item 3</li></ol>", "1. Item 1\n2. Item 2\n3. \t\tItem 3\n"
407
+ tc "<ol><li>Item 1</li>\n<li>Item 2</li>\n<li>Item 3</li>\n</ol>\n", "1. Item 1\n2. Item 2\n3. \t\tItem 3\n"
408
408
 
409
409
  # Whitespace is optional before and after the #.
410
- tc("<ol><li>Item 1</li><li>Item 2</li><li>Item 3</li></ol>",
410
+ tc("<ol><li>Item 1</li>\n<li>Item 2</li>\n<li>Item 3</li>\n</ol>\n",
411
411
  "1. Item 1\n1. Item 2\n4.\t\tItem 3\n")
412
412
 
413
413
  # A space is required if if the list element starts with bold text.
414
- # tc("<ol><li><ol><li><ol><li>Item 1</li></ol></li></ol></li></ol>", "###Item 1")
415
- tc("<ol><li><strong>Item 1</strong></li></ol>", "1. **Item 1")
414
+ # tc("<ol><li><ol><li><ol><li>Item 1</li></ol>\n</li>\n</ol>\n</li>\n</ol>\n", "###Item 1")
415
+ tc("<ol><li><strong>Item 1</strong></li>\n</ol>\n", "1. **Item 1")
416
416
 
417
417
  # An item ends at blank line
418
- tc("<ol><li>Item</li></ol><p>Par</p>\n", "1. Item\n\nPar\n")
418
+ tc("<ol><li>Item</li>\n</ol>\n<p>Par</p>\n", "1. Item\n\nPar\n")
419
419
 
420
420
  # An item ends at a heading
421
- tc("<ol><li>Item</li></ol><h1>Heading</h1>", "1. Item\n= Heading =\n")
421
+ tc("<ol><li>Item</li>\n</ol>\n<h1>Heading</h1>", "1. Item\n= Heading =\n")
422
422
 
423
423
  # An item ends at a table
424
- tc("<ol><li>Item</li></ol><table><tr><td>Cell</td></tr></table>", "1. Item\n||Cell||\n")
424
+ tc("<ol><li>Item</li>\n</ol>\n<table><tr><td>Cell</td>\n</tr>\n</table>\n", "1. Item\n||Cell||\n")
425
425
 
426
426
  # An item ends at a nowiki block
427
- tc("<ol><li>Item</li></ol><pre>Code</pre>", "1. Item\n{{{\nCode\n}}}\n")
427
+ tc("<ol><li>Item</li>\n</ol>\n<pre>Code</pre>", "1. Item\n{{{\nCode\n}}}\n")
428
428
 
429
429
  # An item can span multiple lines
430
- tc("<ol><li>The quick brown fox jumps over lazy dog.</li><li>Humpty Dumpty sat on a wall.</li></ol>",
430
+ tc("<ol><li>The quick brown fox jumps over lazy dog.</li>\n<li>Humpty Dumpty sat on a wall.</li>\n</ol>\n",
431
431
  "1. The quick\nbrown fox\n\tjumps over\nlazy dog.\n2. Humpty Dumpty\nsat\t\non a wall.")
432
432
 
433
433
  # An item can contain line breaks
434
- tc("<ol><li>The quick brown<br/>fox jumps over lazy dog.</li></ol>",
434
+ tc("<ol><li>The quick brown<br/>fox jumps over lazy dog.</li>\n</ol>\n",
435
435
  "1. The quick brown\\\\fox jumps over lazy dog.")
436
436
 
437
437
  # Nested
438
- tc "<ol><li>Item 1<ol><li>Item 2</li></ol></li><li>Item 3</li></ol>", "1. Item 1\n 1. Item 2\n2.\t\tItem 3\n"
438
+ tc "<ol><li>Item 1<ol><li>Item 2</li>\n</ol>\n</li>\n<li>Item 3</li>\n</ol>\n", "1. Item 1\n 1. Item 2\n2.\t\tItem 3\n"
439
439
 
440
440
  # Nested up to 5 levels
441
- tc("<ol><li>Item 1<ol><li>Item 2<ol><li>Item 3<ol><li>Item 4<ol><li>Item 5</li></ol></li></ol></li></ol></li></ol></li></ol>",
441
+ tc("<ol><li>Item 1<ol><li>Item 2<ol><li>Item 3<ol><li>Item 4<ol><li>Item 5</li>\n</ol>\n</li>\n</ol>\n</li>\n</ol>\n</li>\n</ol>\n</li>\n</ol>\n",
442
442
  "1. Item 1\n 1. Item 2\n 1. Item 3\n 1. Item 4\n 1. Item 5\n")
443
443
 
444
444
  # The two-bullet rule only applies to **.
445
- # tc("<ol><li><ol><li>Item</li></ol></li></ol>", "##Item")
445
+ # tc("<ol><li><ol><li>Item</li>\n</ol>\n</li>\n</ol>\n", "##Item")
446
446
  end
447
447
 
448
448
  it 'should parse ordered lists #2' do
449
- tc "<ol><li>Item 1</li><li>Item 2</li><li>Item 3</li></ol>", "1. Item 1\n1. Item 2\n1.\t\tItem 3\n"
449
+ tc "<ol><li>Item 1</li>\n<li>Item 2</li>\n<li>Item 3</li>\n</ol>\n", "1. Item 1\n1. Item 2\n1.\t\tItem 3\n"
450
450
  # Nested
451
- tc "<ol><li>Item 1<ol><li>Item 2</li></ol></li><li>Item 3</li></ol>", "1. Item 1\n 1. Item 2\n1.\t\tItem 3\n"
451
+ tc "<ol><li>Item 1<ol><li>Item 2</li>\n</ol>\n</li>\n<li>Item 3</li>\n</ol>\n", "1. Item 1\n 1. Item 2\n1.\t\tItem 3\n"
452
452
  # Multiline
453
- tc "<ol><li>Item 1 on multiple lines</li></ol>", "1. Item 1\non multiple lines"
453
+ tc "<ol><li>Item 1 on multiple lines</li>\n</ol>\n", "1. Item 1\non multiple lines"
454
454
  end
455
455
 
456
456
  it 'should parse ambiguious mixed lists' do
457
457
  # ol following ul
458
- tc("<ul><li>uitem</li></ul><ol><li>oitem</li></ol>", "* uitem\n1. oitem\n")
458
+ tc("<ul><li>uitem</li>\n</ul>\n<ol><li>oitem</li>\n</ol>\n", "* uitem\n1. oitem\n")
459
459
 
460
460
  # ul following ol
461
- tc("<ol><li>uitem</li></ol><ul><li>oitem</li></ul>", "1. uitem\n* oitem\n")
461
+ tc("<ol><li>uitem</li>\n</ol>\n<ul><li>oitem</li>\n</ul>\n", "1. uitem\n* oitem\n")
462
462
 
463
463
  # 2ol following ul
464
- tc("<ul><li>uitem<ol><li>oitem</li></ol></li></ul>", "* uitem\n 1. oitem\n")
464
+ tc("<ul><li>uitem<ol><li>oitem</li>\n</ol>\n</li>\n</ul>\n", "* uitem\n 1. oitem\n")
465
465
 
466
466
  # 2ul following ol
467
- tc("<ol><li>uitem<ul><li>oitem</li></ul></li></ol>", "1. uitem\n * oitem\n")
467
+ tc("<ol><li>uitem<ul><li>oitem</li>\n</ul>\n</li>\n</ol>\n", "1. uitem\n * oitem\n")
468
468
 
469
469
  # 3ol following 3ul
470
- # tc("<ul><li><ul><li><ul><li>uitem</li></ul><ol><li>oitem</li></ol></li></ul></li></ul>", "***uitem\n###oitem\n")
470
+ # tc("<ul><li><ul><li><ul><li>uitem</li>\n</ul>\n<ol><li>oitem</li>\n</ol>\n</li>\n</ul>\n</li>\n</ul>\n", "***uitem\n###oitem\n")
471
471
 
472
472
  # 2ul following 2ol
473
- # tc("<ol><li><ol><li>uitem</li></ol><ul><li>oitem</li></ul></li></ol>", "##uitem\n**oitem\n")
473
+ # tc("<ol><li><ol><li>uitem</li>\n</ol>\n<ul><li>oitem</li>\n</ul>\n</li>\n</ol>\n", "##uitem\n**oitem\n")
474
474
 
475
475
  # ol following 2ol
476
- # tc("<ol><li><ol><li>oitem1</li></ol></li><li>oitem2</li></ol>", "##oitem1\n#oitem2\n")
476
+ # tc("<ol><li><ol><li>oitem1</li>\n</ol>\n</li>\n<li>oitem2</li>\n</ol>\n", "##oitem1\n#oitem2\n")
477
477
  # ul following 2ol
478
- # tc("<ol><li><ol><li>oitem1</li></ol></li></ol><ul><li>oitem2</li></ul>", "##oitem1\n*oitem2\n")
478
+ # tc("<ol><li><ol><li>oitem1</li>\n</ol>\n</li>\n</ol>\n<ul><li>oitem2</li>\n</ul>\n", "##oitem1\n*oitem2\n")
479
479
  end
480
480
 
481
481
  it 'should parse ambiguious italics and url' do
@@ -588,67 +588,67 @@ describe TracWiki::Parser do
588
588
  end
589
589
 
590
590
  it 'should parse table' do
591
- tc "<table><tr><td>Hello</td><td>World!</td></tr></table>", "||Hello||World!||"
592
- tc "<table><tr><td>Hello</td><td>World!</td></tr><tr><td>Hello</td><td>World!</td></tr></table>", "||Hello||World!||\n||Hello||World!||\n\n"
593
- tc "<table><tr><td>Hello</td><td>World!</td></tr><tr><td>Hello</td><td>World!</td></tr></table>", "||Hello||World!||\r\n||Hello||World!||\r\n\n"
594
- tc "<table><tr><td>Hello</td><td>World!</td></tr></table>", "||Hello||\\\n||World!||"
595
- tc "<table><tr><td>He</td><td>llo</td><td>World!</td></tr></table>", "||He||llo||\\\n||World!||"
596
- tc "<table><tr><td>Hello</td><td colspan=\"2\">World!</td></tr></table>", "||Hello||||World!||"
597
- tc "<table><tr><td>Hello</td><td colspan=\"2\">kuk</td><td>World!</td></tr></table>", "||Hello||||kuk||\\\n||World!||"
598
- tc "<table><tr><td>1</td><td>2</td><td>3</td></tr><tr><td colspan=\"2\">1-2</td><td>3</td></tr><tr><td>1</td><td colspan=\"2\">2-3</td></tr><tr><td colspan=\"3\">1-2-3</td></tr></table>", "|| 1 || 2 || 3 ||\n|||| 1-2 || 3 ||\n|| 1 |||| 2-3 ||\n|||||| 1-2-3 ||\n"
599
-
600
- tc "<table><tr><td>table</td><td style=\"text-align:center\">center</td></tr></table>", "||table|| center ||"
601
- tc "<table><tr><td>table</td><td style=\"text-align:right\">right</td></tr></table>", "||table|| right||"
602
- tc "<table><tr><td>table</td><td style=\"text-align:center\">center</td><td style=\"text-align:right\">right</td></tr></table>", "||table|| center || right||"
603
-
604
- tc "<table><tr><td>Hello, World!</td></tr></table>", "||Hello, World!||"
605
- tc "<table><tr><td style=\"text-align:right\">Hello, Right World!</td></tr></table>", "|| Hello, Right World!||"
606
- tc "<table><tr><th style=\"text-align:right\">Hello, Right World!</th></tr></table>", "||= Hello, Right World!=||"
607
- tc "<table><tr><td style=\"text-align:center\">Hello, Centered World!</td></tr></table>", "|| Hello, Centered World! ||"
608
- tc "<table><tr><th style=\"text-align:center\">Hello, Centered World!</th></tr></table>", "||= Hello, Centered World! =||"
591
+ tc "<table><tr><td>Hello</td>\n<td>World!</td>\n</tr>\n</table>\n", "||Hello||World!||"
592
+ tc "<table><tr><td>Hello</td>\n<td>World!</td>\n</tr>\n<tr><td>Hello</td>\n<td>World!</td>\n</tr>\n</table>\n", "||Hello||World!||\n||Hello||World!||\n\n"
593
+ tc "<table><tr><td>Hello</td>\n<td>World!</td>\n</tr>\n<tr><td>Hello</td>\n<td>World!</td>\n</tr>\n</table>\n", "||Hello||World!||\r\n||Hello||World!||\r\n\n"
594
+ tc "<table><tr><td>Hello</td>\n<td>World!</td>\n</tr>\n</table>\n", "||Hello||\\\n||World!||"
595
+ tc "<table><tr><td>He</td>\n<td>llo</td>\n<td>World!</td>\n</tr>\n</table>\n", "||He||llo||\\\n||World!||"
596
+ tc "<table><tr><td>Hello</td>\n<td colspan=\"2\">World!</td>\n</tr>\n</table>\n", "||Hello||||World!||"
597
+ tc "<table><tr><td>Hello</td>\n<td colspan=\"2\">kuk</td>\n<td>World!</td>\n</tr>\n</table>\n", "||Hello||||kuk||\\\n||World!||"
598
+ tc "<table><tr><td>1</td>\n<td>2</td>\n<td>3</td>\n</tr>\n<tr><td colspan=\"2\">1-2</td>\n<td>3</td>\n</tr>\n<tr><td>1</td>\n<td colspan=\"2\">2-3</td>\n</tr>\n<tr><td colspan=\"3\">1-2-3</td>\n</tr>\n</table>\n", "|| 1 || 2 || 3 ||\n|||| 1-2 || 3 ||\n|| 1 |||| 2-3 ||\n|||||| 1-2-3 ||\n"
599
+
600
+ tc "<table><tr><td>table</td>\n<td style=\"text-align:center\">center</td>\n</tr>\n</table>\n", "||table|| center ||"
601
+ tc "<table><tr><td>table</td>\n<td style=\"text-align:right\">right</td>\n</tr>\n</table>\n", "||table|| right||"
602
+ tc "<table><tr><td>table</td>\n<td style=\"text-align:center\">center</td>\n<td style=\"text-align:right\">right</td>\n</tr>\n</table>\n", "||table|| center || right||"
603
+
604
+ tc "<table><tr><td>Hello, World!</td>\n</tr>\n</table>\n", "||Hello, World!||"
605
+ tc "<table><tr><td style=\"text-align:right\">Hello, Right World!</td>\n</tr>\n</table>\n", "|| Hello, Right World!||"
606
+ tc "<table><tr><th style=\"text-align:right\">Hello, Right World!</th></tr>\n</table>\n", "||= Hello, Right World!=||"
607
+ tc "<table><tr><td style=\"text-align:center\">Hello, Centered World!</td>\n</tr>\n</table>\n", "|| Hello, Centered World! ||"
608
+ tc "<table><tr><th style=\"text-align:center\">Hello, Centered World!</th></tr>\n</table>\n", "||= Hello, Centered World! =||"
609
609
  # Multiple columns
610
- tc "<table><tr><td>c1</td><td>c2</td><td>c3</td></tr></table>", "||c1||c2||c3||"
610
+ tc "<table><tr><td>c1</td>\n<td>c2</td>\n<td>c3</td>\n</tr>\n</table>\n", "||c1||c2||c3||"
611
611
  # Multiple rows
612
- tc "<table><tr><td>c11</td><td>c12</td></tr><tr><td>c21</td><td>c22</td></tr></table>", "||c11||c12||\n||c21||c22||\n"
612
+ tc "<table><tr><td>c11</td>\n<td>c12</td>\n</tr>\n<tr><td>c21</td>\n<td>c22</td>\n</tr>\n</table>\n", "||c11||c12||\n||c21||c22||\n"
613
613
  # End pipe is optional
614
- tc "<table><tr><td>c1</td><td>c2</td><td>c3</td></tr></table>", "||c1||c2||c3"
614
+ tc "<table><tr><td>c1</td>\n<td>c2</td>\n<td>c3</td>\n</tr>\n</table>\n", "||c1||c2||c3"
615
615
  # Empty cells
616
- tc "<table><tr><td>c1</td><td></td><td>c2</td></tr></table>", "||c1|| ||c2"
616
+ tc "<table><tr><td>c1</td>\n<td></td>\n<td>c2</td>\n</tr>\n</table>\n", "||c1|| ||c2"
617
617
  # Escaping cell separator
618
- tc "<table><tr><td>c1|c2</td><td>c3</td></tr></table>", "||c1!|c2||c3"
618
+ tc "<table><tr><td>c1|c2</td>\n<td>c3</td>\n</tr>\n</table>\n", "||c1!|c2||c3"
619
619
  # Escape in last cell + empty cell
620
- tc "<table><tr><td>c1</td><td>c2|</td></tr></table>", "||c1||c2!|"
621
- tc "<table><tr><td>c1</td><td>c2|</td></tr></table>", "||c1||c2!|"
622
- tc "<table><tr><td>c1</td><td>c2|</td><td></td></tr></table>", "||c1||c2| || ||"
620
+ tc "<table><tr><td>c1</td>\n<td>c2|</td>\n</tr>\n</table>\n", "||c1||c2!|"
621
+ tc "<table><tr><td>c1</td>\n<td>c2|</td>\n</tr>\n</table>\n", "||c1||c2!|"
622
+ tc "<table><tr><td>c1</td>\n<td>c2|</td>\n<td></td>\n</tr>\n</table>\n", "||c1||c2| || ||"
623
623
  # Equal sign after pipe make a header
624
- tc "<table><tr><th>Header</th></tr></table>", "||=Header=||"
624
+ tc "<table><tr><th>Header</th></tr>\n</table>\n", "||=Header=||"
625
625
 
626
- tc "<table><tr><td>c1</td><td><a href=\"Link\">Link text</a></td><td><img src=\"Image\"/></td></tr></table>", "||c1||[[Link|Link text]]||[[Image(Image)]]||"
627
- tc "<table><tr><td>c1</td><td><a href=\"Link\">Link text</a></td><td><img src=\"Image\"/></td></tr></table>", "||c1||[Link|Link text]||[[Image(Image)]]||"
626
+ tc "<table><tr><td>c1</td>\n<td><a href=\"Link\">Link text</a></td>\n<td><img src=\"Image\"/></td>\n</tr>\n</table>\n", "||c1||[[Link|Link text]]||[[Image(Image)]]||"
627
+ tc "<table><tr><td>c1</td>\n<td><a href=\"Link\">Link text</a></td>\n<td><img src=\"Image\"/></td>\n</tr>\n</table>\n", "||c1||[Link|Link text]||[[Image(Image)]]||"
628
628
  end
629
629
 
630
630
  it 'should parse following table' do
631
631
  # table followed by heading
632
- tc("<table><tr><td>table</td></tr></table><h1>heading</h1>", "||table||\n=heading=\n")
633
- tc("<table><tr><td>table</td></tr></table><h1>heading</h1>", "||table||\n\n=heading=\n")
632
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<h1>heading</h1>", "||table||\n=heading=\n")
633
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<h1>heading</h1>", "||table||\n\n=heading=\n")
634
634
  # table followed by paragraph
635
- tc("<table><tr><td>table</td></tr></table><p>par</p>\n", "||table||\npar\n")
636
- tc("<table><tr><td>table</td></tr></table><p>par</p>\n", "||table||\n\npar\n")
635
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<p>par</p>\n", "||table||\npar\n")
636
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<p>par</p>\n", "||table||\n\npar\n")
637
637
  # table followed by unordered list
638
- tc("<table><tr><td>table</td></tr></table><ul><li>item</li></ul>", "||table||\n* item\n")
639
- tc("<table><tr><td>table</td></tr></table><ul><li>item</li></ul>", "||table||\n\n* item\n")
638
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<ul><li>item</li>\n</ul>\n", "||table||\n* item\n")
639
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<ul><li>item</li>\n</ul>\n", "||table||\n\n* item\n")
640
640
  # table followed by ordered list
641
- tc("<table><tr><td>table</td></tr></table><ol><li>item</li></ol>", "||table||\n1. item\n")
642
- tc("<table><tr><td>table</td></tr></table><ol><li>item</li></ol>", "||table||\n\n1. item\n")
641
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<ol><li>item</li>\n</ol>\n", "||table||\n1. item\n")
642
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<ol><li>item</li>\n</ol>\n", "||table||\n\n1. item\n")
643
643
  # table followed by horizontal rule
644
- tc("<table><tr><td>table</td></tr></table><hr/>", "||table||\n----\n")
645
- tc("<table><tr><td>table</td></tr></table><hr/>", "||table||\n\n----\n")
644
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<hr/>", "||table||\n----\n")
645
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<hr/>", "||table||\n\n----\n")
646
646
  # table followed by nowiki block
647
- tc("<table><tr><td>table</td></tr></table><pre>pre</pre>", "||table||\n{{{\npre\n}}}\n")
648
- tc("<table><tr><td>table</td></tr></table><pre>pre</pre>", "||table||\n\n{{{\npre\n}}}\n")
647
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<pre>pre</pre>", "||table||\n{{{\npre\n}}}\n")
648
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<pre>pre</pre>", "||table||\n\n{{{\npre\n}}}\n")
649
649
  # table followed by table
650
- tc("<table><tr><td>table</td></tr><tr><td>table</td></tr></table>", "||table||\n||table||\n")
651
- tc("<table><tr><td>table</td></tr></table><table><tr><td>table</td></tr></table>", "||table||\n\n||table||\n")
650
+ tc("<table><tr><td>table</td>\n</tr>\n<tr><td>table</td>\n</tr>\n</table>\n", "||table||\n||table||\n")
651
+ tc("<table><tr><td>table</td>\n</tr>\n</table>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "||table||\n\n||table||\n")
652
652
  end
653
653
 
654
654
  it 'should parse following heading' do
@@ -659,11 +659,11 @@ describe TracWiki::Parser do
659
659
  tc("<h1>heading</h1><p>par</p>\n", "=heading=\npar\n")
660
660
  tc("<h1>heading</h1><p>par</p>\n", "=heading=\n\npar\n")
661
661
  # unordered list
662
- tc("<h1>heading</h1><ul><li>item</li></ul>", "=heading=\n* item\n")
663
- tc("<h1>heading</h1><ul><li>item</li></ul>", "=heading=\n\n* item\n")
662
+ tc("<h1>heading</h1><ul><li>item</li>\n</ul>\n", "=heading=\n* item\n")
663
+ tc("<h1>heading</h1><ul><li>item</li>\n</ul>\n", "=heading=\n\n* item\n")
664
664
  # ordered list
665
- tc("<h1>heading</h1><ol><li>item</li></ol>", "=heading=\n1. item\n")
666
- tc("<h1>heading</h1><ol><li>item</li></ol>", "=heading=\n\n1. item\n")
665
+ tc("<h1>heading</h1><ol><li>item</li>\n</ol>\n", "=heading=\n1. item\n")
666
+ tc("<h1>heading</h1><ol><li>item</li>\n</ol>\n", "=heading=\n\n1. item\n")
667
667
  # horizontal rule
668
668
  tc("<h1>heading</h1><hr/>", "=heading=\n----\n")
669
669
  tc("<h1>heading</h1><hr/>", "=heading=\n\n----\n")
@@ -671,8 +671,8 @@ describe TracWiki::Parser do
671
671
  tc("<h1>heading</h1><pre>nowiki</pre>", "=heading=\n{{{\nnowiki\n}}}\n")
672
672
  tc("<h1>heading</h1><pre>nowiki</pre>", "=heading=\n\n{{{\nnowiki\n}}}\n")
673
673
  # table
674
- tc("<h1>heading</h1><table><tr><td>table</td></tr></table>", "=heading=\n||table||\n")
675
- tc("<h1>heading</h1><table><tr><td>table</td></tr></table>", "=heading=\n\n||table||\n")
674
+ tc("<h1>heading</h1><table><tr><td>table</td>\n</tr>\n</table>\n", "=heading=\n||table||\n")
675
+ tc("<h1>heading</h1><table><tr><td>table</td>\n</tr>\n</table>\n", "=heading=\n\n||table||\n")
676
676
  end
677
677
 
678
678
  it 'should parse following paragraph' do
@@ -683,11 +683,11 @@ describe TracWiki::Parser do
683
683
  tc("<p>par par</p>\n", "par\npar\n")
684
684
  tc("<p>par</p>\n<p>par</p>\n", "par\n\npar\n")
685
685
  # unordered
686
- tc("<p>par</p>\n<ul><li>item</li></ul>", "par\n* item")
687
- tc("<p>par</p>\n<ul><li>item</li></ul>", "par\n\n* item")
686
+ tc("<p>par</p>\n<ul><li>item</li>\n</ul>\n", "par\n* item")
687
+ tc("<p>par</p>\n<ul><li>item</li>\n</ul>\n", "par\n\n* item")
688
688
  # ordered
689
- tc("<p>par</p>\n<ol><li>item</li></ol>", "par\n1. item\n")
690
- tc("<p>par</p>\n<ol><li>item</li></ol>", "par\n\n1. item\n")
689
+ tc("<p>par</p>\n<ol><li>item</li>\n</ol>\n", "par\n1. item\n")
690
+ tc("<p>par</p>\n<ol><li>item</li>\n</ol>\n", "par\n\n1. item\n")
691
691
  # horizontal
692
692
  tc("<p>par</p>\n<hr/>", "par\n----\n")
693
693
  tc("<p>par</p>\n<hr/>", "par\n\n----\n")
@@ -695,56 +695,56 @@ describe TracWiki::Parser do
695
695
  tc("<p>par</p>\n<pre>nowiki</pre>", "par\n{{{\nnowiki\n}}}\n")
696
696
  tc("<p>par</p>\n<pre>nowiki</pre>", "par\n\n{{{\nnowiki\n}}}\n")
697
697
  # table
698
- tc("<p>par</p>\n<table><tr><td>table</td></tr></table>", "par\n||table||\n")
699
- tc("<p>par</p>\n<table><tr><td>table</td></tr></table>", "par\n\n||table||\n")
698
+ tc("<p>par</p>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "par\n||table||\n")
699
+ tc("<p>par</p>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "par\n\n||table||\n")
700
700
  end
701
701
 
702
702
  it 'should parse following unordered list' do
703
703
  # heading
704
- tc("<ul><li>item</li></ul><h1>heading</h1>", "* item\n=heading=")
705
- tc("<ul><li>item</li></ul><h1>heading</h1>", "* item\n\n=heading=")
704
+ tc("<ul><li>item</li>\n</ul>\n<h1>heading</h1>", "* item\n=heading=")
705
+ tc("<ul><li>item</li>\n</ul>\n<h1>heading</h1>", "* item\n\n=heading=")
706
706
  # paragraph
707
- tc("<ul><li>item par</li></ul>", "* item\npar\n") # items may span multiple lines
708
- tc("<ul><li>item</li></ul><p>par</p>\n", "* item\n\npar\n")
707
+ tc("<ul><li>item par</li>\n</ul>\n", "* item\npar\n") # items may span multiple lines
708
+ tc("<ul><li>item</li>\n</ul>\n<p>par</p>\n", "* item\n\npar\n")
709
709
  # unordered
710
- tc("<ul><li>item</li><li>item</li></ul>", "* item\n* item\n")
711
- tc("<ul><li>item</li></ul><ul><li>item</li></ul>", "* item\n\n* item\n")
710
+ tc("<ul><li>item</li>\n<li>item</li>\n</ul>\n", "* item\n* item\n")
711
+ tc("<ul><li>item</li>\n</ul>\n<ul><li>item</li>\n</ul>\n", "* item\n\n* item\n")
712
712
  # ordered
713
- tc("<ul><li>item</li></ul><ol><li>item</li></ol>", "* item\n1. item\n")
714
- tc("<ul><li>item</li></ul><ol><li>item</li></ol>", "* item\n\n1. item\n")
713
+ tc("<ul><li>item</li>\n</ul>\n<ol><li>item</li>\n</ol>\n", "* item\n1. item\n")
714
+ tc("<ul><li>item</li>\n</ul>\n<ol><li>item</li>\n</ol>\n", "* item\n\n1. item\n")
715
715
  # horizontal rule
716
- tc("<ul><li>item</li></ul><hr/>", "* item\n----\n")
717
- tc("<ul><li>item</li></ul><hr/>", "* item\n\n----\n")
716
+ tc("<ul><li>item</li>\n</ul>\n<hr/>", "* item\n----\n")
717
+ tc("<ul><li>item</li>\n</ul>\n<hr/>", "* item\n\n----\n")
718
718
  # nowiki
719
- tc("<ul><li>item</li></ul><pre>nowiki</pre>", "* item\n{{{\nnowiki\n}}}\n")
720
- tc("<ul><li>item</li></ul><pre>nowiki</pre>", "* item\n\n{{{\nnowiki\n}}}\n")
719
+ tc("<ul><li>item</li>\n</ul>\n<pre>nowiki</pre>", "* item\n{{{\nnowiki\n}}}\n")
720
+ tc("<ul><li>item</li>\n</ul>\n<pre>nowiki</pre>", "* item\n\n{{{\nnowiki\n}}}\n")
721
721
  # table
722
- tc("<ul><li>item</li></ul><table><tr><td>table</td></tr></table>", "* item\n||table||\n")
723
- tc("<ul><li>item</li></ul><table><tr><td>table</td></tr></table>", "* item\n\n||table||\n")
722
+ tc("<ul><li>item</li>\n</ul>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "* item\n||table||\n")
723
+ tc("<ul><li>item</li>\n</ul>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "* item\n\n||table||\n")
724
724
  end
725
725
 
726
726
  it 'should parse following ordered list' do
727
727
  # heading
728
- tc("<ol><li>item</li></ol><h1>heading</h1>", "1. item\n=heading=")
729
- tc("<ol><li>item</li></ol><h1>heading</h1>", "1. item\n\n=heading=")
728
+ tc("<ol><li>item</li>\n</ol>\n<h1>heading</h1>", "1. item\n=heading=")
729
+ tc("<ol><li>item</li>\n</ol>\n<h1>heading</h1>", "1. item\n\n=heading=")
730
730
  # paragraph
731
- tc("<ol><li>item par</li></ol>", "1. item\npar\n") # items may span multiple lines
732
- tc("<ol><li>item</li></ol><p>par</p>\n", "1. item\n\npar\n")
731
+ tc("<ol><li>item par</li>\n</ol>\n", "1. item\npar\n") # items may span multiple lines
732
+ tc("<ol><li>item</li>\n</ol>\n<p>par</p>\n", "1. item\n\npar\n")
733
733
  # unordered
734
- tc("<ol><li>item</li></ol><ul><li>item</li></ul>", "1. item\n* item\n")
735
- tc("<ol><li>item</li></ol><ul><li>item</li></ul>", "1. item\n\n* item\n")
734
+ tc("<ol><li>item</li>\n</ol>\n<ul><li>item</li>\n</ul>\n", "1. item\n* item\n")
735
+ tc("<ol><li>item</li>\n</ol>\n<ul><li>item</li>\n</ul>\n", "1. item\n\n* item\n")
736
736
  # ordered
737
- tc("<ol><li>item</li><li>item</li></ol>", "1. item\n2. item\n")
738
- tc("<ol><li>item</li></ol><ol><li>item</li></ol>", "1. item\n\n1. item\n")
737
+ tc("<ol><li>item</li>\n<li>item</li>\n</ol>\n", "1. item\n2. item\n")
738
+ tc("<ol><li>item</li>\n</ol>\n<ol><li>item</li>\n</ol>\n", "1. item\n\n1. item\n")
739
739
  # horizontal role
740
- tc("<ol><li>item</li></ol><hr/>", "1. item\n----\n")
741
- tc("<ol><li>item</li></ol><hr/>", "1. item\n\n----\n")
740
+ tc("<ol><li>item</li>\n</ol>\n<hr/>", "1. item\n----\n")
741
+ tc("<ol><li>item</li>\n</ol>\n<hr/>", "1. item\n\n----\n")
742
742
  # nowiki
743
- tc("<ol><li>item</li></ol><pre>nowiki</pre>", "1. item\n{{{\nnowiki\n}}}\n")
744
- tc("<ol><li>item</li></ol><pre>nowiki</pre>", "1. item\n\n{{{\nnowiki\n}}}\n")
743
+ tc("<ol><li>item</li>\n</ol>\n<pre>nowiki</pre>", "1. item\n{{{\nnowiki\n}}}\n")
744
+ tc("<ol><li>item</li>\n</ol>\n<pre>nowiki</pre>", "1. item\n\n{{{\nnowiki\n}}}\n")
745
745
  # table
746
- tc("<ol><li>item</li></ol><table><tr><td>table</td></tr></table>", "1. item\n||table||\n")
747
- tc("<ol><li>item</li></ol><table><tr><td>table</td></tr></table>", "1. item\n\n||table||\n")
746
+ tc("<ol><li>item</li>\n</ol>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "1. item\n||table||\n")
747
+ tc("<ol><li>item</li>\n</ol>\n<table><tr><td>table</td>\n</tr>\n</table>\n", "1. item\n\n||table||\n")
748
748
  end
749
749
 
750
750
  it 'should parse following horizontal rule' do
@@ -755,14 +755,14 @@ describe TracWiki::Parser do
755
755
  tc("<hr/><p>par</p>\n", "----\npar\n")
756
756
  tc("<hr/><p>par</p>\n", "----\n\npar\n")
757
757
  # unordered
758
- tc("<hr/><ul><li>item</li></ul>", "----\n* item")
759
- tc("<hr/><ul><li>item</li></ul>", "----\n* item")
760
- tc("<hr/><ul><li>item</li></ul>", "----\n- item")
761
- tc("<hr/><ul><li>item</li></ul>", "----\n- item")
762
- tc("<hr/><ul><li>item</li></ul>", "----\n - item")
758
+ tc("<hr/><ul><li>item</li>\n</ul>\n", "----\n* item")
759
+ tc("<hr/><ul><li>item</li>\n</ul>\n", "----\n* item")
760
+ tc("<hr/><ul><li>item</li>\n</ul>\n", "----\n- item")
761
+ tc("<hr/><ul><li>item</li>\n</ul>\n", "----\n- item")
762
+ tc("<hr/><ul><li>item</li>\n</ul>\n", "----\n - item")
763
763
  # ordered
764
- tc("<hr/><ol><li>item</li></ol>", "----\n1. item")
765
- tc("<hr/><ol><li>item</li></ol>", "----\n1. item")
764
+ tc("<hr/><ol><li>item</li>\n</ol>\n", "----\n1. item")
765
+ tc("<hr/><ol><li>item</li>\n</ol>\n", "----\n1. item")
766
766
  # horizontal
767
767
  tc("<hr/><hr/>", "----\n----\n")
768
768
  tc("<hr/><hr/>", "----\n\n----\n")
@@ -770,8 +770,8 @@ describe TracWiki::Parser do
770
770
  tc("<hr/><pre>nowiki</pre>", "----\n{{{\nnowiki\n}}}\n")
771
771
  tc("<hr/><pre>nowiki</pre>", "----\n\n{{{\nnowiki\n}}}\n")
772
772
  # table
773
- tc("<hr/><table><tr><td>table</td></tr></table>", "----\n||table||\n")
774
- tc("<hr/><table><tr><td>table</td></tr></table>", "----\n\n||table||\n")
773
+ tc("<hr/><table><tr><td>table</td>\n</tr>\n</table>\n", "----\n||table||\n")
774
+ tc("<hr/><table><tr><td>table</td>\n</tr>\n</table>\n", "----\n\n||table||\n")
775
775
  end
776
776
 
777
777
  it 'should parse following nowiki block' do
@@ -782,11 +782,11 @@ describe TracWiki::Parser do
782
782
  tc("<pre>nowiki</pre><p>par</p>\n", "{{{\nnowiki\n}}}\npar")
783
783
  tc("<pre>nowiki</pre><p>par</p>\n", "{{{\nnowiki\n}}}\n\npar")
784
784
  # unordered
785
- tc("<pre>nowiki</pre><ul><li>item</li></ul>", "{{{\nnowiki\n}}}\n* item\n")
786
- tc("<pre>nowiki</pre><ul><li>item</li></ul>", "{{{\nnowiki\n}}}\n\n* item\n")
785
+ tc("<pre>nowiki</pre><ul><li>item</li>\n</ul>\n", "{{{\nnowiki\n}}}\n* item\n")
786
+ tc("<pre>nowiki</pre><ul><li>item</li>\n</ul>\n", "{{{\nnowiki\n}}}\n\n* item\n")
787
787
  # ordered
788
- tc("<pre>nowiki</pre><ol><li>item</li></ol>", "{{{\nnowiki\n}}}\n1. item\n")
789
- tc("<pre>nowiki</pre><ol><li>item</li></ol>", "{{{\nnowiki\n}}}\n\n1. item\n")
788
+ tc("<pre>nowiki</pre><ol><li>item</li>\n</ol>\n", "{{{\nnowiki\n}}}\n1. item\n")
789
+ tc("<pre>nowiki</pre><ol><li>item</li>\n</ol>\n", "{{{\nnowiki\n}}}\n\n1. item\n")
790
790
  # horizontal
791
791
  tc("<pre>nowiki</pre><hr/>", "{{{\nnowiki\n}}}\n----\n")
792
792
  tc("<pre>nowiki</pre><hr/>", "{{{\nnowiki\n}}}\n\n----\n")
@@ -794,8 +794,8 @@ describe TracWiki::Parser do
794
794
  tc("<pre>nowiki</pre><pre>nowiki</pre>", "{{{\nnowiki\n}}}\n{{{\nnowiki\n}}}\n")
795
795
  tc("<pre>nowiki</pre><pre>nowiki</pre>", "{{{\nnowiki\n}}}\n\n{{{\nnowiki\n}}}\n")
796
796
  # table
797
- tc("<pre>nowiki</pre><table><tr><td>table</td></tr></table>", "{{{\nnowiki\n}}}\n||table||\n")
798
- tc("<pre>nowiki</pre><table><tr><td>table</td></tr></table>", "{{{\nnowiki\n}}}\n\n||table||\n")
797
+ tc("<pre>nowiki</pre><table><tr><td>table</td>\n</tr>\n</table>\n", "{{{\nnowiki\n}}}\n||table||\n")
798
+ tc("<pre>nowiki</pre><table><tr><td>table</td>\n</tr>\n</table>\n", "{{{\nnowiki\n}}}\n\n||table||\n")
799
799
  end
800
800
 
801
801
  it 'should parse image' do
@@ -819,7 +819,7 @@ describe TracWiki::Parser do
819
819
  end
820
820
 
821
821
  it 'should parse bold combo' do
822
- tc("<p><strong>bold and</strong></p>\n<table><tr><td>table</td></tr></table><p>end<strong></strong></p>\n",
822
+ tc("<p><strong>bold and</strong></p>\n<table><tr><td>table</td>\n</tr>\n</table>\n<p>end</p>\n",
823
823
  "**bold and\n||table||\nend**")
824
824
  end
825
825
 
@@ -897,6 +897,7 @@ kuk
897
897
  eos
898
898
 
899
899
 
900
+ end
900
901
  it 'should support macro' do
901
902
  tc "<p>ahoj</p>\n" , "{{#echo \nahoj\n}}"
902
903
  tc "<h2>H2</h2>" , "{{#echo == H2 ==}}"
@@ -999,7 +1000,13 @@ eos
999
1000
  tc "<p><b class=\"bclass\">BOLD</b></p>\n", "<b bad=\"bad\" class=\"bclass\">BOLD</b>\n", raw_html: true
1000
1001
  tc "<p><b class=\"bclass\">BOLD</b></p>\n", "<b bad=\"bad\" class=\"bclass\">BOLD</b>\n", raw_html: true
1001
1002
  end
1002
-
1003
+ it 'should parse link' do
1004
+ tc "<p><a href=\"#here\">Here</a></p>\n", "[[#here|Here]]"
1005
+ tc "<p><a href=\"#here+i+m\">Here</a></p>\n", "[[#here i m|Here]]"
1006
+ tc "<p><a href=\"there#i+m\">There</a></p>\n", "[[there#i m|There]]"
1007
+ tc "<p><a href=\"http://example.com/there#i+m\">There</a></p>\n", "[[there#i m|There]]", base: 'http://example.com/'
1008
+ tc "<p><a href=\"#here+i+m\">Here</a></p>\n", "[[#here i m|Here]]", base: 'http://example.com/'
1003
1009
  end
1010
+
1004
1011
  end
1005
1012
  # vim: tw=0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trac-wiki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.23
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-25 00:00:00.000000000 Z
12
+ date: 2014-02-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon