Question

We're using Bluecloth for the text formatting on a rails website but I've run into a problem with some email addresses. When they have double underscores in the address BlueCloth is translating it into EM tags.

In the rails console:

BlueCloth::new("bob_smith@foo.com").to_html
"<p>bob_smith@foo.com</p>"

An email address with a single underscore works fine, but when there are two underscores in the address the underscores are changed to em tags:

BlueCloth::new("bob_jones_smith@foo.com").to_html
"<p>bob<em>jones</em>smith@foo.com</p>"

I need the formatting for the rest of the text but I need away to turn it off for the email addresses. I feel like I used to be able to use a notextile tag but that doesn't seem to work anymore.

BlueCloth::new("<notextile> bob_jones_smith@foo.com </notextile>").to_html
"<p><notextile> bob<em>jones</em>smith@foo.com </notextile></p>"

Anyone know how to deal with this? We're using bluecloth version 2.2.0.

Was it helpful?

Solution

One option is to switch the :relaxed setting to true:

BlueCloth.new('bob_jones_smith@foo.com', relaxed: true).to_html

The option documentation is available online but the option names and the way they map to the options in the underlying C library is not always obvious.

If you want to use the default options for text where you need in-word emphasis in some places but not others you can explicitly escape the underscores:

escaped_email = 'bob_jones_smith@foo.com'.gsub('_', '\_')
BlueCloth.new(escaped_email).to_html

OTHER TIPS

Why don't you use string interpolation?

BlueCloth::new("don't format this: %s").to_html % 'bob_jones_smith@foo.com' 
=> "<p>don't format this: bob_jones_smith@foo.com</p>"

Unless you don't know where you want to keep the original string, which would be... odd.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top