diff options
| author | Mark Otto <[email protected]> | 2014-07-09 20:00:22 -0700 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2014-07-09 20:00:22 -0700 |
| commit | be877bc691190909b587454e7bb7c89818762338 (patch) | |
| tree | 6c790b89a9cb4f61109fde057be8d3b9c6e7d822 /docs/_plugins | |
| parent | 284685011785ae916b8ebf0811f29da0c6105fe6 (diff) | |
| download | bootstrap-be877bc691190909b587454e7bb7c89818762338.tar.xz bootstrap-be877bc691190909b587454e7bb7c89818762338.zip | |
plugins: add new example doodad hackery bullshitery and markdown block plugin for markdown includes
Diffstat (limited to 'docs/_plugins')
| -rw-r--r-- | docs/_plugins/highlight_alt.rb | 80 | ||||
| -rw-r--r-- | docs/_plugins/markdown-block.rb | 20 |
2 files changed, 100 insertions, 0 deletions
diff --git a/docs/_plugins/highlight_alt.rb b/docs/_plugins/highlight_alt.rb new file mode 100644 index 000000000..de84e759d --- /dev/null +++ b/docs/_plugins/highlight_alt.rb @@ -0,0 +1,80 @@ +module Jekyll + module Tags + class ExampleBlock < Liquid::Block + include Liquid::StandardFilters + + # The regular expression syntax checker. Start with the language specifier. + # Follow that by zero or more space separated options that take one of three + # forms: name, name=value, or name="<quoted list>" + # + # <quoted list> is a space-separated list of numbers + SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=(\w+|"([0-9]+\s)*[0-9]+"))?)*)$/ + + def initialize(tag_name, markup, tokens) + super + if markup.strip =~ SYNTAX + @lang = $1.downcase + @options = {} + if defined?($2) && $2 != '' + # Split along 3 possible forms -- key="<quoted list>", key=value, or key + $2.scan(/(?:\w="[^"]*"|\w=\w|\w)+/) do |opt| + key, value = opt.split('=') + # If a quoted list, convert to array + if value && value.include?("\"") + value.gsub!(/"/, "") + value = value.split + end + @options[key.to_sym] = value || true + end + end + @options[:linenos] = "inline" if @options.key?(:linenos) and @options[:linenos] == true + else + raise SyntaxError.new <<-eos +Syntax Error in tag 'highlight' while parsing the following markup: + + #{markup} + +Valid syntax: highlight <lang> [linenos] +eos + end + end + + def render(context) + prefix = context["highlighter_prefix"] || "" + suffix = context["highlighter_suffix"] || "" + code = super.to_s.strip + + output = case context.registers[:site].highlighter + + when 'rouge' + render_rouge(code) + end + + rendered_output = example(code) + add_code_tag(output) + prefix + rendered_output + suffix + end + + def example(output) + "<div class=\"bs-example\">#{output}</div>" + end + + def render_rouge(code) + require 'rouge' + formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false) + lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText + code = formatter.format(lexer.lex(code)) + "<div class=\"highlight\"><pre>#{code}</pre></div>" + end + + def add_code_tag(code) + # Add nested <code> tags to code blocks + code = code.sub(/<pre>\n*/,'<pre><code class="language-' + @lang.to_s.gsub("+", "-") + '" data-lang="' + @lang.to_s + '">') + code = code.sub(/\n*<\/pre>/,"</code></pre>") + code.strip + end + + end + end +end + +Liquid::Template.register_tag('example', Jekyll::Tags::ExampleBlock) diff --git a/docs/_plugins/markdown-block.rb b/docs/_plugins/markdown-block.rb new file mode 100644 index 000000000..6aa761585 --- /dev/null +++ b/docs/_plugins/markdown-block.rb @@ -0,0 +1,20 @@ +module Jekyll + class MarkdownBlock < Liquid::Block + alias_method :render_block, :render + + def initialize(tag_name, markup, tokens) + super + end + + # Uses the default Jekyll markdown parser to + # parse the contents of this block + # + def render(context) + site = context.registers[:site] + converter = site.getConverterImpl(::Jekyll::Converters::Markdown) + converter.convert(render_block(context)) + end + end +end + +Liquid::Template.register_tag('markdown', Jekyll::MarkdownBlock) |
