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