diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-04-02 09:28:59 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-04-02 09:28:59 +0000 |
commit | f603a24fcd51ec179af642ad8599848e06b0ce27 (patch) | |
tree | 9c5068e73d83f35e5a26926a5fd697f85b65a4ec /Build/source/texk/texlive/linked_scripts/latex2man | |
parent | 3ada9457659f5f0e06eb548120ac6dfd5d875956 (diff) |
reorganize linked scripts
git-svn-id: svn://tug.org/texlive/trunk@12598 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/texlive/linked_scripts/latex2man')
-rwxr-xr-x | Build/source/texk/texlive/linked_scripts/latex2man | 1817 |
1 files changed, 0 insertions, 1817 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/latex2man b/Build/source/texk/texlive/linked_scripts/latex2man deleted file mode 100755 index 45da55fb578..00000000000 --- a/Build/source/texk/texlive/linked_scripts/latex2man +++ /dev/null @@ -1,1817 +0,0 @@ -#!/usr/bin/env perl -# Project: Documentation Tools -# Descr: Latex --> MAN-page (groff -man), HTML and TexInfo; -# Language: PERL (>= 5.0) -# Author: Dr. Jürgen Vollmer, Juergen.Vollmer@informatik-vollmer.de -# $Id: latex2man,v 1.151 2008/11/11 07:21:14 vollmer Exp $ -# -# Copyright (C) 1998 Dr. Juergen Vollmer -# Viktoriastrasse 15, D-76133 Karlsruhe, Germany -# Juergen.Vollmer@informatik-vollmer.de -# License: -# This program can be redistributed and/or modified under the terms -# of the LaTeX Project Public License Distributed from CTAN -# archives in directory macros/latex/base/lppl.txt; either -# version 1 of the License, or any later version. -# -# If you find this software useful, please send me a postcard. - -require 5.0004_03; - -use Getopt::Std; - -# use strict 'vars'; - -$CMD=`basename $0`; chop ($CMD); -$gen_date = `date`; chomp $gen_date; # date when the output was generated - -sub date2str; -$VERSION = "1.23"; -$DATE = date2str ('$Date: 2008/11/11 07:21:14 $' =~ m|(\d+/\d+/\d+)|); - -$tmp = "/tmp/$CMD.$$"; - -################################################################## -# check option and arguments -################################################################## - -getopts('o:t:VhMHTLC:D:a:'); # -D1: write each read line -D2: write each word - -sub usage -{ -print <<'END'; -usage: latex2man [-t transfile] [-HTML] [-C name] [-h] [-V] infile outfile. - A tool to translate UNIX manual pages written with LaTeX into a format - understood by the UNIX man(1)-command. - Reads infile, writes outfile. - - -t transfile: Translation for user defined LaTeX macros. - -M: Produce output suitable for the man(1) command (default). - -H: Instead of producing output suitable for the man(1) command, - HTML code is produced (despite of the name of the command). - -T: Instead of producing output suitable for the man(1) command, - TEXINFO code is produced (despite of the name of the command). - -L: Output the LaTeX source. Useful in conjunctin with the -C - option. - -C name: Enable conditional text \`name\'. - To enable more than one conditional name use quotes: - -C 'name1 name2 ...' - The following names are defined automatically: - -H defines HTML - -T defines TEXI - -M defines MAN - -L defines LATEX - -a char: Is used only in conjunction with -T. - Background: - TEXINFO ignores all blanks before the first word on a - new line. In order to produce some additional space before - that word (using \SP) some character has to be printed - before the additional space. By default this is a . (dot). - The \`char' specifies an alternative for that first character. - Giving a blank (-a" ") supresses the indentation of a line. - Note: only for the first \SP of a series that char is printed. - -h: Help. - -V: Version. - - Copyright (C) 1998 Dr. Jürgen Vollmer, Viktoriastr. 15, D-76133 Karlsruhe - email: Juergen.Vollmer@informatik-vollmer.de - License: - This program can be redistributed and/or modified under the terms - of the LaTeX Project Public License Distributed from CTAN - archives in directory macros/latex/base/lppl.txt; either - version 1 of the License, or any later version. - - If you find this software useful, please send me a postcard from the place - where you are living. -END - print " Version $VERSION, $DATE.\n"; - exit 1; -} - -($opt_h) && usage; -($opt_V) && print "Version: $VERSION, $DATE\n"; - -# check command line arguments -$opt_cnt = 0; -$opt_cnt++ if ($opt_H); -$opt_cnt++ if ($opt_T); -$opt_cnt++ if ($opt_M); -$opt_cnt++ if ($opt_L); -if ($opt_cnt == 0) { - # if no option -H, -T, -M, -L is given, -M is the default - $opt_M = 1; -} -die "$CMD: you may give only one of the -H -T -M -L options\n" if ($opt_cnt > 1); - -(@ARGV == 2) || die "$CMD: Expected two arguments: infile outfile. Try \`$CMD -h'.\n"; - -my %cond_name; -if ($opt_C) { - my $name; - foreach $name ((split (/\s/, $opt_C))) { - $cond_name{$name} = 1; - } -} -$cond_name{MAN} = 1 if ($opt_M); -$cond_name{HTML} = 1 if ($opt_H); -$cond_name{TEXI} = 1 if ($opt_T); -$cond_name{LATEX} = 1 if ($opt_L); - - -$SrcFile = $ARGV[0]; -$DestFile = $ARGV[1]; -open (SRC, "<$SrcFile") || die "$CMD: Can't open file \`$SrcFile' for reading.\n"; -if ($opt_H || $opt_T) { - # DestFile will be written in the postprocess - open (DEST, ">$tmp") || die "$CMD: Can't open file \`$tmp' for writing.\n"; -} else { - open (DEST, ">$DestFile") || die "$CMD: Can't open file \`$DestFile' for writing.\n"; -} - -######################################################################## - -# global variables - -# $Prefix is used to construct procedure and variable names -if ($opt_M) { - $Prefix = "man"; -} -if ($opt_H) { - $Prefix = "html"; -} -if ($opt_T) { - $Prefix = "texi"; -} - -$texiCenterLine = 0; # true, only in TEXI-mode if a line must be centered -$paragraph = 0; # true, if the last output was a paragraph marker -$newline = 0; # true, if the last output was a newline char - -$first_word = 1; # true, if the next word to be processed is the first - # of a new paragraph or after a line break. - -# handling of itemize/enumerate/description environments: -$list_nest = 0; # counts nesting of itemize/enumerate/description envrionments -$cur_list[0] = "";# array, indexed with list_nest, indicates kind of list: - # values are: 'enum' / 'descr' / 'item' -$item_nr[0] = 0; # array, indexed with list_nest, counts the number of \item in the - # list -$manRS = 0; # true, if for Man a .RS was given after a \item - -$inside_verb = 0; # true, if inside a verbatim environment -$inside_table = 0; # true, if inside a table environment -$first_column = 0; # true, if this is the first column in a table row -$columns = 0; # nr of columns in the current table -$enum_nr = 0; # current number of an enumeration -$nesting = 0; # count recursive calls of interpret_word -$section_cnt = 0; # Index into $sections -#$sections[0] # Array of all sections -#$section_kind # Array of section kind (subsection/section) - -# translation of LaTeX macros without, with one and with two arguments -$Macro = \%{$Prefix . "Macro"}; -$Macro1a = \%{$Prefix . "Macro1a"}; -$Macro1b = \%{$Prefix . "Macro1b"}; -$Macro2a = \%{$Prefix . "Macro2a"}; -$Macro2b = \%{$Prefix . "Macro2b"}; -$Macro2c = \%{$Prefix . "Macro2c"}; - -# translations of special characters -$LetterCode = \%{$Prefix . "LetterCode"}; - -######################################################################## - -sub interpret_word; -sub interpret_line; -sub Print; -sub PrintM; -sub NL; - -######################################################################## -# Translation for LaTeX macros for MAN - -# translation of special characters -$manLetterCode{'ä'} = 'ä'; -$manLetterCode{'ö'} = 'ö'; -$manLetterCode{'ü'} = 'ü'; -$manLetterCode{'Ä'} = 'Ä'; -$manLetterCode{'Ö'} = 'Ö'; -$manLetterCode{'Ü'} = 'Ü'; -$manLetterCode{'ß'} = 'ß'; - -# LaTeX macros without arguments -$manMacro{'LaTeX'} = 'LaTeX'; -$manMacro{'LATEX'} = 'LaTeX'; # needed, since \LaTeX is contained in a - # section name (which are transposed - # into uppercase -$manMacro{'itemsep'} = ' '; - -# some math -$manMacro{'rightarrow'} = '-->'; -$manMacro{'Rightarrow'} = '==>'; -$manMacro{'leftarrow'} = '<--'; -$manMacro{'Leftarrow'} = '<=='; -$manMacro{'ge'} = '>='; -$manMacro{'le'} = '<='; - -$manMacro{'Dollar'} = '$'; -$manMacro{'Bar'} = '|'; -$manMacro{'Bs'} = '\\\\'; -$manMacro{'Tilde'} = '~'; -$manMacro{'hline'} = '\n_'; -$manMacro{'noindent'} = ''; -$manMacro{'copyright'} = '(C)'; -$manMacro{'Dots'} = '\&...\n'; -$manMacro{'Circum'} = '^'; -$manMacro{'Lbr'} = '['; -$manMacro{'Rbr'} = ']'; -$manMacro{'LBr'} = '{'; -$manMacro{'RBr'} = '}'; -$manMacro{'Percent'} = '%'; -$manMacro{'Bullet'} = '*'; -$manMacro{'TEXbr'} = ''; -$manMacro{'MANbr'} = '\n.br\n'; -$manMacro{'TEXIbr'} = ''; -$manMacro{'HTMLbr'} = ''; -$manMacro{'medskip'} = '\n'; -$manMacro{'SP'} = '\fB \fP'; # hack hack this works even on - # the beginning of a line -$manMacro{'SPfirst'} = $manMacro{'SP'}; - -$manMacro{'~'} = ' '; -$manMacro{'|'} = '|'; -$manMacro{'<'} = '<'; -$manMacro{'>'} = '>'; -$manMacro{'<='} = '<='; -$manMacro{'>='} = '>='; -$manMacro{'='} = '='; -$manMacro{'<>'} = '<>'; -$manMacro{'{'} = '{'; -$manMacro{'}'} = '}'; -$manMacro{'_'} = '_'; -$manMacro{'$'} = '$'; -$manMacro{'#'} = '#'; -$manMacro{'&'} = '&'; -$manMacro{'%'} = '%'; -$manMacro{'-'} = ''; -$manMacro{','} = ' '; - -$manMacro{'\\'} = '\n.br'; # line break -$manMacro{'\\Tab'} = '\nT}'; # end of column in a table environment - -# LaTeX macros with one argument -$manMacro1a{'emph'} = '\fI'; - $manMacro1b{'emph'} = '\fP'; -$manMacro1a{'textbf'} = '\fB'; - $manMacro1b{'textbf'} = '\fP'; -$manMacro1a{'texttt'} = ''; - $manMacro1b{'texttt'} = ''; -$manMacro1a{'verb'} = ''; - $manMacro1b{'verb'} = ''; -$manMacro1a{'underline'} = '\n.ul\n'; - $manMacro1b{'underline'}= '\n'; -$manMacro1a{'section'} = '\n.SH '; - $manMacro1b{'section'} = '\n'; -$manMacro1a{'subsection'} = '\n.SS '; - $manMacro1b{'subsection'} = ''; -$manMacro1a{'subsubsection'} = '\n.SS '; - $manMacro1b{'subsubsection'} = ''; - -$manMacro1a{'Prog'} = ''; - $manMacro1b{'Prog'} = ''; -$manMacro1a{'File'} = ''; - $manMacro1b{'File'} = ''; -$manMacro1a{'Opt'} = '\fB'; - $manMacro1b{'Opt'} = '\fP'; -$manMacro1a{'oOpt'} = '[\fB'; - $manMacro1b{'oOpt'} = '\fP]'; -$manMacro1a{'Arg'} = '\fI'; - $manMacro1b{'Arg'} = '\fP'; -$manMacro1a{'oArg'} = '[\fI'; - $manMacro1b{'oArg'} = '\fP]'; -$manMacro1a{'Email'} = '\fB'; - $manMacro1b{'Email'} = '\fP'; -$manMacro1a{'URL'} = '\fB'; - $manMacro1b{'URL'} = '\fP'; - -# LaTeX macros with two arguments -$manMacro2a{'Cmd'} = '\fI'; - $manMacro2b{'Cmd'} = '\fP('; - $manMacro2c{'Cmd'} = ')'; -$manMacro2a{'OptArg'} = '\fB'; - $manMacro2b{'OptArg'} = '\fP\fI'; - $manMacro2c{'OptArg'} = '\fP'; -$manMacro2a{'OptoArg'} = '\fB'; - $manMacro2b{'OptoArg'} = '\fP[\fI'; - $manMacro2c{'OptoArg'} = '\fP]'; -$manMacro2a{'oOptArg'} = '[\fB'; - $manMacro2b{'oOptArg'} = '\fP\fI'; - $manMacro2c{'oOptArg'} = '\fP]'; -$manMacro2a{'oOptoArg'} = '[\fB'; - $manMacro2b{'oOptoArg'} = '\fP[\fI'; - $manMacro2c{'oOptoArg'} = '\fP]]'; -$manMacro2a{'setlength'} = ''; - $manMacro2b{'setlength'}= ''; - $manMacro2c{'setlength'}= ''; - -######################################################################## -# Translation for LaTeX macros for HTML - -# translation of special characters -$htmlLetterCode{'ä'} = 'ä'; -$htmlLetterCode{'ö'} = 'ö'; -$htmlLetterCode{'ü'} = 'ü'; -$htmlLetterCode{'Ä'} = 'Ä'; -$htmlLetterCode{'Ö'} = 'Ö'; -$htmlLetterCode{'Ü'} = 'Ü'; -$htmlLetterCode{'ß'} = 'ß'; - -# LaTeX macros without arguments -$htmlMacro{'LaTeX'} = 'LaTeX'; -$htmlMacro{'LATEX'} = 'LaTeX'; # needed, since \LaTeX is contained in a - # section name (which are transposed - # into uppercase -$htmlMacro{'itemsep'} = ''; - -# some math -$htmlMacro{'rightarrow'} = '-->'; -$htmlMacro{'Rightarrow'} = '==>'; -$htmlMacro{'leftarrow'} = '<--'; -$htmlMacro{'Leftarrow'} = '<=='; -$htmlMacro{'ge'} = '>'; -$htmlMacro{'le'} = '<='; - -$htmlMacro{'Dollar'} = '$'; -$htmlMacro{'Bar'} = '|'; -$htmlMacro{'Bs'} = '\\'; -$htmlMacro{'Tilde'} = '~'; -$htmlMacro{'hline'} = ''; -$htmlMacro{'noindent'} = ''; -$htmlMacro{'copyright'} = '©'; -$htmlMacro{'Dots'} = '...'; -$htmlMacro{'Circum'} = '^'; -$htmlMacro{'Lbr'} = '['; -$htmlMacro{'Rbr'} = ']'; -$htmlMacro{'LBr'} = '{'; -$htmlMacro{'RBr'} = '}'; -$htmlMacro{'Percent'} = '%'; -$htmlMacro{'Bullet'} = '*'; -$htmlMacro{'TEXbr'} = ''; -$htmlMacro{'MANbr'} = ''; -$htmlMacro{'TEXIbr'} = ''; -$htmlMacro{'HTMLbr'} = '<br>\n'; -$htmlMacro{'medskip'} = '<br>\n'; -$htmlMacro{'SP'} = ' '; -$htmlMacro{'SPfirst'} = $htmlMacro{'SP'}; - -$htmlMacro{'~'} = ' '; -$htmlMacro{'|'} = '|'; -$htmlMacro{'<'} = '<'; -$htmlMacro{'>'} = '>'; -$htmlMacro{'<='} = '<='; -$htmlMacro{'>='} = '>='; -$htmlMacro{'='} = '='; -$htmlMacro{'<>'} = '<>'; -$htmlMacro{'{'} = '{'; -$htmlMacro{'}'} = '}'; -$htmlMacro{'_'} = '_'; -$htmlMacro{'$'} = '$'; -$htmlMacro{'#'} = '#'; -$htmlMacro{'&'} = '&'; -$htmlMacro{'%'} = '%'; -$htmlMacro{'-'} = ''; -$htmlMacro{','} = ' '; - -$htmlMacro{'\\'} = '<br>\n'; # line break -$htmlMacro{'\\Tab'} = '</td>\n</tr>\n'; # end of column in a table environment - -# LaTeX macros with one argument -$htmlMacro1a{'emph'} = '<em>'; - $htmlMacro1b{'emph'} = '</em>'; -$htmlMacro1a{'textbf'} = '<strong>'; - $htmlMacro1b{'textbf'} = '</strong>'; -$htmlMacro1a{'texttt'} = '<tt>'; - $htmlMacro1b{'texttt'} = '</tt>'; -$htmlMacro1a{'verb'} = '<tt>'; - $htmlMacro1b{'verb'} = '</tt>'; -$htmlMacro1a{'underline'} = '<u>'; - $htmlMacro1b{'underline'} = '</u>'; -$htmlMacro1a{'section'} = '\n<h2>'; - $htmlMacro1b{'section'} = '</h2>\n'; -$htmlMacro1a{'subsection'} = '\n<h4>'; - $htmlMacro1b{'subsection'} = '</h4>\n'; -$htmlMacro1a{'subsubsection'} = '\n<h5>'; - $htmlMacro1b{'subsubsection'} = '</h5>\n'; -$htmlMacro1a{'Email'} = '\n<tt>'; - $htmlMacro1b{'Email'} = '</tt>'; -$htmlMacro1a{'URL'} = '\n<tt>'; - $htmlMacro1b{'URL'} = '</tt>'; - -$htmlMacro1a{'Prog'} = '<tt>'; - $htmlMacro1b{'Prog'} = '</tt>'; -$htmlMacro1a{'File'} = '<tt>'; - $htmlMacro1b{'File'} = '</tt>'; -$htmlMacro1a{'Opt'} = '<b>'; - $htmlMacro1b{'Opt'} = '</b>'; -$htmlMacro1a{'oOpt'} = '[<b>'; - $htmlMacro1b{'oOpt'} = '</b>]'; -$htmlMacro1a{'Arg'} = '<i>'; - $htmlMacro1b{'Arg'} = '</i>'; -$htmlMacro1a{'oArg'} = '[<i>'; - $htmlMacro1b{'oArg'} = '</i>]'; - -# LaTeX macros with two arguments -$htmlMacro2a{'Cmd'} = '<em>'; - $htmlMacro2b{'Cmd'} = '</em>('; - $htmlMacro2c{'Cmd'} = ')'; -$htmlMacro2a{'OptArg'} = '<b>'; - $htmlMacro2b{'OptArg'} = '</b><i>'; - $htmlMacro2c{'OptArg'} = '</i>'; -$htmlMacro2a{'OptoArg'} = '<b>'; - $htmlMacro2b{'OptoArg'} = '</b>[<i>'; - $htmlMacro2c{'OptoArg'} = '</i>]'; -$htmlMacro2a{'oOptArg'} = '[<b>'; - $htmlMacro2b{'oOptArg'} = '</b><i>'; - $htmlMacro2c{'oOptArg'} = '</i>]'; -$htmlMacro2a{'oOptoArg'} = '[<b>'; - $htmlMacro2b{'oOptoArg'} = '</b>[<i>'; - $htmlMacro2c{'oOptoArg'} = '</i>]]'; -$htmlMacro2a{'setlength'} = ''; - $htmlMacro2b{'setlength'} = ''; - $htmlMacro2c{'setlength'} = ''; - -# we handle sections in HTML as having two arguments, 1. the number, 2. the name -$htmlMacro2a{'section'} = '\n<h2><a name="section_'; - $htmlMacro2b{'section'} = '">'; - $htmlMacro2c{'section'} = '</a></h2>\n'; -$htmlMacro2a{'subsection'} = '\n<h4><a name="section_'; - $htmlMacro2b{'subsection'} = '">'; - $htmlMacro2c{'subsection'} = '</a></h4>\n'; -$htmlMacro2a{'subsubsection'} = '\n<h5><a name="section_'; - $htmlMacro2b{'subsubsection'} = '">'; - $htmlMacro2c{'subsubsection'} = '</a></h5>\n'; - -# we handle Email and URL special in HTML, the LaTeX argument is doubled. -$htmlMacro2a{'Email'} = '<a href ="mailto:'; - $htmlMacro2b{'Email'} = '"><tt>'; - $htmlMacro2c{'Email'} = '</tt></a>'; -$htmlMacro2a{'URL'} = '<a href ="'; - $htmlMacro2b{'URL'} = '"><tt>'; - $htmlMacro2c{'URL'} = '</tt></a>'; - -######################################################################## -# Translation for LaTeX macros for TexInfo - -# translation of special characters -$texiLetterCode{'ä'} = '@"a'; -$texiLetterCode{'ö'} = '@"o'; -$texiLetterCode{'ü'} = '@"u'; -$texiLetterCode{'Ä'} = '@"A'; -$texiLetterCode{'Ö'} = '@"O'; -$texiLetterCode{'Ü'} = '@"U'; -$texiLetterCode{'ß'} = '@ss{}'; - -# LaTeX macros without arguments -$texiMacro{'LaTeX'} = 'LaTeX'; -$texiMacro{'LATEX'} = 'LaTeX'; # needed, since \LaTeX is contained in a - # section name (which are transposed - # into uppercase -$texiMacro{'itemsep'} = ''; - -# some math -$texiMacro{'rightarrow'} = '-->'; -$texiMacro{'Rightarrow'} = '==>'; -$texiMacro{'leftarrow'} = '<--'; -$texiMacro{'Leftarrow'} = '<=='; -$texiMacro{'ge'} = '>='; -$texiMacro{'le'} = '<='; - -$texiMacro{'Dollar'} = '$'; -$texiMacro{'Bar'} = '|'; -$texiMacro{'Bs'} = '\\'; -$texiMacro{'Tilde'} = '~'; -$texiMacro{'hline'} = ''; -$texiMacro{'noindent'} = '\n@noindent\n'; -$texiMacro{'copyright'} = '@copyright{}'; -$texiMacro{'Dots'} = '...'; -$texiMacro{'Circum'} = '^'; -$texiMacro{'Lbr'} = '['; -$texiMacro{'Rbr'} = ']'; -$texiMacro{'LBr'} = '@{'; -$texiMacro{'RBr'} = '@}'; -$texiMacro{'Percent'} = '%'; -$texiMacro{'Bullet'} = '*'; -$texiMacro{'TEXbr'} = ''; -$texiMacro{'MANbr'} = ''; -$texiMacro{'TEXIbr'} = '@*\n'; -$texiMacro{'HTMLbr'} = ''; -$texiMacro{'medskip'} = '@sp 2\n'; -$texiMacro{'SP'} = '@ @ '; - -if ($opt_a) { - $texiMacro{'SPfirst'} = $opt_a . '@ '; - } else { - $texiMacro{'SPfirst'} = '.@ '; -} - -$texiMacro{'~'} = ' '; -$texiMacro{'|'} = '|'; -$texiMacro{'<'} = '<'; -$texiMacro{'>'} = '>'; -$texiMacro{'<='} = '<='; -$texiMacro{'>='} = '>='; -$texiMacro{'='} = '='; -$texiMacro{'<>'} = '<>'; -$texiMacro{'{'} = '@{'; -$texiMacro{'}'} = '@}'; -$texiMacro{'_'} = '_'; -$texiMacro{'$'} = '$'; -$texiMacro{'#'} = '#'; -$texiMacro{'&'} = '&'; -$texiMacro{'%'} = '%'; -$texiMacro{'-'} = '@-'; -$texiMacro{','} = ' '; - -$texiMacro{'\\'} = '@*\n'; # line break -$texiMacro{'\\Tab'} = '\n'; # end of column in a table environment - -# LaTeX macros with one argument -$texiMacro1a{'emph'} = '@emph{'; $texiMacro1b{'emph'} = '}'; -$texiMacro1a{'textbf'} = '@strong{'; $texiMacro1b{'textbf'} = '}'; -$texiMacro1a{'texttt'} = '@t{'; $texiMacro1b{'texttt'} = '}'; -$texiMacro1a{'verb'} = '@t{'; $texiMacro1b{'verb'} = '}'; -$texiMacro1a{'underline'} = ''; $texiMacro1b{'underline'} = ''; -$texiMacro1a{'section'} = '\n@section '; $texiMacro1b{'section'} = '\n'; -$texiMacro1a{'subsection'} = '\n@subsection '; $texiMacro1b{'subsection'} = '\n'; -$texiMacro1a{'subsubsection'} = '\n@subsubsection '; $texiMacro1b{'subsubsection'} = '\n'; - -$texiMacro1a{'Prog'} = ''; $texiMacro1b{'Prog'} = ''; -$texiMacro1a{'File'} = '@file{'; $texiMacro1b{'File'} = '}'; -$texiMacro1a{'Opt'} = ''; $texiMacro1b{'Opt'} = ''; -$texiMacro1a{'oOpt'} = '[ '; $texiMacro1b{'oOpt'} = ' ]'; -$texiMacro1a{'Arg'} = '@var{'; $texiMacro1b{'Arg'} = '}'; -$texiMacro1a{'oArg'} = '[ @var{'; $texiMacro1b{'oArg'} = '} ]'; -$texiMacro1a{'Email'} = '@email{'; $texiMacro1b{'Email'} = '}'; -$texiMacro1a{'URL'} = '@url{'; $texiMacro1b{'URL'} = '}'; - -# LaTeX macros with two arguments -$texiMacro2a{'Cmd'} = ''; - $texiMacro2b{'Cmd'} = '('; - $texiMacro2c{'Cmd'} = ')'; -$texiMacro2a{'OptArg'} = ''; - $texiMacro2b{'OptArg'} = '@var{'; - $texiMacro2c{'OptArg'} = '}'; -$texiMacro2a{'OptoArg'} = ''; - $texiMacro2b{'OptoArg'} = '[@var{'; - $texiMacro2c{'OptoArg'} = '}]'; -$texiMacro2a{'oOptArg'} = '[ '; - $texiMacro2b{'oOptArg'} = '@var{'; - $texiMacro2c{'oOptArg'} = '} ]'; -$texiMacro2a{'oOptoArg'} = '[ '; - $texiMacro2b{'oOptoArg'} = '[@var{'; - $texiMacro2c{'oOptoArg'} = '}] ]'; -$texiMacro2a{'setlength'} = ''; - $texiMacro2b{'setlength'} = ''; - $texiMacro2c{'setlength'} = ''; - -######################################################################## -# reading of translations for user macros - -if ($opt_t) { - do $opt_t; -} - -######################################################################## -# processing for MAN - -sub manStart -{ - printf DEST "\'\\\" t\n"; # process with tbl - printf DEST ".\\\" Manual page created with $CMD on $gen_date\n"; - printf DEST ".\\\" NOTE: This file is generated, DO NOT EDIT.\n"; - - # Definitionen von Verbatimbegin and Verbatimend - Print ".de Vb\n.ft CW\n.nf\n..\n.de Ve\n.ft R\n\n.fi\n..\n"; - - Print ".TH \"$Name\" \"$chapter\" \"". $date ."\" \""; - interpret_word "$tool"; - Print "\" \""; interpret_word "$tool"; Print "\""; NL; - # thanks to Andrew Anderson <aja@emulab.ee.mu.oz.au> -} -sub manEnd -{ - NL; printf DEST ".\\\" NOTE: This file is generated, DO NOT EDIT.\n"; -} -sub manSection -{ - my ($cnt, $kind, $section) = @_; - if ($kind ne "subsubsection"){ - $section = uc $section; - } - interpret_line "\\$kind\{$section\}"; -} -sub manParagraph -{ - if (!$paragraph) { - if ($manRS == 0 && $list_nest > 1) { - Print '\n.RS'; - $manRS = 1; - } - Print '\n.PP\n'; - $paragraph = 1; - } -} -sub manVerb -{ - my $arg = $_[0]; - if ($arg =~ /^\./) { print DEST '\\&' }; - Print $arg -} -sub manItemWithArg -{ - my $arg = $_[0]; - if ($manRS == 1) { - Print '\n.RE\n'; - } - $manRS = 0; - Print '\n.TP\n'; - interpret_word $arg; - PrintM ' '; - NL; -} -sub manItem -{ - if ($manRS == 1) { - Print '\n.RE\n'; - } - $manRS = 0; - Print '\n.TP\n'; - if ($cur_list[$list_nest] eq 'item') { - Print '.B *'; - } elsif ($cur_list[$list_nest] eq 'enum') { - Print $item_nr[$list_nest] . '.'; - } - NL; -} -sub manDescriptionStart -{ - if ($list_nest > 1) { - Print '\n.RS\n'; - } -} -sub manDescriptionEnd -{ - if ($manRS) { - Print '\n.RE\n'; - $manRS == 0; - } - if ($list_nest > 1) { - Print '\n.RE\n'; - } - manParagraph; -} -sub manItemStart -{ - if ($list_nest > 1) { - Print '\n.RS\n'; - } -} -sub manItemEnd -{ - if ($manRS) { - Print '\n.RE\n'; - $manRS == 0; - } - if ($list_nest > 1) { - Print '\n.RE\n'; - } - manParagraph; -} -sub manEnumEnd -{ - if ($manRS) { - Print '\n.RE\n'; - $manRS == 0; - } - if ($list_nest > 1) { - Print '\n.RE\n'; - } - manParagraph; -} - -sub manEnumStart -{ - if ($list_nest > 1) { - Print '\n.RS\n'; - } -} -sub manCenterStart -{ - PrintM '\n.ce 100\n'; -} -sub manCenterEnd -{ - PrintM '\n.ce 0\n'; -} -sub manNameStart -{ - interpret_line "\\section\{NAME\}$rest"; -} -sub manNameEnd -{ - # nothing -} -sub manTableStart -{ - my $columns = $_[0]; - my $width = $_[1]; - my $i; - manParagraph; - Print '.TS\n'; - Print 'tab(&);\n'; - for ($i = 1; $i <= $columns; $i++) { - Print " l"; - } - Print "w($width)" if ($width); - Print '.\n'; -} -sub manTableSep -{ - Print '\nT}&T{\n'; -} -sub manTableEnd -{ - Print '\n.TE\n'; - manParagraph; -} - -sub manVerbatimStart -{ - Print '\n.Vb\n'; -} - -sub manVerbatimEnd -{ - Print '.Ve\n'; -} - -sub manVerbatimLine -{ - s/\\/\\\\/g; - s/-/\\-/g; - print DEST "$_"; -} - -########################################################################### -# processing for HTML - -sub htmlStart -{ - Print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">"; NL; - Print "<!-- Manual page created with $CMD on $gen_date --"; NL; - Print " -- Author of $CMD: Juergen.Vollmer\@informatik-vollmer.de --";NL; - Print " -- NOTE: This file is generated, DO NOT EDIT. -->"; NL; - Print "<html>"; NL; - Print "<head><title>$Name</title></head>"; NL; - Print "<body bgcolor=\"white\">"; NL; - Print "<h1 align=center>"; NL; - interpret_line $title; - Print "</h1>"; NL; - Print "<h4 align=center>"; interpret_word $author; Print "</h4>"; NL; - Print "<h4 align=center>$date</h4>"; NL; - Print "<h4 align=center>Version $version</h4>"; NL; -} -sub htmlEnd -{ - Print "</body>"; NL; - Print "</html>"; NL; - Print "<!-- NOTE: This file is generated, DO NOT EDIT. -->"; NL; -} -sub htmlSection -{ - my ($cnt, $kind, $section) = @_; - interpret_line "\\$kind\{$cnt\}\{$section\}"; -} -sub htmlCenterStart -{ - Print '\n<div align=center>\n'; -} -sub htmlCenterEnd -{ - Print '\n</div>\n'; -} -sub htmlNameStart -{ - # nothing -} -sub htmlNameEnd -{ - Print '\n@@INSERTION-POINT@@-TOC@@\n'; -} -sub htmlParagraph -{ - if (!$paragraph) { - NL; Print "<p>"; NL; - $paragraph = 1; - } -} -sub htmlVerb -{ - $arg = $_[0]; - $arg =~ s/&/&/g; - $arg =~ s/>/>/g; - $arg =~ s/</</g; - Print $arg; -} -sub htmlItemWithArg -{ - my $arg = $_[0]; - NL; - if ($item_nr[$list_nest] > 1) { - NL; Print "</dd>"; NL; - } - Print "<dt>"; - interpret_word $arg; Print "</dt>"; NL; - Print "<dd>"; -} -sub htmlItem -{ - if ($item_nr[$list_nest] > 1) { - Print '</li>\n'; - } - if ($cur_list[$list_nest] eq 'item') { - Print '<li>'; - } elsif ($cur_list[$list_nest] eq 'enum') { - Print '<li value =' . $item_nr[$list_nest] .'>'; - } -} -sub htmlDescriptionStart -{ - NL; Print "<dl compact>"; NL; -} -sub htmlDescriptionEnd -{ - NL; Print "</dd>\n</dl>"; NL; -} -sub htmlItemStart -{ - NL; Print "<ul compact>"; NL; -} -sub htmlItemEnd -{ - NL; Print "</li>\n</ul>"; NL; -} -sub htmlEnumStart -{ - NL; Print "<ol compact>"; NL; -} -sub htmlEnumEnd -{ - NL; Print "</li>\n</ol>"; NL; -} -sub htmlTableStart -{ - my $columns = $_[0]; - my $width = $_[1]; - NL; Print "<table>"; NL: -} -sub htmlTableSep -{ - if ($first_column == 0) { - Print '</td>\n'; - } - Print '<td>'; -} -sub htmlTableEnd -{ - NL; Print "</table>"; NL; -} - -sub htmlVerbatimStart -{ - NL; Print '<pre>'; NL; -} - -sub htmlVerbatimEnd -{ - Print '</pre>'; NL; -} - -sub htmlVerbatimLine -{ - s/&/&/g; - s/</</g; - s/>/>/g; - print DEST "$_"; -} - -########################################################################### -# processing for TexInfo - -sub texiStart -{ - Print '\input texinfo @c -*-texinfo-*-'; NL; - Print '@c %**start of header'; NL; - Print '@setfilename ' . "$name.info"; NL; - Print '@settitle ' . "$name"; NL; - Print '@c %**end of header'; NL; - Print '@c Manual page created with' ." $CMD on $gen_date>"; NL; - Print '@c NOTE: This file is generated, DO NOT EDIT.'; NL; -} -sub texiEnd -{ - Print '@bye'; NL; - Print '@c NOTE: This file is generated, DO NOT EDIT.'; NL; -} -sub texiSection -{ - my ($cnt, $kind, $section) = @_; - if (uc $sections[$cnt-1] eq "SYNOPSIS") { - Print '\n@@INSERTION-POINT@@-TOC@@\n'; - $sections[$cnt-1] = "Top"; # The predecessor node is Top and not SYNOPSIS - } - if (uc $sections[$cnt] eq "SYNOPSIS") { - $cnt == 1 || - die "$CMD: The Synopsis section must be the first section after\n" . - "\t the Name environment\n"; - } else { - Print '\n@@INSERTION-POINT@@-TEXI-SEC@@' . " $kind $cnt" . '\n'; - } - interpret_line "\\$kind\{$section\}"; -} -sub texiNameStart -{ - my ($name, $chapter, $author, $tool) = @_; - $sections[0] = "Top"; - # Print '@dircategory ' .$tool; NL; - Print '@dircategory Man-pages'; NL; - Print '@direntry'; NL; - Print "* " . (ucfirst $name) . ": ($name). Its Man-Page "; NL; - Print '@end direntry'; NL; - Print '@titlepage'; NL; - Print '@title ' . "$name"; NL; - Print '@subtitle ' . "$tool"; NL; - Print '@author ' . "$author"; NL; - Print '@end titlepage'; NL; - Print '\n@@INSERTION-POINT@@-TEXI-TOP@@'; NL; - Print '@top ' . "$name"; NL; -} -sub texiNameEnd -{ - # nothing -} -sub texiParagraph -{ - if (!$paragraph) { - NL; print DEST "\n"; - $paragraph = 1; - } -} -sub texiVerb -{ - $arg = $_[0]; - $arg =~ s/({|})/\@$1/g; - Print $arg; -} -sub texiItemWithArg -{ - my $arg = $_[0]; - Print '\n@item '; - interpret_word $arg; - NL; -} -sub texiItem -{ - Print '\n@item\n'; -} -sub texiDescriptionStart -{ - Print '\n@table @samp\n'; -} -sub texiDescriptionEnd -{ - Print '\n@end table\n'; -} -sub texiItemStart -{ - Print '\n@itemize @bullet\n'; -} -sub texiItemEnd -{ - Print '\n@end itemize\n'; -} -sub texiCenterStart -{ - $texiCenterLine = 1; - $newline = 0; - $texiMacro{'\\'} = '@*'; # line break - $texiMacro{'TEXIbr'} = '@*'; - NL; -} -sub texiCenterEnd -{ - $texiCenterLine = 0; - $newline = 0; - $texiMacro{'\\'} = '@*\n'; # line break - $texiMacro{'TEXIbr'} = '@*\n'; - NL; -} - -sub texiEnumStart -{ - Print '\n@enumerate\n'; -} -sub texiEnumEnd -{ - Print '\n@end enumerate\n'; -} -sub texiTableStart -{ - my $columns = $_[0]; - my $width = $_[1]; - my $i; - Print '\n@multitable @columnfractions '; - for ($i = 1; $i <= $columns; $i++) { - Print " " .0.9/$columns ; - } - Print '\n'; -} -sub texiTableSep -{ - Print '@tab '; -} -sub texiTableEnd -{ - Print '\n@end multitable\n'; -} - -sub texiVerbatimStart -{ - NL; - Print '@*'; NL -} - -sub texiVerbatimEnd -{ - NL; -} - -sub texiVerbatimLine -{ - s/({|}|@| )/@\1/g; - chop; - print DEST ".$_\@*\n"; -} - -########################################################################### -########################################################################### -# general processing - -# emit an error message is the given macro does not exists. -sub check_Macro -{ - exists $Macro->{$_[0]} || - die "Error in line $.: no such macro: \\$_[0]\n"; -} -sub check_Macro1 -{ - (exists $Macro1a->{$_[0]} && exists $Macro1b->{$_[0]}) || - die "$CMD: Error in line $.: no such macro: \\$_[0]\n"; -} -sub check_Macro2 -{ - (exists $Macro2a->{$_[0]} && exists $Macro2b->{$_[0]} && exists $Macro2c->{$_[0]}) || - die "$CMD: Error in line $.: no such macro: \\$_[0]\n"; -} - -sub NL -{ - if (!$newline) { - printf DEST "\n"; - if ($texiCenterLine) { - print DEST "\@center "; - } - $newline = 1; - } -} - -sub interpret_word -{ - if (@_ <= 0) { - return; - } - $_ = join " ", @_; - my ($s,$m,$a1,$a2,$r); # start, match/macro, argument1, argument2 - my $add_blank = 1; # if true, add a blank after the word - if ($opt_D == 2) { - if ($nesting == 0) { - print "**** "; - } else { - print " "; - } - print "\`$_'\n"; - } - - if ($opt_H) { - # handling of HTML table rows - if ($inside_table == 1) { - if ($first_column == 1) { - if (/^$/) { - return; - } - if (/^\\hline/) { - Print '\n<tr><td colspan=' . $columns . '><hr></td></tr>\n'; - } - Print '\n<tr>\n<td>'; - } - $first_column = 0; - } - } elsif ($opt_M) { - # handling of troff table rows - if ($inside_table == 1) { - if ($first_column == 1) { - if (/^$/) { - return; - } - Print 'T{\n'; - } - $first_column = 0; - } - } elsif ($opt_T) { - # handling of TexInfo specific stuff - if ($nesting == 0) { - s'@'@@'g; - } - if ($inside_table == 1) { - if ($first_column == 1) { - Print '\n@item '; - } - $first_column = 0; - } - } - - $nesting ++; - - SWITCH: { - /^$/ && do {$add_blank = 0; - last SWITCH; - }; - /\\verb\+([^+]*)\+/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - PrintM $Macro1a->{'verb'}; - &{$Prefix . "Verb"} ($m); - PrintM $Macro1b->{'verb'}; - interpret_word $r; - last SWITCH; - }; - /\\(".|ss)/ && do {$s=$`;$m=$1;$r=$'; #" - interpret_word $s; - check_Macro $m; - PrintM $Macro->{$m}; - interpret_word $r; - last SWITCH; - }; - /\\item\s*\[([^]]*)\]/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - $item_nr[$list_nest] ++; - &{$Prefix . "ItemWithArg"} ($m); - interpret_word $r; - last SWITCH; - }; - /\\item\s*/ && do {$s=$`;$r=$'; - interpret_word $s; - $item_nr[$list_nest] ++; - &{$Prefix . "Item"}; - interpret_word $r; - last SWITCH; - }; - # LaTeX macros with two arguments - /\\([a-zA-Z]+){([^}]*)}{([^}]*)}/ - && do {$s=$`;$m=$1;$a1=$2;$a2=$3;$r=$'; - check_Macro2 $m; - interpret_word $s; - PrintM $Macro2a->{$m}; - interpret_word $a1; - PrintM $Macro2b->{$m}; - interpret_word $a2; - PrintM $Macro2c->{$m}; - interpret_word $r; - NL; - last SWITCH; - }; - # Special Handling of Email and URL LaTeX macros with one argument - /\\(URL|Email){([^}]*)}/ && ($opt_H) - && do {$s=$`;$m=$1;$a1=$2;$r=$'; - interpret_word $s; - PrintM $Macro2a->{$m}; - interpret_word $a1; - PrintM $Macro2b->{$m}; - interpret_word $a1; - PrintM $Macro2c->{$m}; - interpret_word $r; - NL; - last SWITCH; - }; - # LaTeX macros with one argument - /\\([a-zA-Z]+){([^}]*)}/ && do {$s=$`;$m=$1;$a1=$2;$r=$'; - check_Macro1 $m; - interpret_word $s; - PrintM $Macro1a->{$m}; - interpret_word $a1; - PrintM $Macro1b->{$m}; - interpret_word $r; - NL; - last SWITCH; - }; - # Special handling of some LaTeX macros without an argument - /\\SP\s*/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - if ($first_word) { - PrintM $Macro->{"SPfirst"}; - } else { - PrintM $Macro->{"SP"}; - } - interpret_word $r; - $add_blank = 0; - last SWITCH; - }; - /\\(MANbr|TEXIbr|HTMLbr)\s*/ && do {$s=$`;$m=$1;$r=$'; - # set $first_word to true - check_Macro $m; - interpret_word $s; - PrintM $Macro->{$m}; - $first_word = 1; - interpret_word $r; - $add_blank = 0; - last SWITCH; - }; - # LaTeX macros without an argument: - /\\([a-zA-Z]+)\s*/ && do {$s=$`;$m=$1;$r=$'; - check_Macro $m; - interpret_word $s; - PrintM $Macro->{$m}; - interpret_word $r; - $add_blank = 0; - last SWITCH; - }; - /\\({|}|\$|_|#|&|-|%|,|\.|;)/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - PrintM $Macro->{$m}; - interpret_word $r; - last SWITCH; - }; - # LaTeX Math - /\$(<|>|<=|>=|=|<>)\$/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - PrintM $Macro->{$m}; - interpret_word $r; - last SWITCH; - }; - /\$([^\$]*)\$/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - interpret_word $m; - interpret_word $r; - last SWITCH; - }; - /&/ && do {$s=$`;$r=$'; - interpret_word $s; - &{$Prefix . "TableSep"}; - $first_column = 0; - interpret_word $r; - last SWITCH; - }; - /~/ && do {$s=$`;$r=$'; - interpret_word $s; - PrintM $Macro->{'~'}; - interpret_word $r; - last SWITCH; - }; - /\\\\/ && do {$s=$`;$r=$'; - interpret_word $s; - if ($inside_table) { - PrintM $Macro->{'\\Tab'}; - $first_column = 1; - if (length ($r) > 0) { - interpret_word $r; - } - } else { - PrintM $Macro->{'\\'}; - $first_word = 1; - interpret_word $r; - } - $add_blank = 0; - last SWITCH; - }; - /\\$|\\ / && do {$s=$`;$r=$'; - # LaTeX explicit blank \ will be - # represented as a single \ at - # the end of the word - interpret_word $s; - Print " "; - interpret_word $r; - last SWITCH; - }; - /\\/ && do {$s=$`;$r=$'; - interpret_word $s; - interpret_word "\\$r"; - last SWITCH; - }; - ($opt_M == 1) && /((^\.|')+)/ && do {$s=$`;$m=$1;$r=$'; - interpret_word $s; - print DEST "\\&$m"; - $newline = 0; - interpret_word $r; - last SWITCH; - }; - Print "$_"; - }; - $nesting --; - Print " " if ($nesting == 0 && $add_blank); -} - -sub interpret_line -{ - my $line = $_[0]; chomp $line; - my @words = split(/\s+/,$line); - my $max = $#words; - my $i; - my $join = 0; # true, if words must be joined - my $word = ""; # the joined word - my $kind = 0; # 1: item[ .. ], 2: { .. }, 3: \verb+ .. + - if ($max < 0) { - # empty line marks a paragraph - &{$Prefix . "Paragraph"}; - $first_word = 1; - return; - } - for ($i = 0; $i <= $max; $i++) { - $_ = $words[$i]; - # printf "\`$words[$i]'"; - if (/^[\s]*$/) { # skip leading blanks - # nothing - } elsif ((!$join || ($kind != 3)) && /^%+/) { # skip comments - last; - } else { - # if blanks in a { .. }, \item[ .. ], \verb+ .. + then we have to joind words - if ($join) { - # check whether this is the last word to be joined - if ($kind == 1) { # item - $join = index ($_, "]") == -1; - } elsif ($kind == 2) { # braces - my @x = $_ =~ /[^\\]}/g; - $join = $#x == -1; - } elsif ($kind == 3) { # verb - $join = index ($_, "+") == -1; - } - $word .= " " . $words[$i]; - if (!$join) { - interpret_word $word; - $word = ""; - } - } else { - # check whether we have to join some words - if (/\\item/) { - my $cnt1 = tr/[/[/; - my $cnt2 = tr/]/]/; - $join = $cnt1 != $cnt2 | $cnt1 == 0; - $kind = 1; - } elsif (/\\verb/) { - my $cnt = tr/+/+/; - $join = $cnt % 2 != 0; - $kind = 3; - } else { - my @x = $_ =~ /[^\\]{/g; - my @y = $_ =~ /[^\\]}/g; - $join = $#x != $#y; - $kind = 2; - } - if ($join) { - $word = $words[$i]; - } else { - interpret_word $words[$i]; - } - } - } - } - if ($join) { - interpret_word $word; - } - NL; -} - -sub PrintM -# print only for Macro command text -{ - if (@_ <= 0 || length ($_[0]) == 0) { - return; - } - my $l = shift; - my $c; - $l =~ s/\\n/\n/g; - foreach $c (split ("", $l)) { - if ($c eq "\n") { - NL; - $newline = 0; - } else { - print DEST "$c"; - } - } -} - -sub Print -{ - - # printf "\`$_[0]'\n"; - if (@_ <= 0 || length ($_[0]) == 0) { - return; - } - my $x = $_[0]; - - unless ($x =~ /^\s*$/) { - # if other chars than blanks are printed: - $first_word = 0; - } - - if (!$inside_verb) { - # transform special characters - $x =~ s/([äöüÄÖÜß])/$LetterCode->{"$1"}/go; - } - - my @parts = split /\\n/, $x, -1; - # -1: trailing \n generates an empty list element - my $i; - for ($i = 0; $i <= $#parts; $i++) { - if ($newline) { - # skip leading blanks after a newline - $parts[$i] =~ s/^\s+//; - } - if (length($parts[$i]) > 0) { - if ($opt_M) { - $parts[$i] =~ s/\\/\\\\/g; - $parts[$i] =~ s/-/\\-/g; - } - printf DEST "%s", $parts[$i]; - $newline = 0; - } - if ($i < $#parts) { - NL; - } - } - $paragraph = 0; -} -######################################################################### - -sub date2str -{ - @EnglishMonthName = ('','January','February','March','April','May','June','July', - 'August','September','October','November','December'); - # split date - my ($Year,$Month,$Day) = split (/\//,$_[0]); - return $Day . " " . $EnglishMonthName[$Month] . " " . $Year; -} - -$rcs_date=`date '+%Y/%m/%d/'`; # date of the man-page, overwritten - # by \rcsInfo -$date = date2str ($rcs_date); -$Macro->{'today'} = $date; - -######################################################################### -my @skip; # stack of skip-flags, 1: skip, 0: don't skip -push @skip, 0; # synthetic "outer most" IF, don't skip -my $last_cond_clause = ""; - -sub handle_conditional_text -{ - $_ = $_[0]; -# printf "skip-stack: %s;\t top = %s\n", join (", ", @skip), $skip[-1]; - if (/^\s*%@%\s+IF\s+([^%]*)\s+%@%\s*$/) { - # produce a program, which evaluates the condition: - my $prog_cond = $1; - $prog_cond =~ s/(\w+)/\$$1/g; - my $prog = ""; - my $var; - foreach $var (keys %cond_name) { - if ($var ne "") { - $prog .= "my \$$var = 1; " # declare set names, - # undeclared ones get value 0 - } - } - $prog .= "return ($prog_cond) ? 0 : 1;"; -# print "\n**** [$prog]\n"; - my $skip = eval $prog; - ($@ eq "") || die "$CMD: error in line $.: wrong condition of `%@% IF.. ($@)\n"; -# print "**** skip=$skip\n"; - - $last_cond_clause = "IF"; - if ($skip[-1] == 1) { - # skip this text, since outer IF skips - push @skip, 1; - } else { - # outer IF is not skipped, hence consider this IF - push @skip, $skip; - } - } elsif (/^\s*%@%\s+ELSE\s+%@%\s*$/) { - ($last_cond_clause =~ /IF/ && ($#skip > 0)) || - die "$CMD: error in line $.: `%@% ELSE %@%' without an `%@% IF..'\n"; - $last_cond_clause = "ELSE"; - if ($skip[-2] == 0) { - $skip[-1] = $skip[-1]? 0 : 1; - } - } elsif (/^\s*%@%\s+END-IF\s+%@%\s*$/) { - $last_cond_clause = "END-IF"; - ($#skip == 0) && - die "$CMD: error in line $.: `%@% END-IF %@%' without an `%@% IF..'\n"; - pop @skip; - } -# print "$last_cond_clause: skip = $skip[-1]\n"; -} - -############################################################################ -# handle LaTeX output -if ($opt_L) { - while (<SRC>) { - if ($opt_D == 1) { - my $line = $_; chop $line; - print "--- \`$line'\n"; - } - - if (/^\s*%@%\s/) { - my $skip = $skip[-1]; - handle_conditional_text ("$_"); - # write %@% directive - print DEST $_; - next; - } - next if ($skip[-1] == 1); - print DEST $_; - } - close (DEST); - exit (0); -} - -############################################################################ -# handle non-LaTeX output - -# read sections -# Variables: $section name of the section in uppercase letters -# $chapter chapter of the man page -# $name name of the man page -# $Name name of the man page in uppercase -# $author author of the man page -# $tool info about the tool set, $name is part of -# $date date -# $version version info -$started = 0; -while (<SRC>) { - if ($opt_D == 1) { - my $line = $_; chop $line; - print "--- \`$line'\n"; - } - - if ((/^\s*%@%\s/) && ($inside_verb==0)) { - my $skip = $skip[-1]; - handle_conditional_text ("$_"); - } - next if ($skip[-1] == 1); - - if ($inside_verb) { - if (/^\s*\\end{verbatim}/) { - if ($started == 1) { - &{$Prefix . "VerbatimEnd"}; - $inside_verb = 0; - } - } else { - &{$Prefix . "VerbatimLine"} ($_); - } - next; - } - - # remove {, } around Umlaute - s/{(\\".)}/\1/g; # " - s/{(\\ss)}/\1/g; - - # normalize special characters - s/\\"a/ä/g; - s/\\"o/ö/g; - s/\\"u/ü/g; - s/\\"A/Ä/g; - s/\\"O/Ö/g; - s/\\"U/Ü/g; - s/\\ss/ß/g; - - if (/^\s*\\rcsInfo \$(.*)\$/) { - my ($rcs_id,$rcs_file,$rcs_revision, - $rcs_date,$rcs_time,$rcs_owner,$rcs_status,$rcs_locker) = split(/\s/,$1); - $date = date2str ($rcs_date); - $Macro->{'today'} = $date; - } elsif (/^\s*\\setDate{\\rcsInfoLongDate}/) { - $Macro->{'Date'} = $date; - } elsif (/^\s*\\setDate{\\today}/) { - $Macro->{'Date'} = $date; - } elsif (/^\s*\\setDate{([^}]*)}/) { - $date = $1; - $date =~ s/~/$Macro->{'~'}/g; - $Macro->{'Date'} = $date; - } elsif (/^\s*\\setVersion{([^}]*)}/) { - $version = $1; - $versin =~ s/~/$Macro->{'~'}/g; - $Macro->{'Version'} = $version; - } elsif (/^\s*\\begin{Name}{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}/) { - $section = "Name"; - $chapter = $1; - $name = $2; - $Name = uc $name; - $author = $3; - $tool = $4; - $title = $5; - $rest = $'; - $started = 1; - $sections[0] = $section; - $section_cnt = 0; - &{$Prefix . "Start"} ($name, $chapter, $author, $tool, $title); - &{$Prefix . "NameStart"} ($name, $chapter, $author, $tool, $title); - } elsif (/^\s*\\end{Name}/) { - &{$Prefix . "NameEnd"} ($name, $chapter, $author, $tool); - } elsif (/^\s*\\begin{Table}(\[([^]]*)\])?{([^}]*)}/) { - # \begin{Table}[width]{columns} - if ($started == 1) { - $columns = $3; - $column = $_[0]; - $inside_table = 1; - $first_column = 1; - &{$Prefix . "TableStart"} ($columns, $2); - } - } elsif (/^\s*\\end{Table}/) { - if ($started == 1) { - $inside_table = 0; - $first_column = 0; - &{$Prefix . "TableEnd"} ($columns); - } - } elsif (/^\s*\\begin{Description}(\[[^]]*\])?/) { - if ($started == 1) { - $list_nest++; - $cur_list[$list_nest] = 'descr'; - $item_nr[$list_nest] = 0; - &{$Prefix . "DescriptionStart"}; - } - } elsif (/^\s*\\end{Description}/) { - if ($started == 1) { - &{$Prefix . "DescriptionEnd"}; - $list_nest--; - } - } elsif (/^\s*\\begin{description}/) { - if ($started == 1) { - $list_nest++; - $cur_list[$list_nest] = 'descr'; - $item_nr[$list_nest] = 0; - &{$Prefix . "DescriptionStart"}; - } - } elsif (/^\s*\\end{description}/) { - if ($started == 1) { - &{$Prefix . "DescriptionEnd"}; - $list_nest--; - } - } elsif (/^\s*\\begin{center}/) { - if ($started == 1) { - &{$Prefix . "CenterStart"}; - } - } elsif (/^\s*\\end{center}/) { - if ($started == 1) { - &{$Prefix . "CenterEnd"}; - } - } elsif (/^\s*\\begin{enumerate}/) { - if ($started == 1) { - $list_nest++; - $cur_list[$list_nest] = 'enum'; - $item_nr[$list_nest] = 0; - &{$Prefix . "EnumStart"} ; - } - } elsif (/^\s*\\end{enumerate}/) { - if ($started == 1) { - &{$Prefix . "EnumEnd"} ; - $list_nest--; - } - } elsif (/^\s*\\begin{itemize}/) { - if ($started == 1) { - $list_nest++; - $cur_list[$list_nest] = 'item'; - $item_nr[$list_nest] = 0; - &{$Prefix . "ItemStart"} ; - } - } elsif (/^\s*\\end{itemize}/) { - if ($started == 1) { - &{$Prefix . "ItemEnd"} ; - $list_nest--; - } - } elsif (/^\s*\\begin{verbatim}/) { - if ($started == 1) { - &{$Prefix . "VerbatimStart"}; - $inside_verb = 1; - } - } elsif (/^\s*\\(subsubsection|subsection|section){([^}]*)}/) { - $kind = $1; - $section = $2; - $section_cnt ++; - $sections[$section_cnt] = $section; - $section_kind[$section_cnt] = $kind; - if ($started == 1) { - &{$Prefix . "Section"} ($section_cnt, $kind, $section); - } - } elsif (/^\s*\\LatexManEnd/) { - last; - } elsif (/^\s*((\\begin{Name|Table|Description})|(\\(sub)?section))/) { - die "$CMD: in line $.\n " . - "Arguments of $1 are not contained in a single " . - "line.\n " . - "Remember: all arguments of a macro must be on the same line.\n"; - } else { - if ($started == 1) { - interpret_line $_; - } - } -} -&{$Prefix . "End"}; - -close DEST; - -if ($opt_H || $opt_T) { - open (TMP, "<$tmp") || die "$CMD: Can't open file \`$tmp' for reading.\n"; - open (DEST, ">$DestFile") || die "$CMD: Can't open file \`$DestFile' for writing.\n"; - while (<TMP>) { - if (/^\@\@INSERTION-POINT\@\@-TOC\@\@$/) { - if ($opt_H) { - # Table of contents for HTML - my $nesting = 0; # nesting of section/subsection/subsubsection - Print '\n<h3>Table of Contents</h3>\n'; - for ($i = 1; $i <= $section_cnt; $i++) { - my $cur_nesting = 0; - if ($section_kind[$i] eq "subsubsection") { - $cur_nesting = 3; - } elsif ($section_kind[$i] eq "subsection") { - $cur_nesting = 2; - } elsif ($section_kind[$i] eq "section") { - $cur_nesting = 1; - } - if ($cur_nesting > $nesting) { - # open a new list - Print '\n<ul>\n' - } - if ($cur_nesting == $nesting) { - # same level, close list item - Print '</li>\n'; - } - if ($cur_nesting < $nesting) { - # close list and list item - for my $i ($cur_nesting .. $nesting-1) { - Print '</li>\n'; - Print '</ul>\n'; - } - } - # print item - Print "<li><a href=\"#section_$i\">"; - interpret_word $sections[$i]; - Print "</a>"; - $nesting = $cur_nesting; - } - # close remaining lists - for my $i (1 .. $nesting) { - Print '</li>\n'; - Print '</ul>\n'; - } - } else { - # Menu of sections for texi - Print '@menu\n'; - for ($i = 2; $i <= $section_cnt; $i++) { - interpret_line "* " . $sections[$i] . "::"; - } - Print '@end menu\n'; - } - } elsif (/\@\@INSERTION-POINT\@\@-TEXI-TOP\@\@/) { - # Texi-top node - Print '@node Top, ' . $sections[2] . ', (dir), (dir)\n'; - } elsif (/\@\@INSERTION-POINT\@\@-TEXI-SEC\@\@ (\w+) (\d+)/) { - # print section header for texi - $kind = $1; - $cnt = $2; - $section = $sections[$cnt]; - Print '@node ' ; - interpret_word "$sections[$cnt], "; - interpret_word "$sections[$cnt+1], "; - interpret_word "$sections[$cnt-1], Top "; - NL; - } else { - print DEST $_; - } - } - close TMP; - close DEST; - unlink $tmp; -} - -######################################################################### - -## Emacs specific: -## Local Variables: *** -## mode: perl *** -## End: *** - |