redcarpet-manpage 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in redcarpet-manpage.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ (the ISC license)
2
+
3
+ Copyright 2011 Vicent Martí <vicent@github.com>
4
+ Copyright 2011 Suraj N. Kurapati <sunaku@gmail.com>
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted, provided that the above
8
+ copyright notice and this permission notice appear in all copies.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,78 @@
1
+ RedcarpetManpage - UNIX man page renderer for Redcarpet2
2
+ ========================================================
3
+
4
+ RedcarpetManpage is a Ruby library that converts [Markdown] documents into
5
+ UNIX man pages ([roff] documents) using the awesome [Redcarpet2] library.
6
+
7
+ [Markdown]: http://daringfireball.net/projects/markdown/
8
+ [roff]: http://man.cx/roff(7)
9
+ [Redcarpet2]: https://github.com/tanoku/redcarpet
10
+
11
+ ------------------------------------------------------------------------------
12
+ Installation
13
+ ------------------------------------------------------------------------------
14
+
15
+ As a Ruby gem:
16
+
17
+ gem install redcarpet-manpage
18
+
19
+ As a Git clone:
20
+
21
+ git clone git://github.com/sunaku/redcarpet-manpage
22
+ cd redcarpet-manpage
23
+ bundle install
24
+
25
+ ------------------------------------------------------------------------------
26
+ Specification
27
+ ------------------------------------------------------------------------------
28
+
29
+ ### Markdown Processing Extensions
30
+
31
+ `RedcarpetManpage::RENDERER` enables the following [Redcarpet2] extensions:
32
+
33
+ * `autolink`
34
+ * `no_intra_emphasis`
35
+ * `fenced_code_blocks`
36
+ * `space_after_headers`
37
+
38
+ ### Markdown Processing Divergence
39
+
40
+ Although your input documents are written in [Markdown], RedcarpetManpage
41
+ introduces the following additional conventions to simplify common tasks:
42
+
43
+ 1. Paragraphs beginning with bold/italic and followed by at least
44
+ one two-space indented line are considered to be definitions.
45
+ The first line of such a paragraph is the term being defined and
46
+ the subsequent two-space indented lines are the definition body.
47
+
48
+ ------------------------------------------------------------------------------
49
+ Usage
50
+ ------------------------------------------------------------------------------
51
+
52
+ Use the default renderer:
53
+
54
+ ``` ruby
55
+ require 'redcarpet-manpage'
56
+ your_roff_output = RedcarpetManpage::RENDERER.render(your_markdown_input)
57
+ ```
58
+
59
+ Or extend it for yourself:
60
+
61
+ ``` ruby
62
+ require 'redcarpet-manpage'
63
+
64
+ class YourManpageRenderer < RedcarpetManpage::Renderer
65
+ # ... your stuff here ...
66
+ # See Redcarpet::Render::Base documentation for more information:
67
+ # http://rdoc.info/github/tanoku/redcarpet/master/Redcarpet/Render/Base
68
+ end
69
+
70
+ renderer = Redcarpet::Markdown.new(YourManpageRenderer, your_options_hash)
71
+ your_roff_output = renderer.render(your_markdown_input)
72
+ ```
73
+
74
+ ------------------------------------------------------------------------------
75
+ License
76
+ ------------------------------------------------------------------------------
77
+
78
+ Released under the ISC license. See the LICENSE file for details.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,107 @@
1
+ require 'redcarpet'
2
+
3
+ module RedcarpetManpage
4
+
5
+ class Renderer < Redcarpet::Render::Base
6
+ def normal_text(text)
7
+ text.gsub(/(?<=\W)-(?=\W)/, '\\-') if text
8
+ end
9
+
10
+ def triple_emphasis(text)
11
+ "\\fB#{text}\\fP"
12
+ end
13
+
14
+ alias double_emphasis triple_emphasis
15
+
16
+ def emphasis(text)
17
+ "\\fI#{text}\\fP"
18
+ end
19
+
20
+ def block_code(code, language)
21
+ "\n.nf\n#{normal_text(code)}\n.fi\n"
22
+ end
23
+
24
+ alias codespan double_emphasis
25
+
26
+ def link(link, title, content)
27
+ "#{triple_emphasis(content)} #{emphasis(link)}"
28
+ end
29
+
30
+ def autolink(link, link_type)
31
+ emphasis(link)
32
+ end
33
+
34
+ def header(title, level)
35
+ case level
36
+ when 1
37
+ "\n.TH #{title}\n"
38
+
39
+ when 2
40
+ "\n.SH #{title}\n"
41
+
42
+ when 3
43
+ "\n.SS #{title}\n"
44
+ end
45
+ end
46
+
47
+ def paragraph(text)
48
+ "\n.PP\n#{text}\n"
49
+ end
50
+
51
+ def linebreak
52
+ "\n.LP\n"
53
+ end
54
+
55
+ def list(content, list_type)
56
+ case list_type
57
+ when :ordered
58
+ "\n\n.nr step 0 1\n#{content}\n"
59
+ when :unordered
60
+ "\n.\n#{content}\n"
61
+ end
62
+ end
63
+
64
+ def list_item(content, list_type)
65
+ case list_type
66
+ when :ordered
67
+ ".IP \\n+[step]\n#{content.strip}\n"
68
+ when :unordered
69
+ ".IP \\[bu] 2 \n#{content.strip}\n"
70
+ end
71
+ end
72
+
73
+ DEFINITION_INDENT = ' ' # two spaces
74
+
75
+ def postprocess document
76
+ document.
77
+ # squeeze blank lines to prevent double-spaced output
78
+ gsub(/^\n/, '').
79
+
80
+ # first paragraphs inside list items
81
+ gsub(/^(\.IP.*)\n\.PP/, '\1').
82
+
83
+ # paragraphs beginning with bold/italic and followed by
84
+ # at least one definition-indented line are definitions
85
+ gsub(/^\.PP(?=\n\\f.+\n#{DEFINITION_INDENT}\S)/, '.TP').
86
+
87
+ # make indented paragraphs occupy less space on screen:
88
+ # roff will fit the second line of the paragraph along
89
+ # side the first line if it has enough room to do so!
90
+ gsub(/^#{DEFINITION_INDENT}(?=\S)/, '').
91
+
92
+ # encode references to other man pages as "hyperlinks"
93
+ gsub(/(\w+)(\([1-9nol]\)[[:punct:]]?\s*)/, "\n.BR \\1 \\2\n").
94
+ # keep the SEE ALSO sequence of references in-line
95
+ gsub(/(?:^\.BR.+\n)+/m){ |sequence| sequence.squeeze("\n") }
96
+ end
97
+ end
98
+
99
+ RENDERER = Redcarpet::Markdown.new(Renderer,
100
+ #:tables => true,
101
+ :autolink => true,
102
+ #:superscript => true,
103
+ :no_intra_emphasis => true,
104
+ :fenced_code_blocks => true,
105
+ :space_after_headers => true)
106
+
107
+ end
@@ -0,0 +1,3 @@
1
+ module RedcarpetManpage
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "redcarpet-manpage/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "redcarpet-manpage"
7
+ s.version = RedcarpetManpage::VERSION
8
+ s.authors,
9
+ s.email = File.read('LICENSE').scan(/Copyright \d+ (.+) <(.+?)>/).transpose
10
+ s.homepage = "http://github.com/sunaku/redcarpet-manpage"
11
+ s.summary = "UNIX man page renderer for Redcarpet2"
12
+ s.description = nil
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ # specify any dependencies here; for example:
20
+ # s.add_development_dependency "rspec"
21
+ # s.add_runtime_dependency "rest-client"
22
+ s.add_runtime_dependency "redcarpet", ">= 2.0.0b5"
23
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redcarpet-manpage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Vicent Martí
9
+ - Suraj N. Kurapati
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-10-13 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: redcarpet
17
+ requirement: &14053840 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0b5
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *14053840
26
+ description: ''
27
+ email:
28
+ - vicent@github.com
29
+ - sunaku@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - Gemfile
36
+ - LICENSE
37
+ - README.markdown
38
+ - Rakefile
39
+ - lib/redcarpet-manpage.rb
40
+ - lib/redcarpet-manpage/version.rb
41
+ - redcarpet-manpage.gemspec
42
+ homepage: http://github.com/sunaku/redcarpet-manpage
43
+ licenses: []
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 1.8.11
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: UNIX man page renderer for Redcarpet2
66
+ test_files: []