13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#!/usr/bin/perl
23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    eval 'exec perl -S $0 "$@"'
33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if $runnning_under_some_shell;
43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# txt2html.pl
63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Convert raw text to something with a little HTML formatting
73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Written by Seth Golub <seth@cs.wustl.edu>
93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#            http://www.cs.wustl.edu/~seth/txt2html/
103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# $Revision: 1.15 $
123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# $Date: 2004/10/05 20:30:33 $
133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# $Author: cristy $
143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# $Log: txt2html,v $
173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.15  2004/10/05 20:30:33  cristy
183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.14  2004/04/26 19:53:42  cristy
213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.13  2004/04/26 15:03:00  cristy
243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.12  2004/04/24 13:48:50  cristy
273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.11  2003/10/28 18:40:59  cristy
303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.10  2003/10/28 03:44:38  cristy
333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.9  2003/10/17 13:59:12  cristy
363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.8  2003/10/16 22:26:06  cristy
393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.7  2003/10/12 04:10:15  cristy
423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.6  2003/07/20 03:39:50  cristy
453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.5  2003/07/19 19:44:20  cristy
483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.4  2003/04/07 23:35:40  cristy
513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.3  2003/04/05 02:52:42  cristy
543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.2  2003/04/04 20:50:50  cristy
573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.1  2003/03/25 15:10:23  cristy
603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# genesis
613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.1  2003/03/22 17:02:00  cristy
633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# *** empty log message ***
643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.10  1994/12/28  20:10:25  seth
663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added --extract, etc.
673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.9  94/12/13  15:16:23  15:16:23  seth (Seth Golub)
693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Changed from #!/usr/local/bin/perl to the more clever version in
703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    the man page.  (How did I manage not to read this for so long?)
713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Swapped hrule & header back to handle double lines.  Why should
723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    this order screw up headers?
733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.8  1994/11/30  21:07:03  seth
753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * put mail_anchor back in.  (Why did I take this out?)
763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Finally added handling of lettered lists (ordered lists marked with
773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    letters)
783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added title option (--title, -t)
793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Shortline now looks at how long the line was before txt2html
803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    started adding tags.   ($line_length)
813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Changed list references to scalars where appropriate.  (@foo[0] -> $foo[0])
823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added untabify() to homogenize leading indentation for list
833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    prefixes and functions that use line length
843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added "underline tolerance" for when underlines are not exactly the
853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    same length as what they underline.
863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added error message for unrecognized options
873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * removed \w matching on --capstag
883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Tagline now removes leading & trailing whitespace before tagging
893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * swapped order of caps & heading in main loop
903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Cleaned up code for speed and to get rid of warnings
913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added more restrictions to something being a mail header
923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added indentation for lists, just to make the output more readable.
933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Fixed major bug in lists: $OL and $UL were never set, so when a
943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    list was ended "</UL>" was *always* used!
953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * swapped order of hrule & header to properly handle long underlines
963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.7  94/10/28  13:16:11  13:16:11  seth (Seth Golub)
983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added to comments in options section
993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * renamed blank to is_blank
1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Page break is converted to horizontal rule <HR>
1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * moved usage subroutine up top so people who look through code see
1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    it sooner
1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.6  94/10/28  12:43:46  12:43:46  seth (Seth Golub)
1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Creates anchors at each heading
1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.5  94/07/14  17:43:59  17:43:59  seth (Seth Golub)
1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Fixed minor bug in Headers
1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Preformatting can be set to only start/stop when TWO lines of
1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    [non]formatted-looking-text are encountered.  Old behavior is still
1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    possible through command line options (-pb 1 -pe 1).
1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Can preformat entire document (-pb 0) or disable preformatting
1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    completely (-pe 0).
1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Fixed minor bug in CAPS handling (paragraph breaks broke)
1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Puts paragraph tags *before* paragraphs, not just between them.
1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.4  94/06/20  16:42:55  16:42:55  seth (Seth Golub)
1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Allow ':' for numbered lists (e.g. "1: Figs")
1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Whitespace at end of line will not start or end preformatting
1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Mailmode is now off by default
1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Doesn't break short lines if they are the first line in a list
1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    item.  It *should* break them anyway if the next line is a
1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    continuation of the list item, but I haven't dealt with this yet.
1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added action on lines that are all capital letters.  You can change
1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    how these lines get tagged, as well as the mininum number of
1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    consecutive capital letters required to fire off this action.
1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.3  94/05/17  15:58:58  15:58:58  seth (Seth Golub)
1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# * Tiny bugfix in unhyphenation
1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.2  94/05/16  18:15:16  18:15:16  seth (Seth Golub)
1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#  * Added unhyphenation
1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Revision 1.1  94/05/16  16:19:03  16:19:03  seth (Seth Golub)
1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Initial revision
1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# 1.02  Allow '-' in mail headers
1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#       Added handling for multiline mail headers
1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Oscar Nierstrasz has a nice script for hypertextifying URLs.
1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# It is available at:
1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#   http://cui_www.unige.ch/ftp/PUBLIC/oscar/scripts/html.pl
1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#########################
1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Configurable options
1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-s <n>    ] | [--shortline <n>                 ]
1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$short_line_length = 40;        # Lines this short (or shorter) must be
1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # intentionally broken and are kept
1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # that short. <BR>
1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-p <n>    ] | [--prewhite <n>                  ]
1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$preformat_whitespace_min = 5;  # Minimum number of consecutive leading
1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # whitespace characters to trigger
1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # preformatting.
1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # NOTE: Tabs are now expanded to
1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # spaces before this check is made.
1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # That means if $tab_width is 8 and
1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # this is 5, then one tab is expanded
1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # to 8 spaces, which is enough to
1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # trigger preformatting.
1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-pb <n>   ] | [--prebegin <n>                  ]
1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$preformat_trigger_lines = 2;   # How many lines of preformatted-looking
1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # text are needed to switch to <PRE>
1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # <= 0 : Preformat entire document
1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                #    1 : one line triggers
1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # >= 2 : two lines trigger
1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-pe <n>   ] | [--preend <n>                    ]
1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$endpreformat_trigger_lines = 2; # How many lines of unpreformatted-looking
1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                 # text are needed to switch from <PRE>
1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                 # <= 0 : Never preformat within document
1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                 #    1 : one line triggers
1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                 # >= 2 : two lines trigger
1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# NOTE for --prebegin and --preend:
1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# A zero takes precedence.  If one is zero, the other is ignored.
1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# If both are zero, entire document is preformatted.
1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-r <n>    ] | [--hrule <n>                     ]
1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$hrule_min = 4;                 # Min number of ---s for an HRule.
1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-c <n>    ] | [--caps <n>                      ]
1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$min_caps_length = 3;           # min sequential CAPS for an all-caps line
1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-ct <tag> ] | [--capstag <tag>                 ]
1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$caps_tag = "STRONG";           # Tag to put around all-caps lines
1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-m/+m     ] | [--mail        / --nomail        ]
1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$mailmode = 0;                  # Deal with mail headers & quoted text
1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-u/+u     ] | [--unhyphenate / --nounhyphenate ]
1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$unhyphenation = 1;             # Enables unhyphenation of text.
2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-a <file> ] | [--append <file>                 ]
2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [+a        ] | [--noappend                      ]
2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$append_file = 0;               # If you want something appended by
2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # default, put the filename here.
2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # The appended text will not be
2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # processed at all, so make sure it's
2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # plain text or decent HTML.  i.e. do
2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # not have things like:
2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                #   Seth Golub <seth@cs.wustl.edu>
2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # but instead, have:
2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                #   Seth Golub &lt;seth@cs.wustl.edu&gt;
2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-t <title>] | [--title <title>                 ]
2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$title = 0;                     # You can specify a title.
2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # Otherwise it won't put one in.
2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-ul <n>   ] | [--underlinelong <n>             ]
2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$underline_tolerance_long = 1;  # How much longer can underlines
2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # be and still be underlines?
2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-us <n>   ] | [--underlineshort <n>            ]
2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$underline_tolerance_short = 1; # How much shorter can underlines
2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # be and still be underlines?
2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-tw <n>   ] | [--tabwidth <n>                  ]
2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$tab_width = 8;                 # How many spaces equal a tab?
2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-iw <n>   ] | [--indent <n>                    ]
2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$indent_width = 2;              # Indents this many spaces for each
2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # level of a list
2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# [-/+e      ] | [--extract / --noextract         ]
2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$extract = 0;                   # Extract Mode (suitable for inserting)
2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# END OF CONFIGURABLE OPTIONS
2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy########################################
2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy########################################
2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# Definitions  (Don't change these)
2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#
2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$NONE       =   0;
2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$LIST       =   1;
2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$HRULE      =   2;
2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$PAR        =   4;
2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$PRE        =   8;
2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$END        =  16;
2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$BREAK      =  32;
2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$HEADER     =  64;
2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$MAILHEADER = 128;
2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$MAILQUOTE  = 256;
2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$CAPS       = 512;
2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$OL = 1;
2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy$UL = 2;
2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub usage
2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $0 =~ s#.*/##;
2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($s) = " " x length($0);
2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    print STDERR <<EOF;
2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristyUsage: $0 [options]
2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristywhere options are:
2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-v        ] | [--version                       ]
2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-h        ] | [--help                          ]
2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-s <n>    ] | [--shortline <n>                 ]
2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-p <n>    ] | [--prewhite <n>                  ]
2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-pb <n>   ] | [--prebegin <n>                  ]
2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-pe <n>   ] | [--preend <n>                    ]
2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-e/+e     ] | [--extract / --noextract         ]
2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-r <n>    ] | [--hrule <n>                     ]
2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-c <n>    ] | [--caps <n>                      ]
2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-ct <tag> ] | [--capstag <tag>                 ]
2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-m/+m     ] | [--mail     / --nomail           ]
2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-u/+u     ] | [--unhyphen / --nounhyphen       ]
2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-a <file> ] | [--append <file>                 ]
2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [+a        ] | [--noappend                      ]
2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-t <title>] | [--title <title>                 ]
2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-tw <n>   ] | [--tabwidth <n>                  ]
2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-iw <n>   ] | [--indent <n>                    ]
2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-ul <n>   ] | [--underlinelong <n>             ]
2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       $s [-us <n>   ] | [--underlineshort <n>            ]
2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  More complete explanations of these options can be found in
2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  comments near the beginning of the script.
2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristyEOF
2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub deal_with_options
2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    while ($ARGV[0] =~ /^[-+].+/)
2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-r" || $ARGV[0] eq "--hrule") &&
2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^%d+$/)
3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $hrule_min = $ARGV[1];
3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-s" || $ARGV[0] eq "--shortline") &&
3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $short_line_length = $ARGV[1];
3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-p" || $ARGV[0] eq "--prewhite") &&
3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $preformat_whitespace_min = $ARGV[1];
3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-pb" || $ARGV[0] eq "--prebegin") &&
3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $preformat_trigger_lines = $ARGV[1];
3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-pe" || $ARGV[0] eq "--preend") &&
3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $endpreformat_trigger_lines = $ARGV[1];
3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-e" || $ARGV[0] eq "--extract"))
3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $extract = 1;
3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "+e" || $ARGV[0] eq "--noextract"))
3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $extract = 0;
3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-c" || $ARGV[0] eq "--caps") &&
3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $min_caps_length = $ARGV[1];
3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-ct" || $ARGV[0] eq "--capstag") &&
3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1])
3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $caps_tag = $ARGV[1];
3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "-m" || $ARGV[0] eq "--mail")
3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $mailmode = 1;
3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "+m" || $ARGV[0] eq "--nomail")
3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $mailmode = 0;
3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "-u" || $ARGV[0] eq "--unhyphen")
3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $unhyphenation = 1;
3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "+u" || $ARGV[0] eq "--nounhyphen")
3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $unhyphenation = 0;
3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-a" || $ARGV[0] eq "--append") &&
3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1])
3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (-r $ARGV[1]) {
3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                $append_file = $ARGV[1];
3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            } else {
3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                print STDERR "Can't find or read $ARGV[1].\n";
3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "+a" || $ARGV[0] eq "--noappend")
4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $append_file = 0;
4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-t" || $ARGV[0] eq "--title") &&
4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1])
4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $title = $ARGV[1];
4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-ul" || $ARGV[0] eq "--underlinelong") &&
4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $underline_tolerance_long = $ARGV[1];
4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-us" || $ARGV[0] eq "--underlineshort") &&
4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $underline_tolerance_short = $ARGV[1];
4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-tw" || $ARGV[0] eq "--tabwidth") &&
4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $tab_width = $ARGV[1];
4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($ARGV[0] eq "-iw" || $ARGV[0] eq "--indentwidth") &&
4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $ARGV[1] =~ /^\d+$/)
4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $indent_width = $ARGV[1];
4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            shift @ARGV;
4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            next;
4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "-v" || $ARGV[0] eq "--version")
4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            print '$Header: /users/hilco/seth/projects/txt2html/txt2html.pl,v 1
4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy.10 1994/12/28 20:10:25 seth Exp seth $ ';
4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            print "\n";
4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            exit;
4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($ARGV[0] eq "-h" || $ARGV[0] eq "--help")
4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            &usage;
4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            exit;
4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print STDERR "Unrecognized option: $ARGV[0]\n";
4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print STDERR " or bad paramater: $ARGV[1]\n" if($ARGV[1]);
4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &usage;
4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        exit(1);
4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } continue {
4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        shift @ARGV;
4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $preformat_trigger_lines = 0 if ($preformat_trigger_lines < 0);
4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $preformat_trigger_lines = 2 if ($preformat_trigger_lines > 2);
4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $endpreformat_trigger_lines = 1 if ($preformat_trigger_lines == 0);
4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $endpreformat_trigger_lines = 0 if ($endpreformat_trigger_lines < 0);
4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $endpreformat_trigger_lines = 2 if ($endpreformat_trigger_lines > 2);
4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $underline_tolerance_long  = 0 if $underline_tolerance_long < 0;
4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $underline_tolerance_short = 0 if $underline_tolerance_short < 0;
4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub is_blank
4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    return $_[0] =~ /^\s*$/;
4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub escape
4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/&/&amp;/g;
4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/>/&gt;/g;
4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/</&lt;/g;
4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/\014/\n<HR>\n/g; # Linefeeds become horizontal rules
4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub hrule
5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if ($line =~ /^\s*([-_~=\*]\s*){$hrule_min,}$/)
5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line = "<HR>\n";
5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev =~ s/<p>//;
5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $HRULE;
5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub shortline
5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (!($mode & $PRE) &&
5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        !&is_blank($line) &&
5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ($line_length < $short_line_length) &&
5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        !&is_blank($nextline) &&
5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        !($line_action & ($HEADER | $HRULE | $BREAK | $LIST)))
5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/$/<BR>/;
5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $BREAK;
5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub mailstuff
5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if ((($line =~ /^\w*&gt/) || # Handle "FF> Werewolves."
5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy         ($line =~ /^\w*\|/))&&  # Handle "Igor| There wolves."
5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        !&is_blank($nextline))
5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/$/<BR>/;
5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $BREAK | $MAILQUOTE;
5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } elsif (($line =~ /^[\w\-]*:/) # Handle "Some-Header: blah"
5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy             && (($previous_action & $MAILHEADER) || &is_blank($prev))
5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy             && !&is_blank($nextline))
5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &anchor_mail if !($previous_action & $MAILHEADER);
5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/$/<BR>/;
5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $BREAK | $MAILHEADER;
5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } elsif (($line =~ /^\s+\S/) &&   # Handle multi-line mail headers
5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy             ($previous_action & $MAILHEADER) &&
5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy             !&is_blank($nextline))
5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/$/<BR>/;
5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $BREAK | $MAILHEADER;
5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub paragraph
5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $prev .= "<p>\n";
5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line_action |= $PAR;
5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub listprefix
5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($line) = @_;
5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($prefix, $number, $rawprefix);
5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    return (0,0,0) if (!($line =~ /^\s*[-=\*o]\s+\S/ ) &&
5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !($line =~ /^\s*(\d+|[a-zA-Z])[\.\)\]:]\s+\S/ ));
5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ($number) = $line =~ /^\s*(\d+|[a-zA-Z])/;
5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # That slippery exception of "o" as a bullet
5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # (This ought to be determined more through the context of what lists
5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    #  we have in progress, but this will probably work well enough.)
5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if($line =~ /^\s*o\s/)
5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $number = 0;
5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if ($number)
5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ($rawprefix) = $line =~ /^(\s*(\d+|[a-zA-Z]).)/;
5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prefix = $rawprefix;
5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prefix =~ s/(\d+|[a-zA-Z])//;  # Take the number out
5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } else {
5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ($rawprefix) = $line =~ /^(\s*[-=o\*].)/;
5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prefix = $rawprefix;
5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ($prefix, $number, $rawprefix);
5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub startlist
5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($prefix, $number, $rawprefix) = @_;
5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $listprefix[$listnum] = $prefix;
5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if($number)
5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # It doesn't start with 1,a,A.  Let's not screw with it.
5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (($number != 1) && ($number ne "a") && ($number ne "A"))
5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            return;
5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev .= "$list_indent<OL>\n";
5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $list[$listnum] = $OL;
5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } else {
5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev .= "$list_indent<font size=-2><UL>\n";
5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $list[$listnum] = $UL;
5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $listnum++;
6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $list_indent = " " x $listnum x $indent_width;
6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line_action |= $LIST;
6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $mode |= $LIST;
6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub endlist                     # End N lists
6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($n) = @_;
6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    for(; $n > 0; $n--, $listnum--)
6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $list_indent = " " x ($listnum-1) x $indent_width;
6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if($list[$listnum-1] == $UL)
6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $prev .= "$list_indent</UL></font>\n";
6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        } elsif($list[$listnum-1] == $OL)
6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $prev .= "$list_indent</OL>\n";
6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        } else
6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            print STDERR "Encountered list of unknown type\n";
6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line_action |= $END;
6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $mode ^= ($LIST & $mode) if (!$listnum);
6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub continuelist
6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/^\s*[-=o\*]\s*/$list_indent<LI> / if $list[$listnum-1] == $UL;
6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/^\s*(\d+|[a-zA-Z]).\s*/$list_indent<LI> /    if $list[$listnum-1
6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy] == $OL;
6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line_action |= $LIST;
6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub liststuff
6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($i);
6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($prefix, $number, $rawprefix) = &listprefix($line);
6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $i = $listnum;
6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (!$prefix)
6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        return if !&is_blank($prev); # inside a list item
6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # This ain't no list.  We'll want to end all of them.
6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        return if !($mode & $LIST);     # This just speeds up the inevitable
6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $i = 0;
6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } else
6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # Maybe we're going back up to a previous list
6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $i-- while (($prefix ne $listprefix[$i-1]) && ($i >= 0));
6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (($i >= 0) && ($i != $listnum))
6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &endlist($listnum - $i);
6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } elsif (!$listnum || $i != $listnum)
6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &startlist($prefix, $number, $rawprefix);
6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    &continuelist($prefix, $number, $rawprefix) if ($mode & $LIST);
6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub endpreformat
6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if(!($line =~ /\s{$preformat_whitespace_min,}\S+/) &&
6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       ($endpreformat_trigger_lines == 1 ||
6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        !($nextline =~ /\s{$preformat_whitespace_min,}\S+/)))
6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev =~ s#$#\n</PRE></font>#;
6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $mode ^= ($PRE & $mode);
6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $END;
6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub preformat
6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if($preformat_trigger_lines == 0 ||
6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       (($line =~ /\s{$preformat_whitespace_min,}\S+/) &&
6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ($preformat_trigger_lines == 1 ||
6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy         $nextline =~ /\s{$preformat_whitespace_min,}\S+/)))
6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/^/<font size=-1><PRE>\n/;
6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev =~ s/<p>//;
6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $mode |= $PRE;
6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $PRE;
6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub make_new_anchor
6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $anchor++;
6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $anchor;
6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub anchor_mail
7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($text) = $line =~ /\S+: *(.*) *$/;
7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($anchor) = &make_new_anchor($text);
7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/(.*)/<A NAME="$anchor">$1<\/A>/;
7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub anchor_heading
7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($heading) = @_;
7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($anchor) = &make_new_anchor($heading);
7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/(<H.>.*<\/H.>)/<A NAME="$anchor">$1<\/A>/;
7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub heading
7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($hindent, $heading) = $line =~ /^(\s*)(.+)$/;
7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hindent = 0;               # This isn't used yet, but Perl warns of
7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # "possible typo" if I declare a var
7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                # and never reference it.
7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # This is now taken care of in main()
7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    $heading =~ s/\s+$//;      # get rid of trailing whitespace.
7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($underline) = $nextline =~ /^\s*(\S+)\s*$/;
7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if((length($heading) > (length($underline) + $underline_tolerance_short))
7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy       || (length($heading) < (length($underline) -$underline_tolerance_long)))
7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        return;
7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#    $underline =~ s/(^.).*/$1/;     # Could I do this any less efficiently?
7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $underline = substr($underline,0,1);
7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($hlevel);
7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 1 if $underline eq "*";
7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 2 if $underline eq "=";
7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 3 if $underline eq "+";
7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 4 if $underline eq "-";
7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 5 if $underline eq "~";
7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $hlevel = 6 if $underline eq ".";
7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    return if !$hlevel;
7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $nextline = <STDIN>;        # Eat the underline
7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    &tagline("H${hlevel}");
7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    &anchor_heading($heading);
7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line_action |= $HEADER;
7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub unhyphenate
7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($second);
7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # This looks hairy because of all the quoted characters.
7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # All I'm doing is pulling out the word that begins the next line.
7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # Along with it, I pull out any punctuation that follows.
7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # Preceding whitespace is preserved.  We don't want to screw up
7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # our own guessing systems that rely on indentation.
7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ($second) = $nextline =~ /^\s*([a-zA-Z]+[\)\}\]\.,:;\'\"\>]*\s*)/; # "
7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $nextline =~ s/^(\s*)[a-zA-Z]+[\)\}\]\.,:;\'\"\>]*\s*/$1/; # "
7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    # (The silly comments are for my less-than-perfect code hilighter)
7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/\-\s*$/$second/;
7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line .= "\n";
7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub untabify
7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($oldws) = $line =~ /^([ \011]+)/;
7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($oldlen) = (length($oldws));
7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($i, $column);
7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    for($i=0, $column = 0; $i < $oldlen; $i++)
7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if(substr($oldws, $i, 1) eq " ")
7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {                       # Space
7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $column++;
7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        } else {                # Tab
7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $column += $tab_width - ($column % $tab_width);
7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line = (" " x $column) . substr($line, $oldlen);
7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub tagline
7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    local($tag) = @_;
7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line =~ s/^\s*(.*)\s*$/<$tag>$1<\/$tag>\n/;
7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub caps
7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if($line =~ /^[^a-z<]*[A-Z]{$min_caps_length,}[^a-z<]*$/)
7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &tagline($caps_tag);
7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_action |= $CAPS;
7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristysub main
8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    &deal_with_options;
8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if(1)
8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	print q(
8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  "http://www.w3.org/TR/html4/loose.dtd">
8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<html lang="en-US">
8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<head>
8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<meta name="Description" content="ImageMagick - a robust collection of tools and libraries to read, write and manipulate an image in any of the popular image formats. ImageMagick allows dynamic creation of GIFs, making it suitable for Web applications.">
8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<meta name="Keywords" content="ImageMagick,Image Magick,Image Magic,PerlMagick,Perl Magick,Perl Magic,WebMagick,Web Magic,image processing,software development,simulation,image software,AniMagick,Animagic,Magick++">
8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<meta name="Resource-type" content="document">
8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<meta name="Robots" content="ALL">
8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<link rel="stylesheet" type="text/css" href="../www/magick.css">
8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy</head>
8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<body marginheight=1 marginwidth=1 topmargin=1 leftmargin=1>
8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<a name="top"></a>
8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<table border="0" cellpadding="0" cellspacing="0" summary="Masthead" width="100%">
8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<tbody>
8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<tr>
8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<td bgcolor="#003399" width="25%" height="118" background="../images/background.gif"><a href="http://www.imagemagick.org/"><img src="../images/script.gif" width="278" height="118" border="0" alt="" /></a></td>
8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<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>
8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<td bgcolor="#003399" width="114" height="118" align="right"><img src="../images/sprite.png" width="114" height="118" alt="" /></td>
8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<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>
8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy</tr></tbody></table>
8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy</table><table align="left" border=0 cellpadding=2 cellspacing=2 summary="Navigation buttons" width="20%">
8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy <tr>
8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  <td>
8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy   <form target="_self" action="../index.html"><input type="submit" title="ImageMagick Home" value=" Home " style="background-image:url('../images/background.gif'); color:#fbc713; font-weight:bold"></form>
8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  </td><td>
8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy   <form target="_self" action="../www/apis.html"><input type="submit" title="ImageMagick API" value=" API " style="background-image:url('../images/background.gif'); color:#fbc713; font-weight:bold"></form>
8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  </td><td>
8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy   <form target="_self" action="../www/archives.html"><input type="submit" title="ImageMagick Download" value="Download" style="background-image:url('../images/background.gif'); color:#fbc713; font-weight:bold"></form>
8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  </td>
8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy </tr>
8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy</table>
8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<div align="right" style="margin-top:3px; padding-right:4px">
8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  <form action="http://studio.imagemagick.org/Sage/scripts/Sage.cgi">
8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	<input type="TEXT" name="query" size=32 maxlength=255>
8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	<input type="SUBMIT" name="sa" value="Search" style="background-image:url('../images/background.gif'); bgcolor:#003399; color:#fbc713; font-weight:bold"> 
8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy </form><br>
8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy</div>
8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<table align="left" border=0 cellpadding=10 cellspacing=0 style="margin-top:-17px" width="100%"><tr><td>
8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<br>&nbsp;<br>
8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy) . "\n";
8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "<HTML>\n";
8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "<HEAD>\n";
8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # It'd be nice if we could guess a title from the first header,
8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # but even that would be too late if we're doing this in one pass.
8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "<TITLE>$title</TITLE>\n" if($title);
8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "</HEAD>\n";
8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	print q(<body text="#000000" bgcolor="#fbc713" link="#1F00FF" vlink="#9900DD" alink="#FF0000">) . "\n";
8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ($title) {
8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	    print "<h3>$title</h3>\n";
8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	}
8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $prev     = "";
8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $line     = <STDIN>;
8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $nextline = <STDIN>;
8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    do
8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line =~ s/[ \011]*$//; # Chop trailing whitespace
8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &untabify;              # Change leading whitespace into spaces
8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line_length = length($line); # Do this before tags go in
8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &escape;
8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &endpreformat if (($mode & $PRE) && ($preformat_trigger_lines != 0));
8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &hrule if !($mode & $PRE);
8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &heading   if (!($mode & $PRE) &&
8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       $nextline =~ /^\s*[=\-\*\.~\+]+$/);
8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &caps if  !($mode & $PRE);
8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &liststuff if (!($mode & $PRE) &&
8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !&is_blank($line));
8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &mailstuff if ($mailmode &&
8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !($mode & $PRE) &&
8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !($line_action & $HEADER));
8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &preformat if (!($line_action & ($HEADER | $LIST | $MAILHEADER)) &&
8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !($mode & ($LIST | $PRE)) &&
8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       ($endpreformat_trigger_lines != 0));
8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &paragraph if ((&is_blank($prev) || ($line_action & $END)) &&
9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !&is_blank($line) &&
9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       !($mode & ($LIST | $PRE)) && # paragraphs in lists
9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                                                    # *should* be allowed.
9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                       (!$line_action ||
9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                        ($line_action & ($CAPS | $END | $MAILQUOTE))));
9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &shortline;
9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        &unhyphenate if ($unhyphenation &&
9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                         ($line =~ /[a-zA-Z]\-$/) && # ends in hyphen
9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                         # next line starts w/letters
9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                         ($nextline =~ /^\s*[a-zA-Z]/) &&
9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                         !($mode & ($PRE | $HEADER | $MAILHEADER | $BREAK)));
9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        # Print it out and move on.
9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print $prev;
9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (!&is_blank($nextline))
9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $previous_action = $line_action;
9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            $line_action     = $NONE;
9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $prev = $line;
9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $line = $nextline;
9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        $nextline = <STDIN>;
9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } until (!$nextline && !$line && !$prev);
9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    $prev = "";
9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    &endlist($listnum) if ($mode & $LIST); # End all lists
9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    print $prev;
9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    print "\n";
9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    print "</PRE></font>\n" if ($mode & $PRE);
9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if ($append_file)
9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if(-r $append_file)
9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            open(APPEND, $append_file);
9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            print while <APPEND>;
9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        } else {
9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            print STDERR "Can't find or read file $append_file to append.\n";
9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    } else {
9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print q(<hr>) . "\n";
9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristyprint q(
9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<a href="#top"><img src="../images/top.gif" border=0 width="35" height="46" align="right" alt="Top of page"></a>
9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy<form action="http://studio.imagemagick.org/magick/" style="margin-top:5px">
9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy <input type="submit" title="Help!" value="Help!" style="background-image:url('../images/background.gif'); color:#fbc713; font-weight:bold">
9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  <small>&quot;Image manipulation software that works like magick&quot;</small>
9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	</form></td>
9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy	</tr></table>
9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy) . "\n";
9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if(!$extract)
9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "</BODY>\n";
9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        print "</HTML>\n";
9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy&main();
9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
970