md2man 1.4.1 → 1.4.2

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/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