trac-wiki 0.1.3 → 0.1.5

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.
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: