ubbparser 0.1.3 → 0.1.4
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 +8 -8
- data/lib/ubbparser.rb +105 -85
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjIzZDRkMzFhMTE1YzdjN2EzMzhhZjYwMzBkNDQzZWFjNGQ3OGU1Zg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmIyNzE0ZTA1NWZiNzliOTE2YWQ1ODQ3Zjk0ODI0OWIzZTRjM2Y2NQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjVjNWZlMDM1YTczMGE5ZWNmMGY2M2RiN2Y4ZTFlZDk0YjU3YTliMzZiNThk
|
10
|
+
ZjRhYTdkNzQyNzc2ZTgxNDE3YWYyMjg4M2JlZGQ2MzRkZDMyMmUyNjQyZWJk
|
11
|
+
MTZkYzY5NWQ1Y2Y1YzE2YzY2OTAyNDI5YWI1ZjYxNjIyZWIzNzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjdmOTA2NzA5Y2MwM2MzNzk0MjJmMjI3Y2YzODJkN2I4Yjc3YmI4YTI3NTI3
|
14
|
+
YzY2NmNmZTI1MDM5NDRkNzMwZmI1Y2ZkZTk2MzQ2MmQ4ODZlMjUyYzRhOGU0
|
15
|
+
ZDhjMDJlYTRlODQ5OWE1MzNmNzE0NzVmZDc3ZGI3MTY4YTFlODM=
|
data/lib/ubbparser.rb
CHANGED
@@ -40,7 +40,7 @@ module UBBParser
|
|
40
40
|
# Converts a strings containing key-value-list into a hash. This function is mostly used by the parser itself.
|
41
41
|
# Attributes are given to the render methods as a hash.
|
42
42
|
def self.attrib_str_to_hash(attrib_str)
|
43
|
-
result = {:
|
43
|
+
result = {:class_attrib_str => attrib_str.gsub(/^=/, '')}
|
44
44
|
|
45
45
|
attrib_str.insert(0, 'default') if (attrib_str[0] == '=')
|
46
46
|
attrib_str.scan(/((\S*)=("[^"]*"|'[^']*'|\S*))/) { |_, key, val|
|
@@ -108,6 +108,7 @@ module UBBParser
|
|
108
108
|
end
|
109
109
|
method_result = self.send(method_name, inner_text, attributes, parse_options).to_s
|
110
110
|
result << method_result
|
111
|
+
scnr.skip(/\n?/)
|
111
112
|
end
|
112
113
|
end
|
113
114
|
end
|
@@ -176,6 +177,13 @@ module UBBParser
|
|
176
177
|
"<div style='text-align: center'>#{self.parse(inner_text, parse_options)}</div>"
|
177
178
|
end
|
178
179
|
|
180
|
+
# Assures the inner_text is rendered below floating elements.
|
181
|
+
# :category: Render methods
|
182
|
+
def self.render_class(inner_text, attributes = {}, parse_options = {})
|
183
|
+
classes = attributes[:original_attrib_str].gsub(/'/, "\\'")
|
184
|
+
"<div class='#{classes}'>#{self.parse(inner_text, parse_options)}</div>"
|
185
|
+
end
|
186
|
+
|
179
187
|
# Assures the inner_text is rendered below floating elements.
|
180
188
|
# :category: Render methods
|
181
189
|
def self.render_clear(inner_text, attributes = {}, parse_options = {})
|
@@ -185,7 +193,8 @@ module UBBParser
|
|
185
193
|
# Changes the font color of the inner_text
|
186
194
|
# :category: Render methods
|
187
195
|
def self.render_color(inner_text, attributes = {}, parse_options = {})
|
188
|
-
|
196
|
+
color = attributes[:default].gsub(/'/, "\\'")
|
197
|
+
"<div style='color:#{color}'>#{self.parse(inner_text, parse_options)}</div>"
|
189
198
|
end
|
190
199
|
|
191
200
|
# Ignores all the inner_text
|
@@ -240,71 +249,81 @@ module UBBParser
|
|
240
249
|
# By default the email address is protected against spoofing, using JavaScript. Use the email parse option to define html classes.
|
241
250
|
# :category: Render methods
|
242
251
|
def self.render_email(inner_text, attributes = {}, parse_options = {})
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
252
|
+
css_class = (parse_options[:class_email] || 'ubb-email').to_s.strip
|
253
|
+
inner_text = self.parse(inner_text, parse_options) if !attributes[:default].nil?
|
254
|
+
email = (attributes[:default] || inner_text)
|
255
|
+
if (!self.is_email?(email))
|
256
|
+
result = "<span class='#{css_class} ubbparser-error'>UBB error: invalid email address #{email}</span>"
|
257
|
+
elsif ((parse_options.has_key?(:protect_email) && !parse_options[:protect_email]) || (attributes[:protected] == "false"))
|
258
|
+
result = "<a href='mailto:#{email}' class='#{css_class}'>#{inner_text}</a>"
|
259
|
+
else
|
260
|
+
username, domain = email.split("@", 2)
|
261
|
+
id = "ubb-email-" + SecureRandom.hex(16)
|
262
|
+
|
263
|
+
# Some generic javascript so every browser can parse this (instantly), regardless of used framework
|
264
|
+
if (inner_text == email)
|
265
|
+
title = "Protected email address"
|
266
|
+
js_title = "email"
|
267
|
+
else
|
258
268
|
title = inner_text
|
259
269
|
js_title = "\"#{inner_text}\""
|
260
270
|
end
|
261
271
|
script = "<script type='text/javascript'>obj=document.getElementById(\"#{id}\");email=obj.getAttribute(\"data-username\")+\"@\"+obj.getAttribute(\"data-domain\");obj.href=\"mailto:\"+email;obj.innerHTML=#{js_title}</script>"
|
262
272
|
result = "<a id='#{id}' class='#{css_class}' href='#' data-username='#{username}' data-domain='#{domain}'>#{title}</a>#{script}"
|
263
273
|
end
|
264
|
-
|
265
274
|
return result
|
266
275
|
end
|
267
276
|
|
268
|
-
# Renders the inner_text in
|
269
|
-
#
|
270
|
-
# :category: Render methods
|
271
|
-
def self.render_font(inner_text, attributes = {}, parse_options = {})
|
272
|
-
font = attributes[:original_attrib_str].gsub!(/\\|'/) { |c| "\\#{c}" }
|
273
|
-
"<span style='font-family: #{font}'>#{self.parse(inner_text, parse_options)}</span>"
|
274
|
-
end
|
275
|
-
|
276
|
-
# Renders the inner_text in a H1 heading.
|
277
|
-
# :category: Render methods
|
277
|
+
# Renders the inner_text in a H1 heading.
|
278
|
+
# :category: Render methods
|
278
279
|
def self.render_h1(inner_text, attributes = {}, parse_options = {})
|
279
280
|
"<h1>#{self.parse(inner_text, parse_options)}</h1>"
|
280
281
|
end
|
281
282
|
|
282
|
-
# Renders the inner_text in a H2 heading.
|
283
|
-
# :category: Render methods
|
283
|
+
# Renders the inner_text in a H2 heading.
|
284
|
+
# :category: Render methods
|
284
285
|
def self.render_h2(inner_text, attributes = {}, parse_options = {})
|
285
286
|
"<h2>#{self.parse(inner_text, parse_options)}</h2>"
|
286
287
|
end
|
287
288
|
|
288
|
-
# Renders the inner_text in a H3 heading.
|
289
|
-
# :category: Render methods
|
289
|
+
# Renders the inner_text in a H3 heading.
|
290
|
+
# :category: Render methods
|
290
291
|
def self.render_h3(inner_text, attributes = {}, parse_options = {})
|
291
292
|
"<h3>#{self.parse(inner_text, parse_options)}</h3>"
|
292
293
|
end
|
293
294
|
|
294
|
-
# Renders a
|
295
|
-
# :category: Render methods
|
295
|
+
# Renders the inner_text in a H4 heading.
|
296
|
+
# :category: Render methods
|
297
|
+
def self.render_h3(inner_text, attributes = {}, parse_options = {})
|
298
|
+
"<h4>#{self.parse(inner_text, parse_options)}</h4>"
|
299
|
+
end
|
300
|
+
|
301
|
+
# Renders the inner_text in a H5 heading.
|
302
|
+
# :category: Render methods
|
303
|
+
def self.render_h3(inner_text, attributes = {}, parse_options = {})
|
304
|
+
"<h3>#{self.parse(inner_text, parse_options)}</h5>"
|
305
|
+
end
|
306
|
+
|
307
|
+
# Renders the inner_text in a H6 heading.
|
308
|
+
# :category: Render methods
|
309
|
+
def self.render_h3(inner_text, attributes = {}, parse_options = {})
|
310
|
+
"<h6>#{self.parse(inner_text, parse_options)}</h6>"
|
311
|
+
end
|
312
|
+
|
313
|
+
# Renders a horizontal ruler.
|
314
|
+
# :category: Render methods
|
296
315
|
def self.render_hr(inner_text, attributes = {}, parse_options = {})
|
297
316
|
"<hr />#{self.parse(inner_text, parse_options)}"
|
298
317
|
end
|
299
318
|
|
300
|
-
# Renders the inner_text in italic.
|
301
|
-
# :category: Render methods
|
319
|
+
# Renders the inner_text in italic.
|
320
|
+
# :category: Render methods
|
302
321
|
def self.render_i(inner_text, attributes = {}, parse_options = {})
|
303
322
|
"<em>#{self.parse(inner_text, parse_options)}</em>"
|
304
323
|
end
|
305
324
|
|
306
|
-
# Renders an iframe. Use the inner_text as source. Use the :class_iframe parse option to define html classes.
|
307
|
-
# :category: Render methods
|
325
|
+
# Renders an iframe. Use the inner_text as source. Use the :class_iframe parse option to define html classes.
|
326
|
+
# :category: Render methods
|
308
327
|
def self.render_iframe(inner_text, attributes = {}, parse_options = {})
|
309
328
|
src = inner_text
|
310
329
|
src = 'http://' + src if (src.match(/^www\./))
|
@@ -315,15 +334,15 @@ module UBBParser
|
|
315
334
|
return "<iframe #{attrib_str}></iframe>"
|
316
335
|
end
|
317
336
|
|
318
|
-
# Doesn't render the ubb code in the inner_text. It does strip all html-tags from the inner_text
|
319
|
-
# :category: Render methods
|
337
|
+
# Doesn't render the ubb code in the inner_text. It does strip all html-tags from the inner_text
|
338
|
+
# :category: Render methods
|
320
339
|
def self.render_ignore(inner_text, attributes = {}, parse_options = {})
|
321
340
|
inner_text
|
322
341
|
end
|
323
342
|
|
324
|
-
# Renders an image. Use the :class_img parse option to define html classes.
|
325
|
-
# :category: Render methods
|
326
|
-
#noinspection RubyClassVariableUsageInspection
|
343
|
+
# Renders an image. Use the :class_img parse option to define html classes.
|
344
|
+
# :category: Render methods
|
345
|
+
#noinspection RubyClassVariableUsageInspection
|
327
346
|
def self.render_img(inner_text, attributes = {}, parse_options = {})
|
328
347
|
url = inner_text
|
329
348
|
url = @@file_url_convert_method.call(url) unless @@file_url_convert_method.nil?
|
@@ -335,36 +354,36 @@ module UBBParser
|
|
335
354
|
return "<img #{attrib_str} />"
|
336
355
|
end
|
337
356
|
|
338
|
-
# Renders an image, floated on the left side of the text frame. Use the :class_img_left parse option to define html classes.
|
339
|
-
# :category: Render methods
|
357
|
+
# Renders an image, floated on the left side of the text frame. Use the :class_img_left parse option to define html classes.
|
358
|
+
# :category: Render methods
|
340
359
|
def self.render_img_left(inner_text, attributes = {}, parse_options = {})
|
341
360
|
attributes[:styles] = 'float: left; margin: 0px 10px 10px 0px'
|
342
361
|
attributes[:class] = parse_options[:class_img_left] || 'ubb-img-left'
|
343
362
|
render_img(inner_text, attributes, parse_options)
|
344
363
|
end
|
345
364
|
|
346
|
-
# Renders an image, floated on the right side of the text frame. Use the :class_img_right parse option to define html classes.
|
347
|
-
# :category: Render methods
|
365
|
+
# Renders an image, floated on the right side of the text frame. Use the :class_img_right parse option to define html classes.
|
366
|
+
# :category: Render methods
|
348
367
|
def self.render_img_right(inner_text, attributes = {}, parse_options = {})
|
349
368
|
attributes[:styles] = 'float: left; margin: 0px 0px 10px 10px'
|
350
369
|
attributes[:class] = parse_options[:class_img_right] || 'ubb-img-right'
|
351
370
|
render_img(inner_text, attributes, parse_options)
|
352
371
|
end
|
353
372
|
|
354
|
-
# Renders the inner_text with a justified text alignment.
|
355
|
-
# :category: Render methods
|
373
|
+
# Renders the inner_text with a justified text alignment.
|
374
|
+
# :category: Render methods
|
356
375
|
def self.render_justify(inner_text, attributes = {}, parse_options = {})
|
357
376
|
"<div style='text-align: justify'>#{self.parse(inner_text, parse_options)}</div>"
|
358
377
|
end
|
359
378
|
|
360
|
-
# Renders the inner_text with a left text alignment.
|
361
|
-
# :category: Render methods
|
379
|
+
# Renders the inner_text with a left text alignment.
|
380
|
+
# :category: Render methods
|
362
381
|
def self.render_left(inner_text, attributes = {}, parse_options = {})
|
363
382
|
"<div style='text-align: left'>#{self.parse(inner_text, parse_options)}</div>"
|
364
383
|
end
|
365
384
|
|
366
|
-
# Renders the inner_text as an ordered list. Each line represents a list item. Use the :class_list parse option to define html classes.
|
367
|
-
# :category: Render methods
|
385
|
+
# 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
|
+
# :category: Render methods
|
368
387
|
def self.render_list(inner_text, attributes = {}, parse_options = {})
|
369
388
|
items = inner_text.split(/\n/)
|
370
389
|
items.delete_if { |item| item.strip == '' }
|
@@ -372,65 +391,66 @@ module UBBParser
|
|
372
391
|
return (items.empty?) ? '' : "<ol class='#{parse_options[:class_list].to_s.strip}'>" + items.join('') + '</ol>'
|
373
392
|
end
|
374
393
|
|
375
|
-
# Renders the inner_text as a paragraph. Use the :class_p parse option to define html classes.
|
376
|
-
# :category: Render methods
|
394
|
+
# Renders the inner_text as a paragraph. Use the :class_p parse option to define html classes.
|
395
|
+
# :category: Render methods
|
377
396
|
def self.render_p(inner_text, attributes = {}, parse_options = {})
|
378
397
|
css_class = parse_options[:class_p] || 'ubb-p'
|
379
398
|
"<p class='#{css_class}'>#{self.parse(inner_text, parse_options)}</p>"
|
380
399
|
end
|
381
400
|
|
382
|
-
# Renders the inner_text with a right text alignment.
|
383
|
-
# :category: Render methods
|
401
|
+
# Renders the inner_text with a right text alignment.
|
402
|
+
# :category: Render methods
|
384
403
|
def self.render_right(inner_text, attributes = {}, parse_options = {})
|
385
404
|
"<div style='text-align: right'>#{self.parse(inner_text, parse_options)}</div>"
|
386
405
|
end
|
387
406
|
|
388
|
-
# Renders the inner_text in a <div> block with inline CSS styles, i.e.:
|
389
|
-
# [style color: red; border: 1px solid green]...[/style]
|
390
|
-
# :category: Render methods
|
407
|
+
# Renders the inner_text in a <div> block with inline CSS styles, i.e.:
|
408
|
+
# [style color: red; border: 1px solid green]...[/style]
|
409
|
+
# :category: Render methods
|
391
410
|
def self.render_style(inner_text, attributes = {}, parse_options = {})
|
392
411
|
styles = attributes[:original_attrib_str].gsub(/'/, "\\'")
|
393
412
|
"<div style='#{styles}'>#{self.parse(inner_text, parse_options)}</div>"
|
394
413
|
end
|
395
414
|
|
396
|
-
# 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.
|
397
|
-
# :category: Render methods
|
415
|
+
# 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
|
+
# :category: Render methods
|
398
417
|
def self.render_table(inner_text, attributes = {}, parse_options = {})
|
399
418
|
css_class = parse_options[:class_table] || 'ubb-table'
|
400
419
|
"<table class='#{css_class}'>#{self.parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</table>"
|
401
420
|
end
|
402
421
|
|
403
|
-
# Converts the [td] to a <td>. Always use this in combination with [table] and [tr].
|
404
|
-
# :category: Render methods
|
422
|
+
# Converts the [td] to a <td>. Always use this in combination with [table] and [tr].
|
423
|
+
# :category: Render methods
|
405
424
|
def self.render_td(inner_text, attributes = {}, parse_options = {})
|
406
425
|
"<td>#{self.parse(inner_text, parse_options)}</td>"
|
407
426
|
end
|
408
427
|
|
409
|
-
# Converts the [th] to a <th>. Always use this in combination with [table] and [tr].
|
410
|
-
# :category: Render methods
|
428
|
+
# Converts the [th] to a <th>. Always use this in combination with [table] and [tr].
|
429
|
+
# :category: Render methods
|
411
430
|
def self.render_th(inner_text, attributes = {}, parse_options = {})
|
412
431
|
"<th>#{self.parse(inner_text, parse_options)}</th>"
|
413
432
|
end
|
414
433
|
|
415
|
-
# Converts the [tr] to a <tr>. Always use this in combination with [table] and [td] or [th].
|
416
|
-
# :category: Render methods
|
434
|
+
# Converts the [tr] to a <tr>. Always use this in combination with [table] and [td] or [th].
|
435
|
+
# :category: Render methods
|
417
436
|
def self.render_tr(inner_text, attributes = {}, parse_options = {})
|
418
437
|
"<tr>#{self.parse(inner_text.gsub(/(^\n+)|(\n+$)/, ''), parse_options)}</tr>"
|
419
438
|
end
|
420
439
|
|
421
|
-
# Renders the inner_text underline. Use this with caution, since underline text is associated with hyperlinks.
|
422
|
-
# :category: Render methods
|
440
|
+
# Renders the inner_text underline. Use this with caution, since underline text is associated with hyperlinks.
|
441
|
+
# :category: Render methods
|
423
442
|
def self.render_u(inner_text, attributes = {}, parse_options = {})
|
424
443
|
"<u>#{self.parse(inner_text, parse_options)}</u>"
|
425
444
|
end
|
426
445
|
|
427
|
-
# Renders a web addres. There are two options to define:
|
428
|
-
# [url]www.osingasoftware.nl[/ur]
|
429
|
-
# [url=www.osingasoftware.nl]Osinga Software[/url]
|
430
|
-
# Use the :class_url parse option to define html classes.
|
431
|
-
# :category: Render methods
|
432
|
-
#noinspection RubyClassVariableUsageInspection
|
446
|
+
# Renders a web addres. There are two options to define:
|
447
|
+
# [url]www.osingasoftware.nl[/ur]
|
448
|
+
# [url=www.osingasoftware.nl]Osinga Software[/url]
|
449
|
+
# Use the :class_url parse option to define html classes.
|
450
|
+
# :category: Render methods
|
451
|
+
#noinspection RubyClassVariableUsageInspection
|
433
452
|
def self.render_url(inner_text, attributes = {}, parse_options = {})
|
453
|
+
inner_text = self.parse(inner_text, parse_options) if !attributes[:default].nil?
|
434
454
|
url = (attributes[:default] || inner_text)
|
435
455
|
url = 'http://' + url if (url.match(/^www\./))
|
436
456
|
url = @@file_url_convert_method.call(url) unless @@file_url_convert_method.nil?
|
@@ -439,8 +459,8 @@ module UBBParser
|
|
439
459
|
return "<a href='#{url}' class='#{css_class}'>#{inner_text}</a>"
|
440
460
|
end
|
441
461
|
|
442
|
-
# Renders a YouTube video using the video id or url in the inner_text.
|
443
|
-
# :category: Render methods
|
462
|
+
# Renders a YouTube video using the video id or url in the inner_text.
|
463
|
+
# :category: Render methods
|
444
464
|
def self.render_vimeo(inner_text, attributes = {}, parse_options = {})
|
445
465
|
attributes[:width] ||= 500
|
446
466
|
attributes[:height] ||= 281
|
@@ -450,8 +470,8 @@ module UBBParser
|
|
450
470
|
return render_iframe(src, attributes, parse_options)
|
451
471
|
end
|
452
472
|
|
453
|
-
# Renders a YouTube video using the video id or url in the inner_text.
|
454
|
-
# :category: Render methods
|
473
|
+
# Renders a YouTube video using the video id or url in the inner_text.
|
474
|
+
# :category: Render methods
|
455
475
|
def self.render_youtube(inner_text, attributes = {}, parse_options = {})
|
456
476
|
attributes[:width] ||= 560
|
457
477
|
attributes[:height] ||= 315
|
@@ -461,9 +481,9 @@ module UBBParser
|
|
461
481
|
return render_iframe(src, attributes, parse_options)
|
462
482
|
end
|
463
483
|
|
464
|
-
# Renders a Youtube, Vimeo or Zideo video using the video id or url in the inner_text.
|
465
|
-
# It automatically determines which video renderer should be used based on the given url.
|
466
|
-
# :category: Render methods
|
484
|
+
# Renders a Youtube, Vimeo or Zideo video using the video id or url in the inner_text.
|
485
|
+
# It automatically determines which video renderer should be used based on the given url.
|
486
|
+
# :category: Render methods
|
467
487
|
def self.render_video(inner_text, attributes = {}, parse_options = {})
|
468
488
|
attributes[:class] = "#{attributes[:class]} #{parse_options[:class_zideo]}"
|
469
489
|
url = inner_text
|
@@ -478,8 +498,8 @@ module UBBParser
|
|
478
498
|
end
|
479
499
|
end
|
480
500
|
|
481
|
-
# Renders a zideo.nl video using the video id or url in the inner_text.
|
482
|
-
# :category: Render methods
|
501
|
+
# Renders a zideo.nl video using the video id or url in the inner_text.
|
502
|
+
# :category: Render methods
|
483
503
|
def self.render_zideo(inner_text, attributes = {}, parse_options = {})
|
484
504
|
attributes[:width] ||= 480
|
485
505
|
attributes[:height] ||= :auto
|
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.
|
4
|
+
version: 0.1.4
|
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-
|
11
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A simple and flexibel ubb parser.
|
14
14
|
email: info@osingasoftware.nl
|