themedoc 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +28 -0
- data/bin/themedoc +79 -17
- data/themedoc.gemspec +1 -1
- data/themes/default-html/theme.yml +1 -1
- data/themes/default-xelatex/resources/logo.png +0 -0
- data/themes/default-xelatex/theme.yml +54 -0
- data/themes/default/theme.yml +7 -15
- metadata +8 -6
data/README.md
CHANGED
@@ -1,6 +1,28 @@
|
|
1
1
|
% themedoc
|
2
2
|
% theming pandoc
|
3
3
|
|
4
|
+
# Bugs and problems
|
5
|
+
|
6
|
+
## Open
|
7
|
+
|
8
|
+
* Should see why it doesn't run rb 1.8
|
9
|
+
* Needs mostly testing
|
10
|
+
* Perhaps we need to push some stuff to separate files
|
11
|
+
* propagate exit code
|
12
|
+
- don't forget cleanup
|
13
|
+
- propagate pandocs stderr
|
14
|
+
* implement version
|
15
|
+
|
16
|
+
## Closed
|
17
|
+
|
18
|
+
* no theme given use default html
|
19
|
+
* Should deal with missing extension and assume markdown input
|
20
|
+
* Default theme should use pdflate
|
21
|
+
* Message that states output file
|
22
|
+
* list of themes
|
23
|
+
* Snippets for before and after body
|
24
|
+
|
25
|
+
|
4
26
|
# Features
|
5
27
|
|
6
28
|
* Support different themes for pandoc
|
@@ -13,6 +35,12 @@
|
|
13
35
|
|
14
36
|
# Getting started
|
15
37
|
|
38
|
+
## Installation
|
39
|
+
|
40
|
+
gem install themedoc
|
41
|
+
|
42
|
+
## Usage
|
43
|
+
|
16
44
|
To `use themedoc's` default theme use the following incantation to
|
17
45
|
create a pdf:
|
18
46
|
|
data/bin/themedoc
CHANGED
@@ -90,8 +90,21 @@ class Theme
|
|
90
90
|
end
|
91
91
|
|
92
92
|
|
93
|
-
def
|
94
|
-
@map['
|
93
|
+
def include(region_name)
|
94
|
+
unless @map['include']
|
95
|
+
return nil
|
96
|
+
end
|
97
|
+
@map['include'][region_name]
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def before_body
|
103
|
+
@map['before-body']
|
104
|
+
end
|
105
|
+
|
106
|
+
def after_body
|
107
|
+
@map['after-body']
|
95
108
|
end
|
96
109
|
|
97
110
|
def parameters
|
@@ -104,9 +117,30 @@ class Theme
|
|
104
117
|
|
105
118
|
end
|
106
119
|
|
120
|
+
|
121
|
+
|
107
122
|
class CommandLineParser
|
108
123
|
attr_reader :opts, :theme, :theme_path, :input_file_name
|
109
124
|
|
125
|
+
def initialize
|
126
|
+
home = `(cd; pwd)`
|
127
|
+
@theme_base_path = home.strip+"/.themedoc"
|
128
|
+
end
|
129
|
+
|
130
|
+
def load_theme(name)
|
131
|
+
@theme_path = @theme_base_path + "/" + name
|
132
|
+
@theme = Theme.new(YAML.load_file(theme_path + "/theme.yml"))
|
133
|
+
return @theme
|
134
|
+
end
|
135
|
+
|
136
|
+
def list_themes
|
137
|
+
puts "Available themes"
|
138
|
+
puts "----------------"
|
139
|
+
theme_names = `(cd #{@theme_base_path}; ls)`.split(/\n/)
|
140
|
+
theme_descriptions = theme_names.map{|n| load_theme(n)}
|
141
|
+
puts theme_names.zip(theme_descriptions).map{|t| t[0] + " => " + t[1].to_s}.join("\n")
|
142
|
+
end
|
143
|
+
|
110
144
|
def parse()
|
111
145
|
theme_index=ARGV.index("--theme") || ARGV.index("-t");
|
112
146
|
|
@@ -115,15 +149,21 @@ class CommandLineParser
|
|
115
149
|
throw "No theme value provided"
|
116
150
|
end
|
117
151
|
theme_name = ARGV[theme_index + 1 ]
|
118
|
-
|
119
|
-
|
120
|
-
|
152
|
+
load_theme(theme_name)
|
153
|
+
end
|
154
|
+
|
155
|
+
default_theme = false;
|
156
|
+
if (!@theme)
|
157
|
+
load_theme("default-html")
|
158
|
+
default_theme = true;
|
121
159
|
end
|
122
160
|
|
123
161
|
theme = @theme
|
124
162
|
|
163
|
+
|
125
164
|
@opts = Trollop::options do
|
126
165
|
opt :theme, "Theme to be used", :type => String, :short => 't'
|
166
|
+
opt :list_themes, "List available themes"
|
127
167
|
opt :debug, "Do not remove temp files"
|
128
168
|
if (theme)
|
129
169
|
theme.parameters.each{|param|
|
@@ -132,12 +172,20 @@ class CommandLineParser
|
|
132
172
|
end
|
133
173
|
end
|
134
174
|
|
135
|
-
|
175
|
+
if (@opts[:list_themes])
|
176
|
+
list_themes
|
177
|
+
exit
|
178
|
+
end
|
179
|
+
|
180
|
+
if (default_theme)
|
181
|
+
puts "No theme provided - using default-html"
|
182
|
+
end
|
136
183
|
|
137
184
|
if (ARGV.length == 0)
|
138
185
|
throw "No input file specified"
|
139
186
|
end
|
140
187
|
|
188
|
+
|
141
189
|
@input_file_name = ARGV[0]
|
142
190
|
end
|
143
191
|
end
|
@@ -164,8 +212,14 @@ parser.parse()
|
|
164
212
|
|
165
213
|
theme = parser.theme
|
166
214
|
|
167
|
-
|
168
|
-
|
215
|
+
if (/\.[^.]*$/ =~ parser.input_file_name())
|
216
|
+
output_file_name = parser.input_file_name().gsub(/\.[^.]*$/, "." +theme.target_extension)
|
217
|
+
else
|
218
|
+
output_file_name = parser.input_file_name() + "." + theme.target_extension
|
219
|
+
end
|
220
|
+
|
221
|
+
puts "Writing output to #{output_file_name}"
|
222
|
+
|
169
223
|
|
170
224
|
pandoc_opts = theme.pandoc_opts
|
171
225
|
pandoc_vars = theme.pandoc_vars
|
@@ -179,16 +233,22 @@ pandoc_opts["output"] = output_file_name
|
|
179
233
|
`ln -fs #{parser.theme_path}/resources .resources`
|
180
234
|
|
181
235
|
template_parameters = {}
|
182
|
-
theme.template_parameters
|
183
|
-
.map{|param| param['name']}
|
236
|
+
theme.template_parameters \
|
237
|
+
.map{|param| param['name']} \
|
184
238
|
.each{|p_name| template_parameters[p_name]=parser.opts[p_name.to_sym]}
|
185
239
|
|
240
|
+
regions = ["in-header", "before-body", "after-body"]
|
241
|
+
|
242
|
+
regions.each{|region_name|
|
243
|
+
snippet_file_name= "." + parser.input_file_name() + "." + region_name
|
244
|
+
if (theme.include(region_name))
|
245
|
+
region_content = Mustache.render(theme.include(region_name), template_parameters);
|
246
|
+
File.open(snippet_file_name, "w+") { |f| f << region_content}
|
247
|
+
pandoc_opts['include-' + region_name]=snippet_file_name
|
248
|
+
end
|
249
|
+
}
|
250
|
+
|
186
251
|
|
187
|
-
if (theme.header)
|
188
|
-
header = Mustache.render(theme.header, template_parameters);
|
189
|
-
File.open(header_snippet_name, "w+") { |f| f << header}
|
190
|
-
pandoc_opts['include-in-header']=header_snippet_name
|
191
|
-
end
|
192
252
|
|
193
253
|
pandoc=Pandoc.new(pandoc_opts, pandoc_vars, parser.input_file_name)
|
194
254
|
pandoc.run
|
@@ -199,6 +259,8 @@ if (parser.opts[:debug])
|
|
199
259
|
end
|
200
260
|
|
201
261
|
`rm .resources`
|
202
|
-
|
203
|
-
|
262
|
+
regions.each{|region_name|
|
263
|
+
snippet_file_name= "." + parser.input_file_name() + "." + region_name
|
264
|
+
`rm -f #{snippet_file_name}`
|
265
|
+
}
|
204
266
|
|
data/themedoc.gemspec
CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.summary = 'themedoc is a theming frontend for pandoc'
|
4
4
|
s.description = 'themedoc is a theming frontend for pandoc that allows grouping
|
5
5
|
parameters, extra resources and output snippets into named themes'
|
6
|
-
s.version = '0.
|
6
|
+
s.version = '0.2'
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
|
9
9
|
s.files = ['bin/themedoc']
|
Binary file
|
@@ -0,0 +1,54 @@
|
|
1
|
+
description: Template for pdf reports using xelatex
|
2
|
+
|
3
|
+
target-extension: pdf
|
4
|
+
|
5
|
+
pandoc-opts:
|
6
|
+
toc: true
|
7
|
+
standalone: true
|
8
|
+
self-contained: true
|
9
|
+
latex-engine: xelatex
|
10
|
+
number-sections: true
|
11
|
+
|
12
|
+
pandoc-vars:
|
13
|
+
lang: english
|
14
|
+
graphics: true
|
15
|
+
documentclass: scrartcl
|
16
|
+
|
17
|
+
parameters:
|
18
|
+
- name: title-header
|
19
|
+
type: string
|
20
|
+
target: template
|
21
|
+
desc: Header for the title page
|
22
|
+
|
23
|
+
- name: "no-toc"
|
24
|
+
type: bool
|
25
|
+
target: option-override
|
26
|
+
desc: suppress table of contents
|
27
|
+
original-name: toc
|
28
|
+
inverted: true
|
29
|
+
|
30
|
+
- name: lang
|
31
|
+
type: string
|
32
|
+
desc: language of the document, e.g. english or german
|
33
|
+
target: variable-override
|
34
|
+
|
35
|
+
|
36
|
+
include:
|
37
|
+
in-header: |
|
38
|
+
{{=<% %>=}}
|
39
|
+
\usepackage{xltxtra,fontspec,xunicode}
|
40
|
+
\titlehead{<%title-header%>}
|
41
|
+
\setmainfont{Garamond}
|
42
|
+
%\setromanfont[Numbers=Uppercase]{Georgia}
|
43
|
+
\KOMAoptions{titlepage=true,abstract=false}
|
44
|
+
\publishers{
|
45
|
+
\Oldincludegraphics[height=18ex]{.resources/logo.png}
|
46
|
+
\vspace{3ex}
|
47
|
+
}
|
48
|
+
|
49
|
+
before-body: |
|
50
|
+
Here the body doth start.
|
51
|
+
|
52
|
+
after-body: |
|
53
|
+
The body ends here.
|
54
|
+
|
data/themes/default/theme.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
description:
|
1
|
+
description: Default template for pdf with table of contents and numbered sections
|
2
2
|
|
3
3
|
target-extension: pdf
|
4
4
|
|
@@ -6,13 +6,13 @@ pandoc-opts:
|
|
6
6
|
toc: true
|
7
7
|
standalone: true
|
8
8
|
self-contained: true
|
9
|
-
latex-engine:
|
9
|
+
latex-engine: pdflatex
|
10
10
|
number-sections: true
|
11
11
|
|
12
12
|
pandoc-vars:
|
13
13
|
lang: english
|
14
|
-
graphics: true
|
15
|
-
documentclass:
|
14
|
+
#graphics: true
|
15
|
+
documentclass: article
|
16
16
|
|
17
17
|
parameters:
|
18
18
|
- name: title-header
|
@@ -33,15 +33,7 @@ parameters:
|
|
33
33
|
target: variable-override
|
34
34
|
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
\titlehead{<%title-header%>}
|
40
|
-
\setmainfont{Garamond}
|
41
|
-
%\setromanfont[Numbers=Uppercase]{Georgia}
|
42
|
-
\KOMAoptions{titlepage=true,abstract=false}
|
43
|
-
\publishers{
|
44
|
-
\Oldincludegraphics[height=18ex]{.resources/logo.png}
|
45
|
-
\vspace{3ex}
|
46
|
-
}
|
36
|
+
include:
|
37
|
+
in-header: |
|
38
|
+
{{=<% %>=}}
|
47
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: themedoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: trollop
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157178460 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157178460
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mustache
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157178020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157178020
|
36
36
|
description: ! "themedoc is a theming frontend for pandoc that allows grouping\n parameters,
|
37
37
|
extra resources and output snippets into named themes"
|
38
38
|
email: ''
|
@@ -48,6 +48,8 @@ files:
|
|
48
48
|
- themedoc.gemspec
|
49
49
|
- themes/default-html/resources/default.css
|
50
50
|
- themes/default-html/theme.yml
|
51
|
+
- themes/default-xelatex/resources/logo.png
|
52
|
+
- themes/default-xelatex/theme.yml
|
51
53
|
- themes/default/resources/logo.png
|
52
54
|
- themes/default/theme.yml
|
53
55
|
homepage: https://github.com/fleipold/themedoc
|