creole 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Manifest.txt +0 -1
  2. data/lib/creole.rb +54 -27
  3. data/test/test_creole.rb +31 -2
  4. metadata +3 -3
@@ -3,4 +3,3 @@ README.txt
3
3
  Rakefile
4
4
  lib/creole.rb
5
5
  test/test_creole.rb
6
- test/testcases.rb
@@ -37,12 +37,7 @@ require 'uri'
37
37
  # methods are: make_local_link
38
38
  class Creole
39
39
 
40
- VERSION = '0.3.5'
41
-
42
- # CreoleError is raised when the Creole parser encounters
43
- # something unexpected. This is generally now thrown unless there is
44
- # a bug in the parser.
45
- class CreoleError < Exception; end
40
+ VERSION = '0.3.6'
46
41
 
47
42
  # Convert the argument in Creole format to HTML and return the
48
43
  # result. Example:
@@ -51,32 +46,40 @@ class Creole
51
46
  # #=> "<p><strong>Hello <em>World</em></strong></p>"
52
47
  #
53
48
  # This is an alias for calling Creole#parse:
54
- # Creole.new.parse(creole)
55
- def self.creolize(creole)
56
- new.parse(creole)
49
+ # Creole.new(text).to_html
50
+ def self.creolize(text, options = {})
51
+ new(text, options).to_html
57
52
  end
58
53
 
54
+ # Allowed url schemes
55
+ # Examples: http https ftp ftps
56
+ attr_accessor :allowed_schemes
57
+
58
+ # Extensions enabled?
59
+ attr_writer :extensions
60
+ def extensions?; @extensions; end
61
+
59
62
  # Create a new CreoleParser instance.
60
- def initialize
61
- @base = nil
62
- @allowed_schemes = [ 'http', 'https', 'ftp', 'ftps' ]
63
- @uri_scheme_re = @allowed_schemes.join('|')
63
+ def initialize(text, options = {})
64
+ @allowed_schemes = options[:allowed_schemes] || %w(http https ftp ftps)
65
+ @extensions = options[:extensions]
66
+ @text = text
64
67
  end
65
68
 
66
- # Parse and convert the argument in Creole text to HTML and return
69
+ # Convert CCreole text to HTML and return
67
70
  # the result. The resulting HTML does not contain <html> and
68
71
  # <body> tags.
69
72
  #
70
73
  # Example:
71
74
  #
72
- # parser = CreoleParser.new
73
- # parser.parse("**Hello //World//**")
75
+ # parser = CreoleParser.new("**Hello //World//**", :extensions => true)
76
+ # parser.to_html
74
77
  # #=> "<p><strong>Hello <em>World</em></strong></p>"
75
- def parse(string)
76
- @out = ""
78
+ def to_html
79
+ @out = ''
77
80
  @p = false
78
81
  @stack = []
79
- parse_block(string)
82
+ parse_block(@text)
80
83
  @out
81
84
  end
82
85
 
@@ -246,9 +249,7 @@ class Creole
246
249
  else
247
250
  @out << escape_html($&)
248
251
  end
249
- when /\A~([^\s])/
250
- @out << escape_html($1)
251
- when /\A\w+/
252
+ when /\A([:alpha:]|[:digit:])+/
252
253
  @out << $&
253
254
  when /\A\s+/
254
255
  @out << ' ' if @out[-1,1] != ' '
@@ -258,10 +259,36 @@ class Creole
258
259
  toggle_tag 'em', $&
259
260
  when /\A\\\\/
260
261
  @out << '<br/>'
261
- when /./
262
- @out << escape_html($&)
263
262
  else
264
- raise CreoleError, "Parse error at #{str[0,30].inspect}"
263
+ if @extensions
264
+ case str
265
+ when /\A__/
266
+ toggle_tag 'u', $&
267
+ when /\A\-\-/
268
+ toggle_tag 'del', $&
269
+ when /\A\+\+/
270
+ toggle_tag 'ins', $&
271
+ when /\A\^\^/
272
+ toggle_tag 'sup', $&
273
+ when /\A\~\~/
274
+ toggle_tag 'sub', $&
275
+ when /\A\(R\)/i
276
+ @out << '&#174;'
277
+ when /\A\(C\)/i
278
+ @out << '&#169;'
279
+ when /\A~([^\s])/
280
+ @out << escape_html($1)
281
+ when /./
282
+ @out << escape_html($&)
283
+ end
284
+ else
285
+ case str
286
+ when /\A~([^\s])/
287
+ @out << escape_html($1)
288
+ when /./
289
+ @out << escape_html($&)
290
+ end
291
+ end
265
292
  end
266
293
  str = $'
267
294
  end
@@ -346,7 +373,7 @@ class Creole
346
373
  start_paragraph
347
374
  parse_inline($1)
348
375
  else
349
- raise CreoleError, "Parse error at #{str[0,30].inspect}"
376
+ raise "Parse error at #{str[0,30].inspect}"
350
377
  end
351
378
  #p [$&, $']
352
379
  str = $'
@@ -355,4 +382,4 @@ class Creole
355
382
  @out
356
383
  end
357
384
 
358
- end # class Creole
385
+ end
@@ -3,11 +3,15 @@ require 'creole'
3
3
  require 'cgi'
4
4
 
5
5
  class TestCreole < Test::Unit::TestCase
6
- def tc(html, creole)
7
- output = Creole.creolize(creole)
6
+ def tc(html, creole, options = {})
7
+ output = Creole.creolize(creole, options)
8
8
  assert html === output, "Parsing: #{creole.inspect}\nExpected: #{html.inspect}\n Was: #{output.inspect}"
9
9
  end
10
10
 
11
+ def tce(html, creole)
12
+ tc(html, creole, :extensions => true)
13
+ end
14
+
11
15
  def run_file(file)
12
16
  html = File.read(file.sub('.creole', '.html'))
13
17
  output = Creole.creolize(File.read(file))
@@ -629,4 +633,29 @@ class TestCreole < Test::Unit::TestCase
629
633
  tc("<p><strong>bold and</strong></p><table><tr><td>table</td></tr></table><p>end<strong></strong></p>",
630
634
  "**bold and\n|table|\nend**")
631
635
  end
636
+
637
+ def test_extensions
638
+ tc("<p>This is not __underlined__</p>",
639
+ "This is not __underlined__")
640
+
641
+ tce("<p>This is <u>underlined</u></p>",
642
+ "This is __underlined__")
643
+
644
+ tce("<p>This is <del>deleted</del></p>",
645
+ "This is --deleted--")
646
+
647
+ tce("<p>This is <ins>inserted</ins></p>",
648
+ "This is ++inserted++")
649
+
650
+ tce("<p>This is <sup>super</sup></p>",
651
+ "This is ^^super^^")
652
+
653
+ tce("<p>This is <sub>sub</sub></p>",
654
+ "This is ~~sub~~")
655
+
656
+ tce("<p>&#174;</p>", "(R)")
657
+ tce("<p>&#174;</p>", "(r)")
658
+ tce("<p>&#169;</p>", "(C)")
659
+ tce("<p>&#169;</p>", "(c)")
660
+ end
632
661
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: creole
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 5
10
- version: 0.3.5
9
+ - 6
10
+ version: 0.3.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lars Christensen