md2man 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.markdown CHANGED
@@ -1,3 +1,21 @@
1
+ ## Version 1.4.2 (2013-02-24)
2
+
3
+ Patch:
4
+
5
+ * The `md2man:web` task from `md2man/rakefile` now:
6
+
7
+ * emits valid HTML5 with helpful HTML page titles
8
+
9
+ * uses Twitter Bootstrap styling for HTML man pages
10
+
11
+ * emits only ONE index page for all HTML man pages
12
+
13
+ Other:
14
+
15
+ * README: better organize the subsections of "Usage"
16
+
17
+ * include md2man rake tasks in developer's rakefile
18
+
1
19
  ## Version 1.4.1 (2013-02-23)
2
20
 
3
21
  Patch:
data/README.markdown CHANGED
@@ -45,15 +45,36 @@ It issues a warning when it encounters these instead. Patches are welcome!
45
45
  cd md2man
46
46
  bundle install
47
47
  bundle exec md2man --help # run it directly
48
- bundle exec rake -T # packaging tasks
48
+ bundle exec rake --tasks # packaging tasks
49
49
 
50
- ## Usage (for [roff] output)
50
+ ## Usage
51
51
 
52
- ### At the command line
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
53
74
 
54
75
  md2man --help
55
76
 
56
- ### Inside a Ruby script
77
+ #### Inside a Ruby script
57
78
 
58
79
  Use the default renderer:
59
80
 
@@ -91,13 +112,34 @@ Mix-in your own renderer:
91
112
  engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
92
113
  your_roff_output = engine.render(your_markdown_input)
93
114
 
94
- ## Usage (for HTML output)
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
+ ### For HTML output
95
137
 
96
- ### At the command line
138
+ #### At the command line
97
139
 
98
140
  md2man-html --help
99
141
 
100
- ### Inside a Ruby script
142
+ #### Inside a Ruby script
101
143
 
102
144
  Use the default renderer:
103
145
 
@@ -135,46 +177,6 @@ Mix-in your own renderer:
135
177
  engine = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
136
178
  your_html_output = engine.render(your_markdown_input)
137
179
 
