From be877bc691190909b587454e7bb7c89818762338 Mon Sep 17 00:00:00 2001 From: Mark Otto Date: Wed, 9 Jul 2014 20:00:22 -0700 Subject: plugins: add new example doodad hackery bullshitery and markdown block plugin for markdown includes --- docs/_plugins/highlight_alt.rb | 80 +++++++++++++++++++++++++++++++++++++++++ docs/_plugins/markdown-block.rb | 20 +++++++++++ 2 files changed, 100 insertions(+) create mode 100644 docs/_plugins/highlight_alt.rb create mode 100644 docs/_plugins/markdown-block.rb (limited to 'docs/_plugins') 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="" + # + # 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="", 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 [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) + "
#{output}
" + 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)) + "
#{code}
" + end + + def add_code_tag(code) + # Add nested tags to code blocks + code = code.sub(/
\n*/,'
')
+        code = code.sub(/\n*<\/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) -- cgit v1.2.3