couple of tweaks to line numbering option

This commit is contained in:
Tom Preston-Werner 2009-01-23 14:17:38 -08:00
commit 9b02059054
3 changed files with 37 additions and 8 deletions

View File

@ -7,6 +7,7 @@
* Add a working Mephisto / MySQL converter [github.com/ivey] * Add a working Mephisto / MySQL converter [github.com/ivey]
* Allowing .htaccess files to be copied over into the generated site [github.com/briandoll] * 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 option to not put file date in permalink URL [github.com/mreid]
* Add line number capabilities to highlight blocks [github.com/jcon]
* Bug Fixes * Bug Fixes
* Fix permalink behavior [github.com/cavalle] * Fix permalink behavior [github.com/cavalle]
* Fixed an issue with pygments, markdown, and newlines [github.com/zpinter] * Fixed an issue with pygments, markdown, and newlines [github.com/zpinter]

View File

@ -342,17 +342,33 @@ The argument to <code>highlight</code> is the language identifier. To find the
appropriate identifier to use for your favorite language, look for the "short appropriate identifier to use for your favorite language, look for the "short
name" on the "Lexers":http://pygments.org/docs/lexers/ page. name" on the "Lexers":http://pygments.org/docs/lexers/ page.
There is a second argument to <code>highlight</code> called
<code>linenos</code> that is optional. Including the <code>linenos</code>
argument will force the highlighted code to include line numbers. For
instance, the following code block would include line numbers next to each
line:
<pre>
{% highlight ruby linenos %}
def foo
puts 'foo'
end
{% endhighlight %}
</pre>
In order for the highlighting to show up, you'll need to include a In order for the highlighting to show up, you'll need to include a
highlighting stylesheet. For an example stylesheet you can look at highlighting stylesheet. For an example stylesheet you can look at
"syntax.css":http://github.com/mojombo/tpw/tree/master/css/syntax.css. These "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 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 <code>lineno</code> in syntax.css to distinguish the line
numbers from the highlighted code.
h2. Categories h2. Categories
Posts are placed into categories based on the directory structure they are found Posts are placed into categories based on the directory structure they are
within (see above for an example). The categories can be accessed from within found within (see above for an example). The categories can be accessed from
a Liquid template as follows: within a Liquid template as follows:
<pre> <pre>
{% for post in site.categories.foo %} {% for post in site.categories.foo %}

View File

@ -2,10 +2,22 @@ module Jekyll
class HighlightBlock < Liquid::Block class HighlightBlock < Liquid::Block
include Liquid::StandardFilters 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 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 <lang> [linenos]")
end
end end
def render(context) def render(context)
@ -18,9 +30,9 @@ module Jekyll
def render_pygments(context, code) def render_pygments(context, code)
if Jekyll.content_type == :markdown 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 else
"<notextile>" + Albino.new(code, @lang).to_s + "</notextile>" "<notextile>" + Albino.new(code, @lang).to_s(@options) + "</notextile>"
end end
end end