Feature #37119 » 0001-Move-methods-related-to-section-to-a-helper-file-and.patch
| lib/redmine/wiki_formatting/common_mark/formatter.rb | ||
|---|---|---|
| 61 | 61 |
TaskList::Filter |
| 62 | 62 |
], PIPELINE_CONFIG |
| 63 | 63 | |
| 64 |
class Formatter < Redmine::WikiFormatting::Markdown::Formatter |
|
| 64 |
class Formatter |
|
| 65 |
include Redmine::WikiFormatting::SectionHelper |
|
| 66 | ||
| 67 |
def initialize(text) |
|
| 68 |
@text = text |
|
| 69 |
end |
|
| 70 | ||
| 65 | 71 |
def to_html(*args) |
| 66 | 72 |
result = MarkdownPipeline.call @text |
| 67 | 73 |
result[:output].to_s |
| lib/redmine/wiki_formatting/markdown/formatter.rb | ||
|---|---|---|
| 57 | 57 | |
| 58 | 58 |
class Formatter |
| 59 | 59 |
include Redmine::WikiFormatting::LinksHelper |
| 60 |
include Redmine::WikiFormatting::SectionHelper |
|
| 60 | 61 |
alias :inline_restore_redmine_links :restore_redmine_links |
| 61 | 62 | |
| 62 | 63 |
def initialize(text) |
| ... | ... | |
| 69 | 70 |
html |
| 70 | 71 |
end |
| 71 | 72 | |
| 72 |
def get_section(index) |
|
| 73 |
section = extract_sections(index)[1] |
|
| 74 |
hash = Digest::MD5.hexdigest(section) |
|
| 75 |
return section, hash |
|
| 76 |
end |
|
| 77 | ||
| 78 |
def update_section(index, update, hash=nil) |
|
| 79 |
t = extract_sections(index) |
|
| 80 |
if hash.present? && hash != Digest::MD5.hexdigest(t[1]) |
|
| 81 |
raise Redmine::WikiFormatting::StaleSectionError |
|
| 82 |
end |
|
| 83 | ||
| 84 |
t[1] = update unless t[1].blank? |
|
| 85 |
t.reject(&:blank?).join "\n\n" |
|
| 86 |
end |
|
| 87 | ||
| 88 |
def extract_sections(index) |
|
| 89 |
sections = [+'', +'', +''] |
|
| 90 |
offset = 0 |
|
| 91 |
i = 0 |
|
| 92 |
l = 1 |
|
| 93 |
inside_pre = false |
|
| 94 |
@text.split(/(^(?:\S+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part| |
|
| 95 |
level = nil |
|
| 96 |
if part =~ /\A(~{3,}|`{3,})(\s*\S+)?\s*$/
|
|
| 97 |
if !inside_pre |
|
| 98 |
inside_pre = true |
|
| 99 |
elsif !$2 |
|
| 100 |
inside_pre = false |
|
| 101 |
end |
|
| 102 |
elsif inside_pre |
|
| 103 |
# nop |
|
| 104 |
elsif part =~ /\A(#+).+/ |
|
| 105 |
level = $1.size |
|
| 106 |
elsif part =~ /\A.+\r?\n\r?(\=+|\-+)\s*$/ |
|
| 107 |
level = $1.include?('=') ? 1 : 2
|
|
| 108 |
end |
|
| 109 |
if level |
|
| 110 |
i += 1 |
|
| 111 |
if offset == 0 && i == index |
|
| 112 |
# entering the requested section |
|
| 113 |
offset = 1 |
|
| 114 |
l = level |
|
| 115 |
elsif offset == 1 && i > index && level <= l |
|
| 116 |
# leaving the requested section |
|
| 117 |
offset = 2 |
|
| 118 |
end |
|
| 119 |
end |
|
| 120 |
sections[offset] << part |
|
| 121 |
end |
|
| 122 |
sections.map(&:strip) |
|
| 123 |
end |
|
| 124 | ||
| 125 | 73 |
private |
| 126 | 74 | |
| 127 | 75 |
def formatter |
| lib/redmine/wiki_formatting/section_helper.rb | ||
|---|---|---|
| 1 |
module Redmine |
|
| 2 |
module WikiFormatting |
|
| 3 |
module SectionHelper |
|
| 4 | ||
| 5 |
def get_section(index) |
|
| 6 |
section = extract_sections(index)[1] |
|
| 7 |
hash = Digest::MD5.hexdigest(section) |
|
| 8 |
return section, hash |
|
| 9 |
end |
|
| 10 | ||
| 11 |
def update_section(index, update, hash=nil) |
|
| 12 |
t = extract_sections(index) |
|
| 13 |
if hash.present? && hash != Digest::MD5.hexdigest(t[1]) |
|
| 14 |
raise Redmine::WikiFormatting::StaleSectionError |
|
| 15 |
end |
|
| 16 | ||
| 17 |
t[1] = update unless t[1].blank? |
|
| 18 |
t.reject(&:blank?).join "\n\n" |
|
| 19 |
end |
|
| 20 | ||
| 21 |
def extract_sections(index) |
|
| 22 |
sections = [+'', +'', +''] |
|
| 23 |
offset = 0 |
|
| 24 |
i = 0 |
|
| 25 |
l = 1 |
|
| 26 |
inside_pre = false |
|
| 27 |
@text.split(/(^(?:\S+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part| |
|
| 28 |
level = nil |
|
| 29 |
if part =~ /\A(~{3,}|`{3,})(\s*\S+)?\s*$/
|
|
| 30 |
if !inside_pre |
|
| 31 |
inside_pre = true |
|
| 32 |
elsif !$2 |
|
| 33 |
inside_pre = false |
|
| 34 |
end |
|
| 35 |
elsif inside_pre |
|
| 36 |
# nop |
|
| 37 |
elsif part =~ /\A(#+).+/ |
|
| 38 |
level = $1.size |
|
| 39 |
elsif part =~ /\A.+\r?\n\r?(\=+|\-+)\s*$/ |
|
| 40 |
level = $1.include?('=') ? 1 : 2
|
|
| 41 |
end |
|
| 42 |
if level |
|
| 43 |
i += 1 |
|
| 44 |
if offset == 0 && i == index |
|
| 45 |
# entering the requested section |
|
| 46 |
offset = 1 |
|
| 47 |
l = level |
|
| 48 |
elsif offset == 1 && i > index && level <= l |
|
| 49 |
# leaving the requested section |
|
| 50 |
offset = 2 |
|
| 51 |
end |
|
| 52 |
end |
|
| 53 |
sections[offset] << part |
|
| 54 |
end |
|
| 55 |
sections.map(&:strip) |
|
| 56 |
end |
|
| 57 |
end |
|
| 58 |
end |
|
| 59 |
end |
|
| lib/redmine/wiki_formatting/textile/formatter.rb | ||
|---|---|---|
| 25 | 25 |
class Formatter < RedCloth3 |
| 26 | 26 |
include ActionView::Helpers::TagHelper |
| 27 | 27 |
include Redmine::WikiFormatting::LinksHelper |
| 28 |
include Redmine::WikiFormatting::SectionHelper |
|
| 28 | 29 | |
| 29 | 30 |
alias :inline_auto_link :auto_link! |
| 30 | 31 |
alias :inline_auto_mailto :auto_mailto! |
| ... | ... | |
| 45 | 46 |
super(*RULES).to_s |
| 46 | 47 |
end |
| 47 | 48 | |
| 48 |
def get_section(index) |
|
| 49 |
section = extract_sections(index)[1] |
|
| 50 |
hash = Digest::MD5.hexdigest(section) |
|
| 51 |
return section, hash |
|
| 52 |
end |
|
| 53 | ||
| 54 |
def update_section(index, update, hash=nil) |
|
| 55 |
t = extract_sections(index) |
|
| 56 |
if hash.present? && hash != Digest::MD5.hexdigest(t[1]) |
|
| 57 |
raise Redmine::WikiFormatting::StaleSectionError |
|
| 58 |
end |
|
| 59 | ||
| 60 |
t[1] = update unless t[1].blank? |
|
| 61 |
t.reject(&:blank?).join "\n\n" |
|
| 62 |
end |
|
| 63 | ||
| 64 | 49 |
def extract_sections(index) |
| 65 | 50 |
@pre_list = [] |
| 66 | 51 |
text = self.dup |
- « Previous
- 1
- 2
- Next »