docify 1.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/README.rdoc +48 -0
- data/Rakefile +5 -0
- data/bin/docify +69 -0
- data/lib/docify.rb +6 -0
- data/lib/docify/document.rb +48 -0
- data/lib/docify/format.rb +23 -0
- data/lib/docify/style.rb +40 -0
- data/lib/docify/version.rb +3 -0
- metadata +121 -0
data/README.rdoc
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= Docify
|
2
|
+
|
3
|
+
This gem allows you to render your documentation files (Rdoc/Markup/Textile) into nice-looking html files.
|
4
|
+
|
5
|
+
Produced result looks similar to GitHub's README and other doc files.
|
6
|
+
|
7
|
+
== Dependencies
|
8
|
+
|
9
|
+
* github/markup
|
10
|
+
* rdiscount
|
11
|
+
* RedCloth
|
12
|
+
|
13
|
+
== Installation
|
14
|
+
|
15
|
+
gem install docify
|
16
|
+
|
17
|
+
== Usage
|
18
|
+
|
19
|
+
Usage: docify [options] FILE
|
20
|
+
-l, --list List of all formats
|
21
|
+
-f, --format FORMAT Render as format
|
22
|
+
--no-css Disable css styling
|
23
|
+
-o, --output=PATH Output file path
|
24
|
+
-h, --help Show this information
|
25
|
+
|
26
|
+
By default docify will write result to terminal:
|
27
|
+
|
28
|
+
docify YOUR_FILE.rdoc
|
29
|
+
|
30
|
+
>> ...... rendered content
|
31
|
+
|
32
|
+
To save results just pass --output with filename
|
33
|
+
|
34
|
+
docify YOUR_FILE.rdoc --output ~/Desktop/file.html
|
35
|
+
|
36
|
+
Or use regular piping:
|
37
|
+
|
38
|
+
docify YOUR_FILE.rdoc > ~/Desktop/file.html
|
39
|
+
|
40
|
+
Format will be automatically detected from filename. But if you need to force your format just type:
|
41
|
+
|
42
|
+
docify YOUR_FILE.rdoc --format textile
|
43
|
+
|
44
|
+
Default format: Rdoc
|
45
|
+
|
46
|
+
== Authors
|
47
|
+
|
48
|
+
* Dan Sosedoff - http://github.com/sosedoff
|
data/Rakefile
ADDED
data/bin/docify
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'optparse'
|
8
|
+
require 'docify'
|
9
|
+
|
10
|
+
# ------------------------------------------------------------------------------
|
11
|
+
# Default options
|
12
|
+
# ------------------------------------------------------------------------------
|
13
|
+
|
14
|
+
options = {
|
15
|
+
:format => nil, # Render format
|
16
|
+
:output => nil, # Output filename
|
17
|
+
:use_css => true # Embedded CSS support
|
18
|
+
}
|
19
|
+
|
20
|
+
# ------------------------------------------------------------------------------
|
21
|
+
# Setup OptParser
|
22
|
+
# ------------------------------------------------------------------------------
|
23
|
+
|
24
|
+
optparse = OptionParser.new do |opts|
|
25
|
+
opts.banner = "Usage: docify [options] FILE"
|
26
|
+
opts.on('-l', '--list', 'List of all formats') do
|
27
|
+
puts "Formats:"
|
28
|
+
Docify::FORMATS.each { |f| puts "- #{f}" }
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
opts.on('-f', '--format FORMAT', 'Render as format') do |f|
|
32
|
+
unless Docify.valid_format?(f)
|
33
|
+
puts "Invalid format!" ; exit
|
34
|
+
end
|
35
|
+
options[:format] = f
|
36
|
+
end
|
37
|
+
opts.on('--no-css', 'Disable css styling') { options[:use_css] = false }
|
38
|
+
opts.on('-o', '--output=PATH', 'Output file path') do |path|
|
39
|
+
options[:output] = path
|
40
|
+
end
|
41
|
+
opts.on('-h', '--help', "Show this information") { puts opts.to_s ; exit }
|
42
|
+
end
|
43
|
+
|
44
|
+
# ------------------------------------------------------------------------------
|
45
|
+
# Execute
|
46
|
+
# ------------------------------------------------------------------------------
|
47
|
+
|
48
|
+
begin
|
49
|
+
optparse.parse!
|
50
|
+
file = ARGV.shift.to_s.strip
|
51
|
+
unless file.empty?
|
52
|
+
begin
|
53
|
+
options[:format] = Docify.detect_format(file)
|
54
|
+
doc = Docify::Document.new(file)
|
55
|
+
doc.render(options[:format], options[:use_css])
|
56
|
+
if options[:output].nil?
|
57
|
+
puts doc.content
|
58
|
+
else
|
59
|
+
doc.save_to(options[:output])
|
60
|
+
end
|
61
|
+
rescue ArgumentError => e
|
62
|
+
puts "Error: #{e.message}"
|
63
|
+
exit
|
64
|
+
end
|
65
|
+
else
|
66
|
+
puts optparse.to_s
|
67
|
+
exit
|
68
|
+
end
|
69
|
+
end
|
data/lib/docify.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Docify
|
2
|
+
class Document
|
3
|
+
attr_reader :path
|
4
|
+
attr_reader :content
|
5
|
+
|
6
|
+
# Initialize a new Document object with file path
|
7
|
+
def initialize(path)
|
8
|
+
raise ArgumentError, "File [#{path}] does not exist!" unless File.exists?(path)
|
9
|
+
raise ArgumentError, "File required!" unless File.file?(path)
|
10
|
+
@path = path
|
11
|
+
@content = ""
|
12
|
+
end
|
13
|
+
|
14
|
+
# Render document by specified format
|
15
|
+
def render(format, embed_css=true)
|
16
|
+
raise ArgumentError, 'Invalid format!' unless FORMATS.include?(format)
|
17
|
+
result = GitHub::Markup.render("doc.#{format}", File.read(@path))
|
18
|
+
if embed_css
|
19
|
+
params = {:title => File.basename(@path), :content => result}
|
20
|
+
params[:css] = Docify::CSS if embed_css
|
21
|
+
@content = template(params)
|
22
|
+
else
|
23
|
+
@content = result
|
24
|
+
end
|
25
|
+
@content
|
26
|
+
end
|
27
|
+
|
28
|
+
# Save rendered content into file
|
29
|
+
def save_to(path)
|
30
|
+
unless File.exists?(File.dirname(path))
|
31
|
+
raise ArgumentError, "Output path does not exist!"
|
32
|
+
end
|
33
|
+
if File.directory?(path)
|
34
|
+
raise ArgumentError, "Output path should be a file!"
|
35
|
+
end
|
36
|
+
File.open(path, 'w') { |f| f.write(@content) }
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# Render template with provided data
|
42
|
+
def template(params={})
|
43
|
+
TEMPLATE.gsub(REGEX) do |m|
|
44
|
+
m = params[m.scan(REGEX).flatten.last.to_sym]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Docify
|
2
|
+
# All supported formats
|
3
|
+
FORMATS = ['rdoc', 'markdown', 'textile']
|
4
|
+
|
5
|
+
# Aliases for file extensions
|
6
|
+
ALIASES = {
|
7
|
+
'.rdoc' => 'rdoc',
|
8
|
+
'.textile' => 'textile',
|
9
|
+
'.markdown' => 'markdown',
|
10
|
+
'.md' => 'markdown'
|
11
|
+
}
|
12
|
+
|
13
|
+
# Returns true if provided format is supported
|
14
|
+
def self.valid_format?(f)
|
15
|
+
FORMATS.include?(f)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Automatically detect format from extension
|
19
|
+
def self.detect_format(file)
|
20
|
+
ext = File.extname(file).downcase
|
21
|
+
ALIASES.key?(ext) ? ALIASES[ext] : FORMATS.first
|
22
|
+
end
|
23
|
+
end
|
data/lib/docify/style.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Docify
|
2
|
+
REGEX = /(\{\{([a-z\-\_]{1,})\}\})/i
|
3
|
+
|
4
|
+
TEMPLATE = <<END_TEMPLATE
|
5
|
+
<html>
|
6
|
+
<head>
|
7
|
+
<title>{{title}}</title>
|
8
|
+
{{css}}
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="content">{{content}}</div>
|
12
|
+
<!-- Generated with Docify -->
|
13
|
+
</body>
|
14
|
+
</html>
|
15
|
+
END_TEMPLATE
|
16
|
+
|
17
|
+
CSS = <<END_CSS
|
18
|
+
<style>
|
19
|
+
body {
|
20
|
+
background: #fff;
|
21
|
+
font: 13.34px helvetica,arial,freesans,clean,sans-serif;
|
22
|
+
}
|
23
|
+
#content { width: 80%; margin: 0px auto; }
|
24
|
+
pre {
|
25
|
+
margin: 1em 0;
|
26
|
+
font-size: 12px;
|
27
|
+
background-color: #eee;
|
28
|
+
border: 1px solid #ddd;
|
29
|
+
padding: 5px;
|
30
|
+
line-height: 1.5em;
|
31
|
+
color: #444;
|
32
|
+
overflow: auto;
|
33
|
+
-webkit-box-shadow:rgba(0,0,0,0.07) 0 1px 2px inset;
|
34
|
+
-webkit-border-radius:3px;
|
35
|
+
-moz-border-radius:3px;
|
36
|
+
border-radius:3px;
|
37
|
+
}
|
38
|
+
</style>
|
39
|
+
END_CSS
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: docify
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Dan Sosedoff
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-17 00:00:00 -05:00
|
19
|
+
default_executable: docify
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: github-markup
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 5
|
33
|
+
- 3
|
34
|
+
version: 0.5.3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rdiscount
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 31
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 6
|
49
|
+
- 8
|
50
|
+
version: 1.6.8
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: RedCloth
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 49
|
62
|
+
segments:
|
63
|
+
- 4
|
64
|
+
- 2
|
65
|
+
- 3
|
66
|
+
version: 4.2.3
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
description: Docify provides a command line tool to render documentation files (RDoc, Markdown, Textile) into nice-looking html.
|
70
|
+
email: dan.sosedoff@gmail.com
|
71
|
+
executables:
|
72
|
+
- docify
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files: []
|
76
|
+
|
77
|
+
files:
|
78
|
+
- Rakefile
|
79
|
+
- bin/docify
|
80
|
+
- lib/docify/document.rb
|
81
|
+
- lib/docify/format.rb
|
82
|
+
- lib/docify/style.rb
|
83
|
+
- lib/docify/version.rb
|
84
|
+
- lib/docify.rb
|
85
|
+
- README.rdoc
|
86
|
+
has_rdoc: true
|
87
|
+
homepage: http://github.com/sosedoff/docify
|
88
|
+
licenses: []
|
89
|
+
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
version: "0"
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
requirements: []
|
114
|
+
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 1.5.2
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Docify - Render documentation with favorite markup into html.
|
120
|
+
test_files: []
|
121
|
+
|