ronn-ng 0.7.4 → 0.8.0.SNAPSHOT

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +12 -3
  3. data/Gemfile +2 -0
  4. data/INSTALLING.md +100 -0
  5. data/README.md +19 -1
  6. data/Rakefile +39 -49
  7. data/bin/ronn +93 -75
  8. data/completion/bash/ronn +32 -0
  9. data/completion/zsh/_ronn +24 -0
  10. data/config.ru +3 -3
  11. data/lib/ronn/document.rb +127 -106
  12. data/lib/ronn/index.rb +8 -9
  13. data/lib/ronn/roff.rb +153 -76
  14. data/lib/ronn/server.rb +19 -22
  15. data/lib/ronn/template.rb +27 -26
  16. data/lib/ronn/utils.rb +9 -7
  17. data/lib/ronn.rb +5 -3
  18. data/man/ronn-format.7 +6 -62
  19. data/man/ronn.1 +21 -123
  20. data/man/ronn.1.ronn +8 -0
  21. data/ronn-ng.gemspec +38 -13
  22. data/test/angle_bracket_syntax.html +4 -5
  23. data/test/backticks.html +14 -0
  24. data/test/backticks.ronn +10 -0
  25. data/test/basic_document.html +3 -4
  26. data/test/basic_document.ronn +2 -2
  27. data/test/circumflexes.ronn +1 -0
  28. data/test/code_blocks.7.ronn +41 -0
  29. data/test/contest.rb +56 -54
  30. data/test/custom_title_document.html +2 -2
  31. data/test/definition_list_syntax.html +13 -9
  32. data/test/definition_list_syntax.roff +2 -9
  33. data/test/definition_list_syntax.ronn +2 -2
  34. data/test/dots_at_line_start_test.roff +12 -3
  35. data/test/dots_at_line_start_test.ronn +8 -0
  36. data/test/ellipses.roff +7 -0
  37. data/test/ellipses.ronn +7 -0
  38. data/test/entity_encoding_test.html +13 -14
  39. data/test/entity_encoding_test.roff +1 -22
  40. data/test/entity_encoding_test.ronn +1 -1
  41. data/test/markdown_syntax.html +4 -5
  42. data/test/markdown_syntax.roff +1 -561
  43. data/test/middle_paragraph.html +2 -3
  44. data/test/middle_paragraph.roff +1 -5
  45. data/test/middle_paragraph.ronn +1 -1
  46. data/test/missing_spaces.roff +0 -2
  47. data/test/nested_list.ronn +19 -0
  48. data/test/nested_list_with_code.html +15 -0
  49. data/test/nested_list_with_code.roff +11 -0
  50. data/test/nested_list_with_code.ronn +6 -0
  51. data/test/page.with.periods.in.name.5.ronn +4 -0
  52. data/test/pre_block_with_quotes.roff +0 -5
  53. data/test/section_reference_links.html +2 -3
  54. data/test/section_reference_links.roff +1 -4
  55. data/test/section_reference_links.ronn +1 -1
  56. data/test/tables.ronn +24 -0
  57. data/test/test_ronn.rb +49 -35
  58. data/test/test_ronn_document.rb +81 -81
  59. data/test/test_ronn_index.rb +11 -11
  60. data/test/titleless_document.html +0 -1
  61. data/test/underline_spacing_test.roff +0 -8
  62. metadata +140 -22
  63. data/INSTALLING +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3b5bd87ab795aca2c2a93fa2e9fd4546bf0f487e514f08e438f7fc4db8f669a
4
- data.tar.gz: bac6bfb79ee2a082f0920f96608f644f8573c3dc69d5852ce7ae81cbf3f5c875
3
+ metadata.gz: a366030fa8806e15ab35f18956531bdb60164d10b90b9880886f9eebc6c006c6
4
+ data.tar.gz: 570e2299757078078f61e102b639e9a81d5fe9a814d5f70edcb06a6497de7a67
5
5
  SHA512:
