forked from openkylin/imagemagick
648 lines
17 KiB
Plaintext
648 lines
17 KiB
Plaintext
|
#!/usr/bin/perl -w
|
||
|
#
|
||
|
# Format ImageMagick comments into POD-format or HTML format
|
||
|
# documentation
|
||
|
# Produces *.pod or *.html files corresponding to *.c files
|
||
|
#
|
||
|
# Written by Bob Friesenhahn, April 1997
|
||
|
#
|
||
|
|
||
|
$opt_format='html';
|
||
|
$opt_srcdir='';
|
||
|
$opt_outdir='';
|
||
|
|
||
|
use Getopt::Long;
|
||
|
if ( ! GetOptions(
|
||
|
'format=s' => \$opt_format,
|
||
|
'srcdir=s' => \$opt_srcdir,
|
||
|
'outdir=s' => \$opt_outdir,
|
||
|
)
|
||
|
) {
|
||
|
print("Usage: fmtdocs [-srcdir srcdir] [-outdir outdir] [-format format] \n");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Source files to use
|
||
|
#
|
||
|
@srcs = ('animate.c',
|
||
|
'annotate.c',
|
||
|
'attribute.c',
|
||
|
'blob.c',
|
||
|
'cache.c',
|
||
|
'cache-view.c',
|
||
|
'color.c',
|
||
|
'colorspace.c',
|
||
|
'compare.c',
|
||
|
'composite.c',
|
||
|
'constitute.c',
|
||
|
'decorate.c',
|
||
|
'deprecate.c',
|
||
|
'draw.c',
|
||
|
'drawing-wand.c',
|
||
|
'display.c',
|
||
|
'effect.c',
|
||
|
'enhance.c',
|
||
|
'exception.c',
|
||
|
'fx.c',
|
||
|
'image.c',
|
||
|
'list.c',
|
||
|
'magick.c',
|
||
|
'magick-wand.c',
|
||
|
'memory.c',
|
||
|
'monitor.c',
|
||
|
'montage.c',
|
||
|
'paint.c',
|
||
|
'pixel-iterator.c',
|
||
|
'pixel-wand.c',
|
||
|
'profile.c',
|
||
|
'quantize.c',
|
||
|
'registry.c',
|
||
|
'resource.c',
|
||
|
'segment.c',
|
||
|
'shear.c',
|
||
|
'signature.c',
|
||
|
'stream.c',
|
||
|
'transform.c',
|
||
|
'resize.c',
|
||
|
'version.c');
|
||
|
|
||
|
$tmpname_pre_format = "/tmp/fmtdocs_pre.$$";
|
||
|
$tmpname_pod = "/tmp/fmtdocs_pod.$$";
|
||
|
$tmpname_html = "/tmp/fmtdocs_html.$$";
|
||
|
|
||
|
#@srcs = ('draw.c');
|
||
|
|
||
|
#
|
||
|
# What is for source files
|
||
|
#
|
||
|
%whatis =
|
||
|
(
|
||
|
'animate', 'Interactively Animate an Image Sequence',
|
||
|
'annotate', 'Annotate an Image',
|
||
|
'attribute', 'Set Text Attributes',
|
||
|
'blob', 'Read or Write Binary Large OBjects',
|
||
|
'color', 'Count the Colors in an Image',
|
||
|
'colorspace', 'Dealing with Image Colorspaces',
|
||
|
'compare', 'Compare an Image to a Reconstructed Image',
|
||
|
'constitute', 'Constitute an Image',
|
||
|
'composite', 'Composite an Image',
|
||
|
'decorate', 'Decorate an Image',
|
||
|
'deprecate', 'Deprecated Methods',
|
||
|
'display', 'Interactively Display and Edit an Image',
|
||
|
'draw', 'Draw on an Image',
|
||
|
'drawing_wand', 'Image Vector Drawing',
|
||
|
'effect', 'Add an Effect',
|
||
|
'fx', 'Add a Special Effect',
|
||
|
'enhance', 'Enhance an Image',
|
||
|
'exception', 'Dealing with Exceptions',
|
||
|
'image', 'Image Methods',
|
||
|
'list', 'Working with Image Lists',
|
||
|
'cache', 'Get or Set Image Pixels',
|
||
|
'cache_view', 'Working with Cache Views',
|
||
|
'magick', 'Read or List Image formats',
|
||
|
'magick_wand', 'Magick Wand',
|
||
|
'memory', 'Memory Allocation',
|
||
|
'monitor', 'Monitor the Progress of an Image Operation',
|
||
|
'montage', 'Create an Image Thumbnail',
|
||
|
'paint', 'Paint on an Image',
|
||
|
'pixel_iterator', 'Pixel Iterator',
|
||
|
'pixel_wand', 'Pixel Wand',
|
||
|
'profile', 'Dealing with Image Profiles',
|
||
|
'quantize', 'Reduce the Number of Unique Colors in an Image',
|
||
|
'registry', 'The Registry',
|
||
|
'resource', 'Minitor or Limit Resource Consumption',
|
||
|
'segment', 'Segment an Image with Thresholding Fuzzy c-Means',
|
||
|
'shear', 'Shear or Rotate an Image by an Arbitrary Angle',
|
||
|
'signature', 'Compute a Digital Signature for an Image',
|
||
|
'stream', 'The Pixel FIFO',
|
||
|
'transform', 'Transform an Image',
|
||
|
'resize', 'Resize an Image',
|
||
|
'version', 'Get Version and Copyright',
|
||
|
);
|
||
|
|
||
|
#
|
||
|
# Key words to replace with HTML links
|
||
|
#
|
||
|
my %keywords =
|
||
|
(
|
||
|
AffineMatrix => 'types.html#AffineMatrix',
|
||
|
BlobInfo => 'types.html#BlobInfo',
|
||
|
Cache => 'types.html#Cache',
|
||
|
ChannelType => 'types.html#ChannelType',
|
||
|
ChromaticityInfo => 'types.html#ChromaticityInfo',
|
||
|
ClassType => 'types.html#ClassType',
|
||
|
ClipPathUnits => 'types.html#ClipPathUnits',
|
||
|
ColorPacket => 'types.html#ColorPacket',
|
||
|
ColorspaceType => 'types.html#ColorspaceType',
|
||
|
ComplianceType => 'types.html#ComplianceType',
|
||
|
CompositeOperator => 'types.html#CompositeOperator',
|
||
|
CompressionType => 'types.html#CompressionType',
|
||
|
DecorationType => 'types.html#DecorationType',
|
||
|
DrawContext => 'types.html#DrawContext',
|
||
|
DrawInfo => 'types.html#DrawInfo',
|
||
|
ErrorHandler => 'types.html#ErrorHandler',
|
||
|
ExceptionInfo => 'types.html#ExceptionInfo',
|
||
|
ExceptionType => 'types.html#ExceptionType',
|
||
|
FillRule => 'types.html#FillRule',
|
||
|
FilterTypes => 'types.html#FilterTypes',
|
||
|
FrameInfo => 'types.html#FrameInfo',
|
||
|
GravityType => 'types.html#GravityType',
|
||
|
Image => 'types.html#Image',
|
||
|
ImageInfo => 'types.html#ImageInfo',
|
||
|
ImageType => 'types.html#ImageType',
|
||
|
InterlaceType => 'types.html#InterlaceType',
|
||
|
LayerType => 'types.html#LayerType',
|
||
|
MagickInfo => 'types.html#MagickInfo',
|
||
|
MonitorHandler => 'types.html#MonitorHandler',
|
||
|
MontageInfo => 'types.html#MontageInfo',
|
||
|
NoiseType => 'types.html#NoiseType',
|
||
|
PaintMethod => 'types.html#PaintMethod',
|
||
|
PixelPacket => 'types.html#PixelPacket',
|
||
|
PointInfo => 'types.html#PointInfo',
|
||
|
ProfileInfo => 'types.html#ProfileInfo',
|
||
|
QuantizeInfo => 'types.html#QuantizeInfo',
|
||
|
Quantum => 'types.html#Quantum',
|
||
|
QuantumType => 'types.html#QuantumType',
|
||
|
RectangleInfo => 'types.html#RectangleInfo',
|
||
|
RegistryType => 'types.html#RegistryType',
|
||
|
RenderingIntent => 'types.html#RenderingIntent',
|
||
|
ResolutionType => 'types.html#ResolutionType',
|
||
|
ResourceType => 'types.html#ResourceType',
|
||
|
SegmentInfo => 'types.html#SegmentInfo',
|
||
|
SignatureInfo => 'types.html#SignatureInfo',
|
||
|
StorageType => 'types.html#StorageType',
|
||
|
StreamHandler => 'types.html#StreamHandler',
|
||
|
StretchType => 'types.html#StretchType',
|
||
|
StyleType => 'types.html#StyleType',
|
||
|
TypeMetric => 'types.html#TypeMetric',
|
||
|
CacheView => 'types.html#CacheView',
|
||
|
VirtualPixelMethod => 'types.html#VirtualPixelMethod',
|
||
|
XResourceInfo => 'types.html#XResourceInfo',
|
||
|
);
|
||
|
|
||
|
|
||
|
foreach $src (@srcs) {
|
||
|
|
||
|
my($out,$command);
|
||
|
|
||
|
# Compute POD name
|
||
|
($base = $src) =~ s/\.[^\.]*$//g;
|
||
|
|
||
|
$out = "${base}.${opt_format}";
|
||
|
if ("${opt_outdir}" ne "") {
|
||
|
$out = "${opt_outdir}/${base}.${opt_format}";
|
||
|
}
|
||
|
|
||
|
if ("${opt_srcdir}" ne "") {
|
||
|
$src = "${opt_srcdir}/${src}";
|
||
|
}
|
||
|
|
||
|
$command='pod2html -netscape';
|
||
|
if ( $opt_format eq 'html' ) {
|
||
|
$command='pod2html -netscape';
|
||
|
} elsif ( $opt_format eq 'latex' ) {
|
||
|
$command='pod2latex';
|
||
|
} elsif ( $opt_format eq 'man' ) {
|
||
|
$command='pod2man';
|
||
|
} elsif ( $opt_format eq 'text' ) {
|
||
|
$command='pod2text';
|
||
|
} elsif ( $opt_format eq 'pod' ) {
|
||
|
$command='cat';
|
||
|
}
|
||
|
|
||
|
print( "Processing $src -> $out\n" );
|
||
|
|
||
|
pre_format($src, $tmpname_pre_format); # Make easily parsed
|
||
|
format_to_pod($tmpname_pre_format, $tmpname_pod); # Format to pod.
|
||
|
|
||
|
if ( $opt_format eq 'html' ) {
|
||
|
system("$command $tmpname_pod > \"$tmpname_html\"");
|
||
|
reformat_html($tmpname_html,$out);
|
||
|
} else {
|
||
|
system("$command $tmpname_pod > \"$out\"");
|
||
|
}
|
||
|
unlink($tmpname_pre_format);
|
||
|
unlink($tmpname_pod);
|
||
|
unlink($tmpname_html);
|
||
|
}
|
||
|
|
||
|
#unlink($tmpname_pre_format);
|
||
|
exit(0);
|
||
|
|
||
|
#
|
||
|
# Reformat pod2html-generated HTML into nicer form.
|
||
|
#
|
||
|
sub reformat_html {
|
||
|
my($infile, $outfile) = @_;
|
||
|
|
||
|
open( IN, "<$infile" ) || die("Failed to open \"$infile\" for read\n" );
|
||
|
open( OUT, ">$outfile" ) || die("Failed to open \"$outfile\" for write\n" );
|
||
|
|
||
|
INPUT:
|
||
|
while(<IN>) {
|
||
|
s|<\!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">|<\!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
|
"http://www.w3.org/TR/html4/loose.dtd">|;
|
||
|
s|<HEAD>|<HEAD>
|
||
|
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
|
||
|
<STYLE>
|
||
|
<!--
|
||
|
\@page { size: 8.5in 11in }
|
||
|
TD P { color: #000000; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-size: 12pt }
|
||
|
P { color: #000000; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-size: 12pt }
|
||
|
H2 { color: #000000 }
|
||
|
A:link { color: #0085c0 }
|
||
|
A:visited { color: #800080 }
|
||
|
-->
|
||
|
</STYLE>
|
||
|
|;
|
||
|
s|<link rev="made" href="mailto:root\@localhost" />|<link rel="stylesheet" type="text/css" href="../magick.css">|;
|
||
|
s|<body style="background-color: white">|<body marginheight="1" marginwidth="1" topmargin="1" leftmargin="1">
|
||
|
<a name="top"></a>
|
||
|
<table border="0" cellpadding="0" cellspacing="0" summary="Masthead" width="100%">
|
||
|
<tbody>
|
||
|
<tr>
|
||
|
<td bgcolor="#003399" width="25%" height="118" background="../../images/background.gif"><a href="https://imagemagick.org/"><img src="../../images/script.gif" width="278" height="118" border="0" alt="" /></a></td>
|
||
|
<td bgcolor="#003399" width="60%" height="118" background="../../images/background.gif"><a href="http://www.networkeleven.com/direct.php?magick_all"><img src="../../images/promote.png" border="0" width="186" height="52" vspace="29" alt="Powered by NetworkEleven" /></a></td>
|
||
|
<td bgcolor="#003399" width="114" height="118" align="right"><img src="../../images/sprite.png" width="114" height="118" alt="" /></td>
|
||
|
<td bgcolor="#003399" width="114" height="118" align="right"><a href="http://www.imagemagick.net"><img src="../../images/logo.png" width="114" height="118" border="0" alt="ImageMagick logo" /></a></td>
|
||
|
</tr></tbody></table>
|
||
|
<table align="left" border="0" cellpadding="2" cellspacing="2" summary="Navigation buttons" width="20%">
|
||
|
<tr>
|
||
|
<td>
|
||
|
<form target="_self" action="../../index.html"><input type="submit" title="ImageMagick Home" value=" Home" style="background-color: #1947A3; background-image:url('../../../images/background.gif'); color:#fbc713; font-weight:bold"></form></td>
|
||
|
<td>
|
||
|
<form target="_self" action="../../www/apis.html"><input type="submit" title="ImageMagick API" value=" API " style="background-color: #1947A3; background-image:url('../../../images/background.gif'); color:#fbc713; font-weight:bold"></form></td>
|
||
|
<td>
|
||
|
<form target="_self" action="../../www/download.html"><input type="submit" title="ImageMagick Download" value="Download" style="background-color: #1947A3; background-image:url('../../../images/background.gif'); color:#fbc713; font-weight:bold"></form></td></tr></table>
|
||
|
<div align="right" style="margin-top:3px; padding-right:4px">
|
||
|
<form action="http://studio.imagemagick.org/Sage/scripts/Sage.cgi"><input type="TEXT" name="query" size="32" maxlength="255"> <input type="SUBMIT" name="sa" value="Search" style="background-color: #1947A3; background-image:url('../../../images/background.gif'); bgcolor:#003399; color:#fbc713; font-weight:bold"></form></div>
|
||
|
<table align="left" border="0" cellpadding="10" cellspacing="0" style="margin-top:-17px" width="100%">
|
||
|
<tr>
|
||
|
<td>
|
||
|
|;
|
||
|
s|</body>|
|
||
|
<HR>
|
||
|
|
||
|
<a href="#top"><img src="../../../images/top.gif" border=0 width="35" height="46" align="right" alt="Top of page"></a>
|
||
|
<form action="http://studio.imagemagick.org/magick/" style="margin-top:5px">
|
||
|
<input type="submit" title="Help!" value="Help!" style="background-image:url('../../../images/background.gif'); color:#fbc713; font-weight:bold">
|
||
|
<small>"Image manipulation software that works like magick"</small>
|
||
|
</form></td>
|
||
|
</tr></table>
|
||
|
|
||
|
</body>
|
||
|
|;
|
||
|
s|<FONT SIZE=-1>||g;
|
||
|
s|</FONT>||g;
|
||
|
|
||
|
s|<H2>|<H3>|g;
|
||
|
s|</H2>|</H3>|g;
|
||
|
|
||
|
s|<H1>|<H2>|g;
|
||
|
s|</H1>|</H2>|g;
|
||
|
|
||
|
s|<DT>|<DD><P></P><DT>|g;
|
||
|
s|<DL>|<DL><DT><DD><DL>|g;
|
||
|
s|</DL>|</DL></DL>|g;
|
||
|
s|<dd>|<DD>|g;
|
||
|
s|<p>|<P>|g;
|
||
|
s|</p>|</P>|g;
|
||
|
s|</LI>||g;
|
||
|
s|>o |>|g;
|
||
|
s|unsignedint|unsigned int|g;
|
||
|
print( OUT $_ );
|
||
|
}
|
||
|
close( TMP );
|
||
|
close( IN );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Pre-process file into intermediate form
|
||
|
#
|
||
|
# Initializes globals:
|
||
|
#
|
||
|
# @functions - Function names
|
||
|
# %synopsis - Function synopsis
|
||
|
#
|
||
|
sub pre_format {
|
||
|
my($infile, $tmpfile) = @_;
|
||
|
|
||
|
my $inpara = 0; # Set to 1 if in paragraph
|
||
|
my $inlist = 0; # Set to 1 if in list-item paragraph
|
||
|
|
||
|
# Open C source file
|
||
|
open( IN, "<$infile" ) || die("Failed to open \"$infile\" for read\n" );
|
||
|
|
||
|
# Open TMP file
|
||
|
open( TMP, ">$tmpfile" ) || die("Failed to open \"$tmpfile\" for write\n" );
|
||
|
|
||
|
undef @functions;
|
||
|
undef %synopsis;
|
||
|
|
||
|
# Skip past first form feed
|
||
|
while(<IN>) {
|
||
|
last if m/\014/;
|
||
|
}
|
||
|
|
||
|
LINE:
|
||
|
while(<IN>) {
|
||
|
if (m/^\+/) {
|
||
|
while(<IN>) {
|
||
|
last unless m/^%/;
|
||
|
}
|
||
|
next;
|
||
|
}
|
||
|
next unless m/^%/ ;
|
||
|
chop;
|
||
|
|
||
|
# Extract and save function title
|
||
|
if (m/^%\s+((\w )+)\s+%/) {
|
||
|
($ftitle = $1) =~ s/ //g;
|
||
|
push(@functions, $ftitle);
|
||
|
print( TMP "===$ftitle\n" );
|
||
|
next;
|
||
|
}
|
||
|
|
||
|
# Zap text we don't want
|
||
|
next if ( m/^%.+%/ ); # "%*%
|
||
|
s/^%\s{0,2}//;
|
||
|
|
||
|
# Extract and save synopsis info
|
||
|
if (m /\(\)/ ) {
|
||
|
# nothing
|
||
|
;
|
||
|
}
|
||
|
elsif ( m/${ftitle}\(.*\)$/ ) {
|
||
|
s/,/ , /g;
|
||
|
s/\(/ ( /g;
|
||
|
s/\)/ ) /g;
|
||
|
s/\*/ * /g;
|
||
|
s/\s+/ /g;
|
||
|
|
||
|
s/\(\s+\*/(*/g;
|
||
|
s/ ,/,/g;
|
||
|
s/ \(/(/g;
|
||
|
s/\) /)/g;
|
||
|
s/ \* / */g;
|
||
|
|
||
|
s/^\s*//;
|
||
|
$synopsis{$ftitle} = $_ . ';'; # Append semi-colon, prototype style
|
||
|
print ( TMP " " . $synopsis{$ftitle} . "\n" );
|
||
|
next LINE;
|
||
|
}
|
||
|
elsif ( m/${ftitle}\(.*/ ) {
|
||
|
$synopsis{$ftitle} = $_;
|
||
|
do {
|
||
|
$_ = <IN>;
|
||
|
chop;
|
||
|
# Zap text we don't want
|
||
|
next if m/^%.+%/; # "%*%
|
||
|
s/^%\s{0,2}//;
|
||
|
$synopsis{$ftitle} .= $_;
|
||
|
} until m/^\s*$/;
|
||
|
$_ = $synopsis{$ftitle};
|
||
|
|
||
|
s/,/ , /g;
|
||
|
s/\(/ ( /g;
|
||
|
s/\)/ ) /g;
|
||
|
s/\*/ * /g;
|
||
|
s/\s+/ /g;
|
||
|
|
||
|
s/\(\s+\*/(*/g;
|
||
|
s/ ,/,/g;
|
||
|
s/ \(/(/g;
|
||
|
s/\) /)/g;
|
||
|
s/ \* / */g;
|
||
|
|
||
|
s/^\s*//;
|
||
|
$synopsis{$ftitle} = $_ . ';'; # Append semi-colon, prototype style
|
||
|
print ( TMP " " . $synopsis{$ftitle} . "\n" );
|
||
|
next LINE;
|
||
|
}
|
||
|
|
||
|
# Keep track of paragraphing
|
||
|
if( ! m/^$/ ) {
|
||
|
if ( $inpara == 0 ) {
|
||
|
$inpara = 1; # Start of paragraph
|
||
|
$para = "$_"; # Start paragraph string
|
||
|
} else {
|
||
|
# Inside paragraph
|
||
|
$para .= " $_"; # Add line to paragraph
|
||
|
}
|
||
|
}
|
||
|
# Keep track of list items so they can
|
||
|
# be wrapped as a paragraph
|
||
|
if( m/^\s+(o[^:]+:|o|[0-9]\.)\s(.*)/ ) {
|
||
|
$inlist = 1;
|
||
|
}
|
||
|
|
||
|
if ( $inpara == 1 ) {
|
||
|
if( $para =~ m/^\s+\S+/ && ! $inlist ) {
|
||
|
# Lines that start with a space shouldn't be munged
|
||
|
$inpara = 0; # End of paragraph
|
||
|
$inlist = 0;
|
||
|
$para .= ""; # Terminate paragraph
|
||
|
print( TMP "$para\n" );
|
||
|
}
|
||
|
elsif( m/^$/ ) {
|
||
|
# End of paragraph
|
||
|
$inpara = 0; # End of paragraph
|
||
|
$inlist = 0;
|
||
|
$para .= ""; # Terminate paragraph
|
||
|
$para =~ s/^\s+//g; # Eliminate any leading space
|
||
|
$para =~ s/\s+/ /g; # Canonicalize whitespace
|
||
|
$para =~ s/ $//; # Trim final space
|
||
|
$para =~ s/([a-zA-Z0-9][.!?][)'"]*) /$1 /g; #' Fix sentance ends
|
||
|
print( TMP "\n$para\n\n" );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
close( TMP );
|
||
|
close( IN );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Second pass
|
||
|
# Process into formatted form
|
||
|
#
|
||
|
sub format_to_pod {
|
||
|
my($infile, $outfile) = @_;
|
||
|
|
||
|
my $func;
|
||
|
|
||
|
my $inlist = 0; # Set to one if in indented list
|
||
|
|
||
|
# Open input file
|
||
|
open( IN, "<$infile" ) || die("Failed to open \"$infile\" for read\n" );
|
||
|
|
||
|
# Open output file
|
||
|
open( OUT, ">$outfile" ) || die("Failed to open \"$outfile\" for write\n" );
|
||
|
|
||
|
# Name field
|
||
|
print( OUT head1("NAME") );
|
||
|
if (!defined($whatis{$base})) {
|
||
|
print("Whatis definition missing for \"$base\"!\n");
|
||
|
print( OUT "${base} - Unknown\n\n" );
|
||
|
} else {
|
||
|
print( OUT "${base} - $whatis{$base}\n\n" );
|
||
|
}
|
||
|
|
||
|
# Synopsis field (function signatures)
|
||
|
print( OUT head1("SYNOPSIS") );
|
||
|
foreach $func (sort( @functions )) {
|
||
|
if (defined $synopsis{$func} ) {
|
||
|
$_ = $synopsis{$func};
|
||
|
s/$func/ B<$func>/;
|
||
|
s/^\s*//;
|
||
|
my $synopsis = $_;
|
||
|
print( OUT $synopsis, "\n\n" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Description field
|
||
|
print( OUT head1("FUNCTION DESCRIPTIONS") );
|
||
|
|
||
|
while(<IN>){
|
||
|
chop;
|
||
|
next if m/^$/;
|
||
|
|
||
|
# Match list element
|
||
|
if( m/^(o[^:]+:|o|[0-9]\.?)\s(.*)/ ) {
|
||
|
my $bullet = $1;
|
||
|
my $bullet_text = $2;
|
||
|
|
||
|
print( OUT startlist() ) unless $inlist;
|
||
|
$inlist = 1;
|
||
|
print( OUT item($bullet), "$bullet_text\n\n" );
|
||
|
next;
|
||
|
} else {
|
||
|
print( OUT endlist() ) if $inlist;
|
||
|
$inlist = 0;
|
||
|
}
|
||
|
|
||
|
# Match synopsis item
|
||
|
if( defined $func && m/$func\s*\(.*\)/ ) {
|
||
|
# Split all words with spaces to aid with tokenization
|
||
|
s/,/ , /g;
|
||
|
s/\(/ ( /g;
|
||
|
s/\)/ ) /g;
|
||
|
s/\*/ * /g;
|
||
|
|
||
|
my $html = '';
|
||
|
|
||
|
# Replace tokens matching keywords with HTML links.
|
||
|
TOKEN: foreach $token ( split(' ', $_ ) ) {
|
||
|
foreach $keyword ( %keywords ) {
|
||
|
if ( $token eq $keyword ) {
|
||
|
$html .= linked( $keyword, $keywords{$keyword} );
|
||
|
$html .= " ";
|
||
|
next TOKEN;
|
||
|
}
|
||
|
}
|
||
|
$html .= "$token ";
|
||
|
}
|
||
|
$_ = $html;
|
||
|
# Remove excess spaces
|
||
|
s/\s+/ /g;
|
||
|
s/ ,/,/g;
|
||
|
s/\* /*/g;
|
||
|
s/\)\s*\;/);/;
|
||
|
s/^\s*//;
|
||
|
s/ \( *\)/\(\)/;
|
||
|
|
||
|
# This is very poor because text is output specifically
|
||
|
# for HTML so the text isn't output at all for other target
|
||
|
# formats.
|
||
|
print( OUT html("<blockquote>$_</blockquote>") );
|
||
|
next;
|
||
|
}
|
||
|
|
||
|
# Match function title
|
||
|
if( m/===([a-zA-Z0-9]+)/ ) {
|
||
|
$func = $1;
|
||
|
print( OUT head2($func) );
|
||
|
next;
|
||
|
}
|
||
|
|
||
|
print( OUT "\n") if /^[^ ]/;
|
||
|
print( OUT "$_\n") ;
|
||
|
print( OUT "\n") if /^[^ ]/;
|
||
|
}
|
||
|
|
||
|
close( OUT );
|
||
|
close( IN );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Return level 1 heading
|
||
|
# Similar to: <H1>heading</H1>
|
||
|
#
|
||
|
sub head1 {
|
||
|
my($heading) = @_;
|
||
|
return( "=head1 $heading\n\n" );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Return level 2 heading
|
||
|
# Similar to: <H2>heading</H2>
|
||
|
#
|
||
|
sub head2 {
|
||
|
my($heading) = @_;
|
||
|
return( "=head2 $heading\n\n" );
|
||
|
}
|
||
|
|
||
|
|
||
|
#
|
||
|
# Return item
|
||
|
# Simlar to: <I>
|
||
|
#
|
||
|
sub item {
|
||
|
my($item) = @_;
|
||
|
return( "=item $item\n\n" );
|
||
|
}
|
||
|
|
||
|
|
||
|
#
|
||
|
# Start list
|
||
|
# Similar to: <UL>
|
||
|
#
|
||
|
sub startlist {
|
||
|
return( "=over 4\n\n" )
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# End list
|
||
|
# Similar to: </UL>
|
||
|
#
|
||
|
sub endlist {
|
||
|
return( "=back\n\n" );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Preformatted text
|
||
|
# Similar to <PRE></PRE>
|
||
|
#
|
||
|
sub formated {
|
||
|
my($text) = @_;
|
||
|
return( " $text\n\n" );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Raw HTML paragraph
|
||
|
#
|
||
|
sub html {
|
||
|
my($html) = @_;
|
||
|
return return( "=for html $html\n\n" );
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# HTML Link
|
||
|
# Similar to: <A HREF="url">description</A>
|
||
|
#
|
||
|
sub linked {
|
||
|
local($description, $url) = @_;
|
||
|
return( "<A HREF=\"" . $url . "\">" . $description . "</A>" );
|
||
|
}
|