This file is public domain. ---------------------------------------------------------------------- What is new in MetaPost version 1.208: ---------------------------------------------------------------------- * Previous versions of MetaPost 1.20x were overeager to remove file extensions from the end of the jobname. ---------------------------------------------------------------------- What is new in MetaPost version 1.207: ---------------------------------------------------------------------- * With the -file-line-error commandline option, MetaPost 1.20x always reported the name of the most recently 'input' file instead of the name of the actual current file. ---------------------------------------------------------------------- What is new in MetaPost version 1.206: ---------------------------------------------------------------------- Bug fixes: * Many of the commands in the MP language cause strings in the string pool to be printed to new strings that are also built up in the string pool. This could cause crashes when the new string wouldn't fit in the memory allocated. * Failure to initialize the jobname in the MP_options struct could cause crashes in library mode. ---------------------------------------------------------------------- What is new in MetaPost version 1.205: ---------------------------------------------------------------------- Bug fixes: * Metapost did not handle well files with extensions other than .mp. ---------------------------------------------------------------------- What is new in MetaPost version 1.204: ---------------------------------------------------------------------- Bug fixes: * Metapost could go into an endless output loop when characters in bitmap fonts where used, because it tried to limit the %*Font output line to a specific number of bytes. ---------------------------------------------------------------------- What is new in MetaPost version 1.203: ---------------------------------------------------------------------- Bug fixes: * Building version 1.202 for source required X11 headers to be installed. * Another infinite recursion trap added, now for erroneous vardefs with suffixes (reported by Nicola Vitacolonna). * Fix infinite loop recursion on integer overflow (reported by Nicola Vitacolonna, fix based on a hint from Dan Luecking). * In version 1.202, setting "job_name" from lua code caused a crash. * The "filename" field on the lua figure object in 1.202 was just the extension, instead of the whole file name. ---------------------------------------------------------------------- What is new in MetaPost version 1.202: ---------------------------------------------------------------------- Bug fixes: * Fix greypart (always returned 0). * Make 'withcolor true' explicitly reset the color model to uninitialized. * Report which mem file can't be found, and use 'plain' instead of PLAIN in the mem search warning messages. * Fix a crash on subsetting of some Type1 fonts because of a temporary buffer overrun. * Correct a crash on SVG text output when the 8th bit is set. * Fix the use (reference) of 8-bit glyphs in SVG mode when prologues:=3. * Fix the output of text strings that reference the character at index 0. * Use ".ps" as file extension for negative charcodes (backward compatility). * Metapost sometimes printed "mp_vacuous" instead of "vacuous". * Fix rounding of negative scaled and fraction values. * Restore the error for 'arctime' out-of-bounds. * Moved the "turningnumber algorithms do not agree" message out of reach (now only printed if tracingchoices>2 ) * Fix a problem with dash scaling during picture copying. * TFM header bytes were written out with an offset of one. * Updated the mptrap files. ---------------------------------------------------------------------- What is new in MetaPost version 1.201: ---------------------------------------------------------------------- Bug fixes: * There was a bug where sometimes the outer contour of a glyph that was asked for via 'glyph X of' was missing from te output, depending on the path drawing order inside the Type1 font. * Handling of MPTEXPRE label prefix files was broken. * Font subsetting for 8-bit characters in Type1 fonts was broken. * The use of "%{outputtemplate}" inside "outputtemplate" now generates an error. * The first letter of the input file name was swallowed in the log file. * There is some rudimentary support for infinite recursion trapping now, to help prevent segfaults&crashes due to C call stack exhaustion. * An unlucky change in glibc made compilation fail on new GNU/Linux systems due to multiple incompatible definitions of 'getline()'. * There was a bug in the handling of quoted external commands for MPXCOMMAND | MPXMAINCMD | TEX. * The main input file's opening brace and filename were not shown in the log file output. * Non-colored picture objects (clipping and setbounds paths) are now ignored when the color part is asked from within "within", for backward compatibility reasons. * The trip and trap files are now part of the distribution and the mptrap files have been updated. * The standard web2c argv[0] mem file mimicri was broken: 1.200 was always looking for "mpost.mem" even when called under another name. * The manual pages for "mpost" and "dvitomp" have been updated, and the old "mp" manual page has been removed. * The first letter of any missing input file name was not shown in the terminal error message. * Output files are now once again written in the current directory even if an explicit source directory is given. This includes the creation of mpx files, but some trickery is used so that up-to-date existing mpx files from the source directory take precedence. ---------------------------------------------------------------------- What is new in MetaPost version 1.200: ---------------------------------------------------------------------- New features: * It is now possible to get the actual path drawing routines from a font glyph. The syntax is : q := glyph 113 of "cmr10"; q := glyph "one.oldstyle" of "lmr10"; "glyph" is a primary binary operator (like "subpath") that accepts a string or number and a string, and the result is a picture. The second argument is a tfm name. This will be combined with a fontmap entry to find the font's PostScript source file. If the first argument is a string, then it should be a Charstring name in the postscript font source. If the first argument is an integer, it is an index into the encoding of the font, and the Charstring that is mapped to that index is taken (it follows that numeric values have to be integers between 0 and 255). The returned picture can be empty (if the tfm or the pfb or the encoding or the Charstring was not found), otherwise it consists of a list of 'fill' objects that use the the 'grey' color model. Counterclockwise paths receive the grey value matching 'white', clockwise paths 'black'. * MetaPost now supports string valued internal variables. Three of these are predefined ("jobname", "outputformat", "outputtemplate"), you can add more of them via "newinternal". newinternal string s; s := "hello"; The type of a new internal is either 'string' or 'numeric', and defaults to numeric (this is for backward compatibility with older versions of MetaPost). String internals are initialized to the empty string, numeric internals are initialized to zero. * MetaPost now has a second backend that generates Scalable Vector Graphics output. This new backend was requested by Dave Crossland, who also provided the funding to make it possible. Dave, thank you again! The default value of "outputformat" is "eps"; when you assign "svg" you will get SVG output. If you use text labels with SVG, you will probably also want to set prologues:=3; With this setting, MetaPost will convert the font into curves (of course you also need a correct font map line, just as for PostScript output). With any other value of "prologues" you will simply get the SVG default text font in a system-dependant encoding. This is unlikely to be what you want! A simple example: outputformat := "svg"; outputtemplate := "%j-%c.svg"; beginfig(1); fill fullcircle scaled 100 withcolor .4red; endfig; end. In the lua bindings, there is the new figure method "svg()", that gives back the SVG output string. This is subtly different from the direct file output: the lua method does not prepend an XML declaration (this makes embedded use of the generated XML easier). * The new internal string variable "outputtemplate" replaces "filenametemplate". The big difference is that "outputtemplate" is a true 'internal', so that you need a proper assignment. On the positive side, this means that you can use its current value with e.g. show and message. * "outputtemplate" has a new type of replacement: internal variable names. Instead of the short "%j.%c", you could write: outputtemplate := "%{jobname}.%{charcode}" ; this type of replacement works for all internal variables, including those defined via "newinternal". * There are two new numeric internals: "hour" and "minute". (these are a consequence of the outputtemplate change) * The primitive "jobname" is now a string internal instead of a special case. This implies you can assign to "jobname", but such an assignment will only affect the picture output. The job name for the purposes of log and mem file names is fixed permanently at startup time and cannot be altered. * "mpost" can now pretend to be dvitomp. Either copy the executable to the name "dvitomp", or pass the switch --dvitomp on the command line. * The command line option --halt-on-error has been reinstated. * There is a new -s= command line switch that can be used to setup run time values. Such assignment will be executed after initialization is complete (i.e. after mem file loading) but before any other code is executed. This works for all internal variables, including one defined that may have been defined in the mem file via "newinternal". * "tracingstats:=1;" now prints the highest and total input levels. Bug fixes: * The turningnumber calculation had a rounding error in the internal arithmetic that could cause incorrect numbers to be calculated (typically resulting in a 'turning numbers do not match' error). * The parsing of command line arguments with options was broken. * Reading of files with 8-bit names has been fixed. * A patch by Melissa O'Neill fixes inclusion of some special Type1 formats. * There was a bug where, when "prologues:=3;", the lists of the DocumentResources/DocumentSuppliedResources could appear in the eps output partially uncommented. * Troff labels were completely broken in all MPlib-based versions. Other changes: * Many, many improvements to the manual and the tutorial. Sorry Stephan, I don't know enough to list them all! * The old executable build system has been replaced by the new build system from the TeXLive 2009 repository. * The MetaPost (and mplib) source code is now released under LGPL instead of GPL, and uses a derivative of PyAvl instead of GNU libavl. * The web2c 'mktexfmt' feature is enabled for the program "mpost" once again. ---------------------------------------------------------------------- What is new in MetaPost version 1.102: ---------------------------------------------------------------------- * Printing of 8-bit string characters has been fixed. * In previous versions, TFM files and PFB fonts would not be read properly on big-endian machines (e.g. powerpc) * The MetaPost distribution now contains "A Beginner's Guide to MetaPost for Creating High-Quality Graphics" by Troy Henderson and Stephan Hennig. This tutorial replaces Hobby's mpintro.tex. ---------------------------------------------------------------------- What is new in MetaPost version 1.101: ---------------------------------------------------------------------- This is just a bugfix release. The following bugs / problem areas in MetaPost 1.100 have been fixed / improved: * TFM file generation was completely broken. * The job name discovery on the commandline has been improved. * Under some (rare) conditions MetaPost forgot to create a log file. * Labels containing char0 were exported to PostScript incorrectly. * On Windows, the DVI file that is the result from the internal call to TeX for btex .. etex lables was not deleted automatically. ---------------------------------------------------------------------- What is new in MetaPost version 1.100: ---------------------------------------------------------------------- CHANGES compared to the previous release, 1.005: * This version is based on MPlib, the C conversion of MetaPost. The one user-visible change is that the btex ... etex label conversion is now handled internally instead of via the external "mpware" programs. These programs are therefore no longer distributed. * There is a new manual, mplibapi.pdf, that describes the internal interface to MPlib. * The file 'mpintro' is no longer distributed because it is obsolete (it has been that way for some time). * The distribution now includes Dan Luecking's mpsproof.tex. CHANGES compared to the previous beta, 1.091: * The DVI -> mpx converter was bugged when virtual fonts were used. * MP could crash when a string was added to the string pool that was too large to fit. * The string pool compaction routine was called much too often, thus preventing unnecessary slowdowns. * Various problems with uninitialized option settings and missing mem files or pfb files have been fixed. * There was a line buffer overrun possible in the file reader. * mpost now honours --recorder and --file-line-error. * MP now accepts file names with paths (separator is /) and with embedded spaces (using " for quoting) * There could be empty lines in the PS output. * Full 8-bit fonts (i.e. font using character slot 255) could create an eternal loop. * The handling of equations with addition or substractions between two unknowns in the right hand side was wrong. * The first line of the PS font encoding output could be broken inbetween a glyph name and its preceding slash. * Font inclusion in the PS backend would fail for all fonts that had glyph ids using the 8th bit. ---------------------------------------------------------------------- What is new in MetaPost beta version 1.091: ---------------------------------------------------------------------- * Dash lists were interfaced incorrectly by the lua bindings. * The Type 1 Font inclusion in the previous version produced invalid subsets. * The configure script now also checks for sys/time.h * The error message you get for invalid mem files now mentions the name of the file as well as the nature of the problem. ---------------------------------------------------------------------- What is new in MetaPost beta version 1.090: ---------------------------------------------------------------------- This MetaPost release is based on MPlib. For those of you who are not aware of the MPlib project yet: MPlib is the name of the new, revamped version of the MetaPost interpreter. It is implemented in Cweb, and internally consists of a core library, an mpx generation library, and a frontend driver program (mpost). There are no changes to the MetaPost language, but nevertheless there are some minor differences with the last pascal-web based version of MetaPost (1.005): * The MPlib distribution is released under the GPL version 2 or, at your option, any later version. * The commandline is slightly different, run mpost --help for details. * The mem file format is changed, you have to regenerate any existing ones. * The new mpx generation library includes the label generation functionality that was previously provided by 'makempx', and this internal code will be used instead of an external program. That is, unless the MPXCOMMAND variable is set in the environment or texmf.cnf. The 'mpware' programs became obsolete and are no longer included in the distribution. * Most of the memory configuration variables from texmf.cnf have become obsolete due to dynamic reallocation. The four remaining ones are 'main_memory', 'hash_size', 'max_in_open', 'param_size'. These are only taken into account at mem generation time, the values are stored in and reloaded from the mem file. * The core MPlib library does not interpret an initial '&' as anything special and it does not support re-initialization using a different mem file either. The command line program mpost _does_ interpret '&' as an alias for the -mem switch to preserve (some) compatility. * The MPlib distribution includes lua script language bindings. Following are the NEWS items for the previous beta releases of MPlib. ---------------------------------------------------------------------- What is new in the beta release of MPlib 1.090: ---------------------------------------------------------------------- * The lua bindings to MPlib are added to the distribution, and build.sh can now build an mplib.so loadable module for lua (this needs an installed lua 5.1 distribution) * Some internal macros are renamed so that the exported C structure fields could have better names, and a new document (mplibapi.tex) provides the documentation of the C api and Lua bindings. * The texmf and manual trees are now included again. * (un)dumping mem files is delegated to a separate cweb source file. * All gcc-isms in the build and configure scripts have been removed. * The kpathsea library is updated. ---------------------------------------------------------------------- What is new in the beta release of MPlib 1.085: ---------------------------------------------------------------------- * Determination of the mem name to use in non-ini mode is now much closer to the web2c approach. * There is now a magic word in the beginning of the mem file to make sure it is written by the correct version of MPlib. * Fixed the disappearing comment sign in the to-be-typeset document created by the mpx generation subsystem. * Various identifiers have been renamed to avoid clashes (that prevented the source from building correctly on many platforms) * A great many small changes and fixes have been added after running splint on the generated C source. ---------------------------------------------------------------------- What is new in the beta release of MPlib 1.080: ---------------------------------------------------------------------- * The MPlib distribution is released under the GPL version 2 or, at your option, any later version. The copyright statements in the source files have been updated to reflect this. * The mpost program banner now contains the kpathsea version, and no longer mentions the fact that the source is now cweb at all. * The mpost program once again supports 'E' error responses. * There are some minor internal API changes, but there is still no documentation for the API, so that is not very interesting yet. ---------------------------------------------------------------------- What is new in the beta release of MPlib 1.060: ---------------------------------------------------------------------- * The MPlib distribution is released under the GPL version 2. * This release is the first that replaces the old metapost distribution completely. The executable is now named 'mpost' with engine name 'metapost'. * The release now includes a cweb implementation of the makempx functionality that is linked into the mpost executable. This internal code will be used unless the MPXCOMMAND variable is set. Because of this functionality, the mpware directory is no longer included and the standalone programs 'makempx', 'newer', 'mpto', 'dvitomp' and 'dmp'. are no longer maintained. * This is the first development release of the new cycle, and contains all of the functionality of Metapost 1.005. The mpost version is now 1.060, and the special version number for the cweb version has been removed from the banner. ---------------------------------------------------------------------- What is new in the alpha release of MPlib (0.20.0): ---------------------------------------------------------------------- * Two bugs in MP 1.002 were fixed by Giuseppe Bilotta, both fixes are about polygonals pens and will be included in the upcoming MP 1.003 release also. * It is now possible to ask for the envelope of a path drawn as traced by a (non-elliptical) pen: path p,q; p = fullcircle scaled 30; q = envelope pensquare of p; * There is a lua interface now, and it is already used by luatex. To play with this, currently the best solution is to fetch the 0.25.0 beta of luatex: http://foundry.supelec.fr/projects/luatex This embeds MPlib 0.25.0 as well as its documentation. * Many bugs were fixed. ---------------------------------------------------------------------- What is new in the alpha release of MPlib (0.10.0): ---------------------------------------------------------------------- * The source is converted to cweb, and split into a library part (mpdir/lib/*.w) and a frontend executable (mpdir/mpost.w). * The front end executable is named "newmpost", this takes care of configuring the MPlib library via C code, and uses kpathsea for file searching. There is no change file involved, and the web2c runtime library is not used. * Some of the internal arrays now grow dynamically when needed: * the input buffer * the string pool and number of strings * the font memory and number of fonts * the number of "readfrom" and "write" files * the path segment size * the input nesting stack * the number of new internals * the TFM writing arrays (but these are limited by TFM format) Still not doing that (so these can only be changed in --ini mode): * the main memory * the hash size * the number of simultaneous macro parameters * the level of "input" file nesting * The following command-line options are ignored by the front-end command (for now): -[no-]file-line-error -halt-on-error -output-directory= -[no-]parse-first-line -recorder -translate-file= -8bit -T The other web2c command-line options should work as normal. * the mpware tools are not in this distribution, their functionality will eventually be assimilated into the frontend application. * the build process depends on a local "ctangle" command being in the path, for now. The confiration and building system is not yet complete. * API documentation is still missing, but the MetaPost input language has not changed. ---------------------------------------------------------------------- What is new in version 1.005: ---------------------------------------------------------------------- * In MetaPost 1.004, mpost --version still incorrectly reported 1.003 * C Compilation of MetaPost 1.004 was broken on MacOS X 10.5 * The sources package did not contain mpboxes.pdf * Some last-minute fixes to the manual ---------------------------------------------------------------------- What is new in version 1.004: ---------------------------------------------------------------------- * The picture color component commands misbehaved in 1.003: the current (default) colormodel was not taken into consideration, so all colors had to be explicit for "redpart" etc. to work. (this bug is the one broke the graph.mp package) In 1.004 for "defaulted" colors, the suitable value in the current (default) colormodel is returned without any errors. This change also reverts to silently defaulting a 'black' color when asking for the redpart etc. of an object that cannot be colored at all. * The picture color component commands misbehaved in 1.003 in a different manner also: the defaults for uninitialized CMYK color picture parts were still assuming 'black' was defined as (1,1,1,1) instead of as (0,0,0,1). * The macro Gwithpc_ in the graph.mp package did not work properly with non-rgb colormodel objects. * plain.mp has a new macro, 'colorpart', that returns the color parts of a graphical object within a picture in a form suitable for feeding it back to 'withcolor'. * The latest kpathsea library from TeXLive is included. * There is now a separate manual for the boxes package (mpboxes.pdf). ---------------------------------------------------------------------- What is new in version 1.003: ---------------------------------------------------------------------- * Polygonal pens now work better (bug #3 and #7 at supelec.fr). * When asking for a color part in a picture object, the color models now have to match each other, otherwise an error will be reported and the return value will be set to a 'black' part. * The Makefile fragment (metapost.mk) now defines a separate mpost target for better integration in TeXLive. * There was a bug in the internal handling of withprescript and withpostscript, resulting in incorrect output when paths using such scripts were stored in picture variables. * A newline was missing from the PostScript output when the procset internal variable was set, so the first line of that accidentally became a PostScript comment. * Applicable changes from Knuth's updates for MetaFont 2.718281 are incorporated. * Mpto did not play nice with %& verbatimtex lines, it now automatically tries to detect comment-lines. * Dvitomp 1.003 has higher limits for some internal constants like the number of allowed fonts in DVI files. * The manual is improved. ---------------------------------------------------------------------- What is new in version 1.002: ---------------------------------------------------------------------- * Version 1.001 introduced a memory allocation error in mpto that could result in the program looping endlessly ---------------------------------------------------------------------- What is new in version 1.001: ---------------------------------------------------------------------- * The default cmyk 'black' color now uses only black, not all four ink colors (after a discussion on the mailing list). * Some issues were reported with the new turningnumber algorithm, all known problems are now fixed. * Gábor Braun discovered that mpost did not always download the font encodings into all the created output files. * Akira Kakuto and Hartmut Henkel found some small issues in mpto regarding trailing and leading whitespace. * A fix for the 'Helvetica' entries in trfonts.map was provided by Werner Lemberg, and Michail Vidiassov supplied two extra font entries for troff.map (Symbol and ZapfDingbats). Karl Berry provided the new file troff-updmap.map, to be used by the updmap tool in texlive. * Mpost now supports web2c's --output-directory option. * Any warnings about missing fonts and characters are now always written to the terminal as well as to the log. * Now that makempx is a C program, it needed a different install line in build.sh. Also, Olaf Mersmann contributed a patch to recognize 'gmake' in build.sh * Luigi Scarso found some typing errors in the web source that prevented clean weaving of the source. * Stephan Hennig fixed a number of problems in the manual (mpman.tex) and the introduction paper (mpintro.tex). He also wrote new sections on how to preview metapost graphics and on how to use metapost graphics inside other documents. On top of that, the manual is now hypertext-aware, and fixes for a whole series of small problems have been applied. ---------------------------------------------------------------------- What is new in version 1.000: ---------------------------------------------------------------------- * The use of DSC (document structuring) comments has been been cleaned up, thanks to comments by Michail Vidiassov. * By setting prologues to 2 or 3, you can ask MetaPost to reencode and include the used labels fonts in the output, thus creating proper Encapsulated PostScript files even if labels are present. * Support for greyscale and cmykcolor models is added. * The new drawing options "withprescript" and withpostscript" allow the user to attach PostSCript special text to a specific drawing object. * Setting the new internal "mpprocset" to 1 will make MetaPost create a somewhat extended preamble that defines shortcuts for the postscript commands (e..g "l" instead of "lineto"). For big images, this can help shrink the output a bit. * The pool file is now integrated in the executable, so there is not separate 'mp.pool' anymore, except at build time. * Groff support is redone, and dmp now uses kpathsea searching. Groff related changes are thanks to the efforts of Werner Lemberg and Michail Vidiassov * makempx is now a compiled executable on all systems, thank you Akira Kakuto * The error for 'special's longer then 255 characters is removed, so specials can now be of any length. * There is new turningnumber implementation that attempts to find the mathematically correct "turningnumber" of a path. The formulae are derived from a mailinglist discussion between (especially) Dan Luecking and Giuseppe Bilotta. * The manual is updated and modernized. It is currently maintained by Stephan Hennig and Troy Henderson. ------------------------------------------------------------------ Changes in version 0.920: ---------------------------------------------------------------------- * Fixed a long-standing bug in web2c where changing values of the memory_size setting in web2c could cause crashes and other random problems. The memory array size is now written to the dump file and loading is aborted if the values do not match. * Implement configurable figure output filename templates. * Implement cmyk, greyscale, and marking only color models. * The mpost executable is now version 0.920 ---------------------------------------------------------------------- Changes in version 0.902: ---------------------------------------------------------------------- * Fix a bug in mpto resulting in correctly placed labels (with thanks to Dan Luecking) * Fix a bug blocking compilation of dmp on MacOSX * The mpost,dmp,mpto executables are now version 0.902 ---------------------------------------------------------------------- Changes in version 0.901: ---------------------------------------------------------------------- * A corrected bugfix for bug item 3 from version 0.9 (the old fix made metapost fail the trap test) * Included mpost.mp for mem generation * Updated the trap test output. * The mpost executable is now version 0.901 ---------------------------------------------------------------------- What is new in version 0.9: ---------------------------------------------------------------------- 1. There is a new internal quantity called mpversion that reports the current metapost version, and the version information is also written to the PostScript file. 2. The LaTeX sources of the mpman, mpintro, and mpgraph manuals have become part of the distribution package. 3. TEX.mp now has TeX format support through a pair of macros called TEXPRE() and TEXPOST(). This llows you to process the contents of the TEX() macro with, for example, LaTeX (instead of plain TeX). An example is given in the manual. 4. metapost now writes a %%HiReSBoundingBox comment 5. The EPS output no longer contains actual spaces within PostScript strings as for example output by label("a space"), but their octal escape (\040) instead. 6. The EPS output now also has a %%BeginProlog DSC comment as well as %%EndProlog 7. The comments in the Web source have been changed to point out that on modern machines, acquiring the random seed has actually become a system-dependant operation (a granularity of whole seconds is not small enough on new machines). 8. The 'newer' command now accepts more than 2 arguments, testing each of the files in turn. ---------------------------------------------------------------------- Bugfixes in version 0.9: ---------------------------------------------------------------------- 1. Documentation improvements: all known errata and typos have been removed, better explanations of e.g. dash patterns and dotlabel have been provided, and a number of omissions has been rectified. 2. The BoundingBox was not computed correctly when a filldraw command with a noticeable pen size was used at the edge of the picture. 3. Paths starting with degenerate constructions like (0,0)--(0,0)--(0,0) could overflow memory. 4. The PostScript output could accidentally contain 8-bit characters within PostScript strings in previous versions because a test was shared between terminal printing and PostScript printing. 5. A bug has been found in the assignment of serial numbers to independant variables in metafont 2.71828. This bug affected MP as well, and the same patch has been applied. 6. The turningnumber was sometimes wrong in unexpected ways. The new implementation is still sometimes wrong (when there are strange path segments involved), but in a much more predictable way: the new code always draws straight lines between the actual points, and calculates the turningnumber based on that path instead of the actual path. The effect is that cusps and loops within segments are now completely ignored. A more thorough fix of turningnumber is planned for the next release. 7. There was an 'off by one' error in dvitomp wrt. the interpretation of virtual fonts. 8. mpto uses a new TeX macro for the generation of labels, making it more robust wrt. strange user code within the actual label text. 9. A missing colon in boxes.mp has been added 10. A missing save in mfplain.mp has been added 11. The generisize in boxes.mp has been fixed so that it now accepts [[ as a valid variable name ---------------------------------------------------------------------- Version 0.641: ---------------------------------------------------------------------- The only change was to fix the code for transforming a picture that contains a filldraw. Version 0.64 introduced a bug that caused an inappropriate memory reference in that case. ---------------------------------------------------------------------- What is new in Version 0.64: ---------------------------------------------------------------------- 1. A new primitive command closefrom filename closes a readfrom file so that subsequent calls to readfrom with that file name will go back to the beginning of the file. 2. The ^^ notation for unprintable characters is now used only when printing on the terminal or the log file. Internal computations and the write command are all 8-bit clean. (This is partly due to material in mp.ch that changes the initialization of the xchr array. Without these system-dependent changes, the write command would map all non-ascii characters to spaces.) 3. Arithmetic overflow during a comparison such as 20000>-20000 is now ignored. This avoids extraneous error message when using the graph.mp macro package. 4. Transformations with negative determinants now work properly on pictures drawn with polygonal pens. 5. When the readfrom operator is applied to a file that does not exist, an attempt to close a non-open file could cause problems in some implementations. This has now been fixed. 6. Using draw picture_expression withpen where the picture_expression was a scaled picture containing dashed lines, the dash lengths would change. This bug has been fixed. 7. The dashpart operator could return an invalid picture or a picture that is not properly scaled. This has also been fixed. 8. The |char_base| variable could become negative when using fonts that do not start at character 0. There was also bad Pascal code in function b_open_in. This has all been fixed. 9. Dvitomp has been fixed to avoid a font data structure problem that could cause some characters to come out in the wrong font when you mix virtual and non-virtual fonts. 10. Dvitomp now correctly prints font names when there is a checksum mismatch, and it aborts instead of just printing an error if a tfm or vf file is bad. 11. In plain.mp, the drawdblarrow macro now uses filldraw so that it works better with large pen sizes. ---------------------------------------------------------------------- Version 0.632: ---------------------------------------------------------------------- When prologues is negative, the output files use full precision for coordinates in "%%BoundingBox" comments. In btex..etex blocks, "number too large" and "invalid character" errors are suppressed. The result of btex..etex is now guaranteed to be in a setbounds path so that a for...within iteration will always treat it as a unit. There are also some obscure bug fixes involving string compaction when scanning a file name or when mp is compiled in debug mode. Some possible identifier name conflicts and range check errors have also been fixed. ---------------------------------------------------------------------- Version 0.631: ---------------------------------------------------------------------- This version fixes an obscure bug that could cause certain perfectly valid strings to be printed as "???" or " NONEXISTENT". It also includes a minor fix to the PATHEXPAND code that prevents running out of file descriptors. ---------------------------------------------------------------------- What is new in Version 0.63: ---------------------------------------------------------------------- 1. Backslashes in the PostScript output are rendered correctly. They used to come out as (\) instead of (\\). 2. Recycling an independent variable should no longer cause spurious overflows. (This bug was recently found in mf.web.) 3. Pythagorean addition should now be faster in certain trivial cases. 4. Rotating text by arbitrary angles should no longer cause bad PostScript output. The problem was that arguments to "fshow" could be inaccurate. 5. Obscure bugs inherited from mf.web are now fixed. These involve balancing parentheses showing on the terminal, reporting the correct line number in case of buffer overflow, and removing spurious reference counts that could effect end-of-job statistics. 6. Fonts with ec=255 should no longer cause mp's PostScript output routines to go into a loop. 7. When mp's string mechanism was heavily used, file names could occaisonally be printed on the terminal and log file as "(?)". This has been fixed. 8. Setting PATHEXPAND in site.h causes mp, dvitomp and dmp to understand "//" in path variables as "search multiple levels of subdirectories". This is for compatibility with recent versions of the Web2c TeX distribution. 9. A typo in mpware/makempx and mpware/troffmpx has been fixed. Previous versions of these scripts would not run on some systems. 10. Data files *.d have been added to the doc directory. These are used by doc/mpgraph.mp which generates figures for "Drawing Graphs with MetaPost". 11. Typos in mpintro.tex and mp.web's TeX material have been fixed. 12. Files examples.mp, mpintro.tex and mpintro.bib have moved from mplib to the doc directory. 13. The author's email address now appears in the README file. ---------------------------------------------------------------------- Macros added to the mplib directory between Versions 0.50 and 0.62: ---------------------------------------------------------------------- rboxes.mp is a slightly more general version of boxes.mp TEX.mp provides a way of running tex dynamically instead of as a pre-processor graph.mp, format.mp, and sarith.mp are documented in doc/mpgraph.ps (This is the same as ftp://netlib.att.com/netlib/att/cs/cstr/164.ps.Z) marith.mp, string.mp, texnum.mp, and troffnum.mp are low-level packages used by graph.mp, format.mp, and sarith.mp. ---------------------------------------------------------------------- Other minor bug fixes subsequent to Version 0.60 ---------------------------------------------------------------------- 1. plain.mp has been fixed so that the x**y works properly when x<0 and y is a negative integer. 2. Programs mptotex.c and mptotr.c which extract btex..etex material have been fixed so they work properly with input files that do not end with a newline character. 3. Program dmp.c which handles troff output from btex..etex blocks has been modified to avoid outputting any non-ASCII characters that the C function isprint() accepts. 4. Program dmp.c no longer gets troff graphics specials confused with text. This seldom matters because btex..etex blocks are unlikely to contain troff graphics. 5. Pictures containing clipped subpictures could come out with some colors in the subpicture wrong. 6. Colors in PostSript output were not being restricted to the standard 0..1 range. 7. Transforming a path or a pen should no longer generate extraneous overflow errors in certain unusual situations. 8. Drawing with a degenerate 2-vertex polygonal pen such as penrazor should no longer cause an infinite loop in certain unusual situations. 9. There were some bugs in the mfplain macros. (These macros are designed to similate plain METAFONT.) The drawing and filling macros now apply currenttransform to the path but not the pen rather than vice versa. The predefined modes now set o_correction to 1.0. 10. For security reasons, mp can no longer read or write files whose names begin with '.' ---------------------------------------------------------------------- Changes to the MetaPost language between Version 0.50 and Version 0.60 ---------------------------------------------------------------------- 1. New operator `readfrom ' and new command `write to ' do file I/O. Plain defines a special string EOF that readfrom returns to indicate end-of-file and write..to understands as well. 2. New iteration type `for p within : endfor' iterates through the interior components of the picture. An `interior component' is a single pen stroke, filled outline, or piece of typeset text. A part of the picture enclosed in a clipping or setbounds path also counts as an interior component. If the whole picture is enclosed in such a path, the for..within iteration looks inside. Note that a picture generated by btex..etex is enclosed in a setbounds path. 3. The length operator now applies to pictures. It returns the number of interior components. 4. New boolean operators stroked, filled, textual, clipped, bounded test the first component of a picture. A picture enclosed in a clipping or setbounds path counts as a single component. 5. Part extraction operators now work for pictures. Standard operators redpart, greenpart, bluepart apply to the color of the first component and xpart, ypart, xxpart, xypart, yxpart, yypart extract parts of the tranformation that has been applied to a text component. If `textual p' is false, the transform components are all zero; if `clipped p' or `bounded p' is true, the color parts are all zero. Additional operators fontpart, textpart, pathpart, penpart, dashpart extract other information from the first component of a picture. They all return null values when the first component has the wrong type: fontpart and textpart return null strings; pathpart returns the path (0,0); penpart returns nullpen; and dashpart returns nullpicture. 6. The construction `dashed nullpicture' is now a no-op. It used to be an error. 7. The clip and setbounds statements used to ignore operations on empty pictures. Now they do not. 8. Structuring comments in the PostScript output are now based on EPSF-3.0 as described in the 2nd Edition of the PostScript Reference Manual. When prologues is 0, some structuring comments are included but the output is not flagged a `conforming document'. Previous versions of MetaPost behaved similarly but used slightly different structuring comments. 9. When warningcheck is 0, numeric tokens and results from the hex and oct operators can be as large as 32767.99998. The old limit of about 4096 applies only when warningcheck is positive. 10. Various optimizations should make the output a little more compact. 11. For PostScript engines that obey the scan-conversion rules documented in the 2nd edition PostScript Language Reference Manual, hrules and vrules in btex..etex blocks should now come out to exactly the right number of pixels. The change affects all pen strokes drawn in MetaPost It is implemented via PostScripts dtransform and idtransform operators. 12. A bug involving setbounds and MetaPost's corner operators has been fixed. 13. Degenerate elliptical pens no longer cause PostScript to divide by zero. 14. Fixed a very obscure bug involving readstring and end-of-file. 15. String compaction statistics are now printed correctly when the job terminates with tracingstats positive. ---------------------------------------------------------------------- Changes to the source files between Version 0.50 and Version 0.60 ---------------------------------------------------------------------- CHANGES to ./README.MP The installation instructions should now be clearer. They also explain how to cope with verious versions of WEB2C. CHANGES to ./site.h I removed unused entries and clarified instructions in commentary material. Confusing comments about possibly merging it with the WEB2C version of site.h were removed--I think such merging is a bad idea. CHANGES TO ./Makefile, mp/Makefile, mpware/Makefile: Improved default settings, simplified the `install' recipe, fixed a few missing depencies, portability problems, etc. RENAMED FILES mp/mp.defines, mpware/mpware.defines, mpware/dvitompext.c TO mp/mp.def, mpware/mpware.def, mpware/dvimpext.c (The names also changed in the Makefiles and convert scripts) CHANGES TO mp/mp.web, mp/mp.ch, mp/mp.def, mp/mpext.c: Lots of new features were added as noted above. The only new system- dependencies are for `readfrom' and `write...to'. The change file now increases max_read_files; it doesn't bother with max_write_files, but perhaps it should. There is a new change entitled "Path selector for..readfrom file". From the web2C sources I borrowed a change "`logname' is declared in in some systems". I also added a PASCAL-like eof() routine to mpext, removed a change entitled "avoid using eof() in read_psname_table" and added a new change "[48.1199] `eof'...[in read_mem_file]". Reorganization of math routines in the mp directory: I moved the floating-point math routines from mpext.c to mpath.c. A C-language version of the standard math routines was moved from mpmath.c to a new file pmath.c for use in mathtest only. This required chages to mathtest.c and time.c (also used only for mathtest). The point of all this is that there is now just one copy of the floating-point math routines and it is used for mathtest and (optionally) for mp itself. Routines in doc and mp/trapdir: The output was updated to Version 0.60. Another test file mptrap.mp tests new features. There have also been minor updates to the manual, although the new features for Version 0.60 are not included yet. CHANGES to macros in mplib: A minor change to boxes.mp should make it more robust. Changed default setting of tracinglostchars in mfplain.mp and plain.mp. Added a string constant EOF to plain.mp for use with readfrom and write..to. Changed mproof.tex to make it more portable as suggested by Knuth. CHANGES to mpware/dvitomp.web, mpware/dvitomp.ch: The web file was changed to output rules as horizontal or vertical penstrokes with butt endcaps. This also affected dvitomp.ch. Also in dvitomp.ch, put terminal output on stdout instead of stderr and require the output file to be given on the command line. CHANGES to mpware/makempx, mpware/troffmpx: Added comments explaining what path names need fixing. Portability improvements and dvitomp's output change affect makempx only. CHANGES to mpware/mptotex.c mpware/mptotr.c mpware/testex.err mpware/testex.mp: Ignore an initial newline in the TeX (or troff) material to avoid generating a blank line in the output file. The test file now covers this case. CHANGE to mpware/newer.c Minor changes to make it compile in strict ANSI/POSIX environments.