ubbparser 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/ubbparser.rb +97 -90
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWNkMzdhZmM1MTE1ZjAyYzRiZjhiNGU1YjgwZTJiODZiYTU2M2UxOQ==
4
+ ZjVmZTQ5NWE1Y2FkMzRhNDE5ODRmMjMzYzVkYmRlZjA5MzgyYzYyZQ==
5
5
  data.tar.gz: !binary |-
6
- YjgwM2Y4MGM4M2Y0NmMwN2VhNmFjN2NjNTVhNzE0OGE4MmFhZWU3Zg==
6
+ NmY0MzIwNjkxYzQxYjBmNjA5NzcxMDMwMjNiMTQ5MDg2NmE5Yzk3Zg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzA5Y2MyMjdlYTVlNTQyMDdkOGExYTIwNzgxOWRhYzNjZmQxNjY0YmI1ZTU3
10
- MzUwNzRkNWUyNTM1MzMyZDczZmE3NzA3MTExN2ZkYjFjMmYzMTE5ZTIwYWJj
11
- NWJjOWJmYjdjMTJkMTU2ZDRlNGEyOTViODA0ZDhkOTY3MjFiN2M=
9
+ NDQ1Y2ZmODc1MmNmZmNlNzdlMGIyOTllZDczZDkxN2U1YzQyY2VjNTk3NzU5
10
+ NDkxNWU3YmY1OGM5MGVlNTA5ZTdjYmZlYmQwOWQzMTNlMDBhMzliNmY3MDIx
11
+ ZTVlYjMwZGRkOTlhZmRjOTg3NDkyNmI2MGNmMjgwNGZlZmYyNTM=
12
12
  data.tar.gz: !binary |-
13
- OTRiNzBlMGE0MGQ1ZTJjZTIwMjkxOTA4YTIwODAyODk3MTE4M2NiNjI0OGI0
14
- NWFlMjQ5NWNhYzVkM2ZhZTQyYzc4ODY2ZmFiY2QwNDUwMTdlN2FjOTk5OTE5
15
- NDI4ZTY1MmM2MWM0YTIyYjI2MTk4MTg2NjZiZjkxNjI1NDk4ZTg=
13
+ ZGY2N2ExOGYzNmEwMzUxOTYxYzljYjc2ZmYwZTEwODJjOWFlNmU3MzI1MzUw
14
+ YWFiZDY1MmQ0ZTlmMzQ5YjVkMWI0ZTYxYjA1MzBhZDkzNDBhMjYxM2NjZTAw
15
+ YjdjOTFkZDg1NTM1NzdkNjdkYTVmYTJmMTIyNTJkNDMxNGYxN2E=
data/lib/ubbparser.rb CHANGED
@@ -27,19 +27,25 @@ require 'cgi'
27
27
  #noinspection RubyUnusedLocalVariable RubyTooManyMethods
28
28
  module UBBParser
29
29
 
30
+ extend self
31
+
32
+ def inline_elements
33
+ %w(b big i small tt abbr acronym cite code dfn em kbd strong samp var a bdo br img map object q script span sub sup button input label select textarea)
34
+ end
35
+
30
36
  # Mapping can be used to allow simplified use of files
31
37
  # [img]123123[/img] would have the same effect as [img]files/download/123123[/img]
32
38
  #noinspection RubyClassVariableUsageInspection
33
- def self.set_file_url_convert_method(callback_method)
39
+ def set_file_url_convert_method(callback_method)
34
40
  @@file_url_convert_method = callback_method
35
41
  end
36
42
 
37
43
  #noinspection RubyClassVariableUsageInspection
38
44
  @@file_url_convert_method = nil
39
45
 
40
- # Converts a strings containing key-value-list into a hash. This function is mostly used by the parser itself.
46
+ # Converts a strings containing key-value-list into a hash. This function is mostly used by the parser it
41
47
  # Attributes are given to the render methods as a hash.
42
- def self.attrib_str_to_hash(attrib_str)
48
+ def attrib_str_to_hash(attrib_str)
43
49
  result = {:class_attrib_str => attrib_str.gsub(/^=/, '')}
44
50
 
45
51
  attrib_str.insert(0, 'default') if (attrib_str[0] == '=')
@@ -54,7 +60,7 @@ module UBBParser
54
60
  # [:denied_keys] An array of keys that are denied
55
61
  # ===Example:
56
62
  # UBBParser.hash_to_attrib_str({}, {:allowed_keys => [:class, :src, :width]})
57
- def self.hash_to_attrib_str(hash, options = {})
63
+ def hash_to_attrib_str(hash, options = {})
58
64
  hash.delete_if { |k, _| !options[:allowed_keys].include?(k) } if options[:allowed_keys].is_a?(Array)
59
65
  hash.delete_if { |k, _| options[:denied_keys].include?(k) } if options[:denied_keys].is_a?(Array)
60
66
  return hash.map { |k, v| v = v.to_s.gsub(/\\|'/) { |c| "\\#{c}" }; "#{k}='#{v}'" }.join(' ')
@@ -69,7 +75,7 @@ module UBBParser
69
75
  # {:class_code: "prettify linenums"} => <pre class='prettify linenums'>...</pre>
70
76
  #
71
77
  # When developing your own tags, you can also define your own parse_options.
72
- def self.parse(text, parse_options = {})
78
+ def parse(text, parse_options = {})
73
79
  result = ''
74
80
  scnr = StringScanner.new(text)
75
81
  parse_options.each { |k, v| v.to_s.gsub(/-/, '_').gsub(/[^\w]+/, '') if (k.to_s.start_with?('class_')); v }
@@ -94,10 +100,10 @@ module UBBParser
94
100
  scnr.skip(/\[/)
95
101
  code = scnr.scan(/[\w-]*/)
96
102
  method_name = ('render_' + code.to_s.gsub(/-/, '_')).to_sym
97
- if ((scnr.eos?) || (code == "") || (!self.respond_to?(method_name)))
103
+ if ((scnr.eos?) || (code == "") || (!respond_to?(method_name)))
98
104
  result << '[' + code
99
105
  else
100
- attributes = self.attrib_str_to_hash(scnr.scan(/[^\]]*/))
106
+ attributes = attrib_str_to_hash(scnr.scan(/[^\]]*/))
101
107
  scnr.skip(/]/)
