md2man 1.5.1 → 1.6.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.markdown +28 -21
- data/VERSION.markdown +24 -0
- data/bin/md2man +2 -2
- data/bin/md2man-html +1 -1
- data/bin/md2man-rake +58 -0
- data/lib/md2man/rakefile/style.css +74 -0
- data/lib/md2man/rakefile.rb +11 -63
- data/lib/md2man/version.rb +1 -1
- data/man/README.html +111 -0
- data/man/README.markdown +195 -0
- data/man/VERSION.html +189 -0
- data/man/VERSION.markdown +262 -0
- data/man/index.html +11 -0
- data/man/man1/md2man-html.1 +1 -1
- data/man/man1/md2man-html.1.html +15 -0
- data/man/man1/md2man-rake.1 +49 -0
- data/man/man1/md2man-rake.1.html +15 -0
- data/man/man1/md2man.1 +3 -2
- data/man/man1/md2man.1.html +37 -0
- data/man/style.css +74 -0
- data/md2man.gemspec +4 -1
- metadata +16 -3
data/README.markdown
CHANGED
@@ -112,27 +112,6 @@ Mix-in your own renderer:
|
|
112
112
|
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
113
113
|
your_roff_output = engine.render(your_markdown_input)
|
114
114
|
|
115
|
-
#### Pre-building man pages
|
116
|
-
|
117
|
-
Add the following lines to your gemspec:
|
118
|
-
|
119
|
-
s.files += Dir['man/man?/*.?']
|
120
|
-
s.add_development_dependency 'md2man', '~> 1.4'
|
121
|
-
|
122
|
-
Add the following line to your Rakefile:
|
123
|
-
|
124
|
-
require 'md2man/rakefile'
|
125
|
-
|
126
|
-
You now have a `rake md2man` task that builds manual pages from Markdown files
|
127
|
-
(with ".markdown", ".mkd", or ".md" extension) inside `man/man*/` directories.
|
128
|
-
There are also sub-tasks to build manual pages individually as [roff] or HTML.
|
129
|
-
|
130
|
-
If you're using Bundler, this task also hooks into Bundler's gem packaging
|
131
|
-
tasks and ensures that your manual pages are built for packaging into a gem:
|
132
|
-
|
133
|
-
bundle exec rake build
|
134
|
-
gem spec pkg/*.gem | fgrep man/man
|
135
|
-
|
136
115
|
### For HTML output
|
137
116
|
|
138
117
|
#### At the command line
|
@@ -177,6 +156,34 @@ Mix-in your own renderer:
|
|
177
156
|
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
178
157
|
your_html_output = engine.render(your_markdown_input)
|
179
158
|
|
159
|
+
### Building man pages
|
160
|
+
|
161
|
+
#### At the command line
|
162
|
+
|
163
|
+
md2man-rake --help
|
164
|
+
|
165
|
+
#### Inside a Ruby script
|
166
|
+
|
167
|
+
Add this snippet to your gemspec file:
|
168
|
+
|
169
|
+
s.files += Dir['man/man?/*.?'] # UNIX man pages
|
170
|
+
s.files += Dir['man/**/*.{html,css,js}'] # HTML man pages
|
171
|
+
s.add_development_dependency 'md2man', '~> 1.4'
|
172
|
+
|
173
|
+
Add this line to your Rakefile:
|
174
|
+
|
175
|
+
require 'md2man/rakefile'
|
176
|
+
|
177
|
+
You now have a `rake md2man` task that builds manual pages from Markdown files
|
178
|
+
(with ".markdown", ".mkd", or ".md" extension) inside `man/man*/` directories.
|
179
|
+
There are also sub-tasks to build manual pages individually as [roff] or HTML.
|
180
|
+
|
181
|
+
If you're using Bundler, this task also hooks into Bundler's gem packaging
|
182
|
+
tasks and ensures that your manual pages are built for packaging into a gem:
|
183
|
+
|
184
|
+
bundle exec rake build
|
185
|
+
gem spec pkg/*.gem | fgrep man/
|
186
|
+
|
180
187
|
## License
|
181
188
|
|
182
189
|
Released under the ISC license. See the LICENSE file for details.
|
data/VERSION.markdown
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
## Version 1.6.0 (2013-03-10)
|
2
|
+
|
3
|
+
Minor:
|
4
|
+
|
5
|
+
* Added an md2man-rake(1) executable that lets you run md2man's rake(1)
|
6
|
+
tasks _directly_ from the command line: without the need for a "Rakefile"
|
7
|
+
in your working directory that loads the `md2man/rakefile` library.
|
8
|
+
|
9
|
+
* In web pages generated by the `md2man:web` Rake task:
|
10
|
+
|
11
|
+
* extract CSS into a separate `man/style.css` file
|
12
|
+
|
13
|
+
* center manpage on screen & auto-split into columns
|
14
|
+
|
15
|
+
Patch:
|
16
|
+
|
17
|
+
* In web pages generated by the `md2man:web` Rake task:
|
18
|
+
|
19
|
+
* don't rely on being emitted into a `man/` directory
|
20
|
+
|
21
|
+
Other:
|
22
|
+
|
23
|
+
* add README and VERSION to generated HTML man pages
|
24
|
+
|
1
25
|
## Version 1.5.1 (2013-03-06)
|
2
26
|
|
3
27
|
Patch:
|
data/bin/md2man
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
=begin =======================================================================
|
3
3
|
|
4
|
-
# MD2MAN 1 2013-03-
|
4
|
+
# MD2MAN 1 2013-03-10 1.6.0
|
5
5
|
|
6
6
|
## NAME
|
7
7
|
|
@@ -53,7 +53,7 @@ The following [Redcarpet] extensions are enabled while processing markdown(7):
|
|
53
53
|
|
54
54
|
## SEE ALSO
|
55
55
|
|
56
|
-
md2man-html(1)
|
56
|
+
md2man-html(1), md2man-rake(1)
|
57
57
|
|
58
58
|
[md2man]: https://github.com/sunaku/md2man
|
59
59
|
[Redcarpet]: https://github.com/vmg/redcarpet
|
data/bin/md2man-html
CHANGED
data/bin/md2man-rake
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
=begin =======================================================================
|
3
|
+
|
4
|
+
# MD2MAN-RAKE 1 2013-03-10 1.6.0
|
5
|
+
|
6
|
+
## NAME
|
7
|
+
|
8
|
+
md2man-rake - run rake(1) tasks from md2man(1)
|
9
|
+
|
10
|
+
## SYNOPSIS
|
11
|
+
|
12
|
+
`md2man-rake` [*OPTION*]... [*TASK*]...
|
13
|
+
|
14
|
+
## DESCRIPTION
|
15
|
+
|
16
|
+
This program lets you run rake(1) tasks provided by md2man(1) without having
|
17
|
+
to create a special file named `Rakefile` that contains the following snippet:
|
18
|
+
|
19
|
+
require 'md2man/rakefile'
|
20
|
+
|
21
|
+
If no *TASK* is specified, then the `md2man` task is run by default.
|
22
|
+
|
23
|
+
## TASKS
|
24
|
+
|
25
|
+
`md2man`
|
26
|
+
Runs the `md2man:man` and `md2man:web` tasks, in that order.
|
27
|
+
|
28
|
+
`md2man:man`
|
29
|
+
Builds UNIX manual pages from `*.markdown`, `*.mkd`, and `*.md` files
|
30
|
+
found in or beneath the `man/` subdirectory in your working directory.
|
31
|
+
|
32
|
+
`md2man:web`
|
33
|
+
Builds HTML manual pages from `*.markdown`, `*.mkd`, and `*.md` files
|
34
|
+
found in or beneath the `man/` subdirectory in your working directory.
|
35
|
+
|
36
|
+
## OPTIONS
|
37
|
+
|
38
|
+
`-h`, `--help`
|
39
|
+
Show this help manual.
|
40
|
+
|
41
|
+
Run `rake --help` to see more options.
|
42
|
+
|
43
|
+
## SEE ALSO
|
44
|
+
|
45
|
+
rake(1), md2man(1), markdown(7)
|
46
|
+
|
47
|
+
=end =========================================================================
|
48
|
+
|
49
|
+
require 'binman'
|
50
|
+
BinMan.help
|
51
|
+
|
52
|
+
require 'rake'
|
53
|
+
Rake.application.init File.basename(__FILE__)
|
54
|
+
|
55
|
+
require 'md2man/rakefile'
|
56
|
+
task :default => :md2man
|
57
|
+
|
58
|
+
Rake.application.top_level
|
@@ -0,0 +1,74 @@
|
|
1
|
+
@import url('http://twitter.github.com/bootstrap/assets/css/bootstrap.css');
|
2
|
+
|
3
|
+
@media all {
|
4
|
+
.manpage h1,
|
5
|
+
.manpage h2,
|
6
|
+
.manpage h3,
|
7
|
+
.manpage h4,
|
8
|
+
.manpage h5,
|
9
|
+
.manpage h6 {
|
10
|
+
margin-top: 1em;
|
11
|
+
}
|
12
|
+
|
13
|
+
/* deactivate external manual page cross-references */
|
14
|
+
a.manpage-reference:not([href]) {
|
15
|
+
color: inherit;
|
16
|
+
text-decoration: none;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
@media screen {
|
21
|
+
body {
|
22
|
+
column-count: auto;
|
23
|
+
-moz-column-count: auto;
|
24
|
+
-webkit-column-count: auto;
|
25
|
+
|
26
|
+
column-width: 78ex;
|
27
|
+
-moz-column-width: 78ex;
|
28
|
+
-webkit-column-width: 78ex;
|
29
|
+
|
30
|
+
column-gap: none;
|
31
|
+
-moz-column-gap: none;
|
32
|
+
-webkit-column-gap: none;
|
33
|
+
|
34
|
+
column-rule: thin solid Gainsboro;
|
35
|
+
-moz-column-rule: thin solid Gainsboro;
|
36
|
+
-webkit-column-rule: thin solid Gainsboro;
|
37
|
+
}
|
38
|
+
|
39
|
+
.manpage {
|
40
|
+
font-family: monospace;
|
41
|
+
max-width: 78ex;
|
42
|
+
margin: auto;
|
43
|
+
}
|
44
|
+
|
45
|
+
.manpage > h1:first-child {
|
46
|
+
margin-top: -5em;
|
47
|
+
font-weight: normal;
|
48
|
+
font-size: smaller;
|
49
|
+
text-align: right;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
@media print {
|
54
|
+
.navbar {
|
55
|
+
display: none;
|
56
|
+
}
|
57
|
+
|
58
|
+
/* improve readability of revealed hyperlink URLs */
|
59
|
+
a:after {
|
60
|
+
font-family: monospace;
|
61
|
+
}
|
62
|
+
|
63
|
+
/* internal links and manual page cross-references */
|
64
|
+
a[href^='#'], a[href^='../man'] {
|
65
|
+
color: inherit;
|
66
|
+
font-weight: bolder;
|
67
|
+
text-decoration: none;
|
68
|
+
}
|
69
|
+
|
70
|
+
/* undo bootstrap's revealing of those hyperlinks */
|
71
|
+
a[href^='#']:after, a[href^='../man']:after {
|
72
|
+
content: none;
|
73
|
+
}
|
74
|
+
}
|
data/lib/md2man/rakefile.rb
CHANGED
@@ -37,10 +37,10 @@ end
|
|
37
37
|
|
38
38
|
#-----------------------------------------------------------------------------
|
39
39
|
desc 'Build HTML manual pages from Markdown files in man/.'
|
40
|
-
task 'md2man:web' => 'man/index.html'
|
40
|
+
task 'md2man:web' => ['man/index.html', 'man/style.css']
|
41
41
|
#-----------------------------------------------------------------------------
|
42
42
|
|
43
|
-
wrap_html_template = lambda do |title, content|
|
43
|
+
wrap_html_template = lambda do |title, content, ascent|
|
44
44
|
<<WRAP_HTML_TEMPLATE
|
45
45
|
<!DOCTYPE html>
|
46
46
|
<html>
|
@@ -48,62 +48,8 @@ wrap_html_template = lambda do |title, content|
|
|
48
48
|
<meta charset="utf-8" />
|
49
49
|
<meta name="generator" content="md2man #{Md2Man::VERSION} https://github.com/sunaku/md2man" />
|
50
50
|
<title>#{title}</title>
|
51
|
+
<link rel="stylesheet" href="#{ascent}style.css"/>
|
51
52
|
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
|
52
|
-
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" />
|
53
|
-
<style type="text/css">
|
54
|
-
@media all {
|
55
|
-
.manpage h1,
|
56
|
-
.manpage h2,
|
57
|
-
.manpage h3,
|
58
|
-
.manpage h4,
|
59
|
-
.manpage h5,
|
60
|
-
.manpage h6 {
|
61
|
-
margin-top: 1em;
|
62
|
-
}
|
63
|
-
|
64
|
-
/* deactivate external manual page cross-references */
|
65
|
-
a.manpage-reference:not([href]) {
|
66
|
-
color: inherit;
|
67
|
-
text-decoration: none;
|
68
|
-
}
|
69
|
-
}
|
70
|
-
@media screen {
|
71
|
-
.manpage {
|
72
|
-
font-family: monospace;
|
73
|
-
max-width: 78ex;
|
74
|
-
}
|
75
|
-
|
76
|
-
.manpage > h1:first-child {
|
77
|
-
margin-top: -5em;
|
78
|
-
font-weight: normal;
|
79
|
-
font-size: smaller;
|
80
|
-
text-align: right;
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
@media print {
|
85
|
-
.navbar {
|
86
|
-
display: none;
|
87
|
-
}
|
88
|
-
|
89
|
-
/* improve readability of revealed hyperlink URLs */
|
90
|
-
a:after {
|
91
|
-
font-family: monospace;
|
92
|
-
}
|
93
|
-
|
94
|
-
/* internal links and manual page cross-references */
|
95
|
-
a[href^='#'], a[href^='../man'] {
|
96
|
-
color: inherit;
|
97
|
-
font-weight: bolder;
|
98
|
-
text-decoration: none;
|
99
|
-
}
|
100
|
-
|
101
|
-
/* undo bootstrap's revealing of those hyperlinks */
|
102
|
-
a[href^='#']:after, a[href^='../man']:after {
|
103
|
-
content: none;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
</style>
|
107
53
|
</head>
|
108
54
|
<body>#{content}</body>
|
109
55
|
</html>
|
@@ -122,14 +68,12 @@ end
|
|
122
68
|
|
123
69
|
file 'man/index.html' => webs do |t|
|
124
70
|
buffer = ['<div class="container-fluid">']
|
125
|
-
webs.sort.group_by {|web| web.pathmap('%d') }.each do |
|
126
|
-
subdir = dir.sub('man/', '')
|
71
|
+
webs.sort.group_by {|web| web.pathmap('%d').sub('man/', '') }.each do |subdir, dir_webs|
|
127
72
|
buffer << %{<h2 id="#{subdir}">#{subdir}</h2>}
|
128
|
-
|
129
73
|
dir_webs.each do |web|
|
130
74
|
name = parse_manpage_name.call(web)
|
131
75
|
info = parse_manpage_info.call(File.read(web))
|
132
|
-
link = %{<a href="
|
76
|
+
link = %{<a href="#{web.sub('man/', '')}">#{name}</a>}
|
133
77
|
buffer << %{<dl class="dl-horizontal"><dt>#{link}</dt><dd>#{info}</dd></dl>}
|
134
78
|
end
|
135
79
|
end
|
@@ -137,10 +81,14 @@ file 'man/index.html' => webs do |t|
|
|
137
81
|
content = buffer.join
|
138
82
|
|
139
83
|
title = t.name.pathmap('%X')
|
140
|
-
output = wrap_html_template.call(title, content)
|
84
|
+
output = wrap_html_template.call(title, content, nil)
|
141
85
|
File.open(t.name, 'w') {|f| f << output }
|
142
86
|
end
|
143
87
|
|
88
|
+
file 'man/style.css' => __FILE__.pathmap('%X/style.css') do |t|
|
89
|
+
cp t.prerequisites.first, t.name if t.needed?
|
90
|
+
end
|
91
|
+
|
144
92
|
mkds.zip(webs).each do |src, dst|
|
145
93
|
render_file_task.call src, dst, lambda {|input|
|
146
94
|
require 'md2man/html/engine'
|
@@ -173,6 +121,6 @@ mkds.zip(webs).each do |src, dst|
|
|
173
121
|
'</div>',
|
174
122
|
].join
|
175
123
|
|
176
|
-
wrap_html_template.call title, content
|
124
|
+
wrap_html_template.call title, content, ascent
|
177
125
|
}
|
178
126
|
end
|
data/lib/md2man/version.rb
CHANGED
data/man/README.html
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="generator" content="md2man 1.6.0 https://github.com/sunaku/md2man" />
|
6
|
+
<title>README</title>
|
7
|
+
<link rel="stylesheet" href="style.css"/>
|
8
|
+
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
|
9
|
+
</head>
|
10
|
+
<body><div class="navbar"><div class="navbar-inner"><span class="brand"><a href="index.html#man">man</a>/README</span></div></div><div class="container-fluid"><div class="manpage"><h1 id="md2man-markdown-to-manpage">md2man - markdown to manpage</h1><p>md2man is a Ruby library and command-line program that converts <a href="http://daringfireball.net/projects/markdown/">Markdown</a>
|
11
|
+
documents into UNIX manual pages (both <a href="http://troff.org">roff</a> and HTML) using <a href="https://github.com/vmg/redcarpet">Redcarpet</a>.</p><h2 id="Features">Features</h2>
|
12
|
+
<ul>
|
13
|
+
<li><p>Formats tagged and indented paragraphs (see "document format" below).</p></li>
|
14
|
+
<li><p>Translates all HTML4 and XHTML1 entities into native <a href="http://troff.org">roff</a> equivalents.</p></li>
|
15
|
+
<li><p>Supports markdown extensions such as <a href="http://michelf.com/projects/php-markdown/extra/#table">PHP Markdown Extra tables</a>.</p></li>
|
16
|
+
<li><p>Usable from the command line as a filter in a UNIX pipeline.</p></li>
|
17
|
+
</ul>
|
18
|
+
<h3 id="Demonstration">Demonstration</h3><p>Try converting <a href="https://raw.github.com/sunaku/md2man/master/EXAMPLE.markdown">this example Markdown file</a> into a UNIX manual page:</p><pre><code>md2man EXAMPLE.markdown > EXAMPLE.1
|
19
|
+
man -l EXAMPLE.1
|
20
|
+
</code></pre><p><img src="https://raw.github.com/sunaku/md2man/master/EXAMPLE.png" alt="Obligatory screenshot of <a class="manpage-reference">md2man(1)</a> in action!"></p><h3 id="Limitations">Limitations</h3><p>At present, md2man does not translate the following <a href="https://github.com/vmg/redcarpet">Redcarpet</a> node types:</p>
|
21
|
+
<ul>
|
22
|
+
<li><code>block_html</code></li>
|
23
|
+
<li><code>strikethrough</code></li>
|
24
|
+
<li><code>superscript</code></li>
|
25
|
+
<li><code>image</code></li>
|
26
|
+
<li><code>raw_html</code></li>
|
27
|
+
</ul>
|
28
|
+
<p>It issues a warning when it encounters these instead. Patches are welcome!</p><h2 id="Installation">Installation</h2><pre><code>gem install md2man
|
29
|
+
</code></pre><h3 id="Development">Development</h3><pre><code>git clone git://github.com/sunaku/md2man
|
30
|
+
cd md2man
|
31
|
+
bundle install
|
32
|
+
bundle exec md2man --help # run it directly
|
33
|
+
bundle exec rake --tasks # packaging tasks
|
34
|
+
</code></pre><h2 id="Usage">Usage</h2><h3 id="Document-format">Document format</h3><p>md2man extends <a href="http://daringfireball.net/projects/markdown/">Markdown</a> syntax in the following ways, as provisioned in the
|
35
|
+
<code>Md2Man::Document</code> module and defined in its derivative <code>Md2Man::Roff</code> module:</p>
|
36
|
+
<ul>
|
37
|
+
<li><p>Paragraphs whose lines are all uniformly indented by two spaces are
|
38
|
+
considered to be "indented paragraphs". They are unindented accordingly
|
39
|
+
before emission as <code>.IP</code> in the <a href="http://troff.org">roff</a> output.</p></li>
|
40
|
+
<li><p>Paragraphs whose subsequent lines (all except the first) are uniformly
|
41
|
+
indented by two spaces are considered to be a "tagged paragraphs". They
|
42
|
+
are unindented accordingly before emission as <code>.TP</code> in the <a href="http://troff.org">roff</a> output.</p></li>
|
43
|
+
</ul>
|
44
|
+
<p>md2man extends <a href="http://daringfireball.net/projects/markdown/">Markdown</a> semantics in the following ways:</p>
|
45
|
+
<ul>
|
46
|
+
<li>The first top-level heading (H1) found in the document is emitted as <code>.TH</code>
|
47
|
+
in the <a class="manpage-reference">roff(7)</a> output to define the UNIX manual page's header and footer.
|
48
|
+
Any subsequent top-level headings (H1) are treated as second-level (H2).</li>
|
49
|
+
</ul>
|
50
|
+
<h3 id="For-roff-output">For <a href="http://troff.org">roff</a> output</h3><h4 id="At-the-command-line">At the command line</h4><pre><code>md2man --help
|
51
|
+
</code></pre><h4 id="Inside-a-Ruby-script">Inside a Ruby script</h4><p>Use the default renderer:</p><pre><code>require 'md2man'
|
52
|
+
|
53
|
+
your_roff_output = Md2Man::ENGINE.render(your_markdown_input)
|
54
|
+
</code></pre><p>Build your own renderer:</p><pre><code>require 'md2man'
|
55
|
+
|
56
|
+
engine = Redcarpet::Markdown.new(Md2Man::Engine, your_options_hash)
|
57
|
+
your_roff_output = engine.render(your_markdown_input)
|
58
|
+
</code></pre><p>Define your own renderer:</p><pre><code>require 'md2man'
|
59
|
+
|
60
|
+
class YourManpageRenderer < Md2Man::Engine
|
61
|
+
# ... your stuff here ...
|
62
|
+
end
|
63
|
+
|
64
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
65
|
+
your_roff_output = engine.render(your_markdown_input)
|
66
|
+
</code></pre><p>Mix-in your own renderer:</p><pre><code>require 'md2man'
|
67
|
+
|
68
|
+
class YourManpageRenderer < Redcarpet::Render::Base
|
69
|
+
include Md2Man::Roff
|
70
|
+
# ... your stuff here ...
|
71
|
+
end
|
72
|
+
|
73
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
74
|
+
your_roff_output = engine.render(your_markdown_input)
|
75
|
+
</code></pre><h3 id="For-HTML-output">For HTML output</h3><h4 id="At-the-command-line">At the command line</h4><pre><code>md2man-html --help
|
76
|
+
</code></pre><h4 id="Inside-a-Ruby-script">Inside a Ruby script</h4><p>Use the default renderer:</p><pre><code>require 'md2man/html/engine'
|
77
|
+
|
78
|
+
your_html_output = Md2Man::HTML::ENGINE.render(your_markdown_input)
|
79
|
+
</code></pre><p>Build your own renderer:</p><pre><code>require 'md2man/html/engine'
|
80
|
+
|
81
|
+
engine = Redcarpet::Markdown.new(Md2Man::HTML::Engine, your_options_hash)
|
82
|
+
your_html_output = engine.render(your_markdown_input)
|
83
|
+
</code></pre><p>Define your own renderer:</p><pre><code>require 'md2man/html/engine'
|
84
|
+
|
85
|
+
class YourManpageRenderer < Md2Man::HTML::Engine
|
86
|
+
# ... your stuff here ...
|
87
|
+
end
|
88
|
+
|
89
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
90
|
+
your_html_output = engine.render(your_markdown_input)
|
91
|
+
</code></pre><p>Mix-in your own renderer:</p><pre><code>require 'md2man/html'
|
92
|
+
|
93
|
+
class YourManpageRenderer < Redcarpet::Render::Base
|
94
|
+
include Md2Man::HTML
|
95
|
+
# ... your stuff here ...
|
96
|
+
end
|
97
|
+
|
98
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
99
|
+
your_html_output = engine.render(your_markdown_input)
|
100
|
+
</code></pre><h3 id="Building-man-pages">Building man pages</h3><h4 id="At-the-command-line">At the command line</h4><pre><code>md2man-rake --help
|
101
|
+
</code></pre><h4 id="Inside-a-Ruby-script">Inside a Ruby script</h4><p>Add this snippet to your gemspec file:</p><pre><code>s.files += Dir['man/man?/*.?'] # UNIX man pages
|
102
|
+
s.files += Dir['man/**/*.{html,css,js}'] # HTML man pages
|
103
|
+
s.add_development_dependency 'md2man', '~> 1.4'
|
104
|
+
</code></pre><p>Add this line to your Rakefile:</p><pre><code>require 'md2man/rakefile'
|
105
|
+
</code></pre><p>You now have a <code>rake md2man</code> task that builds manual pages from Markdown files
|
106
|
+
(with ".markdown", ".mkd", or ".md" extension) inside <code>man/man*/</code> directories.
|
107
|
+
There are also sub-tasks to build manual pages individually as <a href="http://troff.org">roff</a> or HTML.</p><p>If you're using Bundler, this task also hooks into Bundler's gem packaging
|
108
|
+
tasks and ensures that your manual pages are built for packaging into a gem:</p><pre><code>bundle exec rake build
|
109
|
+
gem spec pkg/*.gem | fgrep man/
|
110
|
+
</code></pre><h2 id="License">License</h2><p>Released under the ISC license. See the LICENSE file for details.</p></div></div></body>
|
111
|
+
</html>
|
data/man/README.markdown
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
# md2man - markdown to manpage
|
2
|
+
|
3
|
+
md2man is a Ruby library and command-line program that converts [Markdown]
|
4
|
+
documents into UNIX manual pages (both [roff] and HTML) using [Redcarpet].
|
5
|
+
|
6
|
+
## Features
|
7
|
+
|
8
|
+
* Formats tagged and indented paragraphs (see "document format" below).
|
9
|
+
|
10
|
+
* Translates all HTML4 and XHTML1 entities into native [roff] equivalents.
|
11
|
+
|
12
|
+
* Supports markdown extensions such as [PHP Markdown Extra tables][tables].
|
13
|
+
|
14
|
+
* Usable from the command line as a filter in a UNIX pipeline.
|
15
|
+
|
16
|
+
### Demonstration
|
17
|
+
|
18
|
+
Try converting [this example Markdown file][example] into a UNIX manual page:
|
19
|
+
|
20
|
+
md2man EXAMPLE.markdown > EXAMPLE.1
|
21
|
+
man -l EXAMPLE.1
|
22
|
+
|
23
|
+

|
25
|
+
|
26
|
+
### Limitations
|
27
|
+
|
28
|
+
At present, md2man does not translate the following [Redcarpet] node types:
|
29
|
+
|
30
|
+
* `block_html`
|
31
|
+
* `strikethrough`
|
32
|
+
* `superscript`
|
33
|
+
* `image`
|
34
|
+
* `raw_html`
|
35
|
+
|
36
|
+
It issues a warning when it encounters these instead. Patches are welcome!
|
37
|
+
|
38
|
+
## Installation
|
39
|
+
|
40
|
+
gem install md2man
|
41
|
+
|
42
|
+
### Development
|
43
|
+
|
44
|
+
git clone git://github.com/sunaku/md2man
|
45
|
+
cd md2man
|
46
|
+
bundle install
|
47
|
+
bundle exec md2man --help # run it directly
|
48
|
+
bundle exec rake --tasks # packaging tasks
|
49
|
+
|
50
|
+
## Usage
|
51
|
+
|
52
|
+
### Document format
|
53
|
+
|
54
|
+
md2man extends [Markdown] syntax in the following ways, as provisioned in the
|
55
|
+
`Md2Man::Document` module and defined in its derivative `Md2Man::Roff` module:
|
56
|
+
|
57
|
+
* Paragraphs whose lines are all uniformly indented by two spaces are
|
58
|
+
considered to be "indented paragraphs". They are unindented accordingly
|
59
|
+
before emission as `.IP` in the [roff] output.
|
60
|
+
|
61
|
+
* Paragraphs whose subsequent lines (all except the first) are uniformly
|
62
|
+
indented by two spaces are considered to be a "tagged paragraphs". They
|
63
|
+
are unindented accordingly before emission as `.TP` in the [roff] output.
|
64
|
+
|
65
|
+
md2man extends [Markdown] semantics in the following ways:
|
66
|
+
|
67
|
+
* The first top-level heading (H1) found in the document is emitted as `.TH`
|
68
|
+
in the roff(7) output to define the UNIX manual page's header and footer.
|
69
|
+
Any subsequent top-level headings (H1) are treated as second-level (H2).
|
70
|
+
|
71
|
+
### For [roff] output
|
72
|
+
|
73
|
+
#### At the command line
|
74
|
+
|
75
|
+
md2man --help
|
76
|
+
|
77
|
+
#### Inside a Ruby script
|
78
|
+
|
79
|
+
Use the default renderer:
|
80
|
+
|
81
|
+
require 'md2man'
|
82
|
+
|
83
|
+
your_roff_output = Md2Man::ENGINE.render(your_markdown_input)
|
84
|
+
|
85
|
+
Build your own renderer:
|
86
|
+
|
87
|
+
require 'md2man'
|
88
|
+
|
89
|
+
engine = Redcarpet::Markdown.new(Md2Man::Engine, your_options_hash)
|
90
|
+
your_roff_output = engine.render(your_markdown_input)
|
91
|
+
|
92
|
+
Define your own renderer:
|
93
|
+
|
94
|
+
require 'md2man'
|
95
|
+
|
96
|
+
class YourManpageRenderer < Md2Man::Engine
|
97
|
+
# ... your stuff here ...
|
98
|
+
end
|
99
|
+
|
100
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
101
|
+
your_roff_output = engine.render(your_markdown_input)
|
102
|
+
|
103
|
+
Mix-in your own renderer:
|
104
|
+
|
105
|
+
require 'md2man'
|
106
|
+
|
107
|
+
class YourManpageRenderer < Redcarpet::Render::Base
|
108
|
+
include Md2Man::Roff
|
109
|
+
# ... your stuff here ...
|
110
|
+
end
|
111
|
+
|
112
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
113
|
+
your_roff_output = engine.render(your_markdown_input)
|
114
|
+
|
115
|
+
### For HTML output
|
116
|
+
|
117
|
+
#### At the command line
|
118
|
+
|
119
|
+
md2man-html --help
|
120
|
+
|
121
|
+
#### Inside a Ruby script
|
122
|
+
|
123
|
+
Use the default renderer:
|
124
|
+
|
125
|
+
require 'md2man/html/engine'
|
126
|
+
|
127
|
+
your_html_output = Md2Man::HTML::ENGINE.render(your_markdown_input)
|
128
|
+
|
129
|
+
Build your own renderer:
|
130
|
+
|
131
|
+
require 'md2man/html/engine'
|
132
|
+
|
133
|
+
engine = Redcarpet::Markdown.new(Md2Man::HTML::Engine, your_options_hash)
|
134
|
+
your_html_output = engine.render(your_markdown_input)
|
135
|
+
|
136
|
+
Define your own renderer:
|
137
|
+
|
138
|
+
require 'md2man/html/engine'
|
139
|
+
|
140
|
+
class YourManpageRenderer < Md2Man::HTML::Engine
|
141
|
+
# ... your stuff here ...
|
142
|
+
end
|
143
|
+
|
144
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
145
|
+
your_html_output = engine.render(your_markdown_input)
|
146
|
+
|
147
|
+
Mix-in your own renderer:
|
148
|
+
|
149
|
+
require 'md2man/html'
|
150
|
+
|
151
|
+
class YourManpageRenderer < Redcarpet::Render::Base
|
152
|
+
include Md2Man::HTML
|
153
|
+
# ... your stuff here ...
|
154
|
+
end
|
155
|
+
|
156
|
+
engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
|
157
|
+
your_html_output = engine.render(your_markdown_input)
|
158
|
+
|
159
|
+
### Building man pages
|
160
|
+
|
161
|
+
#### At the command line
|
162
|
+
|
163
|
+
md2man-rake --help
|
164
|
+
|
165
|
+
#### Inside a Ruby script
|
166
|
+
|
167
|
+
Add this snippet to your gemspec file:
|
168
|
+
|
169
|
+
s.files += Dir['man/man?/*.?'] # UNIX man pages
|
170
|
+
s.files += Dir['man/**/*.{html,css,js}'] # HTML man pages
|
171
|
+
s.add_development_dependency 'md2man', '~> 1.4'
|
172
|
+
|
173
|
+
Add this line to your Rakefile:
|
174
|
+
|
175
|
+
require 'md2man/rakefile'
|
176
|
+
|
177
|
+
You now have a `rake md2man` task that builds manual pages from Markdown files
|
178
|
+
(with ".markdown", ".mkd", or ".md" extension) inside `man/man*/` directories.
|
179
|
+
There are also sub-tasks to build manual pages individually as [roff] or HTML.
|
180
|
+
|
181
|
+
If you're using Bundler, this task also hooks into Bundler's gem packaging
|
182
|
+
tasks and ensures that your manual pages are built for packaging into a gem:
|
183
|
+
|
184
|
+
bundle exec rake build
|
185
|
+
gem spec pkg/*.gem | fgrep man/
|
186
|
+
|
187
|
+
## License
|
188
|
+
|
189
|
+
Released under the ISC license. See the LICENSE file for details.
|
190
|
+
|
191
|
+
[roff]: http://troff.org
|
192
|
+
[Markdown]: http://daringfireball.net/projects/markdown/
|
193
|
+
[Redcarpet]: https://github.com/vmg/redcarpet
|
194
|
+
[example]: https://raw.github.com/sunaku/md2man/master/EXAMPLE.markdown
|
195
|
+
[tables]: http://michelf.com/projects/php-markdown/extra/#table
|