asciibuild 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3f0d3264aa30a500f47d5f70ffa5f56c98c6db05
4
+ data.tar.gz: 676e1d167b275043f72ae25b2c93e50f84a2387c
5
+ SHA512:
6
+ metadata.gz: 3e446ff07ce75a594d15da1d8a10319d0b29e1d1240c144c6af5e329107a8e605234a37b7213b0f8e684e6004a04f8a046607f5f35357178f91b653144c0d35c
7
+ data.tar.gz: c585d03b22f012322152df6f0fa3795c763214e6a65a8d3f9a1ea3e2e2dd2752953f3f4d938af1d569d167c167abf1f3b653a3ec1b54026aa0571e4151fd34f7
data/bin/asciibuild ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require 'asciibuild'
4
+
5
+ def find_stylesheet name
6
+ File.expand_path "../stylesheets/#{name}.css", File.dirname(__FILE__)
7
+ end
8
+
9
+ attrs = {
10
+ "pwd" => Dir.pwd,
11
+ "toc" => "left",
12
+ "sectlinks" => true,
13
+ "icons" => "font",
14
+ "stylesheet" => find_stylesheet("colony"),
15
+ "source-highlighter" => "pygments"
16
+ }
17
+
18
+ options = {
19
+ :safe => 0,
20
+ :verbose => 2,
21
+ :to_dir => "abuild",
22
+ :mkdirs => true,
23
+ :attributes => attrs
24
+ }
25
+
26
+ OptionParser.new do |opts|
27
+ opts.banner = "Usage: asciibuild [options] file.adoc..."
28
+
29
+ opts.on('-s', '--stylesheet NAME', 'Stylesheet name') do |v|
30
+ attrs["stylesheet"] = find_stylesheet(v)
31
+ end
32
+ opts.on('-a', '--attribute ATTR', 'Document attribute') do |a|
33
+ parts = a.split(/=/)
34
+ k = parts[0]
35
+ v = if parts.size > 1 then parts[1] else true end
36
+ if attrs[k] and attrs[k].class == Array
37
+ entry << v
38
+ elsif attrs[k]
39
+ attrs[k] = [attrs[k], v]
40
+ else
41
+ attrs[k] = v
42
+ end
43
+ end
44
+ end.parse!
45
+
46
+ ARGV.each do |f|
47
+ basename = File.basename f, ".*"
48
+ dirname = File.dirname f
49
+ basedir = File.join options[:to_dir], dirname
50
+ options[:to_dir] = basedir
51
+ attrs["outdir"] = basedir
52
+ options[:to_file] = "#{basename}-#{Time.now.getutc.to_i}.html"
53
+
54
+ Asciidoctor.convert_file f, options
55
+ end
@@ -0,0 +1,267 @@
1
+ require 'asciidoctor'
2
+ require 'asciidoctor/extensions'
3
+ require 'open3'
4
+ require 'mustache'
5
+
6
+ def include_section? parent, attrs
7
+ sections = if parent.document.attributes["sections"]
8
+ parent.document.attributes["sections"].split(/,[ ]*/)
9
+ else
10
+ []
11
+ end
12
+
13
+ incl_sect = sections.empty?
14
+ sections.each do |s|
15
+ if not incl_sect and Regexp.new(s) =~ parent.title
16
+ incl_sect = true
17
+ end
18
+ end
19
+
20
+ incl_sect or (not parent.document.attributes["error"] and (/^Before/ =~ parent.title or /^After/ =~ parent.title))
21
+ end
22
+
23
+ def get_lang lang
24
+ case lang
25
+ when 'pyspark'
26
+ 'python'
27
+ when 'spark-shell'
28
+ 'scala'
29
+ else
30
+ lang
31
+ end
32
+ end
33
+
34
+ def write_file attrs, default_name, body
35
+ name = if attrs['file'] then attrs['file'] else default_name end
36
+ mode = if attrs['overwrite'] == 'false' then File::WRONLY|File::CREAT|File::EXCL else 'w' end
37
+ open(name, mode) do |f|
38
+ f.write(body + "\n")
39
+ end
40
+ end
41
+
42
+ module Asciibuild
43
+ module Extensions
44
+ class ConcatBlock < Asciidoctor::Extensions::BlockProcessor
45
+ # BlockProcessor to concatenate content into a single file.
46
+ # It allows you to break up sections of a file into separate listing blocks and aggregate them together
47
+ # into a single file you can reference later in the process.
48
+ #
49
+ # .Add function to file
50
+ # [concat,bash,file=utility.sh]
51
+ # ----
52
+ # #!/bin/bash
53
+ #
54
+ # fun greet() {
55
+ # echo 'Hello World'
56
+ # }
57
+ # ----
58
+ #
59
+ # .Add call to file
60
+ # [concat,bash,file=utility.sh]
61
+ # ----
62
+ # echo 'Hello World'
63
+ # ----
64
+ #
65
+ # After the document is processed, a file in the working directory will exist named "utility.sh" which
66
+ # will consist of the content of all the listing blocks in that section that use the same file name.
67
+
68
+ use_dsl
69
+ named :concat
70
+ on_context :listing
71
+
72
+ def process parent, reader, attrs
73
+ doctitle = parent.document.attributes["doctitle"]
74
+ body = reader.read
75
+
76
+ puts ""
77
+ puts "#{doctitle} > #{parent.title} > #{attrs['title']}"
78
+ puts (">" * 80)
79
+
80
+ fname = if not include_section?(parent, attrs)
81
+ if parent.document.attributes["error"]
82
+ puts "Section \"#{parent.title}\" skipped due to previous error."
83
+ attrs['title'] = 'icon:pause-circle[role=red] ' + attrs['title'] + " (previous error)"
84
+ else
85
+ sections = parent.document.attributes["sections"].split(/,[ ]*/)
86
+ puts "Section \"#{parent.title}\" skipped. Does not match #{sections}."
87
+ attrs['title'] = 'icon:pause-circle[role=yellow] ' + attrs['title']
88
+ end
89
+ false
90
+ else
91
+ attrs["file"]
92
+ end
93
+
94
+ if fname
95
+ if not parent.document.attributes["#{parent.title} #{fname}"]
96
+ open(fname, 'w') do |f|
97
+ f.write("")
98
+ end
99
+ parent.document.attributes["#{parent.title} #{fname}"] = true
100
+ end
101
+
102
+ open(fname, 'a') do |f|
103
+ f.write(body + "\n")
104
+ end
105
+ puts body
106
+ end
107
+
108
+ puts ("<" * 80)
109
+
110
+ create_open_block parent, ["----", body, "----"], attrs
111
+ end
112
+
113
+ end
114
+
115
+ class EvalBlock < Asciidoctor::Extensions::BlockProcessor
116
+ # BlockProcessor to make the content of listing blocks executable. Has built-in support for:
117
+ #
118
+ # * `Dockerfile`
119
+ # * `spark-shell` (Scala)
120
+ # * `pyspark` (Python)
121
+ # * `erlang`
122
+ # * Any interpreted language that accepts `STDIN`
123
+ #
124
+ # To use, add the `[asciibuild,Language]` style to a listing block.
125
+ #
126
+ # .Run a bash script
127
+ # [asciibuild,bash]
128
+ # ----
129
+ # echo 'Hello World'
130
+ # ----
131
+ #
132
+ # If using a language like BASH or Python, the language's interpreter should accept `STDIN` as
133
+ # input and be found in the `PATH`.
134
+
135
+
136
+ use_dsl
137
+ named :asciibuild
138
+ on_context :listing
139
+
140
+ def before_start(cmd, parent, attrs, lines, stderr_lines)
141
+ end
142
+
143
+ def after_end(cmd, parent, lines, attrs)
144
+ if attrs[2] == 'Dockerfile' and attrs['run'] and not attrs['run'] == 'false'
145
+ doctitle = parent.document.attributes['doctitle']
146
+ cmd = if attrs['run'] == 'true' then '' else attrs['run'] end
147
+ name = if attrs['original_title'] then attrs['original_title'] else doctitle end
148
+ docker_run = "docker run -d -i --label asciibuild.name=\"#{doctitle}\" #{attrs['run_opts']} #{attrs['image']} #{cmd}"
149
+
150
+ puts docker_run
151
+
152
+ rout, rerr, status = Open3.capture3(docker_run)
153
+ puts rout, rerr
154
+ if status == 0
155
+ parent.document.attributes["#{name} container"] = rout.chomp
156
+ else
157
+ parent.document.attributes["error"] = true
158
+ end
159
+ lines << "----" << "> #{docker_run}" << rout << rerr << "----"
160
+ end
161
+ create_open_block parent, lines, attrs
162
+ end
163
+
164
+ def process parent, reader, attrs
165
+ if not include_section?(parent, attrs)
166
+ if parent.document.attributes["error"]
167
+ puts "Section \"#{parent.title}\" skipped due to previous error."
168
+ attrs['title'] = 'icon:pause-circle[role=red] ' + attrs['title'] + " (previous error)"
169
+ else
170
+ sections = parent.document.attributes["sections"].split(/,[ ]*/)
171
+ puts "Section \"#{parent.title}\" skipped. Does not match #{sections}."
172
+ attrs['title'] = 'icon:pause-circle[role=yellow] ' + attrs['title']
173
+ end
174
+ lang = get_lang attrs[2]
175
+ return create_open_block parent, ["[source,#{lang}]", "----"] + reader.lines + ["----"], attrs
176
+ end
177
+
178
+ doctitle = parent.document.attributes["doctitle"]
179
+ attrs['original_title'] = attrs['title']
180
+ body = Mustache.render(reader.read, parent.document.attributes)
181
+
182
+ lines = []
183
+ stderr_lines = []
184
+
185
+ cmd = case attrs[2]
186
+ when 'Dockerfile'
187
+ if not attrs['image']
188
+ raise 'Missing image name. Add attribute of image={name} to the [asciibuild,Dockerfile] style.'
189
+ end
190
+ write_file attrs, 'Dockerfile', body
191
+ "docker build -t #{attrs['image']} #{attrs['build_opts']} -f #{name} ."
192
+ when 'erlang'
193
+ write_file attrs, 'escript.erl', body
194
+ "escript #{name} #{attrs['escript_opts']}"
195
+ when 'pyspark'
196
+ "pyspark #{attrs['spark_opts']}"
197
+ when 'spark-shell'
198
+ "spark-shell #{attrs['spark_opts']}"
199
+ else
200
+ if attrs['container']
201
+ name = if attrs['container'] == 'true' then doctitle else attrs['container'] end
202
+ container_id = parent.document.attributes["#{name} container"]
203
+ "docker exec -i #{container_id} #{attrs['exec_opts']} #{attrs[2]}"
204
+ else
205
+ attrs[2]
206
+ end
207
+ end
208
+ lang = get_lang attrs[2]
209
+
210
+ lines = ["[source,#{lang}]", "----", body, "", "----"]
211
+
212
+ puts ""
213
+ puts "#{doctitle} > #{parent.title} > #{attrs['title']}"
214
+ puts (">" * 80)
215
+
216
+ before_start cmd, parent, attrs, lines, stderr_lines
217
+
218
+ lines << ".#{cmd}" << "----"
219
+
220
+ puts body
221
+ puts "> #{cmd}"
222
+ puts ""
223
+
224
+ status = 0
225
+ Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
226
+ stdin << body << "\n"
227
+ stdin.close
228
+
229
+ while line=stdout.gets do
230
+ puts line
231
+ lines << line.chomp
232
+ end
233
+ while line=stderr.gets do
234
+ puts line
235
+ stderr_lines << line.chomp
236
+ end
237
+
238
+ status = wait_thr.value
239
+ end
240
+ lines << "----"
241
+ puts ("<" * 80)
242
+
243
+ if not stderr_lines.size == 0
244
+ lines << ".STDERR" << "----"
245
+ stderr_lines.each do |l| lines << l end
246
+ lines << "----"
247
+ end
248
+
249
+ if status != 0
250
+ lines << "IMPORTANT: #{cmd} failed with #{status}"
251
+ parent.document.attributes["error"] = true
252
+ attrs['title'] = 'icon:exclamation-circle[role=red] ' + attrs['title']
253
+ else
254
+ attrs['title'] = 'icon:check-circle[role=green] ' + attrs['title']
255
+ end
256
+
257
+ after_end cmd, parent, lines, attrs
258
+ end
259
+
260
+ end
261
+
262
+ Asciidoctor::Extensions.register do
263
+ block EvalBlock
264
+ block ConcatBlock
265
+ end
266
+ end
267
+ end
data/lib/asciibuild.rb ADDED
@@ -0,0 +1 @@
1
+ require_relative 'asciibuild/extensions'
@@ -0,0 +1,695 @@
1
+ /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
2
+ /* ========================================================================== HTML5 display definitions ========================================================================== */
3
+ /** Correct `block` display not defined in IE 8/9. */
4
+ article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
5
+
6
+ /** Correct `inline-block` display not defined in IE 8/9. */
7
+ audio, canvas, video { display: inline-block; }
8
+
9
+ /** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
10
+ audio:not([controls]) { display: none; height: 0; }
11
+
12
+ /** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
13
+ [hidden], template { display: none; }
14
+
15
+ script { display: none !important; }
16
+
17
+ /* ========================================================================== Base ========================================================================== */
18
+ /** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
19
+ html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
20
+
21
+ /** Remove default margin. */
22
+ body { margin: 0; }
23
+
24
+ /* ========================================================================== Links ========================================================================== */
25
+ /** Remove the gray background color from active links in IE 10. */
26
+ a { background: transparent; }
27
+
28
+ /** Address `outline` inconsistency between Chrome and other browsers. */
29
+ a:focus { outline: thin dotted; }
30
+
31
+ /** Improve readability when focused and also mouse hovered in all browsers. */
32
+ a:active, a:hover { outline: 0; }
33
+
34
+ /* ========================================================================== Typography ========================================================================== */
35
+ /** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
36
+ h1 { font-size: 2em; margin: 0.67em 0; }
37
+
38
+ /** Address styling not present in IE 8/9, Safari 5, and Chrome. */
39
+ abbr[title] { border-bottom: 1px dotted; }
40
+
41
+ /** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
42
+ b, strong { font-weight: bold; }
43
+
44
+ /** Address styling not present in Safari 5 and Chrome. */
45
+ dfn { font-style: italic; }
46
+
47
+ /** Address differences between Firefox and other browsers. */
48
+ hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
49
+
50
+ /** Address styling not present in IE 8/9. */
51
+ mark { background: #ff0; color: #000; }
52
+
53
+ /** Correct font family set oddly in Safari 5 and Chrome. */
54
+ code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
55
+
56
+ /** Improve readability of pre-formatted text in all browsers. */
57
+ pre { white-space: pre-wrap; }
58
+
59
+ /** Set consistent quote types. */
60
+ q { quotes: "\201C" "\201D" "\2018" "\2019"; }
61
+
62
+ /** Address inconsistent and variable font size in all browsers. */
63
+ small { font-size: 80%; }
64
+
65
+ /** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
66
+ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
67
+
68
+ sup { top: -0.5em; }
69
+
70
+ sub { bottom: -0.25em; }
71
+
72
+ /* ========================================================================== Embedded content ========================================================================== */
73
+ /** Remove border when inside `a` element in IE 8/9. */
74
+ img { border: 0; }
75
+
76
+ /** Correct overflow displayed oddly in IE 9. */
77
+ svg:not(:root) { overflow: hidden; }
78
+
79
+ /* ========================================================================== Figures ========================================================================== */
80
+ /** Address margin not present in IE 8/9 and Safari 5. */
81
+ figure { margin: 0; }
82
+
83
+ /* ========================================================================== Forms ========================================================================== */
84
+ /** Define consistent border, margin, and padding. */
85
+ fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
86
+
87
+ /** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
88
+ legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
89
+
90
+ /** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
91
+ button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
92
+
93
+ /** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
94
+ button, input { line-height: normal; }
95
+
96
+ /** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
97
+ button, select { text-transform: none; }
98
+
99
+ /** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
100
+ button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
101
+
102
+ /** Re-set default cursor for disabled elements. */
103
+ button[disabled], html input[disabled] { cursor: default; }
104
+
105
+ /** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
106
+ input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
107
+
108
+ /** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
109
+ input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
110
+
111
+ /** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
112
+ input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
113
+
114
+ /** Remove inner padding and border in Firefox 4+. */
115
+ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
116
+
117
+ /** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
118
+ textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
119
+
120
+ /* ========================================================================== Tables ========================================================================== */
121
+ /** Remove most spacing between table cells. */
122
+ table { border-collapse: collapse; border-spacing: 0; }
123
+
124
+ meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
125
+
126
+ meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
127
+
128
+ meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
129
+
130
+ *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
131
+
132
+ html, body { font-size: 100%; }
133
+
134
+ body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
135
+
136
+ a:hover { cursor: pointer; }
137
+
138
+ img, object, embed { max-width: 100%; height: auto; }
139
+
140
+ object, embed { height: 100%; }
141
+
142
+ img { -ms-interpolation-mode: bicubic; }
143
+
144
+ #map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
145
+
146
+ .left { float: left !important; }
147
+
148
+ .right { float: right !important; }
149
+
150
+ .text-left { text-align: left !important; }
151
+
152
+ .text-right { text-align: right !important; }
153
+
154
+ .text-center { text-align: center !important; }
155
+
156
+ .text-justify { text-align: justify !important; }
157
+
158
+ .hide { display: none; }
159
+
160
+ .antialiased, body { -webkit-font-smoothing: antialiased; }
161
+
162
+ img { display: inline-block; vertical-align: middle; }
163
+
164
+ textarea { height: auto; min-height: 50px; }
165
+
166
+ select { width: 100%; }
167
+
168
+ object, svg { display: inline-block; vertical-align: middle; }
169
+
170
+ .center { margin-left: auto; margin-right: auto; }
171
+
172
+ .spread { width: 100%; }
173
+
174
+ p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
175
+
176
+ .subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: #003b6b; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
177
+
178
+ /* Typography resets */
179
+ div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
180
+
181
+ /* Default Link Styles */
182
+ a { color: #00579e; text-decoration: none; line-height: inherit; }
183
+ a:hover, a:focus { color: #333333; }
184
+ a img { border: none; }
185
+
186
+ /* Default paragraph styles */
187
+ p { font-family: Arial, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
188
+ p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
189
+
190
+ /* Default header styles */
191
+ h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Arial, sans-serif; font-weight: normal; font-style: normal; color: #7b2d00; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
192
+ h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #ff6b15; line-height: 0; }
193
+
194
+ h1 { font-size: 2.125em; }
195
+
196
+ h2 { font-size: 1.6875em; }
197
+
198
+ h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
199
+
200
+ h4 { font-size: 1.125em; }
201
+
202
+ h5 { font-size: 1.125em; }
203
+
204
+ h6 { font-size: 1em; }
205
+
206
+ hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
207
+
208
+ /* Helpful Typography Defaults */
209
+ em, i { font-style: italic; line-height: inherit; }
210
+
211
+ strong, b { font-weight: bold; line-height: inherit; }
212
+
213
+ small { font-size: 60%; line-height: inherit; }
214
+
215
+ code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: bold; color: #003426; }
216
+
217
+ /* Lists */
218
+ ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Arial, sans-serif; }
219
+
220
+ ul, ol { margin-left: 1.5em; }
221
+ ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
222
+
223
+ /* Unordered Lists */
224
+ ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
225
+ ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
226
+ ul.square { list-style-type: square; }
227
+ ul.circle { list-style-type: circle; }
228
+ ul.disc { list-style-type: disc; }
229
+ ul.no-bullet { list-style: none; }
230
+
231
+ /* Ordered Lists */
232
+ ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
233
+
234
+ /* Definition Lists */
235
+ dl dt { margin-bottom: 0.3em; font-weight: bold; }
236
+ dl dd { margin-bottom: 0.75em; }
237
+
238
+ /* Abbreviations */
239
+ abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #dddddd; cursor: help; }
240
+
241
+ abbr { text-transform: none; }
242
+
243
+ /* Blockquotes */
244
+ blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; }
245
+ blockquote cite { display: block; font-size: 0.8125em; color: #e15200; }
246
+ blockquote cite:before { content: "\2014 \0020"; }
247
+ blockquote cite a, blockquote cite a:visited { color: #e15200; }
248
+
249
+ blockquote, blockquote p { line-height: 1.6; color: #333333; }
250
+
251
+ /* Microformats */
252
+ .vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; }
253
+ .vcard li { margin: 0; display: block; }
254
+ .vcard .fn { font-weight: bold; font-size: 0.9375em; }
255
+
256
+ .vevent .summary { font-weight: bold; }
257
+ .vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
258
+
259
+ @media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
260
+ h1 { font-size: 2.75em; }
261
+ h2 { font-size: 2.3125em; }
262
+ h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
263
+ h4 { font-size: 1.4375em; } }
264
+ /* Tables */
265
+ table { background: white; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
266
+ table thead, table tfoot { background: -webkit-linear-gradient(top, #add386, #90b66a); font-weight: bold; }
267
+ table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: white; text-align: left; }
268
+ table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
269
+ table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #edf2f2; }
270
+ table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
271
+
272
+ body { tab-size: 4; }
273
+
274
+ h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
275
+
276
+ a:hover, a:focus { text-decoration: underline; }
277
+
278
+ .clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
279
+ .clearfix:after, .float-group:after { clear: both; }
280
+
281
+ *:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 3px 2px 1px 2px; background-color: #eeeeee; border: 1px solid #dddddd; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; }
282
+
283
+ pre, pre > code { line-height: 1.6; color: black; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
284
+
285
+ em em { font-style: normal; }
286
+
287
+ strong strong { font-weight: normal; }
288
+
289
+ .keyseq { color: #333333; }
290
+
291
+ kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
292
+
293
+ .keyseq kbd:first-child { margin-left: 0; }
294
+
295
+ .keyseq kbd:last-child { margin-right: 0; }
296
+
297
+ .menuseq, .menu { color: black; }
298
+
299
+ b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
300
+
301
+ b.button:before { content: "["; padding: 0 3px 0 2px; }
302
+
303
+ b.button:after { content: "]"; padding: 0 2px 0 3px; }
304
+
305
+ #header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
306
+ #header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
307
+ #header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
308
+
309
+ #content { margin-top: 1.25em; }
310
+
311
+ #content:before { content: none; }
312
+
313
+ #header > h1:first-child { color: #7b2d00; margin-top: 2.25rem; margin-bottom: 0; }
314
+ #header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #dddddd; }
315
+ #header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #dddddd; padding-bottom: 8px; }
316
+ #header .details { border-bottom: 1px solid #dddddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #e15200; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
317
+ #header .details span:first-child { margin-left: -0.125em; }
318
+ #header .details span.email a { color: #333333; }
319
+ #header .details br { display: none; }
320
+ #header .details br + span:before { content: "\00a0\2013\00a0"; }
321
+ #header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333333; }
322
+ #header .details br + span#revremark:before { content: "\00a0|\00a0"; }
323
+ #header #revnumber { text-transform: capitalize; }
324
+ #header #revnumber:after { content: "\00a0"; }
325
+
326
+ #content > h1:first-child:not([class]) { color: #7b2d00; border-bottom: 1px solid #dddddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
327
+
328
+ #toc { border-bottom: 0 solid #dddddd; padding-bottom: 0.5em; }
329
+ #toc > ul { margin-left: 0.125em; }
330
+ #toc ul.sectlevel0 > li > a { font-style: italic; }
331
+ #toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
332
+ #toc ul { font-family: Arial, sans-serif; list-style-type: none; }
333
+ #toc li { line-height: 1.3334; margin-top: 0.3334em; }
334
+ #toc a { text-decoration: none; }
335
+ #toc a:active { text-decoration: underline; }
336
+
337
+ #toctitle { color: #003b6b; font-size: 1.2em; }
338
+
339
+ @media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
340
+ body.toc2 { padding-left: 15em; padding-right: 0; }
341
+ #toc.toc2 { margin-top: 0 !important; background-color: white; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
342
+ #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
343
+ #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
344
+ #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
345
+ #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
346
+ body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
347
+ body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } }
348
+ @media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
349
+ #toc.toc2 { width: 20em; }
350
+ #toc.toc2 #toctitle { font-size: 1.375em; }
351
+ #toc.toc2 > ul { font-size: 0.95em; }
352
+ #toc.toc2 ul ul { padding-left: 1.25em; }
353
+ body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
354
+ #content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; }
355
+ #content #toc > :first-child { margin-top: 0; }
356
+ #content #toc > :last-child { margin-bottom: 0; }
357
+
358
+ #footer { max-width: 100%; background-color: none; padding: 1.25em; }
359
+
360
+ #footer-text { color: black; line-height: 1.44; }
361
+
362
+ .sect1 { padding-bottom: 0.625em; }
363
+
364
+ @media only screen and (min-width: 768px) { .sect1 { padding-bottom: 1.25em; } }
365
+ .sect1 + .sect1 { border-top: 0 solid #dddddd; }
366
+
367
+ #content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
368
+ #content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
369
+ #content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
370
+ #content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #7b2d00; text-decoration: none; }
371
+ #content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #622400; }
372
+
373
+ .audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
374
+
375
+ .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
376
+
377
+ table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
378
+
379
+ .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: #7b2d00; }
380
+
381
+ table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
382
+
383
+ .admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
384
+ .admonitionblock > table td.icon { text-align: center; width: 80px; }
385
+ .admonitionblock > table td.icon img { max-width: none; }
386
+ .admonitionblock > table td.icon .title { font-weight: bold; font-family: Arial, sans-serif; text-transform: uppercase; }
387
+ .admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #e15200; }
388
+ .admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
389
+
390
+ .exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; }
391
+ .exampleblock > .content > :first-child { margin-top: 0; }
392
+ .exampleblock > .content > :last-child { margin-bottom: 0; }
393
+
394
+ .sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; }
395
+ .sidebarblock > :first-child { margin-top: 0; }
396
+ .sidebarblock > :last-child { margin-bottom: 0; }
397
+ .sidebarblock > .content > .title { color: #003b6b; margin-top: 0; }
398
+
399
+ .exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
400
+
401
+ .literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eeeeee; }
402
+ .sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
403
+
404
+ .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px dashed #666666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
405
+ .literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
406
+ @media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
407
+ @media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
408
+
409
+ .literalblock.output pre { color: #eeeeee; background-color: black; }
410
+
411
+ .listingblock pre.highlightjs { padding: 0; }
412
+ .listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
413
+
414
+ .listingblock > .content { position: relative; }
415
+
416
+ .listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
417
+
418
+ .listingblock:hover code[data-lang]:before { display: block; }
419
+
420
+ .listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
421
+
422
+ .listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
423
+
424
+ table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
425
+
426
+ table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
427
+
428
+ table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
429
+
430
+ pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; }
431
+
432
+ pre.pygments .lineno { display: inline-block; margin-right: .25em; }
433
+
434
+ table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
435
+
436
+ .quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
437
+ .quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
438
+ .quoteblock blockquote, .quoteblock blockquote p { color: #333333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
439
+ .quoteblock blockquote { margin: 0; padding: 0; border: 0; }
440
+ .quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: #003b6b; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
441
+ .quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
442
+ .quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
443
+ .quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #e15200; }
444
+ .quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
445
+ .quoteblock .quoteblock blockquote:before { display: none; }
446
+
447
+ .verseblock { margin: 0 1em 0.75em 1em; }
448
+ .verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333333; font-weight: 300; text-rendering: optimizeLegibility; }
449
+ .verseblock pre strong { font-weight: 400; }
450
+ .verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
451
+
452
+ .quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
453
+ .quoteblock .attribution br, .verseblock .attribution br { display: none; }
454
+ .quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #e15200; }
455
+
456
+ .quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
457
+ .quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
458
+ .quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
459
+
460
+ table.tableblock { max-width: 100%; border-collapse: separate; }
461
+ table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
462
+
463
+ table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
464
+
465
+ table.grid-all th.tableblock, table.grid-all td.tableblock { border-width: 0 1px 1px 0; }
466
+
467
+ table.grid-all tfoot > tr > th.tableblock, table.grid-all tfoot > tr > td.tableblock { border-width: 1px 1px 0 0; }
468
+
469
+ table.grid-cols th.tableblock, table.grid-cols td.tableblock { border-width: 0 1px 0 0; }
470
+
471
+ table.grid-all * > tr > .tableblock:last-child, table.grid-cols * > tr > .tableblock:last-child { border-right-width: 0; }
472
+
473
+ table.grid-rows th.tableblock, table.grid-rows td.tableblock { border-width: 0 0 1px 0; }
474
+
475
+ table.grid-all tbody > tr:last-child > th.tableblock, table.grid-all tbody > tr:last-child > td.tableblock, table.grid-all thead:last-child > tr > th.tableblock, table.grid-rows tbody > tr:last-child > th.tableblock, table.grid-rows tbody > tr:last-child > td.tableblock, table.grid-rows thead:last-child > tr > th.tableblock { border-bottom-width: 0; }
476
+
477
+ table.grid-rows tfoot > tr > th.tableblock, table.grid-rows tfoot > tr > td.tableblock { border-width: 1px 0 0 0; }
478
+
479
+ table.frame-all { border-width: 1px; }
480
+
481
+ table.frame-sides { border-width: 0 1px; }
482
+
483
+ table.frame-topbot { border-width: 1px 0; }
484
+
485
+ th.halign-left, td.halign-left { text-align: left; }
486
+
487
+ th.halign-right, td.halign-right { text-align: right; }
488
+
489
+ th.halign-center, td.halign-center { text-align: center; }
490
+
491
+ th.valign-top, td.valign-top { vertical-align: top; }
492
+
493
+ th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
494
+
495
+ th.valign-middle, td.valign-middle { vertical-align: middle; }
496
+
497
+ table thead th, table tfoot th { font-weight: bold; }
498
+
499
+ tbody tr th { display: table-cell; line-height: 1.4; background: -webkit-linear-gradient(top, #add386, #90b66a); }
500
+
501
+ tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: white; font-weight: bold; }
502
+
503
+ p.tableblock > code:only-child { background: none; padding: 0; }
504
+
505
+ p.tableblock { font-size: 1em; }
506
+
507
+ td > div.verse { white-space: pre; }
508
+
509
+ ol { margin-left: 1.75em; }
510
+
511
+ ul li ol { margin-left: 1.5em; }
512
+
513
+ dl dd { margin-left: 1.125em; }
514
+
515
+ dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
516
+
517
+ ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
518
+
519
+ ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; }
520
+
521
+ ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; }
522
+
523
+ ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1em; font-size: 0.85em; }
524
+
525
+ ul.checklist li > p:first-child > input[type="checkbox"]:first-child { width: 1em; position: relative; top: 1px; }
526
+
527
+ ul.inline { margin: 0 auto 0.375em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; }
528
+ ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; }
529
+ ul.inline > li > * { display: block; }
530
+
531
+ .unstyled dl dt { font-weight: normal; font-style: normal; }
532
+
533
+ ol.arabic { list-style-type: decimal; }
534
+
535
+ ol.decimal { list-style-type: decimal-leading-zero; }
536
+
537
+ ol.loweralpha { list-style-type: lower-alpha; }
538
+
539
+ ol.upperalpha { list-style-type: upper-alpha; }
540
+
541
+ ol.lowerroman { list-style-type: lower-roman; }
542
+
543
+ ol.upperroman { list-style-type: upper-roman; }
544
+
545
+ ol.lowergreek { list-style-type: lower-greek; }
546
+
547
+ .hdlist > table, .colist > table { border: 0; background: none; }
548
+ .hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
549
+
550
+ td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
551
+
552
+ td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
553
+
554
+ .literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
555
+
556
+ .colist > table tr > td:first-of-type { padding: 0 0.75em; line-height: 1; }
557
+ .colist > table tr > td:last-of-type { padding: 0.25em 0; }
558
+
559
+ .thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; }
560
+
561
+ .imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
562
+ .imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
563
+ .imageblock > .title { margin-bottom: 0; }
564
+ .imageblock.thumb, .imageblock.th { border-width: 6px; }
565
+ .imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
566
+
567
+ .image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
568
+ .image.left { margin-right: 0.625em; }
569
+ .image.right { margin-left: 0.625em; }
570
+
571
+ a.image { text-decoration: none; display: inline-block; }
572
+ a.image object { pointer-events: none; }
573
+
574
+ sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
575
+ sup.footnote a, sup.footnoteref a { text-decoration: none; }
576
+ sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
577
+
578
+ #footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
579
+ #footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
580
+ #footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.05em; margin-bottom: 0.2em; }
581
+ #footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; }
582
+ #footnotes .footnote:last-of-type { margin-bottom: 0; }
583
+ #content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
584
+
585
+ .gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
586
+ .gist .file-data > table td.line-data { width: 99%; }
587
+
588
+ div.unbreakable { page-break-inside: avoid; }
589
+
590
+ .big { font-size: larger; }
591
+
592
+ .small { font-size: smaller; }
593
+
594
+ .underline { text-decoration: underline; }
595
+
596
+ .overline { text-decoration: overline; }
597
+
598
+ .line-through { text-decoration: line-through; }
599
+
600
+ .aqua { color: #00bfbf; }
601
+
602
+ .aqua-background { background-color: #00fafa; }
603
+
604
+ .black { color: black; }
605
+
606
+ .black-background { background-color: black; }
607
+
608
+ .blue { color: #0000bf; }
609
+
610
+ .blue-background { background-color: #0000fa; }
611
+
612
+ .fuchsia { color: #bf00bf; }
613
+
614
+ .fuchsia-background { background-color: #fa00fa; }
615
+
616
+ .gray { color: #606060; }
617
+
618
+ .gray-background { background-color: #7d7d7d; }
619
+
620
+ .green { color: #006000; }
621
+
622
+ .green-background { background-color: #007d00; }
623
+
624
+ .lime { color: #00bf00; }
625
+
626
+ .lime-background { background-color: #00fa00; }
627
+
628
+ .maroon { color: #600000; }
629
+
630
+ .maroon-background { background-color: #7d0000; }
631
+
632
+ .navy { color: #000060; }
633
+
634
+ .navy-background { background-color: #00007d; }
635
+
636
+ .olive { color: #606000; }
637
+
638
+ .olive-background { background-color: #7d7d00; }
639
+
640
+ .purple { color: #600060; }
641
+
642
+ .purple-background { background-color: #7d007d; }
643
+
644
+ .red { color: #bf0000; }
645
+
646
+ .red-background { background-color: #fa0000; }
647
+
648
+ .silver { color: #909090; }
649
+
650
+ .silver-background { background-color: #bcbcbc; }
651
+
652
+ .teal { color: #006060; }
653
+
654
+ .teal-background { background-color: #007d7d; }
655
+
656
+ .white { color: #bfbfbf; }
657
+
658
+ .white-background { background-color: #fafafa; }
659
+
660
+ .yellow { color: #bfbf00; }
661
+
662
+ .yellow-background { background-color: #fafa00; }
663
+
664
+ span.icon > .fa { cursor: default; }
665
+
666
+ .admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
667
+ .admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #004176; }
668
+ .admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
669
+ .admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
670
+ .admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
671
+ .admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
672
+
673
+ .conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
674
+ .conum[data-value] * { color: #fff !important; }
675
+ .conum[data-value] + b { display: none; }
676
+ .conum[data-value]:after { content: attr(data-value); }
677
+ pre .conum[data-value] { position: relative; top: -0.125em; }
678
+
679
+ b.conum * { color: inherit !important; }
680
+
681
+ .conum:not([data-value]):empty { display: none; }
682
+
683
+ h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #dddddd; }
684
+
685
+ .sect1 { padding-bottom: 0; }
686
+
687
+ #toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
688
+
689
+ .sidebarblock { border-color: #aaa; }
690
+
691
+ code { -webkit-border-radius: 4px; border-radius: 4px; }
692
+
693
+ p.tableblock.header { color: #6d6e71; }
694
+
695
+ .literalblock pre, .listingblock pre { background: #eeeeee; }
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asciibuild
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jon Brisbin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: asciidoctor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pygments.rb
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mustache
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ description: Orchestrate and document processes by inlining executable code into an
56
+ Asciidoc document
57
+ email: jon@jbrisbin.com
58
+ executables:
59
+ - asciibuild
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - bin/asciibuild
64
+ - lib/asciibuild.rb
65
+ - lib/asciibuild/extensions.rb
66
+ - stylesheets/colony.css
67
+ homepage: http://github.com/jbrisbin/asciibuild
68
+ licenses:
69
+ - Apache-2.0
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.5.1
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Process orchestrator based on Asciidoc
91
+ test_files: []