@@ -5,14 +5,35 @@ require 'thor'
5
5
require 'redcarpet'
6
6
require 'liquid'
7
7
8
- class MD < Thor
8
+ class :: MD < Thor # :: is used to escape Thor::Sandbox
9
9
FORMATS = %w{ html pdf }
10
10
DEFAULT_PATH = File . expand_path ( "~/.config/md/themes/default" )
11
11
DEFAULT_LAYOUT = File . join ( DEFAULT_PATH , "layout.html" )
12
12
DEFAULT_HTML_CSS = File . join ( DEFAULT_PATH , "css" , "html.css" )
13
13
DEFAULT_PDF_CSS = File . join ( DEFAULT_PATH , "css" , "pdf.css" )
14
14
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
16
37
end
17
38
18
39
namespace 'md'
@@ -30,9 +51,13 @@ class MD < Thor
30
51
desc 'generate MD_FILENAME' , 'Generate HTML or PDF from md.'
31
52
method_option :format , :type => :string , :aliases => "-f" , :desc => "Output format (html, pdf)" , :default => "html"
32
53
method_option :output , :type => :string , :aliases => "-o" , :desc => "Output file"
54
+ method_option :require , :type => :string , :aliases => "-r" , :desc => "Load additional Ruby code"
33
55
def generate ( md_file )
34
56
ensure_layout_presence ( options )
35
57
58
+ config_file = File . expand_path ( './Mdfile' )
59
+ Config . module_eval ( File . read ( config_file ) ) if File . exist? ( config_file )
60
+
36
61
begin
37
62
if FORMATS . include? ( options [ :format ] )
38
63
self . send ( "generate_#{ options [ :format ] } " , md_file )
65
90
guard :md do
66
91
watch(/(.*)\. md/)
67
92
end
68
- EOF
93
+ EOF
69
94
end
70
95
%x{guard}
71
96
end
79
104
end
80
105
81
106
def generate_html ( md_file )
82
- renderer = Redcarpet ::Markdown . new ( Renderer )
107
+ renderer = Redcarpet ::Markdown . new ( Config . renderer , Config . markdown_options )
83
108
filename = File . basename ( md_file , '.*' )
84
109
85
110
doc = File . read ( md_file )
0 commit comments