From 0ae062e177340be706279e9275f7c3e2ed4f323a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 19 Oct 2007 17:56:01 +0000 Subject: perltex 1.5 (15oct07) git-svn-id: svn://tug.org/texlive/trunk@5238 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/perltex/README | 2 +- Master/texmf-dist/doc/latex/perltex/perltex.pdf | Bin 292838 -> 333558 bytes Master/texmf-dist/source/latex/perltex/perltex.dtx | 347 +++++++++++++-------- Master/texmf-dist/source/latex/perltex/perltex.ins | 4 +- Master/texmf-dist/tex/latex/perltex/perltex.sty | 6 +- 5 files changed, 224 insertions(+), 135 deletions(-) diff --git a/Master/texmf-dist/doc/latex/perltex/README b/Master/texmf-dist/doc/latex/perltex/README index 7cb298ff64d..fc596e6a36a 100644 --- a/Master/texmf-dist/doc/latex/perltex/README +++ b/Master/texmf-dist/doc/latex/perltex/README @@ -42,7 +42,7 @@ perltex.gls", then "latex perltex.dtx" again, then "dvips perltex.dvi License ======= -Copyright (C) 2007, Scott Pakin +Copyright (C) 2007 Scott Pakin These files may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or diff --git a/Master/texmf-dist/doc/latex/perltex/perltex.pdf b/Master/texmf-dist/doc/latex/perltex/perltex.pdf index 536ca94a12d..ae6ba073305 100644 Binary files a/Master/texmf-dist/doc/latex/perltex/perltex.pdf and b/Master/texmf-dist/doc/latex/perltex/perltex.pdf differ diff --git a/Master/texmf-dist/source/latex/perltex/perltex.dtx b/Master/texmf-dist/source/latex/perltex/perltex.dtx index 3bd604e2f81..801a0f8005c 100644 --- a/Master/texmf-dist/source/latex/perltex/perltex.dtx +++ b/Master/texmf-dist/source/latex/perltex/perltex.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % -% Copyright (C) 2007, Scott Pakin -% ---------------------------------------------------- +% Copyright (C) 2007 Scott Pakin +% --------------------------------------------------- % % This file may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.3c of this license @@ -22,7 +22,7 @@ %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{perltex} %<*package> - [2007/09/29 v1.4 LaTeX macros for use with PerlTeX] + [2007/10/13 v1.5 LaTeX macros for use with PerlTeX] % % %<*driver> @@ -34,6 +34,7 @@ \def\plmac@toflag{\jobname.tfpl} \def\plmac@fromflag{\jobname.ffpl} \def\plmac@doneflag{\jobname.dfpl} + \def\plmac@pipe{\jobname.pipe} \makeatother \usepackage{perltex} \usepackage{varioref} @@ -60,7 +61,7 @@ % % \fi % -% \CheckSum{563} +% \CheckSum{577} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -449,14 +450,15 @@ % % \subsection*{SYNOPSIS} % perltex -% {\tt [}{\bf {\tt --}help}{\tt ]} -% {\tt [}{\bf {\tt --}latex}={\em program\/}{\tt ]} -% {\tt [}{\bf {\tt --}}{\tt [}{\bf no}{\tt ]}{\bf safe}{\tt ]} -% {\tt [}{\bf {\tt --}permit}={\em feature\/}{\tt ]} -% {\tt [}{\em latex options\/}{\tt ]} +% [\textbf{--help}] +% [\textbf{--latex}=\textit{program}] +% [\textbf{--}[\textbf{no}]\textbf{safe}] +% [\textbf{--permit}=\textit{feature}] +% [\textbf{--makesty}] +% [\textit{latex options}] % % \subsection*{DESCRIPTION} -% \LaTeX{} --- through the underlying \TeX{} typesetting system --- produces +% \LaTeX---through the underlying \TeX{} typesetting system---produces % beautifully typeset documents but has a macro language that is % difficult to program. In particular, support for complex string % manipulation is largely lacking. Perl is a popular general-purpose @@ -465,16 +467,17 @@ % % \bigskip % -% Clearly, Perl's programmability could complement \LaTeX{}'s typesetting -% strengths. {\bf perltex} is the tool that enables a symbiosis between -% the two systems. All a user needs to do is compile a \LaTeX{} document -% using {\bf perltex} instead of {\bf latex}. ({\bf perltex} is actually a -% wrapper for {\bf latex}, so no {\bf latex} functionality is lost.) If the -% document includes a {\tt \char`\\usepackage\{perltex\}} in its preamble, then -% {\tt \char`\\perlnewcommand} and {\tt \char`\\perlrenewcommand} macros will be made -% available. These behave just like \LaTeX{}'s {\tt \char`\\newcommand} and -% {\tt \char`\\renewcommand} except that the macro body contains Perl code instead -% of \LaTeX{} code. +% Clearly, Perl's programmability could complement \LaTeX's typesetting +% strengths. \textbf{perltex} is the tool that enables a symbiosis +% between the two systems. All a user needs to do is compile a \LaTeX\ +% document using \textbf{perltex} instead of \textbf{latex}. +% (\textbf{perltex} is actually a wrapper for \textbf{latex}, so no +% \textbf{latex} functionality is lost.) If the document includes a +% \texttt{\string\usepackage\{perltex\}} in its preamble, then +% \texttt{\string\perlnewcommand} and \texttt{\string\perlrenewcommand} +% macros will be made available. These behave just like \LaTeX's +% \texttt{\string\newcommand} and \texttt{\string\renewcommand} except +% that the macro body contains Perl code instead of \LaTeX\ code. % % \subsection*{OPTIONS}% % \index{OPTIONS} @@ -483,136 +486,174 @@ % % \begin{description} % -% \item[{\bf {\tt --}help}]% -% \index{--help@{\bf {\tt --}help}}% -% \hfil\\ +% +% \item[{\textbf{-{}-help}}] \mbox{} +% % Display basic usage information. % -% \item[{\bf {\tt --}latex}={\em program\/}]% -% \index{--latex=program@{\bf {\tt --}latex}={\em program\/}}% -% \hfil\\ -% Specify a program to use instead of {\bf latex}. For example, -% {\tt --latex=pdf{}latex} would typeset the given document using -% {\bf pdf{}latex} instead of ordinary {\bf latex}. -% -% \item[{\bf {\tt --}}{\tt [}{\bf no}{\tt ]}{\bf safe}]% -% \index{--[no]safe@{\bf {\tt --}}{\tt [}{\bf no}{\tt ]}{\bf safe}}% -% \hfil\\ -% Enable or disable sandboxing. With the default of {\tt --safe}, -% {\bf perltex} executes the code from a {\tt \char`\\perlnewcommand} or -% {\tt \char`\\perlrenewcommand} macro within a protected environment that -% prohibits ``unsafe'' operations such as accessing files or executing -% external programs. Specifying {\tt --nosafe} gives the \LaTeX{} document -% {\em carte blanche\/} to execute any arbitrary Perl code, including that -% which can harm the user's files. See the {\em Safe\/} manpage for more information. -% -% \item[{\bf {\tt --}permit}={\em feature\/}]% -% \index{--permit=feature@{\bf {\tt --}permit}={\em feature\/}}% -% \hfil\\ -% Permit particular Perl operations to be performed. The {\tt --permit} -% option, which can be specified more than once on the command line, -% enables finer-grained control over the {\bf perltex} sandbox. See -% the {\em Opcode\/} manpage for more information. +% +% \item[{\textbf{-{}-latex}=\textit{program}}] \mbox{} +% +% Specify a program to use instead of \textbf{latex}. For example, +% \texttt{--latex=pdflatex} would typeset the given document using +% \textbf{pdflatex} instead of ordinary \textbf{latex}. +% +% +% \item[{\textbf{-{}-}[\textbf{no}]\textbf{safe}}] \mbox{} +% +% Enable or disable sandboxing. With the default of \textbf{-{}-safe}, +% \textbf{perltex} executes the code from a +% \texttt{\string\perlnewcommand} or \texttt{\string\perlrenewcommand} +% macro within a protected environment that prohibits ``unsafe'' +% operations such as accessing files or executing external programs. +% Specifying \textbf{-{}-nosafe} gives the \LaTeX\ document \textit{carte +% blanche} to execute any arbitrary Perl code, including that which can +% harm the user's files. See \emph{Safe} for more information. +% +% +% \item[{\textbf{-{}-permit}=\textit{feature}}] \mbox{} +% +% Permit particular Perl operations to be performed. The +% \textbf{-{}-permit} option, which can be specified more than once on +% the command line, enables finer-grained control over the +% \textbf{perltex} sandbox. See \emph{Opcode} for more information. +% +% +% \item[{\textbf{-{}-makesty}}] \mbox{} +% +% Generate a \LaTeX\ style file called \emph{noperltex.sty}. Replacing +% the document's \texttt{\string\usepackage\{perltex\}} line with +% \texttt{\string\usepackage\{noperltex\}} produces the same output +% but does not require \PerlTeX, making the document suitable for +% distribution to people who do not have \PerlTeX\ installed. The +% disadvantage is that \emph{noperltex.sty} is specific to the document +% that produced it. Any changes to the document's \PerlTeX\ macro +% definitions or macro invocations necessitates rerunning +% \textbf{perltex} with the \textbf{-{}-makesty} option. % % \end{description} % % These options are then followed by whatever options are normally -% passed to {\bf latex} (or whatever program was specified with -% {\tt --latex}), including, for instance, the name of the {\em .tex\/} file to -% compile. +% passed to \textbf{latex} (or whatever program was specified with +% \texttt{--latex}), including, for instance, the name of the +% \emph{.tex} file to compile. % % \subsection*{EXAMPLES} -% In its simplest form, {\bf perltex} is run just like {\bf latex}: +% +% In its simplest form, \textbf{perltex} is run just like \textbf{latex}: +% % \begin{verbatim} % perltex myfile.tex % \end{verbatim} % -% To use {\bf pdf{}latex} instead of regular {\bf latex}, use the {\tt --latex} -% option: +% +% To use \textbf{pdflatex} instead of regular \textbf{latex}, use the +% \textbf{-{}-latex} option: +% % \begin{verbatim} % perltex --latex=pdflatex myfile.tex % \end{verbatim} % -% If \LaTeX{} gives a ``{\tt trapped by operation mask}'' error and you -% trust the {\em .tex\/} file you're trying to compile not to execute +% +% If \LaTeX\ gives a ``\texttt{trapped by operation mask}'' error and +% you trust the \emph{.tex} file you're trying to compile not to execute % malicious Perl code (e.g., because you wrote it yourself), you can -% disable {\bf perltex}'s safety mechansisms with {\tt --nosafe}: +% disable \textbf{perltex}'s safety mechansisms with +% \textbf{-{}-nosafe}: +% % \begin{verbatim} % perltex --nosafe myfile.tex % \end{verbatim} % -% The following command gives documents only {\bf perltex}'s default -% permissions ({\tt :browse}) plus the ability to open files and invoke the -% {\tt time} command: +% +% The following command gives documents only \textbf{perltex}'s default +% permissions (\texttt{:browse}) plus the ability to open files and invoke the +% \texttt{time} command: +% % \begin{verbatim} % perltex --permit=:browse --permit=:filesys_open % --permit=time myfile.tex % \end{verbatim} % +% % \subsection*{ENVIRONMENT} -% {\bf perltex} honors the following environment variables: +% +% \textbf{perltex} honors the following environment variables: % % \begin{description} % -% \item[PERLTEX]% -% \index{PERLTEX@PERLTEX}% -% \hfil\\ -% Specify the filename of the \LaTeX{} compiler. The \LaTeX{} compiler -% defaults to ``{\tt latex}''. The {\tt PERLTEX} environment variable -% overrides this default, and the {\tt --latex} command-line option (see -% the {\tt OPTIONS} entry elsewhere in this document) overrides that. +% \item[{PERLTEX}] \mbox{} +% +% Specify the filename of the \LaTeX\ compiler. The \LaTeX\ compiler +% defaults to ``\texttt{latex}''. The \texttt{PERLTEX} environment +% variable overrides this default, and the \textbf{-{}-latex} +% command-line option (see \textsf{OPTIONS}) overrides that. % % \end{description} % +% % \subsection*{FILES} -% While compiling {\em jobname.tex\/}, {\bf perltex} makes use of the following -% files: +% +% While compiling \emph{jobname.tex}, \textbf{perltex} makes use of the +% following files: % % \begin{description} % -% \item[{\em jobname.lgpl\/}]% -% \index{jobname.lgpl@{\em jobname.lgpl\/}}% -% \hfil\\ +% \item[{\emph{jobname.lgpl}}] \mbox{} +% % log file written by Perl; helpful for debugging Perl macros % -% \item[{\em jobname.topl\/}]% -% \index{jobname.topl@{\em jobname.topl\/}}% -% \hfil\\ -% information sent from \LaTeX{} to Perl % -% \item[{\em jobname.frpl\/}]% -% \index{jobname.frpl@{\em jobname.frpl\/}}% -% \hfil\\ -% information sent from Perl to \LaTeX{} +% \item[{\emph{jobname.topl}}] \mbox{} +% +% information sent from \LaTeX\ to Perl +% % -% \item[{\em jobname.tfpl\/}]% -% \index{jobname.tfpl@{\em jobname.tfpl\/}}% -% \hfil\\ -% ``flag'' file whose existence indicates that {\em jobname.topl\/} contains +% \item[{\emph{jobname.frpl}}] \mbox{} +% +% information sent from Perl to \LaTeX\ +% +% +% \item[{\emph{jobname.tfpl}}] \mbox{} +% +% ``flag'' file whose existence indicates that \emph{jobname.topl} contains % valid data % -% \item[{\em jobname.ffpl\/}]% -% \index{jobname.ffpl@{\em jobname.ffpl\/}}% -% \hfil\\ -% ``flag'' file whose existence indicates that {\em jobname.frpl\/} contains +% +% \item[{\emph{jobname.ffpl}}] \mbox{} +% +% ``flag'' file whose existence indicates that \emph{jobname.frpl} contains % valid data % -% \item[{\em jobname.dfpl\/}]% -% \index{jobname.dfpl@{\em jobname.dfpl\/}}% -% \hfil\\ -% ``flag'' file whose existence indicates that {\em jobname.ffpl\/} has been +% +% \item[{\emph{jobname.dfpl}}] \mbox{} +% +% ``flag'' file whose existence indicates that \emph{jobname.ffpl} has been % deleted % +% +% \item[{\emph{noperltex-\#.tex}}] \mbox{} +% +% file generated by \emph{noperltex.sty} for each \PerlTeX\ macro invocation +% % \end{description} % +% % \subsection*{NOTES} -% {\bf perltex}'s sandbox defaults to what the {\em Opcode\/} manpage calls ``{\tt :browse}''. +% +% \textbf{perltex}'s sandbox defaults to what \emph{Opcode} calls +% ``\texttt{:browse}''. +% % % \subsection*{SEE ALSO} -% {\em latex\/}(1), {\em pdf{}latex\/}(1), {\em perl\/}(1), {\em Safe\/}(3pm), {\em Opcode\/}(3pm) +% +% latex(1), pdflatex(1), perl(1), Safe(3pm), Opcode(3pm) +% % % \subsection*{AUTHOR} -% Scott Pakin, {\em scott+pt@pakin.org\/} +% +% Scott Pakin, \textit{scott+pt@pakin.org} +% % % ^^A *********************************** % ^^A * End of generated pod2latex text * @@ -625,7 +666,7 @@ % \section{License agreement} % \label{sec:license} % -% Copyright \textcopyright{} 2007, Scott Pakin \texttt{} +% Copyright \textcopyright{} 2007 Scott Pakin \texttt{} % % \providecommand{\url}[1]{\texttt{##1}} % @@ -644,10 +685,9 @@ % % Thanks to Andrew Mertz for writing the first draft of the code that % produces the \PerlTeX-free \noperlmac\ style file and for testing the -% final draft; to Phil Kitschen~(?) for pointing out an error in the -% Hilbert-matrix example; and to Andrei Alexandrescu for providing a few -% bug fixes. Also, thanks to the many people who have sent me fan mail -% or submitted bug reports or feature requests. (The +% final draft; and to Andrei Alexandrescu for providing a few bug fixes. +% Also, thanks to the many people who have sent me fan mail or submitted +% bug reports, documentation corrections, or feature requests. (The % \texttt{\string\perldo} macro and the \texttt{--makesty} option were % particularly popular requests.) % @@ -783,9 +823,10 @@ % \begin{macro}{\plmac@have@perltextrue} % \begin{macro}{\plmac@have@perltexfalse} % The following block of code checks the existence of each of the -% variables listed in Table~\ref{tbl:variables}. If any variable is not -% defined, \perlmac{} gives an error message and---as we shall see on -% page~\pageref{page:define-dummies}---defines dummy versions of +% variables listed in Table~\ref{tbl:variables} plus |\plmac@pipe|, a +% Unix named pipe used for to improve performance. If any variable is +% not defined, \perlmac{} gives an error message and---as we shall see +% on page~\pageref{page:define-dummies}---defines dummy versions of % |\perl|[|re|]|newcommand| and |\perl|[|re|]|newenvironment|. % \begin{macrocode} \newif\ifplmac@have@perltex @@ -796,6 +837,7 @@ \@ifundefined{plmac@toflag}{\plmac@have@perltexfalse}{} \@ifundefined{plmac@fromflag}{\plmac@have@perltexfalse}{} \@ifundefined{plmac@doneflag}{\plmac@have@perltexfalse}{} +\@ifundefined{plmac@pipe}{\plmac@have@perltexfalse}{} \ifplmac@have@perltex \else \PackageError{perltex}{Document must be compiled using perltex} @@ -1553,11 +1595,23 @@ % For convenience, we use \LaTeXe's |\IfFileExists| macro to check the % file and invoke |\plmac@file@existstrue| or |\plmac@file@existsfalse|, % as appropriate. +% +% As a performance optimization we |\input| a named pipe. This causes +% the |latex| process to relinquish the CPU until the |perltex| process +% writes data (always just ``|\endinput|'') into the named pipe. On +% systems that don't support persistent named pipes (e.g.,~Microsoft +% Windows), |\plmac@pipe| is an ordinary file containing only +% ``|\endinput|''. While reading that file is not guaranteed to +% relinquish the CPU, it should not hurt the performance or correctness +% of the communication protocol between \LaTeX\ and Perl. +% \changes{v1.5}{2007/10/13}{Modified to read from a named pipe before +% checking file existence} % \begin{macrocode} \newif\ifplmac@file@exists % \end{macrocode} % \begin{macrocode} \newcommand{\plmac@await@existence}[1]{% + \input\plmac@pipe \loop \IfFileExists{#1}% {\plmac@file@existstrue}% @@ -1783,7 +1837,7 @@ # # This is a generated file. # -# Copyright (C) 2007, Scott Pakin +# Copyright (C) 2007 Scott Pakin # # This file may be distributed and/or modified under the conditions # of the LaTeX Project Public License, either version 1.3c of this @@ -1829,6 +1883,7 @@ use Opcode; use Getopt::Long; use Pod::Usage; use File::Basename; +use Fcntl; use POSIX; use warnings; use strict; @@ -1871,6 +1926,7 @@ my @permittedops; % \begin{perlmacro}{$fromflag} % \begin{perlmacro}{$doneflag} % \begin{perlmacro}{$logfile} +% \begin{perlmacro}{$pipe} % \begin{perlmacro}{$styfile} % \begin{perlmacro}{@macroexpansions} % \begin{perlmacro}{$sandbox} @@ -1887,13 +1943,16 @@ my @permittedops; % that will exist only after Perl creates |$fromfile|. |$doneflag| is % the name of a file that will exist only after Perl deletes % |$fromflag|. |$logfile| is the name of a log file to which \perltex{} -% writes verbose execution information. |$styfile| is the string -% \noperlmac\ if \perltex\ is run with \texttt{--makesty}, otherwise -% undefined. |$sandbox| is a secure sandbox in which to run code that -% appeared in the \LaTeX{} document. |$sandbox_eval| is a subroutine -% that evalutes a string within |$sandbox| (normally) or outside of all -% sandboxes (if |--nosafe| is specified). |$latexpid| is the process~ID -% of the |latex| process. +% writes verbose execution information. |$pipe| is the name of a Unix +% named pipe (or ordinary file on operating systems that lack support +% for persistent named pipes) used to convince the |latex| process to +% yield control of the CPU\@. |$styfile| is the string \noperlmac\ if +% \perltex\ is run with \texttt{--makesty}, otherwise undefined. +% |$sandbox| is a secure sandbox in which to run code that appeared in +% the \LaTeX{} document. |$sandbox_eval| is a subroutine that evalutes +% a string within |$sandbox| (normally) or outside of all sandboxes (if +% |--nosafe| is specified). |$latexpid| is the process~ID of the +% |latex| process. % \begin{macrocode} my $progname = basename $0; my $jobname = "texput"; @@ -1904,6 +1963,7 @@ my $toflag; my $fromflag; my $doneflag; my $logfile; +my $pipe; my $styfile; my @macroexpansions; my $sandbox = new Safe; @@ -1924,6 +1984,7 @@ my $latexpid; % \end{perlmacro} % \end{perlmacro} % \end{perlmacro} +% \end{perlmacro} % % \subsubsection{Command-line conversion} % @@ -1984,7 +2045,8 @@ foreach (1 .. 20) { % % Now that we have the name of the \LaTeX{} job (|$jobname|) we can % assign |$toperl|, |$fromperl|, |$toflag|, |$fromflag|, |$doneflag|, -% and |$logfile| in terms of |$jobname| plus a suitable extension. +% |$logfile|, and |$pipe| in terms of |$jobname| plus a suitable +% extension. % \begin{macrocode} $toperl = $jobname . ".topl"; $fromperl = $jobname . ".frpl"; @@ -1992,6 +2054,7 @@ $toflag = $jobname . ".tfpl"; $fromflag = $jobname . ".ffpl"; $doneflag = $jobname . ".dfpl"; $logfile = $jobname . ".lgpl"; +$pipe = $jobname . ".pipe"; % \end{macrocode} % % We now replace the filename of the |.tex| file passed to \perltex{} @@ -2000,25 +2063,28 @@ $logfile = $jobname . ".lgpl"; % necessary. % \begin{macrocode} $latexcmdline[$firstcmd] = - sprintf '\makeatletter' . '\def%s{%s}' x 6 . '\makeatother%s', + sprintf '\makeatletter' . '\def%s{%s}' x 7 . '\makeatother%s', '\plmac@tag', $separator, '\plmac@tofile', $toperl, '\plmac@fromfile', $fromperl, '\plmac@toflag', $toflag, '\plmac@fromflag', $fromflag, '\plmac@doneflag', $doneflag, + '\plmac@pipe', $pipe, $latexcmdline[$firstcmd]; % \end{macrocode} % % \subsubsection{Launching \LaTeX} % % We start by deleting the |$toperl|, |$fromperl|, |$toflag|, -% |$fromflag|, and |$doneflag| files, in case any of these were left -% over from a previous (aborted) run. We also create a log file, -% |$logfile| and, if |$styfile| is defined, a \LaTeXe\ style file. As -% |@latexcmdline| contains the complete command line to pass to |latex| -% we need only |fork| a new process and have the child process overlay -% itself with |latex|. \perltex{} continues running as the parent. +% |$fromflag|, |$doneflag|, and |$pipe| files, in case any of these were +% left over from a previous (aborted) run. We also create a log file +% (|$logfile|), a named pipe (|$pipe|)---or a file containing only +% |\endinput| if we can't create a named pipe---and, if |$styfile| is +% defined, a \LaTeXe\ style file. As |@latexcmdline| contains the +% complete command line to pass to |latex| we need only |fork| a new +% process and have the child process overlay itself with |latex|. +% \perltex{} continues running as the parent. % % Note that here and elsewhere in \perltex, |unlink| is called % repeatedly until the file is actually deleted. This works around a @@ -2027,7 +2093,7 @@ $latexcmdline[$firstcmd] = % \changes{v1.0a}{2003/08/21}{Made all \texttt{unlink} calls wait for the % file to actually disappear} % \begin{macrocode} -foreach my $file ($toperl, $fromperl, $toflag, $fromflag, $doneflag) { +foreach my $file ($toperl, $fromperl, $toflag, $fromflag, $doneflag, $pipe) { unlink $file while -e $file; } open (LOGFILE, ">$logfile") || die "open(\"$logfile\"): $!\n"; @@ -2036,6 +2102,13 @@ if (defined $styfile) { } % \end{macrocode} % \begin{macrocode} +if (!eval {mkfifo($pipe, 0600)}) { + sysopen PIPE, $pipe, O_WRONLY|O_CREAT, 0755; + print PIPE "\\endinput\n"; + close PIPE; +} +% \end{macrocode} +% \begin{macrocode} defined ($latexpid = fork) || die "fork: $!\n"; unshift @latexcmdline, $latexprog; if (!$latexpid) { @@ -2092,7 +2165,7 @@ while (1) { sleep 0; if (waitpid($latexpid, &WNOHANG)==-1) { foreach my $file ($toperl, $fromperl, $toflag, - $fromflag, $doneflag) { + $fromflag, $doneflag, $pipe) { unlink $file while -e $file; } undef $latexpid; @@ -2322,7 +2395,8 @@ while (1) { % we now write |$result| (which contains either the result of executing % the user's or a |\PackageError|) to the |$fromperl| file, delete % |$toflag|, |$toperl|, and |$doneflag|, and notify \LaTeX{} by touching -% the |$fromflag| file. +% the |$fromflag| file. As a performance optimization, we also write +% |\endinput| into |$pipe| to wake up the |latex| process. % \begin{macrocode} open (FROMPERL, ">$fromperl") || die "open($fromperl): $!\n"; syswrite FROMPERL, $result; @@ -2337,6 +2411,12 @@ while (1) { open (FROMFLAG, ">$fromflag") || die "open($fromflag): $!\n"; close FROMFLAG; % \end{macrocode} +% \begin{macrocode} + if (open (PIPE, ">$pipe")) { + print PIPE "\\endinput\n"; + close PIPE; + } +% \end{macrocode} % % We have to perform one final \LaTeX-to-Perl synchronization step. % Otherwise, a subsequent |\perl|[|re|]|newcommand| would see that @@ -2347,6 +2427,13 @@ while (1) { unlink $fromflag while -e $fromflag; open (DONEFLAG, ">$doneflag") || die "open($doneflag): $!\n"; close DONEFLAG; +% \end{macrocode} +% Again, we awaken the |latex| process, which is blocked on |$pipe|. +% \begin{macrocode} + if (open (PIPE, ">$pipe")) { + print PIPE "\\endinput\n"; + close PIPE; + } } % \end{macrocode} % @@ -2468,7 +2555,7 @@ perltex [B<--latex>=I] [B<-->[B]B] [B<--permit>=I] -[B<--makesty] +[B<--makesty>] [I] @@ -2511,17 +2598,17 @@ B instead of ordinary B. =item B<-->[B]B -Enable or disable sandboxing. With the default of C<--safe>, +Enable or disable sandboxing. With the default of B<--safe>, B executes the code from a C<\perlnewcommand> or C<\perlrenewcommand> macro within a protected environment that prohibits ``unsafe'' operations such as accessing files or executing -external programs. Specifying C<--nosafe> gives the LaTeX document +external programs. Specifying B<--nosafe> gives the LaTeX document I to execute any arbitrary Perl code, including that which can harm the user's files. See L for more information. =item B<--permit>=I -Permit particular Perl operations to be performed. The C<--permit> +Permit particular Perl operations to be performed. The B<--permit> option, which can be specified more than once on the command line, enables finer-grained control over the B sandbox. See L for more information. @@ -2551,7 +2638,7 @@ In its simplest form, B is run just like B: perltex myfile.tex -To use B instead of regular B, use the C<--latex> +To use B instead of regular B, use the B<--latex> option: perltex --latex=pdflatex myfile.tex @@ -2559,7 +2646,7 @@ option: If LaTeX gives a ``C'' error and you trust the F<.tex> file you're trying to compile not to execute malicious Perl code (e.g., because you wrote it yourself), you can disable -B's safety mechansisms with C<--nosafe>: +B's safety mechansisms with B<--nosafe>: perltex --nosafe myfile.tex @@ -2581,7 +2668,7 @@ B honors the following environment variables: Specify the filename of the LaTeX compiler. The LaTeX compiler defaults to ``C''. The C environment variable -overrides this default, and the C<--latex> command-line option (see +overrides this default, and the B<--latex> command-line option (see L) overrides that. =back diff --git a/Master/texmf-dist/source/latex/perltex/perltex.ins b/Master/texmf-dist/source/latex/perltex/perltex.ins index 528c2576e02..256d0e34ed4 100644 --- a/Master/texmf-dist/source/latex/perltex/perltex.ins +++ b/Master/texmf-dist/source/latex/perltex/perltex.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2007, Scott Pakin +%% Copyright (C) 2007 Scott Pakin %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3c of this license @@ -21,7 +21,7 @@ This is a generated file. -Copyright (C) 2007, Scott Pakin +Copyright (C) 2007 Scott Pakin This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license diff --git a/Master/texmf-dist/tex/latex/perltex/perltex.sty b/Master/texmf-dist/tex/latex/perltex/perltex.sty index 91d13ec61dc..aea050bdf59 100644 --- a/Master/texmf-dist/tex/latex/perltex/perltex.sty +++ b/Master/texmf-dist/tex/latex/perltex/perltex.sty @@ -8,7 +8,7 @@ %% %% This is a generated file. %% -%% Copyright (C) 2007, Scott Pakin +%% Copyright (C) 2007 Scott Pakin %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3c of this license @@ -22,7 +22,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{perltex} - [2007/09/29 v1.4 LaTeX macros for use with PerlTeX] + [2007/10/13 v1.5 LaTeX macros for use with PerlTeX] \newif\ifplmac@have@perltex \plmac@have@perltextrue \@ifundefined{plmac@tag}{\plmac@have@perltexfalse}{} @@ -31,6 +31,7 @@ \@ifundefined{plmac@toflag}{\plmac@have@perltexfalse}{} \@ifundefined{plmac@fromflag}{\plmac@have@perltexfalse}{} \@ifundefined{plmac@doneflag}{\plmac@have@perltexfalse}{} +\@ifundefined{plmac@pipe}{\plmac@have@perltexfalse}{} \ifplmac@have@perltex \else \PackageError{perltex}{Document must be compiled using perltex} @@ -195,6 +196,7 @@ } \newif\ifplmac@file@exists \newcommand{\plmac@await@existence}[1]{% + \input\plmac@pipe \loop \IfFileExists{#1}% {\plmac@file@existstrue}% -- cgit v1.2.3