138
- ### Document format
139
-
140
- md2man extends [Markdown] syntax in the following ways, as provisioned in the
141
- `Md2Man::Document` module and defined in its derivative `Md2Man::Roff` module:
142
-
143
- * Paragraphs whose lines are all uniformly indented by two spaces are
144
- considered to be "indented paragraphs". They are unindented accordingly
145
- before emission as `.IP` in the [roff] output.
146
-
147
- * Paragraphs whose subsequent lines (all except the first) are uniformly
148
- indented by two spaces are considered to be a "tagged paragraphs". They
149
- are unindented accordingly before emission as `.TP` in the [roff] output.
150
-
151
- md2man extends [Markdown] semantics in the following ways:
152
-
153
- * The first top-level heading (H1) found in the document is emitted as `.TH`
154
- in the roff(7) output to define the UNIX manual page's header and footer.
155
- Any subsequent top-level headings (H1) are treated as second-level (H2).
156
-
157
- ### Pre-building man pages
158
-
159
- Add the following lines to your gemspec:
160
-
161
- s.files += Dir['man/man?/*.?']
162
- s.add_development_dependency 'md2man', '~> 1.4'
163
-
164
- Add the following line to your Rakefile:
165
-
166
- require 'md2man/rakefile'
167
-
168
- You now have a `rake md2man` task that builds manual pages from Markdown files
169
- (with ".markdown", ".mkd", or ".md" extension) inside `man/man*/` directories.
170
- There are also sub-tasks to build manual pages individually as [roff] or HTML.
171
-
172
- If you're using Bundler, this task also hooks into Bundler's gem packaging
173
- tasks and ensures that your manual pages are built for packaging into a gem:
174
-
175
- bundle exec rake build
176
- gem spec pkg/*.gem | fgrep man/man
177
-
178
180
  ## License
179
181
 
180
182
  Released under the ISC license. See the LICENSE file for details.
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "binman/rakefile"
3
+ require "md2man/rakefile"
data/bin/md2man CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  =begin =======================================================================
3
3
 
4
- # MD2MAN 1 2013-02-23 1.4.1
4
+ # MD2MAN 1 2013-02-24 1.4.2
5
5
 
6
6
  ## NAME
7
7
 
data/bin/md2man-html CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  =begin =======================================================================
3
3
 
4
- # MD2MAN-HTML 1 2013-02-23 1.4.1
4
+ # MD2MAN-HTML 1 2013-02-24 1.4.2
5
5
 
6
6
  ## NAME
7
7
 
@@ -40,34 +40,127 @@ desc 'Build HTML manual pages from Markdown files in man/.'
40
40
  task 'md2man:web' => 'man/index.html'
41
41
  #-----------------------------------------------------------------------------
42
42
 
43
+ wrap_html_template = lambda do |title, content|
44
+ <<WRAP_HTML_TEMPLATE
45
+ <!DOCTYPE html>
46
+ <html>
47
+ <head>
48
+ <meta charset="utf-8" />
49
+ <title>#{title}</title>
50
+ <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
51
+ <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" />
52
+ <style type="text/css">
53
+ @media all {
54
+ .manpage h1 {
55
+ font-weight: normal;
56
+ font-size: smaller;
57
+ text-align: right;
58
+ }
59
+ .manpage h2,
60
+ .manpage h3,
61
+ .manpage h4,
62
+ .manpage h5,
63
+ .manpage h6 {
64
+ margin-top: 1em;
65
+ }
66
+ }
67
+ @media screen {
68
+ .manpage {
69
+ font-family: monospace;
70
+ max-width: 78ex;
71
+ }
72
+ .manpage h1 {
73
+ margin-top: -5em;
74
+ }
75
+ }
76
+
77
+ @media print {
78
+ .navbar {
79
+ display: none;
80
+ }
81
+
82
+ /* improve readability of revealed hyperlink URLs */
83
+ a:after {
84
+ font-family: monospace;
85
+ }
86
+
87
+ /* internal links and manual page cross-references */
88
+ a[href^='#'], a[href^='../man'] {
89
+ color: inherit;
90
+ font-weight: bolder;
91
+ text-decoration: none;
92
+ }
93
+
94
+ /* undo bootstrap's revealing of those hyperlinks */
95
+ a[href^='#']:after, a[href^='../man']:after {
96
+ content: none;
97
+ }
98
+ }
99
+ </style>
100
+ </head>
101
+ <body>#{content}</body>
102
+ </html>
103
+ WRAP_HTML_TEMPLATE
104
+ end
105
+
106
+ parse_manpage_name = lambda do |html_file_name|
107
+ html_file_name.pathmap('%n').sub(/\.(.+)$/, '(\1)')
108
+ end
109
+
110
+ parse_manpage_info = lambda do |html_file_body|
111
+ html_file_body.scan(%r{<h2.*?>NAME</h2>(.+?)<h2}m).flatten.first.
112
+ to_s.split(/\s+-\s+/, 2).last.to_s.gsub(/<.+?>/, '') # strip HTML
113
+ end
114
+
43
115
  file 'man/index.html' => webs do |t|
