bb-ruby 0.9.8 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Gemfile.lock +3 -1
- data/History.txt +9 -1
- data/README.rdoc +14 -0
- data/Rakefile +1 -0
- data/lib/bb-ruby.rb +25 -7
- data/lib/bb-ruby/version.rb +1 -1
- data/test/bb-ruby_test.rb +64 -10
- metadata +5 -5
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 1.0 2013-05-9
|
2
|
+
|
3
|
+
* Enable Procs to be used in custom defined replacements
|
4
|
+
|
5
|
+
== 0.9.9 2013-02-2
|
6
|
+
|
7
|
+
* Dont insert any extra html tags if just using .to_html method
|
8
|
+
|
1
9
|
== 0.9.8 2012-10-03
|
2
10
|
|
3
11
|
* replace deprecated html <u> tag
|
@@ -54,4 +62,4 @@
|
|
54
62
|
|
55
63
|
* No major enhancements:
|
56
64
|
* Small point release for moving gem from Github to RubyForge
|
57
|
-
* Gem is no longer served from github via cpjolicoeur-bbruby. Gem is now served directly from Rubyforge via bb-ruby
|
65
|
+
* Gem is no longer served from github via cpjolicoeur-bbruby. Gem is now served directly from Rubyforge via bb-ruby
|
data/README.rdoc
CHANGED
@@ -55,6 +55,20 @@ Define your own translation, in order to be more flexible:
|
|
55
55
|
}
|
56
56
|
|
57
57
|
text.bbcode_to_html(my_blockquote)
|
58
|
+
|
59
|
+
Define Proc as replacement:
|
60
|
+
|
61
|
+
module BBRuby
|
62
|
+
@@tags = @@tags.merge({
|
63
|
+
'File' => [
|
64
|
+
/\[file(:.*)?=(.*?)\](.*?)\[\/file\1?\]/mi,
|
65
|
+
lambda{ |e| "<div class="file"><p><cite>#{e[3]}</cite></p><blockquote>#{file_read_method(e[2])}</blockquote></div>"},
|
66
|
+
'File content with citation',
|
67
|
+
'[file=script.rb]Script Caption[/file]',
|
68
|
+
:file
|
69
|
+
],
|
70
|
+
})
|
71
|
+
end
|
58
72
|
|
59
73
|
You can also use the simple_format method of ActionPack by using the *_with_formatting methods:
|
60
74
|
|
data/Rakefile
CHANGED
data/lib/bb-ruby.rb
CHANGED
@@ -10,7 +10,7 @@ module BBRuby
|
|
10
10
|
# tag name => [regex, replace, description, example, enable/disable symbol]
|
11
11
|
'Bold' => [
|
12
12
|
/\[b(:.*)?\](.*?)\[\/b\1?\]/mi,
|
13
|
-
'<strong>\2</strong>',
|
13
|
+
'<strong>\2</strong>', #Proc alternative for example: lambda{ |e| "<strong>#{e[2]}</strong>" }
|
14
14
|
'Embolden text',
|
15
15
|
'Look [b]here[/b]',
|
16
16
|
:bold],
|
@@ -252,10 +252,10 @@ module BBRuby
|
|
252
252
|
|
253
253
|
# parse spacing
|
254
254
|
text.gsub!( /\r\n?/, "\n" )
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
255
|
+
|
256
|
+
text.gsub!(/\[quote\]/, '<fieldset><legend>Quote:</legend><blockquote>')
|
257
|
+
text.gsub!(/\[quote(:.*)?="?(.*?)"?\]/, '<fieldset><legend>Quote: \2</legend><blockquote>')
|
258
|
+
text.gsub!(/\[\/quote\]/, '</blockquote></fieldset>')
|
259
259
|
|
260
260
|
# return markup
|
261
261
|
text
|
@@ -298,10 +298,28 @@ module BBRuby
|
|
298
298
|
# parse bbcode tags
|
299
299
|
case method
|
300
300
|
when :enable
|
301
|
-
tags_definition.each_value
|
301
|
+
tags_definition.each_value do |t|
|
302
|
+
if tags.include?( t[4] )
|
303
|
+
if t[1].class == String
|
304
|
+
text.gsub!( t[0], t[1] ) # just replace if replacement is String
|
305
|
+
else
|
306
|
+
text.gsub!( t[0] ){ t[1].call($~) } # call replacement
|
307
|
+
# It may be Proc or lambda with one argument
|
308
|
+
# Argument is MatchData. See 'Bold' tag name for example.
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
302
312
|
when :disable
|
303
313
|
# this works nicely because the default is disable and the default set of tags is [] (so none disabled) :)
|
304
|
-
tags_definition.each_value
|
314
|
+
tags_definition.each_value do |t|
|
315
|
+
unless tags.include?( t[4] )
|
316
|
+
if t[1].class == String
|
317
|
+
text.gsub!( t[0], t[1] )
|
318
|
+
else
|
319
|
+
text.gsub!( t[0] ){ t[1].call($~) }
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
305
323
|
end
|
306
324
|
|
307
325
|
text
|
data/lib/bb-ruby/version.rb
CHANGED
data/test/bb-ruby_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
#coding: utf-8
|
3
3
|
|
4
|
-
require
|
4
|
+
require 'test_helper.rb'
|
5
5
|
|
6
6
|
class TestBBRuby < Test::Unit::TestCase
|
7
7
|
|
@@ -9,20 +9,20 @@ class TestBBRuby < Test::Unit::TestCase
|
|
9
9
|
assert_equal '<strong>simple</strong>', '[b]simple[/b]'.bbcode_to_html
|
10
10
|
assert_equal '<strong>simple</strong>', '[b:7a9ca2c5c3]simple[/b:7a9ca2c5c3]'.bbcode_to_html
|
11
11
|
assert_equal %Q(<strong>simple</strong>), BBRuby.to_html( %Q([b:7a9ca2c5c3]simple[/b:7a9ca2c5c3]) )
|
12
|
-
assert_equal "<strong>line 1
|
13
|
-
assert_equal "<strong>1. text 1:</strong> text 2
|
12
|
+
assert_equal "<strong>line 1\nline 2</strong>", "[b:7a9ca2c5c3]line 1\nline 2[/b:7a9ca2c5c3]".bbcode_to_html
|
13
|
+
assert_equal "<strong>1. text 1:</strong> text 2\n<strong>2. text 3</strong>", "[b:post_uid0]1. text 1:[/b:post_uid0] text 2\n[b:post_uid0]2. text 3[/b:post_uid0]".bbcode_to_html
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_em
|
17
17
|
assert_equal '<em>simple</em>', '[i]simple[/i]'.bbcode_to_html
|
18
18
|
assert_equal '<em>simple</em>', '[i:7a9ca2c5c3]simple[/i:7a9ca2c5c3]'.bbcode_to_html
|
19
|
-
assert_equal "<em>line 1
|
19
|
+
assert_equal "<em>line 1\nline 2</em>", "[i:7a9ca2c5c3]line 1\nline 2[/i:7a9ca2c5c3]".bbcode_to_html
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_u
|
23
23
|
assert_equal '<span style="text-decoration:underline;">simple</span>', '[u]simple[/u]'.bbcode_to_html
|
24
24
|
assert_equal '<span style="text-decoration:underline;">simple</span>', '[u:7a9ca2c5c3]simple[/u:7a9ca2c5c3]'.bbcode_to_html
|
25
|
-
assert_equal
|
25
|
+
assert_equal %Q(<span style="text-decoration:underline;">line 1\nline 2</span>), "[u:7a9ca2c5c3]line 1\nline 2[/u:7a9ca2c5c3]".bbcode_to_html
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_del
|
@@ -40,7 +40,7 @@ class TestBBRuby < Test::Unit::TestCase
|
|
40
40
|
def test_code
|
41
41
|
assert_equal '<code>simple</code>', '[code]simple[/code]'.bbcode_to_html
|
42
42
|
assert_equal '<code>simple</code>', '[code:7a9ca2c5c3]simple[/code:7a9ca2c5c3]'.bbcode_to_html
|
43
|
-
assert_equal "<code>var bxi = 0
|
43
|
+
assert_equal "<code>var bxi = 0;\n//Holds current speed of scrolling menu</code>", "[code:1:91cbdd72b7]var bxi = 0;\n//Holds current speed of scrolling menu[/code:1:91cbdd72b7]".bbcode_to_html
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_size
|
@@ -113,7 +113,7 @@ class TestBBRuby < Test::Unit::TestCase
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def test_double_quote
|
116
|
-
assert_equal '<fieldset><legend>Kitten</legend><blockquote><fieldset><legend>creatiu
|
116
|
+
assert_equal '<fieldset><legend>Kitten</legend><blockquote><fieldset><legend>Quote: "creatiu"</legend><blockquote>f1</blockquote></fieldset>f2</blockquote></fieldset>',
|
117
117
|
'[quote:26fe26a6a9="Kitten"][quote:26fe26a6a93="creatiu"]f1[/quote:26fe26a6a93]f2[/quote:26fe26a6a9]'.bbcode_to_html.bbcode_to_html({}, false, :disable)
|
118
118
|
end
|
119
119
|
|
@@ -121,7 +121,7 @@ class TestBBRuby < Test::Unit::TestCase
|
|
121
121
|
assert_equal '<a href="http://google.com">Google</a>', '[url=http://google.com]Google[/url]'.bbcode_to_html
|
122
122
|
assert_equal '<a href="http://google.com">http://google.com</a>', '[url]http://google.com[/url]'.bbcode_to_html
|
123
123
|
assert_equal '<a href="http://www.altctrlsupr.com/dmstk/kdd070803/00.html"> ABRIR ALBUM </a>','[URL=http://www.altctrlsupr.com/dmstk/kdd070803/00.html] ABRIR ALBUM [/URL]'.bbcode_to_html
|
124
|
-
assert_equal %Q(<a href="http://www.altctrlsupr.com/dmstk/kdd070803/00.html"> ABRIR
|
124
|
+
assert_equal %Q(<a href="http://www.altctrlsupr.com/dmstk/kdd070803/00.html"> ABRIR\nALBUM </a>),"[URL=http://www.altctrlsupr.com/dmstk/kdd070803/00.html] ABRIR\nALBUM [/URL]".bbcode_to_html
|
125
125
|
assert_equal '<a href="http://www.urimalet.com/cadaverex.mp3">aha</a>', "[URL=http://www.urimalet.com/cadaverex.mp3]aha[/URL]".bbcode_to_html
|
126
126
|
# allow quoted urls:
|
127
127
|
assert_equal '<a href="http://www.apple.com">aha</a>', '[URL="http://www.apple.com"]aha[/URL]'.bbcode_to_html
|
@@ -195,7 +195,7 @@ class TestBBRuby < Test::Unit::TestCase
|
|
195
195
|
|
196
196
|
def test_to_html_with_no_markup
|
197
197
|
foo = "first paragraph\n\nsecond paragraph\nwith a linebreak"
|
198
|
-
assert_equal
|
198
|
+
assert_equal foo, foo.bbcode_to_html
|
199
199
|
end
|
200
200
|
|
201
201
|
def test_to_html_with_formatting
|
@@ -204,7 +204,7 @@ class TestBBRuby < Test::Unit::TestCase
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def test_self_tag_list
|
207
|
-
assert_equal
|
207
|
+
assert_equal 33, BBRuby.tag_list.size
|
208
208
|
end
|
209
209
|
|
210
210
|
def test_redefinition_of_tag_html
|
@@ -256,4 +256,58 @@ class TestBBRuby < Test::Unit::TestCase
|
|
256
256
|
assert_equal "this [b]should not do formatting[/i]", "this [b]should not do formatting[/i]".bbcode_to_html
|
257
257
|
end
|
258
258
|
|
259
|
+
## proc tests below
|
260
|
+
def test_redefinition_replacement_to_proc # contrived example
|
261
|
+
mydef = {
|
262
|
+
'Quote' => [
|
263
|
+
/\[quote(:.*)?=(?:")?(.*?)(?:")?\](.*?)\[\/quote\1?\]/mi,
|
264
|
+
lambda { |e| "<div class=\"quote\"><p><cite>#{e[2]}</cite></p><blockquote>#{e[3]}</blockquote></div>"},
|
265
|
+
'Quote with citation (lambda)',
|
266
|
+
nil, nil,
|
267
|
+
:quote]
|
268
|
+
}
|
269
|
+
assert_equal '<div class="quote"><p><cite>Who</cite></p><blockquote>said that</blockquote></div>', '[quote=Who]said that[/quote]'.bbcode_to_html(mydef)
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_proc_modifer # sum as example
|
273
|
+
mydef = {
|
274
|
+
'Sum (lambda)' => [
|
275
|
+
/\[sum(:.*)?=(?:")?(.*?)(?:")?\](\d+?)\+(\d+?)\[\/sum\1?\]/mi,
|
276
|
+
lambda { |e| "<span class=\"#{e[2]}\">#{e[3].to_i + e[4].to_i}</span>"},
|
277
|
+
'Sum (lambda)',
|
278
|
+
nil, nil,
|
279
|
+
:sum]
|
280
|
+
}
|
281
|
+
assert_equal '<span class="sum">4</span>', '[sum=sum]2+2[/sum]'.bbcode_to_html(mydef)
|
282
|
+
end
|
283
|
+
|
284
|
+
# for next test
|
285
|
+
def sum a, b; a + b end
|
286
|
+
|
287
|
+
def test_proc_include_method # sum as example
|
288
|
+
mydef = {
|
289
|
+
'Sum (lambda)' => [
|
290
|
+
/\[sum(:.*)?=(?:")?(.*?)(?:")?\](\d+?)\+(\d+?)\[\/sum\1?\]/mi,
|
291
|
+
lambda { |e| "<span class=\"#{e[2]}\">#{sum(e[3].to_i, e[4].to_i)}</span>"},
|
292
|
+
'Sum (lambda)',
|
293
|
+
nil, nil,
|
294
|
+
:sum]
|
295
|
+
}
|
296
|
+
assert_equal '<span class="sum">4</span>', '[sum=sum]2+2[/sum]'.bbcode_to_html(mydef)
|
297
|
+
end
|
298
|
+
|
299
|
+
# Proc.new{} as opposed to lambda{} may have not params
|
300
|
+
def test_proc_instead_of_lambda # copyright
|
301
|
+
copyright = "2913-3013 The Company, Ltd."
|
302
|
+
mydef = {
|
303
|
+
'copy' => [
|
304
|
+
/\[copy\/\]/mi,
|
305
|
+
Proc.new{"<span class=\"copy\">© #{copyright}</span>"},
|
306
|
+
'Copy (Proc)',
|
307
|
+
nil, nil,
|
308
|
+
:copy]
|
309
|
+
}
|
310
|
+
assert_equal '<span class="copy">© 2913-3013 The Company, Ltd.</span>', '[copy/]'.bbcode_to_html(mydef)
|
311
|
+
end
|
312
|
+
|
259
313
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bb-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.8
|
5
4
|
prerelease:
|
5
|
+
version: '1.0'
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Craig P. Jolicoeur
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: BBCode for Ruby
|
15
15
|
email:
|
@@ -36,20 +36,20 @@ rdoc_options: []
|
|
36
36
|
require_paths:
|
37
37
|
- lib
|
38
38
|
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
39
|
requirements:
|
41
40
|
- - ! '>='
|
42
41
|
- !ruby/object:Gem::Version
|
43
42
|
version: '0'
|
44
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
43
|
none: false
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
45
|
requirements:
|
47
46
|
- - ! '>='
|
48
47
|
- !ruby/object:Gem::Version
|
49
48
|
version: '0'
|
49
|
+
none: false
|
50
50
|
requirements: []
|
51
51
|
rubyforge_project:
|
52
|
-
rubygems_version: 1.8.
|
52
|
+
rubygems_version: 1.8.23
|
53
53
|
signing_key:
|
54
54
|
specification_version: 3
|
55
55
|
summary: BBRuby is a BBCode implementation for Ruby. It will convert strings with
|