#!/usr/bin/perl -w # # Please correct the above line to the actual location of perl on your # system, and the line below to the location of PARI manual, ch. 3. # # The manual file can compressed. Sometimes you need to change the # name of the compression program in the %compress = ... statement below. # # How to show a chunk of docs: # pod2man --lax a.pod | nroff -man | # perl -p00e "s/\s*$/\n/;if (/^\S/) {$_=''} else {print qq'\n' if $next++}"| # less -s -+C $version = $1, shift @ARGV if @ARGV and $ARGV[0] =~ /^-v=(.*)$/; $parifile = shift || "f:/pari/doc/usersch3.tex.gz"; # $parifile="/opt/src/pari-1.39/doc/usersch3.tex.gz"; die "Usage: $0 [-v=version-of-pari] pari-chapter-filename\n" unless -f $parifile; #%transl=( # '\\', '\backslash', # '^', '\hat{}', # '!', 'fact', # '~', 'trans', # '_', 'conj', # '-', '\+', # '%', '\%', # 'min', 'max', # 'log', 'ln', #); %compress = ('.gz', 'gzip -cd', '.z', 'gzip -cd', '.Z', 'zcat', ); #print $help; foreach $suffix (keys %compress) { ($patt = $suffix) =~ s/(\W)/\\$1/; if ($parifile =~ /$patt$/) { $pipe = $compress{$suffix}; last; } } if ($pipe) { open(DOC,"$pipe $parifile |") || die "Cannot open pipe $pipe from $parifile: $!, stopped"; } else { open(DOC,$parifile) || die "Cannot find file $parifile: $!, stopped"; } $/=''; # Paragraph mode # %table = qw(`a ? "a ? "u ? "o ? 'e ?); sub indexify ($) { my $in = shift; $in =~ s/(^|and\s+)(\w+)(\$?\()/$1\\ref{$2}$3/g; $in; } while () { # last if /\\subsec[\\{}ref]*[\\\${]$help[}\\\$]/o; s/\\chapter\s*{(.*)}/\n\n=head1 NAME\n\nlibPARI - $1\n\n=head1 DESCRIPTION\n\n/; s/\\section\s*{(.*)}/"\n\n=head1 " . indexify($1) . "\n\n"/e; # Try to delimit by : s/\\subsec(?:ref|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n:]*):\s*/"\n\n=head2 " . indexify("$1$3") . "\n\n"/e; s/\\subsubsec(?:ref|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}([^\n:]*):\s*/"\n\n=item " . indexify("$1$3") . "\n\n"/e; # Try to delimit by ' ' s/\\subsec(?:ref|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]+})+)}(\S*)\s+/"\n\n=head2 " . indexify("$1$3") . "\n\n"/e; s/\\subsec(?:ref|title|idx|op)?\s*{(([^{}]+(?=[{}])|{[^{}]*})+)}:?\s*/"\n\n=head2 " . indexify("$1") . "\n\n"/e; &TeXprint; } if ($pipe) { if ($^O eq 'os2') { # Would get 'illegal seek' otherwise? 1 while ; } close(DOC) || die "Cannot close pipe `$pipe $parifile': $!, stopped"; } else { close(DOC) || die "Cannot close file $parifile: $!, stopped"; } sub wrap_code { my $in = shift; $in =~ s/^(.)/ $1/mg; $in } # sref is invisible reference # tec(a,b) is ref(a)tt(b) sub TeXprint_old { # d?frac{}{} ??? bullet ??? s/\\\///g; s/\\([% &|\#])/$1/g; s/\\c?dots\b/.../g; s/\\cdot\b/ . /g; s/\\mid\b/ | /g; s/(\\string)?\\_/_/g; s/\\(hat\b|\^)({\\?\s*})?/^/g; s/(^|[^\\])~/$1 /g; s/\\,/ /g; s/\\enspace(\b|(?=[\d_]))/ /g; s/\\~(\{(\\\s*)?\})?/~/g; s/\\tilde(\{\\\s+\})?/~/g; s/\\hbox{}/ /g; s/\\parskip.*/\n/g; # Up to end of the line s/\\(equiv|approx|simeq)(\b|(?=[\d_]))/ ~ /g; s/\\neq(\b|(?=[\d_]))/!=/g; s/([A-Z])\/E/g; s/\\leq?(\b|(?=[\d_]))/E=/g; s/\\geq?(\b|(?=[\d_]))/E=/g; s/\\\$/F/g; s/\$\\bf\b\s*([^\$]+)\$/C>/g; s/\$+([^\$]+)\$+/C<$1>/g; s/\\sref{\s*([^{}]*)}/X<$1>/g; s/\\ref{\s*([^{}]*)}/X<$1>$1/g; s/\\tec{\s*([^{}]*)}{\s*([^{}]*)}/X<$1>$1C<$2>/g; s/\\text{\s*([^{}]*)}/$1/g; s/\{\\text\s*([^{}])}/$1/g; s/^{\\tt\s*\\obeylines\s*(([^{}]+(?=[{}])|{[^{}]*})+)}/wrap_code($1)/e; s/{\\tt\b\s*([^{}]*)}/C<$1>/g; s/{\\bf\b\s*(([^{}]+(?=[{}])|{[^{}]+})+)}/B<$1>/g; s/\\Bbb\b\s*(\w)/B>/g; s/\\Z(\b|(?=[\d_]))/B>/g; s/\\teb{\s*([^{}]*)}/$1/g; s/{\\(sl|it)\b\s*([^{}]*)}/I<$2>/g; #s/\\(subsec(ref)?|smallskip|sl|sref[ a-z]*|bf|ref|Bbb|text|tt|\|)[ \t]*//g; s/\\(backslash|bs)\s*(\b|(?=[\d_]))/\\/g; s/\\(log|sin|cos|lim|tan|mod|sqrt|exp|ln|det)(\b|(?=[\d_]))/ F<$1> /g; s/\\bmod\b/ mod /g; s/\\TeX\{\}/TeX/g; s/\\(small|big)skip(\b|(?=[\d_]))/\n\n/g; s/\\pm(\b|(?=[\d_]))/F<+->/g; s/\\(left|right)(\b|(?=[\d_]))//g; s/\\(q?quad|vfill|eject|centerline)(\b|(?=[\d_]))/ /g; s/\\obr(\b|(?=[\d_]))/\{/g; s/\\cbr(\b|(?=[\d_]))/\}/g; s/\\quo(\b|(?=[\d_]))/\"/g; s/(^|\s)\{(\w+)\}/$1$2/g; s/\\([{}])/$1/g; s/'(\W)'/'C<$1>'/g; s/\\(Alpha | Beta | Chi | Delta | Epsilon | Phi | Gamma | Eta | Iota | vartheta | Kappa | Lambda | Mu | Nu | Omicron | Pi | Theta | Rho | Sigma | Tau | Ypsilon | varsigma | Omega | Xi | Psi | Zeta | alpha | beta | chi | delta | varepsilon | phi | gamma | eta | iota | varphi | kappa | lambda | mu | nu | omicron | pi | theta | rho | sigma | tau | ypsilon | varpi | omega | xi | psi | zeta) (\b|(?=[\d_]|[A-Z]<))/F<$1>/xg; s/\\vers(\{\}|\b|(?=[\d_]))/$version/ if defined $version; print; } sub TeXprint { # d?frac{}{} ??? bullet ??? s/\\title\s*\{[^{}]*\}(\s*\\centerline\s*\{[^{}]*\})?//; s/([^\\])%.*$/$1/gm; s/\\kbd\{/\{\\tt /g; s/\\\///g; s/\\([% &|\#\\])/$1/g; s/\\[lc]?dots\b/.../g; s/\\cdot\b/ . /g; s/\\mid\b/ | /g; s/(\\string)?\\_/_/g; s/\\(hat\b|\^)({\\?\s*})?/^/g; s/\\pow(?![a-zA-z])/^/g; s/(^|[^\\])~/$1 /g; s/\\[,;]/ /g; s/\\ne(?![a-zA-Z])/ != /g; s/\\enspace(\b|(?=[\d_]))/ /g; s/\\~(\{(\\\s*)?\})?/~/g; s/\\tilde(\{\\\s+\})?/~/g; s/\\til(?![a-zA-Z])/~/g; s/\\hbox{}/ /g; s/\\parskip.*/\n/g; # Up to end of the line s/\\(equiv|approx|simeq)(\b|(?=[\d_]))/ ~ /g; s/\\neq(\b|(?=[\d_]))/!=/g; s/([A-Z])\/E/g; s/\\leq?(\b|(?=[\d_]))/E=/g; s/\\geq?(\b|(?=[\d_]))/E=/g; s/\\\$/F/g; s/\$\\bf\b\s*([^\$]+)\$/C>/g; s/\$+([^\$]+)\$+/C<$1>/g; s/\\s(?:ref|idx){\s*([^{}]*)}/X<$1>/g; s/\\(?:ref|idx){\s*([^{}]*)}/X<$1>$1/g; s/\\tec{\s*([^{}]*)}{\s*([^{}]*)}/X<$1>$1C<$2>/g; s/\\text{\s*([^{}]*)}/$1/g; s/\{\\text\s*([^{}])}/$1/g; s/^{\\tt\s*\\obeylines\s*(([^{}]+(?=[{}])|{[^{}]*})+)}/wrap_code($1)/e; s/{\\tt\b\s*((\\.|[^{}])*)}/C<$1>/g; s/{\\bf\b\s*(([^{}]+(?=[{}])|{[^{}]+})+)}/B<$1>/g; s/\\Bbb\b\s*(\w)/B>/g; s/\\([NZQRC])\1(?![a-zA-Z])/B>/g; s/\\Z(\b|(?=[\d_]))/B>/g; s/\\teb{\s*([^{}]*)}/$1/g; s/{\\(sl|it)\b\s*([^{}]*)}/I<$2>/g; #s/\\(subsec(ref)?|smallskip|sl|sref[ a-z]*|bf|ref|Bbb|text|tt|\|)[ \t]*//g; s/\\(backslash|bs)\s*(\b|(?=[\d_]|C\<))/\\/g; s/\\(log|sin|cos|lim|tan|mod|sqrt|exp|ln|det)(\b|(?=[\d_]))/ F<$1> /g; s/\\bmod\b/ mod /g; s/\\TeX\{\}/TeX/g; s/\\TeX(\W)/TeX$1/g; s/\\((small|big)skip|newcolumn|(short)?copyrightnotice|hfill|break|par|leavevmode|strut|endgroup|bye)(\b|(?=[\d_]))[ \t]*/\n\n/g; s/^[ \t]*\\hskip\s*\w+//gm; s/\\pm(\b|(?=[\d_]))/F<+->/g; s/\\(left|right)(\b|(?=[\d_]))//g; s/\\(q?quad|vfill|eject|centerline)(\b|(?=[\d_]))/ /g; s/\\obr(\b|(?=[\d_]))/\{/g; s/\\cbr(\b|(?=[\d_]))/\}/g; s/\\quo(\b|(?=[\d_]))/\"/g; s/(^|\s)\{(\w+)\}/$1$2/g; s/\\([{}])/$1/g; s/'(\W)'/'C<$1>'/g; s/\\(Alpha | Beta | Chi | Delta | Epsilon | Phi | Gamma | Eta | Iota | vartheta | Kappa | Lambda | Mu | Nu | Omicron | Pi | Theta | Rho | Sigma | Tau | Ypsilon | varsigma | Omega | Xi | Psi | Zeta | alpha | beta | chi | delta | varepsilon | phi | gamma | eta | iota | varphi | kappa | lambda | mu | nu | omicron | pi | theta | rho | sigma | tau | ypsilon | varpi | omega | xi | psi | zeta | expr | seq | args | gcd | sum | prod) (\b|(?=[\d_]|[A-Z]<))/F<$1>/xg; s/\\vers(\{\}|\b|(?=[\d_]))/$version/ if defined $version; # for refcard: s/{\\rm\b\s*([^{}]*)}/$1/g; s/\\key\b\s*{(.*)}{(.*)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg; s/\\metax\b\s*{(.*)}\s*{\s*(\w+)(?=C\<)(.*)}[ \t]*\n/\n\n=item C$3>\n\n$1\n\n/mg; s/\\metax\b\s*{(.*)}\s*{(.*)}[ \t]*\n/\n\n=item C<$2>\n\n$1\n\n/mg; s/\\hbox(\b|(?=[A-Z]\<))//g; # s/\\kbd\{([^{}]*)\}/\\$1/g; s/C\<\{\}=/C\<=/g; s/\\rightarrow(?![a-zA-Z])/C<--E>/g; s/\\longleftrightarrow(?![a-zA-Z])/C-----E>/g; s/\\begin(double)?indentedkeys/\n\n=over\n\n/g; s/\\end(double)?indentedkeys/\n\n=back\n\n/g; # begin/end group appear in very special context only s/\\begingroup\W.*//s; # Eat to the end s/\n{3,}/\n\n/g; print; }