Monkey-patched ReverseMarkdown's :text & :pre (#353)
This commit is contained in:
parent
f02e926bfc
commit
9cbc209d62
3 changed files with 100 additions and 0 deletions
42
app/lib/reverse_markdown/converters/custom_pre.rb
Normal file
42
app/lib/reverse_markdown/converters/custom_pre.rb
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
module ReverseMarkdown
|
||||
module Converters
|
||||
class CustomPre < Base
|
||||
def convert(node, state = {})
|
||||
content = treat_children(node, state)
|
||||
if ReverseMarkdown.config.github_flavored
|
||||
"\n```#{language(node)}\n" << content << "\n```\n"
|
||||
else
|
||||
"\n\n " << content.lines.to_a.join(" ") << "\n\n"
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def treat(node, state)
|
||||
case node.name
|
||||
when "code"
|
||||
node.text
|
||||
when "br"
|
||||
"\n"
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def language(node)
|
||||
lang = language_from_highlight_class(node)
|
||||
lang || language_from_confluence_class(node)
|
||||
end
|
||||
|
||||
def language_from_highlight_class(node)
|
||||
node.parent["class"].to_s[/highlight-([a-zA-Z0-9]+)/, 1]
|
||||
end
|
||||
|
||||
def language_from_confluence_class(node)
|
||||
node["class"].to_s[/brush:\s?(:?.*);/, 1]
|
||||
end
|
||||
end
|
||||
|
||||
register :pre, CustomPre.new
|
||||
end
|
||||
end
|
||||
56
app/lib/reverse_markdown/converters/custom_text.rb
Normal file
56
app/lib/reverse_markdown/converters/custom_text.rb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
module ReverseMarkdown
|
||||
module Converters
|
||||
class CustomText < Base
|
||||
def convert(node, _options = {})
|
||||
if node.text.strip.empty?
|
||||
treat_empty(node)
|
||||
else
|
||||
treat_text(node)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def treat_empty(node)
|
||||
parent = node.parent.name.to_sym
|
||||
if %i[ol ul].include?(parent) # Otherwise the identation is broken
|
||||
""
|
||||
elsif node.text == " " # Regular whitespace text node
|
||||
" "
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
def treat_text(node)
|
||||
text = node.text
|
||||
text = preserve_nbsp(text)
|
||||
text = remove_border_newlines(text)
|
||||
text = remove_inner_newlines(text)
|
||||
text = escape_keychars(text)
|
||||
text = preserve_keychars_within_backticks(text)
|
||||
text
|
||||
end
|
||||
|
||||
def preserve_nbsp(text)
|
||||
text.gsub(/\u00A0/, " ")
|
||||
end
|
||||
|
||||
def remove_border_newlines(text)
|
||||
text.gsub(/\A\n+/, "").gsub(/\n+\z/, "")
|
||||
end
|
||||
|
||||
def remove_inner_newlines(text)
|
||||
text.tr("\n\t", "")
|
||||
end
|
||||
|
||||
def preserve_keychars_within_backticks(text)
|
||||
text.gsub(/`.*?`/) do |match|
|
||||
match.gsub('\_', "_").gsub('\*', "*")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
register :text, CustomText.new
|
||||
end
|
||||
end
|
||||
2
config/initializers/reverse_markdown.rb
Normal file
2
config/initializers/reverse_markdown.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
ReverseMarkdown::Converters.register :pre, ReverseMarkdown::Converters::CustomPre.new
|
||||
ReverseMarkdown::Converters.register :Text, ReverseMarkdown::Converters::CustomText.new
|
||||
Loading…
Add table
Reference in a new issue