themedoc 0.1

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/.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: []