rbbcode 1.1.0 → 1.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05a9ae1e74abb5b265316ce91cefd13b76e6f484040e37b10c7f39a86e44695f
4
- data.tar.gz: 40a4650b699a0bd33dd35d285eb5f9ef2f3962b0628601be3702362495217bb7
3
+ metadata.gz: 3894f3d4d56f04b0c0d7ad5fa194eef37e9933f49993dc9ddeb243b4bdf1bda9
4
+ data.tar.gz: f0167cb15f14b2c37dbbd55205e4e3b08275f26b8d8c9d9e9a95c684741c451f
5
5
  SHA512:
6
- metadata.gz: defb74848c8d0632853ea9e3437188a1411978e523079778f29cd73826b3544937e14a36dde7144329d96d2886ca7275afd214af3bf5c8ba9c34da246a628743
7
- data.tar.gz: a67405feba360b5c719bb1b0f958d2187efe8b217eb52e2635b8b41f3fbc66cd47b3c83c48ea53cae18d63298260bb2e4cd1691e0026b9c0a70e1d631d433ced
6
+ metadata.gz: 1a40401398844f12b7b874cedfc173bb98a887bc4dad718d2d30ece44b338060c84441e87265b12b91e777608a94b29f7eb9f074f49f810acb1f2dc1de9e01be
7
+ data.tar.gz: f0712fb419b27353fd569ce150adf74c47ef2d45cc6ed16dc80bcb6bd759354e4b3233596dfa942cda9845cb288d6a720b7a73dc2dff78b16538c17a8736b315
@@ -7,7 +7,7 @@ class RbbCode
7
7
  end
8
8
 
9
9
  module RecursiveConversion
10
- def recursively_convert(node, output_method, depth = 0)
10
+ def recursively_convert(node, output_method, options, depth = 0)
11
11
  if node.terminal?
12
12
  if node.respond_to?(output_method)
13
13
  # This is a terminal node with a custom implementation of the output
@@ -23,12 +23,12 @@ class RbbCode
23
23
  if node.respond_to?(output_method)
24
24
  # This is a non-terminal node with a custom implementation of the
25
25
  # output method.
26
- node.send(output_method)
26
+ node.send(output_method, options)
27
27
  else
28
28
  # This is a non-terminal node without a custom implementation of the
29
29
  # output method. Convert all its child nodes and concatenate the results.
30
30
  node.elements.collect do |sub_node|
31
- recursively_convert(sub_node, output_method, depth + 1)
31
+ recursively_convert(sub_node, output_method, options, depth + 1)
32
32
  end.join
33
33
  end
34
34
  end
@@ -36,32 +36,32 @@ class RbbCode
36
36
  end
37
37
 
38
38
  module DocumentNode
39
- def to_html
40
- contents.elements.collect { |p| p.to_html }.join
39
+ def to_html(options)
40
+ contents.elements.collect { |p| p.to_html(options) }.join
41
41
  end
42
42
 
43
- def to_markdown
44
- contents.elements.collect { |p| p.to_markdown }.join
43
+ def to_markdown(options)
44
+ contents.elements.collect { |p| p.to_markdown(options) }.join
45
45
  end
46
46
  end
47
47
 
48
48
  module ParagraphNode
49
49
  include RecursiveConversion
50
50
 
51
- def to_html
51
+ def to_html(options)
52
52
  # Convert all child nodes, concatenate the results,
53
53
  # and wrap the concatenated HTML in <p> tags.
54
54
  html = elements.collect do |node|
55
- recursively_convert(node, :to_html)
55
+ recursively_convert(node, :to_html, options)
56
56
  end.join
57
57
  "\n<p>" + html + "</p>\n"
58
58
  end
59
59
 
60
- def to_markdown
60
+ def to_markdown(options)
61
61
  # Convert all child nodes, concatenate the results,
62
62
  # and append newline characters.
63
63
  markdown = elements.collect do |node|
64
- recursively_convert(node, :to_markdown)
64
+ recursively_convert(node, :to_markdown, options)
65
65
  end.join
66
66
  markdown + "\n\n"
67
67
  end
@@ -70,12 +70,12 @@ class RbbCode
70
70
  module BlockquoteNode
71
71
  include RecursiveConversion
72
72
 
73
- def to_html
73
+ def to_html(options)
74
74
  # Detect paragraph breaks and wrap the result in <blockquote> tags.
75
75
  paragraphs = []
76
76
  cur_para = ''
77
77
  lines.elements.each do |line|
78
- inner = recursively_convert(line, :to_html)
78
+ inner = recursively_convert(line, :to_html, options)
79
79
  unless inner.blank?
80
80
  cur_para << inner
81
81
  if line.post_breaks == 1
@@ -93,11 +93,11 @@ class RbbCode
93
93
  "\n<blockquote>" + inner + "</blockquote>\n"
94
94
  end
95
95
 
96
- def to_markdown
96
+ def to_markdown(options)
97
97
  # Add a > character per line, preserving linebreaks as they are in the source.
