: # *-*-perl-*-*
eval 'exec perl -S $0 "$@"'
if $running_under_some_shell;
#
# Troff-man.sum - generate a summary of a -man file using semantic information
#
# Interesting -man Macros
# -----------------------
# .B t bold tag
# .BI t bold and italics tag
# .BR t bold and roman tag
# .I t italics tag
# .IB t bold and italics tag
# .IR t italics and roman tag
# .IP x i indented paragraph with hanging tag
# .RB t bold and roman tag
# .RI t italics and roman tag
# .PP Paragraph
# .SH t subheading
# .TH n c x v m page named n, chapter c, commentary x; foot left v,
# head center m
# .TP x indented paragraph with hanging tag
#
# Interesting -man Conventions
# ----------------------------
# .SH NAME Name and brief description
# .SH SYNOPSIS Usage
# .SH DESCRIPTION Long description
# .SH AUTHOR Author(s)
# .SH FILES Related files
# .SH SEE ALSO Related commands and documents
#
#
# Darren Hardy, hardy@cs.colorado.edu, March 1994
#
# ManPage.sum,v 1.6 1995/09/05 20:17:23 hardy Exp
#
#######################################################################
#
# Copyright (c) 1994, 1995. All rights reserved.
#
# The Harvest software was developed by the Internet Research Task
# Force Research Group on Resource Discovery (IRTF-RD):
#
# Mic Bowman of Transarc Corporation.
# Peter Danzig of the University of Southern California.
# Darren R. Hardy of the University of Colorado at Boulder.
# Udi Manber of the University of Arizona.
# Michael F. Schwartz of the University of Colorado at Boulder.
# Duane Wessels of the University of Colorado at Boulder.
#
# This copyright notice applies to software in the Harvest
# ``src/'' directory only. Users should consult the individual
# copyright notices in the ``components/'' subdirectories for
# copyright information about other software bundled with the
# Harvest source code distribution.
#
# TERMS OF USE
#
# The Harvest software may be used and re-distributed without
# charge, provided that the software origin and research team are
# cited in any use of the system. Most commonly this is
# accomplished by including a link to the Harvest Home Page
# (http://harvest.cs.colorado.edu/) from the query page of any
# Broker you deploy, as well as in the query result pages. These
# links are generated automatically by the standard Broker
# software distribution.
#
# The Harvest software is provided ``as is'', without express or
# implied warranty, and with no support nor obligation to assist
# in its use, correction, modification or enhancement. We assume
# no liability with respect to the infringement of copyrights,
# trade secrets, or any patents, and are not responsible for
# consequential damages. Proper use of the Harvest software is
# entirely the responsibility of the user.
#
# DERIVATIVE WORKS
#
# Users may make derivative works from the Harvest software, subject
# to the following constraints:
#
# - You must include the above copyright notice and these
# accompanying paragraphs in all forms of derivative works,
# and any documentation and other materials related to such
# distribution and use acknowledge that the software was
# developed at the above institutions.
#
# - You must notify IRTF-RD regarding your distribution of
# the derivative work.
#
# - You must clearly notify users that your are distributing
# a modified version and not the original Harvest software.
#
# - Any derivative product is also subject to these copyright
# and use restrictions.
#
# Note that the Harvest software is NOT in the public domain. We
# retain copyright, as specified above.
#
# HISTORY OF FREE SOFTWARE STATUS
#
# Originally we required sites to license the software in cases
# where they were going to build commercial products/services
# around Harvest. In June 1995 we changed this policy. We now
# allow people to use the core Harvest software (the code found in
# the Harvest ``src/'' directory) for free. We made this change
# in the interest of encouraging the widest possible deployment of
# the technology. The Harvest software is really a reference
# implementation of a set of protocols and formats, some of which
# we intend to standardize. We encourage commercial
# re-implementations of code complying to this set of standards.
#
#
&usage() if ($#ARGV != 0);
$file = shift(@ARGV);
&usage() if ($file eq "");
undef %values;
#
# Read in the values array
#
open(INPUT, "< $file") || die "Cannot read $file";
while () {
next if (/^[\.']+\\\"/o); # ignore comments
top:
&grab_para("Title"), next if (/^\.SH\s+["]*NAME["]*/o);
&grab_para("Abstract"), next if (/^\.SH\s+["]*DESCRIPTION["]*/o);
&grab_para("Author"), next if (/^\.SH\s+["]*AUTHOR[S]["]*/o);
&grab_para("Related"), next if (/^\.SH\s+["]*FILES["]*/o);
&grab_para("Related"), next if (/^\.SH\s+["]*SEE\s+ALSO["]*/o);
&grab_para("Related"), next if (/^\.SH\s+["]*RELATED["]*/o);
&grab_sect("Synopsis", ".SH"), next if (/^\.SH\s+["]*SYNOPSIS["]*/o);
&grab("Title", $1), next if (/^\.SH\s+(.*)$/o);
&grab("Partial-Text", $2), next if (/^\.(B|IP|TH)\s+(.*)$/o);
if (defined($saved_line)) {
$_ = $saved_line;
undef $saved_line;
goto top;
}
}
close(INPUT);
#
# Print the formmated values array
#
foreach $k (sort keys %values) {
$values{$k} =~ s/\\[\*fs].//g; # remove in-line troff
$values{$k} =~ s/\\.//g; # remove in-line troff
print "$k" , "{" , length($values{$k}) , "}:\t";
print $values{$k};
print "\n";
}
exit(0);
sub usage {
print STDERR "Usage: Troff-man.sum filename\n";
exit(1);
}
# grab_line uses the next input line that isn't a troff directive
sub grab_line {
local($tag) = @_;
while () {
next if (/^\.\w\w/o);
s/"//g;
$values{$tag} .= $_;
last;
}
}
# grab_para uses all of the input until a paragraph break
sub grab_para {
local($tag) = @_;
$npara = 0;
while () {
next if (/^\.(iX|so)/o); # skip garbage
next if (/^\.(PP|LP)/o && $npara++ == 0);
last if (/^\.\w\w/o);
$values{$tag} .= $_;
}
$saved_line = $_;
}
# grab_sect uses all of the input until the line starts with $end
sub grab_sect {
local($tag, $end) = @_;
while () {
last if (/^$end/);
next if (/^\.\w\w/o);
$values{$tag} .= $_;
}
}
# grab associates $in with $tag
sub grab {
local($tag, $in) = @_;
$values{$tag} .= $in . "\n";
}