summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2022-06-16 21:39:27 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2022-06-16 21:39:27 +0000
commit1a7b2fe9071677160b1bbe7db1d6fa21a21a1c2f (patch)
treef92034a04449ee53f1836757da680aab110ff8c9 /lib
parentfce5c3440708eb7c1f380a79d97e56460da0a05d (diff)
downloadredmine-1a7b2fe9071677160b1bbe7db1d6fa21a21a1c2f.tar.gz
redmine-1a7b2fe9071677160b1bbe7db1d6fa21a21a1c2f.zip
Move methods related to wiki section to a helper file and include it in all 3 formatters (#37119).
git-svn-id: https://svn.redmine.org/redmine/trunk@21643 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r--lib/redmine/wiki_formatting/common_mark/formatter.rb8
-rw-r--r--lib/redmine/wiki_formatting/markdown/formatter.rb54
-rw-r--r--lib/redmine/wiki_formatting/section_helper.rb59
-rw-r--r--lib/redmine/wiki_formatting/textile/formatter.rb17
4 files changed, 68 insertions, 70 deletions
diff --git a/lib/redmine/wiki_formatting/common_mark/formatter.rb b/lib/redmine/wiki_formatting/common_mark/formatter.rb
index bffad6c92..26257aaa0 100644
--- a/lib/redmine/wiki_formatting/common_mark/formatter.rb
+++ b/lib/redmine/wiki_formatting/common_mark/formatter.rb
@@ -61,7 +61,13 @@ module Redmine
TaskList::Filter
], PIPELINE_CONFIG
- class Formatter < Redmine::WikiFormatting::Markdown::Formatter
+ class Formatter
+ include Redmine::WikiFormatting::SectionHelper
+
+ def initialize(text)
+ @text = text
+ end
+
def to_html(*args)
result = MarkdownPipeline.call @text
result[:output].to_s
diff --git a/lib/redmine/wiki_formatting/markdown/formatter.rb b/lib/redmine/wiki_formatting/markdown/formatter.rb
index eb49e02db..177c5623c 100644
--- a/lib/redmine/wiki_formatting/markdown/formatter.rb
+++ b/lib/redmine/wiki_formatting/markdown/formatter.rb
@@ -57,6 +57,7 @@ module Redmine
class Formatter
include Redmine::WikiFormatting::LinksHelper
+ include Redmine::WikiFormatting::SectionHelper
alias :inline_restore_redmine_links :restore_redmine_links
def initialize(text)
@@ -69,59 +70,6 @@ module Redmine
html
end
- def get_section(index)
- section = extract_sections(index)[1]
- hash = Digest::MD5.hexdigest(section)
- return section, hash
- end
-
- 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
-
- def extract_sections(index)
- sections = [+'', +'', +'']
- offset = 0
- i = 0
- l = 1
- inside_pre = false
- @text.split(/(^(?:\S+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part|
- level = nil
- if part =~ /\A(~{3,}|`{3,})(\s*\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
-
private
def formatter
diff --git a/lib/redmine/wiki_formatting/section_helper.rb b/lib/redmine/wiki_formatting/section_helper.rb
new file mode 100644
index 000000000..a697e3faf
--- /dev/null
+++ b/lib/redmine/wiki_formatting/section_helper.rb
@@ -0,0 +1,59 @@
+module Redmine
+ module WikiFormatting
+ module SectionHelper
+
+ def get_section(index)
+ section = extract_sections(index)[1]
+ hash = Digest::MD5.hexdigest(section)
+ return section, hash
+ end
+
+ 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
+
+ def extract_sections(index)
+ sections = [+'', +'', +'']
+ offset = 0
+ i = 0
+ l = 1
+ inside_pre = false
+ @text.split(/(^(?:\S+\r?\n\r?(?:\=+|\-+)|#+.+|(?:~~~|```).*)\s*$)/).each do |part|
+ level = nil
+ if part =~ /\A(~{3,}|`{3,})(\s*\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
+ end
+ end
+end \ No newline at end of file
diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb
index 61cf0385d..fd7d0b2ec 100644
--- a/lib/redmine/wiki_formatting/textile/formatter.rb
+++ b/lib/redmine/wiki_formatting/textile/formatter.rb
@@ -25,6 +25,7 @@ module Redmine
class Formatter < RedCloth3
include ActionView::Helpers::TagHelper
include Redmine::WikiFormatting::LinksHelper
+ include Redmine::WikiFormatting::SectionHelper
alias :inline_auto_link :auto_link!
alias :inline_auto_mailto :auto_mailto!
@@ -45,22 +46,6 @@ module Redmine
super(*RULES).to_s
end
- def get_section(index)
- section = extract_sections(index)[1]
- hash = Digest::MD5.hexdigest(section)
- return section, hash
- end
-
- 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
-
def extract_sections(index)
@pre_list = []
text = self.dup