dove 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/README.md +51 -0
- data/bin/dove +85 -0
- data/dove.gemspec +23 -0
- data/lib/dove.rb +47 -0
- data/lib/dove/layout.slim +12 -0
- data/lib/dove/rougify.rb +4 -0
- data/lib/dove/version.rb +3 -0
- data/styles.css +241 -0
- metadata +110 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c6f8473843077e47f14b0dd3b99a461c11bbf4d3
|
4
|
+
data.tar.gz: 288e3a6f703f956eded4111f08f546b40a575762
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b7f0f2d445dbd7c8691ee2f9b3f57af764dd770fe302ed7877d474aa0c27c45d342174045cd019109685cb41d2287370f608ae159dfc90f06a4f06a3a615f3a8
|
7
|
+
data.tar.gz: 019eab34d953bc0a7f279eb486216283f57bfcb23a5b4942c6dfe1258ab7983438c62f2feaafaa4170666832625543f8f8ed803f9959085fe01234ac039857dc
|
data/.gitignore
ADDED
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# Dove
|
2
|
+
|
3
|
+
Write single page HTML documents with ease.
|
4
|
+
|
5
|
+
I sometimes want to quickly draft documents in something other than LaTeX. I've realized
|
6
|
+
that in the 21^st century HTML pages can easily serve that same purpose DOC, ODT and PDF
|
7
|
+
files serve. Dove enables you to write your text in Markdown, then generate beautiful web
|
8
|
+
documents.
|
9
|
+
|
10
|
+
Example output can be seen [here](http://archseer.github.io/dove/).
|
11
|
+
|
12
|
+
## Note
|
13
|
+
|
14
|
+
I was really lazy and didn't want to bother converting Markdown into HTML, then inserting
|
15
|
+
it into a HTML layout and bothering with syntax highlighting, so I've searched for alternatives.
|
16
|
+
I've used Jekyll before, but for writing one-page documents I don't really need a full-blown
|
17
|
+
static website solution. I then I had found [rocco](https://github.com/rtomayko/rocco)
|
18
|
+
which is a code documentation generator, and I've used a bit of the code from it
|
19
|
+
to write Dove, a (web) document generator.
|
20
|
+
|
21
|
+
## About
|
22
|
+
|
23
|
+
Dove takes a Markdown file, converts it using [Redcarpet](https://github.com/vmg/redcarpet), syntax highlights
|
24
|
+
any code snippets inside using [Rouge](https://github.com/jayferd/rouge), then
|
25
|
+
it takes a layout file (I use [Slim](http://slim-lang.com/)) and uses [Tilt](https://github.com/rtomayko/tilt)
|
26
|
+
to render it, and insert the document into the template. It also detects and
|
27
|
+
extracts any YAML frontmatter and inserts it into the layout as variables!
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
Dove is meant to be used using it's binary file:
|
32
|
+
|
33
|
+
```
|
34
|
+
dove document.md
|
35
|
+
```
|
36
|
+
|
37
|
+
Glob patterns can also be used just as easily:
|
38
|
+
|
39
|
+
```
|
40
|
+
dove *.md README *.txt
|
41
|
+
```
|
42
|
+
|
43
|
+
But one can also require Dove inside a script, and make a new instance of it,
|
44
|
+
passing in the filename and options, then use the `render` method.
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
dove = Dove.new('document.md', template_file: 'doc_layout.slim')
|
48
|
+
dove.render
|
49
|
+
```
|
50
|
+
|
51
|
+
Note: The default layout requires `author` and `title` YAML frontmatter.
|
data/bin/dove
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#/ Usage: dove [-o <dir>] <file>...
|
3
|
+
#/ Generate web documents from Markdown <file>s. Glob patterns can be used.
|
4
|
+
#/
|
5
|
+
#/ Options:
|
6
|
+
#/ -t, --template=<path> Specify the file to use as template
|
7
|
+
#/ -w, --watch Watch for file changes and rebuild
|
8
|
+
#/ --help Show this help message
|
9
|
+
|
10
|
+
require 'optparse'
|
11
|
+
require 'fileutils'
|
12
|
+
require 'dove'
|
13
|
+
|
14
|
+
# Write usage message to stdout and exit.
|
15
|
+
def usage(stream=$stderr, status=1)
|
16
|
+
stream.puts File.readlines(__FILE__).
|
17
|
+
grep(/^#\//).
|
18
|
+
map { |line| line.sub(/^#. ?/, '') }.
|
19
|
+
join
|
20
|
+
exit status
|
21
|
+
end
|
22
|
+
|
23
|
+
# Like `Kernel#abort` but writes a note encouraging the user to consult
|
24
|
+
# `dove --help` for more information.
|
25
|
+
def abort_with_note(message=nil)
|
26
|
+
$stderr.puts message if message
|
27
|
+
abort "See `dove --help' for usage information."
|
28
|
+
end
|
29
|
+
|
30
|
+
# Generate the file and write it to output dir.
|
31
|
+
def build(filename, options)
|
32
|
+
dove = Dove.new(filename, options)
|
33
|
+
dest = "#{File.basename(filename, '.*')}.html"
|
34
|
+
dest = File.join(options[:output_dir], dest) if options[:output_dir] != '.'
|
35
|
+
puts "dove: #{Time.now.strftime("%Y-%m-%d %H:%M:%S")} #{filename} -> #{dest}"
|
36
|
+
FileUtils.mkdir_p File.dirname(dest)
|
37
|
+
File.open(dest, 'wb') { |fd| fd.write(dove.render) }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Parse command line options, aborting if anything goes wrong.
|
41
|
+
sources = []
|
42
|
+
options = {:output_dir => '.'}
|
43
|
+
ARGV.options { |o|
|
44
|
+
o.program_name = File.basename($0)
|
45
|
+
o.on("-o", "--output=DIR") { |dir| options[:output_dir] = dir }
|
46
|
+
o.on("-t", "--template=TEMPLATE") { |template| options[:template_file] = template }
|
47
|
+
o.on("-s", "--stylesheet=STYLESHEET") { |stylesheet| options[:stylesheet] = stylesheet }
|
48
|
+
o.on("-w", "--watch") { options[:watch] = true }
|
49
|
+
o.on_tail("-h", "--help") { usage($stdout, 0) }
|
50
|
+
o.parse!
|
51
|
+
} or abort_with_note
|
52
|
+
|
53
|
+
# Eat sources from ARGV.
|
54
|
+
sources.push(*Dir[ARGV.shift]) while ARGV.any?
|
55
|
+
|
56
|
+
# Make sure we have some files to work with.
|
57
|
+
if sources.empty?
|
58
|
+
abort_with_note "#{File.basename($0)}: no input <file>s given"
|
59
|
+
end
|
60
|
+
|
61
|
+
# Run each file through Dove and write output.
|
62
|
+
sources.each do |filename|
|
63
|
+
build(filename, options)
|
64
|
+
end
|
65
|
+
|
66
|
+
def watch(files, options)
|
67
|
+
require 'directory_watcher'
|
68
|
+
|
69
|
+
dw = DirectoryWatcher.new('.', glob: files, pre_load: true, interval: 1)
|
70
|
+
|
71
|
+
dw.add_observer do |*args|
|
72
|
+
args.each { |event| build(event.path, options) }
|
73
|
+
end
|
74
|
+
|
75
|
+
dw.start
|
76
|
+
|
77
|
+
trap("INT") do
|
78
|
+
puts "dove: flew away"
|
79
|
+
exit 0
|
80
|
+
end
|
81
|
+
loop { sleep 1000 }
|
82
|
+
end
|
83
|
+
|
84
|
+
# Start the watcher if the watch option was enabled.
|
85
|
+
watch(sources, options) if options[:watch]
|
data/dove.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
require "dove/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.platform = Gem::Platform::RUBY
|
6
|
+
s.name = 'dove'
|
7
|
+
s.version = Dove::VERSION
|
8
|
+
s.homepage = 'https://github.com/archSeer/dove'
|
9
|
+
s.authors = ["Blaž Hrastnik"]
|
10
|
+
s.email = ['speed.the.bboy@gmail.com']
|
11
|
+
s.summary = "Write single page HTML documents with ease"
|
12
|
+
s.description = "Write single page HTML documents with ease"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = ["dove"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_dependency 'redcarpet', '~> 2.3.0'
|
20
|
+
s.add_dependency 'tilt', '~> 1.4.1'
|
21
|
+
s.add_dependency 'slim', '~> 2.0'
|
22
|
+
s.add_dependency 'rouge', '~> 0.3.7'
|
23
|
+
end
|
data/lib/dove.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'redcarpet'
|
2
|
+
require 'tilt'
|
3
|
+
require 'slim'
|
4
|
+
require 'yaml'
|
5
|
+
require 'rouge'
|
6
|
+
require 'dove/rougify'
|
7
|
+
|
8
|
+
class Dove
|
9
|
+
def initialize(filename, options ={})
|
10
|
+
@file = filename
|
11
|
+
|
12
|
+
# When `block` is given, it must read the contents of the file using
|
13
|
+
# whatever means necessary and return it as a string. With no `block`,
|
14
|
+
# the file is read to retrieve data.
|
15
|
+
@data, @yaml_data = extract_yaml(if block_given? then yield else File.read(filename) end)
|
16
|
+
|
17
|
+
@options = {
|
18
|
+
:output_dir => '.',
|
19
|
+
:template_file => "#{File.dirname(__FILE__)}/dove/layout.slim",
|
20
|
+
#:stylesheet => 'styles.css'
|
21
|
+
}.merge(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Extracts the YAML frontmatter.
|
25
|
+
def extract_yaml text
|
26
|
+
if md = text.match(/\A(---\s*\n.*?\n?)^(---\s*$\n?)/m)
|
27
|
+
[md.post_match, YAML.load(md[1])]
|
28
|
+
else
|
29
|
+
[text, {}]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Renders the Markdown file and inserts it into the layout.
|
34
|
+
def render
|
35
|
+
extensions = {
|
36
|
+
autolink: true,
|
37
|
+
space_after_headers: true,
|
38
|
+
fenced_code_blocks: true,
|
39
|
+
lax_spacing: true,
|
40
|
+
strikethrough: true,
|
41
|
+
superscript: true,
|
42
|
+
no_intra_emphasis: true
|
43
|
+
}
|
44
|
+
markdown = Redcarpet::Markdown.new(Rougify, extensions)
|
45
|
+
Tilt.new(@options[:template_file], {pretty: true}).render(Object.new, @yaml_data) { markdown.render(@data) }
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
meta charset="utf-8"
|
5
|
+
title = title
|
6
|
+
link rel='stylesheet' type='text/css' href='styles.css'
|
7
|
+
link rel='stylesheet' type='text/css' href='http://fonts.googleapis.com/css?family=Source+Sans+Pro'
|
8
|
+
|
9
|
+
body
|
10
|
+
header = title
|
11
|
+
article == yield
|
12
|
+
footer Copyright © #{Time.now.year} #{author}
|
data/lib/dove/rougify.rb
ADDED
data/lib/dove/version.rb
ADDED
data/styles.css
ADDED
@@ -0,0 +1,241 @@
|
|
1
|
+
/* http://meyerweb.com/eric/tools/css/reset/
|
2
|
+
v2.0 | 20110126
|
3
|
+
License: none (public domain)
|
4
|
+
*/
|
5
|
+
|
6
|
+
html, body, div, span, applet, object, iframe,
|
7
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
8
|
+
a, abbr, acronym, address, big, cite, code,
|
9
|
+
del, dfn, em, img, ins, kbd, q, s, samp,
|
10
|
+
small, strike, strong, sub, sup, tt, var,
|
11
|
+
b, u, i, center,
|
12
|
+
dl, dt, dd, ol, ul, li,
|
13
|
+
fieldset, form, label, legend,
|
14
|
+
table, caption, tbody, tfoot, thead, tr, th, td,
|
15
|
+
article, aside, canvas, details, embed,
|
16
|
+
figure, figcaption, footer, header, hgroup,
|
17
|
+
menu, nav, output, ruby, section, summary,
|
18
|
+
time, mark, audio, video {
|
19
|
+
margin: 0;
|
20
|
+
padding: 0;
|
21
|
+
border: 0;
|
22
|
+
font-size: 100%;
|
23
|
+
font: inherit;
|
24
|
+
vertical-align: baseline;
|
25
|
+
}
|
26
|
+
/* HTML5 display-role reset for older browsers */
|
27
|
+
article, aside, details, figcaption, figure,
|
28
|
+
footer, header, hgroup, menu, nav, section {
|
29
|
+
display: block;
|
30
|
+
}
|
31
|
+
body {
|
32
|
+
line-height: 1;
|
33
|
+
}
|
34
|
+
ol, ul {
|
35
|
+
list-style: none;
|
36
|
+
}
|
37
|
+
blockquote, q {
|
38
|
+
quotes: none;
|
39
|
+
}
|
40
|
+
blockquote:before, blockquote:after,
|
41
|
+
q:before, q:after {
|
42
|
+
content: '';
|
43
|
+
content: none;
|
44
|
+
}
|
45
|
+
table {
|
46
|
+
border-collapse: collapse;
|
47
|
+
border-spacing: 0;
|
48
|
+
}
|
49
|
+
|
50
|
+
/* END reset.css */
|
51
|
+
|
52
|
+
a {
|
53
|
+
color: hsl(235, 65%, 64%);
|
54
|
+
border-bottom: 1px solid;
|
55
|
+
text-decoration: none;
|
56
|
+
}
|
57
|
+
a:hover {
|
58
|
+
color: hsl(235, 65%, 84%);
|
59
|
+
}
|
60
|
+
|
61
|
+
h1, h2, h3, h4, h5, h6 {
|
62
|
+
margin: 1em 0 15px;
|
63
|
+
font-family: inherit;
|
64
|
+
font-weight: bold;
|
65
|
+
line-height: 20px;
|
66
|
+
color: #222;
|
67
|
+
text-rendering: optimizeLegibility;
|
68
|
+
}
|
69
|
+
|
70
|
+
h1, h2, h3 {line-height: 40px}
|
71
|
+
h1 {font-size: 38.5px}
|
72
|
+
h2 {font-size: 31.5px}
|
73
|
+
h3 {font-size: 24.5px}
|
74
|
+
h4 {font-size: 17.5px}
|
75
|
+
h5 {font-size: 14px}
|
76
|
+
h6 {font-size: 11.9px}
|
77
|
+
|
78
|
+
h1 {border-bottom: 1px solid #ddd}
|
79
|
+
h2 {border-bottom: 1px solid #eee}
|
80
|
+
|
81
|
+
p, ul, ol {
|
82
|
+
margin: 0 0 1em;
|
83
|
+
line-height: 1.6;
|
84
|
+
}
|
85
|
+
|
86
|
+
em {font-style: italic}
|
87
|
+
|
88
|
+
strong {font-weight: bold; color: #444;}
|
89
|
+
|
90
|
+
code, pre {
|
91
|
+
/* colors match the Tomorrow Night rouge theme */
|
92
|
+
background-color: #1d1f21;
|
93
|
+
color: #c5c8c6;
|
94
|
+
padding: 2px 5px;
|
95
|
+
margin: 0 0 20px;
|
96
|
+
font-size: 14px;
|
97
|
+
font-family: Monaco, courier, monospace;
|
98
|
+
-webkit-font-smoothing: antialiased;
|
99
|
+
overflow: auto;
|
100
|
+
border-radius: 3px;
|
101
|
+
line-height: 1.35;
|
102
|
+
}
|
103
|
+
|
104
|
+
pre {
|
105
|
+
display: block;
|
106
|
+
padding: 10px 15px;
|
107
|
+
}
|
108
|
+
|
109
|
+
blockquote {
|
110
|
+
font-size: 14px;
|
111
|
+
line-height: 22px;
|
112
|
+
color: #777;
|
113
|
+
margin: 10px;
|
114
|
+
padding-left: 15px;
|
115
|
+
border-left: 1px solid #ccc;
|
116
|
+
}
|
117
|
+
|
118
|
+
ul, ol {margin-left: 20px;}
|
119
|
+
ul li {list-style-type: square;}
|
120
|
+
ol li {list-style-type: decimal;}
|
121
|
+
|
122
|
+
|
123
|
+
/* superscript and subscript https://gist.github.com/unruthless/413930 */
|
124
|
+
sub, sup {
|
125
|
+
/* Specified in % so that the sup/sup is the
|
126
|
+
right size relative to the surrounding text */
|
127
|
+
font-size: 75%;
|
128
|
+
|
129
|
+
/* Zero out the line-height so that it doesn't
|
130
|
+
interfere with the positioning that follows */
|
131
|
+
line-height: 0;
|
132
|
+
|
133
|
+
/* Where the magic happens: makes all browsers position
|
134
|
+
the sup/sup properly, relative to the surrounding text */
|
135
|
+
position: relative;
|
136
|
+
|
137
|
+
/* Note that if you're using Eric Meyer's reset.css, this
|
138
|
+
is already set and you can remove this rule */
|
139
|
+
vertical-align: baseline;
|
140
|
+
}
|
141
|
+
|
142
|
+
sup {
|
143
|
+
/* Move the superscripted text up */
|
144
|
+
top: -0.5em;
|
145
|
+
}
|
146
|
+
|
147
|
+
sub {
|
148
|
+
/* Move the subscripted text down, but only
|
149
|
+
half as far down as the superscript moved up */
|
150
|
+
bottom: -0.25em;
|
151
|
+
}
|
152
|
+
|
153
|
+
/* styles */
|
154
|
+
|
155
|
+
body {
|
156
|
+
font-family: Source Sans Pro;
|
157
|
+
color: #666;
|
158
|
+
max-width: 720px;
|
159
|
+
margin: 15px auto;
|
160
|
+
}
|
161
|
+
|
162
|
+
header {
|
163
|
+
color: hsl(235, 65%, 64%);
|
164
|
+
font-weight: 900;
|
165
|
+
font-size: 80px;
|
166
|
+
text-align: center;
|
167
|
+
margin: 10px 0 50px;
|
168
|
+
}
|
169
|
+
|
170
|
+
footer {
|
171
|
+
margin: 50px 0 20px;
|
172
|
+
font-size: 12px;
|
173
|
+
text-align: center;
|
174
|
+
}
|
175
|
+
|
176
|
+
/* Modified Tomorrow Again color scheme -- https://github.com/MozMorris/tomorrow-pygments*/
|
177
|
+
.highlight .hll { background-color: #373b41 }
|
178
|
+
.highlight { background: #1d1f21; color: #c5c8c6 }
|
179
|
+
.highlight .c { color: #969896 } /* Comment */
|
180
|
+
.highlight .err { color: #cc6666 } /* Error */
|
181
|
+
.highlight .k { color: #b294bb } /* Keyword */
|
182
|
+
.highlight .l { color: #de935f } /* Literal */
|
183
|
+
.highlight .n { color: #c5c8c6 } /* Name */
|
184
|
+
.highlight .o { color: #c5c8c6 } /* Operator */
|
185
|
+
.highlight .p { color: #c5c8c6 } /* Punctuation */
|
186
|
+
.highlight .cm { color: #969896 } /* Comment.Multiline */
|
187
|
+
.highlight .cp { color: #969896 } /* Comment.Preproc */
|
188
|
+
.highlight .c1 { color: #969896 } /* Comment.Single */
|
189
|
+
.highlight .cs { color: #969896 } /* Comment.Special */
|
190
|
+
.highlight .gd { color: #cc6666 } /* Generic.Deleted */
|
191
|
+
.highlight .ge { font-style: italic } /* Generic.Emph */
|
192
|
+
.highlight .gh { color: #c5c8c6; font-weight: bold } /* Generic.Heading */
|
193
|
+
.highlight .gi { color: #b5bd68 } /* Generic.Inserted */
|
194
|
+
.highlight .gp { color: #969896; font-weight: bold } /* Generic.Prompt */
|
195
|
+
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
196
|
+
.highlight .gu { color: #8abeb7; font-weight: bold } /* Generic.Subheading */
|
197
|
+
.highlight .kc { color: #b294bb } /* Keyword.Constant */
|
198
|
+
.highlight .kd { color: #b294bb } /* Keyword.Declaration */
|
199
|
+
.highlight .kn { color: #8abeb7 } /* Keyword.Namespace */
|
200
|
+
.highlight .kp { color: #b294bb } /* Keyword.Pseudo */
|
201
|
+
.highlight .kr { color: #b294bb } /* Keyword.Reserved */
|
202
|
+
.highlight .kt { color: #f0c674 } /* Keyword.Type */
|
203
|
+
.highlight .ld { color: #b5bd68 } /* Literal.Date */
|
204
|
+
.highlight .m { color: #de935f } /* Literal.Number */
|
205
|
+
.highlight .s { color: #b5bd68 } /* Literal.String */
|
206
|
+
.highlight .na { color: #81a2be } /* Name.Attribute */
|
207
|
+
.highlight .nb { color: #c5c8c6 } /* Name.Builtin */
|
208
|
+
.highlight .nc { color: #f0c674 } /* Name.Class */
|
209
|
+
.highlight .no { color: #cc6666 } /* Name.Constant */
|
210
|
+
.highlight .nd { color: #8abeb7 } /* Name.Decorator */
|
211
|
+
.highlight .ni { color: #c5c8c6 } /* Name.Entity */
|
212
|
+
.highlight .ne { color: #cc6666 } /* Name.Exception */
|
213
|
+
.highlight .nf { color: #81a2be } /* Name.Function */
|
214
|
+
.highlight .nl { color: #c5c8c6 } /* Name.Label */
|
215
|
+
.highlight .nn { color: #f0c674 } /* Name.Namespace */
|
216
|
+
.highlight .nx { color: #81a2be } /* Name.Other */
|
217
|
+
.highlight .py { color: #c5c8c6 } /* Name.Property */
|
218
|
+
.highlight .nt { color: #b294bb } /* Name.Tag */
|
219
|
+
.highlight .nv { color: #cc6666 } /* Name.Variable */
|
220
|
+
.highlight .ow { color: #8abeb7 } /* Operator.Word */
|
221
|
+
.highlight .w { color: #c5c8c6 } /* Text.Whitespace */
|
222
|
+
.highlight .mf { color: #de935f } /* Literal.Number.Float */
|
223
|
+
.highlight .mh { color: #de935f } /* Literal.Number.Hex */
|
224
|
+
.highlight .mi { color: #de935f } /* Literal.Number.Integer */
|
225
|
+
.highlight .mo { color: #de935f } /* Literal.Number.Oct */
|
226
|
+
.highlight .sb { color: #b5bd68 } /* Literal.String.Backtick */
|
227
|
+
.highlight .sc { color: #c5c8c6 } /* Literal.String.Char */
|
228
|
+
.highlight .sd { color: #969896 } /* Literal.String.Doc */
|
229
|
+
.highlight .s2 { color: #b5bd68 } /* Literal.String.Double */
|
230
|
+
.highlight .se { color: #de935f } /* Literal.String.Escape */
|
231
|
+
.highlight .sh { color: #b5bd68 } /* Literal.String.Heredoc */
|
232
|
+
.highlight .si { color: #de935f } /* Literal.String.Interpol */
|
233
|
+
.highlight .sx { color: #b5bd68 } /* Literal.String.Other */
|
234
|
+
.highlight .sr { color: #b5bd68 } /* Literal.String.Regex */
|
235
|
+
.highlight .s1 { color: #b5bd68 } /* Literal.String.Single */
|
236
|
+
.highlight .ss { color: #b5bd68 } /* Literal.String.Symbol */
|
237
|
+
.highlight .bp { color: #c5c8c6 } /* Name.Builtin.Pseudo */
|
238
|
+
.highlight .vc { color: #cc6666 } /* Name.Variable.Class */
|
239
|
+
.highlight .vg { color: #cc6666 } /* Name.Variable.Global */
|
240
|
+
.highlight .vi { color: #cc6666 } /* Name.Variable.Instance */
|
241
|
+
.highlight .il { color: #de935f } /* Literal.Number.Integer.Long */
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dove
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Blaž Hrastnik
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: redcarpet
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.3.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.3.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tilt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: slim
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rouge
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.7
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.3.7
|
69
|
+
description: Write single page HTML documents with ease
|
70
|
+
email:
|
71
|
+
- speed.the.bboy@gmail.com
|
72
|
+
executables:
|
73
|
+
- dove
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- .gitignore
|
78
|
+
- README.md
|
79
|
+
- bin/dove
|
80
|
+
- dove.gemspec
|
81
|
+
- lib/dove.rb
|
82
|
+
- lib/dove/layout.slim
|
83
|
+
- lib/dove/rougify.rb
|
84
|
+
- lib/dove/version.rb
|
85
|
+
- styles.css
|
86
|
+
homepage: https://github.com/archSeer/dove
|
87
|
+
licenses: []
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.0.3
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: Write single page HTML documents with ease
|
109
|
+
test_files: []
|
110
|
+
has_rdoc:
|