class Gollum::Filter::CriticMarkup

CriticMarkup

Render CriticMarkup

Constants

ADDITION_PATTERN

Patterns inspired by github.com/DivineDominion/criticmarkup.tmbundle/blob/master/Syntaxes/criticmarkup.tmLanguage All patterns use multiline matching (m flag) Logic inspired by github.com/CriticMarkup/CriticMarkup-toolkit/blob/master/CLI/criticParser_CLI.py

COMMENT_PATTERN
DELETION_PATTERN
HIGHLIGHT_PATTERN
SUBSTITUTION_PATTERN

Public Instance Methods

extract(data) click to toggle source
# File lib/gollum-lib/filter/critic_markup.rb, line 19
def extract(data)
  data.gsub! ADDITION_PATTERN do
    content = $~[:content]
    placeholder = generate_placeholder("#{content}#{@map.size}")
      # Is there a new paragraph followed by new text
    if content.start_with?("\n\n") && content != "\n\n"
      html = "\n\n<ins class='critic break'>&nbsp;</ins>\n\n<ins>#{content.gsub('\n', ' ')}</ins>"
      # Is the addition just a single new paragraph
    elsif content == "\n\n"
      html = "\n\n<ins class='critic break'>&nbsp;</ins>\n\n"
      # Is it added text followed by a new paragraph?
    elsif content.end_with?("\n\n") && content != "\n\n"
          html = "<ins>#{content.gsub('\n', ' ')}</ins>\n\n<ins class='critic break'>&nbsp;</ins>\n\n"
    else
      html = "<ins>#{content.gsub('\n', ' ')}</ins>"
    end
    @map[placeholder] = html
    placeholder
  end
  
  data.gsub! DELETION_PATTERN do
    content = $~[:content]
    placeholder = generate_placeholder("#{content}#{@map.size}")
    if content == "\n\n"
      html = "<del>&nbsp;</del>"
    else
      html = "<del>#{content.gsub('\n\n', ' ')}</del>"
    end
    @map[placeholder] = html
    placeholder
  end   
  
  data.gsub! SUBSTITUTION_PATTERN do
    oldcontent = $~[:oldcontent]
    newcontent = $~[:newcontent]
    placeholder = generate_placeholder("#{oldcontent}#{newcontent}#{@map.size}")
    html = "<del>#{oldcontent}</del><ins>#{newcontent}</ins>"
    @map[placeholder] = html
    placeholder
  end

  data.gsub! HIGHLIGHT_PATTERN do
    content = $~[:content]
    comment = $~[:comment]
    placeholder = generate_placeholder("#{content}#{@map.size}")
    html = "<mark>#{content}</mark><span class='critic comment'>#{comment}</span>"
    @map[placeholder] = html
    placeholder
  end
  
  data.gsub! COMMENT_PATTERN do
    content = $~[:content]
    placeholder = generate_placeholder("#{content}#{@map.size}")
    html = "<span class='critic comment'>#{content}</span>"
    @map[placeholder] = html
    placeholder
  end
  
  data
end
process(data) click to toggle source
# File lib/gollum-lib/filter/critic_markup.rb, line 80
def process(data)
  data.gsub! process_pattern do 
    @map[$~[:placeholder]]
  end
  data
end

Private Instance Methods

generate_placeholder(content) click to toggle source
# File lib/gollum-lib/filter/critic_markup.rb, line 93
def generate_placeholder(content)
  "#{open_pattern}#{Digest::SHA1.hexdigest(content)}#{close_pattern}"
end
process_pattern() click to toggle source
# File lib/gollum-lib/filter/critic_markup.rb, line 89
def process_pattern
  /(?<placeholder>#{open_pattern}\h{40}#{close_pattern})/
end