',
'Unordered list item',
'[list][*]item 1[*] item2[/list]',
:list],
'Ordered list (numerical)' => [
/\[list=1(:.*)?\](.+)\[\/list(:.)?\1?\]/mi,
'\2',
'Ordered list numerically',
'[list=1][*]item 1[*] item2[/list]',
:list],
'Ordered list (alphabetical)' => [
/\[list=a(:.*)?\](.+)\[\/list(:.)?\1?\]/mi,
'\2',
'Ordered list alphabetically',
'[list=a][*]item 1[*] item2[/list]',
:list],
'Definition List' => [
/\[dl\](.*?)\[\/dl\]/im,
'
\1
',
'List of terms/items and their definitions',
'[dl][dt]Fusion Reactor[/dt][dd]Chamber that provides power to your... nerd stuff[/dd][dt]Mass Cannon[/dt][dd]A gun of some sort[/dd][/dl]',
:definelist],
'Definition Term' => [
/\[dt\](.*?)\[\/dt\]/mi,
'
',
'Definition definitions',
'[dd]my definition[/dd',
:definition],
'Quote' => [
/\[quote(:.*)?=(?:")?(.*?)(?:")?\](.*?)\[\/quote\1?\]/mi,
'',
'Quote with citation',
"[quote=mike]Now is the time...[/quote]",
:quote],
'Quote (Sourceless)' => [
/\[quote(:.*)?\](.*?)\[\/quote\1?\]/mi,
'',
'Quote (sourceclass)',
"[quote]Now is the time...[/quote]",
:quote],
'Link' => [
/\[url=(?:")?(.*?)(?:")?\](.*?)\[\/url\]/mi,
'\2',
'Hyperlink to somewhere else',
'Maybe try looking on [url=http://google.com]Google[/url]?',
:link],
'Link (Implied)' => [
/\[url\](.*?)\[\/url\]/mi,
'\1',
'Hyperlink (implied)',
"Maybe try looking on [url]http://google.com[/url]",
:link],
'Link (Automatic)' => [
/(\A|\s)((https?:\/\/|www\.)[^\s<]+)/,
' \2',
'Hyperlink (automatic)',
'Maybe try looking on http://www.google.com',
:link],
'Image (Resized)' => [
/\[img(:.+)? size=#{@@quote_matcher}(\d+)x(\d+)\2\](.*?)\[\/img\1?\]/im,
'',
'Display an image with a set width and height',
'[img size=96x96]http://www.google.com/intl/en_ALL/images/logo.gif[/img]',
:image],
'Image (Alternative)' => [
/\[img=([^\[\]].*?)\.(#{@@imageformats})\]/im,
'',
'Display an image (alternative format)',
'[img=http://myimage.com/logo.gif]',
:image],
'Image' => [
/\[img(:.+)?\]([^\[\]].*?)\.(#{@@imageformats})\[\/img\1?\]/im,
'',
'Display an image',
'Check out this crazy cat: [img]http://catsweekly.com/crazycat.jpg[/img]',
:image],
'YouTube' => [
/\[youtube\](.*?)\?v=([\w\d\-]+).*\[\/youtube\]/im,
# '',
'',
'Display a video from YouTube.com',
'[youtube]http://youtube.com/watch?v=E4Fbk52Mk1w[/youtube]',
:video],
'YouTube (Alternative)' => [
/\[youtube\](.*?)\/v\/([\w\d\-]+)\[\/youtube\]/im,
# '',
'',
'Display a video from YouTube.com (alternative format)',
'[youtube]http://youtube.com/watch/v/E4Fbk52Mk1w[/youtube]',
:video],
'Vimeo' => [
/\[vimeo\](.*?)\/(\d+)\[\/vimeo\]/im,
'',
'Display a video from Vimeo',
'[vimeo]http://www.vimeo.com/3485239[/vimeo]',
:video],
'Google Video' => [
/\[gvideo\](.*?)\?docid=([-]{0,1}\d+).*\[\/gvideo\]/mi,
'',
'Display a video from Google Video',
'[gvideo]http://video.google.com/videoplay?docid=-2200109535941088987[/gvideo]',
:video],
'Email' => [
/\[email(:.+)?\](.+)\[\/email\1?\]/i,
'\2',
'Link to email address',
'[email]wadus@wadus.com[/email]',
:email],
'Align' => [
/\[align=(.*?)\](.*?)\[\/align\]/mi,
"\\2",
'Align this object using float',
'Here\'s a wrapped image: [align=right][img]image.png[/img][/align]',
:align]
}
class << self
# Convert a string with BBCode markup into its corresponding HTML markup
#
# === Basic Usage
#
# The first parameter is the string off BBCode markup to be processed
#
# text = "[b]some bold text to markup[/b]"
# output = BBRuby.to_html(text)
# # output => "some bold text to markup"
#
# === Custom BBCode translations
#
# You can supply your own BBCode markup translations to create your own custom markup
# or override the default BBRuby translations (parameter is a hash of custom translations).
#
# The hash takes the following format: "name" => [regexp, replacement, description, example, enable_symbol]
#
# custom_blockquote = {
# 'Quote' => [
# /\[quote(:.*)?=(.*?)\](.*?)\[\/quote\1?\]/mi,
# '
\2
\3
',
# 'Quote with citation',
# '[quote=mike]please quote me[/quote]',
# :quote
# ]
# }
#
# === Enable and Disable specific tags
#
# BBRuby will allow you to only enable certain BBCode tags, or to explicitly disable certain tags.
# Pass in either :disable or :enable to set your method, followed by the comma-separated list of tags
# you wish to disable or enable
#
# BBRuby.to_html(text, {}, true, :enable, :image, :bold, :quote)
# BBRuby.to_html(text, {}, true, :disable, :image, :video, :color)
#
def to_html(text, tags_alternative_definition={}, escape_html=true, method=:disable, *tags)
text = process_tags(text, tags_alternative_definition, escape_html, method, *tags)
# parse spacing
text.gsub!( /\r\n?/, "\n" )
text.gsub!( /\n/, " \n" )
text.gsub!(/\[quote\]/, '