def usage(*opt)
t = @usage
lastflag = nil
lastdesc = nil
usage = ''
while t.length() > 0
t.sub!(/\A[ \t]*#.*\n/,".") and next
se = DelimScanner::new( t )
if t =~ /\A\s*\[pvtype:/
if action = se.extractBracketed("[")
t.sub!(Regexp::quote( action ).to_re,'')
t.sub!(/\A[ \t]*\n/,"")
next
end
end
codeblockDelimiters = {
'{' => '}'
}
se = DelimScanner::new( t )
if action = se.extractCodeblock(codeblockDelimiters)
t.sub!(Regexp::quote( action ).to_re,'')
t.sub!(/\A[ \t]*\n/,"")
decfirst = 0 unless !decfirst.nil?
next
end
if t.sub!(/\A(.*?\S.*?\t+)(.*?\n)/,"")
decfirst = 0 unless !decfirst.nil?
spec = "#$1".expand_tabs!()
desc = "#$2".expand_tabs!()
t.gsub!(/\A((?![ \t]*(\{|\n)|.*?\S.*?\t.*?\S).*?\S.*\n)/) { |i|
desc += "#$1".expand_tabs!()
""
}
next if desc =~ /\[undocumented\]/i
uoff = 0
spec.gsub!(/(<[a-zA-Z]\w*):([^>]+)>/e) { |i|
uoff += 1 + "#$2".length() and "#$1>"
}
spec.gsub!(/\t/,"=")
ditto = desc =~ /\A\s*\[ditto\]/
desc.gsub!(/^\s*\[.*?\]\s*\n/m,"")
desc.gsub!(BracketDirectives,'')
if ditto
desc = (lastdesc ? _ditto(lastflag,lastdesc,desc) : "" )
elsif desc =~ /\A\s*\Z/
next
else
lastdesc = desc
end
spec =~ /\A\s*(\S+)/ and lastflag = "#$1"
usage += spec + ' ' * uoff + desc
next
end
if t.sub!(/((?:(?!\[pvtype:).)*)(\n|(?=\[pvtype:))/,"")
desc = "#$1"+("#$2"||'')
if @tight || desc !~ /\A\s*\Z/
desc.gsub!(BracketDirectives,'')
next if desc =~ /\A\s*\Z/
end
decfirst = 1 unless !decfirst.nil? or desc =~ /\A\s*\Z/
usage += desc
end
end
required = ''
for arg in @args
required += ' ' + arg.desc + ' ' if arg.required
end
usage.gsub!(/\255/,"[/")
required.gsub!(/<([a-zA-Z]\w*):[^>]+>/,'<\1>')
helpcmd = Getopt::Declare::Arg::besthelp
versioncmd = Getopt::Declare::Arg::bestversion
pager = $stdout
unless @source.nil?
version()
prog = "#{$0}"
prog.sub!(%r#.*/#,'')
pager.print "Usage: #{prog} [options]#{required}\n"
pager.print " #{prog} #{helpcmd}\n" if helpcmd
pager.print " #{prog} #{versioncmd}\n" if versioncmd
pager.print "\n" unless decfirst && decfirst == 1 && usage =~ /\A[ \t]*\n/
end
pager.print "Options:\n" unless decfirst && decfirst == 1
pager.print usage
exit(opt[0]) if opt[0]
end