1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
require 'stringio'
require 'gli/commands/help_modules/arg_name_formatter'
#
# adaption of RdocDocumentListener to use Markdown
# see http://rtomayko.github.com/ronn/ronn-format.7
#
module GLI
module Commands
class MarkdownDocumentListener
def initialize(global_options,options,arguments)
@io = STDOUT #File.new(File.basename($0) + ".rdoc",'w')
@nest = ''
@arg_name_formatter = GLI::Commands::HelpModules::ArgNameFormatter.new
end
def beginning
end
# Called when processing has completed
def ending
#@io.close
end
# Gives you the program description
def program_desc(desc)
@io.puts "== #{File.basename($0)} - #{desc}"
@io.puts
end
def program_long_desc(desc)
@io.puts desc
@io.puts
end
# Gives you the program version
def version(version)
@io.puts "v#{version}"
@io.puts
end
def options
if @nest.size == 0
@io.puts "=== Global Options"
else
@io.puts "#{@nest}=== Options"
end
end
# Gives you a flag in the current context
def flag(name,aliases,desc,long_desc,default_value,arg_name,must_match,type)
invocations = ([name] + Array(aliases)).map { |_| add_dashes(_) }.join('|')
usage = "#{invocations} #{arg_name || 'arg'}"
@io.puts "#{@nest}=== #{usage}"
@io.puts
@io.puts String(desc).strip
@io.puts
@io.puts "[Default Value] #{default_value || 'None'}"
@io.puts "[Must Match] #{must_match.to_s}" unless must_match.nil?
@io.puts String(long_desc).strip
@io.puts
end
# Gives you a switch in the current context
def switch(name,aliases,desc,long_desc,negetable)
if negetable
name = "[no-]#{name}" if name.to_s.length > 1
aliases = aliases.map { |_| _.to_s.length > 1 ? "[no-]#{_}" : _ }
end
invocations = ([name] + aliases).map { |_| add_dashes(_) }.join('|')
@io.puts "#{@nest}=== #{invocations}"
@io.puts String(desc).strip
@io.puts
@io.puts String(long_desc).strip
@io.puts
end
def end_options
end
def commands
@io.puts "#{@nest}=== Commands"
@nest = "#{@nest}="
end
# Gives you a command in the current context and creates a new context of this command
def command(name,aliases,desc,long_desc,arg_name,arg_options)
@io.puts "#{@nest}=== Command: <tt>#{([name] + aliases).join('|')} #{@arg_name_formatter.format(arg_name,arg_options)}</tt>"
@io.puts String(desc).strip
@io.puts
@io.puts String(long_desc).strip
@nest = "#{@nest}="
end
# Ends a command, and "pops" you back up one context
def end_command(name)
@nest.gsub!(/=$/,'')
end
# Gives you the name of the current command in the current context
def default_command(name)
@io.puts "[Default Command] #{name}" unless name.nil?
end
def end_commands
@nest.gsub!(/=$/,'')
end
private
def add_dashes(name)
name = "-#{name}"
name = "-#{name}" if name.length > 2
name
end
end
end
end
|