themedoc 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.swp
2
+ *.swo
3
+ tags
data/README.md ADDED
@@ -0,0 +1,64 @@
1
+ % themedoc
2
+ % theming pandoc
3
+
4
+ # Features
5
+
6
+ * Support different themes for pandoc
7
+ * Theme consists of
8
+ + command line options for pandoc
9
+ + template variables for pandoc
10
+ + a snippet inclusion mechanism
11
+ + bundled resources
12
+ * Parameterisation via the command line
13
+
14
+ # Getting started
15
+
16
+ To `use themedoc's` default theme use the following incantation to
17
+ create a pdf:
18
+
19
+ themedoc --theme default myfile.md
20
+
21
+ A theme is a directory that lives in `~/.themedoc`. To get
22
+ started on your own theme quickly copy the default theme:
23
+
24
+ cp -R ~/.themedoc/default ~/.themedoc/mytheme
25
+
26
+ To get help around theme specific parameters go like this:
27
+
28
+ themedoc --theme default --help
29
+
30
+ # Philosophy
31
+ Pandoc is a very powerful and flexible text conversion tool.
32
+ One of its primary usecases is to render pandoc markdown into
33
+ various formats, such as pdf and different flavours of html.
34
+ The output can be customised in various ways:
35
+
36
+ 1. Setting *command line options*
37
+ 2. Setting so-called *template variable* using command line arguments
38
+ 3. *Including custom files* at verious places in the generated output
39
+ with filenames also passed in using the command line
40
+ 4. Changing the templates that are used to generate the output
41
+
42
+ I generally stay away from option 4, because it is very intrusive and
43
+ might easily break the compatibility with future versions.
44
+
45
+ The first three options provide a lot of flexibility, however
46
+ it is a hassle to set them all via the command line. This is
47
+ where `themedoc` enters the stage.
48
+
49
+ In themedoc a theme is a combination of command line options and
50
+ template variables as well as snippets for the target file
51
+ conveniently bundled into a yaml file. Also it allows to bundle other
52
+ resources into the theme and takes care of making them available
53
+ through the command line.
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ task :default => :build
2
+
3
+ task :build do
4
+ system "gem build themedoc.gemspec"
5
+ end
data/bin/themedoc ADDED
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env ruby
2
+ require 'trollop'
3
+ require 'yaml'
4
+ require 'mustache'
5
+
6
+ class Pandoc
7
+
8
+ def initialize(opts, vars, input_file_name)
9
+ @opts=opts;
10
+ @vars=vars;
11
+ @input_file_name=input_file_name;
12
+ end
13
+
14
+ def opts_string()
15
+ @opts.map{ |x|
16
+ if(!x[1])
17
+ ""
18
+ else
19
+ "--#{x[0]}" + ((x[1]!=true)?" " + x[1]:"")
20
+ end
21
+ }.join(" ")
22
+ end
23
+
24
+ def vars_string()
25
+ @vars.map{ |x|
26
+ if(!x[1])
27
+ ""
28
+ else
29
+ "-V #{x[0]}" + ((x[1]!=true)?":"+x[1]:"")
30
+ end
31
+ }.join(" ")
32
+ end
33
+
34
+ def run()
35
+ command = "pandoc " + opts_string() + " " + vars_string() + " " + @input_file_name
36
+ puts command
37
+ output = ""
38
+ IO.popen(command, "w+") do |io|
39
+ output=io.read
40
+ end
41
+ puts output
42
+ end
43
+
44
+ end
45
+
46
+ class Installer
47
+
48
+ def install_if_needed()
49
+ home = `(cd; pwd)`.strip
50
+ dot_folder = "#{home}/.themedoc"
51
+ if (File.exists?(dot_folder))
52
+ return;
53
+ end
54
+
55
+ puts("Installing default themes..")
56
+ `mkdir #{dot_folder}`
57
+ theme_src=File.join(File.dirname(File.expand_path(__FILE__)), '/../themes')
58
+ `cp -r #{theme_src}/* #{dot_folder}`
59
+ puts("Done")
60
+ end
61
+ end
62
+
63
+ class Theme
64
+ def initialize(map)
65
+ @map=map
66
+ end
67
+
68
+ def pandoc_opts
69
+ @map["pandoc-opts"]
70
+ end
71
+
72
+ def pandoc_vars
73
+ @map["pandoc-vars"]
74
+ end
75
+
76
+ def target_extension
77
+ @map['target-extension']
78
+ end
79
+
80
+ def template_parameters
81
+ @map['parameters'].select{ |param| param['target']=="template"}
82
+ end
83
+
84
+ def variable_override_parameters
85
+ @map['parameters'].select{ |param| param['target']=="variable-override"}
86
+ end
87
+
88
+ def option_override_parameters
89
+ @map['parameters'].select{ |param| param['target']=="option-override"}
90
+ end
91
+
92
+
93
+ def header
94
+ @map['header']
95
+ end
96
+
97
+ def parameters
98
+ @map['parameters']
99
+ end
100
+
101
+ def to_s
102
+ @map['description']
103
+ end
104
+
105
+ end
106
+
107
+ class CommandLineParser
108
+ attr_reader :opts, :theme, :theme_path, :input_file_name
109
+
110
+ def parse()
111
+ theme_index=ARGV.index("--theme") || ARGV.index("-t");
112
+
113
+ if theme_index
114
+ if (ARGV.length < theme_index + 2)
115
+ throw "No theme value provided"
116
+ end
117
+ theme_name = ARGV[theme_index + 1 ]
118
+ home = `(cd; pwd)`
119
+ @theme_path = home.strip+"/.themedoc/#{theme_name}"
120
+ @theme = Theme.new(YAML.load_file(theme_path + "/theme.yml"))
121
+ end
122
+
123
+ theme = @theme
124
+
125
+ @opts = Trollop::options do
126
+ opt :theme, "Theme to be used", :type => String, :short => 't'
127
+ opt :debug, "Do not remove temp files"
128
+ if (theme)
129
+ theme.parameters.each{|param|
130
+ opt param['name'].to_sym, param['desc'], :type => param['type'].to_sym
131
+ }
132
+ end
133
+ end
134
+
135
+ Trollop::die :theme, "theme must be specified" if !@opts[:theme]
136
+
137
+ if (ARGV.length == 0)
138
+ throw "No input file specified"
139
+ end
140
+
141
+ @input_file_name = ARGV[0]
142
+ end
143
+ end
144
+
145
+ def apply_overrides(parameter_definitions, command_line_opts, pandoc_parameters)
146
+ parameter_definitions.each{|p|
147
+ val=command_line_opts[p['name'].to_sym]
148
+ if val
149
+ if p['inverted']
150
+ pandoc_parameters[p['original-name']]=false
151
+ else
152
+ pandoc_parameters[p['name']]=val
153
+ end
154
+ end
155
+ }
156
+
157
+ end
158
+
159
+ installer = Installer.new()
160
+ installer.install_if_needed()
161
+
162
+ parser = CommandLineParser.new()
163
+ parser.parse()
164
+
165
+ theme = parser.theme
166
+
167
+ output_file_name = parser.input_file_name().gsub(/.md$/, "." +theme.target_extension)
168
+ header_snippet_name = "." + parser.input_file_name() + ".header"
169
+
170
+ pandoc_opts = theme.pandoc_opts
171
+ pandoc_vars = theme.pandoc_vars
172
+
173
+ apply_overrides(theme.variable_override_parameters, parser.opts, pandoc_vars)
174
+ apply_overrides(theme.option_override_parameters, parser.opts, pandoc_opts)
175
+
176
+
177
+ pandoc_opts["output"] = output_file_name
178
+
179
+ `ln -fs #{parser.theme_path}/resources .resources`
180
+
181
+ template_parameters = {}
182
+ theme.template_parameters
183
+ .map{|param| param['name']}
184
+ .each{|p_name| template_parameters[p_name]=parser.opts[p_name.to_sym]}
185
+
186
+
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
+
193
+ pandoc=Pandoc.new(pandoc_opts, pandoc_vars, parser.input_file_name)
194
+ pandoc.run
195
+
196
+ if (parser.opts[:debug])
197
+ puts ("no cleanup")
198
+ exit
199
+ end
200
+
201
+ `rm .resources`
202
+ `rm -f #{header_snippet_name}`
203
+
204
+
data/themedoc.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'themedoc'
3
+ s.summary = 'themedoc is a theming frontend for pandoc'
4
+ s.description = 'themedoc is a theming frontend for pandoc that allows grouping
5
+ parameters, extra resources and output snippets into named themes'
6
+ s.version = '0.1'
7
+ s.platform = Gem::Platform::RUBY
8
+
9
+ s.files = ['bin/themedoc']
10
+
11
+ s.bindir = 'bin'
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
+
16
+ s.author = 'Felix Leipold'
17
+ s.email = ''
18
+ s.homepage = 'https://github.com/fleipold/themedoc'
19
+
20
+
21
+ s.add_dependency('trollop')
22
+ s.add_dependency('mustache')
23
+ end
24
+
Binary file
@@ -0,0 +1,47 @@
1
+ description: Template for formal TWDE reports
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
+ header: |
37
+ {{=<% %>=}}
38
+ \usepackage{xltxtra,fontspec,xunicode}
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
+ }
47
+
@@ -0,0 +1,314 @@
1
+ /img
2
+ /*
3
+ Baseline - a designer framework
4
+ Copyright (C) 2009 Stephane Curzi, ProjetUrbain.com
5
+ Creative Commons Attribution-Share Alike 3.0 License
6
+ version 0.5
7
+ */
8
+
9
+ /******************** Reset ********************/
10
+ html, body, div, span, a, img,
11
+ h1, h2, h3, h4, h5, h6, hgroup, p,
12
+ dl, dialog, dt, dd, ol, ul, li,
13
+ abbr, acronym, address, b, big, blockquote,
14
+ cite, code, del, dfn, em, i, ins, kbd, pre, q,
15
+ samp, tt, var, small, strong, sub, sup,
16
+ object, iframe, form, fieldset, label, legend,
17
+ table, caption, tbody, tfoot, thead, tr, th, td,
18
+ article, aside, footer, header, nav, section,
19
+ figure, menu, time, mark, audio, video { font-family: inherit; font-size: 100%; font-weight: inherit; font-style: inherit; vertical-align: baseline; white-space: normal; text-align: left; margin: 0; padding: 0; border: 0; outline: 0; background: transparent; }
20
+ textarea { font-family: inherit; font-size: 100%; font-weight: normal; font-style: normal; white-space: normal; text-align: left; margin: 0; padding: 0; }
21
+ article, aside, footer, header, nav, section,
22
+ dialog, figure, hgroup, menu { display: block; }
23
+
24
+ h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; }
25
+ del, ins { text-decoration: none; }
26
+ ol, ul { list-style: none; }
27
+ nav ul { list-style-type: none; }
28
+ table { border-collapse: separate; border-spacing: 0; background-color: transparent; width: auto; height: auto; }
29
+ :focus { outline: 0; }
30
+ blockquote:before, blockquote:after, q:before, q:after { content: ""; }
31
+ blockquote, q { quotes: "" ""; }
32
+ input { margin: 0; }
33
+
34
+
35
+ /********** Deprecated and obsolete elements **********/
36
+ applet, basefont, dir, font, isindex, menu, s, strike, u { font-family: inherit; font-size: 100%; font-weight: normal; font-style: normal; white-space: normal; vertical-align: baseline; text-decoration: inherit; text-align: left; color: inherit; margin: 0; padding: 0; border: 0; outline: 0; }
37
+ dir, menu { list-style: none; }
38
+ nobr { white-space: normal; }
39
+ blink { text-decoration: none; }
40
+ marquee { overflow: visible; }/*
41
+ Baseline - a designer framework
42
+ Copyright (C) 2009 Stephane Curzi, ProjetUrbain.com
43
+ Creative Commons Attribution-Share Alike 3.0 License
44
+ version 0.5.2
45
+ */
46
+
47
+ /******************** Base ********************/
48
+ body { font-family: helvetica, arial, sans-serif; line-height: 1.5; background: white; color: black; }
49
+ h1, h2, h3, h4, h5, h6 { line-height: 1.2; }
50
+ h3, h4, h5, h6 { font-weight: bold; }
51
+ b, strong, caption, th, thead, dt, legend { font-weight: bold; }
52
+ cite, dfn, em, i { font-style: italic; }
53
+ code, kbd, samp, pre, tt, var { font-family: mono-space, monospace; }
54
+ h1, h2, h3, h4, h5, h6 { word-spacing: -0.125em; }
55
+ p { word-spacing: 0.125em; hyphenate: auto; hyphenate-lines: 3; }
56
+ p+p { text-indent: 1.5em; }
57
+ p+p.no-indent { text-indent: 0; }
58
+ pre { white-space: pre; }
59
+ del { text-decoration: line-through; }
60
+ mark { background: rgba(255, 255, 0, 0.4); padding: 0 .25em; }
61
+ ins { color: #f00; }
62
+ small, sup, sub { font-size: 80%; }
63
+ big { font-size: 125%; line-height: 80%; }
64
+ abbr, acronym { font-size: 85%; text-transform: uppercase; letter-spacing: .1em; }
65
+ abbr[title], acronym[title], dfn[title] { border-bottom: 1px dotted black; cursor: help; }
66
+ sup, sub { line-height: 0; }
67
+ sup { vertical-align: super; }
68
+ sub { vertical-align: sub; }
69
+ blockquote { padding: 1.5em; }
70
+ hr { border: none; background: #ddd; width: 100%; }
71
+ ul, ol { margin-left: 1.5em; }
72
+ ul { list-style: disc outside; }
73
+ ol { list-style: decimal outside; }
74
+ input, select, button { cursor: pointer; }
75
+ table { font: inherit; width: 100%; }
76
+
77
+ /* html 5 */
78
+ article, aside, header, hgroup,
79
+ nav, figure, section, footer { display: block; }
80
+
81
+ /* Debug */
82
+ .debug { outline: solid gold 1px; }
83
+ .debug-background { background: rgba(255, 215, 0, 0.2) !important; }/*
84
+ Baseline - a designer framework
85
+ Copyright (C) 2009 Stephane Curzi, ProjetUrbain.com
86
+ Creative Commons Attribution-Share Alike 3.0 License
87
+ version 0.5
88
+ */
89
+
90
+ /******************** Form ********************/
91
+
92
+ form { overflow: auto; }
93
+ legend { padding-bottom: 18px; }
94
+ label { width: 100%; position: relative; top: 5px; margin-bottom: 18px; line-height: 18px; display: block; }
95
+
96
+ input[type="text"],
97
+ input[type="password"],
98
+ input[type="select"],
99
+ input[type="search"] { width: 100%; margin-bottom: -1px; display: block; }
100
+
101
+ input[type="radio"] { top: -1px; margin: 0 4px 3px 1px; }
102
+ input[type="checkbox"] { top: -2px; margin: 0 4px 3px 1px; }
103
+ input[type="file"] { margin: 0px 6px 3px 6px; }
104
+
105
+ input[type="submit"],
106
+ input[type="reset"],
107
+ input[type="button"] { position: relative; top: 5px; margin-bottom: 18px; }
108
+
109
+ select { display: block; margin: 0px; }
110
+ textarea { width: 99%; line-height: 18px; margin-bottom: -2px; display: block; clear: left; overflow: auto; }/*
111
+ Baseline - a designer framework
112
+ Copyright (C) 2009 Stephane Curzi, ProjetUrbain.com
113
+ Creative Commons Attribution-Share Alike 3.0 License
114
+ version 0.5.3
115
+ */
116
+
117
+ /******************** Grid ********************/
118
+ #page { width: 990px; position: relative; } /* 82.5em */
119
+ #page:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
120
+
121
+ /* Base column markup */
122
+ .column { margin-left: 18px; display: block; float: left; } /* 1.5em */
123
+ .colgroup { display: block; float: left; }
124
+ .first { margin-left: 0; clear: left; }
125
+ .gutter { margin-left: 18px; } /* 1.5em */
126
+ .no-gutter { margin-left: 0; }
127
+ .align-left { float: left; }
128
+ .align-right { float: right; text-align: right; }
129
+ .clear { float: left; }
130
+ header,
131
+ section { padding-bottom: 18px; }
132
+
133
+ .leading { margin-bottom: 18px; } /* 1.5em */
134
+ .noleading { margin-bottom: 0 !important; }
135
+
136
+ /* Base column width */
137
+ .width1 { width: 234px; } /* 19.5em */
138
+ .width2 { width: 486px; } /* 40.5em */
139
+ .width3 { width: 738px; } /* 61.5em */
140
+ .width4 { width: 990px; margin-left: 0 !important; } /* 82.5em */
141
+ .full { display: block; float: left; width: 100%; margin-left: 0 !important; }
142
+
143
+ /* Base column unit, 2 units = 1 column */
144
+ .unitx1 { width: 108px; } /* 9em */
145
+ .unitx2 { width: 234px; } /* 19.5em, Same as width1 */
146
+ .unitx3 { width: 360px; } /* 30em */
147
+ .unitx4 { width: 486px; } /* 40.5em, Same as width2 */
148
+ .unitx5 { width: 612px; } /* 51em */
149
+ .unitx6 { width: 738px; } /* 61.5em, Same as width3 */
150
+ .unitx7 { width: 864px; } /* 72em */
151
+ .unitx8 { width: 990px; margin-left: 0 !important; } /* 82.5em, Same as width4 */
152
+
153
+ /* CSS3 columns */
154
+ .columnsx2 { -webkit-column-count: 2; -webkit-column-gap: 18px; -moz-column-count: 2; -moz-column-gap: 18px; column-count: 2; column-gap: 18px; }
155
+ .columnsx4 { -webkit-column-count: 4; -webkit-column-gap: 18px; -moz-column-count: 4; -moz-column-gap: 18px; column-count: 4; column-gap: 18px; }
156
+
157
+ /******************** Table ********************/
158
+ /* Columns */
159
+ th.width1, td.width1 { width: 234px; }
160
+ th.width2, td.width2 { width: 486px; }
161
+ th.width3, td.width3 { width: 738px; }
162
+ th.width4, td.width4 { width: 990px; }
163
+
164
+ /* Units */
165
+ th.unitx1, th.unitx1 { width: 108px; }
166
+ th.unitx2, td.unitx2 { width: 234px; }
167
+ th.unitx3, td.unitx3 { width: 360px; }
168
+ th.unitx4, td.unitx4 { width: 486px; }
169
+ th.unitx5, td.unitx5 { width: 612px; }
170
+ th.unitx6, td.unitx6 { width: 738px; }
171
+ th.unitx7, td.unitx7 { width: 864px; }
172
+ th.unitx8, td.unitx8 { width: 990px; }
173
+
174
+ /******************** Forms ********************/
175
+ label.width1, label.width2,
176
+ label.width3, label.width4 { margin-left: 18px; float: left; }
177
+
178
+ label.unitx1, label.unitx2,
179
+ label.unitx3, label.unitx4,
180
+ label.unitx5, label.unitx6,
181
+ label.unitx7, label.unitx8 { margin-left: 18px; float: left; }
182
+ label.first { margin-left: 0; }
183
+
184
+ label.width4, label.unitx8 { width: 990px; overflow: hidden; }
185
+
186
+ label.width1 input[type="text"], label.width1 input[type="password"], label.width1 input[type="select"], label.width1 input[type="search"] { width: 228px; }
187
+ label.width2 input[type="text"], label.width2 input[type="password"], label.width2 input[type="select"], label.width2 input[type="search"] { width: 480px; }
188
+ label.width3 input[type="text"], label.width3 input[type="password"], label.width3 input[type="select"], label.width3 input[type="search"] { width: 732px; }
189
+ label.width4 input[type="text"], label.width4 input[type="password"], label.width4 input[type="select"], label.width4 input[type="search"] { width: 984px; }
190
+
191
+ label.width1 select { width: 234px; }
192
+ label.width2 select { width: 486px; }
193
+ label.width3 select { width: 738px; }
194
+ label.width4 select { width: 990px; }
195
+
196
+ label.unitx1 input[type="text"], label.unitx1 input[type="password"], label.unitx1 input[type="select"], label.unitx1 input[type="search"] { width: 102px; }
197
+ label.unitx2 input[type="text"], label.unitx2 input[type="password"], label.unitx2 input[type="select"], label.unitx2 input[type="search"] { width: 228px; }
198
+ label.unitx3 input[type="text"], label.unitx3 input[type="password"], label.unitx3 input[type="select"], label.unitx3 input[type="search"] { width: 354px; }
199
+ label.unitx4 input[type="text"], label.unitx4 input[type="password"], label.unitx4 input[type="select"], label.unitx4 input[type="search"] { width: 480px; }
200
+ label.unitx5 input[type="text"], label.unitx5 input[type="password"], label.unitx5 input[type="select"], label.unitx5 input[type="search"] { width: 606px; }
201
+ label.unitx6 input[type="text"], label.unitx6 input[type="password"], label.unitx6 input[type="select"], label.unitx6 input[type="search"] { width: 732px; }
202
+ label.unitx7 input[type="text"], label.unitx7 input[type="password"], label.unitx7 input[type="select"], label.unitx7 input[type="search"] { width: 858px; }
203
+ label.unitx8 input[type="text"], label.unitx8 input[type="password"], label.unitx8 input[type="select"], label.unitx8 input[type="search"] { width: 984px; }
204
+
205
+ label.unitx1 select { width: 108px; }
206
+ label.unitx2 select { width: 234px; }
207
+ label.unitx3 select { width: 360px; }
208
+ label.unitx4 select { width: 486px; }
209
+ label.unitx5 select { width: 612px; }
210
+ label.unitx6 select { width: 738px; }
211
+ label.unitx7 select { width: 864px; }
212
+ label.unitx8 select { width: 990px; }/*
213
+ Baseline - a designer framework
214
+ Copyright (C) 2009 Stephane Curzi, ProjetUrbain.com
215
+ Creative Commons Attribution-Share Alike 3.0 License
216
+ version 0.5
217
+ */
218
+
219
+ /******************** Baseline grid: 13/18px ********************/
220
+ body { font-size: 75%; line-height: 1.5; /*12/18*/ }
221
+
222
+ h1, h2, h3, h4, h5, h6 { position: relative; }
223
+ h1, h2 { line-height: 36px; margin-bottom: 9px; }
224
+ h1, h2, h3, h4 { margin-top: 18px; }
225
+ h3, h4, h5, h6 { line-height: 18px; }
226
+
227
+ h1 { font-size: 28px; top: 8px; }
228
+ h2 { font-size: 22px; top: 1px; }
229
+ h3 { font-size: 18px; top: 2px; }
230
+ h4 { font-size: 15px; top: 4px; }
231
+ h5 { font-size: 13px; top: 5px; }
232
+ h1:first-child,
233
+ h2:first-child,
234
+ h3:first-child,
235
+ h4:first-child { margin-top: 0; }
236
+
237
+ p, pre, address { font-size: 13px; line-height: 18px; position: relative; top: 5px; }
238
+ small { font-size: 11px; }
239
+ abbr, code, kbd,
240
+ samp, small, var { line-height: 15px; }
241
+ ul, ol, dl, dialog { font-size: 13px; line-height: 18px; position: relative; top: 5px; margin-top: 18px; margin-bottom: 18px; }
242
+ li ul, li ol, ul ul, ol ol { top: 0; margin-top: 0; margin-bottom: 0; }
243
+ li h1, li h2, li h3,
244
+ li h4, li h5, li h6,
245
+ li p { top: 0; }
246
+ form, legend, label { font-size: 13px; line-height: 18px; }
247
+ legend { position: relative; top: 5px; }
248
+ table { font-size: 13px; }
249
+ caption { font-size: 13px; line-height: 18px; position: relative; }
250
+ hr { position: relative; height: 4px; margin: 18px 0 14px 0; }
251
+
252
+ body {
253
+ padding: 0 36px;
254
+
255
+ }
256
+
257
+
258
+
259
+ #header {
260
+ background: #EEEEFF;
261
+ padding-top: 28px;
262
+ padding-bottom: 14px;
263
+ padding-left:36px;
264
+ margin-left: -36px;
265
+ margin-right: -36px;
266
+ color: #0B0B61;
267
+
268
+
269
+ }
270
+
271
+ #header h1 {
272
+
273
+ font-size: 36px; top: 5px;
274
+ font-weight: bold;
275
+
276
+ /* text-align: center;*/
277
+ }
278
+
279
+ #header h2 {
280
+ /* text-align: center;*/
281
+ font-weight: bold;
282
+ }
283
+
284
+ h1 > a{
285
+ color: #000000;
286
+ text-decoration: none;
287
+
288
+ }
289
+
290
+ h2 > a{
291
+ text-decoration: none;
292
+ color: #000000;
293
+ }
294
+
295
+
296
+ #header h3 {
297
+ /* text-align: center;*/
298
+ font-weight: bold;
299
+ }
300
+
301
+ pre {
302
+ padding: 18px;
303
+ border-radius: 15px;
304
+ background: #CCCCCC;
305
+
306
+ }
307
+
308
+ img {
309
+ width: 100%
310
+ }
311
+
312
+ code {
313
+ white-space: pre;
314
+ }
@@ -0,0 +1,27 @@
1
+ description: Template for formal TWDE reports
2
+
3
+ target-extension: html
4
+
5
+ pandoc-opts:
6
+ toc: true
7
+ standalone: true
8
+ self-contained: true
9
+ number-sections: true
10
+ css: .resources/default.css
11
+
12
+ pandoc-vars:
13
+ lang: english
14
+
15
+ parameters:
16
+ - name: "no-toc"
17
+ type: bool
18
+ target: option-override
19
+ desc: suppress table of contents
20
+ original-name: toc
21
+ inverted: true
22
+
23
+ - name: lang
24
+ type: string
25
+ desc: language of the document, e.g. english or german
26
+ target: variable-override
27
+
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: themedoc
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Felix Leipold
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: trollop
16
+ requirement: &2152721800 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2152721800
25
+ - !ruby/object:Gem::Dependency
26
+ name: mustache
27
+ requirement: &2152721360 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2152721360
36
+ description: ! "themedoc is a theming frontend for pandoc that allows grouping\n parameters,
37
+ extra resources and output snippets into named themes"
38
+ email: ''
39
+ executables:
40
+ - themedoc
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - README.md
46
+ - Rakefile
47
+ - bin/themedoc
48
+ - themedoc.gemspec
49
+ - themes/default-html/resources/default.css
50
+ - themes/default-html/theme.yml
51
+ - themes/default/resources/logo.png
52
+ - themes/default/theme.yml
53
+ homepage: https://github.com/fleipold/themedoc
54
+ licenses: []
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 1.8.15
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: themedoc is a theming frontend for pandoc
77
+ test_files: []