diff --git a/docs/_includes/components/navs.html b/docs/_includes/components/navs.html index ed1f53f616645fd7f0a20e1738c8c488b30550db..cd9db235b5053e0f85f175d09e3908bf227e124c 100644 --- a/docs/_includes/components/navs.html +++ b/docs/_includes/components/navs.html @@ -5,23 +5,8 @@ <h2 id="nav-base">Base nav</h2> <p>Roll your own navigation style by extending the base <code>.nav</code> component. All Bootstrap's nav components are built on top of this. Includes styles for the disabled state, but <strong>not the active state</strong>.</p> - <div class="bs-example"> - <ul class="nav" role="tablist"> - <li class="nav-item"> - <a class="nav-link" href="#">Link</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="#">Link</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="#">Another link</a> - </li> - <li class="nav-item disabled"> - <a class="nav-link" href="#">Disabled</a> - </li> - </ul> - </div> -{% highlight html %} + +{% example html %} <ul class="nav" role="tablist"> <li class="nav-item"> <a class="nav-link" href="#">Link</a> @@ -36,7 +21,7 @@ <a class="nav-link" href="#">Disabled</a> </li> </ul> -{% endhighlight %} +{% endexample %} <p>Classes are used so your markup can be super flexible.</p> <div class="bs-example"> diff --git a/docs/_plugins/highlight_alt.rb b/docs/_plugins/highlight_alt.rb new file mode 100644 index 0000000000000000000000000000000000000000..de84e759da2e78a0cb03c119fa8a6245d15b6ad6 --- /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 0000000000000000000000000000000000000000..6aa761585def1c7e50bad1d537f269dbe2727860 --- /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)