Skip to content

Commit ad8bcd5

Browse files
committed
- Add pandoc as an alternative rendering engine
1 parent a00bc1c commit ad8bcd5

6 files changed

Lines changed: 105 additions & 25 deletions

File tree

lib/madness/markdown_document.rb

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def text
2424
end
2525

2626
def to_html
27-
@to_html ||= Redcarpet::Markdown.new(redcarpet_renderer, redcarpet_options).render text
27+
# @to_html ||= Redcarpet::Markdown.new(redcarpet_renderer, redcarpet_options).render text
28+
@to_html ||= Rendering::Handler.new(:pandoc).render text
2829
end
2930

3031
private
@@ -50,36 +51,36 @@ def has_h1?(input)
5051
lines[0].match(/^# \w+/) || (lines[1] && lines[0].match(/^\w+/) && lines[1].start_with?('='))
5152
end
5253

53-
def redcarpet_options
54-
@redcarpet_options ||= {
55-
no_intra_emphasis: true,
56-
autolink: true,
57-
tables: true,
58-
fenced_code_blocks: true,
59-
strikethrough: true,
60-
space_after_headers: true,
61-
superscript: true,
62-
underline: true,
63-
highlight: true,
64-
quote: false,
65-
footnotes: true,
66-
}
67-
end
68-
69-
def redcarpet_renderer
70-
redcarpet_handler.new with_toc_data: true
71-
end
72-
73-
def redcarpet_handler
74-
config.highlighter ? HighlightRenderer : Redcarpet::Render::HTML
75-
end
54+
# def redcarpet_options
55+
# @redcarpet_options ||= {
56+
# no_intra_emphasis: true,
57+
# autolink: true,
58+
# tables: true,
59+
# fenced_code_blocks: true,
60+
# strikethrough: true,
61+
# space_after_headers: true,
62+
# superscript: true,
63+
# underline: true,
64+
# highlight: true,
65+
# quote: false,
66+
# footnotes: true,
67+
# }
68+
# end
69+
70+
# def redcarpet_renderer
71+
# redcarpet_handler.new with_toc_data: true
72+
# end
73+
74+
# def redcarpet_handler
75+
# config.highlighter ? HighlightRenderer : Redcarpet::Render::HTML
76+
# end
7677

7778
def toc
7879
@toc ||= toc_handler.markdown
7980
end
8081

8182
def toc_handler
82-
@toc_handler ||= Madness::InlineTableOfContents.new markdown
83+
@toc_handler ||= InlineTableOfContents.new markdown
8384
end
8485
end
8586
end

lib/madness/rendering/handler.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require_relative 'pandoc'
2+
require_relative 'redcarpet'
3+
4+
module Madness
5+
module Rendering
6+
class Handler
7+
HANDLERS = {
8+
redcarpet: Redcarpet,
9+
pandoc: Pandoc,
10+
}
11+
12+
attr_reader :selector
13+
14+
def initialize(selector) = @selector = selector
15+
def render(text) = handler.render(text)
16+
17+
private
18+
19+
def handler = @handler ||= handler_class.new
20+
def handler_class = @handler_class ||= HANDLERS[selector]
21+
end
22+
end
23+
end

lib/madness/rendering/pandoc.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'pandoc-ruby'
2+
3+
module Madness
4+
module Rendering
5+
class Pandoc
6+
def render(text)
7+
PandocRuby.new(text, from: :markdown, to: :html).convert
8+
end
9+
end
10+
end
11+
end

lib/madness/rendering/redcarpet.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
require 'redcarpet'
2+
3+
module Madness
4+
module Rendering
5+
class Redcarpet
6+
include ServerHelper
7+
8+
def render(text)
9+
handler.render text
10+
end
11+
12+
private
13+
14+
def handler
15+
@handler ||= ::Redcarpet::Markdown.new renderer, options
16+
end
17+
18+
def options
19+
@redcarpet_options ||= {
20+
no_intra_emphasis: true,
21+
autolink: true,
22+
tables: true,
23+
fenced_code_blocks: true,
24+
strikethrough: true,
25+
space_after_headers: true,
26+
superscript: true,
27+
underline: true,
28+
highlight: true,
29+
quote: false,
30+
footnotes: true,
31+
}
32+
end
33+
34+
def renderer
35+
handler_class.new with_toc_data: true
36+
end
37+
38+
def handler_class
39+
config.highlighter ? HighlightRenderer : ::Redcarpet::Render::HTML
40+
end
41+
42+
end
43+
end
44+
end
File renamed without changes.

madness.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
2424
s.add_dependency 'puma', '>= 5.1', '< 7'
2525
s.add_dependency 'rackup', '~> 2.1'
2626
s.add_dependency 'redcarpet', '~> 3.5'
27+
s.add_dependency 'pandoc-ruby', '~> 2.1'
2728
s.add_dependency 'requires', '~> 1.0'
2829
s.add_dependency 'rouge', '~> 4.0'
2930
s.add_dependency 'sinatra', '>= 3.0', '< 5'

0 commit comments

Comments
 (0)