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 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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'trac-wiki'
4
+
5
+ options = {}
6
+ wiki = ARGF.read;
7
+ print TracWiki.render(wiki, options)
8
+
@@ -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
- @extensions = @no_escape = nil
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 = CreoleParser.new("**Hello //World//**", :extensions => true)
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 str
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\*\*/, /\A'''/
348
+ when str =~ /\A\*\*/ || str =~ /\A'''/
344
349
  toggle_tag 'strong', $& # bold
345
- when /\A''/, /\A\/\//
350
+ when str =~ /\A''/ || str =~ /\A\/\//
346
351
  toggle_tag 'em', $& # italic
347
- when /\A\\\\/, /\A\[\[br\]\]/i
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\(R\)/i
360
- @out << '&#174;' # (R)
361
- when /\A\(C\)/i
362
- @out << '&#169;' # (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 str
476
-
476
+ case
477
477
  # pre {{{ ... }}}
478
- when /\A\{\{\{\r?\n(.*?)\r?\n\}\}\}/m
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
- when /\A\s*(={1,6})\s*(.*?)\s*=*\s*$(\r?\n)?/
490
- end_paragraph
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
- @out << make_headline(level, $2)
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
 
@@ -1,3 +1,3 @@
1
1
  module TracWiki
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.5'
3
3
  end
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&lt;3&gt;\"/><h3>Heading 3</h3>", "=== Heading 3 === #Heading<3>"
142
+ tc "<a name=\"Heading'&quot;3&quot;'\"/><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 extensions' do
752
- tce("<p>This is <u>underlined</u></p>\n",
753
- "This is __underlined__")
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
- tce("<p>This is <del>deleted</del></p>\n",
756
- "This is ~~deleted~~")
767
+ tc("<p>This is <del>deleted</del></p>\n",
768
+ "This is ~~deleted~~")
757
769
 
758
- tce("<p>This is <sup>super</sup></p>\n",
759
- "This is ^super^")
770
+ tc("<p>This is <sup>super</sup></p>\n",
771
+ "This is ^super^")
760
772
 
761
- tce("<p>This is <sub>sub</sub></p>\n",
762
- "This is ,,sub,,")
773
+ tc("<p>This is <sub>sub</sub></p>\n",
774
+ "This is ,,sub,,")
775
+ end
763
776
 
764
- tce("<p>&#174;</p>\n", "(R)")
765
- tce("<p>&#174;</p>\n", "(r)")
766
- tce("<p>&#169;</p>\n", "(C)")
767
- tce("<p>&#169;</p>\n", "(c)")
777
+ it 'should not support signs' do
778
+ TracWiki.render("(R)").should.not.equal "<p>&#174;</p>\n"
779
+ TracWiki.render("(r)").should.not.equal "<p>&#174;</p>\n"
780
+ TracWiki.render("(C)").should.not.equal "<p>&#169;</p>\n"
781
+ TracWiki.render("(c)").should.not.equal "<p>&#169;</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.3
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-05-21 00:00:00.000000000 Z
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: