WordPress is a seriously popular blogging platform, primarily because it simply rocks. In fact, this here blog uses WordPress.
Since I generally write posts about programming issues, I needed a good plugin for automagically highlighting code segments. I ended up choosing SyntaxHighlighter by Viper007Bond.
While it generally kicks butt, there is one little bug that is particularly annoying for those of us who post snippets of Ruby code: including a variable in a string like 'this is a #{color} string'
causes SyntaxHighlighter to make everything after the “#” into a comment, which it wraps down to the following line.
That simply won’t do…
You can see what I mean below:
The code above can be found in my recent post Calling a 32-bit System Command from a Script in x64 Windows. As you can see, the parser assumes that #{putername}
should be a comment since it contains a “#“. Obviously, that’s flat out wrong.
I did a little search and I found out this problem has been hanging around since at least April 7, 2008. So, I figured if I wanted it fixed, I’d have to take matters into my own hands.
It’s a rather simple bug to fix if you understand regular expressions. Here’s what to do:
- Find the file:
/wp-content/plugins/syntaxhighlighter/syntaxhighlighter/scripts/shBrushRuby.js
- Edit the file and find line 43, which should look like this:
{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },
- Change that line to look like this:
{ regex: new RegExp('#[^\{].*$', 'gm'), css: 'comments' },
- Save your changes and upload to the server if you are using FTP
That’s it – you’re all set.
The way Ruby parsing is set by default is to use the “Perl Comment” standard. That means that any time SyntaxHighlighter finds a “#” in your code, it will assume that everything after the “#” until the end of the string is a comment. The change you just made uses a different regular expression for Ruby code comments:
'#[^\{].*$'
The new regex matches a “#” followed by any character that is NOT an opening squiggly brace, i.e. “{“. The next characters to match can be zero or more of any character, i.e. “.*“. The match is continued until the end of the string (“$“), or the end of the current line in other words.
All we’ve done is made it treat comments the same as before, except that if it finds “#{“, it will no longer parse the text as a comment. After applying the new regex as outlined above, we now get this:
That’s all it takes to get SyntaxHighlighter working properly for variables inside a string in Ruby!
Recent Comments