\n"
doc += "\n"
if ! item.synopsis.empty?
doc += "
Usage:
\n"
doc += "
\n"
item.synopsis.each do |s|
doc += "
" + escape(self.mod, s) + "
\n"
end
doc += "
\n"
end
doc += item.produce_doc
end
doc += "\n"
doc
end
end
class Collector
def initialize(mod, title)
@mod = mod
@title = title
end
def add_block(block)
if block.find { |l| l =~ /^@scope/ }
# is a scope block
@scopes ||= {}
scope = Scope::new(@mod, block)
if ! @scopes[scope.name]
@current_scope = scope
@scopes[scope.name] = scope
else
@current_scope = @scopes[scope.name]
@current_scope.merge(scope)
end
else
@current_scope && @current_scope.add_doc_item(@mod, block)
end
end
def produce_doc
@scopes.keys.sort.each do |k|
suffix = k.downcase
outfile = $outfiles + "/" + $loc + "/" + @mod + "_ref_" + suffix + ".xml"
File.open(outfile, "w") do |file|
file.write(@scopes[k].produce_doc)
puts "---> #{outfile} written."
end
end
end
def produce_index
outfile = $outfiles + "/" + $loc + "/" + @mod + "_ref.xml"
File.open(outfile, "w") do |file|
doc = <
HEAD
doc += "\n"
doc += "#{escape(@mod, @title)}\n"
doc += "\n"
doc += "\n"
@scopes.keys.sort.each do |k|
suffix = k.downcase
doc += "\n"
end
doc += "\n"
doc += "\n"
file.write(doc)
end
puts "---> Index file #{outfile} written."
end
end
collectors = {
"DRC" => Collector::new("drc", "DRC Reference"),
"LVS" => Collector::new("lvs", "LVS Reference")
}
$indirs.each do |indir|
Dir.entries(indir).each do |p|
if p !~ /\.rb$/
next
end
infile = File.join(indir, p)
puts "Extracting doc from #{infile} .."
File.open(infile, "r") do |file|
block = []
collector = nil
line = 0
file.each_line do |l|
line += 1
begin
l = unescape(l)
if ! collector
collectors.each do |k,c|
if l =~ /^\s*#\s*%#{k}%/
collector = c
l = nil
block = []
break
end
end
end
if l
if l =~ /^\s*#\s*(.*)\s*$/
collector && block.push($1)
elsif l =~ /^\s*$/
collector && collector.add_block(block)
collector = nil
end
end
rescue => ex
puts "ERROR in line #{line}:\n" + ex.to_s
puts ex.backtrace # @@@
exit 1
end
end
end
end
end
collectors.each do |k,collector|
collector.produce_doc
collector.produce_index
end