-
Notifications
You must be signed in to change notification settings - Fork 527
/
compat.rb
76 lines (65 loc) · 2.14 KB
/
compat.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
require 'redcarpet'
# Deprecated: Please use the default API to parse Markdown
# documents ; this layer will be removed in Redcarpet 4.0.
#
# Creates an instance of Redcarpet with the RedCloth API.
class RedcarpetCompat
attr_accessor :text
def initialize(text, *exts)
exts_hash, render_hash = *parse_extensions_and_renderer_options(exts)
@text = text
renderer = Redcarpet::Render::HTML.new(render_hash)
@markdown = Redcarpet::Markdown.new(renderer, exts_hash)
end
def to_html(*_dummy)
@markdown.render(text)
end
private
EXTENSION_MAP = {
# old name => new name
:autolink => :autolink,
:fenced_code => :fenced_code_blocks,
:filter_html => :filter_html,
:hard_wrap => :hard_wrap,
:prettify => :prettify,
:lax_htmlblock => :lax_spacing,
:no_image => :no_images,
:no_intraemphasis => :no_intra_emphasis,
:no_links => :no_links,
:filter_styles => :no_styles,
:safelink => :safe_links_only,
:space_header => :space_after_headers,
:strikethrough => :strikethrough,
:tables => :tables,
:generate_toc => :with_toc_data,
:xhtml => :xhtml,
# old names with no new mapping
:gh_blockcode => nil,
:no_tables => nil,
:smart => nil,
:strict => nil
}
RENDERER_OPTIONS = [:filter_html, :no_images, :no_links, :no_styles,
:safe_links_only, :with_toc_data, :hard_wrap, :prettify, :xhtml]
def rename_extensions(exts)
exts.map do |old_name|
if new_name = EXTENSION_MAP[old_name]
new_name
else
old_name
end
end.compact
end
# Returns two hashes, the extensions and renderer options
# given the extension list
def parse_extensions_and_renderer_options(exts)
exts = rename_extensions(exts)
exts.partition {|ext| !RENDERER_OPTIONS.include?(ext) }.
map {|list| list_to_truthy_hash(list) }
end
# Turns a list of symbols into a hash of <tt>symbol => true</tt>.
def list_to_truthy_hash(list)
list.inject({}) {|h, k| h[k] = true; h }
end
end
Markdown = RedcarpetCompat unless defined? Markdown