102
108
  inner_text = scnr.scan_until(/\[\/#{code}\]/)
103
109
  if inner_text.nil? #no closing tag found
@@ -106,9 +112,10 @@ module UBBParser
106
112
  else
107
113
  inner_text.chomp!("[/#{code}]")
108
114
  end
109
- method_result = self.send(method_name, inner_text, attributes, parse_options).to_s
115
+ method_result = send(method_name, inner_text, attributes, parse_options).to_s
110
116
  result << method_result
111
- scnr.skip(/\n?/)
117
+ last_html_tag = method_result.match('</\w+>$').to_s
118
+ scnr.skip(/\n?/) unless (inline_elements.include?(last_html_tag)) # Skip next newline if last tag was not inline element
112
119
  end
113
120
  end
114
121
  end
@@ -117,95 +124,95 @@ module UBBParser
117
124
 
118
125
  # Returns true if the given value matches the given regular expression.
119
126
  # :category: Validation methods
120
- def self.matches_regexp?(value, regexp)
127
+ def matches_regexp?(value, regexp)
121
128
  return !value.to_s.match(regexp).nil?
122
129
  end
123
130
 
124
131
  # Returns true if the given value is a valid email address
125
132
  # :category: Validation methods
126
- def self.is_email?(value)
133
+ def is_email?(value)
127
134
  return false unless value.is_a?(String)
128
- return self.matches_regexp?(value, /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i)
135
+ return matches_regexp?(value, /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i)
129
136
  end
130
137
 
131
138
  # Returns true if the given value is a valid url
132
139
  # :category: Validation methods
133
- def self.is_url?(value)
134
- return self.matches_regexp?(value, /^(http|https)\:\/\/([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))*$/)
140
+ def is_url?(value)
141
+ return matches_regexp?(value, /^(http|https)\:\/\/([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))*$/)
135
142
  end
136
143
 
137
144
  # Converts the [anchor=myname]...[/anchor] tag into <a name='myname'>...</a>. Use the :class_anchor parse option to define html classes.
138
145
  # :category: Render methods
139
- def self.render_anchor(inner_text, attributes = {}, parse_options = {})
146
+ def render_anchor(inner_text, attributes = {}, parse_options = {})
140
147
  name = attributes[:default] || ''
141
148
  inner_text.gsub!(/\\|'/) { |c| "\\#{c}" }
142
149
  css_class = parse_options[:class_anchor] || 'ubb-anchor'
143
- "<a name='#{name}' class='#{css_class}'>#{self.parse(inner_text, parse_options)}</a>"
150
+ "<a name='#{name}' class='#{css_class}'>#{parse(inner_text, parse_options)}</a>"
144
151
  end
145
152
 
146
153
  # Converts the url in the inner_text into a webplayer, playing the audio file.
147
154
  # :category: Render methods
148
- def self.render_audio(inner_text, attributes = {}, parse_options = {})
155
+ def render_audio(inner_text, attributes = {}, parse_options = {})
149
156
  # Not yet implemented
150
157
  end
151
158
 
152
159
  # Renders the inner_text bold (using <strong>).
153
160
  # :category: Render methods
154
- def self.render_b(inner_text, attributes = {}, parse_options = {})
155
- "<strong>#{self.parse(inner_text, parse_options)}</strong>"
161
+ def render_b(inner_text, attributes = {}, parse_options = {})
162
+ "<strong>#{parse(inner_text, parse_options)}</strong>"
156
163
  end
157
164
 
158
165
  # Converts [br] into a <br />.
159
166
  # :category: Render methods
160
- def self.render_br(inner_text, attributes = {}, parse_options = {})
161
- "<br />#{self.parse(inner_text, parse_options)}"
167
+ def render_br(inner_text, attributes = {}, parse_options = {})
168
+ "<br />#{parse(inner_text, parse_options)}"
162
169
  end
163
170
 
164
171
  # Converts all lines in the inner_text as a bullet list. Each line represents one list item. Empty lines are ignored. Use the :class_bullet parse option to define html classes.
165
172
  # :category: Render methods
166
- def self.render_bullets(inner_text, attributes = {}, parse_options = {})
173
+ def render_bullets(inner_text, attributes = {}, parse_options = {})
167
174
  items = inner_text.split(/\n/)
168
175
  items.delete_if { |item| item.strip == '' }
169
- items.map! { |item| '<li>' + self.parse(item, parse_options) + '</li>' }
176
+ items.map! { |item| '<li>' + parse(item, parse_options) + '</li>' }
170
177
  css_class = parse_options[:class_list] || 'ubb-list'
171
178
  return (items.empty?) ? '' : "<ul class='#{css_class}'>" + items.join('') + '</ul>'
172
179
  end
173
180
 
174
181
  # Centers the inner_text.
175
182
  # :category: Render methods
176
- def self.render_center(inner_text, attributes = {}, parse_options = {})
177
- "<div style='text-align: center'>#{self.parse(inner_text, parse_options)}</div>"
183
+ def render_center(inner_text, attributes = {}, parse_options = {})
184
+ "<div style='text-align: center'>#{parse(inner_text, parse_options)}</div>"
178
185
  end
179
186
 
180
187
  # Assures the inner_text is rendered below floating elements.
181
188
  # :category: Render methods
182
- def self.render_class(inner_text, attributes = {}, parse_options = {})
189
+ def render_class(inner_text, attributes = {}, parse_options = {})
183
190
  classes = attributes[:class_attrib_str].to_s.gsub(/'/, "\\'")
184
- "<div class='#{classes}'>#{self.parse(inner_text, parse_options)}</div>"
191
+ "<div class='#{classes}'>#{parse(inner_text, parse_options)}</div>"
185
192
  end
186
193
 
187
194
  # Assures the inner_text is rendered below floating elements.
188
195
  # :category: Render methods
189
- def self.render_clear(inner_text, attributes = {}, parse_options = {})
196
+ def render_clear(inner_text, attributes = {}, parse_options = {})
190
197
  "<div style='clear: both'></div>"
191
198
  end
192
199
 
193
200
  # Changes the font color of the inner_text
194
201
  # :category: Render methods
195
- def self.render_color(inner_text, attributes = {}, parse_options = {})
202
+ def render_color(inner_text, attributes = {}, parse_options = {})
196
203
  color = attributes[:default].gsub(/'/, "\\'")
197
- "<div style='color:#{color}'>#{self.parse(inner_text, parse_options)}</div>"
204
+ "<div style='color:#{color}'>#{parse(inner_text, parse_options)}</div>"
198
205
  end
199
206
 
200
207
  # Ignores all the inner_text
201
208
  # :category: Render methods
202
- def self.render_comment(inner_text, attributes = {}, parse_options = {})
209
+ def render_comment(inner_text, attributes = {}, parse_options = {})
203
210
  ''
204
211
  end
205
212
 
206
213
  # Places the inner_text in a fixed font type. Also adds the classes prettify and linenums for styling purposes. Use the :class_code parse option to define html classes.
207
214
  # :category: Render methods
208
- def self.render_code(inner_text, attributes = {}, parse_options = {})
215
+ def render_code(inner_text, attributes = {}, parse_options = {})
209
216
  css_class = parse_options[:class_code] || 'ubb-code'
210
217
  "<pre class='#{css_class}'>#{inner_text}</pre>"
211
218
  end
@@ -213,7 +220,7 @@ module UBBParser
213
220
  # Renders csv-data into a html table. You can use the following attributes:
214
221
  # [:has_header] The first row should be rendered as header cells (using th).
215
222
  # :category: Render methods
216
- def self.render_csv(inner_text, attributes = {}, parse_options = {})
223
+ def render_csv(inner_text, attributes = {}, parse_options = {})
217
224
  head_cells = body_cells = ''
218
225
  cell_tag = (attributes[:has_header]) ? 'th' : 'td'
219
226
  lines = inner_text.gsub(/(^\n|\n*$)/, '').split(/\n/)
@@ -248,11 +255,11 @@ module UBBParser
248
255
  # [email=info@osingasoftware.nl]Osinga Software[/email]
249
256
  # By default the email address is protected against spoofing, using JavaScript. Use the email parse option to define html classes.
250
257
  # :category: Render methods
251
- def self.render_email(inner_text, attributes = {}, parse_options = {})
258
+ def render_email(inner_text, attributes = {}, parse_options = {})
252
259
  css_class = (parse_options[:class_email] || 'ubb-email').to_s.strip
253
- inner_text = self.parse(inner_text, parse_options) if !attributes[:default].nil?
260
+ inner_text = parse(inner_text, parse_options) if !attributes[:default].nil?
254
261
  email = (attributes[:default] || inner_text)
255
- if (!self.is_email?(email))
262
+ if (!is_email?(email))
256
263
  result = "<span class='#{css_class} ubbparser-error'>UBB error: invalid email address #{email}</span>"
257
264
  elsif ((parse_options.has_key?(:protect_email) && !parse_options[:protect_email]) || (attributes[:protected] == "false"))
258
265
  result = "<a href='mailto:#{email}' class='#{css_class}'>#{inner_text}</a>"
@@ -276,87 +283,87 @@ module UBBParser
276
283
 
277
284
  # Renders the inner_text in a H1 heading.
278
285
  # :category: Render methods
279
- def self.render_h1(inner_text, attributes = {}, parse_options = {})
280
- "<h1>#{self.parse(inner_text, parse_options)}</h1>"
286
+ def render_h1(inner_text, attributes = {}, parse_options = {})
287
+ "<h1>#{parse(inner_text, parse_options)}</h1>"
281
288
  end
282
289
 
283
290
  # Renders the inner_text in a H2 heading.
284
291
  # :category: Render methods
285
- def self.render_h2(inner_text, attributes = {}, parse_options = {})
286
- "<h2>#{self.parse(inner_text, parse_options)}</h2>"
292
+ def render_h2(inner_text, attributes = {}, parse_options = {})
293
+ "<h2>#{parse(inner_text, parse_options)}</h2>"
287
294
  end
288
295
 
289
296
  # Renders the inner_text in a H3 heading.
290
297
  # :category: Render methods
291
- def self.render_h3(inner_text, attributes = {}, parse_options = {})
292
- "<h3>#{self.parse(inner_text, parse_options)}</h3>"
298
+ def render_h3(inner_text, attributes = {}, parse_options = {})
299
+ "<h3>#{parse(inner_text, parse_options)}</h3>"
293
300
  end
294
301
 
295
302
  # Renders the inner_text in a H4 heading.
296
303
  # :category: Render methods
297
- def self.render_h4(inner_text, attributes = {}, parse_options = {})
298
- "<h4>#{self.parse(inner_text, parse_options)}</h4>"
304
+ def render_h4(inner_text, attributes = {}, parse_options = {})
305
+ "<h4>#{parse(inner_text, parse_options)}</h4>"
299
306
  end
300
307
 
301
308
  # Renders the inner_text in a H5 heading.
302
309
  # :category: Render methods
303
- def self.render_h5(inner_text, attributes = {}, parse_options = {})
304
- "<h5>#{self.parse(inner_text, parse_options)}</h5>"
310
+ def render_h5(inner_text, attributes = {}, parse_options = {})
311
+ "<h5>#{parse(inner_text, parse_options)}</h5>"
305
312
  end
306
313
 
307
314
  # Renders the inner_text in a H6 heading.
308
315
  # :category: Render methods
309
- def self.render_h6(inner_text, attributes = {}, parse_options = {})
310
- "<h6>#{self.parse(inner_text, parse_options)}</h6>"
316
+ def render_h6(inner_text, attributes = {}, parse_options = {})
317
+ "<h6>#{parse(inner_text, parse_options)}</h6>"
311
318
  end
312
319
 
313
320
  # Renders a horizontal ruler.
314
321
  # :category: Render methods
315
- def self.render_hr(inner_text, attributes = {}, parse_options = {})
316
- "<hr />#{self.parse(inner_text, parse_options)}"
322
+ def render_hr(inner_text, attributes = {}, parse_options = {})
323
+ "<hr />#{parse(inner_text, parse_options)}"
317
324
  end
318
325
 
319
326
  # Renders the inner_text in italic.
320
327
  # :category: Render methods
321
- def self.render_i(inner_text, attributes = {}, parse_options = {})
322
- "<em>#{self.parse(inner_text, parse_options)}</em>"
328
+ def render_i(inner_text, attributes = {}, parse_options = {})
329
+ "<em>#{parse(inner_text, parse_options)}</em>"
323
330
  end
324
331
 
325
332
  # Renders an iframe. Use the inner_text as source. Use the :class_iframe parse option to define html classes.
326
333
  # :category: Render methods
327
- def self.render_iframe(inner_text, attributes = {}, parse_options = {})
334
+ def render_iframe(inner_text, attributes = {}, parse_options = {})
328
335
  src = inner_text
329
336
  src = 'http://' + src if (src.match(/^www\./))
330
337
  src.gsub!(/\\|'/) { |c| "\\#{c}" }
331
338
  attributes[:src] = inner_text
332
339
  attributes[:class] = attributes[:class] || parse_options[:class_iframe] || 'ubb-iframe'
333
- attrib_str = self.hash_to_attrib_str(attributes, :allowed_keys => [:src, :class, :frameborder, :marginwidth, :marginheight, :width, :height])
340
+ attrib_str = hash_to_attrib_str(attributes, :allowed_keys => [:src, :class, :frameborder, :marginwidth, :marginheight, :width, :height])
334
341
  return "<iframe #{attrib_str}></iframe>"
335
342
  end
336
343
 
337
344
  # Doesn't render the ubb code in the inner_text. It does strip all html-tags from the inner_text
338
345
  # :category: Render methods
339
- def self.render_ignore(inner_text, attributes = {}, parse_options = {})
346
+ def render_ignore(inner_text, attributes = {}, parse_options = {})
340
347
  inner_text
341
348
  end
342
349
 
343
350
  # Renders an image. Use the :class_img parse option to define html classes.
344
351
  # :category: Render methods
345
352
  #noinspection RubyClassVariableUsageInspection
346
- def self.render_img(inner_text, attributes = {}, parse_options = {})
353
+ def render_img(inner_text, attributes = {}, parse_options = {})
347
354
  url = inner_text
348
355
  url = @@file_url_convert_method.call(url) unless @@file_url_convert_method.nil?
349
356
  attributes[:src] = url.gsub(/\\|'/) { |c| "\\#{c}" }
350
357
  attributes[:alt] ||= ''
351
358
 
352
359
  attributes[:class] = attributes[:class] || parse_options[:class] || 'ubb-img'
353
- attrib_str = self.hash_to_attrib_str(attributes, :allowed_keys => [:src, :alt, :styles, :class])
360
+ attrib_str = hash_to_attrib_str(attributes, :allowed_keys => [:src, :alt, :styles, :class])
354
361
  return "<img #{attrib_str} />"
355
362
  end
356
363
 
357
364
  # Renders an image, floated on the left side of the text frame. Use the :class_img_left parse option to define html classes.
358
365
  # :category: Render methods
359
- def self.render_img_left(inner_text, attributes = {}, parse_options = {})
366
+ def render_img_left(inner_text, attributes = {}, parse_options = {})
360
367
  attributes[:styles] = 'float: left; margin: 0px 10px 10px 0px'
361
368
  attributes[:class] = parse_options[:class_img_left] || 'ubb-img-left'
362
369
  render_img(inner_text, attributes, parse_options)
@@ -364,7 +371,7 @@ module UBBParser
364
371
 
365
372
  # Renders an image, floated on the right side of the text frame. Use the :class_img_right parse option to define html classes.
366
373
  # :category: Render methods
367
- def self.render_img_right(inner_text, attributes = {}, parse_options = {})
374
+ def render_img_right(inner_text, attributes = {}, parse_options = {})
368
375
  attributes[:styles] = 'float: left; margin: 0px 0px 10px 10px'
369
376
  attributes[:class] = parse_options[:class_img_right] || 'ubb-img-right'
370
377
  render_img(inner_text, attributes, parse_options)
@@ -372,75 +379,75 @@ module UBBParser
372
379
 
373
380
  # Renders the inner_text with a justified text alignment.
374
381
  # :category: Render methods
375
- def self.render_justify(inner_text, attributes = {}, parse_options = {})
376
- "<div style='text-align: justify'>#{self.parse(inner_text, parse_options)}</div>"
382
+ def render_justify(inner_text, attributes = {}, parse_options = {})
383
+ "<div style='text-align: justify'>#{parse(inner_text, parse_options)}</div>"
377
384
  end
378
385
 
379
386
  # Renders the inner_text with a left text alignment.
380
387
  # :category: Render methods
381
- def self.render_left(inner_text, attributes = {}, parse_options = {})
382
- "<div style='text-align: left'>#{self.parse(inner_text, parse_options)}</div>"
388
+ def render_left(inner_text, attributes = {}, parse_options = {})
389
+ "<div style='text-align: left'>#{parse(inner_text, parse_options)}</div>"
383
390
  end
384
391
 
385
392
  # Renders the inner_text as an ordered list. Each line represents a list item. Use the :class_list parse option to define html classes.
386
393
  # :category: Render methods
387
- def self.render_list(inner_text, attributes = {}, parse_options = {})
394
+ def render_list(inner_text, attributes = {}, parse_options = {})
388
395
  items = inner_text.split(/\n/)
389
396
  items.delete_if { |item| item.strip == '' }
390
- items.map! { |item| '<li>' + self.parse(item, parse_options) + '</li>' }
397
+ items.map! { |item| '<li>' + parse(item, parse_options) + '</li>' }
391
398
  return (items.empty?) ? '' : "<ol class='#{parse_options[:class_list].to_s.strip}'>" + items.join('') + '</ol>'
392
399
  end
393
400
 
394
401
  # Renders the inner_text as a paragraph. Use the :class_p parse option to define html classes.
395
402
  # :category: Render methods
396
- def self.render_p(inner_text, attributes = {}, parse_options = {})
403
+ def render_p(inner_text, attributes = {}, parse_options = {})
397
404
  css_class = parse_options[:class_p] || 'ubb-p'
398
- "<p class='#{css_class}'>#{self.parse(inner_text, parse_options)}</p>"
405
+ "<p class='#{css_class}'>#{parse(inner_text, parse_options)}</p>"
399
406
  end
400
407
 
401
408
  # Renders the inner_text with a right text alignment.
402
409
  # :category: Render methods
403
- def self.render_right(inner_text, attributes = {}, parse_options = {})
404
- "<div style='text-align: right'>#{self.parse(inner_text, parse_options)}</div>"
410
+ def render_right(inner_text, attributes = {}, parse_options = {})
411
+ "<div style='text-align: right'>#{parse(inner_text, parse_options)}</div>"
405
412
  end
406
413
 
407
414
  # Renders the inner_text in a <div> block with inline CSS styles, i.e.:
408
415
  # [style color: red; border: 1px solid green]...[/style]
409
416
  # :category: Render methods
410
- def self.render_style(inner_text, attributes = {}, parse_options = {})
417
+ def render_style(inner_text, attributes = {}, parse_options = {})
411
418
  styles = attributes[:class_attrib_str].to_s.gsub(/'/, "\\'")
412
- "<div style='#{styles}'>#{self.parse(inner_text, parse_options)}</div>"
419
+ "<div style='#{styles}'>#{parse(inner_text, parse_options)}</div>"
413
420
  end
414
421
 
415
422
  # Converts the [table] to a <table>. Always use this in combination with [tr] and [td] or [th]. Use the :class_table parse option to define html classes.
416
423
  # :category: Render methods
417
- def self.render_table(inner_text, attributes = {}, parse_options = {})
424
+ def render_table(inner_text, attributes = {}, parse_options = {})
418
425
  css_class = parse_options[:class_table] || 'ubb-table'
419
- "<table class='#{css_class}'>#{self.parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</table>"
426
+ "<table class='#{css_class}'>#{parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</table>"
420
427
  end
421
428
 
422
429
  # Converts the [td] to a <td>. Always use this in combination with [table] and [tr].
423
430
  # :category: Render methods
424
- def self.render_td(inner_text, attributes = {}, parse_options = {})
425
- "<td>#{self.parse(inner_text, parse_options)}</td>"
431
+ def render_td(inner_text, attributes = {}, parse_options = {})
432
+ "<td>#{parse(inner_text, parse_options)}</td>"
426
433
  end
427
434
 
428
435
  # Converts the [th] to a <th>. Always use this in combination with [table] and [tr].
429
436
  # :category: Render methods
430
- def self.render_th(inner_text, attributes = {}, parse_options = {})
431
- "<th>#{self.parse(inner_text, parse_options)}</th>"
437
+ def render_th(inner_text, attributes = {}, parse_options = {})
438
+ "<th>#{parse(inner_text, parse_options)}</th>"
432
439
  end
433
440
 
434
441
  # Converts the [tr] to a <tr>. Always use this in combination with [table] and [td] or [th].
435
442
  # :category: Render methods
436
- def self.render_tr(inner_text, attributes = {}, parse_options = {})
437
- "<tr>#{self.parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</tr>"
443
+ def render_tr(inner_text, attributes = {}, parse_options = {})
444
+ "<tr>#{parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</tr>"
438
445
  end
439
446
 
440
447
  # Renders the inner_text underline. Use this with caution, since underline text is associated with hyperlinks.
441
448
  # :category: Render methods
442
- def self.render_u(inner_text, attributes = {}, parse_options = {})
443
- "<u>#{self.parse(inner_text, parse_options)}</u>"
449
+ def render_u(inner_text, attributes = {}, parse_options = {})
450
+ "<u>#{parse(inner_text, parse_options)}</u>"
444
451
  end
445
452
 
446
453
  # Renders a web addres. There are two options to define:
@@ -449,8 +456,8 @@ module UBBParser
449
456
  # Use the :class_url parse option to define html classes.
450
457
  # :category: Render methods
451
458
  #noinspection RubyClassVariableUsageInspection
452
- def self.render_url(inner_text, attributes = {}, parse_options = {})
453
- inner_text = self.parse(inner_text, parse_options) if !attributes[:default].nil?
459
+ def render_url(inner_text, attributes = {}, parse_options = {})
460
+ inner_text = parse(inner_text, parse_options) if !attributes[:default].nil?
454
461
  url = (attributes[:default] || inner_text)
455
462
  url = 'http://' + url if (url.start_with?('www.'))
456
463
  target = (url.start_with?('http://')) ? " target='_blank'" : ''
@@ -462,7 +469,7 @@ module UBBParser
462
469
 
463
470
  # Renders a YouTube video using the video id or url in the inner_text.
464
471
  # :category: Render methods
465
- def self.render_vimeo(inner_text, attributes = {}, parse_options = {})
472
+ def render_vimeo(inner_text, attributes = {}, parse_options = {})
466
473
  attributes[:width] ||= 500
467
474
  attributes[:height] ||= 281
468
475
  attributes[:class] = parse_options[:class_vimeo] || 'ubb-vimeo'
@@ -473,7 +480,7 @@ module UBBParser
473
480
 
474
481
  # Renders a YouTube video using the video id or url in the inner_text.
475
482
  # :category: Render methods
476
- def self.render_youtube(inner_text, attributes = {}, parse_options = {})
483
+ def render_youtube(inner_text, attributes = {}, parse_options = {})
477
484
  attributes[:width] ||= 560
478
485
  attributes[:height] ||= 315
479
486
  attributes[:class] = parse_options[:class_youtube] || 'ubb-youtube'
@@ -485,15 +492,15 @@ module UBBParser
485
492
  # Renders a Youtube, Vimeo or Zideo video using the video id or url in the inner_text.
486
493
  # It automatically determines which video renderer should be used based on the given url.
487
494
  # :category: Render methods
488
- def self.render_video(inner_text, attributes = {}, parse_options = {})
495
+ def render_video(inner_text, attributes = {}, parse_options = {})
489
496
  attributes[:class] = "#{attributes[:class]} #{parse_options[:class_zideo]}"
490
497
  url = inner_text
491
498
  if !url.match(/zideo\.nl/).nil?
492
- return self.render_zideo(inner_text, attributes, parse_options)
499
+ return render_zideo(inner_text, attributes, parse_options)
493
500
  elsif (!url.match(/[0-9]{5,}/).nil?) || (!url.match(/vimeo/).nil?)
494
- return self.render_vimeo(inner_text, attributes, parse_options)
501
+ return render_vimeo(inner_text, attributes, parse_options)
495
502
  elsif (!url.match(/youtu/).nil?) || (!url.match(/^[^\?&]+\{11}$/).nil?)
496
- return self.render_youtube(inner_text, attributes, parse_options)
503
+ return render_youtube(inner_text, attributes, parse_options)
497
504
  else
498
505
  return 'Unknown video'
499
506
  end
@@ -501,7 +508,7 @@ module UBBParser
501
508
 
502
509
  # Renders a zideo.nl video using the video id or url in the inner_text.
503
510
  # :category: Render methods
504
- def self.render_zideo(inner_text, attributes = {}, parse_options = {})
511
+ def render_zideo(inner_text, attributes = {}, parse_options = {})
505
512
  attributes[:width] ||= 480
506
513
  attributes[:height] ||= :auto
507
514
  attributes[:class] = parse_options[:class_zideo] || 'ubb-zideo'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ubbparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taco Jan Osinga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-14 00:00:00.000000000 Z
11
+ date: 2014-02-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple and flexibel ubb parser.
14
14
  email: info@osingasoftware.nl