Skip to content

Commit 3d1eaaa

Browse files
author
François Vaux
committed
Add Mdfile support
1 parent bd46114 commit 3d1eaaa

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

Gemfile

+5
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@ source 'http://rubygems.org'
33
gem 'thor'
44
gem 'liquid'
55
gem 'redcarpet'
6+
gem 'guard'
7+
8+
group :development do
9+
gem 'pry'
10+
end

Thorfile

+29-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,35 @@ require 'thor'
55
require 'redcarpet'
66
require 'liquid'
77

8-
class MD < Thor
8+
class ::MD < Thor # :: is used to escape Thor::Sandbox
99
FORMATS = %w{html pdf}
1010
DEFAULT_PATH = File.expand_path("~/.config/md/themes/default")
1111
DEFAULT_LAYOUT = File.join(DEFAULT_PATH, "layout.html")
1212
DEFAULT_HTML_CSS = File.join(DEFAULT_PATH, "css", "html.css")
1313
DEFAULT_PDF_CSS = File.join(DEFAULT_PATH, "css", "pdf.css")
1414

15-
class Renderer < Redcarpet::Render::HTML
15+
module Config
16+
MarkdownDefaults = {
17+
fenced_code_blocks: true,
18+
no_intra_emphasis: true
19+
}
20+
21+
class Renderer < Redcarpet::Render::HTML; end
22+
23+
private_constant :MarkdownDefaults
24+
private_constant :Renderer
25+
26+
class << self
27+
def markdown_options(options = {})
28+
MarkdownDefaults.update(options)
29+
end
30+
31+
def renderer(&block)
32+
return Renderer unless block_given?
33+
34+
Renderer.class_eval(&block)
35+
end
36+
end
1637
end
1738

1839
namespace 'md'
@@ -30,9 +51,13 @@ class MD < Thor
3051
desc 'generate MD_FILENAME', 'Generate HTML or PDF from md.'
3152
method_option :format, :type => :string, :aliases => "-f", :desc => "Output format (html, pdf)", :default => "html"
3253
method_option :output, :type => :string, :aliases => "-o", :desc => "Output file"
54+
method_option :require, :type => :string, :aliases => "-r", :desc => "Load additional Ruby code"
3355
def generate(md_file)
3456
ensure_layout_presence(options)
3557

58+
config_file = File.expand_path('./Mdfile')
59+
Config.module_eval(File.read(config_file)) if File.exist?(config_file)
60+
3661
begin
3762
if FORMATS.include?(options[:format])
3863
self.send("generate_#{options[:format]}", md_file)
@@ -65,7 +90,7 @@ end
6590
guard :md do
6691
watch(/(.*)\.md/)
6792
end
68-
EOF
93+
EOF
6994
end
7095
%x{guard}
7196
end
@@ -79,7 +104,7 @@ EOF
79104
end
80105

81106
def generate_html(md_file)
82-
renderer = Redcarpet::Markdown.new(Renderer)
107+
renderer = Redcarpet::Markdown.new(Config.renderer, Config.markdown_options)
83108
filename = File.basename(md_file, '.*')
84109

85110
doc = File.read(md_file)

0 commit comments

Comments
 (0)