98
98
  # Then append two newlines.
99
99
  '> ' + lines.elements.inject('') do |output, line|
100
- inner_markdown = recursively_convert(line.contents, :to_markdown)
100
+ inner_markdown = recursively_convert(line.contents, :to_markdown, options)
101
101
  output + inner_markdown + ("\n> " * line.post_breaks)
102
102
  end + "\n\n"
103
103
  end
@@ -114,33 +114,33 @@ class RbbCode
114
114
  module ListNode
115
115
  include RecursiveConversion
116
116
 
117
- def to_html
117
+ def to_html(options)
118
118
  # Convert the :contents child node (defined in the .treetop file)
119
119
  # and wrap the result in <ul> tags.
120
- "\n<ul>" + recursively_convert(items, :to_html) + "</ul>\n"
120
+ "\n<ul>" + recursively_convert(items, :to_html, options) + "</ul>\n"
121
121
  end
122
122
 
123
- def to_markdown
123
+ def to_markdown(options)
124
124
  # Convert the :contents child node (defined in the .treetop file).
125
125
  # (Unlike with HTML, no outer markup needed.) Then append an extra
126
126
  # newline, for a total of two at the end.
127
- recursively_convert(items, :to_markdown) + "\n"
127
+ recursively_convert(items, :to_markdown, options) + "\n"
128
128
  end
129
129
  end
130
130
 
131
131
  module ListItemNode
132
132
  include RecursiveConversion
133
133
 
134
- def to_html
134
+ def to_html(options)
135
135
  # Convert the :contents child node (defined in the .treetop file)
136
136
  # and wrap the result in <li> tags.
137
- "\n<li>" + recursively_convert(contents, :to_html) + "</li>\n"
137
+ "\n<li>" + recursively_convert(contents, :to_html, options) + "</li>\n"
138
138
  end
139
139
 
140
- def to_markdown
140
+ def to_markdown(options)
141
141
  # Convert the :contents child node (defined in the .treetop file)
142
142
  # and add * characters.
143
- "* " + recursively_convert(contents, :to_html) + "\n"
143
+ "* " + recursively_convert(contents, :to_html, options) + "\n"
144
144
  end
145
145
  end
146
146
 
@@ -150,7 +150,7 @@ class RbbCode
150
150
  module URLTagNode
151
151
  include Attributes
152
152
 
153
- def url_to_html
153
+ def url_to_html(options)
154
154
  # The :url child node (defined in the .treetop file) may or may not exist,
155
155
  # depending on how the link is formatted in the BBCode source.
156
156
  if respond_to?(:url) and respond_to?(:text)
@@ -162,7 +162,7 @@ class RbbCode
162
162
  end
163
163
  end
164
164
 
165
- def url_to_markdown
165
+ def url_to_markdown(options)
166
166
  if respond_to?(:url) and respond_to?(:text)
167
167
  # This is a URL tag formatted like [url=http://example.com]Example[/url].
168
168
  '[' + text.text_value + '](' + strip_quotes(url.text_value) + ')'
@@ -176,17 +176,17 @@ class RbbCode
176
176
  # You won't find this module in the .treetop file. Instead, it's effectively a specialization
177
177
  # of TagNode, which calls to ImgTagNode when processing an img tag.
178
178
  module ImgTagNode
179
- def img_to_html
179
+ def img_to_html(options)
180
180
  '<img src="' + inner_bbcode + '" alt="Image"/>'
181
181
  end
182
182
 
183
- def img_to_markdown
183
+ def img_to_markdown(options)
184
184
  "![Image](#{inner_bbcode})"
185
185
  end
186
186
  end
187
187
 
188
188
  module UTagNode
189
- def u_to_markdown
189
+ def u_to_markdown(options)
190
190
  # Underlining is unsupported in Markdown. So we just ignore [u] tags.
191
191
  inner_bbcode
192
192
  end
@@ -216,27 +216,27 @@ class RbbCode
216
216
  contents.elements.collect { |e| e.text_value }.join
217
217
  end
218
218
 
219
- def inner_html
219
+ def inner_html(options)
220
220
  contents.elements.collect do |node|
221
- recursively_convert(node, :to_html)
221
+ recursively_convert(node, :to_html, options)
222
222
  end.join
223
223
  end
224
224
 
225
- def inner_markdown
225
+ def inner_markdown(options)
226
226
  contents.elements.collect do |node|
227
- recursively_convert(node, :to_markdown)
227
+ recursively_convert(node, :to_markdown, options)
228
228
  end.join
229
229
  end
230
230
 
231
- def wrap_html(t)
232
- "<#{t}>" + inner_html + "</#{t}>"
231
+ def wrap_html(t, options)
232
+ "<#{t}>" + inner_html(options) + "</#{t}>"
233
233
  end
234
234
 
235
- def wrap_markdown(t)
236
- t + inner_markdown + t
235
+ def wrap_markdown(t, options)
236
+ t + inner_markdown(options) + t
237
237
  end
