class Kramdown::Parser::GFM

Constants

ATX_HEADER_START
FENCED_CODEBLOCK_MATCH

Public Class Methods

new(source, options) click to toggle source
Calls superclass method Kramdown::Parser::Kramdown.new
# File lib/kramdown/parser/gfm.rb, line 16
def initialize(source, options)
  super
  @span_parsers.delete(:line_break) if @options[:hard_wrap]
  {:codeblock_fenced => :codeblock_fenced_gfm,
    :atx_header => :atx_header_gfm}.each do |current, replacement|
    i = @block_parsers.index(current)
    @block_parsers.delete(current)
    @block_parsers.insert(i, replacement)
  end
end

Public Instance Methods

add_hard_line_breaks(element) click to toggle source
# File lib/kramdown/parser/gfm.rb, line 32
def add_hard_line_breaks(element)
  element.children.map! do |child|
    if child.type == :text && child.value =~ /\n/
      children = []
      lines = child.value.split(/\n/, -1)
      omit_trailing_br = (Kramdown::Element.category(element) == :block && element.children[-1] == child &&
                          lines[-1].empty?)
      lines.each_with_index do |line, index|
        new_element_options = { :location => child.options[:location] + index }

        children << Element.new(:text, (index > 0 ? "\n#{line}" : line), nil, new_element_options)
        children << Element.new(:br, nil, nil, new_element_options) if index < lines.size - 2 ||
          (index == lines.size - 2 && !omit_trailing_br)
      end
      children
    elsif child.type == :html_element
      child
    else
      add_hard_line_breaks(child)
      child
    end
  end.flatten!
end
parse() click to toggle source
Calls superclass method Kramdown::Parser::Kramdown#parse
# File lib/kramdown/parser/gfm.rb, line 27
def parse
  super
  add_hard_line_breaks(@root) if @options[:hard_wrap]
end