trac-wiki 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +6 -0
- data/bin/trac-wiki.rb +8 -0
- data/lib/trac-wiki/parser.rb +48 -41
- data/lib/trac-wiki/version.rb +1 -1
- data/test/parser_test.rb +31 -17
- metadata +5 -4
data/Rakefile
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
task :default => :test
|
2
2
|
|
3
|
+
|
3
4
|
desc 'Run tests with bacon'
|
4
5
|
task :test => FileList['test/*_test.rb'] do |t|
|
5
6
|
sh "bacon -q -Ilib:test #{t.prerequisites.join(' ')}"
|
6
7
|
end
|
8
|
+
|
9
|
+
desc $stderr.puts("Goodbye, World!")
|
10
|
+
task :test2 => FileList['test/*_test.rb'] do |t|
|
11
|
+
sh "bacon -q -Ilib:test #{t.prerequisites.join(' ')}"
|
12
|
+
end
|
data/bin/trac-wiki.rb
ADDED
data/lib/trac-wiki/parser.rb
CHANGED
@@ -43,11 +43,6 @@ module TracWiki
|
|
43
43
|
# Examples: http https ftp ftps
|
44
44
|
attr_accessor :allowed_schemes
|
45
45
|
|
46
|
-
# Non-standard wiki text extensions enabled?
|
47
|
-
# E.g. underlined, deleted text etc
|
48
|
-
attr_writer :extensions
|
49
|
-
def extensions?; @extensions; end
|
50
|
-
|
51
46
|
# Disable url escaping for local links
|
52
47
|
# Escaping: [[/Test]] --> %2FTest
|
53
48
|
# No escaping: [[/Test]] --> Test
|
@@ -59,11 +54,14 @@ module TracWiki
|
|
59
54
|
attr_writer :no_link
|
60
55
|
def no_link?; @no_link; end
|
61
56
|
|
57
|
+
attr_writer :math
|
58
|
+
def math?; @math; end
|
59
|
+
|
62
60
|
# Create a new Parser instance.
|
63
61
|
def initialize(text, options = {})
|
64
62
|
@allowed_schemes = %w(http https ftp ftps)
|
65
63
|
@text = text
|
66
|
-
@
|
64
|
+
@no_escape = nil
|
67
65
|
options.each_pair {|k,v| send("#{k}=", v) }
|
68
66
|
end
|
69
67
|
|
@@ -73,7 +71,7 @@ module TracWiki
|
|
73
71
|
#
|
74
72
|
# Example:
|
75
73
|
#
|
76
|
-
# parser =
|
74
|
+
# parser = Parser.new("**Hello //World//**")
|
77
75
|
# parser.to_html
|
78
76
|
# #=> "<p><strong>Hello <em>World</em></strong></p>"
|
79
77
|
def to_html
|
@@ -239,8 +237,12 @@ module TracWiki
|
|
239
237
|
return ' ' + a.map{|k,v| "#{k}=\"#{v}\"" }.sort.join(' ')
|
240
238
|
end
|
241
239
|
|
242
|
-
def make_headline(level, text)
|
243
|
-
"<h#{level}>" << escape_html(text) << "</h#{level}>"
|
240
|
+
def make_headline(level, text, aname)
|
241
|
+
ret = "<h#{level}>" << escape_html(text) << "</h#{level}>"
|
242
|
+
if aname
|
243
|
+
ret = "<a name=\"#{ escape_html(aname) }\"/>" + ret
|
244
|
+
end
|
245
|
+
ret
|
244
246
|
end
|
245
247
|
|
246
248
|
def make_explicit_link(link)
|
@@ -319,11 +321,14 @@ module TracWiki
|
|
319
321
|
end
|
320
322
|
|
321
323
|
def parse_inline_tag(str)
|
322
|
-
case
|
323
|
-
when /\A\{\{\{(.*?\}*)\}\}\}/ # inline pre (tt)
|
324
|
+
case
|
325
|
+
when str =~ /\A\{\{\{(.*?\}*)\}\}\}/ # inline pre (tt)
|
324
326
|
@out << '<tt>' << escape_html($1) << '</tt>'
|
325
|
-
when /\A`(.*?)`/ # inline pre (tt)
|
327
|
+
when str =~ /\A`(.*?)`/ # inline pre (tt)
|
326
328
|
@out << '<tt>' << escape_html($1) << '</tt>'
|
329
|
+
|
330
|
+
when math? && str =~ /\A\$(.+?)\$/ # inline math (tt)
|
331
|
+
@out << '\( ' << escape_html($1) << ' \)'
|
327
332
|
# when /\A\[\[Image\(([^|].*?)(\|(.*?))?\)\]\]/ # image
|
328
333
|
# @out << make_image($1, $3)
|
329
334
|
|
@@ -334,35 +339,31 @@ module TracWiki
|
|
334
339
|
# @out << escape_html($&)
|
335
340
|
# end # link
|
336
341
|
|
337
|
-
when /\A([:alpha:]|[:digit:])+/
|
342
|
+
when str =~ /\A([:alpha:]|[:digit:])+/
|
338
343
|
@out << $& # word
|
339
|
-
when /\A\s+/
|
344
|
+
when str =~ /\A\s+/
|
340
345
|
@out << ' ' if @out[-1] != ?\s # spaces
|
341
|
-
when /\A'''''/
|
346
|
+
when str =~ /\A'''''/
|
342
347
|
toggle_tag 'strongem', $& # bolditallic
|
343
|
-
when /\A
|
348
|
+
when str =~ /\A\*\*/ || str =~ /\A'''/
|
344
349
|
toggle_tag 'strong', $& # bold
|
345
|
-
when /\A''
|
350
|
+
when str =~ /\A''/ || str =~ /\A\/\//
|
346
351
|
toggle_tag 'em', $& # italic
|
347
|
-
when /\A
|
352
|
+
when str =~ /\A\\\\/ || str =~ /\A\[\[br\]\]/i
|
348
353
|
@out << '<br/>' # newline
|
349
|
-
when /\A__/
|
354
|
+
when str =~ /\A__/
|
350
355
|
toggle_tag 'u', $& # underline
|
351
|
-
when /\A~~/
|
356
|
+
when str =~ /\A~~/
|
352
357
|
toggle_tag 'del', $& # delete
|
353
358
|
# when /\A\+\+/
|
354
359
|
# toggle_tag 'ins', $& # insert
|
355
|
-
when /\A\^/
|
360
|
+
when str =~ /\A\^/
|
356
361
|
toggle_tag 'sup', $& # ^{}
|
357
|
-
when /\A,,/
|
362
|
+
when str =~ /\A,,/
|
358
363
|
toggle_tag 'sub', $& # _{}
|
359
|
-
when /\A
|
360
|
-
@out << '®' # (R)
|
361
|
-
when /\A\(C\)/i
|
362
|
-
@out << '©' # (C)
|
363
|
-
when /\A!([^\s])/
|
364
|
+
when str =~ /\A!([^\s])/
|
364
365
|
@out << escape_html($1) # !neco
|
365
|
-
when /./
|
366
|
+
when str =~ /./
|
366
367
|
@out << escape_html($&) # ordinal char
|
367
368
|
end
|
368
369
|
return $'
|
@@ -472,27 +473,33 @@ module TracWiki
|
|
472
473
|
|
473
474
|
def parse_block(str)
|
474
475
|
until str.empty?
|
475
|
-
case
|
476
|
-
|
476
|
+
case
|
477
477
|
# pre {{{ ... }}}
|
478
|
-
when /\A
|
478
|
+
when math? && str =~ /\A\$\$(.*?)\$\$/
|
479
|
+
end_paragraph
|
480
|
+
nowikiblock = make_nowikiblock($1)
|
481
|
+
@out << "$$" << escape_html(nowikiblock) << "$$\n"
|
482
|
+
when str =~ /\A\{\{\{\r?\n(.*?)\r?\n\}\}\}/m
|
479
483
|
end_paragraph
|
480
484
|
nowikiblock = make_nowikiblock($1)
|
481
485
|
@out << '<pre>' << escape_html(nowikiblock) << '</pre>'
|
482
486
|
|
483
487
|
# horizontal rule
|
484
|
-
when /\A\s*-{4,}\s*$/
|
488
|
+
when str =~ /\A\s*-{4,}\s*$/
|
485
489
|
end_paragraph
|
486
490
|
@out << '<hr/>'
|
487
491
|
|
488
492
|
# heading == Wiki Ruless ==
|
489
|
-
|
490
|
-
|
493
|
+
# heading == Wiki Ruless == #tag
|
494
|
+
when str =~ /\A\s*(={1,6})\s*(.*?)\s*=*\s*(#(\S*))?\s*$(\r?\n)?/
|
491
495
|
level = $1.size
|
492
|
-
|
496
|
+
title= $2
|
497
|
+
aname= $4
|
498
|
+
end_paragraph
|
499
|
+
@out << make_headline(level, title, aname)
|
493
500
|
|
494
501
|
# table row
|
495
|
-
when /\A[ \t]*\|\|(.*)$(\r?\n)?/
|
502
|
+
when str =~ /\A[ \t]*\|\|(.*)$(\r?\n)?/
|
496
503
|
if !@stack.include?('table')
|
497
504
|
end_paragraph
|
498
505
|
start_tag('table')
|
@@ -500,9 +507,9 @@ module TracWiki
|
|
500
507
|
parse_table_row($1)
|
501
508
|
|
502
509
|
# empty line
|
503
|
-
when /\A\s*$(\r?\n)?/
|
510
|
+
when str =~ /\A\s*$(\r?\n)?/
|
504
511
|
end_paragraph
|
505
|
-
when /\A([:\w\s]+)::(\s+|\r?\n)/
|
512
|
+
when str =~ /\A([:\w\s]+)::(\s+|\r?\n)/
|
506
513
|
term = $1
|
507
514
|
start_tag('dl')
|
508
515
|
start_tag('dt')
|
@@ -511,10 +518,10 @@ module TracWiki
|
|
511
518
|
start_tag('dd')
|
512
519
|
|
513
520
|
# li
|
514
|
-
when /\A(\s*)([*-]|[aAIi\d]\.)\s+(.*?)$(\r?\n)?/
|
521
|
+
when str =~ /\A(\s*)([*-]|[aAIi\d]\.)\s+(.*?)$(\r?\n)?/
|
515
522
|
parse_li_line($1.size, $2, $3)
|
516
523
|
|
517
|
-
when /\A(>[>\s]*)(.*?)$(\r?\n)?/
|
524
|
+
when str =~ /\A(>[>\s]*)(.*?)$(\r?\n)?/
|
518
525
|
# citation
|
519
526
|
level, quote = $1.count('>'), $2
|
520
527
|
|
@@ -524,7 +531,7 @@ module TracWiki
|
|
524
531
|
|
525
532
|
|
526
533
|
# ordinary line
|
527
|
-
when /\A(\s*)(\S+.*?)$(\r?\n)?/
|
534
|
+
when str =~ /\A(\s*)(\S+.*?)$(\r?\n)?/
|
528
535
|
spc_size, text = $1.size, $2
|
529
536
|
text.rstrip!
|
530
537
|
|
data/lib/trac-wiki/version.rb
CHANGED
data/test/parser_test.rb
CHANGED
@@ -4,10 +4,6 @@ class Bacon::Context
|
|
4
4
|
def tc(html, wiki, options = {})
|
5
5
|
TracWiki.render(wiki, options).should.equal html
|
6
6
|
end
|
7
|
-
|
8
|
-
def tce(html, wiki)
|
9
|
-
tc(html, wiki, :extensions => true)
|
10
|
-
end
|
11
7
|
end
|
12
8
|
|
13
9
|
describe TracWiki::Parser do
|
@@ -123,11 +119,27 @@ describe TracWiki::Parser do
|
|
123
119
|
tc "<p><em>This is <strong>also</strong> good.</em></p>\n", "''This is **also** good.''"
|
124
120
|
end
|
125
121
|
|
122
|
+
it 'should parse math' do
|
123
|
+
tc "<p>\\( the \\)</p>\n", '$the$', math: true
|
124
|
+
tc "<p>test \\( the \\) west</p>\n", 'test $the$ west', math: true
|
125
|
+
tc "<p>test \\( e^{i\\pi} \\) test</p>\n", 'test $e^{i\pi}$ test', math: true
|
126
|
+
tc "<p>test $ e<sup>{i\\pi} test</sup></p>\n", 'test $ e^{i\pi} test', math: true
|
127
|
+
tc "<p>$the$</p>\n", '$the$', math: false
|
128
|
+
|
129
|
+
tc "<p>ahoj</p>\n$$e^{i\\pi}$$\n<p>nazdar</p>\n", "ahoj\n$$e^{i\\pi}$$\nnazdar", math: true
|
130
|
+
tc "<p>ahoj $$e<sup>{i\\pi}$$ nazdar</sup></p>\n", "ahoj\n$$e^{i\\pi}$$\nnazdar", math: false
|
131
|
+
end
|
126
132
|
it 'should parse headings' do
|
127
133
|
# Only three differed sized levels of heading are required.
|
128
134
|
tc "<h1>Heading 1</h1>", "= Heading 1 ="
|
129
135
|
tc "<h2>Heading 2</h2>", "== Heading 2 =="
|
130
136
|
tc "<h3>Heading 3</h3>", "=== Heading 3 ==="
|
137
|
+
tc "<a name=\"HE3\"/><h3>Heading 3</h3>", "=== Heading 3 === #HE3"
|
138
|
+
tc "<a name=\"Heading-3\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading-3"
|
139
|
+
tc "<a name=\"Heading/3\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading/3"
|
140
|
+
tc "<a name=\"Heading/3\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading/3 "
|
141
|
+
tc "<a name=\"Heading<3>\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading<3>"
|
142
|
+
tc "<a name=\"Heading'"3"'\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading'\"3\"'"
|
131
143
|
# WARNING: Optional feature, not specified in
|
132
144
|
tc "<h4>Heading 4</h4>", "==== Heading 4 ===="
|
133
145
|
tc "<h5>Heading 5</h5>", "===== Heading 5 ====="
|
@@ -748,23 +760,25 @@ describe TracWiki::Parser do
|
|
748
760
|
"**bold and\n||table||\nend**")
|
749
761
|
end
|
750
762
|
|
751
|
-
it 'should support
|
752
|
-
|
753
|
-
|
763
|
+
it 'should support font styles below' do
|
764
|
+
tc("<p>This is <u>underlined</u></p>\n",
|
765
|
+
"This is __underlined__")
|
754
766
|
|
755
|
-
|
756
|
-
|
767
|
+
tc("<p>This is <del>deleted</del></p>\n",
|
768
|
+
"This is ~~deleted~~")
|
757
769
|
|
758
|
-
|
759
|
-
|
770
|
+
tc("<p>This is <sup>super</sup></p>\n",
|
771
|
+
"This is ^super^")
|
760
772
|
|
761
|
-
|
762
|
-
|
773
|
+
tc("<p>This is <sub>sub</sub></p>\n",
|
774
|
+
"This is ,,sub,,")
|
775
|
+
end
|
763
776
|
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
777
|
+
it 'should not support signs' do
|
778
|
+
TracWiki.render("(R)").should.not.equal "<p>®</p>\n"
|
779
|
+
TracWiki.render("(r)").should.not.equal "<p>®</p>\n"
|
780
|
+
TracWiki.render("(C)").should.not.equal "<p>©</p>\n"
|
781
|
+
TracWiki.render("(c)").should.not.equal "<p>©</p>\n"
|
768
782
|
end
|
769
783
|
|
770
784
|
it 'should support no_escape' do
|
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.1.
|
4
|
+
version: 0.1.5
|
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: 2013-
|
12
|
+
date: 2013-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|
@@ -47,7 +47,8 @@ description: TracWiki markup language render (http://trac.edgewall.org/wiki/Wiki
|
|
47
47
|
).
|
48
48
|
email:
|
49
49
|
- vitas@matfyz.cz
|
50
|
-
executables:
|
50
|
+
executables:
|
51
|
+
- trac-wiki.rb
|
51
52
|
extensions: []
|
52
53
|
extra_rdoc_files:
|
53
54
|
- README
|
@@ -55,6 +56,7 @@ files:
|
|
55
56
|
- Gemfile
|
56
57
|
- README
|
57
58
|
- Rakefile
|
59
|
+
- bin/trac-wiki.rb
|
58
60
|
- lib/trac-wiki.rb
|
59
61
|
- lib/trac-wiki/parser.rb
|
60
62
|
- lib/trac-wiki/version.rb
|
@@ -85,4 +87,3 @@ signing_key:
|
|
85
87
|
specification_version: 3
|
86
88
|
summary: Trac Wiki markup language
|
87
89
|
test_files: []
|
88
|
-
has_rdoc:
|