writeup 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f61cb4a6e61dff473b751744d318add8666da732
4
+ data.tar.gz: 404d8d67badbde25e7d096afdcd95aa3b3788d1c
5
+ SHA512:
6
+ metadata.gz: 972168bf412278b894fd0de22fe778403ecd9d796b8f5065d1117c1336c75f625de930b77d3fd2e137b7fe5b159c3615718db6b4db2a115c5f35a902430ba5cb
7
+ data.tar.gz: 40206d6853c723fddc5c87a062401cfe8f6bcedd461a5481f3893c910eba3d8a46f14aba220d4d22c4deae71434223a9862871b2caa9f22f319f3ed5ef8bc000
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "writeup"
4
+
5
+ markup = File.read(ARGV[0])
6
+ Writeup.render(markup, ARGV[1])
@@ -0,0 +1,25 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title><%= @document.title %></title>
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link href="//fonts.googleapis.com/css?family=Source+Code+Pro:400,700|Alegreya:400italic,700italic,400,700" rel="stylesheet">
7
+ <link rel="stylesheet" type="text/css" href="writeup.css" media="all">
8
+ </head>
9
+
10
+ <body class="no-literate">
11
+ <div id="container">
12
+ <div id="nav">
13
+ <div id="header">
14
+ <span id="logo"><%= @document.title %></span>
15
+ </div>
16
+ <div id="sections" class="section">
17
+ <%= @document.toc %>
18
+ </div>
19
+ </div>
20
+ <div id="content">
21
+ <%= @document.html %>
22
+ </div>
23
+ </div>
24
+ </body>
25
+ </html>
@@ -0,0 +1,24 @@
1
+ require "pygments.rb"
2
+ require "html/pipeline"
3
+ require "task_list/filter"
4
+ require "erb"
5
+
6
+ module Writeup
7
+ def self.render(markup, destination)
8
+ raise "destination must end in .html" unless destination =~ /\.html$/
9
+
10
+ @document = Writeup::Document.new(markup)
11
+ result = template.result(binding)
12
+ destination_dir = File.dirname(destination)
13
+ stylesheet_path = "#{File.dirname(__FILE__)}/../stylesheets/compiled/writeup.css"
14
+
15
+ File.open(destination, "w") { |f| f.puts(result) }
16
+ `cp "#{stylesheet_path}" "#{destination_dir}/writeup.css"`
17
+ end
18
+
19
+ def self.template
20
+ ERB.new(File.read("#{File.dirname(__FILE__)}/../layout/template.html.erb"))
21
+ end
22
+ end
23
+
24
+ Dir["#{File.dirname(__FILE__)}/writeup/**/*.rb"].each { |f| require f }
@@ -0,0 +1,44 @@
1
+ class Writeup::Document
2
+ attr_accessor :markdown
3
+
4
+ def initialize(markdown)
5
+ self.markdown = markdown
6
+ end
7
+
8
+ def html
9
+ parsed[:output]
10
+ end
11
+
12
+ def toc
13
+ parsed[:toc]
14
+ end
15
+
16
+ def title
17
+ parsed[:title]
18
+ end
19
+
20
+ private
21
+
22
+ def parsed
23
+ @parsed ||= html_pipeline.call(markdown)
24
+ end
25
+
26
+ def html_pipeline
27
+ @pipeline ||= HTML::Pipeline.new [
28
+ HTML::Pipeline::MarkdownFilter,
29
+ TaskList::Filter,
30
+ HTML::Pipeline::SanitizationFilter,
31
+ Writeup::Filters::TableOfContents,
32
+ Writeup::Filters::Title,
33
+ HTML::Pipeline::ImageMaxWidthFilter,
34
+ HTML::Pipeline::SyntaxHighlightFilter,
35
+ HTML::Pipeline::EmojiFilter,
36
+ HTML::Pipeline::AbsoluteSourceFilter,
37
+ Writeup::Filters::AbsoluteLinks,
38
+ HTML::Pipeline::MentionFilter,
39
+ HTML::Pipeline::AutolinkFilter
40
+ ], {
41
+ asset_root: "https://assets-cdn.github.com/images/icons",
42
+ }
43
+ end
44
+ end
@@ -0,0 +1,21 @@
1
+ require "uri"
2
+
3
+ module Writeup::Filters
4
+ class AbsoluteLinks < HTML::Pipeline::Filter
5
+ def call
6
+ doc.search("a").each do |element|
7
+ href = (element['href'] || '').strip
8
+ next if href.nil? || href.blank?
9
+ unless href.start_with?('http') || href.start_with?('//') || href.start_with?('#')
10
+ element['href'] = URI.join(link_subpage_url, href).to_s
11
+ end
12
+ end
13
+ doc
14
+ end
15
+
16
+ # Private: the relative url you want to use
17
+ def link_subpage_url
18
+ context[:link_subpage_url] or raise "Missing context :link_subpage_url for #{self.class.name}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module Writeup::Filters
2
+ class TableOfContents < HTML::Pipeline::Filter
3
+ PUNCTUATION_REGEXP = RUBY_VERSION > "1.9" ? /[^\p{Word}\- ]/u : /[^\w\- ]/
4
+
5
+ def call
6
+ result[:toc] = ""
7
+
8
+ headers = Hash.new(0)
9
+ doc.css('h2, h3').each do |node|
10
+ text = node.text
11
+ id = text.downcase
12
+ id.gsub!(PUNCTUATION_REGEXP, '') # remove punctuation
13
+ id.gsub!(' ', '-') # replace spaces with dash
14
+
15
+ uniq = (headers[id] > 0) ? "-#{headers[id]}" : ''
16
+ headers[id] += 1
17
+ if header_content = node.children.first
18
+ result[:toc] << %Q{<li class="#{node.name}"><a href="##{id}#{uniq}">#{text}</a></li>\n}
19
+ header_content.add_previous_sibling(%Q{<a id="#{id}#{uniq}" class="anchor" href="##{id}#{uniq}" aria-hidden="true"><span class="octicon octicon-link"></span></a>})
20
+ end
21
+ end
22
+ result[:toc] = %Q{<ul class="section-nav">\n#{result[:toc]}</ul>} unless result[:toc].empty?
23
+ doc
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ module Writeup::Filters
2
+ class Title < HTML::Pipeline::Filter
3
+ def call
4
+ h1 = doc.css("h1").first
5
+ result[:title] = h1 ? h1.text : "Untitled"
6
+ doc
7
+ end
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.highlight .hll{background-color:#d6d6d6}.highlight{background:#fff;color:#4d4d4c}.highlight .c{color:#8e908c}.highlight .err{color:#c82829}.highlight .k{color:#8959a8}.highlight .l{color:#f5871f}.highlight .n{color:#4d4d4c}.highlight .o{color:#3e999f}.highlight .p{color:#4d4d4c}.highlight .cm{color:#8e908c}.highlight .cp{color:#8e908c}.highlight .c1{color:#8e908c}.highlight .cs{color:#8e908c}.highlight .gd{color:#c82829}.highlight .ge{font-style:italic}.highlight .gh{color:#4d4d4c;font-weight:bold}.highlight .gi{color:#718c00}.highlight .gp{color:#8e908c;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#3e999f;font-weight:bold}.highlight .kc{color:#8959a8}.highlight .kd{color:#8959a8}.highlight .kn{color:#3e999f}.highlight .kp{color:#8959a8}.highlight .kr{color:#8959a8}.highlight .kt{color:#eab700}.highlight .ld{color:#718c00}.highlight .m{color:#f5871f}.highlight .s{color:#718c00}.highlight .na{color:#4271ae}.highlight .nb{color:#4d4d4c}.highlight .nc{color:#eab700}.highlight .no{color:#c82829}.highlight .nd{color:#3e999f}.highlight .ni{color:#4d4d4c}.highlight .ne{color:#c82829}.highlight .nf{color:#4271ae}.highlight .nl{color:#4d4d4c}.highlight .nn{color:#eab700}.highlight .nx{color:#4271ae}.highlight .py{color:#4d4d4c}.highlight .nt{color:#3e999f}.highlight .nv{color:#c82829}.highlight .ow{color:#3e999f}.highlight .w{color:#4d4d4c}.highlight .mf{color:#f5871f}.highlight .mh{color:#f5871f}.highlight .mi{color:#f5871f}.highlight .mo{color:#f5871f}.highlight .sb{color:#718c00}.highlight .sc{color:#4d4d4c}.highlight .sd{color:#8e908c}.highlight .s2{color:#718c00}.highlight .se{color:#f5871f}.highlight .sh{color:#718c00}.highlight .si{color:#f5871f}.highlight .sx{color:#718c00}.highlight .sr{color:#718c00}.highlight .s1{color:#718c00}.highlight .ss{color:#718c00}.highlight .bp{color:#4d4d4c}.highlight .vc{color:#c82829}.highlight .vg{color:#c82829}.highlight .vi{color:#c82829}.highlight .il{color:#f5871f}html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}table{border-collapse:separate;border-spacing:0}caption,th,td{text-align:left;font-weight:normal}table,td,th{vertical-align:middle}blockquote:before,blockquote:after,q:before,q:after{content:""}blockquote,q{quotes:"" ""}a img{border:0}body{margin:10px}html{height:100%}body{padding:0;margin:0;font:16px/24px "Alegreya",serif;font-size-adjust:none;font-style:normal;font-variant:normal;font-weight:normal;background:#f4f6ec}a{color:#369}#container{width:922px;margin:0 auto}#header{border-bottom:1px solid rgba(0,0,0,0.1);padding-bottom:10px;margin-bottom:10px}#header #logo{color:#111;font-size:25px;font-weight:bold;padding:10px 0;text-decoration:none}#nav{float:left;width:230px;margin-right:30px;margin-top:40px}#nav a{display:block;font-weight:bold;text-decoration:none}#nav #sections>ul{list-style-type:none;padding-bottom:10px;margin-bottom:10px}#nav #sections>ul li a{padding:3px 0;color:#444;font-size:16px}#nav #sections>ul li.h2{margin-top:.5em}#nav #sections>ul li.h3{list-style-type:none}#nav #sections>ul li.h3 a{padding:1px 15px;font-size:13px;color:#369;font-weight:normal}#nav .extra{padding:5px 0;min-height:1.4em}#nav .extra a{color:#555;font-size:14px}#nav #travis img{margin-top:10px;display:block}#nav>*:last-child{margin-bottom:20px}#content{padding:30px 30px 20px 30px;min-height:100px;width:600px;background:#fff;float:left;border:1px solid rgba(0,0,0,0.2);border-radius:3px 3px 0 0;margin-top:15px}#content #loader{color:#888;width:300px;height:24px;line-height:24px;position:absolute;top:30px;left:30px;background:url(data:image/gif;base64,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) no-repeat center left;padding-left:32px;font-size:18px}#content>p:after{content:"";display:table;clear:both}#content p{padding:0 0 .8125em 0;color:#444}#content p img{margin:.5em .8125em .8125em 0;padding:0}#content img{max-width:100%}#content h1,#content h2,#content h3,#content h4,#content h5,#content h6{font-weight:bold;line-height:1.2em}#content h1{font-size:2.125em;margin-bottom:.4em}#content h2{font-size:1.7em;margin:.855em 0 .4em;color:#cc333f}#content h3{font-size:1.3em;margin:.956em 0 .4em}#content h4{font-size:1.1em;margin:1.161em 0 .4em}#content h5,#content h6{font-size:1em;font-weight:bold;margin:1.238em 0 .4em}#content>h1,#content>h2{margin-top:0}#content ul{list-style-position:outside}#content li ul,#content li ol{margin:0 1.625em}#content ul,#content ol{margin:0 0 1.625em 1.25em}#content dl{margin:0 0 1.625em 0}#content dl dt{font-weight:bold}#content dl dd{margin-left:1.625em}#content a{text-decoration:none}#content a:hover{text-decoration:underline}#content table{margin-bottom:1.625em;border-collapse:collapse}#content th{font-weight:bold}#content tr,#content th,#content td{margin:0;padding:0 1.625em 0 1em;height:26px}#content tfoot{font-style:italic}#content caption{text-align:center;font-family:Georgia,serif}#content abbr,#content acronym{border-bottom:1px dotted #000}#content address{margin-top:1.625em;font-style:italic}#content del{color:#000}#content blockquote{padding:1em 1em 1.625em 1em;font-family:georgia,serif;font-style:italic}#content blockquote:before{content:"“";font-size:3em;margin-left:-0.625em;font-family:georgia,serif;color:#aaa;line-height:0}#content blockquote>p{padding:0;margin:0}#content strong{font-weight:bold}#content em,#content dfn{font-style:italic}#content dfn{font-weight:bold}#content pre,#content code{margin:0 0 1.625em;white-space:pre}#content pre,#content code,#content tt{font-family:"Source Code Pro",monospace;line-height:1.5}#content code{font-size:.8em;background:#f7f8f1;padding:1px 2px;border:1px solid #ccc}#content pre{font-size:.8em;background:#f7f8f1;border:1px solid #ccc;padding:10px 12px;word-wrap:normal;overflow-y:auto}#content tt{display:block;margin:1.625em 0}#content hr{margin-bottom:1.625em}#content table{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;width:100%}#content th,#content td{padding:5px 10px;border:1px solid #ccc}#content th{background:#eee;padding:7px 10px}#content td{font-size:.9em;border-color:#ddd}#content tbody tr:nth-child(2n){background:#f5f5f5}@media only screen and (max-width:480px){#container{width:100%}#nav{width:100%;margin-top:10px;float:none}#nav #sections,#nav #header,#nav .extra{padding-left:30px;padding-right:30px}#content{border-radius:0;border-width:1px;float:none;margin:0;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}}.error .header{width:240px;margin:100px auto 0}.error .header img{width:100%}.error-message{width:300px;padding:30px;margin:10px auto 0;text-align:center;background:#fff;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #ccc}.error-message p{margin-bottom:10px}h1{font-size:24px;margin:0 0 20px;font-weight:bold}
@@ -0,0 +1,357 @@
1
+ @import "tomorrow";
2
+ @import "base";
3
+
4
+ // Layout
5
+
6
+ #container {
7
+ width: 922px;
8
+ margin: 0 auto;
9
+ }
10
+
11
+ #header {
12
+ border-bottom: 1px solid rgba(black, 0.1);
13
+ padding-bottom: 10px;
14
+ margin-bottom: 10px;
15
+ #logo {
16
+ color: #111;
17
+ font-size: 25px;
18
+ font-weight: bold;
19
+ padding: 10px 0;
20
+ text-decoration: none;
21
+ }
22
+ }
23
+
24
+ #nav {
25
+ float: left;
26
+ width: 230px;
27
+ margin-right: 30px;
28
+ margin-top: 40px;
29
+ a {
30
+ display: block;
31
+ font-weight: bold;
32
+ text-decoration: none;
33
+ }
34
+ #sections > ul {
35
+ list-style-type: none;
36
+ padding-bottom: 10px;
37
+ margin-bottom: 10px;
38
+ li {
39
+ a {
40
+ padding: 3px 0;
41
+ color: #444;
42
+ font-size: 16px;
43
+ }
44
+ }
45
+ li.h2 {
46
+ margin-top: 0.5em;
47
+ }
48
+ li.h3 {
49
+ list-style-type: none;
50
+ a {
51
+ padding: 1px 15px;
52
+ font-size: 13px;
53
+ color: #369;
54
+ font-weight: normal;
55
+ }
56
+ }
57
+ }
58
+ .extra {
59
+ padding: 5px 0;
60
+ min-height: 1.4em;
61
+ a {
62
+ color: #555;
63
+ font-size: 14px;
64
+ }
65
+ }
66
+ #travis {
67
+ img {
68
+ margin-top: 10px;
69
+ display: block;
70
+ }
71
+ }
72
+
73
+ > *:last-child {
74
+ margin-bottom: 20px;
75
+ }
76
+ }
77
+
78
+ #content {
79
+ padding: 30px 30px 20px 30px;
80
+ min-height: 100px;
81
+ width: 600px;
82
+ background: #fff;
83
+ float: left;
84
+ border: 1px solid rgba(black, 0.2);
85
+ border-radius: 3px 3px 0 0;
86
+ margin-top: 15px;
87
+
88
+ #loader {
89
+ color: #888;
90
+ width: 300px;
91
+ height: 24px;
92
+ line-height: 24px;
93
+ position: absolute;
94
+ top: 30px;
95
+ left: 30px;
96
+ background: url(unquote(
97
+ "data:image/gif;base64,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"
98
+ ))
99
+ no-repeat center left;
100
+ padding-left: 32px;
101
+ font-size: 18px;
102
+ }
103
+
104
+ > p {
105
+ @include clearfix;
106
+ }
107
+ p {
108
+ padding: 0 0 0.8125em 0;
109
+ color: #444;
110
+ }
111
+
112
+ p img {
113
+ margin: 0.5em 0.8125em 0.8125em 0;
114
+ padding: 0;
115
+ }
116
+ img {
117
+ max-width: 100%;
118
+ }
119
+
120
+ h1,
121
+ h2,
122
+ h3,
123
+ h4,
124
+ h5,
125
+ h6 {
126
+ font-weight: bold;
127
+ line-height: 1.2em;
128
+ }
129
+
130
+ h1 {
131
+ font-size: 2.125em;
132
+ margin-bottom: 0.4em;
133
+ }
134
+ h2 {
135
+ font-size: 1.7em;
136
+ margin: 0.855em 0 0.4em;
137
+ color: #cc333f;
138
+ }
139
+ h3 {
140
+ font-size: 1.3em;
141
+ margin: 0.956em 0 0.4em;
142
+ }
143
+ h4 {
144
+ font-size: 1.1em;
145
+ margin: 1.161em 0 0.4em;
146
+ }
147
+ h5,
148
+ h6 {
149
+ font-size: 1em;
150
+ font-weight: bold;
151
+ margin: 1.238em 0 0.4em;
152
+ }
153
+
154
+ > h1,
155
+ > h2 {
156
+ margin-top: 0;
157
+ }
158
+
159
+ ul {
160
+ list-style-position: outside;
161
+ }
162
+ li ul,
163
+ li ol {
164
+ margin: 0 1.625em;
165
+ }
166
+ ul,
167
+ ol {
168
+ margin: 0 0 1.625em 1.25em;
169
+ }
170
+
171
+ dl {
172
+ margin: 0 0 1.625em 0;
173
+ }
174
+ dl dt {
175
+ font-weight: bold;
176
+ }
177
+ dl dd {
178
+ margin-left: 1.625em;
179
+ }
180
+
181
+ a {
182
+ text-decoration: none;
183
+ }
184
+ a:hover {
185
+ text-decoration: underline;
186
+ }
187
+
188
+ table {
189
+ margin-bottom: 1.625em;
190
+ border-collapse: collapse;
191
+ }
192
+ th {
193
+ font-weight: bold;
194
+ }
195
+ tr,
196
+ th,
197
+ td {
198
+ margin: 0;
199
+ padding: 0 1.625em 0 1em;
200
+ height: 26px;
201
+ }
202
+ tfoot {
203
+ font-style: italic;
204
+ }
205
+ caption {
206
+ text-align: center;
207
+ font-family: Georgia, serif;
208
+ }
209
+
210
+ abbr,
211
+ acronym {
212
+ border-bottom: 1px dotted #000;
213
+ }
214
+ address {
215
+ margin-top: 1.625em;
216
+ font-style: italic;
217
+ }
218
+ del {
219
+ color: #000;
220
+ }
221
+
222
+ blockquote {
223
+ padding: 1em 1em 1.625em 1em;
224
+ font-family: georgia, serif;
225
+ font-style: italic;
226
+ }
227
+ blockquote:before {
228
+ content: "\201C";
229
+ font-size: 3em;
230
+ margin-left: -0.625em;
231
+ font-family: georgia, serif;
232
+ color: #aaa;
233
+ line-height: 0;
234
+ } /* From Tripoli */
235
+ blockquote > p {
236
+ padding: 0;
237
+ margin: 0;
238
+ }
239
+
240
+ strong {
241
+ font-weight: bold;
242
+ }
243
+ em,
244
+ dfn {
245
+ font-style: italic;
246
+ }
247
+ dfn {
248
+ font-weight: bold;
249
+ }
250
+ pre,
251
+ code {
252
+ margin: 0 0 1.625em;
253
+ white-space: pre;
254
+ }
255
+ pre,
256
+ code,
257
+ tt {
258
+ font-family: "Source Code Pro", monospace;
259
+ line-height: 1.5;
260
+ }
261
+ code {
262
+ font-size: 0.8em;
263
+ background: #f7f8f1;
264
+ padding: 1px 2px;
265
+ border: 1px solid #cccccc;
266
+ }
267
+ pre {
268
+ font-size: 0.8em;
269
+ background: #f7f8f1;
270
+ border: 1px solid #cccccc;
271
+ padding: 10px 12px;
272
+ word-wrap: normal;
273
+ overflow-y: auto;
274
+ }
275
+ tt {
276
+ display: block;
277
+ margin: 1.625em 0;
278
+ }
279
+ hr {
280
+ margin-bottom: 1.625em;
281
+ }
282
+
283
+ table {
284
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
285
+ width: 100%;
286
+ }
287
+ th,
288
+ td {
289
+ padding: 5px 10px;
290
+ border: 1px solid #ccc;
291
+ }
292
+ th {
293
+ background: #eee;
294
+ padding: 7px 10px;
295
+ }
296
+ td {
297
+ font-size: 0.9em;
298
+ border-color: #ddd;
299
+ }
300
+ tbody tr:nth-child(2n) {
301
+ background: #f5f5f5;
302
+ }
303
+ }
304
+
305
+ @media only screen and (max-width: 480px) {
306
+ #container {
307
+ width: 100%;
308
+ }
309
+ #nav {
310
+ width: 100%;
311
+ margin-top: 10px;
312
+ float: none;
313
+ #sections,
314
+ #header,
315
+ .extra {
316
+ padding-left: 30px;
317
+ padding-right: 30px;
318
+ }
319
+ }
320
+ #content {
321
+ border-radius: 0;
322
+ border-width: 1px;
323
+ float: none;
324
+ margin: 0;
325
+ width: 100%;
326
+ -moz-box-sizing: border-box;
327
+ -webkit-box-sizing: border-box;
328
+ box-sizing: border-box;
329
+ }
330
+ }
331
+
332
+ .error .header {
333
+ width: 240px;
334
+ margin: 100px auto 0;
335
+ }
336
+ .error .header img {
337
+ width: 100%;
338
+ }
339
+ .error-message {
340
+ width: 300px;
341
+ padding: 30px;
342
+ margin: 10px auto 0;
343
+ text-align: center;
344
+ background: #fff;
345
+ -webkit-border-radius: 3px;
346
+ -moz-border-radius: 3px;
347
+ border-radius: 3px;
348
+ border: 1px solid #ccc;
349
+ }
350
+ .error-message p {
351
+ margin-bottom: 10px;
352
+ }
353
+ h1 {
354
+ font-size: 24px;
355
+ margin: 0 0 20px;
356
+ font-weight: bold;
357
+ }
@@ -0,0 +1,40 @@
1
+ @import "normalize";
2
+
3
+ html {
4
+ height: 100%;
5
+ }
6
+
7
+ body {
8
+ padding: 0;
9
+ margin: 0;
10
+ font: 16px/24px "Alegreya", serif;
11
+ font-size-adjust: none;
12
+ font-style: normal;
13
+ font-variant: normal;
14
+ font-weight: normal;
15
+ background: #f4f6ec;
16
+ }
17
+
18
+ a {
19
+ color: #369;
20
+ }
21
+
22
+ @mixin inline-block() {
23
+ display: -moz-inline-box;
24
+ -moz-box-orient: vertical;
25
+ display: inline-block;
26
+ vertical-align: top;
27
+ if support-for-ie {
28
+ & {
29
+ *display: inline;
30
+ }
31
+ }
32
+ }
33
+
34
+ @mixin clearfix {
35
+ &:after {
36
+ content: "";
37
+ display: table;
38
+ clear: both;
39
+ }
40
+ }
@@ -0,0 +1,90 @@
1
+ html,
2
+ body,
3
+ div,
4
+ span,
5
+ object,
6
+ iframe,
7
+ h1,
8
+ h2,
9
+ h3,
10
+ h4,
11
+ h5,
12
+ h6,
13
+ p,
14
+ blockquote,
15
+ pre,
16
+ a,
17
+ abbr,
18
+ acronym,
19
+ address,
20
+ code,
21
+ del,
22
+ dfn,
23
+ em,
24
+ img,
25
+ q,
26
+ dl,
27
+ dt,
28
+ dd,
29
+ ol,
30
+ ul,
31
+ li,
32
+ fieldset,
33
+ form,
34
+ label,
35
+ legend,
36
+ table,
37
+ caption,
38
+ tbody,
39
+ tfoot,
40
+ thead,
41
+ tr,
42
+ th,
43
+ td {
44
+ margin: 0;
45
+ padding: 0;
46
+ border: 0;
47
+ font-weight: inherit;
48
+ font-style: inherit;
49
+ font-size: 100%;
50
+ font-family: inherit;
51
+ vertical-align: baseline;
52
+ }
53
+
54
+ /* Tables still need 'cellspacing="0"' in the markup. */
55
+ table {
56
+ border-collapse: separate;
57
+ border-spacing: 0;
58
+ }
59
+ caption,
60
+ th,
61
+ td {
62
+ text-align: left;
63
+ font-weight: normal;
64
+ }
65
+ table,
66
+ td,
67
+ th {
68
+ vertical-align: middle;
69
+ }
70
+
71
+ /* Remove possible quote marks (") from <q>, <blockquote>. */
72
+ blockquote:before,
73
+ blockquote:after,
74
+ q:before,
75
+ q:after {
76
+ content: "";
77
+ }
78
+ blockquote,
79
+ q {
80
+ quotes: "" "";
81
+ }
82
+
83
+ /* Remove annoying border on linked images. */
84
+ a img {
85
+ border: none;
86
+ }
87
+
88
+ body {
89
+ margin: 10px;
90
+ }
@@ -0,0 +1,199 @@
1
+ .highlight .hll {
2
+ background-color: #d6d6d6;
3
+ }
4
+ .highlight {
5
+ background: #ffffff;
6
+ color: #4d4d4c;
7
+ }
8
+ .highlight .c {
9
+ color: #8e908c;
10
+ } /* Comment */
11
+ .highlight .err {
12
+ color: #c82829;
13
+ } /* Error */
14
+ .highlight .k {
15
+ color: #8959a8;
16
+ } /* Keyword */
17
+ .highlight .l {
18
+ color: #f5871f;
19
+ } /* Literal */
20
+ .highlight .n {
21
+ color: #4d4d4c;
22
+ } /* Name */
23
+ .highlight .o {
24
+ color: #3e999f;
25
+ } /* Operator */
26
+ .highlight .p {
27
+ color: #4d4d4c;
28
+ } /* Punctuation */
29
+ .highlight .cm {
30
+ color: #8e908c;
31
+ } /* Comment.Multiline */
32
+ .highlight .cp {
33
+ color: #8e908c;
34
+ } /* Comment.Preproc */
35
+ .highlight .c1 {
36
+ color: #8e908c;
37
+ } /* Comment.Single */
38
+ .highlight .cs {
39
+ color: #8e908c;
40
+ } /* Comment.Special */
41
+ .highlight .gd {
42
+ color: #c82829;
43
+ } /* Generic.Deleted */
44
+ .highlight .ge {
45
+ font-style: italic;
46
+ } /* Generic.Emph */
47
+ .highlight .gh {
48
+ color: #4d4d4c;
49
+ font-weight: bold;
50
+ } /* Generic.Heading */
51
+ .highlight .gi {
52
+ color: #718c00;
53
+ } /* Generic.Inserted */
54
+ .highlight .gp {
55
+ color: #8e908c;
56
+ font-weight: bold;
57
+ } /* Generic.Prompt */
58
+ .highlight .gs {
59
+ font-weight: bold;
60
+ } /* Generic.Strong */
61
+ .highlight .gu {
62
+ color: #3e999f;
63
+ font-weight: bold;
64
+ } /* Generic.Subheading */
65
+ .highlight .kc {
66
+ color: #8959a8;
67
+ } /* Keyword.Constant */
68
+ .highlight .kd {
69
+ color: #8959a8;
70
+ } /* Keyword.Declaration */
71
+ .highlight .kn {
72
+ color: #3e999f;
73
+ } /* Keyword.Namespace */
74
+ .highlight .kp {
75
+ color: #8959a8;
76
+ } /* Keyword.Pseudo */
77
+ .highlight .kr {
78
+ color: #8959a8;
79
+ } /* Keyword.Reserved */
80
+ .highlight .kt {
81
+ color: #eab700;
82
+ } /* Keyword.Type */
83
+ .highlight .ld {
84
+ color: #718c00;
85
+ } /* Literal.Date */
86
+ .highlight .m {
87
+ color: #f5871f;
88
+ } /* Literal.Number */
89
+ .highlight .s {
90
+ color: #718c00;
91
+ } /* Literal.String */
92
+ .highlight .na {
93
+ color: #4271ae;
94
+ } /* Name.Attribute */
95
+ .highlight .nb {
96
+ color: #4d4d4c;
97
+ } /* Name.Builtin */
98
+ .highlight .nc {
99
+ color: #eab700;
100
+ } /* Name.Class */
101
+ .highlight .no {
102
+ color: #c82829;
103
+ } /* Name.Constant */
104
+ .highlight .nd {
105
+ color: #3e999f;
106
+ } /* Name.Decorator */
107
+ .highlight .ni {
108
+ color: #4d4d4c;
109
+ } /* Name.Entity */
110
+ .highlight .ne {
111
+ color: #c82829;
112
+ } /* Name.Exception */
113
+ .highlight .nf {
114
+ color: #4271ae;
115
+ } /* Name.Function */
116
+ .highlight .nl {
117
+ color: #4d4d4c;
118
+ } /* Name.Label */
119
+ .highlight .nn {
120
+ color: #eab700;
121
+ } /* Name.Namespace */
122
+ .highlight .nx {
123
+ color: #4271ae;
124
+ } /* Name.Other */
125
+ .highlight .py {
126
+ color: #4d4d4c;
127
+ } /* Name.Property */
128
+ .highlight .nt {
129
+ color: #3e999f;
130
+ } /* Name.Tag */
131
+ .highlight .nv {
132
+ color: #c82829;
133
+ } /* Name.Variable */
134
+ .highlight .ow {
135
+ color: #3e999f;
136
+ } /* Operator.Word */
137
+ .highlight .w {
138
+ color: #4d4d4c;
139
+ } /* Text.Whitespace */
140
+ .highlight .mf {
141
+ color: #f5871f;
142
+ } /* Literal.Number.Float */
143
+ .highlight .mh {
144
+ color: #f5871f;
145
+ } /* Literal.Number.Hex */
146
+ .highlight .mi {
147
+ color: #f5871f;
148
+ } /* Literal.Number.Integer */
149
+ .highlight .mo {
150
+ color: #f5871f;
151
+ } /* Literal.Number.Oct */
152
+ .highlight .sb {
153
+ color: #718c00;
154
+ } /* Literal.String.Backtick */
155
+ .highlight .sc {
156
+ color: #4d4d4c;
157
+ } /* Literal.String.Char */
158
+ .highlight .sd {
159
+ color: #8e908c;
160
+ } /* Literal.String.Doc */
161
+ .highlight .s2 {
162
+ color: #718c00;
163
+ } /* Literal.String.Double */
164
+ .highlight .se {
165
+ color: #f5871f;
166
+ } /* Literal.String.Escape */
167
+ .highlight .sh {
168
+ color: #718c00;
169
+ } /* Literal.String.Heredoc */
170
+ .highlight .si {
171
+ color: #f5871f;
172
+ } /* Literal.String.Interpol */
173
+ .highlight .sx {
174
+ color: #718c00;
175
+ } /* Literal.String.Other */
176
+ .highlight .sr {
177
+ color: #718c00;
178
+ } /* Literal.String.Regex */
179
+ .highlight .s1 {
180
+ color: #718c00;
181
+ } /* Literal.String.Single */
182
+ .highlight .ss {
183
+ color: #718c00;
184
+ } /* Literal.String.Symbol */
185
+ .highlight .bp {
186
+ color: #4d4d4c;
187
+ } /* Name.Builtin.Pseudo */
188
+ .highlight .vc {
189
+ color: #c82829;
190
+ } /* Name.Variable.Class */
191
+ .highlight .vg {
192
+ color: #c82829;
193
+ } /* Name.Variable.Global */
194
+ .highlight .vi {
195
+ color: #c82829;
196
+ } /* Name.Variable.Instance */
197
+ .highlight .il {
198
+ color: #f5871f;
199
+ } /* Literal.Number.Integer.Long */
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: writeup
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Joey Schoblaska
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-12-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pygments.rb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.6.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.6.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: html-pipeline
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: task_list
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rinku
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.7'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: gemoji
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: github-markdown
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.5'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sanitize
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '4.6'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '4.6'
139
+ - !ruby/object:Gem::Dependency
140
+ name: escape_utils
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: github-linguist
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '4.5'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '4.5'
167
+ - !ruby/object:Gem::Dependency
168
+ name: commonmarker
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.16'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.16'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rouge
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.1'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '3.1'
195
+ description:
196
+ email:
197
+ executables:
198
+ - writeup
199
+ extensions: []
200
+ extra_rdoc_files: []
201
+ files:
202
+ - bin/writeup
203
+ - layout/template.html.erb
204
+ - lib/writeup.rb
205
+ - lib/writeup/document.rb
206
+ - lib/writeup/filters/absolute_links.rb
207
+ - lib/writeup/filters/table_of_contents.rb
208
+ - lib/writeup/filters/title.rb
209
+ - stylesheets/compiled/writeup.css
210
+ - stylesheets/raw/application.scss
211
+ - stylesheets/raw/base.scss
212
+ - stylesheets/raw/normalize.scss
213
+ - stylesheets/raw/tomorrow.scss
214
+ homepage: https://github.com/joeyschoblaska/writeup
215
+ licenses:
216
+ - MIT
217
+ metadata: {}
218
+ post_install_message:
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubyforge_project:
234
+ rubygems_version: 2.6.14
235
+ signing_key:
236
+ specification_version: 4
237
+ summary: Generic components from jeromegn/DocumentUp for generating static HTML documentation
238
+ from Markdown.
239
+ test_files: []