#!/usr/local/bin/perl -s
# (c) 1996 Reini Urban. 
# Permission granted to use and modify this program so long as the
# copyright above is maintained, modifications are documented, and
# credit is given for any use of the program.
#  
# Convert DynaText's SGML Syntax to HTML
# To use the AutoCAD on-line books with an Web Browser
# Export the dynatext chapters with full contents to an .sgm file
# ---------------------------------------------------------------
# still buggy: some table tags


$/ = 0;
$newext = 'htm';
$oldext = 'sgm';
while (<>) {
    if ($ARGV ne $oldargv) {
	$extnew = ();
        $oldargv = $ARGV; $ARGVOUT = $ARGV;
        if ($ARGVOUT =~ /\.$newext$/ )	
	    { print STDERR "Cannot process ", $ARGV; last;}
        $ARGVOUT =~ s#\.$oldext#\.$newext#i || 
	    ($ARGVOUT = $ARGV . '.' .$newext);
        rename($ARGVOUT, $ARGVOUT . '.bak') if -f $ARGVOUT;
        open(ARGVOUT, ">$ARGVOUT");
        select(ARGVOUT);
        shift;
    }
chop;


# Font tags
s#<(/?)F\.SERIF>##g;
s#<(/?)F\.TIMES>##g;
s#<(/?)F\.SANS>#<\1CODE>#g;
s#<(/?)F\.ITAL>#<\1I>#g;
s#<(/?)F\.PIXYMBOL[^>]*>##g;
s#<(/?)F\.COURIER>#<\1CODE>#g;
s#<(/?)F\.COURIER\.?BOLD>#<\1CODE><\1B>#g;
s#<(/?)F\.COURIER\.?ITAL>#<\1CODE><\1I>#g;
s#<(/?)F\.SANS\.?BOLD>#<\1CODE><\1B>#g;
s#<(/?)F\.SANS\.?ITAL>#<\1CODE><\1I>#g;
s#<(/?)F\.SERIF\.?BOLD>#<\1B>#g;
s#<(/?)F\.SERIF\.?ITAL>#<\1I>#g;
s#<F\.SMALL[^>]*>#<FONT SIZE=-1>#g;
s#</F\.SMALL[^>]*>#</FONT>#g;
s#<(/?)F\.SUPERSCRIPT>#<\1SUP>#g;
s#<(/?)F\.BODY>##g;
s#\\iš#<FONT COLOR="BLUE">#g;
s#\\i#</FONT>#g;

# Paragraph tags
s#<(/?)HEADING\.(\d+)>#<\1H\2>\n#g;
s#<(/?)RBW\-IDXTERM[^>]+>##g;
s#<CHAPTER\.TITLE>\s+<RBW\-ANCHOR\sID="([^"]+)"[^>]*>\s+<\RBW\-ANCHOR>(.+)</CHAPTER\.TITLE>#<TITLE>\2</TITLE>\n<A LINK="\2"><H1>\2</H1></A>#g;
s#<(/?)CHAPTER\.TITLE>#<\1TITLE>\n#g;
s#<(/?)DEFINE.HEAD>#<\1H2>\n#g;
s#<(/?)DEFINE.TEXT>#<\1P>\n#g;
s#<BODY>#\n#g;
s#</BODY>#<BR>\n#g;
s#<(/?)HEADING\.(\d+)\.BODY>#<\1H\2>\n#g;
s#<(/?)SECTION(\d*)>##g;
s#<(/?)PARTDIV>##g;
s#<(/?)EMPTY>##g;
s#<(/?)CHAPTER>##g;
s#</PROG\.IN>\n#\n</PRE>#g;
s#<(/?)PROG\.IN[^>]*>#<\1PRE>#g;
s#<(/?)PROG\.OUT[^>]*>#<\1PRE>#g;
s#<(/?)PROG\.GROUP>##g;
s#<(/?)PROMPT.*>##g;
# s#<DEFINE.HEAD>.*</DEFINE.HEAD>##g;

# Links
s|<RBW\-XREF\sREFID="([^"]+)"[^>]*>|<A HREF="#\1">|g;
s#</RBW\-XREF>#</A>#g;
s#<RBW\-ANCHOR\sID="([^"]+)"[^>]*>#<A LINK="\1">_#g;
s#</RBW\-ANCHOR>#</A>#g;

# Lists
s#<(/?)BULL\.NUM\..\.LIST>#<\1UL>#g;
s#<BULLET\..>#<LI>#g;
s#</BULLET\..>##g;

# Tables
s#<(/?)RBW\-TABLE>#\n<\1TABLE>\n#g;
s#<(/?)RBW\-ROW>#\n<\1TR>#g;
s#<TABLE\.TITLE>#<H3 ALIGN="CENTER">#g;
s#</TABLE\.TITLE>#</H3>\n#g;
s#<TABLE\.HEADING>#<TH>#g;
s#</TABLE\.HEADING>##g;
s#<TABLE\.BODY>#<TD>#g;
s#</TABLE\.BODY>##g;
s#<(/?)ENTRY[^>]*>##g;
s#<(/?)THEAD>##g;
s#<(/?)TGROUP[^>]*>##g;
s#<(/?)TBODY>##g;
s#<(/?)NOTEPARAS[^>]*>##g;
s#<COLSPEC [^>]*>##g;

#  clean up the mess
s#\s\s# #g;
s#</PRE>([\s\n]*)<PRE>#\1#g;
s#<PRE>([\s\n]*)<PRE>#<PRE>\1#g;

# write lowercase tags (even unknown) tags literally
# if called with 'perl -s dynatext.pl -lit <sgm-file>'
s#<([a-z])#&lt;\1#g if $lit;
s#<(SQL)#&lt;\1#g if $lit;
s#([a-z])>#\1&gt;#g if $lit;

# internal info
s#<RBW\-AUTOGEN>([^<]+)</RBW\-AUTOGEN>##g;
s#<(/?)RBW\-[^>]+>##g;
s#<(/?)RBWSECT\-[^>]+>##g;

 }
 continue {
     print;     # this prints to original filename
 }
select(STDOUT);

