Class: Redmine::WikiFormatting::Markdown::Formatter

Inherits:
Object
  • Object
show all
Includes:
LinksHelper
Defined in:
lib/redmine/wiki_formatting/markdown/formatter.rb

Constant Summary

Constants included from LinksHelper

LinksHelper::AUTO_LINK_RE

Instance Method Summary collapse

Methods included from LinksHelper

#auto_link!, #auto_mailto!, #restore_redmine_links

Constructor Details

#initialize(text) ⇒ Formatter

Returns a new instance of Formatter

Since:

  • 2.5.0



58
59
60
# File 'lib/redmine/wiki_formatting/markdown/formatter.rb', line 58

def initialize(text)
  @text = text
end

Instance Method Details

#extract_sections(index) ⇒ Object

Since:

  • 2.5.0



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/redmine/wiki_formatting/markdown/formatter.rb', line 83

def extract_sections(index)
  sections = ['', '', '']
  offset = 0
  i = 0
  l = 1
  inside_pre = false
  @text.split(/(^(?:.+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part|
    level = nil
    if part =~ /\A(~{3,}|`{3,})(\S+)?\s*$/
      if !inside_pre
        inside_pre = true
      elsif !$2
        inside_pre = false
      end
    elsif inside_pre
      # nop
    elsif part =~ /\A(#+).+/
      level = $1.size
    elsif part =~ /\A.+\r?\n\r?(\=+|\-+)\s*$/
      level = $1.include?('=') ? 1 : 2
    end
    if level
      i += 1
      if offset == 0 && i == index
        # entering the requested section
        offset = 1
        l = level
      elsif offset == 1 && i > index && level <= l
        # leaving the requested section
        offset = 2
      end
    end
    sections[offset] << part
  end
  sections.map(&:strip)
end

#get_section(index) ⇒ Object

Since:

  • 2.5.0



68
69
70
71
72
# File 'lib/redmine/wiki_formatting/markdown/formatter.rb', line 68

def get_section(index)
  section = extract_sections(index)[1]
  hash = Digest::MD5.hexdigest(section)
  return section, hash
end

#to_html(*args) ⇒ Object

Since:

  • 2.5.0



62
63
64
65
66
# File 'lib/redmine/wiki_formatting/markdown/formatter.rb', line 62

def to_html(*args)
  html = formatter.render(@text)
  html = inline_restore_redmine_links(html)
  html
end

#update_section(index, update, hash = nil) ⇒ Object

Since:

  • 2.5.0



74
75
76
77
78
79
80
81
# File 'lib/redmine/wiki_formatting/markdown/formatter.rb', line 74

def update_section(index, update, hash=nil)
  t = extract_sections(index)
  if hash.present? && hash != Digest::MD5.hexdigest(t[1])
    raise Redmine::WikiFormatting::StaleSectionError
  end
  t[1] = update unless t[1].blank?
  t.reject(&:blank?).join "\n\n"
end