I have a Rails site, where the content is written in markdown. I wish to display a snippet of each, with a ‘Read more..’ link.
How do I go about this? Simple truncating the raw text will not work, for example..
>> 'This is an [example](http://example.com)'[0..25] => 'This is an [example](http:'
Ideally I want to allow the author to (optionally) insert a marker to specify what to use as the ‘snippet’, if not it would take 250 words, and append ‘…’ – for example..
This article is an example of something or other. This segment will be used as the snippet on the index page. ^^^^^^^^^^^^^^^ This text will be visible once clicking the 'Read more..' link
The marker could be thought of like an EOF marker (which can be ignored when displaying the full document)
I am using maruku for the Markdown processing (RedCloth is very biased towards Textile, BlueCloth is extremely buggy, and I wanted a native-Ruby parser which ruled out peg-markdown and RDiscount)
Alternatively (since the Markdown is translated to HTML anyway) truncating the HTML correctly would be an option – although it would be preferable to not markdown() the entire document, just to get the first few lines.
So, the options I can think of are (in order of preference)..
- Add a ‘truncate’ option to the maruku parser, which will only parse the first x words, or till the ‘excerpt’ marker.
- Write/find a parser-agnostic Markdown truncate’r
- Write/find an intelligent HTML truncating function
The following from http://mikeburnscoder.wordpress.com/2006/11/11/truncating-html-in-ruby/, with some modifications will correctly truncate HTML, and easily allow appending a string before the closing tags.
The modified code: