jarrett / rbbcode

Converts BBCode to HTML. Gracefully handles invalid input. Built on Treetop.
41 stars 9 forks source link

Supporting Color and Size tags #26

Open Dahie opened 4 years ago

Dahie commented 4 years ago

Hi,

BBCode has the color and size tag. These are not supported yet by the gem and are neither filtered nor converted. I can prepare the code change, but I'd like to know your stance on this. Some examples coming up.

Scenario 1: filter everything

[color=red]Hello world[/color]
# HTML filtered => "Hello World"
# markdown filtered => "Hello World"

Scenario 2: convert to span-class

[color=red]Hello world[/color]
# HTML to span => "<span class="red">Hello World</span>"
# Markdown to span => "<span class="red">Hello World</span>"

Markdown does support having some HTML tags in the syntax, so spans can be used also for underlines:

[u]Hello world[/u]
# HTML to span => "<span class="underlined">Hello World</span>"
# Markdown to span => "<span class="underlined">Hello World</span>"

Scenario 3: convert to span-style

[color=red]Hello world[/color]
# HTML to span => "<span style="color: red;">Hello World</span>"
# Markdown to span => "<span style="color: red;">Hello World</span>"

Which of the three do you support? Personally I'd like to see Scenario 2, because with this the styling information is not lost, but is only displayed if the styling classes are made in place. People who don't want to add the styling classes won't see the styling.

jarrett commented 4 years ago

I think scenario #2 is best. I'd add to that an API like the following:

RbbCode.new(output_format: :markdown, unsupported_features: :span)
RbbCode.new(output_format: :markdown, unsupported_features: :remove)
RbbCode.new(output_format: :markdown, unsupported_features: -> tag {
  # tag is a string representing the unsupported markup, including its content,
  # "[u]underlined text[/u]". Whatever this proc returns will be substituted into
  # the output.
  tab.sub('[u]', '_').sub('[/u]', '_')
})