| Ilya Zakharevich on Tue, 9 Nov 1999 00:09:14 -0500 (EST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [PATCH 2.0.17] gphelp -to_pod |
Conversion of .tex to .pod was almost completely broken.
This patch fixes this, and brings POD generation to "almost perfect" stage.
I did not fix any defects in .tex files. [One I know is in Ch2
Generalities:
The special variable\idx{variable (special)} names known to GP are
- this should be \sidx].
Ilya
--- ./config/doc_Makefile.SH.orig Fri Apr 16 11:45:10 1999
+++ ./config/doc_Makefile.SH Mon Nov 8 23:27:04 1999
@@ -56,11 +56,16 @@ veryclean: clean
rm -f paricfg.tex gp.man
.tex.pod:
- perl $doc_dir/gphelp -to_pod \$*.tex > tmp_pod && mv tmp_pod \$*.pod
+ perl gphelp -to_pod \$*.tex > tmp_pod && mv tmp_pod \$*.pod
.ipf.inf:
ipfc /INF \$*.ipf
-pari.ipf: refcard.pod tutorial.pod usersch1.pod usersch1.pod usersch2.pod usersch3.pod usersch4.pod usersch5.pod appa.pod appb.pod appc.pod appd.pod
- pod2ipf --title="PARI/GP Manual" --by-files --section-name="Getting started" --file=refcard.pod --file=tutorial.pod --section-name="User guide" --file=usersch1.pod --file=usersch1.pod --file=usersch2.pod --file=usersch3.pod --file=usersch4.pod --file=usersch5.pod --section-name=Appendices --file=appa.pod --file=appb.pod --file=appc.pod --file=appd.pod > tmp_ipf && mv tmp_ipf pari.ipf
+# This is for testing:
+
+.pod.ipf:
+ pod2ipf \$*.pod > tmp_ipf && mv tmp_ipf \$*.ipf
+
+pari.ipf: refcard.pod tutorial.pod usersch1.pod usersch1.pod usersch2.pod usersch3.pod usersch4.pod usersch5.pod appa.pod appb.pod appc.pod
+ pod2ipf --title="PARI/GP Manual" --by-files --section-name="Getting started" --file=refcard.pod --file=tutorial.pod --section-name="User guide" --file=usersch1.pod --file=usersch1.pod --file=usersch2.pod --file=usersch3.pod --file=usersch4.pod --file=usersch5.pod --section-name=Appendices --file=appa.pod --file=appb.pod --file=appc.pod > tmp_ipf && mv tmp_ipf pari.ipf
EOT
--- ./doc/gphelp.in.orig Thu Sep 16 09:49:02 1999
+++ ./doc/gphelp.in Mon Nov 8 23:28:26 1999
@@ -33,6 +35,7 @@ $xdvi = $ENV{GPXDVI} || "xdvi";
$gzip = "gzip";
$zcat = "$gzip -dc";
+$refcard = (@ARGV and $ARGV[-1] =~ /refcard/i);
&to_pod() if @ARGV == 2 && $ARGV[0] eq '-to_pod';
&options(); &init();
@@ -442,7 +445,7 @@ sub detex
# We use the special char @ to transmit special sequences
sub inittr {
@ou = qw( dollar nbrk startbold endbold startcode endcode
- startpodcode endpodcode
+ startpodcode endpodcode startlink endlink
startbcode endbcode startbi endbi startit endit
startword endword startlword endlword pm empty gt lt podleader
);
@@ -455,6 +458,8 @@ sub inittr {
startbold => 'B<',
endbold => '>',
startcode => 'C<',
+ startlink => 'L<',
+ endlink => '>',
endcode => '>',
startpodcode => 'C<',
endpodcode => '>',
@@ -476,10 +481,34 @@ sub inittr {
);
}
+sub strip_code {
+ my $in = shift;
+ $in =~ s/\Q$tr{startcode}\E(.*?)\Q$tr{endcode}/$1/go;
+ $in;
+}
+
+sub strip_kbd {
+ my $in = shift;
+ $in =~ s/\\kbd\{((?:[^{}]|\{[^{}]*\})*)\}/$1/g;
+ $in =~ s/\$((?:[^{}]|\{[^{}]*\})*)\$/$1/g;
+ $in =~ s/~/ /g;
+ $in;
+}
+
sub presubst
{
chop unless $to_pod;
+ s/([^\\])\\\{/$1`lBrAcE'/g;
+ s/([^\\])\\\}/$1`rBrAcE'/g;
+ s/\A\\q?quad\s+/$tr{nbrk}$tr{nbrk}/;
+ s|\\wwwsite|http://hasse.mathematik.tu-muenchen.de/ntsw/pari/|g;
+ s/^\\def\\.*\{\n.*\n\}//gm;
+ s/\\def\\.*//g;
+ s/(\{[\w\s]+)\{\}([\s\w]+\})/$1$2/g; # {rnf{}llgram}
+
+
s/\\\\(?=[a-zA-Z])/\\bs /g;
+ s/\\b{}\\b{}/\\bs\\bs /g;
s/\\\\/\\bs/g;
s/(\'\'|\`\`)/"/g unless $to_pod; # "
# asymptotic or equivalent (~)
@@ -488,6 +517,8 @@ sub presubst
s/(^|[^\\])~/$1$tr{nbrk}/g;
s/\\(simeq|sim|approx|equiv)(?![a-zA-Z])/ ~ /g;
s/(^|[^\\])%.*/$1/g; # comments
+ # We do not strip %\n, thus:
+ s/\\kbd{\n\s*/\\kbd{/g;
s/\$\\bf(\b|(?=[\d_]))\s*([^\$]+)\$/\$$tr{startbcode}$1$tr{endbcode}\$/g;
s/\$/$tr{dollar}/g; # math mode
s/\t/ /g; s/\\,//g; s/\\[ ;]/ /g;# various spaces
@@ -495,7 +526,8 @@ sub presubst
s/\\~/~/g;
s/\\tilde/~/g;
s/\\\///g; # italic correction
- s/([^\\])&+/$1/g; # tab marks
+ s/^&+//g; # tab marks
+ s/([^\\])&+/$1 /g; # tab marks
s/\\TeX\{\}/TeX/g;
s/\\TeX(\W)/TeX$1/g;
s/ *\\circ\b */ o /g;
@@ -539,13 +571,10 @@ sub presubst
s/\\pm(?![a-zA-Z])/$tr{pm}/g;
s/ *\\mid(?![a-zA-Z]) */ | /g;
- s/^\\def\\.*\{\n.*\n\}//gm;
- s/\\def\\.*//;
- s/\\idxtyp\{[^\}]*\}//g;
+ s/\\idxtyp\{([^{}]*)\}/\\sidx{t_$1}/g;
s/\\ref\{[^\}]*\}/$tr{startbold}??$tr{endbold}/g unless $to_pod;
s/\\secref\{[^\}]*\}/Section ($tr{startbold}??$tr{endbold})/g unless $to_pod;
s/\\label\{[^\}]*\}//g unless $to_pod;
- s/\\(text|hbox)//g;
s/\\rightarrow(?![a-zA-Z])/C<--E<gt>>/g;
s/\\longleftrightarrow(?![a-zA-Z])/C<E<lt>-----E<gt>>/g;
@@ -553,19 +582,26 @@ sub presubst
s/\\vfill *\\eject//g;
s/\\(q|quad)(?![a-zA-Z])/ /g;
s/\\qquad(?![a-zA-Z])/ /g;
- s/\\centerline\b/ /g;
+ s/\\centerline\s*\{\s*(?:\\tt\b\s*)?(.*(\n[ \t].*)*)\}(?=\s*$)/ $1/g;
+ s/\\centerline\s*\{\s*(?:\\tt\b\s*)?((?:[^{}]|\{[^{}]*\})*)\}/ $1/g;
s/\\big\b//g;
s/\\settabs.*//;
- s/\\\+//g;
+# s/\\\+(.*)\\cr[ \t]*$/ strip_kbd($1) /ges;
+# s/\\\+(.*)/ strip_kbd($1) /ge;
+ s/^\\\+/$tr{nbrk}/gm;
+ s/\\\+//g;
+# s/\\\+/$tr{nbrk}/g;
s/\\cr(?![a-zA-Z])//g;
+ s/\\B(?![a-zA-Z])/\\kbd{BIL}/g;
+ s/\\fun\s*\{([^{}]*)\}\s*\{((?:[^{}]|\{[^{}]*\})*)\}\s*\{([^{}]*)\}/\\kbd{$1 \\key{$2}($3)}\\sidx{$2}/g;
s/ *\\leq?(?![a-zA-Z]) *([^ ])/<=$1/g;
s/ *\\geq?(?![a-zA-Z]) *([^ ])/>=$1/g;
s/ *([=><]) */ $1 /g;
s/ *< *([=<]) */ <$1 /g;
s/ *> *([=>]) */ >$1 /g;
- s/ *= *= */ == /g;
+ s/ *([*+-\/^&=|:]) += */ $1= /g;
s/\\(vers|PARIversion)(?![a-zA-Z])/$tr{startbold}$version$tr{endbold}/;
s/\\([QRCFZNapdf])(?![a-zA-Z])/$tr{startbi}$1$tr{endbi}$2/g;
@@ -585,12 +621,24 @@ sub presubst
s/\\tet\{([^\}]*)\}/\\sidx{$1}$tr{startcode}$1$tr{endcode}/g;
s/\\tec\{\s*([^{}]*)\}\{\s*([^{}]*)\}/\\sidx{$1}$1$tr{startcode}$2$tr{endcode}/g;
s/\\kbd\{((?:[^{}]|\{[^{}]*\})*)\}/$tr{startcode}$1$tr{endcode}/g;
- s/\\key\{([^\}]*)\}/$tr{startbold}$1$tr{endbold}/g;
+
+ s/\\key\{([^\}]*)\}/$tr{startbold}$1$tr{endbold}/g unless $refcard;
+
+# s/\\(?:key|li)\s*{(.*)}\s*{(.+)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
+# s/\\(?:key|li)\s*{(.*)}\s*{}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
+# s/\\(key|var)(?![a-zA-Z])\s*{(\w+)}/C<$2>/mg;
+ if ($refcard) {
+ s/\\(?:key|li)\{((?:[^{}]+(?=[{}])|\{[^{}]+\})*)\}\s*\{\}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/g if $refcard;
+ s/\\(?:key|li)\{((?:[^{}]+(?=[{}])|\{[^{}]+\})*)\}\s*\{(([^{}]+(?=[{}])|\{[^{}]+\})*)\}/\n=item C<$2>\n\n$1\n/g if $refcard;
+ }
+
s/\\var\{([^\}]*)\}/$tr{startit}$1$tr{endit}/g;
s/\\fl(?![a-zA-Z])/$tr{startit}flag$tr{endit}/g;
s/\\b{([^}]*)}/$tr{startcode}\\$1$tr{endcode}/g;
s/\\sidx\{[^\}]*\}//g unless $to_pod;
s/\\[a-zA-Z]*idx\{([^\}]*)\}/$1/g unless $to_pod;
+ s/\\(?:text|hbox)\s*\{ *(?:\\it\b\s*)?(([^{}]+(?=[{}])|\{[^{}]+\})*)\}/$1/g;
+ s/\\(text|hbox)//g;
s/\{ *\\(it|sl) *(([^{}]+(?=[{}])|\{[^{}]+\})*)\}/$tr{startit}$2$tr{endit}/g;
s/\{ *\\bf *(([^{}]+(?=[{}])|\{[^{}]+\})*)\}/$tr{startbold}$1$tr{endbold}/g;
s/\{ *\\tt *(([^{}]+(?=[{}])|\{[^{}]+\})*)\}/$tr{startpodcode}$1$tr{endpodcode}/g;
@@ -599,6 +647,18 @@ sub presubst
s/\\(backslash|bs)\{(\w)\}/\\$2/g;
s/\\(backslash|bs)(?![a-zA-Z]) */\\/g;
+ # Last resort:
+ s/\\kbd\{(.*?)\}/$tr{startcode}$1$tr{endcode}/g;
+ s/^([ \t]{3,})\Q$tr{startcode}\E(.*)\Q$tr{endcode}\E/$1$2/gmo if $to_pod;
+ # Last resort:
+ s/^([ \t]{3,})\Q$tr{startcode}\E(.*?)\Q$tr{endcode}\E/$1$2/gmso if $to_pod;
+ # Remove leading spaces unless have embedded wrapped code:
+ s/^[ \t]+//gm if $to_pod and /^\S/ and not /^[ \t]*\n[ \t]/m;
+ s/`lBrAcE'/\\{/g;
+ s/`rBrAcE'/\\}/g;
+
+ s{\Q$tr{startcode}\E(?=(ftp|http)://)}{$tr{startlink}}go if $to_pod;
+
return if $to_pod;
$in_prog = 0 if (s/\\eprog/$tr{endbold}/g);
@@ -618,7 +678,10 @@ sub wrap_code {
# } else {
$in =~ s/^(.)/ $1/mg;
# }
- $in
+ $in =~ s/\s*\Z//;
+ $in =~ s/\\kbd\{((?:[^{}]|\{[^{}]*\})*)\}/$1/g if $to_pod;
+ $in =~ s/\$([^\$\n]*)\$/$1/g if $to_pod;
+ "\n\n$in\n\n";
}
sub rewrap_code { # This code got some escapes inside...
@@ -636,13 +699,22 @@ sub rewrap_lines { # This code got some
sub indexify {
my $in = shift;
$in =~ s/(^|and\s+)(\w+)(\$?\()/$1\\idx{$2}$3/g;
+ $in =~ s/^(\\b\{\w+\})(?!\S)/\\idx{$1}/g;
+ $in;
+}
+
+sub for_index {
+ my $in = shift;
+ 1 while $in =~ s/\Q$tr{startcode}\E(.*?)\Q$tr{endcode}\E/$1/go;
$in;
}
+
sub TeXprint_topod {
s/\A\s+//;
s/^\\def\\.*\{\n.*\n\}//gm;
- s/\\def\\.*//; # Repeated in presubst
+ s/\\def\\.*//g; # Repeated in presubst, as the next one
+ s/(\{[\w\s]+)\{\}([\s\w]+\})/$1$2/g; # {rnf{}llgram}
# \def\sectype#1#2{\subsec{Type \typ{#1} (#2s):}\sidx{#2}}
# \def\sectypeindex#1#2#3{\subsec{Type \typ{#1} (#2):}\sidx{#3}}
@@ -655,21 +727,29 @@ sub TeXprint_topod {
s/\\sectypes\{\s*((?:[^{}]|\{[^{}]*\})*)\}\{\s*((?:[^{}]|\{[^{}]*\})*)\}\{\s*((?:[^{}]|\{[^{}]*\})*)\}/\\subsec{Type \\typ{$1} and \\typ{$1} (${3}s)}\n\\sidx{$3}/g;
# Try to guard \label/\sidx (removing possible '.')
+# This somehow breaks index...
+# s/(\\(?:section|subsec(?:ref|idx|op)?(unix)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
s/(\\(?:section|subsec(?:ref|idx|op)?)\s*{(?:(?:[^{}]+(?=[{}])|{[^{}]+})+)})\.?\s*\\(label|sidx)/$1\n\\$2/;
# last if /\\subsec[\\{}ref]*[\\\${]$help[}\\\$]/o;
s/\\chapter\s*{((?:[^{}]|\{[^{}]*\})*)}/\n\n$tr{podleader}head1 NAME\n\nlibPARI - $1\n\n$tr{podleader}head1 DESCRIPTION\n\n/;
+ s/\\appendix\s*{((?:[^{}]|\{[^{}]*\})*)}/\n\n$tr{podleader}head1 NAME\n\nAppendix - $1\n\n$tr{podleader}head1 DESCRIPTION\n\n/;
s/\\section\s*{((?:[^{}]|\{[^{}]*\})*)}/"\n\n$tr{podleader}head1 " . indexify($1) . "\n\n"/e;
# Try to delimit by :
- s/\\subsec(?:ref|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
+ s/\\subsec(?:ref|idx|op)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}((\W*default:)?[^\n:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
+ s/\\subsec(?:ref|idx|op)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
s/\\subsubsec(?:ref|idx|op)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}item " . indexify("$1$3") . "\n\n"/e;
+# s/\\subsubsec\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}\s*$/"\n\n$tr{podleader}item " . indexify("$1") . "\n\n"/e;
+ s/\\subsubsec\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(.*)$/"\n\n$tr{podleader}item " . indexify("$1") . "$3\n\n"/me;
+# s/\\subseckbd\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}:\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
+ s/\\subseckbd\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^:]*):\s*/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
# Try to delimit by ' '
- s/\\subsec(?:ref|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
- s/\\subsec(?:ref|title|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]*})+)}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
+ s/\\subsec(?:ref|idx|op)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(\S*)\s+/"\n\n$tr{podleader}head2 " . indexify("$1$3") . "\n\n"/e;
+ s/\\subsec(?:ref|title|idx|op)?(?:unix)?\s*{(([^{}]+(?=[{}])|{[^{}]*})+)}:?\s*/"\n\n$tr{podleader}head2 " . indexify("$1") . "\n\n"/e;
# This is to skip preface in refcard:
- /\Q$tr{podleader}\Ehead1|\\title(?![a-zA-Z])\s*\{/ and $seen_start = 1
+ /\Q$tr{podleader}\Ehead1|\\title(?![a-zA-Z])\s*\{/o and $seen_start = 1
or $seen_start or return; # Skip now!
s/\\title\s*\{([^{}\s]*)(\s+([^{}]*))?\}(\s*\\centerline\s*\{([^{}]*)\})?/$tr{podleader}head1 NAME\n\n$1 - $3. $5\n\n/ and $seen_title++
@@ -682,12 +762,12 @@ sub TeXprint_topod {
s/'(\W)'/{\\tt '$1'}/g;
s/(\\\w+)(\\hbox)/$1 $2/g;
- s/\\hbox\s*\{((?:\\[\{\}]|[^{}]|\{[^{}]*\})*)\}/$1/g;
+ s/\\hbox\s*\{(?:\\it\b\s*)?((?:\\[\{\}]|[^{}]|\{[^{}]*\})*)\}/$1/g;
s/\\h\b/ /g;
# XXXX ????
- s/^{\\tt\s*\\obeylines\s*(([^{}]+(?=[{}])|{[^{}]*})+)}/\bprog $1 \eprog/g;
- s/\\bprog(?:tabs[^\n]*)?(?![a-zA-Z])\s*(.*?)\\eprog/wrap_code($1)/ges;
+ s/^{(?:\\tt)?\s*\\obeylines\s*(([^{}]+(?=[{}])|{[^{}]*})+)}/\\bprog $1 \\eprog/g;
+ s/\s*\\bprog(?:tabs[^\n]*)?(?![a-zA-Z])\s*(.*?)\\eprog\s*/wrap_code($1)/ges;
presubst();
@@ -711,8 +791,8 @@ sub TeXprint_topod {
s/\\d?frac{\s*((?:[^{}]|\{[^{}]*\})*)}{\s*((?:[^{}]|\{[^{}]*\})*)}/($1)\/($2)/g;
- s/\\s(?:ref|idx){\s*([^{}]*)}/X<$1>/g; #
- s/\\(?:ref|idx){\s*([^{}]*)}/X<$1>$1/g;
+ s/\\s(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">"/ge; #
+ s/\\(?:ref|idx){\s*([^{}]*)}/"X<" . for_index($1) . ">$1"/ge;
# s/\\(backslash|bs)\s*(\b|(?=[\d_]|C\<))/\\Z<>/g;
@@ -721,12 +801,12 @@ sub TeXprint_topod {
#s/\\pm(\b|(?=[\d_]))/F<+->/g;
#s/\\noindent(\b|(?=[\d_]))/ /g;
- # Conflict between different versions of PARI and refcard:
- s/\\(?:key|li)(?![a-zA-Z])\s*{(.*)}\s*{(.+)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;
- s/\\(?:key|li)(?![a-zA-Z])\s*{(.*)}\s*{}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mg;
- s/\\(key|var)(?![a-zA-Z])\s*{(\w+)}/C<$2>/mg;
- s/\\var(?![a-zA-Z])\s*{X<(\w+)>(\w+)}/X<$1>C<$2>/mg;
- s/\\var(?![a-zA-Z])\s*{f{}lag}/C<flag>/mg;
+# Conflict between different versions of PARI and refcard:
+# s/\\(?:key|li)\s*{(.*)}\s*{(.+)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/msg;
+# s/\\(?:key|li)\s*{(.*)}\s*{}[ \t]*\n/\n\n=back\n\n$1\n\n=over\n\n/mgs;
+# s/\\(key|var)(?![a-zA-Z])\s*{(\w+)}/C<$2>/mg;
+ s/\\var\s*{X<(\w+)>(\w+)}/X<$1>C<$2>/mg;
+ s/\\var\s*{f{}lag}/C<flag>/mg;
s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{\s*(\w+)(?=C\<)(.*)}[ \t]*\n/\n\n=item C<L<$2>$3>\n\n$1\n\n/mg;
s/\\metax(?![a-zA-Z])\s*{(.*)}\s*{(.*)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg;