diff --git a/History.txt b/History.txt
index db30ba14..5d2d1edb 100644
--- a/History.txt
+++ b/History.txt
@@ -7,6 +7,7 @@
* Add a working Mephisto / MySQL converter [github.com/ivey]
* Allowing .htaccess files to be copied over into the generated site [github.com/briandoll]
* Add option to not put file date in permalink URL [github.com/mreid]
+ * Add line number capabilities to highlight blocks [github.com/jcon]
* Bug Fixes
* Fix permalink behavior [github.com/cavalle]
* Fixed an issue with pygments, markdown, and newlines [github.com/zpinter]
diff --git a/README.textile b/README.textile
index 6d02455b..f2c52a04 100644
--- a/README.textile
+++ b/README.textile
@@ -342,17 +342,33 @@ The argument to highlight
is the language identifier. To find the
appropriate identifier to use for your favorite language, look for the "short
name" on the "Lexers":http://pygments.org/docs/lexers/ page.
+There is a second argument to highlight
called
+linenos
that is optional. Including the linenos
+argument will force the highlighted code to include line numbers. For
+instance, the following code block would include line numbers next to each
+line:
+
+
+{% highlight ruby linenos %} +def foo + puts 'foo' +end +{% endhighlight %} ++ In order for the highlighting to show up, you'll need to include a highlighting stylesheet. For an example stylesheet you can look at "syntax.css":http://github.com/mojombo/tpw/tree/master/css/syntax.css. These are the same styles as used by GitHub and you are free to use them for your -own site. +own site. If you use linenos, you might want to include an additional CSS +class definition for
lineno
in syntax.css to distinguish the line
+numbers from the highlighted code.
h2. Categories
-Posts are placed into categories based on the directory structure they are found
-within (see above for an example). The categories can be accessed from within
-a Liquid template as follows:
+Posts are placed into categories based on the directory structure they are
+found within (see above for an example). The categories can be accessed from
+within a Liquid template as follows:
{% for post in site.categories.foo %} diff --git a/lib/jekyll/tags/highlight.rb b/lib/jekyll/tags/highlight.rb index 685fba3f..db0a9619 100644 --- a/lib/jekyll/tags/highlight.rb +++ b/lib/jekyll/tags/highlight.rb @@ -2,10 +2,22 @@ module Jekyll class HighlightBlock < Liquid::Block include Liquid::StandardFilters + # we need a language, but the linenos argument is optional. + SYNTAX = /(\w+)\s?(:?linenos)?\s?/ - def initialize(tag_name, lang, tokens) + def initialize(tag_name, markup, tokens) super - @lang = lang.strip + if markup =~ SYNTAX + @lang = $1 + if defined? $2 + # additional options to pass to Albino. + @options = { 'O' => 'linenos=inline' } + else + @options = {} + end + else + raise SyntaxError.new("Syntax Error in 'highlight' - Valid syntax: highlight[linenos]") + end end def render(context) @@ -18,9 +30,9 @@ module Jekyll def render_pygments(context, code) if Jekyll.content_type == :markdown - return "\n" + Albino.new(code, @lang).to_s + "\n" + return "\n" + Albino.new(code, @lang).to_s(@options) + "\n" else - " " + Albino.new(code, @lang).to_s + " " + "" + Albino.new(code, @lang).to_s(@options) + " " end end