Sha256: bc4b7872cad6f5088005cce9ed121419c7c32ab2284ea8e08ac9e0686b8b629f

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

module Middleman
  module Syntax
    class << self
      def registered(app, options_hash={})
        require 'pygments'

        app.send :include, Helper

        require 'middleman-core/renderers/redcarpet'
        Middleman::Renderers::MiddlemanRedcarpetHTML.send :include, MarkdownCodeRenderer
      end
      alias :included :registered
    end

    module Helper

      # Output highlighted code. Use like:
      #
      #    <% code('ruby') do %>
      #      my code
      #    <% end %>
      #
      # To produce the following structure:
      #
      #    <div class="highlight">
      #      <pre>#{your code}
      #      </pre>
      #    </div>
      #
      # @param [String] language the Pygments lexer to use
      def code(language=nil, &block)
        # Save current buffer for later
        @_out_buf, _buf_was = "", @_out_buf

        begin
          content = if block_given?
            capture_html(&block)
          else
            ""
          end
        ensure
          # Reset stored buffer
          @_out_buf = _buf_was
        end

        concat_content Pygments.highlight(content, :lexer => language)
      end
    end

    module MarkdownCodeRenderer
      def block_code(code, language)
        Pygments.highlight(code, :lexer => language)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
middleman-syntax-1.0.1 lib/middleman-syntax/extension.rb