ronn 0.6.0 → 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +8 -2
- data/Rakefile +2 -0
- data/lib/ronn.rb +1 -1
- data/lib/ronn/document.rb +4 -11
- data/lib/ronn/roff.rb +44 -21
- data/lib/ronn/utils.rb +47 -0
- data/man/ronn.1 +6 -6
- data/man/ronn.1.ronn +1 -1
- data/man/ronn.5 +2 -2
- data/man/ronn.7 +3 -3
- data/ronn.gemspec +6 -1
- data/test/markdown_syntax.html +1 -1
- data/test/missing_spaces.roff +6 -0
- data/test/missing_spaces.ronn +2 -0
- data/test/underline_spacing_test.roff +16 -0
- data/test/underline_spacing_test.ronn +11 -0
- metadata +7 -2
data/CHANGES
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
Ronn CHANGES
|
2
2
|
============
|
3
3
|
|
4
|
-
Version 0.6 (
|
5
|
-
|
4
|
+
Version 0.6.6 (2010 June 13)
|
5
|
+
----------------------------
|
6
|
+
|
7
|
+
Small bug fix release fixes whitespace stripping between adjacent
|
8
|
+
inline elements in roff output (adamv, rtomayko)
|
9
|
+
|
10
|
+
Version 0.6 (2010 June 13)
|
11
|
+
--------------------------
|
6
12
|
|
7
13
|
Features:
|
8
14
|
|
data/Rakefile
CHANGED
@@ -82,6 +82,8 @@ task :rev do
|
|
82
82
|
data = File.read('lib/ronn.rb')
|
83
83
|
data.gsub!(/^( *)REV *=.*/, "\\1REV = '#{rev}'")
|
84
84
|
File.open('lib/ronn.rb', 'wb') { |fd| fd.write(data) }
|
85
|
+
puts "revision: #{rev}"
|
86
|
+
puts "version: #{`ruby -Ilib -rronn -e 'puts Ronn::VERSION'`}"
|
85
87
|
end
|
86
88
|
|
87
89
|
require 'rubygems'
|
data/lib/ronn.rb
CHANGED
data/lib/ronn/document.rb
CHANGED
@@ -4,6 +4,7 @@ require 'hpricot'
|
|
4
4
|
require 'rdiscount'
|
5
5
|
require 'ronn/roff'
|
6
6
|
require 'ronn/template'
|
7
|
+
require 'ronn/utils'
|
7
8
|
|
8
9
|
module Ronn
|
9
10
|
# The Document class can be used to load and inspect a ronn document
|
@@ -15,6 +16,8 @@ module Ronn
|
|
15
16
|
# generated documentation unless overridden by the information
|
16
17
|
# extracted from the document's name section.
|
17
18
|
class Document
|
19
|
+
include Ronn::Utils
|
20
|
+
|
18
21
|
attr_reader :path, :data
|
19
22
|
|
20
23
|
# The man pages name: usually a single word name of
|
@@ -318,7 +321,7 @@ module Ronn
|
|
318
321
|
contents = $1
|
319
322
|
tag, attrs = contents.split(' ', 2)
|
320
323
|
if attrs =~ /\/=/ ||
|
321
|
-
|
324
|
+
html_element?(tag.sub(/^\//, '')) ||
|
322
325
|
data.include?("</#{tag}>")
|
323
326
|
match.to_s
|
324
327
|
else
|
@@ -340,16 +343,6 @@ module Ronn
|
|
340
343
|
end
|
341
344
|
data
|
342
345
|
end
|
343
|
-
|
344
|
-
HTML = %w[
|
345
|
-
a abbr acronym b bdo big br cite code dfn
|
346
|
-
em i img input kbd label q samp select
|
347
|
-
small span strong sub sup textarea tt var
|
348
|
-
address blockquote div dl fieldset form
|
349
|
-
h1 h2 h3 h4 h5 h6 hr noscript ol p pre
|
350
|
-
table ul
|
351
|
-
].to_set
|
352
|
-
|
353
346
|
private
|
354
347
|
def parse_html(html)
|
355
348
|
if html.respond_to?(:doc?) && html.doc?
|
data/lib/ronn/roff.rb
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
require 'hpricot'
|
2
|
+
require 'ronn/utils'
|
2
3
|
|
3
4
|
module Ronn
|
4
5
|
class RoffFilter
|
6
|
+
include Ronn::Utils
|
7
|
+
|
5
8
|
# Convert Ronn HTML to roff.
|
6
9
|
def initialize(html, name, section, tagline, manual=nil, version=nil, date=nil)
|
7
10
|
@buf = []
|
8
11
|
title_heading name, section, tagline, manual, version, date
|
9
|
-
|
10
|
-
|
12
|
+
doc = Hpricot(html)
|
13
|
+
remove_extraneous_elements! doc
|
14
|
+
normalize_whitespace! doc
|
15
|
+
block_filter doc
|
11
16
|
write "\n"
|
12
17
|
end
|
13
18
|
|
@@ -38,30 +43,50 @@ module Ronn
|
|
38
43
|
def title_heading(name, section, tagline, manual, version, date)
|
39
44
|
comment "generated with Ronn/v#{Ronn::VERSION}"
|
40
45
|
comment "http://github.com/rtomayko/ronn/"
|
46
|
+
return if name.nil?
|
41
47
|
macro "TH", %["#{escape(name.upcase)}" "#{section}" "#{date.strftime('%B %Y')}" "#{version}" "#{manual}"]
|
42
48
|
end
|
43
49
|
|
44
|
-
def
|
45
|
-
|
46
|
-
node.
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
def remove_extraneous_elements!(doc)
|
51
|
+
doc.traverse_all_element do |node|
|
52
|
+
if node.comment? || node.procins? || node.doctype? || node.xmldecl?
|
53
|
+
warn 'removing: %p' % [node]
|
54
|
+
node.parent.children.delete(node)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def normalize_whitespace!(node)
|
60
|
+
case
|
61
|
+
when node.kind_of?(Array) || node.kind_of?(Hpricot::Elements)
|
62
|
+
node.to_a.dup.each { |ch| normalize_whitespace! ch }
|
63
|
+
when node.text?
|
64
|
+
preceding, following = node.previous, node.next
|
65
|
+
content = node.content.gsub(/[\n ]+/m, ' ')
|
66
|
+
if preceding.nil? || block_element?(preceding.name) ||
|
67
|
+
preceding.name == 'br'
|
68
|
+
content.lstrip!
|
69
|
+
end
|
70
|
+
if following.nil? || block_element?(following.name) ||
|
71
|
+
following.name == 'br'
|
72
|
+
content.rstrip!
|
73
|
+
end
|
74
|
+
if content.empty?
|
75
|
+
node.parent.children.delete(node)
|
56
76
|
else
|
57
|
-
node.content =
|
58
|
-
node.content = node.content.rstrip if node.next.nil?
|
77
|
+
node.content = content
|
59
78
|
end
|
60
|
-
|
79
|
+
when node.elem? && node.name == 'pre'
|
80
|
+
# stop traversing
|
81
|
+
when node.elem? && node.children
|
82
|
+
normalize_whitespace! node.children
|
83
|
+
when node.elem?
|
84
|
+
# element has no children
|
85
|
+
when node.doc?
|
86
|
+
normalize_whitespace! node.children
|
61
87
|
else
|
62
|
-
warn "
|
88
|
+
warn "unexpected node during whitespace normalization: %p", node.name
|
63
89
|
end
|
64
|
-
node
|
65
90
|
end
|
66
91
|
|
67
92
|
def block_filter(node)
|
@@ -72,7 +97,6 @@ module Ronn
|
|
72
97
|
block_filter(node.children)
|
73
98
|
|
74
99
|
elsif node.text?
|
75
|
-
return if node.to_html =~ /^\s*$/m
|
76
100
|
warn "unexpected text: %p", node
|
77
101
|
|
78
102
|
elsif node.elem?
|
@@ -207,7 +231,6 @@ module Ronn
|
|
207
231
|
gsub(' ', ' ').
|
208
232
|
gsub('<', '<').
|
209
233
|
gsub('>', '>').
|
210
|
-
gsub('>', '>').
|
211
234
|
gsub(/&#x([0-9A-Fa-f]+);/) { $1.to_i(16).chr }.
|
212
235
|
gsub(/&#(\d+);/) { $1.to_i.chr }.
|
213
236
|
gsub('&', '&').
|
data/lib/ronn/utils.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module Ronn
|
5
|
+
module Utils
|
6
|
+
|
7
|
+
# All HTML 4 elements and some that are in common use.
|
8
|
+
HTML = %w[
|
9
|
+
a abbr acronym address applet area b base basefont bdo big blockquote body br
|
10
|
+
button caption center cite code col colgroup dd del dfn dir div dl dt em
|
11
|
+
fieldset font form frame frameset h1 h2 h3 h4 h5 h6 head hr html i iframe img
|
12
|
+
input ins isindex kbd label legend li link map menu meta noframes noscript
|
13
|
+
object ol optgroup option p param pre q s samp script select small span strike
|
14
|
+
strong style sub sup table tbody td textarea tfoot th thead title tr tt u ul var
|
15
|
+
].to_set
|
16
|
+
|
17
|
+
# Block elements.
|
18
|
+
HTML_BLOCK = %w[
|
19
|
+
blockquote body colgroup dd div dl dt fieldset form frame frameset
|
20
|
+
h1 h2 h3 h4 h5 h6 hr head html iframe li noframes noscript
|
21
|
+
object ol optgroup option p param pre script select
|
22
|
+
style table tbody td textarea tfoot th thead title tr tt ul
|
23
|
+
].to_set
|
24
|
+
|
25
|
+
# Inline elements
|
26
|
+
HTML_INLINE = HTML - HTML_BLOCK
|
27
|
+
|
28
|
+
# Elements that don't have a closing tag.
|
29
|
+
HTML_EMPTY = %w[area base basefont br col hr input link meta].to_set
|
30
|
+
|
31
|
+
def block_element?(name)
|
32
|
+
HTML_BLOCK.include?(name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def inline_element?(name)
|
36
|
+
HTML_INLINE.include?(name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def empty_element?(name)
|
40
|
+
HTML_EMPTY.include?(name)
|
41
|
+
end
|
42
|
+
|
43
|
+
def html_element?(name)
|
44
|
+
HTML.include?(name)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/man/ronn.1
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
.\" generated with Ronn/v0.6.
|
1
|
+
.\" generated with Ronn/v0.6.6
|
2
2
|
.\" http://github.com/rtomayko/ronn/
|
3
3
|
.
|
4
|
-
.TH "RONN" "1" "June 2010" "0.6
|
4
|
+
.TH "RONN" "1" "June 2010" "0.6-6-gd7645f2" "Ronn 0.6.6"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBronn\fR \- convert markdown files to manpages
|
@@ -10,16 +10,16 @@
|
|
10
10
|
\fBronn\fR [\fIoptions\fR] \fIfile\fR\.\.\.
|
11
11
|
.
|
12
12
|
.br
|
13
|
-
\fBronn\fR\fB\-m\fR|\fB\-\-man\fR\fIfile\fR\.\.\.
|
13
|
+
\fBronn\fR \fB\-m\fR|\fB\-\-man\fR \fIfile\fR\.\.\.
|
14
14
|
.
|
15
15
|
.br
|
16
|
-
\fBronn\fR\fB\-S\fR|\fB\-\-server\fR\fIfile\fR\.\.\.
|
16
|
+
\fBronn\fR \fB\-S\fR|\fB\-\-server\fR \fIfile\fR\.\.\.
|
17
17
|
.
|
18
18
|
.br
|
19
|
-
\fBronn\fR\fB\-\-pipe\fR\fIfile\fR
|
19
|
+
\fBronn\fR \fB\-\-pipe\fR \fIfile\fR
|
20
20
|
.
|
21
21
|
.br
|
22
|
-
\fBronn\fR
|
22
|
+
\fBronn\fR < \fIfile\fR
|
23
23
|
.
|
24
24
|
.SH "DESCRIPTION"
|
25
25
|
\fBRonn\fR converts Markdown input to standard roff\-formatted UNIX manpages or manpage styled HTML\. The ronn(5) source format is based on markdown(7) but includes additional rules and syntax geared toward authoring manuals\.
|
data/man/ronn.1.ronn
CHANGED
data/man/ronn.5
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
.\" generated with Ronn/v0.6.
|
1
|
+
.\" generated with Ronn/v0.6.6
|
2
2
|
.\" http://github.com/rtomayko/ronn/
|
3
3
|
.
|
4
|
-
.TH "RONN" "5" "June 2010" "0.6
|
4
|
+
.TH "RONN" "5" "June 2010" "0.6-6-gd7645f2" "Ronn 0.6.6"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBronn\fR \- markdown\-based text format for authoring manpages
|
data/man/ronn.7
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
.\" generated with Ronn/v0.6.
|
1
|
+
.\" generated with Ronn/v0.6.6
|
2
2
|
.\" http://github.com/rtomayko/ronn/
|
3
3
|
.
|
4
|
-
.TH "RONN" "7" "June 2010" "0.6
|
4
|
+
.TH "RONN" "7" "June 2010" "0.6-6-gd7645f2" "Ronn 0.6.6"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBronn\fR \- the opposite of roff
|
@@ -162,7 +162,7 @@ Ronn aims to address many of the issues with manpage creation while preserving t
|
|
162
162
|
Ronn is Copyright (C) 2009 Ryan Tomayko \fIhttp://tomayko\.com/about\fR
|
163
163
|
.
|
164
164
|
.br
|
165
|
-
|
165
|
+
See the file COPYING for information of licensing and distribution\.
|
166
166
|
.
|
167
167
|
.SH "SEE ALSO"
|
168
168
|
ronn(1) \fIhttp://rtomayko\.github\.com/ronn/ronn\.1\fR, ronn(5) \fIhttp://rtomayko\.github\.com/ronn/ronn\.5\fR, markdown(5)
|
data/ronn.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'ronn'
|
3
|
-
s.version = '0.6.
|
3
|
+
s.version = '0.6.6'
|
4
4
|
s.date = '2010-06-13'
|
5
5
|
|
6
6
|
s.description = "The opposite of roff"
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
lib/ronn/template/print.css
|
32
32
|
lib/ronn/template/screen.css
|
33
33
|
lib/ronn/template/toc.css
|
34
|
+
lib/ronn/utils.rb
|
34
35
|
man/ronn.1
|
35
36
|
man/ronn.1.ronn
|
36
37
|
man/ronn.5
|
@@ -58,12 +59,16 @@ Gem::Specification.new do |s|
|
|
58
59
|
test/middle_paragraph.html
|
59
60
|
test/middle_paragraph.roff
|
60
61
|
test/middle_paragraph.ronn
|
62
|
+
test/missing_spaces.roff
|
63
|
+
test/missing_spaces.ronn
|
61
64
|
test/ronn_test.rb
|
62
65
|
test/section_reference_links.html
|
63
66
|
test/section_reference_links.roff
|
64
67
|
test/section_reference_links.ronn
|
65
68
|
test/titleless_document.html
|
66
69
|
test/titleless_document.ronn
|
70
|
+
test/underline_spacing_test.roff
|
71
|
+
test/underline_spacing_test.ronn
|
67
72
|
]
|
68
73
|
# = MANIFEST =
|
69
74
|
|
data/test/markdown_syntax.html
CHANGED
@@ -98,7 +98,7 @@ This is another regular paragraph.
|
|
98
98
|
HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an
|
99
99
|
HTML block.</p>
|
100
100
|
|
101
|
-
<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del
|
101
|
+
<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be
|
102
102
|
used anywhere in a Markdown paragraph, list item, or header. If you
|
103
103
|
want, you can even use HTML tags instead of Markdown formatting; e.g. if
|
104
104
|
you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's
|
@@ -0,0 +1,16 @@
|
|
1
|
+
.TH "UNDERLINE_SPACING_TEST" "" "January 1979" "" ""
|
2
|
+
This input
|
3
|
+
.
|
4
|
+
.TP
|
5
|
+
\fB\-S\fR \fItext\fR, \fBsearch\fR \fItext\fR
|
6
|
+
Performs a substring search of formula names for \fItext\fR\.
|
7
|
+
.
|
8
|
+
.TP
|
9
|
+
\fB\-O\fR \fItext\fR, \fBother\fR \fItext\fR
|
10
|
+
Does something else\.
|
11
|
+
.
|
12
|
+
.P
|
13
|
+
Should space text properly\.
|
14
|
+
.
|
15
|
+
.P
|
16
|
+
\fI!\-\- this is a comment \-\-\fR
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 6
|
9
|
+
version: 0.6.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ryan Tomayko
|
@@ -89,6 +89,7 @@ files:
|
|
89
89
|
- lib/ronn/template/print.css
|
90
90
|
- lib/ronn/template/screen.css
|
91
91
|
- lib/ronn/template/toc.css
|
92
|
+
- lib/ronn/utils.rb
|
92
93
|
- man/ronn.1
|
93
94
|
- man/ronn.1.ronn
|
94
95
|
- man/ronn.5
|
@@ -116,12 +117,16 @@ files:
|
|
116
117
|
- test/middle_paragraph.html
|
117
118
|
- test/middle_paragraph.roff
|
118
119
|
- test/middle_paragraph.ronn
|
120
|
+
- test/missing_spaces.roff
|
121
|
+
- test/missing_spaces.ronn
|
119
122
|
- test/ronn_test.rb
|
120
123
|
- test/section_reference_links.html
|
121
124
|
- test/section_reference_links.roff
|
122
125
|
- test/section_reference_links.ronn
|
123
126
|
- test/titleless_document.html
|
124
127
|
- test/titleless_document.ronn
|
128
|
+
- test/underline_spacing_test.roff
|
129
|
+
- test/underline_spacing_test.ronn
|
125
130
|
has_rdoc: true
|
126
131
|
homepage: http://github.com/rtomayko/ronn/
|
127
132
|
licenses: []
|