markshi 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/markshi +30 -0
- data/lib/markshi.rb +34 -0
- data/lib/markshi/version.rb +4 -0
- data/templates/css/coderay.css +121 -0
- data/templates/css/default.css +26 -0
- data/templates/css/main.css +62 -0
- data/templates/default.erb.html +29 -0
- data/templates/images/blockquote.gif +0 -0
- data/templates/images/caution.png +0 -0
- data/templates/images/note.png +0 -0
- data/templates/images/tip.png +0 -0
- metadata +84 -0
data/bin/markshi
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'markshi'
|
4
|
+
require 'digest/sha1'
|
5
|
+
require 'tmpdir'
|
6
|
+
|
7
|
+
include Markshi
|
8
|
+
|
9
|
+
filename = ARGV[0];
|
10
|
+
|
11
|
+
if (ARGV.size < 1)
|
12
|
+
abort "Usage: #{$0} <markdown file>"
|
13
|
+
end
|
14
|
+
|
15
|
+
title = File.basename(filename).gsub(/\.(markdown|md)/m, '')
|
16
|
+
content = File.read(filename)
|
17
|
+
|
18
|
+
(toc, html) = markdownize(content)
|
19
|
+
output = layout(title, toc, decorate_boxes(highlight_code(html)))
|
20
|
+
hash = Digest::SHA1::hexdigest(output)
|
21
|
+
|
22
|
+
tmpfile = "#{Dir.tmpdir}/markshi-#{hash}.html"
|
23
|
+
File.open(tmpfile, 'w+') do |f|
|
24
|
+
f.puts output
|
25
|
+
end
|
26
|
+
|
27
|
+
puts "created new html file #{tmpfile}"
|
28
|
+
|
29
|
+
`open #{tmpfile} || gnome-open #{tmpfile}`
|
30
|
+
|
data/lib/markshi.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rdiscount'
|
5
|
+
require 'coderay'
|
6
|
+
require 'erb'
|
7
|
+
|
8
|
+
module Markshi
|
9
|
+
def markdownize(text)
|
10
|
+
rd = RDiscount.new(text, :smart, :generate_toc)
|
11
|
+
[rd.toc_content, rd.to_html]
|
12
|
+
end
|
13
|
+
|
14
|
+
def highlight_code(text)
|
15
|
+
text.gsub(/<pre><code>(\[(\w+)\])?\n([^<]+)<\/code><\/pre>/m) do
|
16
|
+
CodeRay.scan($3, $2).div(:css => :class).gsub('&', '&')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def decorate_boxes(text)
|
21
|
+
boxes = %w[note quote caution tip]
|
22
|
+
boxes = boxes.join '|'
|
23
|
+
text.gsub(/<blockquote><p><strong>(#{boxes})<\/strong>/mi) do
|
24
|
+
"<blockquote class=\"#{$1}\"><p>".downcase
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def layout(title, toc, text, template = 'default')
|
29
|
+
templates_dir = File.expand_path('../../templates', __FILE__)
|
30
|
+
template = ERB.new(File.read("#{templates_dir}/#{template}.erb.html"))
|
31
|
+
template.result(binding)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,121 @@
|
|
1
|
+
.CodeRay {
|
2
|
+
background-color: #f8f8f8;
|
3
|
+
border: 1px solid silver;
|
4
|
+
font-family: 'Courier New', 'Terminal', monospace;
|
5
|
+
color: #000;
|
6
|
+
}
|
7
|
+
.CodeRay pre { margin: 0px; }
|
8
|
+
|
9
|
+
span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
|
10
|
+
|
11
|
+
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
|
12
|
+
table.CodeRay td { padding: 2px 4px; vertical-align: top; }
|
13
|
+
|
14
|
+
.CodeRay .line_numbers, .CodeRay .no {
|
15
|
+
background-color: #def;
|
16
|
+
color: gray;
|
17
|
+
text-align: right;
|
18
|
+
}
|
19
|
+
.CodeRay .line_numbers a:target, .CodeRay .no a:target { color: blue; }
|
20
|
+
.CodeRay .line_numbers .highlighted, .CodeRay .no .highlighted { color: red; }
|
21
|
+
.CodeRay .no { padding: 0px 4px; }
|
22
|
+
.CodeRay .code { width: 100%; }
|
23
|
+
.CodeRay .code pre { overflow: auto; }
|
24
|
+
|
25
|
+
.CodeRay .debug { color:white ! important; background:blue ! important; }
|
26
|
+
|
27
|
+
.CodeRay .an { color:#007 }
|
28
|
+
.CodeRay .at { color:#f08 }
|
29
|
+
.CodeRay .av { color:#700 }
|
30
|
+
.CodeRay .bi { color:#509; font-weight:bold }
|
31
|
+
.CodeRay .c { color:#888; }
|
32
|
+
.CodeRay .c .dl { color:#444; }
|
33
|
+
.CodeRay .c .ch { color:#444; }
|
34
|
+
|
35
|
+
.CodeRay .ch { color:#04D }
|
36
|
+
.CodeRay .ch .k { color:#04D }
|
37
|
+
.CodeRay .ch .dl { color:#039 }
|
38
|
+
|
39
|
+
.CodeRay .cl { color:#B06; font-weight:bold }
|
40
|
+
.CodeRay .cm { color:#A08; font-weight:bold }
|
41
|
+
.CodeRay .co { color:#036; font-weight:bold }
|
42
|
+
.CodeRay .cr { color:#0A0 }
|
43
|
+
.CodeRay .cv { color:#369 }
|
44
|
+
.CodeRay .de { color:#B0B; }
|
45
|
+
.CodeRay .df { color:#099; font-weight:bold }
|
46
|
+
.CodeRay .di { color:#088; font-weight:bold }
|
47
|
+
.CodeRay .dl { color:black }
|
48
|
+
.CodeRay .do { color:#970 }
|
49
|
+
.CodeRay .dt { color:#34b }
|
50
|
+
.CodeRay .ds { color:#D42; font-weight:bold }
|
51
|
+
.CodeRay .e { color:#666; font-weight:bold }
|
52
|
+
.CodeRay .en { color:#800; font-weight:bold }
|
53
|
+
.CodeRay .er { color:#F00; background-color:#FAA }
|
54
|
+
.CodeRay .ex { color:#C00; font-weight:bold }
|
55
|
+
.CodeRay .fl { color:#60E; font-weight:bold }
|
56
|
+
.CodeRay .fu { color:#06B; font-weight:bold }
|
57
|
+
.CodeRay .gv { color:#d70; font-weight:bold }
|
58
|
+
.CodeRay .hx { color:#058; font-weight:bold }
|
59
|
+
.CodeRay .i { color:#00D; font-weight:bold }
|
60
|
+
.CodeRay .ic { color:#B44; font-weight:bold }
|
61
|
+
|
62
|
+
.CodeRay .il { background-color: hsla(0,0%,0%,0.1); color: black }
|
63
|
+
.CodeRay .il .idl { font-weight: bold; color: #666 }
|
64
|
+
.CodeRay .idl { font-weight: bold; color: #666; }
|
65
|
+
|
66
|
+
.CodeRay .im { color:#f00; }
|
67
|
+
.CodeRay .in { color:#B2B; font-weight:bold }
|
68
|
+
.CodeRay .iv { color:#33B }
|
69
|
+
.CodeRay .la { color:#970; font-weight:bold }
|
70
|
+
.CodeRay .lv { color:#963 }
|
71
|
+
.CodeRay .ns { color:#707; font-weight:bold }
|
72
|
+
.CodeRay .oc { color:#40E; font-weight:bold }
|
73
|
+
.CodeRay .op { }
|
74
|
+
.CodeRay .pc { color:#058; font-weight:bold }
|
75
|
+
.CodeRay .pd { color:#369; font-weight:bold }
|
76
|
+
.CodeRay .pp { color:#579; }
|
77
|
+
.CodeRay .ps { color:#00C; font-weight:bold }
|
78
|
+
.CodeRay .pt { color:#074; font-weight:bold }
|
79
|
+
.CodeRay .r, .kw { color:#080; font-weight:bold }
|
80
|
+
|
81
|
+
.CodeRay .ke { color: #808; }
|
82
|
+
.CodeRay .ke .dl { color: #606; }
|
83
|
+
.CodeRay .ke .ch { color: #80f; }
|
84
|
+
.CodeRay .vl { color: #088; }
|
85
|
+
|
86
|
+
.CodeRay .rx { background-color:hsla(300,100%,50%,0.1); color:#808 }
|
87
|
+
.CodeRay .rx .k { }
|
88
|
+
.CodeRay .rx .dl { color:#404 }
|
89
|
+
.CodeRay .rx .mod { color:#C2C }
|
90
|
+
.CodeRay .rx .fu { color:#404; font-weight: bold }
|
91
|
+
|
92
|
+
.CodeRay .s { background-color:hsla(0,100%,50%,0.1); color: #D20; }
|
93
|
+
.CodeRay .s .k { }
|
94
|
+
.CodeRay .s .ch { color: #b0b; }
|
95
|
+
.CodeRay .s .dl { color: #710; }
|
96
|
+
|
97
|
+
.CodeRay .sh { background-color:hsla(120,100%,50%,0.1); color:#2B2 }
|
98
|
+
.CodeRay .sh .k { }
|
99
|
+
.CodeRay .sh .dl { color:#161 }
|
100
|
+
|
101
|
+
.CodeRay .sy { color:#A60 }
|
102
|
+
.CodeRay .sy .k { color:#A60 }
|
103
|
+
.CodeRay .sy .dl { color:#630 }
|
104
|
+
|
105
|
+
.CodeRay .ta { color:#070 }
|
106
|
+
.CodeRay .ts { color:#D70; font-weight:bold }
|
107
|
+
.CodeRay .ty { color:#339; font-weight:bold }
|
108
|
+
.CodeRay .v { color:#036 }
|
109
|
+
.CodeRay .xt { color:#444 }
|
110
|
+
|
111
|
+
.CodeRay .ins { background: #afa; }
|
112
|
+
.CodeRay .del { background: #faa; }
|
113
|
+
.CodeRay .chg { color: #aaf; background: #007; }
|
114
|
+
.CodeRay .head { color: #f8f; background: #505 }
|
115
|
+
.CodeRay .head .filename { color: white; }
|
116
|
+
|
117
|
+
.CodeRay .ins .ins { color: #080; font-weight:bold }
|
118
|
+
.CodeRay .del .del { color: #800; font-weight:bold }
|
119
|
+
.CodeRay .chg .chg { color: #66f; }
|
120
|
+
.CodeRay .head .head { color: #f4f; }
|
121
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
pre
|
2
|
+
{
|
3
|
+
background-color: black;
|
4
|
+
color: white;
|
5
|
+
padding: 1em;
|
6
|
+
}
|
7
|
+
|
8
|
+
.CodeRay .c
|
9
|
+
{
|
10
|
+
color: #BD48B3;
|
11
|
+
font-style: italic;
|
12
|
+
}
|
13
|
+
|
14
|
+
.CodeRay .r
|
15
|
+
{
|
16
|
+
color: #FFCC66;
|
17
|
+
font-weight: normal;
|
18
|
+
}
|
19
|
+
|
20
|
+
.CodeRay .fu,
|
21
|
+
.CodeRay .cl
|
22
|
+
{
|
23
|
+
color: white;
|
24
|
+
font-weight: normal;
|
25
|
+
}
|
26
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
html, body
|
2
|
+
{
|
3
|
+
padding: 0;
|
4
|
+
margin: 0;
|
5
|
+
font-family: Verdana, Tahoma, Arial, sans-serif;
|
6
|
+
}
|
7
|
+
|
8
|
+
.container
|
9
|
+
{
|
10
|
+
background-color: white;
|
11
|
+
}
|
12
|
+
|
13
|
+
.article
|
14
|
+
{
|
15
|
+
width: 90%;
|
16
|
+
margin: 0 auto;
|
17
|
+
}
|
18
|
+
|
19
|
+
.footer
|
20
|
+
{
|
21
|
+
text-align: center;
|
22
|
+
}
|
23
|
+
|
24
|
+
blockquote.note,
|
25
|
+
blockquote.caution,
|
26
|
+
blockquote.tip
|
27
|
+
{
|
28
|
+
font-weight: normal;
|
29
|
+
min-height: 3.6em;
|
30
|
+
padding: 0.6em 2em 0.6em 3.6em;
|
31
|
+
margin: 1em 0;
|
32
|
+
border-top: 1px solid #ddd;
|
33
|
+
border-bottom: 1px solid #ddd;
|
34
|
+
background-color: #ffd;
|
35
|
+
background-repeat: no-repeat;
|
36
|
+
background-position: 1em 1.2em;
|
37
|
+
}
|
38
|
+
|
39
|
+
blockquote.note
|
40
|
+
{
|
41
|
+
background-image: url('../images/note.png');
|
42
|
+
}
|
43
|
+
|
44
|
+
blockquote.caution
|
45
|
+
{
|
46
|
+
background-image: url('../images/caution.png');
|
47
|
+
}
|
48
|
+
|
49
|
+
blockquote.tip
|
50
|
+
{
|
51
|
+
background-image: url('../images/tip.png');
|
52
|
+
}
|
53
|
+
|
54
|
+
blockquote.quote
|
55
|
+
{
|
56
|
+
margin: 2em 4em;
|
57
|
+
min-height: 4em;
|
58
|
+
color: #575757;
|
59
|
+
padding: 0 3.5em;
|
60
|
+
background: transparent url('../images/blockquote.gif') no-repeat 0 0;
|
61
|
+
}
|
62
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
5
|
+
<link rel="stylesheet" type="text/css" href="<%= "#{templates_dir}/css/coderay.css" %>" />
|
6
|
+
<link rel="stylesheet" type="text/css" href="<%= "#{templates_dir}/css/main.css" %>" />
|
7
|
+
<link rel="stylesheet" type="text/css" href="<%= "#{templates_dir}/css/default.css" %>" />
|
8
|
+
<title><%= title %></title>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div class="container">
|
12
|
+
<div class="header">
|
13
|
+
<h1><%= title %></h1>
|
14
|
+
</div>
|
15
|
+
<div class="article">
|
16
|
+
<div class="toc">
|
17
|
+
<%= toc %>
|
18
|
+
</div>
|
19
|
+
<div class="text">
|
20
|
+
<%= text %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="footer">
|
24
|
+
<small>Generated by Markshi - <%= Time.now().strftime('%c') %></small>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</body>
|
28
|
+
</html>
|
29
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: markshi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Cestari
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-09-06 00:00:00 -04:30
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rdiscount
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: coderay
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: Tool to make Markdown authoring easier by providing fast and good looking previews
|
36
|
+
email:
|
37
|
+
- dcestari@gmail.com
|
38
|
+
executables:
|
39
|
+
- markshi
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
files:
|
45
|
+
- lib/markshi.rb
|
46
|
+
- lib/markshi/version.rb
|
47
|
+
- templates/css/default.css
|
48
|
+
- templates/css/main.css
|
49
|
+
- templates/css/coderay.css
|
50
|
+
- templates/images/caution.png
|
51
|
+
- templates/images/blockquote.gif
|
52
|
+
- templates/images/tip.png
|
53
|
+
- templates/images/note.png
|
54
|
+
- templates/default.erb.html
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://github.com/dcestari/markshi
|
57
|
+
licenses: []
|
58
|
+
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
version:
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 1.3.5
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Markdown to HTML (previewer)
|
83
|
+
test_files: []
|
84
|
+
|