238
238
 
239
- def convert(output_format)
239
+ def convert(output_format, options)
240
240
  # Consult TAG_MAPPINGS to decide how to process this type of tag.
241
241
  t = TAG_MAPPINGS[output_format][tag_name]
242
242
  if t.nil?
@@ -245,41 +245,41 @@ class RbbCode
245
245
  # This type of tag requires more than just a simple mapping from one tag name
246
246
  # to another. So we invoke a separate Ruby module.
247
247
  extend(t)
248
- send("#{tag_name}_to_#{output_format}")
248
+ send("#{tag_name}_to_#{output_format}", options)
249
249
  # Thus, if our tag_name is"url, and TAG_MAPPINGS points us to URLTagNode,
250
250
  # that module must define url_to_html.
251
251
  else
252
252
  # For this type of tag, a simple mapping from the tag name to a string (such as
253
253
  # <i>) suffices.
254
- send("wrap_#{output_format}", t)
254
+ send("wrap_#{output_format}", t, options)
255
255
  end
256
256
  end
257
257
 
258
- def to_html
259
- convert :html
258
+ def to_html(options)
259
+ convert :html, options
260
260
  end
261
261
 
262
- def to_markdown
263
- convert :markdown
262
+ def to_markdown(options)
263
+ convert :markdown, options
264
264
  end
265
265
  end
266
266
 
267
267
  module SingleBreakNode
268
- def to_html
268
+ def to_html(options)
269
269
  '<br/>'
270
270
  end
271
271
 
272
- def to_markdown
272
+ def to_markdown(options)
273
273
  "\n"
274
274
  end
275
275
  end
276
276
 
277
277
  module LiteralTextNode
278
- def to_html
278
+ def to_html(options)
279
279
  text_value
280
280
  end
281
281
 
282
- def to_markdown
282
+ def to_markdown(options)
283
283
  text_value
284
284
  end
285
285
  end
data/lib/rbbcode.rb CHANGED
@@ -29,23 +29,31 @@ class RbbCode
29
29
  def initialize(options = {})
30
30
  @options = {
31
31
  :output_format => :html,
32
+ :emoticons => false,
32
33
  :sanitize => true,
33
34
  :sanitize_config => RbbCode::DEFAULT_SANITIZE_CONFIG
34
35
  }.merge(options)
35
36
  end
36
37
 
37
- def convert(bb_code)
38
+ def convert(bb_code, options = {})
39
+ # Options passed to #convert will override any options passed to .new.
40
+ options = @options.merge(options)
41
+ output_format = options.delete(:output_format)
42
+ emoticons = options.delete(:emoticons)
43
+ sanitize = options.delete(:sanitize)
44
+ sanitize_config = options.delete(:sanitize_config)
45
+
38
46
  # Collapse CRLFs to LFs. Then replace any solitary CRs with LFs.
39
47
  bb_code = bb_code.gsub("\r\n", "\n").gsub("\r", "\n")
40
48
  # Add linebreaks before and after so that paragraphs etc. can be recognized.
41
49
  bb_code = "\n\n" + bb_code + "\n\n"
42
- output = self.class.parser_class.new.parse(bb_code).send("to_#{@options[:output_format]}")
43
- if @options[:emoticons]
50
+ output = self.class.parser_class.new.parse(bb_code).send("to_#{output_format}", options)
51
+ if emoticons
44
52
  output = convert_emoticons(output)
45
53
  end
46
54
  # Sanitization works for HTML only.
47
- if @options[:output_format] == :html and @options[:sanitize]
48
- Sanitize.clean(output, @options[:sanitize_config])
55
+ if output_format == :html and sanitize
56
+ Sanitize.clean(output, sanitize_config)
49
57
  else
50
58
  output
51
59
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbcode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarrett Colby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-20 00:00:00.000000000 Z
11
+ date: 2023-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -28,72 +28,78 @@ dependencies:
28
28
  name: sanitize
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6'
31
34
  - - ">="
32
35
  - !ruby/object:Gem::Version
33
- version: '0'
36
+ version: 6.0.2
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '6'
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: 6.0.2
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: minitest
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ">="
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '0'
53
+ version: '5'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ">="
58
+ - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
60
+ version: '5'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: minitest-reporters
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ">="
65
+ - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '0'
67
+ version: '1'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ">="
72
+ - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '0'
74
+ version: '1'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: lorax
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - ">="
79
+ - - '='
74
80
  - !ruby/object:Gem::Version
75
81
  version: 0.3.0.rc2
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - ">="
86
+ - - '='
81
87
  - !ruby/object:Gem::Version
82
88
  version: 0.3.0.rc2
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: rake
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - ">="
93
+ - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '0'
95
+ version: '13'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - ">="
100
+ - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '0'
102
+ version: '13'
97
103
  description: Converts BBCode to HTML. Gracefully handles invalid input.
98
104
  email: jarrett@madebyhq.com
99
105
  executables: []