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 <seth@cs.wustl.edu> 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/&/&/g; 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy $line =~ s/>/>/g; 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy $line =~ s/</</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*>/) || # 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> <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 ¶graph 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>"Image manipulation software that works like magick"</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