This site provides the following access keys:

Brandan Lennox's


A Ruby Text Munger


This is a Ruby module that I use on this blog as a shortcut to reference images, audio, footnotes, etc. It’s very specific to my needs, but you might find something useful in it.

By including the Preprocessor module, your class will have a preprocessed method that returns an object capable of filtering the return values of instance methods of that class:

class Article
  attr_accessor :title, :body
  include Preprocessor

a = => 'Sup')
a.body = '{{title}}: Deth metal {{audio src:/files/audio/deth-metal}}'

a.body              #=> '{{title}}: Deth metal {{audio src:/files/audio/deth-metal}}'
a.preprocessed.body #=> 'Sup: Deth metal <audio controls><source ... /></audio>'


Substitutable tags are surrounded by double curly braces: {{tag}}. Options to the tag vary and are given as space-separated name-value pairs, where the name and value are separated by a colon:

{{image src:photo.png alt:"Me at the Brandenburg Gate"}}

Option values may be unquoted, single-quoted, double-quoted, or pipe-quoted. Quotes are needed if the option value contains whitespace. Other quote styles may be useful if the option value contains e.g. a double quote:

{{footnote ref:1 text:|So I said, "Don't shoot the messenger HAHAHLOLOL"|}}


I like to use footnotes, but they’re a pain in the ass to manage. Simple footnotes were my main motivation in creating this module.

{{footnote ref:1 text:"Disclaimer: Although I made this statement, it may not be true."}}
{{footnote ref:2 text:"Full disclosure: I own stock in buntaluffigus skins."}}

Create footnote references using the {{footnote}} tag. Create the list of footnotes at the end of your document via the {{footnotes}} tag (it’s an HTML ordered list).

See one of my articles with footnotes if you’re interested in the markup.


Creates an HTML paragraph and image and optional caption:

{{image src:jade-plant.png alt:"My beautiful jade plant" title:alt caption:title}}


<p class="image"><img ... /><span class="caption">...</span></p>


  • src the URL of the image. If it’s not an absolute path/URL, prepends a default path, which you can change by setting MilesAhead::Preprocessor::Image.options[:default_path].
  • alt alt attribute of the <img>
  • title title attribute of the <img>. If the value of the title option is "alt", it will use the value of the alt option.
  • caption a <span class="caption"> will be added after the image. Also accepts the values "alt" and "title" to use those values.


Creates an HTML 5 <audio> element with Ogg and MP3 sources:

{{audio src:funky-jam}}


<audio controls><source src="/audio/funky-jam.oga" type="audio/ogg" /><source src="/audio/funky-jam.mp3" type="audio/mpeg" /></audio>

You can set the default path for non-absolute paths via Preprocessor::Audio.options[:default_path].


Creates an HTML 5 <video> element with Ogg and MP4 sources:

{{video src:kitty-in-the-window poster:/images/kitty-in-the-window.png}}


<video controls poster="/images/kitty-in-the-window.png"><source src="/video/kitty-in-the-window.ogv" type="video/ogg" /><source src="/video/kitty-in-the-window.mp4" type="video/mp4" /></video>

You can set the default path for non-absolute paths via Preprocessor::Video.options[:default_path].

Also handles embedding YouTube videos via a URL:

{{video src:""}}