| Ilya Zakharevich on Tue, 29 Apr 2003 12:51:49 -0700 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: \o3 glitch |
On Mon, Apr 28, 2003 at 08:21:49PM -0400, Igor Schein wrote:
> % foreach i ( pari/src/test/in/[a-z]* )
> foreach> (echo "\o3";cat $i)|gp -q
> foreach> end
Actually,
#!/bin/sh
for i in src/test/in/[a-z]*; do
echo $i 1>&2
(echo "\o3"; cat $i) | ./gp -q
done
This patch fixes the problem (\end used internally, *and* redefined in
-TeX mode), updates the recursion safeguard from 400 to 10000 \def
expansions (needed for \pmatrix), and adds a scissors option (adds a
"cut here" line when an expression does not fit in the linelength).
It also adds flushing to get better results with the above test script
(otherwise input/output are not properly interlaced if one redirects
STDOUT).
See the results of the default for "cut here" line by, e.g.,
\o3
\p 240
[Pi,Pi]~
Yours,
Ilya
--- ./misc/tex2mail-bad Mon Apr 28 20:17:50 2003
+++ ./misc/tex2mail Tue Apr 29 12:47:50 2003
@@ -19,15 +19,17 @@
# ragged # leave right ragged
# noindent # assume \noindent everywhere
# ignorefonts # make math fonts (\mathfrak etc) into NOPs
+# scissors # Symbol to emit when a long line is cut
eval 'require "newgetopt.pl";
&NGetOpt("linelength=i","maxdef=i","debug=i","by_par", "TeX",
- "ragged", "noindent", "ignorefonts")'
+ "ragged", "noindent", "ignorefonts", "scissors=s", "noflush")'
|| warn "Errors during parsing command line options" .
($@ ? ": $@" : '') . ".\n";
$linelength= $opt_linelength || 75;
-$maxdef= $opt_maxdef || 400;
+$maxdef= $opt_maxdef || 10000;
$debug=$opt_debug;
+$opt_scissors = "---8<---8<---" unless defined $opt_scissors;
$notusualtoks="\\\\" . '\${}^_~&@';
$notusualtokenclass="[$notusualtoks]";
@@ -37,6 +39,7 @@ $active="$macro|\\\$\\\$|$notusualtokenc
$tokenpattern="$usualtokenclass|$active";
$multitokenpattern="$usualtokenclass+|$active";
+$| = 1 unless $opt_noflush;
# Format of the record: height,length,baseline,expandable-spaces,string
# The string is not terminated by \n, but separated into rows by \n.
@@ -345,10 +348,12 @@ warn "\@p is !", join('!', @p), "!\n\@ou
warn "No cut found!\n" if $debug & $debug_flow;
# If anything else fails use force
&print();
+ print "$opt_scissors\n" if length($opt_scissors) && $h > 1;
while (&length($rec)>$linelength) {
@p=&cut($linelength,$rec);
@out=($p[0]);
&print();
+ print "$opt_scissors\n" if length($opt_scissors) && $h > 1;
$rec=$p[1];
}
$curlength=0;
@@ -1345,7 +1350,7 @@ sub define {
sub defb {
for (@_) {
- &define("\\$_","\\begin{$_}");&define("\\end$_","\\end{$_}");
+ &define("\\$_","\\begin{$_}");&define("\\end$_","\\endTeXtoMail{$_}");
}
}
@@ -2554,8 +2559,12 @@ for ("documentclass", "documentstyle") {
$contents{"\\$_"}="[]discard";
}
+# works as \end in LaTeX
+$type{"\\endTeXtoMail"}="sub1";
+$contents{"\\endTeXtoMail"}="end";
+
if ($opt_TeX) {
- &define('\pmatrix#1','\left(\begin{matrix}#1\end{matrix}\right)');
+ &define('\pmatrix#1','\left(\begin{matrix}#1\endTeXtoMail{matrix}\right)');
$type{"\\end"}="sub";
$contents{"\\end"}="end_TeX";
} else {
@@ -2633,4 +2642,9 @@ __END__
Allow \over and other infix macros inside \left(\right).
\label would not update $curlength.
Whitespace edits.
-
+ Update the limit of expansion of definitions to 10000 per paragraph
+ (a recursion guard - used, e.g., per TeX's \pmatrix).
+ New option scissors to emit a line when a high line is cut into
+ pieces (disabled when "").
+ New option noflush (rarily useful optimization).
+ Flush the output by default.