6
- metadata.gz: 92e0355ea7b2466ed1f31741099dc54b39032bf2a8e89fa7a385a07c329433d034ea893c84bb2e585c8223425b2330350f71332e3181430091627a852288389d
7
- data.tar.gz: 102c172c8aabd4e942a956bde33697e762803ad63461a4dee7ab032fc3a453126ebba70412b6c7d56a5c02c5d4bae288d072c7a0ee72fa52120178e9c223c5e9
6
+ metadata.gz: ba780963d9c7cf2cce152e9a48cac83640912b60511788c1fc5cd955d186624f9099511c611df6b2db27425afd128d8071be9488fb1d149dd30dc0776ffd9ed5
7
+ data.tar.gz: d2e9538576d55227277327b514ef9ea96f56151dfcfadddcce12a8e050782628f9ed568f81ef85f8cbd848647ea43444750799fa69ca14aef6290ada149f7daa
data/CHANGES CHANGED
@@ -1,11 +1,20 @@
1
1
  Ronn-NG CHANGES
2
2
  ===============
3
3
 
4
- Version 0.7.4 (2018 sometime)
5
- -----------------------------
4
+ Version 0.8.0 (???? ??? ??)
5
+ ---------------------------
6
6
 
7
- * Forked Ronn-NG from original Ronn. (apjanke)
7
+ * Added tables support. (apjanke)
8
+ * Lint & Rubocop fixes. (apjanke)
9
+ * Added --output-dir option. (apjanke)
10
+ * Support file names with periods in the name section. (apjanke)
11
+ * Migrated from Hpricot to Nokogiri. (apjanke)
12
+
13
+ Version 0.7.4 (2018 Dec 22)
14
+ ---------------------------
8
15
 
16
+ * Forked Ronn-NG from original Ronn. (apjanke)
17
+ * Minor bug fixes: #4, #5 (apjanke)
9
18
 
10
19
  Original Ronn CHANGES
11
20
  =====================
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/INSTALLING.md ADDED
@@ -0,0 +1,100 @@
1
+ Ronn-NG Installation
2
+ ====================
3
+
4
+ ## Installation Process
5
+
6
+ ### From a Package Manager
7
+
8
+ The best way to install Ronn-NG is with a package manager. This is currently
9
+ only supported on macOS, with [Homebrew](http://brew.sh). To install with `brew`:
10
+
11
+ ```
12
+ brew tap apjanke/ronn-ng
13
+ brew install --HEAD ronn-ng
14
+ ```
15
+
16
+ ### From RubyGems
17
+
18
+ Ronn-NG is distributed as a gem package, which can be used if you don't have
19
+ a supported package manager. Install with rubygems:
20
+
21
+ ```
22
+ gem install ronn-ng
23
+ ronn --help
24
+ ```
25
+
26
+ Ronn-NG includes completion definitions for bash and zsh, but these are not
27
+ installed into the system locations as part of the gem. You will need to figure
28
+ out how to install those into your system to make them available in your shell.
29
+
30
+ A decent way to do this is probably to add symlinks to your system shell
31
+ completion directories pointing at the files in the installed gem.
32
+
33
+ In Zsh, you can do something like this:
34
+
35
+ ```
36
+ ronn_dist_dir=$(dirname $(dirname $(gem which ronn-ng)))
37
+ ronn_zsh_dir="$ronn_dist_dir/completion/zsh"
38
+ ln -s "$ronn_zsh_dir/_ronn" /usr/local/share/zsh/site-functions
39
+ ```
40
+
41
+ In Bash, something like this:
42
+
43
+ ```
44
+ ronn_dist_dir=$(dirname $(dirname $(gem which ronn-ng)))
45
+ ronn_bash_dir="$ronn_dist_dir/completion/bash"
46
+ ln -s "$ronn_bash_dir/ronn" /usr/local/etc/bash_completion.d
47
+ ```
48
+
49
+ You will need to redo these steps each time you upgrade `ronn-ng` or install
50
+ it into a different Ruby environment. Sorry for the inconvenience; this seems
51
+ to be a limitation of the `gem` installation mechanism.
52
+
53
+ If that `gem which` stuff doesn't work for you, you can `gem install gem-path`
54
+ and use `gem path ronn-ng` instead.
55
+
56
+
57
+ ## Building from Source
58
+
59
+ Hacking? Install Ronn-NG from source.
60
+
61
+ Clone the git repository and put ronn/bin on your PATH:
62
+
63
+ ```
64
+ git clone git://github.com/apjanke/ronn-ng
65
+ PATH=$(pwd)/ronn-ng/bin:$PATH
66
+ ```
67
+
68
+ The following gems are required for ronn-ng development:
69
+ * nokogiri
70
+ * mustache
71
+ * rdiscount
72
+ * rubocop
73
+ * sinatra
74
+ * rack
75
+ * rake
76
+ * test-unit
77
+
78
+ ```
79
+ gem install nokogiri mustache rdiscount rubocop sinatra rack rake test-unit
80
+ ```
81
+
82
+ Or install them with bundler using the project's gem definition:
83
+
84
+ ```
85
+ bundle install --with development
86
+ ```
87
+
88
+ Then you should be able to make changes directly to your cloned repo and have
89
+ them be reflected in your active `ronn` command.
90
+
91
+ ## Legacy Versions
92
+
93
+ Historical Ronn tarballs available at [the original Ronn repo](http://github.com/rtomayko/ronn/downloads).
94
+
95
+ ```
96
+ curl -L http://github.com/rtomayko/ronn/downloads/0.6.6 | tar xvzf -
97
+ cd rtomayko-r*
98
+ ruby setup.rb
99
+ ```
100
+
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ronn
1
+ # Ronn-NG
2
2
 
3
3
  Ronn-NG is a new, currently-maintained fork of the defunct [original Ronn
4
4
  project](https://github.com/rtomayko/ronn).
@@ -26,6 +26,17 @@ ronn capabilities:
26
26
 
27
27
  As an alternative, you might want to check out [pandoc](http://johnmacfarlane.net/pandoc/) which can also convert markdown into roff manual pages.
28
28
 
29
+ ## Installation
30
+
31
+ Install with Homebrew on macOS:
32
+
33
+ ```
34
+ brew tap apjanke/ronn-ng
35
+ brew install ronn-ng
36
+ ```
37
+
38
+ See [INSTALLING.md][] for details on other systems and installation methods.
39
+
29
40
  ## Examples
30
41
 
31
42
  Build roff and HTML output files for one or more input files:
@@ -91,6 +102,9 @@ The roff/mandoc/mdoc macro languages are highly extensible, fractured between
91
102
  multiple dialects, and include a bunch of device specific stuff irrelevant to
92
103
  modern publishing tools.
93
104
 
105
+ ## Requirements
106
+
107
+ Ruby 2.3 or newer.
94
108
 
95
109
  ## Project Management
96
110
 
@@ -111,3 +125,7 @@ New Ronn-NG material is Copyright (c) 2018 [Andrew Janke](https://apjanke.net)
111
125
  and other contributors.
112
126
 
113
127
  See the file LICENSE.txt for information of licensing and distribution.
128
+
129
+ ## Build Status
130
+
131
+ ![Travis build status](https://travis-ci.com/apjanke/ronn-ng.svg?branch=master)
data/Rakefile CHANGED
@@ -1,41 +1,31 @@
1
1
  require 'rake/clean'
2
2
  require 'date'
3
3
 
4
- task :default => :test
4
+ task default: :test
5
5
 
6
- ROOTDIR = File.expand_path('..', __FILE__).sub(/#{Dir.pwd}(?=\/)/, '.')
7
- LIBDIR = "#{ROOTDIR}/lib"
8
- BINDIR = "#{ROOTDIR}/bin"
6
+ ROOTDIR = File.expand_path(__dir__).sub(/#{Dir.pwd}(?=\/)/, '.')
7
+ LIBDIR = "#{ROOTDIR}/lib".freeze
8
+ BINDIR = "#{ROOTDIR}/bin".freeze
9
9
 
10
10
  task :environment do
11
- $LOAD_PATH.unshift ROOTDIR if !$:.include?(ROOTDIR)
12
- $LOAD_PATH.unshift LIBDIR if !$:.include?(LIBDIR)
13
- require_library 'hpricot'
11
+ $LOAD_PATH.unshift ROOTDIR unless $LOAD_PATH.include?(ROOTDIR)
12
+ $LOAD_PATH.unshift LIBDIR unless $LOAD_PATH.include?(LIBDIR)
13
+ require_library 'nokogiri'
14
14
  require_library 'rdiscount'
15
15
  ENV['RUBYLIB'] = $LOAD_PATH.join(':')
16
16
  ENV['PATH'] = "#{BINDIR}:#{ENV['PATH']}"
17
17
  end
18
18
 
19
19
  desc 'Run tests'
20
- task :test => :environment do
20
+ task test: :environment do
21
21
  $LOAD_PATH.unshift "#{ROOTDIR}/test"
22
22
  Dir['test/test_*.rb'].each { |f| require(f) }
23
23
  end
24
24
 
25
25
  desc 'Start the server'
26
- task :server => :environment do
26
+ task server: :environment do
27
27
  if system('type shotgun >/dev/null 2>&1')
28
- exec "shotgun config.ru"
29
- else
30
- require 'ronn/server'
31
- Ronn::Server.run('man/*.ronn')
32
- end
33
- end
34
-
35
- desc 'Start the server'
36
- task :server => :environment do
37
- if system('type shotgun >/dev/null 2>&1')
38
- exec "shotgun config.ru"
28
+ exec 'shotgun config.ru'
39
29
  else
40
30
  require 'ronn/server'
41
31
  Ronn::Server.run('man/*.ronn')
@@ -43,18 +33,18 @@ task :server => :environment do
43
33
  end
44
34
 
45
35
  desc 'Build the manual'
46
- task :man => :environment do
36
+ task man: :environment do
47
37
  require 'ronn'
48
- ENV['RONN_MANUAL'] = "Ronn Manual"
49
- ENV['RONN_ORGANIZATION'] = "Ronn #{Ronn::revision}"
50
- sh "ronn -w -s toc -r5 --markdown man/*.ronn"
38
+ ENV['RONN_MANUAL'] = 'Ronn Manual'
39
+ ENV['RONN_ORGANIZATION'] = "Ronn-NG #{Ronn.revision}"
40
+ sh 'ronn -w -s toc -r5 --markdown man/*.ronn'
51
41
  end
52
42
 
53
- desc 'Publish to github pages'
54
- task :pages => :man do
43
+ desc 'Publish to GitHub pages'
44
+ task pages: :man do
55
45
  puts '----------------------------------------------'
56
46
  puts 'Rebuilding pages ...'
57
- verbose(false) {
47
+ verbose(false) do
58
48
  rm_rf 'pages'
59
49
  push_url = `git remote show origin`.grep(/Push.*URL/).first[/git@.*/]
60
50
  sh "
@@ -69,8 +59,8 @@ task :pages => :man do
69
59
  git add -u ronn*.html index.html index.txt
70
60
  git commit -m 'rebuild manual'
71
61
  git push #{push_url} gh-pages
72
- ", :verbose => false
73
- }
62
+ ", verbose: false
63
+ end
74
64
  end
75
65
 
76
66
  # PACKAGING ============================================================
@@ -86,29 +76,29 @@ task :rev do
86
76
  end
87
77
 
88
78
  require 'rubygems'
89
- $spec = eval(File.read('ronn-ng.gemspec'))
79
+ @spec = eval(File.read('ronn-ng.gemspec'))
90
80
 
91
- def package(ext='')
92
- "pkg/ronn-#{$spec.version}" + ext
81
+ def package(ext = '')
82
+ "pkg/ronn-ng-#{@spec.version}" + ext
93
83
  end
94
84
 
95
85
  desc 'Build packages'
96
- task :package => %w[.gem .tar.gz].map { |ext| package(ext) }
86
+ task package: %w[.gem .tar.gz].map { |ext| package(ext) }
97
87
 
98
88
  desc 'Build and install as local gem'
99
- task :install => package('.gem') do
89
+ task install: package('.gem') do
100
90
  sh "gem install #{package('.gem')}"
101
91
  end
102
92
 
103
93
  directory 'pkg/'
104
94
  CLOBBER.include('pkg')
105
95
 
106
- file package('.gem') => %w[pkg/ ronn-ng.gemspec] + $spec.files do |f|
107
- sh "gem build ronn-ng.gemspec"
96
+ file package('.gem') => %w[pkg/ ronn-ng.gemspec] + @spec.files do |f|
97
+ sh 'gem build ronn-ng.gemspec'
108
98
  mv File.basename(f.name), f.name
109
99
  end
110
100
 
111
- file package('.tar.gz') => %w[pkg/] + $spec.files do |f|
101
+ file package('.tar.gz') => %w[pkg/] + @spec.files do |f|
112
102
  sh <<-SH
113
103
  git archive --prefix=ronn-#{source_version}/ --format=tar HEAD |
114
104
  gzip > #{f.name}
@@ -119,24 +109,24 @@ def source_version
119
109
  @source_version ||= `ruby -Ilib -rronn -e 'puts Ronn::VERSION'`.chomp
120
110
  end
121
111
 
122
- file 'ronn-ng.gemspec' => FileList['{lib,test,bin}/**','Rakefile'] do |f|
112
+ file 'ronn-ng.gemspec' => FileList['{lib,test,bin}/**', 'Rakefile'] do |f|
123
113
  # read spec file and split out manifest section
124
114
  spec = File.read(f.name)
125
- head, manifest, tail = spec.split(" # = MANIFEST =\n")
115
+ head, _manifest, tail = spec.split(" # = MANIFEST =\n")
126
116
  # replace version and date
127
117
  head.sub!(/\.version = '.*'/, ".version = '#{source_version}'")
128
- head.sub!(/\.date = '.*'/, ".date = '#{Date.today.to_s}'")
118
+ head.sub!(/\.date = '.*'/, ".date = '#{Date.today}'")
129
119
  # determine file list from git ls-files
130
- files = `git ls-files`.
131
- split("\n").
132
- sort.
133
- reject{ |file| file =~ /^\./ }.
134
- reject { |file| file =~ /^doc/ }.
135
- map{ |file| " #{file}" }.
136
- join("\n")
120
+ files = `git ls-files`
121
+ .split("\n")
122
+ .sort
123
+ .reject { |file| file =~ /^\./ }
124
+ .reject { |file| file =~ /^doc/ }
125
+ .map { |file| " #{file}" }
126
+ .join("\n")
137
127
  # piece file back together and write...
138
128
  manifest = " s.files = %w[\n#{files}\n ]\n"
139
- spec = [head,manifest,tail].join(" # = MANIFEST =\n")
129
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
140
130
  File.open(f.name, 'w') { |io| io.write(spec) }
141
131
  puts "updated #{f.name}"
142
132
  end
@@ -146,7 +136,7 @@ end
146
136
  def require_library(name)
147
137
  require name
148
138
  rescue LoadError => boom
149
- if !defined?(Gem)
139
+ unless defined?(Gem)
150
140
  warn "warn: #{boom}. trying again with rubygems."
151
141
  require 'rubygems'
152
142
  retry
data/bin/ronn CHANGED
@@ -1,43 +1,45 @@
1
1
  #!/usr/bin/env ruby
2
- #/ Usage: ronn <options> <file>...
3
- #/ ronn -m|--man <file>
4
- #/ ronn -S|--server <file> ...
5
- #/ ronn --pipe [<file>...]
6
- #/ Convert ronn source <file>s to roff or HTML manpage. In the first synopsis form,
7
- #/ build HTML and roff output files based on the input file names.
8
- #/
9
- #/ Mode options alter the default behavior of generating files:
10
- #/ --pipe write to standard output instead of generating files
11
- #/ -m, --man show manual like with man(1)
12
- #/ -S, --server serve <file>s at http://localhost:1207/
13
- #/
14
- #/ Format options control which files / formats are generated:
15
- #/ -r, --roff generate roff output
16
- #/ -5, --html generate entire HTML page with layout
17
- #/ -f, --fragment generate HTML fragment
18
- #/ --markdown generate post-processed markdown output
19
- #/
20
- #/ Document attributes:
21
- #/ --date=<date> published date in YYYY-MM-DD format (bottom-center)
22
- #/ --manual=<name> name of the manual (top-center)
23
- #/ --organization=<name> publishing group or individual (bottom-left)
24
- #/
25
- #/ Misc options:
26
- #/ -w, --warnings show troff warnings on stderr
27
- #/ -W disable previously enabled troff warnings
28
- #/ --version show ronn version and exit
29
- #/ --help show this help message
30
- #/
31
- #/ A <file> named example.1.ronn generates example.1.html (HTML manpage)
32
- #/ and example.1 (roff manpage) by default.
2
+ # / Usage: ronn <options> <file>...
3
+ # / ronn -m|--man <file>
4
+ # / ronn -S|--server <file> ...
5
+ # / ronn --pipe [<file>...]
6
+ # / Convert ronn source <file>s to roff or HTML manpage. In the first synopsis form,
7
+ # / build HTML and roff output files based on the input file names.
8
+ # /
9
+ # / Mode options alter the default behavior of generating files:
10
+ # / --pipe write to standard output instead of generating files
11
+ # / -m, --man show manual like with man(1)
12
+ # / -S, --server serve <file>s at http://localhost:1207/
13
+ # / --port <port> run server at specified port instead of 1207
14
+ # / -o, --output-dir <dir> write generated files to specified directory
15
+ # /
16
+ # / Format options control which files / formats are generated:
17
+ # / -r, --roff generate roff output
18
+ # / -5, --html generate entire HTML page with layout
19
+ # / -f, --fragment generate HTML fragment
20
+ # / --markdown generate post-processed markdown output
21
+ # /
22
+ # / Document attributes:
23
+ # / --date=<date> published date in YYYY-MM-DD format (bottom-center)
24
+ # / --manual=<name> name of the manual (top-center)
25
+ # / --organization=<name> publishing group or individual (bottom-left)
26
+ # /
27
+ # / Misc options:
28
+ # / -w, --warnings show troff warnings on stderr
29
+ # / -W disable previously enabled troff warnings
30
+ # / --version show ronn version and exit
31
+ # / --help show this help message
32
+ # /
33
+ # / A <file> named example.1.ronn generates example.1.html (HTML manpage)
34
+ # / and example.1 (roff manpage) by default.
33
35
  require 'date'
34
36
  require 'optparse'
35
37
 
36
38
  def usage
37
- puts File.readlines(__FILE__).
38
- grep(/^#\/.*/).
39
- map { |line| line.chomp[3..-1] }.
40
- join("\n")
39
+ puts File.readlines(__FILE__)
40
+ .grep(/^# \/.*/)
41
+ .map { |line| line.chomp[4..-1] }
42
+ .join("\n")
41
43
  end
42
44
 
43
45
  ##
@@ -45,14 +47,14 @@ end
45
47
 
46
48
  begin
47
49
  require 'rdiscount'
48
- require 'hpricot'
50
+ require 'nokogiri'
49
51
  require 'ronn'
50
52
  rescue LoadError => boom
51
53
  if boom.to_s =~ /ronn/
52
- libdir = File.expand_path("../../lib", __FILE__).sub(%r|^#{Dir.pwd}/|, './')
53
- if File.directory?(libdir) && !$:.include?(libdir)
54
- warn "warn: #{boom}. adding #{libdir} to RUBYLIB ..."
55
- $:.unshift libdir
54
+ libdir = File.expand_path('../lib', __dir__).sub(%r{^#{Dir.pwd}/}, './')
55
+ if File.directory?(libdir) && !$LOAD_PATH.include?(libdir)
56
+ # warn "warn: #{boom}. adding #{libdir} to RUBYLIB ..."
57
+ $LOAD_PATH.unshift libdir
56
58
  retry
57
59
  end
58
60
  elsif !defined?(Gem)
@@ -69,19 +71,22 @@ end
69
71
  build = true
70
72
  view = false
71
73
  server = false
74
+ port_arg = nil
72
75
  formats = nil
73
76
  options = {}
74
77
  write_index = false
75
78
  styles = %w[man]
76
- groff = "groff -Wall -mtty-char -mandoc -Tascii"
77
- pager = ENV['MANPAGER'] || ENV['PAGER'] || 'more'
79
+ groff = 'groff -Wall -mtty-char -mandoc -Tascii -t'
80
+ pager = ENV['MANPAGER'] || ENV['PAGER'] || 'more -is'
81
+ output_dir = nil
78
82
 
79
83
  ##
80
84
  # Environment variables
81
85
 
82
86
  %w[manual organization date].each do |attribute|
83
87
  value = ENV["RONN_#{attribute.upcase}"]
84
- next if value.nil? or value.empty?
88
+ next if value.nil? || value.empty?
89
+
85
90
  options[attribute] = value
86
91
  end
87
92
 
@@ -90,20 +95,23 @@ end
90
95
 
91
96
  ARGV.options do |argv|
92
97
  # modes
93
- argv.on("--pipe") { build = server = false }
94
- argv.on("-b", "--build") { build = true; server = false }
95
- argv.on("-m", "--man") { build = server = false; view = true }
96
- argv.on("-S", "--server") { build = view = false; server = true }
97
- argv.on("-i", "--index") { write_index = true }
98
+ argv.on('--pipe') { build = server = false }
99
+ argv.on('-b', '--build') { build = true; server = false }
100
+ argv.on('-m', '--man') { build = server = false; view = true }
101
+ argv.on('-S', '--server') { build = view = false; server = true }
102
+ argv.on('-i', '--index') { write_index = true }
103
+ argv.on('-o', '--output-dir=V') { |val| output_dir = val }
104
+ argv.on('--port=V') { |val| port_arg = val }
98
105
 
99
106
  # format options
100
- argv.on("-r", "--roff") { (formats ||= []) << 'roff' }
101
- argv.on("-5", "--html") { (formats ||= []) << 'html' }
102
- argv.on("-f", "--fragment") { (formats ||= []) << 'html_fragment' }
103
- argv.on("--markdown") { (formats ||= []) << 'markdown' }
107
+ argv.on('-r', '--roff') { (formats ||= []) << 'roff' }
108
+ argv.on('-5', '--html') { (formats ||= []) << 'html' }
109
+ argv.on('-f', '--fragment') { (formats ||= []) << 'html_fragment' }
110
+ argv.on('--markdown') { (formats ||= []) << 'markdown' }
111
+ argv.on('--yaml') { (formats ||= []) << 'yaml' }
104
112
 
105
113
  # html output options
106
- argv.on("-s", "--style=V") { |val| styles += val.split(/[, \n]+/) }
114
+ argv.on('-s', '--style=V') { |val| styles += val.split(/[, \n]+/) }
107
115
 
108
116
  # manual attribute options
109
117
  %w[name section manual organization date].each do |attribute|
@@ -111,36 +119,35 @@ ARGV.options do |argv|
111
119
  end
112
120
 
113
121
  # misc
114
- argv.on("-w", "--warnings") { groff += ' -ww' }
115
- argv.on("-W") { groff += ' -Ww' }
116
- argv.on("-v", "--version") do
122
+ argv.on('-w', '--warnings') { groff += ' -ww' }
123
+ argv.on('-W') { groff += ' -Ww' }
124
+ argv.on('-v', '--version') do
117
125
  require 'ronn'
118
126
  if Ronn.release?
119
- printf "Ronn v%s\n", Ronn::VERSION
127
+ printf "Ronn-NG v%s\n", Ronn::VERSION
120
128
  else
121
- printf "Ronn v%s (%s)\n", Ronn::VERSION, Ronn::REV
129
+ printf "Ronn-NG v%s (%s)\n", Ronn::VERSION, Ronn::REV
122
130
  end
123
- printf "http://github.com/rtomayko/ronn/tree/%s\n", Ronn.revision
131
+ printf "http://github.com/apjanke/ronn-ng/tree/%s\n", Ronn.revision
124
132
  exit 0
125
133
  end
126
- argv.on_tail("--help") { usage ; exit 0 }
134
+ argv.on_tail('--help') { usage; exit 0 }
127
135
  argv.parse!
128
136
  end
129
137
 
130
138
  ##
131
139
  # Modes, Formats, Options
132
140
 
133
- case
134
- when ARGV.empty? && $stdin.tty?
141
+ if ARGV.empty? && $stdin.tty?
135
142
  usage
136
143
  exit 2
137
- when ARGV.empty? && !server
144
+ elsif ARGV.empty? && !server
138
145
  ARGV.push '-'
139
146
  build = false
140
147
  formats ||= %w[roff]
141
- when view
148
+ elsif view
142
149
  formats ||= %w[roff]
143
- when build
150
+ elsif build
144
151
  formats ||= %w[roff html]
145
152
  end
146
153
  formats ||= []
@@ -148,6 +155,16 @@ formats.delete('html') if formats.include?('html_fragment')
148
155
 
149
156
  options['date'] &&= Date.strptime(options['date'], '%Y-%m-%d')
150
157
  options['styles'] = styles
158
+ options['outdir'] = output_dir
159
+
160
+ unless port_arg.nil?
161
+ begin
162
+ options['port'] = Integer(port_arg)
163
+ rescue ArgumentError
164
+ warn "Error: invalid port number: '#{port_arg}'"
165
+ exit 1
166
+ end
167
+ end
151
168
 
152
169
  ##
153
170
  # Server
@@ -168,7 +185,8 @@ documents.each do |doc|
168
185
  # setup the man pipeline if the --man option was specified
169
186
  if view && !build
170
187
  rd, wr = IO.pipe
171
- if pid = fork
188
+ pid = fork
189
+ if pid
172
190
  rd.close
173
191
  else
174
192
  wr.close
@@ -178,20 +196,20 @@ documents.each do |doc|
178
196
  end
179
197
 
180
198
  # write output for each format
181
- formats.each do |format|
199
+ formats.each do |fmt|
182
200
  if build
183
- path = doc.path_for(format)
184
- case format
201
+ path = doc.path_for(fmt)
202
+ case fmt
185
203
  when 'html'
186
- warn "%9s: %-43s%15s" % [format, path, '+' + doc.styles.join(',')]
204
+ warn format('%9s: %-43s%15s', fmt, path, '+' + doc.styles.join(','))
187
205
  when 'roff', 'html_fragment', 'markdown'
188
- warn "%9s: %-43s" % [format, path]
206
+ warn format('%9s: %-43s', fmt, path)
189
207
  end
190
208
 
191
- output = doc.convert(format)
209
+ output = doc.convert(fmt)
192
210
  File.open(path, 'wb') { |f| f.puts(output) }
193
211
 
194
- if format == 'roff'
212
+ if fmt == 'roff'
195
213
  if view
196
214
  system "man #{path}"
197
215
  else
@@ -199,7 +217,7 @@ documents.each do |doc|
199
217
  end
200
218
  end
201
219
  else
202
- output = doc.convert(format)
220
+ output = doc.convert(fmt)
203
221
  wr.puts(output)
204
222
  end
205
223
  end
@@ -214,7 +232,7 @@ end
214
232
  # Write index.txt files
215
233
 
216
234
  if write_index
217
- indexes = documents.map { |doc| doc.index }.uniq
235
+ indexes = documents.map(&:index).uniq
218
236
  indexes.each do |index|
219
237
  File.open(index.path, 'wb') do |fd|
220
238
  fd.puts(index.to_text)
@@ -0,0 +1,32 @@
1
+ # Bash completion script for ronn(1) from Ronn-NG
2
+
3
+ _ronn()
4
+ {
5
+ local cur prev words cword
6
+ _init_completion -n = || return
7
+
8
+ COMREPLY=()
9
+ cur=${COMP_WORDS[COMP_CWORD]}
10
+
11
+ case "$prev" in
12
+ --help|--version|-!(-*)'?')
13
+ return
14
+ ;;
15
+ -o|--output-dir|-!(-*)e)
16
+ _filedir -d
17
+ return
18
+ ;;
19
+ esac
20
+
21
+ if [[ "$cur" == -* ]]; then
22
+ COMREPLY=( $( compgen -W '--pipe -m --man -S --server --port -o --output-dir -r --roff -5 --html -f --fragment --markdown --date --manual --organization -w --warnings -W --version --help'))
23
+ return
24
+ fi
25
+
26
+ _filedir
27
+
28
+ return 0
29
+ } &&
30
+ complete -F _ronn ronn
31
+
32
+ # ex: filetype=sh