#! /usr/bin/ruby -w #================================================================ # myrbdoc # Document generator for Ruby sources #================================================================ # main routine def main files = [] err = false destdir = nil ptitle = "Ruby API" afile = nil i = 0 while(i < ARGV.length) if(files.length < 1 && ARGV[i] =~ /^-/) if(ARGV[i] == "-d") destdir = ARGV[i+=1] elsif(ARGV[i] == "-t") ptitle = ARGV[i+=1] elsif(ARGV[i] == "-a") afile = ARGV[i+=1] else usage() end else files.push(ARGV[i]) end i += 1 end (files.length > 0) || usage() (destdir) || (destdir = ".") (File::directory?(destdir)) || Dir::mkdir(destdir) files.each() do |file| makedoc(destdir, ptitle, file) end makeindex(destdir, ptitle, afile, files) return 0 end # print the usage and exit def usage printf(STDERR, "%s: usage: %s: [-d dir] [-t str] [-a file] file ...\n", $0, $0) exit(1) end # generate a document def makedoc(destdir, ptitle, name) source = name.gsub(/.*\//, "") dest = sprintf("%s/%s.html", destdir, source) File::open(name, "r") do |infile| File::open(dest, "w") do |outfile| writehead(outfile, ptitle, source) while(line = infile.gets()) line.chomp!() line.gsub!(/^ */, "") if(line =~ /^\x23\x23/) group = Array::new() while(line = infile.gets()) line.chomp!() line.gsub!(/^ */, "") (line =~ /^\x23[^@]/) || break (line.length() > 1) || next group.push(line) end if(group.length() > 1) printf(outfile, "
\n") kbd = group[0] =~ /^\x23:/ group.each() do |elem| elem.gsub!(/^\x23[ :]*/, "") elem.gsub!(/&/, "&") elem.gsub!(//, ">") elem.gsub!(/\x22/, """) end if(kbd) printf(outfile, "
%s
\n", group[0]) else printf(outfile, "
%s
\n", group[0]) end group.shift() if(group.length > 0) printf(outfile, "
\n") group.each() do |elem| printf(outfile, "%s\n", elem) end printf(outfile, "
\n") end printf(outfile, "
\n") end end end printf(outfile, "
\n") writetail(outfile) end end end # generate the index file def makeindex(destdir, ptitle, afile, files) dest = sprintf("%s/index.html", destdir) File::open(dest, "w") do |outfile| writehead(outfile, ptitle) if(afile) File::open(afile, "r") do |infile| while(line = infile.gets()) line.chomp!() printf(outfile, "%s\n", line) end end printf(outfile, "
\n") end printf(outfile, "

API

\n") printf(outfile, "\n") printf(outfile, "
\n") writetail(outfile) end end # write header def writehead(outfile, ptitle, name = nil) if(name) title = sprintf("%s (%s)", name.gsub(/\..*/, ""), ptitle) head = sprintf("API of %s", name.gsub(/\..*/, "")) navi = "
[Back]
" else title = sprintf("INDEX (%s)", ptitle) head = ptitle navi = "
Ruby Source Documents
" end printf(outfile, "%s", <<__MYEOF) #{title} #{navi}

#{head}


__MYEOF end # write tail def writetail(outfile) (sec, min, hour, mday, mon, year) = Time::now.to_a datestr = sprintf("%04d/%02d/%02d", year, mon, mday) printf(outfile, "%s", <<__MYEOF)
Generated by #{$0}, #{datestr}.
__MYEOF end # execute main $0.gsub!(/.*\//, "") exit(main()) # END OF FILE