ydoc 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ module YDoc
2
+ class Config
3
+ ATTRIBUTES = [:name, :verbose, :output_dir, :temp_dir, :input_dir]
4
+ attr_reader *ATTRIBUTES
5
+
6
+ def initialize options = {}
7
+ options.each { |key, value|
8
+ instance_variable_set("@#{key.to_s}", value) if ATTRIBUTES.include?(key.to_sym)
9
+ }
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,58 @@
1
+ require 'map'
2
+ require 'mail'
3
+ require 'yaml'
4
+
5
+ module YDoc
6
+ class EmailBuilder
7
+
8
+ def mail_to(to, subject, body, file_or_directory, options = {})
9
+ is_file = File.file?(file_or_directory) && File.exists?(file_or_directory)
10
+ is_directory = File.directory?(file_or_directory) && File.exists?(file_or_directory)
11
+
12
+ options = Map[options]
13
+ options = load_config(options[:config]) || options
14
+
15
+ check_options options
16
+
17
+ if is_file
18
+ send_file to, subject, body, file_or_directory, options
19
+ elsif is_directory
20
+ Dir["#{file_or_directory}/*.html"].each { |file| send_file to, subject, body, file, options }
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def send_file(to, subject, body, file, options)
27
+ Mail.defaults do
28
+ delivery_method :smtp, {
29
+ :address => 'smtp.gmail.com',
30
+ :port => 587,
31
+ :user_name => options[:username],
32
+ :password => options[:password],
33
+ :authentication => :plain,
34
+ :enable_starttls_auto => true
35
+ }
36
+ end
37
+
38
+ Mail.deliver do
39
+ to to
40
+ from options[:address]
41
+ subject subject
42
+ body body
43
+ add_file file
44
+ end
45
+ end
46
+
47
+ def check_options(options)
48
+ abort 'There are some crucial options missing' unless options[:address] and options[:port] and options[:host] and options[:username] and options[:password]
49
+ end
50
+
51
+ def load_config(path)
52
+ if path
53
+ config = Map[JSON.parse(File.open(path).read)]
54
+ config[:email]
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,6 @@
1
+ Content-Type: multipart/mixed; name=\"<%= filename %>\"
2
+ Content-Transfer-Encoding:base64
3
+ Content-Disposition: attachment; filename="<%= filename %>"
4
+
5
+ <%= encoded %>
6
+ --<%= marker %>--
@@ -0,0 +1,6 @@
1
+ Content-Type: text/plain
2
+ Content-Transfer-Encoding:8bit
3
+
4
+ <%= body %>
5
+
6
+ --<%= marker %>
@@ -0,0 +1,6 @@
1
+ From: <%= address %>
2
+ To: <%= recipients %>
3
+ Subject: <%= subject %>
4
+ MIME-Version: 1.0
5
+ Content-Type: multipart/mixed; boundary=<%= marker %>
6
+ --<%= marker %>
@@ -0,0 +1,51 @@
1
+ require 'fileutils'
2
+ require 'mkmf'
3
+ require 'json'
4
+ require 'map'
5
+
6
+ module YDoc
7
+ class HtmlBuilder
8
+ def initialize
9
+ end
10
+
11
+ def to_html file_or_directory, output_directory, options = {}
12
+ abort 'Pandoc command is not available. Make sure it is installed and added to the path' unless find_executable('pandoc')
13
+ is_file = File.file?(file_or_directory) && File.exists?(file_or_directory)
14
+ is_directory = File.directory?(file_or_directory) && File.exists?(file_or_directory)
15
+
16
+ options = load_config(options[:config]) || options
17
+
18
+ if is_file
19
+ file_to_html file_or_directory, output_directory, options
20
+ elsif is_directory
21
+ Dir["#{file_or_directory}/*.md"].each { |file| file_to_html file, output_directory, options }
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def file_to_html file, output_directory, options
28
+ FileUtils.mkdir_p output_directory
29
+ system(command file, output_directory, options)
30
+ end
31
+
32
+ def command file, output_directory, options
33
+ command = "pandoc #{file} --template \"#{File.join(File.dirname(__FILE__), 'templates/default.html')}\" --css=\"#{File.join(File.dirname(__FILE__), 'templates/styles.css')}\""
34
+
35
+ command += ' --toc' if options[:toc]
36
+ command += " --toc-depth #{options[:tocDepth]}" if options[:tocDepth]
37
+ command += ' -N' if options[:numbered]
38
+ command += ' -s' if options[:standAlone]
39
+ command += ' --self-contained' if options[:selfContained]
40
+
41
+ command += " -o \"#{File.join(output_directory, File.basename(file, 'md'))}html\""
42
+ end
43
+
44
+ def load_config path
45
+ if path
46
+ config = Map[JSON.parse(File.open(path).read)]
47
+ config[:html]
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,77 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" $if(lang)$ lang="$lang$" xml:lang="$lang$" $endif$$if(dir)$ dir="$dir$"
3
+ $endif$>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
6
+ <meta http-equiv="Content-Style-Type" content="text/css"/>
7
+ <meta name="generator" content="pandoc"/>
8
+ $for(author-meta)$
9
+ <meta name="author" content="$author-meta$"/>
10
+ $endfor$
11
+ $if(date-meta)$
12
+ <meta name="date" content="$date-meta$"/>
13
+ $endif$
14
+ $if(keywords)$
15
+ <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$"/>
16
+ $endif$
17
+ <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
18
+ <style type="text/css">code {
19
+ white-space: pre;
20
+ }</style>
21
+ $if(quotes)$
22
+ <style type="text/css">q {
23
+ quotes: "“" "”" "‘" "’";
24
+ }</style>
25
+ $endif$
26
+ $if(highlighting-css)$
27
+ <style type="text/css">
28
+ $highlighting-css$
29
+ </style>
30
+ $endif$
31
+ $for(css)$
32
+ <link rel="stylesheet" href="$css$" type="text/css"/>
33
+ $endfor$
34
+ $if(math)$
35
+ $math$
36
+ $endif$
37
+ $for(header-includes)$
38
+ $header-includes$
39
+ $endfor$
40
+ </head>
41
+ <body>
42
+ $for(include-before)$
43
+ $include-before$
44
+ $endfor$
45
+ $if(title)$
46
+ <div id="$idprefix$header" style="display: inline-block;">
47
+ <h1 class="title">$title$</h1>
48
+ $if(subtitle)$
49
+ <h1 class="subtitle">$subtitle$</h1>
50
+ $endif$
51
+ $for(author)$
52
+ <h2 class="author">$author$</h2>
53
+ $endfor$
54
+ $if(date)$
55
+ <h3 class="date">$date$</h3>
56
+ $endif$
57
+ </div>
58
+ $endif$
59
+ <div id="logo"
60
+ style="float: right;margin: 0px 0 0 0;height: 84px;background-size: 113%;overflow: hidden;width: 185px;background-position: -13px -40px;background-image: url(data:image/jpeg;base64,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cE3ivUE0i1UY+wWREk2McAv90fhmvJljMLgpe1xM0rbLq/RbnuZ9PF5rh45VllNzk2nNr4Y22i5bXvq1e6ttqfNGm6Tc6peQ2tnbS3d1K22OCBC7ufQAcmvtX9lP4Bal8PpLrxN4jhFpqt1D5FtZEgtDESCxfHAY4HHUAc8nA9h8BfCfwt8NLUxaBpMNrIww9y3zzSf7znk/TpXX18Vm/EssdTlh8PHlg9293/l+J38OcDxyytDG42fPUjqkvhT73erfba3mFFFFfDH6uFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXC/ED4H+BfijCy+JPDVjqEpH/AB9BPLnH/bRMN+GcV3VFa06s6MuenJp91oY1qFLER5K0VJdmrr8T4t8W/wDBMfw1qd55mgeM9S0WAkkwXlql5j2Vg0ZH45rsfhn/AME8Phd4GuIb3V4rrxhqMZ3B9SbbAp9ViTA/76LV9Q0V6lTOcfVh7OVV2+Sf3rU8ujk2X0J+0p0lf5v8G2inpej2GiWi2unWVvYWy8LDbRLGg/AACrlFFeO25O7PYjFRXLFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q==)">
61
+ </div>
62
+ $if(toc)$
63
+ <div id="$idprefix$TOC">
64
+ $toc$
65
+ </div>
66
+ $endif$
67
+ $body$
68
+ $for(include-after)$
69
+ $include-after$
70
+ $endfor$
71
+ <footer>
72
+ <hr>
73
+ <div style="text-align: center; text-transform: uppercase; color: #888888; font-size: 10px">Version $version$
74
+ </div>
75
+ </footer>
76
+ </body>
77
+ </html>
@@ -0,0 +1,1052 @@
1
+ /*! normalize.css v2.1.3 | MIT License | git.io/normalize */
2
+
3
+ /* ==========================================================================
4
+ HTML5 display definitions
5
+ ========================================================================== */
6
+
7
+ /**
8
+ * Correct `block` display not defined in IE 8/9.
9
+ */
10
+
11
+ article,
12
+ aside,
13
+ details,
14
+ figcaption,
15
+ figure,
16
+ footer,
17
+ header,
18
+ hgroup,
19
+ main,
20
+ nav,
21
+ section,
22
+ summary {
23
+ display: block;
24
+ }
25
+
26
+ /**
27
+ * Correct `inline-block` display not defined in IE 8/9.
28
+ */
29
+
30
+ audio,
31
+ canvas,
32
+ video {
33
+ display: inline-block;
34
+ }
35
+
36
+ /**
37
+ * Prevent modern browsers from displaying `audio` without controls.
38
+ * Remove excess height in iOS 5 devices.
39
+ */
40
+
41
+ audio:not([controls]) {
42
+ display: none;
43
+ height: 0;
44
+ }
45
+
46
+ /**
47
+ * Address `[hidden]` styling not present in IE 8/9.
48
+ * Hide the `template` element in IE, Safari, and Firefox < 22.
49
+ */
50
+
51
+ [hidden],
52
+ template {
53
+ display: none;
54
+ }
55
+
56
+ /* ==========================================================================
57
+ Base
58
+ ========================================================================== */
59
+
60
+ /**
61
+ * 1. Set default font family to sans-serif.
62
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
63
+ * user zoom.
64
+ */
65
+
66
+ html {
67
+ font-family: sans-serif; /* 1 */
68
+ -ms-text-size-adjust: 100%; /* 2 */
69
+ -webkit-text-size-adjust: 100%; /* 2 */
70
+ }
71
+
72
+ /**
73
+ * Remove default margin.
74
+ */
75
+
76
+ body {
77
+ margin: 0;
78
+ }
79
+
80
+ /* ==========================================================================
81
+ Links
82
+ ========================================================================== */
83
+
84
+ /**
85
+ * Remove the gray background color from active links in IE 10.
86
+ */
87
+
88
+ a {
89
+ background: transparent;
90
+ }
91
+
92
+ /**
93
+ * Address `outline` inconsistency between Chrome and other browsers.
94
+ */
95
+
96
+ a:focus {
97
+ outline: thin dotted;
98
+ }
99
+
100
+ /**
101
+ * Improve readability when focused and also mouse hovered in all browsers.
102
+ */
103
+
104
+ a:active,
105
+ a:hover {
106
+ outline: 0;
107
+ }
108
+
109
+ /* ==========================================================================
110
+ Typography
111
+ ========================================================================== */
112
+
113
+ /**
114
+ * Address variable `h1` font-size and margin within `section` and `article`
115
+ * contexts in Firefox 4+, Safari 5, and Chrome.
116
+ */
117
+
118
+ h1 {
119
+ font-size: 2em;
120
+ margin: 0.67em 0;
121
+ }
122
+
123
+ /**
124
+ * Address styling not present in IE 8/9, Safari 5, and Chrome.
125
+ */
126
+
127
+ abbr[title] {
128
+ border-bottom: 1px dotted;
129
+ }
130
+
131
+ /**
132
+ * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
133
+ */
134
+
135
+ b,
136
+ strong {
137
+ font-weight: bold;
138
+ }
139
+
140
+ /**
141
+ * Address styling not present in Safari 5 and Chrome.
142
+ */
143
+
144
+ dfn {
145
+ font-style: italic;
146
+ }
147
+
148
+ /**
149
+ * Address differences between Firefox and other browsers.
150
+ */
151
+
152
+ hr {
153
+ -moz-box-sizing: content-box;
154
+ box-sizing: content-box;
155
+ height: 0;
156
+ }
157
+
158
+ /**
159
+ * Address styling not present in IE 8/9.
160
+ */
161
+
162
+ mark {
163
+ background: #ff0;
164
+ color: #000;
165
+ }
166
+
167
+ /**
168
+ * Correct font family set oddly in Safari 5 and Chrome.
169
+ */
170
+
171
+ code,
172
+ kbd,
173
+ pre,
174
+ samp {
175
+ font-family: monospace, serif;
176
+ font-size: 1em;
177
+ }
178
+
179
+ /**
180
+ * Improve readability of pre-formatted text in all browsers.
181
+ */
182
+
183
+ pre {
184
+ white-space: pre-wrap;
185
+ }
186
+
187
+ /**
188
+ * Set consistent quote types.
189
+ */
190
+
191
+ q {
192
+ quotes: "\201C" "\201D" "\2018" "\2019";
193
+ }
194
+
195
+ /**
196
+ * Address inconsistent and variable font size in all browsers.
197
+ */
198
+
199
+ small {
200
+ font-size: 80%;
201
+ }
202
+
203
+ /**
204
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
205
+ */
206
+
207
+ sub,
208
+ sup {
209
+ font-size: 75%;
210
+ line-height: 0;
211
+ position: relative;
212
+ vertical-align: baseline;
213
+ }
214
+
215
+ sup {
216
+ top: -0.5em;
217
+ }
218
+
219
+ sub {
220
+ bottom: -0.25em;
221
+ }
222
+
223
+ /* ==========================================================================
224
+ Embedded content
225
+ ========================================================================== */
226
+
227
+ /**
228
+ * Remove border when inside `a` element in IE 8/9.
229
+ */
230
+
231
+ img {
232
+ border: 0;
233
+ }
234
+
235
+ /**
236
+ * Correct overflow displayed oddly in IE 9.
237
+ */
238
+
239
+ svg:not(:root) {
240
+ overflow: hidden;
241
+ }
242
+
243
+ /* ==========================================================================
244
+ Figures
245
+ ========================================================================== */
246
+
247
+ /**
248
+ * Address margin not present in IE 8/9 and Safari 5.
249
+ */
250
+
251
+ .figure {
252
+ margin: 0;
253
+ padding: 20px;
254
+ text-align: center;
255
+ box-sizing: border-box;
256
+ }
257
+
258
+ .caption {
259
+ color: #6e6e6e;
260
+ font-size: 12px
261
+ }
262
+
263
+ /* ==========================================================================
264
+ Forms
265
+ ========================================================================== */
266
+
267
+ /**
268
+ * Define consistent border, margin, and padding.
269
+ */
270
+
271
+ fieldset {
272
+ border: 1px solid #c0c0c0;
273
+ margin: 0 2px;
274
+ padding: 0.35em 0.625em 0.75em;
275
+ }
276
+
277
+ /**
278
+ * 1. Correct `color` not being inherited in IE 8/9.
279
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
280
+ */
281
+
282
+ legend {
283
+ border: 0; /* 1 */
284
+ padding: 0; /* 2 */
285
+ }
286
+
287
+ /**
288
+ * 1. Correct font family not being inherited in all browsers.
289
+ * 2. Correct font size not being inherited in all browsers.
290
+ * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
291
+ */
292
+
293
+ button,
294
+ input,
295
+ select,
296
+ textarea {
297
+ font-family: inherit; /* 1 */
298
+ font-size: 100%; /* 2 */
299
+ margin: 0; /* 3 */
300
+ }
301
+
302
+ /**
303
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
304
+ * the UA stylesheet.
305
+ */
306
+
307
+ button,
308
+ input {
309
+ line-height: normal;
310
+ }
311
+
312
+ /**
313
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
314
+ * All other form control elements do not inherit `text-transform` values.
315
+ * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
316
+ * Correct `select` style inheritance in Firefox 4+ and Opera.
317
+ */
318
+
319
+ button,
320
+ select {
321
+ text-transform: none;
322
+ }
323
+
324
+ /**
325
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
326
+ * and `video` controls.
327
+ * 2. Correct inability to style clickable `input` types in iOS.
328
+ * 3. Improve usability and consistency of cursor style between image-type
329
+ * `input` and others.
330
+ */
331
+
332
+ button,
333
+ html input[type="button"], /* 1 */
334
+ input[type="reset"],
335
+ input[type="submit"] {
336
+ -webkit-appearance: button; /* 2 */
337
+ cursor: pointer; /* 3 */
338
+ }
339
+
340
+ /**
341
+ * Re-set default cursor for disabled elements.
342
+ */
343
+
344
+ button[disabled],
345
+ html input[disabled] {
346
+ cursor: default;
347
+ }
348
+
349
+ /**
350
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
351
+ * 2. Remove excess padding in IE 8/9/10.
352
+ */
353
+
354
+ input[type="checkbox"],
355
+ input[type="radio"] {
356
+ box-sizing: border-box; /* 1 */
357
+ padding: 0; /* 2 */
358
+ }
359
+
360
+ /**
361
+ * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
362
+ * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
363
+ * (include `-moz` to future-proof).
364
+ */
365
+
366
+ input[type="search"] {
367
+ -webkit-appearance: textfield; /* 1 */
368
+ -moz-box-sizing: content-box;
369
+ -webkit-box-sizing: content-box; /* 2 */
370
+ box-sizing: content-box;
371
+ }
372
+
373
+ /**
374
+ * Remove inner padding and search cancel button in Safari 5 and Chrome
375
+ * on OS X.
376
+ */
377
+
378
+ input[type="search"]::-webkit-search-cancel-button,
379
+ input[type="search"]::-webkit-search-decoration {
380
+ -webkit-appearance: none;
381
+ }
382
+
383
+ /**
384
+ * Remove inner padding and border in Firefox 4+.
385
+ */
386
+
387
+ button::-moz-focus-inner,
388
+ input::-moz-focus-inner {
389
+ border: 0;
390
+ padding: 0;
391
+ }
392
+
393
+ /**
394
+ * 1. Remove default vertical scrollbar in IE 8/9.
395
+ * 2. Improve readability and alignment in all browsers.
396
+ */
397
+
398
+ textarea {
399
+ overflow: auto; /* 1 */
400
+ vertical-align: top; /* 2 */
401
+ }
402
+
403
+ /* ==========================================================================
404
+ Tables
405
+ ========================================================================== */
406
+
407
+ /**
408
+ * Remove most spacing between table cells.
409
+ */
410
+
411
+ table {
412
+ border-collapse: collapse;
413
+ border-spacing: 0;
414
+ width: 100% !important;
415
+ }
416
+
417
+ .go-top {
418
+ position: fixed;
419
+ bottom: 2em;
420
+ right: 2em;
421
+ text-decoration: none;
422
+ background-color: #E0E0E0;
423
+ font-size: 12px;
424
+ padding: 1em;
425
+ display: inline;
426
+ }
427
+
428
+ /* Github css */
429
+
430
+ html, body {
431
+ margin: auto;
432
+ padding-right: 1em;
433
+ padding-left: 1em;
434
+ max-width: 60em;
435
+ color: black;
436
+ }
437
+
438
+ *:not('#mkdbuttons') {
439
+ margin: 0;
440
+ padding: 0
441
+ }
442
+
443
+ body {
444
+ font: 13.34px helvetica, arial, freesans, clean, sans-serif;
445
+ -webkit-font-smoothing: subpixel-antialiased;
446
+ line-height: 1.4;
447
+ padding: 3px;
448
+ background: #fff;
449
+ border-radius: 3px;
450
+ -moz-border-radius: 3px;
451
+ -webkit-border-radius: 3px
452
+ }
453
+
454
+ p {
455
+ margin: 1em 0
456
+ }
457
+
458
+ a {
459
+ color: #4183c4;
460
+ text-decoration: none
461
+ }
462
+
463
+ body {
464
+ background-color: #fff;
465
+ padding: 30px;
466
+ margin: 15px;
467
+ font-size: 14px;
468
+ line-height: 1.6
469
+ }
470
+
471
+ body > *:first-child {
472
+ margin-top: 0 !important
473
+ }
474
+
475
+ body > *:last-child {
476
+ margin-bottom: 0 !important
477
+ }
478
+
479
+ @media screen {
480
+ body {
481
+ box-shadow: 0 0 0 1px #cacaca, 0 0 0 4px #eee
482
+ }
483
+ }
484
+
485
+ h1, h2, h3, h4, h5, h6 {
486
+ margin: 20px 0 10px;
487
+ padding: 0;
488
+ font-weight: bold;
489
+ -webkit-font-smoothing: subpixel-antialiased;
490
+ cursor: text
491
+ }
492
+
493
+ h1 {
494
+ font-size: 28px;
495
+ color: #000
496
+ }
497
+
498
+ h2 {
499
+ font-size: 24px;
500
+ border-bottom: 1px solid #ccc;
501
+ color: #000
502
+ }
503
+
504
+ h3 {
505
+ font-size: 18px;
506
+ color: #333
507
+ }
508
+
509
+ h4 {
510
+ font-size: 16px;
511
+ color: #333
512
+ }
513
+
514
+ h5 {
515
+ font-size: 14px;
516
+ color: #333
517
+ }
518
+
519
+ h6 {
520
+ color: #777;
521
+ font-size: 14px
522
+ }
523
+
524
+ p, blockquote, table, pre {
525
+ margin: 15px 0
526
+ }
527
+
528
+ ul {
529
+ padding-left: 30px
530
+ }
531
+
532
+ ol {
533
+ padding-left: 30px
534
+ }
535
+
536
+ ol li ul:first-of-type {
537
+ margin-top: 0
538
+ }
539
+
540
+ hr {
541
+ background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;
542
+ border: 0 none;
543
+ color: #ccc;
544
+ height: 4px;
545
+ padding: 0
546
+ }
547
+
548
+ body > h2:first-child {
549
+ margin-top: 0;
550
+ padding-top: 0
551
+ }
552
+
553
+ body > h1:first-child {
554
+ margin-top: 0;
555
+ padding-top: 0
556
+ }
557
+
558
+ body > h1:first-child + h2 {
559
+ margin-top: 0;
560
+ padding-top: 0
561
+ }
562
+
563
+ body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
564
+ margin-top: 0;
565
+ padding-top: 0
566
+ }
567
+
568
+ a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
569
+ margin-top: 0;
570
+ padding-top: 0
571
+ }
572
+
573
+ h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, ul li > :first-child, ol li > :first-child {
574
+ margin-top: 0
575
+ }
576
+
577
+ dl {
578
+ padding: 0
579
+ }
580
+
581
+ dl dt {
582
+ font-size: 14px;
583
+ font-weight: bold;
584
+ font-style: italic;
585
+ padding: 0;
586
+ margin: 15px 0 5px
587
+ }
588
+
589
+ dl dt:first-child {
590
+ padding: 0
591
+ }
592
+
593
+ dl dt > :first-child {
594
+ margin-top: 0
595
+ }
596
+
597
+ dl dt > :last-child {
598
+ margin-bottom: 0
599
+ }
600
+
601
+ dl dd {
602
+ margin: 0 0 15px;
603
+ padding: 0 15px
604
+ }
605
+
606
+ dl dd > :first-child {
607
+ margin-top: 0
608
+ }
609
+
610
+ dl dd > :last-child {
611
+ margin-bottom: 0
612
+ }
613
+
614
+ blockquote {
615
+ border-left: 4px solid #DDD;
616
+ padding: 0 15px;
617
+ color: #777
618
+ }
619
+
620
+ blockquote > :first-child {
621
+ margin-top: 0
622
+ }
623
+
624
+ blockquote > :last-child {
625
+ margin-bottom: 0
626
+ }
627
+
628
+ table {
629
+ border-collapse: collapse;
630
+ border-spacing: 0;
631
+ font-size: 100%;
632
+ font: inherit
633
+ }
634
+
635
+ table th {
636
+ font-weight: bold;
637
+ border: 1px solid #ccc;
638
+ padding: 6px 13px
639
+ }
640
+
641
+ table td {
642
+ border: 1px solid #ccc;
643
+ padding: 6px 13px
644
+ }
645
+
646
+ table tr {
647
+ border-top: 1px solid #ccc;
648
+ background-color: #fff
649
+ }
650
+
651
+ table tr:nth-child(2n) {
652
+ background-color: #f8f8f8
653
+ }
654
+
655
+ img {
656
+ max-width: 100%
657
+ }
658
+
659
+ code, tt {
660
+ margin: 0 2px;
661
+ padding: 0 5px;
662
+ white-space: nowrap;
663
+ border: 1px solid #eaeaea;
664
+ background-color: #f8f8f8;
665
+ border-radius: 3px;
666
+ font-family: Consolas, 'Liberation Mono', Courier, monospace;
667
+ font-size: 12px;
668
+ color: #333
669
+ }
670
+
671
+ pre > code {
672
+ margin: 0;
673
+ padding: 0;
674
+ white-space: pre;
675
+ border: 0;
676
+ background: transparent
677
+ }
678
+
679
+ .highlight pre {
680
+ background-color: #f8f8f8;
681
+ border: 1px solid #ccc;
682
+ font-size: 13px;
683
+ line-height: 19px;
684
+ overflow: auto;
685
+ padding: 6px 10px;
686
+ border-radius: 3px
687
+ }
688
+
689
+ pre {
690
+ background-color: #f8f8f8;
691
+ border: 1px solid #ccc;
692
+ font-size: 13px;
693
+ line-height: 19px;
694
+ overflow: auto;
695
+ padding: 6px 10px;
696
+ border-radius: 3px
697
+ }
698
+
699
+ pre code, pre tt {
700
+ background-color: transparent;
701
+ border: 0
702
+ }
703
+
704
+ .poetry pre {
705
+ font-family: Georgia, Garamond, serif !important;
706
+ font-style: italic;
707
+ font-size: 110% !important;
708
+ line-height: 1.6em;
709
+ display: block;
710
+ margin-left: 1em
711
+ }
712
+
713
+ .poetry pre code {
714
+ font-family: Georgia, Garamond, serif !important;
715
+ word-break: break-all;
716
+ word-break: break-word;
717
+ -webkit-hyphens: auto;
718
+ -moz-hyphens: auto;
719
+ hyphens: auto;
720
+ white-space: pre-wrap
721
+ }
722
+
723
+ sup, sub, a.footnote {
724
+ font-size: 1.4ex;
725
+ height: 0;
726
+ line-height: 1;
727
+ vertical-align: super;
728
+ position: relative
729
+ }
730
+
731
+ sub {
732
+ vertical-align: sub;
733
+ top: -1px
734
+ }
735
+
736
+ @media print {
737
+ body {
738
+ background: #fff
739
+ }
740
+
741
+ img, pre, blockquote, table, figure {
742
+ page-break-inside: avoid
743
+ }
744
+
745
+ body {
746
+ background: #fff;
747
+ border: 0
748
+ }
749
+
750
+ code {
751
+ background-color: #fff;
752
+ color: #333 !important;
753
+ padding: 0 .2em;
754
+ border: 1px solid #dedede
755
+ }
756
+
757
+ pre {
758
+ background: #fff
759
+ }
760
+
761
+ pre code {
762
+ background-color: white !important;
763
+ overflow: visible
764
+ }
765
+ }
766
+
767
+ @media screen {
768
+ body.inverted {
769
+ color: #eee !important;
770
+ border-color: #555;
771
+ box-shadow: none
772
+ }
773
+
774
+ .inverted body, .inverted hr .inverted p, .inverted td, .inverted li, .inverted h1, .inverted h2, .inverted h3, .inverted h4, .inverted h5, .inverted h6, .inverted th, .inverted .math, .inverted caption, .inverted dd, .inverted dt, .inverted blockquote {
775
+ color: #eee !important;
776
+ border-color: #555;
777
+ box-shadow: none
778
+ }
779
+
780
+ .inverted td, .inverted th {
781
+ background: #333
782
+ }
783
+
784
+ .inverted h2 {
785
+ border-color: #555
786
+ }
787
+
788
+ .inverted hr {
789
+ border-color: #777;
790
+ border-width: 1px !important
791
+ }
792
+
793
+ ::selection {
794
+ background: rgba(157, 193, 200, 0.5)
795
+ }
796
+
797
+ h1::selection {
798
+ background-color: rgba(45, 156, 208, 0.3)
799
+ }
800
+
801
+ h2::selection {
802
+ background-color: rgba(90, 182, 224, 0.3)
803
+ }
804
+
805
+ h3::selection, h4::selection, h5::selection, h6::selection, li::selection, ol::selection {
806
+ background-color: rgba(133, 201, 232, 0.3)
807
+ }
808
+
809
+ code::selection {
810
+ background-color: rgba(0, 0, 0, 0.7);
811
+ color: #eee
812
+ }
813
+
814
+ code span::selection {
815
+ background-color: rgba(0, 0, 0, 0.7) !important;
816
+ color: #eee !important
817
+ }
818
+
819
+ a::selection {
820
+ background-color: rgba(255, 230, 102, 0.2)
821
+ }
822
+
823
+ .inverted a::selection {
824
+ background-color: rgba(255, 230, 102, 0.6)
825
+ }
826
+
827
+ td::selection, th::selection, caption::selection {
828
+ background-color: rgba(180, 237, 95, 0.5)
829
+ }
830
+
831
+ .inverted {
832
+ background: #0b2531;
833
+ background: #252a2a
834
+ }
835
+
836
+ .inverted body {
837
+ background: #252a2a
838
+ }
839
+
840
+ .inverted a {
841
+ color: #acd1d5
842
+ }
843
+ }
844
+
845
+ .highlight .c {
846
+ color: #998;
847
+ font-style: italic
848
+ }
849
+
850
+ .highlight .err {
851
+ color: #a61717;
852
+ background-color: #e3d2d2
853
+ }
854
+
855
+ .highlight .k, .highlight .o {
856
+ font-weight: bold
857
+ }
858
+
859
+ .highlight .cm {
860
+ color: #998;
861
+ font-style: italic
862
+ }
863
+
864
+ .highlight .cp {
865
+ color: #999;
866
+ font-weight: bold
867
+ }
868
+
869
+ .highlight .c1 {
870
+ color: #998;
871
+ font-style: italic
872
+ }
873
+
874
+ .highlight .cs {
875
+ color: #999;
876
+ font-weight: bold;
877
+ font-style: italic
878
+ }
879
+
880
+ .highlight .gd {
881
+ color: #000;
882
+ background-color: #fdd
883
+ }
884
+
885
+ .highlight .gd .x {
886
+ color: #000;
887
+ background-color: #faa
888
+ }
889
+
890
+ .highlight .ge {
891
+ font-style: italic
892
+ }
893
+
894
+ .highlight .gr {
895
+ color: #a00
896
+ }
897
+
898
+ .highlight .gh {
899
+ color: #999
900
+ }
901
+
902
+ .highlight .gi {
903
+ color: #000;
904
+ background-color: #dfd
905
+ }
906
+
907
+ .highlight .gi .x {
908
+ color: #000;
909
+ background-color: #afa
910
+ }
911
+
912
+ .highlight .go {
913
+ color: #888
914
+ }
915
+
916
+ .highlight .gp {
917
+ color: #555
918
+ }
919
+
920
+ .highlight .gs {
921
+ font-weight: bold
922
+ }
923
+
924
+ .highlight .gu {
925
+ color: #800080;
926
+ font-weight: bold
927
+ }
928
+
929
+ .highlight .gt {
930
+ color: #a00
931
+ }
932
+
933
+ .highlight .kc, .highlight .kd, .highlight .kn, .highlight .kp, .highlight .kr {
934
+ font-weight: bold
935
+ }
936
+
937
+ .highlight .kt {
938
+ color: #458;
939
+ font-weight: bold
940
+ }
941
+
942
+ .highlight .m {
943
+ color: #099
944
+ }
945
+
946
+ .highlight .s {
947
+ color: #d14
948
+ }
949
+
950
+ .highlight .na {
951
+ color: #008080
952
+ }
953
+
954
+ .highlight .nb {
955
+ color: #0086b3
956
+ }
957
+
958
+ .highlight .nc {
959
+ color: #458;
960
+ font-weight: bold
961
+ }
962
+
963
+ .highlight .no {
964
+ color: #008080
965
+ }
966
+
967
+ .highlight .ni {
968
+ color: #800080
969
+ }
970
+
971
+ .highlight .ne, .highlight .nf {
972
+ color: #900;
973
+ font-weight: bold
974
+ }
975
+
976
+ .highlight .nn {
977
+ color: #555
978
+ }
979
+
980
+ .highlight .nt {
981
+ color: #000080
982
+ }
983
+
984
+ .highlight .nv {
985
+ color: #008080
986
+ }
987
+
988
+ .highlight .ow {
989
+ font-weight: bold
990
+ }
991
+
992
+ .highlight .w {
993
+ color: #bbb
994
+ }
995
+
996
+ .highlight .mf, .highlight .mh, .highlight .mi, .highlight .mo {
997
+ color: #099
998
+ }
999
+
1000
+ .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx {
1001
+ color: #d14
1002
+ }
1003
+
1004
+ .highlight .sr {
1005
+ color: #009926
1006
+ }
1007
+
1008
+ .highlight .s1 {
1009
+ color: #d14
1010
+ }
1011
+
1012
+ .highlight .ss {
1013
+ color: #990073
1014
+ }
1015
+
1016
+ .highlight .bp {
1017
+ color: #999
1018
+ }
1019
+
1020
+ .highlight .vc, .highlight .vg, .highlight .vi {
1021
+ color: #008080
1022
+ }
1023
+
1024
+ .highlight .il {
1025
+ color: #099
1026
+ }
1027
+
1028
+ .highlight .gc {
1029
+ color: #999;
1030
+ background-color: #eaf2f5
1031
+ }
1032
+
1033
+ .type-csharp .highlight .k, .type-csharp .highlight .kt {
1034
+ color: #00F
1035
+ }
1036
+
1037
+ .type-csharp .highlight .nf {
1038
+ color: #000;
1039
+ font-weight: normal
1040
+ }
1041
+
1042
+ .type-csharp .highlight .nc {
1043
+ color: #2b91af
1044
+ }
1045
+
1046
+ .type-csharp .highlight .nn {
1047
+ color: #000
1048
+ }
1049
+
1050
+ .type-csharp .highlight .s, .type-csharp .highlight .sc {
1051
+ color: #a31515
1052
+ }