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 +3 -0
- data/README.md +64 -0
- data/Rakefile +5 -0
- data/bin/themedoc +204 -0
- data/themedoc.gemspec +24 -0
- data/themes/default/resources/logo.png +0 -0
- data/themes/default/theme.yml +47 -0
- data/themes/default-html/resources/default.css +314 -0
- data/themes/default-html/theme.yml +27 -0
- metadata +77 -0
data/.gitignore
ADDED
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
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: []
|