gitdoc 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/doc.haml +1 -3
- data/gitdoc.rb +53 -7
- data/highlight.css +61 -0
- metadata +6 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
data/doc.haml
CHANGED
data/gitdoc.rb
CHANGED
@@ -2,6 +2,7 @@ require 'sinatra'
|
|
2
2
|
require 'rdiscount'
|
3
3
|
require 'haml'
|
4
4
|
require 'sass'
|
5
|
+
require 'digest/sha1'
|
5
6
|
|
6
7
|
def GitDoc! title = nil, opts = {}
|
7
8
|
dir = File.dirname(File.expand_path(caller.first.split(':').first))
|
@@ -19,19 +20,56 @@ disable :logging # the server always writes its own log anyway
|
|
19
20
|
helpers do
|
20
21
|
|
21
22
|
def md source
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
source_without_code = extract_code source
|
24
|
+
html = RDiscount.new(source_without_code).to_html
|
25
|
+
html = highlight_code html
|
26
|
+
newline_entities_for_tag :pre, html
|
27
|
+
end
|
28
|
+
|
29
|
+
# extract_code and highlight_code cribbed from:
|
30
|
+
# https://github.com/github/gollum/blob/0b8bc597a7e9495b272e5dbb743827f56ccd2fe6/lib/gollum/markup.rb#L367
|
31
|
+
|
32
|
+
# Replaces all code fragments with a SHA1 hash. Stores the original fragment
|
33
|
+
# in @codemap
|
34
|
+
def extract_code source
|
35
|
+
@codemap = {}
|
36
|
+
source.gsub(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do
|
37
|
+
Digest::SHA1.hexdigest($2).tap { |id| @codemap[id] = { :lang => $1, :code => $2 } }
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
29
|
-
|
30
|
-
|
41
|
+
# Replaces all SHA1 hash strings present in @codemap with pygmentized
|
42
|
+
# html suitable for coloring with a stylesheet
|
43
|
+
def highlight_code html
|
44
|
+
@codemap.each do |id, spec|
|
45
|
+
formatted = begin
|
46
|
+
# TODO: fix. fails silenty right now
|
47
|
+
IO.popen("pygmentize -l #{spec[:lang]} -f html", 'r+') do |io|
|
48
|
+
io << unindent(spec[:code])
|
49
|
+
io.close_write
|
50
|
+
io.read.strip
|
51
|
+
end
|
52
|
+
end
|
53
|
+
html.gsub!(id, formatted)
|
54
|
+
end
|
55
|
+
html
|
31
56
|
end
|
32
57
|
|
33
|
-
|
58
|
+
# Removes leading indent if all non-blank lines are indented
|
59
|
+
def unindent code
|
60
|
+
code.gsub!(/^( |\t)/m, '') if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ }
|
61
|
+
code
|
62
|
+
end
|
34
63
|
|
64
|
+
# Allows the rendered markdown to be indented in its containing document
|
65
|
+
# without introducing extra whitespace into preformatted blocks
|
66
|
+
def newline_entities_for_tag tag, html
|
67
|
+
html.gsub(/<#{tag}>.*?<\/#{tag}>/m) do |match|
|
68
|
+
match.gsub(/\n/m,"
")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
35
73
|
|
36
74
|
get '/*' do |name|
|
37
75
|
name = 'index' if name.empty?
|
@@ -47,4 +85,12 @@ get '/*.*' do |name,ext|
|
|
47
85
|
send_file file
|
48
86
|
end
|
49
87
|
|
88
|
+
get '/.css' do
|
89
|
+
content_type :css
|
90
|
+
styles = sass(:reset)
|
91
|
+
styles += File.read(settings.root + '/highlight.css')
|
92
|
+
styles += sass(File.read(settings.styles)) if File.exist? settings.styles
|
93
|
+
styles
|
94
|
+
end
|
95
|
+
|
50
96
|
not_found { "404. Oh Noes!" }
|
data/highlight.css
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
.highlight { background: #ffffff; }
|
2
|
+
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
3
|
+
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
4
|
+
.highlight .k { font-weight: bold } /* Keyword */
|
5
|
+
.highlight .o { font-weight: bold } /* Operator */
|
6
|
+
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
7
|
+
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
8
|
+
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
9
|
+
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
10
|
+
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
11
|
+
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
12
|
+
.highlight .ge { font-style: italic } /* Generic.Emph */
|
13
|
+
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
14
|
+
.highlight .gh { color: #999999 } /* Generic.Heading */
|
15
|
+
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
16
|
+
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
17
|
+
.highlight .gc { color: #999; background-color: #EAF2F5 }
|
18
|
+
.highlight .go { color: #888888 } /* Generic.Output */
|
19
|
+
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
20
|
+
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
21
|
+
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
22
|
+
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
23
|
+
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
24
|
+
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
25
|
+
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
|
26
|
+
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
27
|
+
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
28
|
+
.highlight .m { color: #009999 } /* Literal.Number */
|
29
|
+
.highlight .s { color: #d14 } /* Literal.String */
|
30
|
+
.highlight .na { color: #008080 } /* Name.Attribute */
|
31
|
+
.highlight .nb { color: #0086B3 } /* Name.Builtin */
|
32
|
+
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
|
33
|
+
.highlight .no { color: #008080 } /* Name.Constant */
|
34
|
+
.highlight .ni { color: #800080 } /* Name.Entity */
|
35
|
+
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
36
|
+
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
|
37
|
+
.highlight .nn { color: #555555 } /* Name.Namespace */
|
38
|
+
.highlight .nt { color: #000080 } /* Name.Tag */
|
39
|
+
.highlight .nv { color: #008080 } /* Name.Variable */
|
40
|
+
.highlight .ow { font-weight: bold } /* Operator.Word */
|
41
|
+
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
42
|
+
.highlight .mf { color: #009999 } /* Literal.Number.Float */
|
43
|
+
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
|
44
|
+
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
|
45
|
+
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
|
46
|
+
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
|
47
|
+
.highlight .sc { color: #d14 } /* Literal.String.Char */
|
48
|
+
.highlight .sd { color: #d14 } /* Literal.String.Doc */
|
49
|
+
.highlight .s2 { color: #d14 } /* Literal.String.Double */
|
50
|
+
.highlight .se { color: #d14 } /* Literal.String.Escape */
|
51
|
+
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
|
52
|
+
.highlight .si { color: #d14 } /* Literal.String.Interpol */
|
53
|
+
.highlight .sx { color: #d14 } /* Literal.String.Other */
|
54
|
+
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
55
|
+
.highlight .s1 { color: #d14 } /* Literal.String.Single */
|
56
|
+
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
|
57
|
+
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
58
|
+
.highlight .vc { color: #008080 } /* Name.Variable.Class */
|
59
|
+
.highlight .vg { color: #008080 } /* Name.Variable.Global */
|
60
|
+
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
|
61
|
+
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitdoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
-
-
|
8
|
-
- 1
|
7
|
+
- 2
|
9
8
|
- 0
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 2.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Myles Byrne
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-29 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- VERSION
|
80
80
|
- doc.haml
|
81
81
|
- gitdoc.rb
|
82
|
+
- highlight.css
|
82
83
|
- reset.sass
|
83
84
|
has_rdoc: true
|
84
85
|
homepage: http://github.com/quackingduck/gitdoc
|