44
- output = []
45
- dirs = webs.group_by {|web| web.pathmap('%d') }.each do |dir, dir_webs|
46
- subdir = dir.pathmap('%f')
47
- output << %{<h2 id="#{subdir}">#{subdir}</h2>}
116
+ buffer = ['<div class="container-fluid">']
117
+ webs.group_by {|web| web.pathmap('%d') }.each do |dir, dir_webs|
118
+ subdir = dir.sub('man/', '')
119
+ buffer << %{<h2 id="#{subdir}">#{subdir}</h2>}
120
+
48
121
  dir_webs.each do |web|
49
- title = web.pathmap('%n').sub(/\.(.+)$/, '(\1)')
50
- link = %{<a href="#{subdir}/#{web.pathmap('%f')}">#{title}</a>}
51
- info = File.read(web).scan(%r{<h2.*?>NAME</h2>(.+?)<h2}m).flatten.first.
52
- to_s.split(/\s+-\s+/, 2).last.to_s.gsub(/<.+?>/, '') # strip HTML
53
- output << "<dl><dt>#{link}</dt><dd>#{info}</dd></dl>"
54
- end
55
- File.open("#{dir}/index.html", 'w') do |f|
56
- f << %{<meta http-equiv="refresh" content="0;url=../index.html##{subdir}"/>}
122
+ name = parse_manpage_name.call(web)
123
+ info = parse_manpage_info.call(File.read(web))
124
+ link = %{<a href="#{subdir}/#{web.pathmap('%f')}">#{name}</a>}
125
+ buffer << %{<dl class="dl-horizontal"><dt>#{link}</dt><dd>#{info}</dd></dl>}
57
126
  end
58
127
  end
59
- File.open(t.name, 'w') {|f| f.puts output }
128
+ buffer << '</div>'
129
+ content = buffer.join
130
+
131
+ title = t.name.pathmap('%X')
132
+ output = wrap_html_template.call(title, content)
133
+ File.open(t.name, 'w') {|f| f << output }
60
134
  end
61
135
 
62
136
  mkds.zip(webs).each do |src, dst|
63
137
  render_file_task.call src, dst, lambda {|input|
64
138
  require 'md2man/html/engine'
65
139
  output = Md2Man::HTML::ENGINE.render(input)
66
- navbar = '<div class="manpath-navigation">' + [
67
- %{<a href="../index.html">#{dst.pathmap('%1d')}</a>},
68
- %{<a href="index.html">#{dst.pathmap('%-1d')}</a>},
69
- %{<a href="">#{dst.pathmap('%n')}</a>},
70
- ].join(' &rarr; ') + '</div>'
71
- [navbar, output, navbar].join('<hr/>')
140
+
141
+ name = parse_manpage_name.call(dst)
142
+ info = parse_manpage_info.call(output)
143
+ title = [name, info].join(' &mdash; ')
144
+
145
+ subdir = dst.pathmap('%d').sub('man/', '')
146
+ ascend = '../' * subdir.count('/').next
147
+ content = [
148
+ '<div class="navbar">',
149
+ '<div class="navbar-inner">',
150
+ '<span class="brand">',
151
+ %{<a href="#{ascend}index.html##{subdir}">#{subdir}</a>},
152
+ '/',
153
+ dst.pathmap('%n'),
154
+ '</span>',
155
+ '</div>',
156
+ '</div>',
157
+ '<div class="container-fluid">',
158
+ '<div class="manpage">',
159
+ output,
160
+ '</div>',
161
+ '</div>',
162
+ ].join
163
+
164
+ wrap_html_template.call title, content
72
165
  }
73
166
  end
@@ -1,3 +1,3 @@
1
1
  module Md2Man
2
- VERSION = "1.4.1"
2
+ VERSION = "1.4.2"
3
3
  end
@@ -1,4 +1,4 @@
1
- .TH MD2MAN\-HTML 1 2013\-02\-23 1.4.1
1
+ .TH MD2MAN\-HTML 1 2013\-02\-24 1.4.2
2
2
  .SH NAME
3
3
  .PP
4
4
  md2man\-html \- convert
data/man/man1/md2man.1 CHANGED
@@ -1,4 +1,4 @@
1
- .TH MD2MAN 1 2013\-02\-23 1.4.1
1
+ .TH MD2MAN 1 2013\-02\-24 1.4.2
2
2
  .SH NAME
3
3
  .PP
4
4
  md2man \- convert
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: md2man
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-23 00:00:00.000000000 Z
12
+ date: 2013-02-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: binman
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  segments:
130
130
  - 0
131
- hash: 2835073792924155153
131
+ hash: -4385989232300827218
132
132
  requirements: []
133
133
  rubyforge_project:
134
134
  rubygems_version: 1.8.23