lib/redcarpet.rb



require 'redcarpet.so'

module Redcarpet
  VERSION = '2.0.0b3'

  class Markdown
    # Available Markdown extensions
    attr_accessor :no_intra_emphasis
    attr_accessor :tables
    attr_accessor :fenced_code_blocks
    attr_accessor :autolink
    attr_accessor :strikethrough
    attr_accessor :lax_html_blocks
    attr_accessor :space_after_headers
    attr_accessor :superscript

    attr_accessor :renderer

    def initialize(renderer, extensions={})
      if renderer.instance_of? Class
        renderer = renderer.new
      end

      @renderer = renderer
      extensions.each_pair { |k, v| send("#{k}=", v) }
    end
  end

  module Render

    # XHTML Renderer
    class XHTML < HTML
      def initialize(extensions={})
        super(extensions.merge(:xhtml => true))
      end
    end

    # HTML + SmartyPants renderer
    class SmartyHTML < HTML
      include SmartyPants
    end

    # SmartyPants Mixin module
    # 
    # Implements SmartyPants.postprocess, which
    # performs smartypants replacements on the HTML file,
    # once it has been fully rendered.
    #
    # To add SmartyPants postprocessing to your custom
    # renderers, just mixin the module `include SmartyPants`
    #
    # You can also use this as a standalone SmartyPants
    # implementation.
    #
    # Example:
    #
    #   # Mixin
    #   class CoolRenderer < HTML
    #     include SmartyPants
    #     # more code here
    #   end
    #
    #   # Standalone
    #   Redcarpet::Render::SmartyPants.postprocess("you're")
    #
    module SmartyPants
      extend self
      def self.render(text)
        postprocess text
      end
    end
  end
end