Skip to content
Snippets Groups Projects
Commit 54fa0c84 authored by Luigi Scarso's avatar Luigi Scarso
Browse files

LuaTeX 1.09.2: sync with trunk.

parent 92cdb460
No related branches found
Tags 1.13.1
No related merge requests found
$Id: README 49020 2018-10-29 22:11:07Z karl $ $Id: README 49846 2019-01-28 10:31:05Z kakuto $
Copyright 2006-2018 TeX Users Group. Copyright 2006-2018 TeX Users Group.
You may freely use, modify and/or distribute this file. You may freely use, modify and/or distribute this file.
...@@ -64,7 +64,7 @@ dvipos - maintained here, by us ...@@ -64,7 +64,7 @@ dvipos - maintained here, by us
dvipsk - maintained here, by us dvipsk - maintained here, by us
dvisvgm 2.6.1 - checked 29oct18 dvisvgm 2.6.2 - checked 25jan19
https://dvisvgm.de/Downloads/ https://dvisvgm.de/Downloads/
gregorio 5.1.1 - checked 25mar18 gregorio 5.1.1 - checked 25mar18
...@@ -74,7 +74,7 @@ gsftopk - from Paul Vojta's xdvi? ...@@ -74,7 +74,7 @@ gsftopk - from Paul Vojta's xdvi?
kpathsea - maintained here, by us kpathsea - maintained here, by us
lcdf-typetools 2.107 - checked 22feb18 lcdf-typetools 2.108 - checked 28jan19
http://www.lcdf.org/type/ http://www.lcdf.org/type/
makeindexk - maintained here, by us makeindexk - maintained here, by us
...@@ -120,8 +120,10 @@ web2c - maintained here, by us - core web2c, plain tex, etc. ...@@ -120,8 +120,10 @@ web2c - maintained here, by us - core web2c, plain tex, etc.
also: https://osdn.jp/projects/eptex also: https://osdn.jp/projects/eptex
etex - maintained here etex - maintained here
euptex - http://www.t-lab.opal.ne.jp/tex/uptex_en.html euptex - http://www.t-lab.opal.ne.jp/tex/uptex_en.html
mflua[jit] - https://foundry.supelec.fr/projects/mflua/ mflua[jit] - https://serveur-svn.lri.fr/svn/modhel/mflua
also: http://www.luatex.org/download.html
mplibdir - http://tug.org/metapost mplibdir - http://tug.org/metapost
also: http://www.luatex.org/download.html
luatex - http://luatex.org luatex - http://luatex.org
pdftex - http://pdftex.org pdftex - http://pdftex.org
[u]pmpost - nothing current, see README for old info [u]pmpost - nothing current, see README for old info
......
...@@ -808,6 +808,12 @@ static int getpdfomitcidset(lua_State * L) ...@@ -808,6 +808,12 @@ static int getpdfomitcidset(lua_State * L)
return 1 ; return 1 ;
} }
static int getpdfomitcharset(lua_State * L)
{
lua_pushinteger(L, (pdf_omit_charset));
return 1 ;
}
static int setpdfgentounicode(lua_State * L) static int setpdfgentounicode(lua_State * L)
{ {
if (lua_type(L, 1) == LUA_TNUMBER) { if (lua_type(L, 1) == LUA_TNUMBER) {
...@@ -824,6 +830,14 @@ static int setpdfomitcidset(lua_State * L) ...@@ -824,6 +830,14 @@ static int setpdfomitcidset(lua_State * L)
return 0 ; return 0 ;
} }
static int setpdfomitcharset(lua_State * L)
{
if (lua_type(L, 1) == LUA_TNUMBER) {
set_pdf_omit_charset(lua_tointeger(L, 1));
}
return 0 ;
}
/* for tracing purposes when no pages are flushed */ /* for tracing purposes when no pages are flushed */
static int setforcefile(lua_State * L) static int setforcefile(lua_State * L)
...@@ -1335,10 +1349,12 @@ static const struct luaL_Reg pdflib[] = { ...@@ -1335,10 +1349,12 @@ static const struct luaL_Reg pdflib[] = {
{ "getignoreunknownimages", getpdfignoreunknownimages }, { "getignoreunknownimages", getpdfignoreunknownimages },
{ "getgentounicode", getpdfgentounicode }, { "getgentounicode", getpdfgentounicode },
{ "getomitcidset", getpdfomitcidset }, { "getomitcidset", getpdfomitcidset },
{ "getomitcharset", getpdfomitcharset },
{ "setinclusionerrorlevel", setpdfinclusionerrorlevel }, { "setinclusionerrorlevel", setpdfinclusionerrorlevel },
{ "setignoreunknownimages", setpdfignoreunknownimages }, { "setignoreunknownimages", setpdfignoreunknownimages },
{ "setgentounicode", setpdfgentounicode }, { "setgentounicode", setpdfgentounicode },
{ "setomitcidset", setpdfomitcidset }, { "setomitcidset", setpdfomitcidset },
{ "setomitcharset", setpdfomitcharset },
{ "setforcefile", setforcefile }, { "setforcefile", setforcefile },
{ "mapfile", l_mapfile }, { "mapfile", l_mapfile },
{ "mapline", l_mapline }, { "mapline", l_mapline },
......
#define luatex_svn_revision 7070 #define luatex_svn_revision 7075
2019-01-28 Andreas Scherer <https://ascherer.github.io>
* ctwill.man,
* cweb.man: Updated manpages; describe differences to original CWEB.
2019-01-10 Andreas Scherer <https://ascherer.github.io> 2019-01-10 Andreas Scherer <https://ascherer.github.io>
* ctwill.man: New manpage for CTWILL and its tools. * ctwill.man: New manpage for CTWILL and its tools.
......
.\" Automatically generated by Pandoc 2.5 .\" Automatically generated by Pandoc 2.5
.\" .\"
.TH "CTWILL" "1" "January 11, 2019" "Web2c @VERSION@" "General Commands Manual" .TH "CTWILL" "1" "January 27, 2019" "Web2c @VERSION@" "General Commands Manual"
.hy .hy
.SH NAME .SH NAME
.PP .PP
...@@ -24,18 +24,19 @@ with mini\-indexes per spread or per section ...@@ -24,18 +24,19 @@ with mini\-indexes per spread or per section
index.tex index.tex
.SH DESCRIPTION .SH DESCRIPTION
.PP .PP
The \f[B]ctwill\f[R] program converts a CWEB source document into a TeX The \f[B]ctwill\f[R] program converts a CWEB source document into a
file that may be formatted and printed in the usual way. TeX\ file that may be formatted and printed in the usual way.
It takes appropriate care of typographic details like page layout and It takes appropriate care of typographic details like page layout and
the use of indentation, \f[I]italics\f[R], \f[B]boldface\f[R], etc., and the use of indentation, \f[I]italics\f[R], \f[B]boldface\f[R], etc., and
it supplies extensive cross\-index information that it gathers it supplies extensive cross\-index information that it gathers
automatically. automatically.
.PP .PP
CWEB allows you to prepare a single document containing all the CWEB allows you to prepare a single document containing all the
information that is needed both to produce a compilable C program and to information that is needed both to produce a compilable C/C++\ program
produce a well\-formatted document describing the program in as much and to produce a well\-formatted document describing the program in as
detail as the writer may desire. much detail as the writer may desire.
The user of CWEB ought to be familiar with TeX as well as C. The user of CWEB ought to be familiar with TeX as well as C/C++.
.SH USAGE
.PP .PP
The command line should have one, two, or three names on it. The command line should have one, two, or three names on it.
The first is taken as the CWEB input file (and \f[B].w\f[R] is added if The first is taken as the CWEB input file (and \f[B].w\f[R] is added if
...@@ -89,7 +90,7 @@ Like the \f[B].aux\f[R] files, \f[B].bux\f[R] files should contain only ...@@ -89,7 +90,7 @@ Like the \f[B].aux\f[R] files, \f[B].bux\f[R] files should contain only
.PP .PP
The meaning specified by \f[B]\[at]$\&...\[at]>\f[R] generally has four The meaning specified by \f[B]\[at]$\&...\[at]>\f[R] generally has four
components: an identifier (followed by space), a program name (enclosed components: an identifier (followed by space), a program name (enclosed
in braces), a section number (followed by space), and a TeX part. in braces), a section number (followed by space), and a TeX\ part.
.PP .PP
A special \f[I]proofmode\f[R] is provided so that you can check A special \f[I]proofmode\f[R] is provided so that you can check
\f[B]ctwill\f[R]\[cq]s conclusions about cross\-references. \f[B]ctwill\f[R]\[cq]s conclusions about cross\-references.
...@@ -100,13 +101,40 @@ you can check that your specifications are correct. ...@@ -100,13 +101,40 @@ you can check that your specifications are correct.
More details how to use \f[B]ctwill\f[R] can be found in the first More details how to use \f[B]ctwill\f[R] can be found in the first
sections of its source code, respectively the change file sections of its source code, respectively the change file
\f[B]cweav\-twill.ch\f[R] applicable to the \f[B]cweave.w\f[R] source. \f[B]cweav\-twill.ch\f[R] applicable to the \f[B]cweave.w\f[R] source.
.SH DIFFERENCES TO ORIGINAL CTWILL
.PP
The present incarnation of \f[B]ctwill\f[R] and its utilities tries hard
to be a drop\-in replacement for the original package.
There are, however, a few differences worth noting:
.IP \[bu] 2
This version is based on the most recent version of CWEB (3.64c).
.IP \[bu] 2
In TeX\ Live the utility programs are prefixed with \f[B]ctwill\-\f[R]
and the macro files with \f[B]ct\f[R] for technical reasons.
.IP \[bu] 2
Options \f[B]\-\-help\f[R], \f[B]\-\-quiet\f[R], \f[B]\-\-verbose\f[R],
\f[B]\-\-version\f[R], and flags \f[B]\-i\f[R], \f[B]\-o\f[R], and
\f[B]+lX\f[R] are new in CWEBbin and TeX\ Live.
.IP \[bu] 2
Option \f[B]+lX\f[R] is accompanied by example wrapper files for
\f[B]ctwimac.tex\f[R] and \f[B]ctproofmac.tex\f[R] with translated
captions for German (\f[B]+ld\f[R]).
.IP \[bu] 2
\f[B]ctwill\f[R] in TeX\ Live operates silently by default; use the
\f[B]\-\-verbose\f[R] option to get the original behavior.
.IP \[bu] 2
File lookup with the environment variable CWEBINPUTS is extended to
permit several, colon\-separated, paths.
.IP \[bu] 2
If properly configured, the main program \f[B]ctwill\f[R] is localized
with the \[lq]GNU gettext utilities\[rq].
.SH OPTIONS .SH OPTIONS
.PP .PP
Options on the command line may be either turned off with `\f[B]\-\f[R]' Options on the command line may be either turned off with `\f[B]\-\f[R]'
(if they are on by default) or turned on with `\f[B]+\f[R]' (if they are (if they are on by default) or turned on with `\f[B]+\f[R]' (if they are
off by default). off by default).
In fact, the options are processed from left to right, so a sequence In fact, the options are processed from left to right, so a sequence
like \f[B]\[en]verbose \-h\f[R] will only show the \f[B]banner line\f[R] like \f[B]\-\-verbose \-h\f[R] will only show the \f[B]banner line\f[R]
(\f[B]+b\f[R]) and the \f[B]progress report\f[R] (\f[B]+p\f[R]), but (\f[B]+b\f[R]) and the \f[B]progress report\f[R] (\f[B]+p\f[R]), but
leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]). leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]).
.IP \[bu] 2 .IP \[bu] 2
...@@ -117,14 +145,15 @@ leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]). ...@@ -117,14 +145,15 @@ leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]).
\f[B]+p\f[R]: print progress report messages \f[B]+p\f[R]: print progress report messages
.IP \[bu] 2 .IP \[bu] 2
\f[B]+q\f[R]/\f[B]\-q\f[R]: shortcut for \f[B]\-bhp\f[R]; also \f[B]+q\f[R]/\f[B]\-q\f[R]: shortcut for \f[B]\-bhp\f[R]; also
\f[B]\[en]quiet\f[R] (default) \f[B]\-\-quiet\f[R] (default)
.IP \[bu] 2 .IP \[bu] 2
\f[B]+v\f[R]/\f[B]\-v\f[R]: shortcut for \f[B]+bhp\f[R]; also \f[B]+v\f[R]/\f[B]\-v\f[R]: shortcut for \f[B]+bhp\f[R]; also
\f[B]\[en]verbose\f[R] \f[B]\-\-verbose\f[R]
.IP \[bu] 2 .IP \[bu] 2
\f[B]\-e\f[R]: do not enclose C material in \f[B]\f[R] \f[B]\-e\f[R]: do not enclose C/C++\ material in \f[B]\f[R]
.IP \[bu] 2 .IP \[bu] 2
\f[B]\-f\f[R]: do not force a newline after every C statement in output \f[B]\-f\f[R]: do not force a newline after every C/C++\ statement in
output
.IP \[bu] 2 .IP \[bu] 2
\f[B]\-i\f[R]: suppress indentation of parameter declarations \f[B]\-i\f[R]: suppress indentation of parameter declarations
.IP \[bu] 2 .IP \[bu] 2
...@@ -140,20 +169,28 @@ leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]). ...@@ -140,20 +169,28 @@ leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]).
.IP \[bu] 2 .IP \[bu] 2
\f[B]+s\f[R]: print usage statistics \f[B]+s\f[R]: print usage statistics
.IP \[bu] 2 .IP \[bu] 2
\f[B]\[en]help\f[R]: display help message and exit \f[B]\-\-help\f[R]: display help message and exit
.IP \[bu] 2 .IP \[bu] 2
\f[B]\[en]version\f[R]: output version information and exit \f[B]\-\-version\f[R]: output version information and exit
.SH ENVIRONMENT .SH ENVIRONMENT
.PP .PP
The environment variable CWEBINPUTS is used to search for the input The environment variable CWEBINPUTS is used to search for the input
files, or the system default if CWEBINPUTS is not set. files, or the system default if CWEBINPUTS is not set.
See tex(1) for the details of the searching. See tex(1) for the details of the searching.
.PP
If prepared for NLS support, \f[B]ctwill\f[R] like \f[B]ctangle\f[R] and
\f[B]cweave\f[R] uses the environment variable TEXMFLOCALEDIR to
configure the parent directory where the \[lq]GNU gettext utilities\[rq]
search for translation catalogs.
.PP
These variables are preconfigured in TeX\ Live\[cq]s
\f[B]texmf.cnf\f[R].
.SH FILES .SH FILES
.PP .PP
The location of the files mentioned below varies from system to system. The location of the files mentioned below varies from system to system.
Use the \f[B]kpsewhich\f[R] utility to find their locations. Use the \f[B]kpsewhich\f[R] utility to find their locations.
.IP \[bu] 2 .IP \[bu] 2
\f[B]ctwimac.tex\f[R]: The default TeX macros \f[B]\[rs]input\f[R] in \f[B]ctwimac.tex\f[R]: The default TeX\ macros \f[B]\[rs]input\f[R] in
the first line of the output file. the first line of the output file.
.IP \[bu] 2 .IP \[bu] 2
\f[B]ctproofmac.tex\f[R]: If \f[B]ctwill\f[R] is invoked with the \f[B]ctproofmac.tex\f[R]: If \f[B]ctwill\f[R] is invoked with the
...@@ -168,14 +205,15 @@ dctproofmac.tex\f[R]. ...@@ -168,14 +205,15 @@ dctproofmac.tex\f[R].
\f[I]webfile\f[R]\f[B].bux\f[R]: Reference definitions to resolve from \f[I]webfile\f[R]\f[B].bux\f[R]: Reference definitions to resolve from
other modules. other modules.
.IP \[bu] 2 .IP \[bu] 2
\f[B]system.bux\f[R]: Reference definitions to resolve from C standard \f[B]system.bux\f[R]: Reference definitions to resolve from
library header files like \f[B]<stdio.h>\f[R]. C/C++\ standard library header files like \f[B]<stdio.h>\f[R].
.PP .PP
Other \f[B]aux\f[R]iliary files with references are created Other \f[B]aux\f[R]iliary files with references are created
automatically by \f[B]ctwill\f[R] and the actual index files are created automatically by \f[B]ctwill\f[R] and the actual index files are created
by TeX. by TeX.
.IP \[bu] 2 .IP \[bu] 2
\f[B]cwebman.tex\f[R]: The CWEB user manual. \f[B]cwebman.tex\f[R]: The CWEB user manual, available in PDF from
CTAN (https://ctan.org/pkg/cweb).
.SH SEE ALSO .SH SEE ALSO
.IP \[bu] 2 .IP \[bu] 2
The CWEB System of Structured Documentation: by Donald E.\ Knuth and The CWEB System of Structured Documentation: by Donald E.\ Knuth and
...@@ -188,11 +226,14 @@ Literate Programming: by D.\ E.\ Knuth. ...@@ -188,11 +226,14 @@ Literate Programming: by D.\ E.\ Knuth.
Weaving a Program: by Wayne Sewell. Weaving a Program: by Wayne Sewell.
.PP .PP
cweb(1), tex(1), cc(1) cweb(1), tex(1), cc(1)
.SH AUTHORS
.PP .PP
Don Knuth wrote \f[B]ctwill\f[R] based on \f[B]cweave\f[R] by Silvio
Levy and Knuth.
.PD 0
.P
.PD
As of 2019, \f[B]ctwill\f[R] and its utilities \f[B]ctwill-refsort\f[R] and As of 2019, \f[B]ctwill\f[R] and its utilities \f[B]ctwill-refsort\f[R] and
\f[B]ctwill-twinx\f[R] have been fully integrated with the extended CWEBbin \f[B]ctwill-twinx\f[R] have been fully integrated with the extended CWEBbin
system that serves as the basis for CWEB in TeX Live; see the project system that serves as the basis for CWEB in TeX\ Live; see the project
page (https://github.com/ascherer/cwebbin). page (https://github.com/ascherer/cwebbin).
.SH AUTHORS
Don Knuth wrote \f[B]ctwill\f[R] based on \f[B]cweave\f[R] by Silvio
Levy and Knuth.
.TH CWEB 1 "10 January 2018" "Web2C @VERSION@" .\" Automatically generated by Pandoc 2.5
.\"===================================================================== .\"
.TH "CWEB" "1" "January 27, 2019" "Web2c @VERSION@" "General Commands Manual"
.hy
.SH NAME .SH NAME
ctangle, cweave \- translate CWEB to C and/or TeX .PP
.\"===================================================================== ctangle, cweave \[en] translate CWEB to TeX
.SH SYNOPSIS .SH SYNOPSIS
.B ctangle .PP
.RB [ +bhps ] \f[B]ctangle\f[R] [\f[I]options\f[R]] \f[I]webfile\f[R][.w]
.IR webfile [ \fB.w\fP ] [{\f[I]changefile\f[R][.ch]|\-} [\f[I]outfile\f[R][.c]]]
.RI [{ changefile [ \fB.ch\fP ]| \fB\-\fP } .PD 0
.RI [ outfile [ \fB.c\fP ]]] .P
.br .PD
.B cweave \f[B]cweave\f[R] [\f[I]options\f[R]] \f[I]webfile\f[R][.w]
.RB [ +bhps ] [{\f[I]changefile\f[R][.ch]|\-} [\f[I]outfile\f[R][.tex]]]
.RB [ \-efiox ]
.RB [ \-lX | +lX ]
.IR webfile [ \fB.w\fP ]
.RI [{ changefile [ \fB.ch\fP ]| \fB\-\fP }
.RI [ outfile [ \fB.tex\fP ]]]
.\"=====================================================================
.SH DESCRIPTION .SH DESCRIPTION
The .PP
.B ctangle The \f[B]ctangle\f[R] program converts a CWEB source document into a
program converts a CWEB C/C++\ program that may be compiled in the usual way.
source document into a C\ program that may be compiled in the usual way. The output file includes \f[B]#line\f[R] specifications so that
The output file includes #line specifications so that debugging can be debugging can be done in terms of the CWEB source file.
done in terms of the CWEB source file. .PP
.PP The \f[B]cweave\f[R] program converts the same CWEB file into a
The TeX\ file that may be formatted and printed in the usual way.
.B cweave It takes appropriate care of typographic details like page layout and
program converts the same CWEB file into a TeX file that may be the use of indentation, \f[I]italics\f[R], \f[B]boldface\f[R], etc., and
formatted and printed in the usual way. it supplies extensive cross\-index information that it gathers
It takes appropriate care of typographic details like page automatically.
layout and the use of indentation, italics, boldface, etc., and it supplies .PP
extensive cross-index information that it gathers automatically. CWEB allows you to prepare a single document containing all the
.PP information that is needed both to produce a compilable C/C++\ program
CWEB allows you to prepare a single and to produce a well\-formatted document describing the program in as
document containing all the information that is needed both to produce much detail as the writer may desire.
a compilable C\ program and to produce a well-formatted document The user of CWEB ought to be familiar with TeX as well as C/C++.
describing the program in as much detail as the writer may desire. .SH USAGE
The user of CWEB ought to be familiar with TeX as well as\ C.
.PP .PP
The command line should have one, two, or three names on it. The command line should have one, two, or three names on it.
The first is taken as the CWEB file (and The first is taken as the CWEB input file (and \f[B].w\f[R] is added if
.B .w there is no extension).
is added if there is no extension). If there is a second name, it is a change file (and \f[B].ch\f[R] is
If that file cannot be opened, the extension added if there is no extension).
.B .web The change file overrides parts of the CWEB file, as described in the
is tried instead. (But documentation.
.B .w If there is a third name, it overrides the default name of the output
is recommended, since file, which is ordinarily the same as the name of the input file (but on
.B .web the current directory) with the extension \f[B].tex\f[R].
usually implies Pascal.) If you just want to change the output file name, but don\[cq]t have a
If there is a second name, it is a change file (and change file to apply, you can use `\f[B]\-\f[R]' as the second argument.
.B .ch .SH DIFFERENCES TO ORIGINAL CWEB
is added if there is no extension). .PP
The change file overrides parts of the WEB file, CWEBbin tries hard to be a drop\-in replacement for CWEB, so in general
as described in the documentation. you should not notice any differences in invoking the programs nor in
If there is a third name, it overrides the resulting output.
the default name of the output file, which is ordinarily the same as There are, however, a few differences worth noting:
the name of the input file (but on the current directory) with the .IP \[bu] 2
extension Options \f[B]\-\-help\f[R], \f[B]\-\-quiet\f[R], \f[B]\-\-verbose\f[R],
.B .c \f[B]\-\-version\f[R], and flags \f[B]\-i\f[R], \f[B]\-o\f[R], and
or \f[B]+lX\f[R] are new in CWEBbin and TeX\ Live.
.BR .tex . .IP \[bu] 2
.PP Option \f[B]+lX\f[R] is accompanied by several wrapper files for
Options in the command line may be either turned off with\ '\-' \f[B]cwebmac.tex\f[R] with translated captions for German
(if they are on by default) or turned on with\ '+' (if they are off by (\f[B]+ld\f[R]), French (\f[B]+lf\f[R]), and Italian (\f[B]+li\f[R]).
default). .IP \[bu] 2
In fact, the options are processed from left to right, CWEB in TeX\ Live operates silently by default (as of 2019); use the
so a sequence like '-f\ +f' corresponds to '+f' (which is the default). \f[B]\-\-verbose\f[R] option to get the original behavior.
.PP .IP \[bu] 2
Both programs operate silently by default (as of 2019). File lookup with the environment variable CWEBINPUTS is extended to
.PP permit several, colon\-separated, paths.
The .IP \[bu] 2
.B +b If properly configured, the main programs \f[B]ctangle\f[R] and
option prints the banner line on your terminal \f[B]cweave\f[R] are localized with the \[lq]GNU gettext utilities\[rq].
when ctangle or cweave begins. .SH OPTIONS
The .PP
.B +h Options on the command line may be either turned off with `\f[B]\-\f[R]'
option prints the happy message if the processing (if they are on by default) or turned on with `\f[B]+\f[R]' (if they are
was successful. off by default).
The In fact, the options are processed from left to right, so a sequence
.B +p like \f[B]\-\-verbose \-h\f[R] will only show the \f[B]banner line\f[R]
option prints progress reports (starred module numbers) as the processing (\f[B]+b\f[R]) and the \f[B]progress report\f[R] (\f[B]+p\f[R]), but
takes place. leave out the \f[B]happy message\f[R] (\f[B]\-h\f[R]).
.PP .PP
The The first batch of options are common to both \f[B]ctangle\f[R] and
.B +s \f[B]cweave\f[R]:
option prints statistics about memory usage at the end of a run. .IP \[bu] 2
.PP \f[B]+b\f[R]: print banner line on terminal
There are six other options applicable to .IP \[bu] 2
.B cweave \f[B]+h\f[R]: print success message on completion
only: .IP \[bu] 2
.B \-e \f[B]+p\f[R]: print progress report messages
inhibits the enclosure of C\ material formatted by .IP \[bu] 2
.B cweave \f[B]+q\f[R]/\f[B]\-q\f[R]: shortcut for \f[B]\-bhp\f[R]; also
in \f[B]\-\-quiet\f[R] (default)
\ePB{.\|.\|.} .IP \[bu] 2
brackets. \f[B]+v\f[R]/\f[B]\-v\f[R]: shortcut for \f[B]+bhp\f[R]; also
Such brackets are normally inserted so that special hooks \f[B]\-\-verbose\f[R]
can be used by .IP \[bu] 2
.I cweb-latex \f[B]+s\f[R]: print usage statistics
and similar programs. .IP \[bu] 2
By default, \f[B]\-\-help\f[R]: display help message and exit
\ePB{.\|.\|.}. .IP \[bu] 2
is defined as a no-op. \f[B]\-\-version\f[R]: output version information and exit
.B \-f .PP
means do not force a newline after every statement in the formatted output. There are six other options applicable to \f[B]cweave\f[R] only:
.B \-i .IP \[bu] 2
suppresses the indentation of parameter declarations. \f[B]\-e\f[R]: do not enclose C/C++\ material in
.B \-lX \f[B]\[rs]PB{\&...}\f[R]
(or +lX) uses macros for language X\ from Xcwebmac.tex. .IP \[bu] 2
.B \-o \f[B]\-f\f[R]: do not force a newline after every C/C++\ statement in
suppresses the visual separation of declarations and statements. output
.B \-x .IP \[bu] 2
means omit the index and table of contents. \f[B]\-i\f[R]: suppress indentation of parameter declarations
.\"===================================================================== .IP \[bu] 2
\f[B]\-o\f[R]: suppress separation of declarations and statements
.IP \[bu] 2
\f[B]\-x\f[R]: omit indices, section names, table of contents
.IP \[bu] 2
\f[B]+lX\f[R]/\f[B]\-lX\f[R]: use macros for language \f[I]X\f[R] as of
\f[I]X\f[R]\f[B]cwebmac.tex\f[R]
.SH ENVIRONMENT .SH ENVIRONMENT
The environment variable CWEBINPUTS is used to search for the input files, .PP
or the system default if CWEBINPUTS is not set. See The environment variable CWEBINPUTS is used to search for the input
.BR tex (1) files, or the system default if CWEBINPUTS is not set.
for the details of the searching. See tex(1) for the details of the searching.
.\"===================================================================== .PP
If prepared for NLS support, \f[B]ctangle\f[R] and \f[B]cweave\f[R] use
the environment variable TEXMFLOCALEDIR to configure the parent
directory where the \[lq]GNU gettext utilities\[rq] search for
translation catalogs.
.PP
These variables are preconfigured in TeX\ Live\[cq]s
\f[B]texmf.cnf\f[R].
.SH FILES .SH FILES
The location of the files mentioned below varies from system to .PP
system. Use the The location of the files mentioned below varies from system to system.
.B kpsewhich Use the \f[B]kpsewhich\f[R] utility to find their locations.
utility to find their locations. .IP \[bu] 2
.TP \f[B]cwebmac.tex\f[R]: The default TeX\ macros \f[B]\[rs]input\f[R] in
.I cwebmac.tex the first line of the \f[B]cweave\f[R] output file.
TeX macros used by cweave output. .IP \[bu] 2
.TP \f[B]cwebman.tex\f[R]: The CWEB user manual, available in PDF from
.I cwebman.tex CTAN (https://ctan.org/pkg/cweb).
The user manual. .SH SEE ALSO
.\"===================================================================== .IP \[bu] 2
.SH "SEE ALSO" The CWEB System of Structured Documentation: by Donald E.\ Knuth and
.TP Silvio Levy (hardcopy version of \f[B]cwebman.tex\f[R] and the source
.I Literate Programming code listings of \f[B]common.w\f[R], \f[B]ctangle.w\f[R], and
by D. E. Knuth. \f[B]cweave.w\f[R]).
.TP .IP \[bu] 2
.I Weaving a Program Literate Programming: by D.\ E.\ Knuth.
by Wayne Sewell. .IP \[bu] 2
.TP Weaving a Program: by Wayne Sewell.
.I The CWEB System of Structured Documentation .PP
by Donald E. Knuth and Silvio Levy (hardcopy version of cwebman.tex cweb(1), tex(1), cc(1)
and the source code listings).
.PP
.BR tex (1),
.BR cc (1).
.\"=====================================================================
.SH AUTHORS .SH AUTHORS
.PP
Don Knuth wrote WEB for TeX and Pascal. Don Knuth wrote WEB for TeX and Pascal.
.br .PD 0
Silvio Levy designed and developed CWEB .P
by adapting the WEB conventions to\ C and by recoding everything in CWEB. .PD
Silvio Levy designed and developed CWEB by adapting the WEB conventions
to C and by recoding everything in CWEB.
Knuth began using CWEB and made further refinements. Knuth began using CWEB and made further refinements.
Many other helpers are acknowledged in the CWEB manual. Many other helpers are acknowledged in the CWEB manual.
.br .PD 0
As of 2019, the CWEB system in TeX Live is based on the CWEBbin extension .P
that collects ideas and improvements from numerous contributors; .PD
see https://github.com/ascherer/cwebbin. As of 2019, the CWEB system in TeX\ Live is based on the CWEBbin
extension that collects ideas and improvements from numerous
contributors; see the project
page (https://github.com/ascherer/cwebbin).
2019-01-28 Andreas Scherer <https://ascherer.github.io>
* mpost.w: TeXnical nitpicking.
2019-01-26 Luigi Scarso <luigi.scarso@gmail.com> 2019-01-26 Luigi Scarso <luigi.scarso@gmail.com>
* Fixed bisection algorithm (overflow of number of bisections in decimal mode with low precision) * Fixed bisection algorithm (overflow of number of bisections in decimal mode with low precision)
* Added 2 levels to the bisection algorithm for cubic intersection. Need testing. * Added 2 levels to the bisection algorithm for cubic intersection. Need testing.
......
...@@ -14,13 +14,25 @@ ...@@ -14,13 +14,25 @@
\def\[#1]{#1.} \def\[#1]{#1.}
\pdfoutput=1 \pdfoutput=1
@s line normal
@s MP int
@s MPX int
@s MP_options int
@s boolean int
@s const_string int
@s mpx_options int
@s option int
@s string int
@s timeb int
@s timeval int
@*\MP\ executable. @*\MP\ executable.
Now that all of \MP\ is a library, a separate program is needed to Now that all of \MP\ is a library, a separate program is needed to
have our customary command-line interface. have our customary command-line interface.
@ First, here are the C includes. |avl.h| is needed because of an @ First, here are the \CEE/ includes.
|avl_allocator| that is defined in |mplib.h|
@d true 1 @d true 1
@d false 0 @d false 0
...@@ -35,7 +47,7 @@ have our customary command-line interface. ...@@ -35,7 +47,7 @@ have our customary command-line interface.
#elif defined (HAVE_SYS_TIMEB_H) #elif defined (HAVE_SYS_TIMEB_H)
#include <sys/timeb.h> #include <sys/timeb.h>
#endif #endif
#include <time.h> /* For `struct tm'. Moved here for Visual Studio 2005. */ #include <time.h> /* For `|struct tm|'. Moved here for Visual Studio 2005. */
#if HAVE_SYS_STAT_H #if HAVE_SYS_STAT_H
#include <sys/stat.h> #include <sys/stat.h>
#endif #endif
...@@ -43,7 +55,7 @@ have our customary command-line interface. ...@@ -43,7 +55,7 @@ have our customary command-line interface.
#include <mpxout.h> #include <mpxout.h>
#include <kpathsea/kpathsea.h> #include <kpathsea/kpathsea.h>
@= /*@@null@@*/ @> static char *mpost_tex_program = NULL; @= /*@@null@@*/ @> static char *mpost_tex_program = NULL;
static int debug = 0; /* debugging for makempx */ static int debug = 0; /* debugging for \.{makempx} */
static int nokpse = 0; static int nokpse = 0;
static boolean recorder_enabled = false; static boolean recorder_enabled = false;
static string recorder_name = NULL; static string recorder_name = NULL;
...@@ -52,11 +64,11 @@ static char *job_name = NULL; ...@@ -52,11 +64,11 @@ static char *job_name = NULL;
static char *job_area = NULL; static char *job_area = NULL;
static int dvitomp_only = 0; static int dvitomp_only = 0;
static int ini_version_test = false; static int ini_version_test = false;
string output_directory; /* Defaults to NULL. */ string output_directory; /* Defaults to |NULL|. */
static boolean restricted_mode = false; static boolean restricted_mode = false;
@<getopt structures@>; @<Structures for |getopt|@>@;
@<Declarations@>; @<Declarations@>@;
@ Allocating a bit of memory, with error detection: @ Allocating a bit of memory, with error detection:
...@@ -175,7 +187,7 @@ static void mpost_run_editor (MP mp, char *fname, int fline) { ...@@ -175,7 +187,7 @@ static void mpost_run_editor (MP mp, char *fname, int fline) {
break; break;
case '\0': case '\0':
*temp++ = '%'; *temp++ = '%';
/* Back up to the null to force termination. */ /* Back up to the |NULL| to force termination. */
edit_value--; edit_value--;
break; break;
default: default:
...@@ -243,7 +255,7 @@ options->run_editor = mpost_run_editor; ...@@ -243,7 +255,7 @@ options->run_editor = mpost_run_editor;
static string normalize_quotes (const char *name, const char *mesg) { static string normalize_quotes (const char *name, const char *mesg) {
boolean quoted = false; boolean quoted = false;
boolean must_quote = (strchr(name, ' ') != NULL); boolean must_quote = (strchr(name, ' ') != NULL);
/* Leave room for quotes and NUL. */ /* Leave room for quotes and |NULL|. */
string ret = (string)mpost_xmalloc(strlen(name)+3); string ret = (string)mpost_xmalloc(strlen(name)+3);
string p; string p;
const_string q; const_string q;
...@@ -326,8 +338,8 @@ void recorder_start(char *jobname) { ...@@ -326,8 +338,8 @@ void recorder_start(char *jobname) {
return kpse_find_file (nam, fmt, req); return kpse_find_file (nam, fmt, req);
} }
@ Invoke {\tt makempx} (or {\tt troffmpx}) to make sure there is an @ Invoke \.{makempx} (or \.{troffmpx}) to make sure there is an
up-to-date {\tt .mpx} file for a given {\tt .mp} file. (Original up-to-date \.{.mpx} file for a given \.{.mp} file. (Original
from John Hobby 3/14/90) from John Hobby 3/14/90)
@d default_args " --parse-first-line --interaction=nonstopmode" @d default_args " --parse-first-line --interaction=nonstopmode"
...@@ -683,7 +695,7 @@ if (!nokpse) ...@@ -683,7 +695,7 @@ if (!nokpse)
options->find_file = mpost_find_file; options->find_file = mpost_find_file;
@ The |mpost| program supports setting of internal values @ The |mpost| program supports setting of internal values
via a |-s| commandline switch. Since this switch is repeatable, via a \.{-s} commandline switch. Since this switch is repeatable,
a structure is needed to store the found values in, which is a a structure is needed to store the found values in, which is a
simple linked list. simple linked list.
...@@ -695,7 +707,7 @@ typedef struct set_list_item { ...@@ -695,7 +707,7 @@ typedef struct set_list_item {
struct set_list_item *next; struct set_list_item *next;
} set_list_item ; } set_list_item ;
@ Here is the global value that is the head of the list of |-s| options. @ Here is the global value that is the head of the list of \.{-s} options.
@c @c
struct set_list_item *set_list = NULL; struct set_list_item *set_list = NULL;
...@@ -805,9 +817,8 @@ static void *mpost_open_file(MP mp, const char *fname, const char *fmode, int ft ...@@ -805,9 +817,8 @@ static void *mpost_open_file(MP mp, const char *fname, const char *fmode, int ft
if (!nokpse) if (!nokpse)
options->open_file = mpost_open_file; options->open_file = mpost_open_file;
@ @ @d ARGUMENT_IS(a) STREQ (mpost_options[optionid].name, a)
@<getopt structures@>= @<Structures for |getopt|@>=
#define ARGUMENT_IS(a) STREQ (mpost_options[optionid].name, a)
/* SunOS cc can't initialize automatic structs, so make this static. */ /* SunOS cc can't initialize automatic structs, so make this static. */
static struct option mpost_options[] static struct option mpost_options[]
...@@ -847,7 +858,7 @@ static struct option mpost_options[] ...@@ -847,7 +858,7 @@ static struct option mpost_options[]
@<Read and set command line options@>= @<Read and set command line options@>=
{ {
int g; /* `getopt' return code. */ int g; /* `|getopt|' return code. */
int optionid; int optionid;
for (;;) { for (;;) {
g = getopt_long_only (argc, argv, "+", mpost_options, &optionid); g = getopt_long_only (argc, argv, "+", mpost_options, &optionid);
...@@ -952,9 +963,8 @@ static struct option mpost_options[] ...@@ -952,9 +963,8 @@ static struct option mpost_options[]
options->ini_version = (int)ini_version_test; options->ini_version = (int)ini_version_test;
} }
@ @ @d option_is(a) STREQ (dvitomp_options[optionid].name, a)
@<getopt structures@>= @<Structures for |getopt|@>=
#define option_is(a) STREQ (dvitomp_options[optionid].name, a)
/* SunOS cc can't initialize automatic structs, so make this static. */ /* SunOS cc can't initialize automatic structs, so make this static. */
static struct option dvitomp_options[] static struct option dvitomp_options[]
...@@ -968,9 +978,9 @@ static struct option dvitomp_options[] ...@@ -968,9 +978,9 @@ static struct option dvitomp_options[]
@ @
@<Read and set dvitomp command line options@>= @<Read and set \.{dvitomp} command line options@>=
{ {
int g; /* `getopt' return code. */ int g; /* `|getopt|' return code. */
int optionid; int optionid;
for (;;) { for (;;) {
g = getopt_long_only (argc, argv, "+", dvitomp_options, &optionid); g = getopt_long_only (argc, argv, "+", dvitomp_options, &optionid);
...@@ -1113,9 +1123,9 @@ input. ...@@ -1113,9 +1123,9 @@ input.
int optind_aux = optind; int optind_aux = optind;
size_t buflen = 0; size_t buflen = 0;
for(;optind_aux<argc;optind_aux++) { for(;optind_aux<argc;optind_aux++) {
buflen +=(strlen(argv[optind_aux])+1); /* reserve space for ' ' as separator */ buflen +=(strlen(argv[optind_aux])+1); /* reserve space for |' '| as separator */
} }
/* Last char is ' ', no need to reserve space for final '\0' */ /* Last char is |' '|, no need to reserve space for final |'\0'| */
if (buflen > max_command_line_size) { if (buflen > max_command_line_size) {
fprintf(stderr,"length of command line too long!\n"); fprintf(stderr,"length of command line too long!\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -1141,7 +1151,7 @@ input. ...@@ -1141,7 +1151,7 @@ input.
} }
} }
@ A simple function to get numerical |texmf.cnf| values @ A simple function to get numerical \.{texmf.cnf} values
@c @c
static int setup_var (int def, const char *var_name, boolean nokpse) { static int setup_var (int def, const char *var_name, boolean nokpse) {
if (!nokpse) { if (!nokpse) {
...@@ -1348,15 +1358,16 @@ if (options->job_name != NULL) { ...@@ -1348,15 +1358,16 @@ if (options->job_name != NULL) {
} }
} else { } else {
job_name = tmp_job; job_name = tmp_job;
/* |job_area| stays NULL */ /* |job_area| stays |NULL| */
} }
} }
} }
} }
options->job_name = job_name; options->job_name = job_name;
@ We |#define DLLPROC dllmpostmain| in order to build \MP\ as DLL for @ We |
W32\TeX. #define DLLPROC dllmpostmain
| in order to build \MP\ as DLL for W32\TeX.
@<Declarations@>= @<Declarations@>=
#define DLLPROC dllmpostmain #define DLLPROC dllmpostmain
...@@ -1386,12 +1397,13 @@ DLLPROC (int argc, char **argv) ...@@ -1386,12 +1397,13 @@ DLLPROC (int argc, char **argv)
#else #else
main (int argc, char **argv) main (int argc, char **argv)
#endif #endif
{ /* |start_here| */ @;
{ @t\1@> /* |start_here| */
int k; /* index into buffer */ int k; /* index into buffer */
int history; /* the exit status */ int history; /* the exit status */
MP mp; /* a metapost instance */ MP mp; /* a metapost instance */
struct MP_options * options; /* instance options */ struct MP_options * options; /* instance options */
char *user_progname = NULL; /* If the user overrides |argv[0]| with {\tt -progname}. */ char *user_progname = NULL; /* If the user overrides |argv[0]| with \.{-progname}. */
options = mp_options(); options = mp_options();
options->ini_version = (int)false; options->ini_version = (int)false;
options->print_found_names = (int)true; options->print_found_names = (int)true;
...@@ -1408,7 +1420,7 @@ main (int argc, char **argv) ...@@ -1408,7 +1420,7 @@ main (int argc, char **argv)
dvitomp_only=1; dvitomp_only=1;
} }
if (dvitomp_only) { if (dvitomp_only) {
@<Read and set dvitomp command line options@>; @<Read and set \.{dvitomp} command line options@>;
} else { } else {
@<Read and set command line options@>; @<Read and set command line options@>;
} }
...@@ -1473,4 +1485,7 @@ main (int argc, char **argv) ...@@ -1473,4 +1485,7 @@ main (int argc, char **argv)
exit(history); exit(history);
else else
exit(0); exit(0);
@t\8@>
} }
@* Index.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment