2 This file is in the public domain.
4 ==============================================================
5 LuaTeX Release 0.90.0 was released 2016032512
6 ==============================================================
8 This is the version that will go on TeX Live 2016
10 - mostly small bug fixes
11 - a few setters/getters added to the pdf namespace (were in the tex one before)
12 - a few patches to the lua interface macros
13 - a bit more control over protrusion edges
14 - no fundamental changes
18 ==============================================================
19 Luatex Release 0.89.4 was released 2016031100
20 ==============================================================
22 Intermediary release. Several bugs fixed.
26 ==============================================================
27 Luatex Release 0.89.2 was released 2016022700
28 ==============================================================
30 Intermediary release. Several bugs fixed.
33 ==============================================================
34 Luatex Release 0.89.0 was released 2016020500
35 ==============================================================
37 No fundamental changes, just some fixes / improvements (and of course new bugglets).
40 \pdfvariable pkfixeddpi = integer % > 0 : use only default dpi (so one can do with one high res instance)
41 \pdfvariable ignoreunknownimages = integer % > 0 : ignore missing and inject something empty (to be used with care)
43 \edef\foo{\pdfvariable foo}
45 \ifx\foo\oof don't fool me\fi
46 (side effect of no longer aborting on missing, so one implement a catch)
51 ==============================================================
52 Luatex Release 0.88.0 was released 2016011500
53 ==============================================================
55 This is a next step upto 0.90 and it has the following changes:
57 - mostly small bug fixes
59 - a few setters/getters added to the pdf namespace (were in the tex one before)
61 - The current libraries under libs are now:
75 ==============================================================
76 Luatex beta-0.87.0 was released 2015121700
77 ==============================================================
81 This is a next step upto 0.90 and it has the following changes:
83 - image data is no longer stored in the format (it was fragile anyway)
85 - pdf backend data generated when in ini mode is no longer stored in the format
87 - (incomplete) \mag support removed from pdf backend (this functionality is
90 - there are a couple of improvements that should make luatex run a little bit faster
91 (but of course that depends on the job at hand)
93 - some further pending issues / cleanup has been done (but this is not reflected in the
96 - there is a new primitive \nospace:
98 \nospace=1 do now not inject glue for spaces (not even zero glue)
99 \nospace=2 inject zero glue for spaces
101 - there are new primitives \hpack, \vpack and \tpack that are like \hbox, \vbox and
102 \vtop but they don't trigger callbacks
104 - we no longer keep track of older math character and delimiter definition states,
105 but this should normally go unnoticed
107 - from now on only ^^XX, ^^C, ^^^^XXXX and ^^^^^^XXXXXX are supported so no funny odd
108 values (three and five)
110 - texio.setescape(0) disables escaping to terminal (a matter of taste)
112 - the (current) lc codes are now saved with the (current) language when patterns are
113 loaded unless one hs used \hjcode instead of \lccode; overloading of \hjcodes is
114 possible (but of course goes ahead of hyphenation which is delayed till parbuilding or
117 - active characters can now be set with: \letcharcode123=\foo (experimental)
119 - there are some experimental new primitives but these will be described when they are
120 stable (currently being tested)
122 - there is more backend error reporting and all error messages adn warnings (the non-tex
123 ones) have been normalized
125 - of course there are the usual small fixes and additional setters and getters in libraries
129 ==============================================================
130 Luatex beta-0.85.0 was released 2015111400 (5550)
131 ==============================================================
134 The 0.85 release is has a lot of changes. It is the prelude to 0.90 which itself is
135 a prelude to the 0.95 that will go on texlive 2016. The 1.00 release will happen
136 around the 2016 context meeting. After that 2.* will become the next experimental
137 branch (leading to 3.*). The most important changes between 0.80 and 0.85 are mentioned
138 below. For more information consult the manual.
140 -- the backend commands
142 There is a better separation between front- and backend code. Some of the generic
143 \pdf* commands have been promoted to core primitives (with different names), some
144 have been removes like ximagecolordepth and ximagebbox have been removed and
145 all that are left have been organized differently. The backend is now more abstract
146 and provides three primitives only
148 \pdfextension <keyword> <optional spec>
149 \pdfvariable <keyword>
150 \pdffeedback <keyword>
152 The first replaces \pdfannot and alike, the second replaces the variables that can
153 be sused to control behaviour, and the third accesses the read only variables. See
154 luatex-pdf.tex in the context distribution for a plain definition file.
156 The big advantage of the separation (basically core (lua)tex + extensions) is that
157 changes in the backend don't have consequences for the frontend and it's easier to
158 locate possible issues in the code. We might split a bit more at the lua end too.
162 The boundary, dir and localpar whatsits are now normal nodes. The xforms and ximage
163 whatsits are now a special kind of rule nodes (subtypes 1 and 2) and known as box-
164 and image resources (see manual). Also, empty rules are now a valid subtype (subtype
165 3) with related commands \nohrule and \novrule.
167 At the lua end one can now access the fields of a spec subnode directly in the parent,
168 which has the benefit of more control and robust assignments (no need to check for
169 writeability) while we keep the concept of shared glue specs (tex internals). By
170 staying close to traditional TeX the Knuthian documentation still applies in most
173 The pdf action nodes are now pdf_action whatsit nodes (so no longer a pseudo core
176 You can get the node subtypes with the node.subtypes function which adds a layer
177 of abstraction (foo.subtype = "string" might be added in the future).
181 The hz optimization already only supported level 2 optimization, but now has a variant
182 3 that does only stretch glyphs and not kerns. Pending is a change where we go back to
183 percentages instead of fractions of em.
187 The old/new codepath has been checked and italic correction which is fundamental
188 different between the engines has been (partially) redone.
190 We now have \mathsurroundskip that replaces mathsurround when it's non zero.
192 The \mathtoptions (old 1) directive can be used for testing. This primitive is mostly for
193 ourselves and used for development.
195 The \Umathcharclass, \Umathcharfam and \Umathcharslot primitives can be used to fetch
196 properties of a math character.
198 The new \Uleft, \Uright and \Umiddle fence operators accept "height <dimen>", "depth
199 <dimen>" and the "noaxis" keyword as well the "exact" keyword for non-fitting ones. There
200 is also \Uvextension. Optionally one can specify a 'class'.
202 The \Udelimiter[under|over] and \U[under|over]delimiter primitives accept a width as well
203 as left, middle and right keywords (for non fitting ones). There is also \Uhextension.
205 The \abovewithdelimiter command accepts 'exact' as keyword (before the dimension) which nils
206 the excessive spacing. The normal vgaps still apply.
208 We have a new fraction primitive \Uskewed with a companion \Uskewedwithdelims. Optional
209 keywords are 'noaxis' and 'exact'.
211 There is a new directive \mathdisplayskipmode (esp for controlling the > 0 below skip check).
213 With \mathscriptsmode you can fix anchoring of scripts (as needed for chemistry).
215 The \Umathaccent commands accept a width and fraction argument.
219 The discretionary command now accept an optional "penalty <number>" specification
220 where the penalty will be stored with the node. Default is hyphenpenalty.
224 texio.write/write_nl now writes to file if the first argument is a (valid) number
225 reference to a file opened at the tex end; you can now open 128 files from the tex end
226 (0..127) and the system command is no longer executed with 18
230 The tex.<internal variable> is hopefully better now. The tex.get* also can handle
231 the built in registers. Especially prevdepth access should work out ok now.
235 As usual there are lots of small fixes, improvements, overhauls, small additions,
236 hopefully all mentioned in the manual.
240 This version is probably not compatible with the macro package that you use as some
241 engine specific initializations need to take place (\pdf commands) and some node types
242 have been changed. We now have separated pdf backend commands and the only left
243 primitive categories are: core, (tex), etex and luatex, so no more pdftex, omega and
244 umath (where the distinction became to fuzzy). Of course you can still prefix.
248 ==============================================================
249 Luatex beta-0.81.0 was released 2015100722 (5350)
250 ==============================================================
254 * A couple of primitives are removed, renamed and/or promoted to core (luatex) primitives.
255 Here's a summary. It might demand some adaption in the way macro packages initialize so we will mention them here explicitly in advance. As shown below, a simple way to get backward compatibility is to \let old ones to new ones. So,
257 Updating to this version also might demand an update in the
258 macro package that you use!
262 % removed, can be done with callbacks if needed, one can define dimen dummies, like
264 \newdimen\pdfeachlineheight
265 \newdimen\pdfeachlinedepth
266 \newdimen\pdflastlinedepth
267 \newdimen\pdffirstlineheight
268 \newdimen\pdfignoreddimen
270 % removed, were already obsolete, one can \let them
272 \let\pdftexversion \luatexversion
273 \let\pdftexrevision\luatexrevision
274 \let\pdftexbanner \luatexbanner
276 % promoted (from pdftex), so pdf prefix gone, one can \let them
278 \let\pdfnormaldeviate \normaldeviate
279 \let\pdfuniformdeviate\uniformdeviate
280 \let\pdfsetrandomseed \setrandomseed
281 \let\pdfrandomseed \randomseed
283 % promoted (from omega), so pdf prefix gone, one can \let them
285 \let\pdfpagewidth \pagewidth
286 \let\pdfpageheight\pageheight
288 % redundant (etex wins over omega), so \font-less ones gone, one can \let them
290 \let\chardp\fontchardp
291 \let\charht\fontcharht
292 \let\charit\fontcharit
293 \let\charwd\fontcharwd
295 % promoted (from aleph)
300 % promoted (from pdftex)
306 % removed (from pdftex), so *pdf* ones gone, one can \let them
308 \let\ifpdfabsnum \ifabsnum
309 \let\ifpdfabsdim \ifabsdim
310 \let\ifpdfprimitive\ifprimitive
311 \let\pdfprimitive \primitive
313 % promoted (from omega)
321 % promoted (from aleph)
325 % promoted (from pdftex)
336 % promoted (from pdftex), so *pdf* ones gone, one can \let them
338 \let\pdfprotrudechars\protrudechars
339 \let\pdfadjustspacing\adjustspacing
341 \let\pdfnoligatures \ignoreligaturesinfont
342 \let\pdffontexpand \expandglyphsinfont
344 % promoted (from pdftex), so *pdf* ones gone, one can \let them
346 \let\pdfsavepos \savepos
347 \let\pdflastxpos\lastxpos
348 \let\pdflastypos\lastypos
350 % on the todo list are:
352 \pdfoutput : \outputmode
353 \pdfmatrix : will get a normal syntax, no weird { } parsing
355 \pdfcolorstackinit : might become obsolete
356 \pdfcolorstack : might become obsolete
358 So, apart from a few, the \pdf* primitives now relate to the backend only.
360 % There is also a new primitive:
364 This one determines the minimum word length (per language).
365 At the same time we moved the (ex)hyphenpenalties
366 in the disc nodes so you can inject discretionaries with specific penalties.
368 There will also be an updated manual.
372 * new epdf.openMemStream(s,l,docid)
373 to create a pdf from a lightuserdata or string.
374 (experimental, do not use in production.)
376 * uniform random generator in mplib is now specific for each numbersystem;
378 * too_precise implemented for binary number system;
383 ==============================================================
384 Luatex beta-0.80.0 was released 20150319 (5195)
385 ==============================================================
387 * New library newtokenlib. It will replace the current token lib.
388 * Fixed a bug on the normal random generator for double/decimal/binary
390 * Several others bugs fixed.
393 ==============================================================
394 Luatex beta-0.79.3.1 was released 20150122 (5140)
395 ==============================================================
397 * Fixed a bug in mp.w with a wrong input that gives a seg. fault.
401 ==============================================================
402 Luatex beta-0.79.3 was released 20150121 (5130)
403 ==============================================================
406 * It's now possible with the MinGW compilers to build luatex and luajittex as DLL
407 for Windows 32bit/64bit. The files are:
408 libkpathsea-6.dll luajittex.exe luatex.exe texlua52.dll texluajit.dll
409 In the next release the build.sh script be updated; for the moment just add
410 "--enable-shared -disable-native-texlive-build " after --disable-all-pkgs
412 Building as DLL was tested only for Windows.
414 * When possibile symbols in the exe are now hidden:
415 this should avoid conflicts with the loading of dynamic shared object.
417 * several bugfixes and improvements. The patches for MetaPost
418 fix seg. faults occourred with wrong inputs.
420 mp_get_numeric_value, mp_get_string_value, mp_get_boolean_value
421 works if the value is a variable (i.e. not an internal variable,
422 a loop variable and a macro argument);
423 only mp_get_numeric_value now has support for loop variable
424 and internal variable (but still not for macro arguments).
427 ==============================================================
428 Luatex beta-0.79.2 was released 20141111 (5082)
429 ==============================================================
432 * WARNING: the structure of the format file is changed.
433 After the Web2C \TeX's magic constant: "W2TX" there is now
434 a FORMAT_ID, a 32bit field that cannot be between 0 and 256 (included)
435 so that there are no conflicts with the preexisting structure
437 The value can be seen with --debug-format and currently is
438 907 (the sum of the values of the bytes of the ASCII string "don knuth").
440 * There is a new set of lua functions for StructElement and Attribute,
441 convenient (even if not indispensable) for tagged pdf.
444 * several bugfixes and improvements.
447 ==============================================================
448 Luatex beta-0.79.0 was released 20140328 (4960)
449 ==============================================================
451 * The luafontloader now returns 'tsidebearing' glyph values
452 for OT/TT fonts, if applicable.
454 * new lua variables: stats.luatex_hashtype, stats.luatex_hashchars,
455 stats.lastluaerrorstring; the luajittex string hash method is now
456 lua 5.1 compliant which gives better results for similar strings
458 * new lua functions: tex.init_rand(), tex.uniform_rand(),
459 tex.normal_rand(), tex.lua_math_randomseed(), tex.lua_math_random(),
460 tex.show_context(); these helpers make luatex and luajittex compatible
462 * In the lua node interface, there were often issues with rubbish
463 in (especially) 'prev' fields because luatex itself never looks
464 at those values. This is now cleaned up to prevent weird stuff
465 happening inside lua node processing code.
467 * pdf.pageattributes, pdf.pagesattributes, pdf.info, pdf.catalog,
468 pdf.names and pdf.trailer now behave consistent and can be used
469 to add these properties at the lua end in addition to their \pdf*
470 counterparts atthe tex end; there are now pdf.get* and pdf.set*
471 commands for them too (in future versions the old ways can become
474 * new accessors pdf.geth, pdfgetv, pdfgetpos, getgetmatrix as well
475 as pdfhasmatrix helpers (in future versions the direct pdf.h and
476 pdf.v accessor can become obsolete)
478 * the pdf.pdf* variables have been removed (they were already
479 obsolete for some years)
481 * a new properties mechanism for associating lua tables with nodes
482 that get cleaned up when nodes a freed (see manual for details)
484 * several improvements to the way temporary (backend) data is stored
485 at the lua end (better protection, more consistent)
487 * a 'l' type for user nodes that holds a lua variable (can be set
490 * if a late lua node is set at the lua end the string value can be
491 a function as well which is then executed during serialization to
494 * Various small speedups
496 * Various smallish fixes to the node direct interface
498 * LPeg is now at version 0.12
500 * Some small fixes to the CFF (font) parsing
502 * Font file inclusion reporting messages on the terminal now
503 comply to the texconfig.trace_file_names setting
505 * Removed some of the additional luafontloader.info() return
506 information that was added in 0.78.2, but could not work
509 * new primitive \luafunction (see manual), with associated
510 lua.get_functions_table() function
512 * lua error message reporting has been altered a bit to make
513 the distinction between \directlua and other lua source code
516 * Additional pdf document data functionality in the 'pdf' table
517 has been cleaned up internally
519 * Additional pdf destination names can now be set via lua.
521 * New callbacks: finish_pdfpage, show_error_message,
522 show_lua_error_hook, start_file, stop_file
524 * Handling of \tracinglostchars is fixed
526 * Embedded metapost library version is now 1.900
528 * luajittex is now included in the distribution. One can use
529 buildjit.sh to build both luatex and luajittex, where
530 supported by the platform
532 * Synchronization with the TeXLive sources updated the following
534 * libpng is now 1.6.10
535 * poppler is now 0.25.2
537 ==============================================================
538 Luatex beta-0.78.2 was released 20140113 (4748)
539 ==============================================================
541 * Extended luafontloader's info() function to include data
542 from the 'pfminfo' and 'names' structure.
544 * Fixed a bug in the luafontloader library that made loading
545 some fonts extremely slow (LastResort.ttf)
547 * Removed a recent extension in the luafontloader library that
548 made loading fonts with lots of glyphs slow (ArialUnicoce.ttf).
549 Note: the extension made sure that there were no duplicate
550 glyph names in the font after loading.
552 * Restored --recorder output for lua files (dofile/loadfile/io.open)
554 * One-at-a-time pattern adding from lua used to require enormous
557 * luatex's fontloader.to_table() no longer reports 'altuni' table
558 information for alternates that are solely driven by the font
559 encoding. This fixes loading time issues for fonts that fill
560 encodings by copying a single glyph many times, like e.g.
561 LastResort.ttf from Apple.
563 * The datestamp no longer appears in any banners. The associated
564 \luatexdatestamp primitive is deprecated and will be removed
567 * Synchronization with the TeXLive sources updated the following
569 * cairo is now 1.12.16
570 * pixman is now 0.32.4
573 * poppler is now 0.25.0
575 * That same TL synchronization also fixes these issues:
576 * Always write "\nendstream" to the PDF for PDF/A-1b compliance.
577 * Large file support (>4GB) in Lua
578 * Big images could overflow on systems where sizeof(long)=4.
579 * In writing CID CFF fonts to the PDF, and end_dict() was missing.
580 * Unknown 'post' table versions (found in some broken ttf/otf
581 fonts) are now treated as-if they specified version 3.0.
582 * Fix crashes on 32-bit systems caused by bad C header inclusion
584 * Handle '--luac' and '--luaconly' properly
585 * luatex is now released under GPLv2+, not just GPLv2.
586 * luatex can now find .ofm metric files even if the extension
587 is not given explicitly.
589 * node.unset_attribute() was broken in 0.78.0
591 * The UTF-8 commandline patch from 0.78.0 for Win32 was removed
592 again (did not work properly)
594 ==============================================================
595 Luatex beta-0.78.0 was released 20131231
596 ==============================================================
598 * Instead of using expanded fonts, just calculate the expanded
599 width of glyphs where needed, and carry expand info in the
600 glyph nodes (all based on Hans' suggestions). All font expansion
601 functions are disabled and most are removed.
603 * New, faster (but limited) direct node access from lua, see
604 the manual for details
606 * Support for Apple Advanced Typography (AAT) information in
609 * Extended build script for mingw/msys (includes 64-bit support)
611 * Various patches from/via Akira Kakuta for better Win32
614 * Fixes for some bugs in de pdfscanner library (mostly related
617 * Maximum hyphenated word length is now 64Kb characters.
619 * Various patches from Khaled Hosny and Luigi Scarso for the
620 luafontloader subsystem
622 * Fix for a crash when re-dumping formats
624 * Fix for a Selene unicode library bug where some characters in
625 UTF-8 were incorrectly flagged as having the 'Space' property
629 ==============================================================
630 Luatex beta-0.76.0 was released 20130405
631 ==============================================================
635 * Small patches from TeXLive 2013, as well as an update to the
636 latest libraries (libpng, poppler, etc.)
638 * Speed up printing (of TeX strings) to the terminal and log.
640 * New lua function node.end_of_math().
642 * Fixed a memory leak in the lua function pdfscanner.scan().
644 ==============================================================
645 Luatex beta-0.75.0 was released 20130301
646 ==============================================================
650 * New expandable primitive \Uchar.
654 * New version of lnodelib.c with speedups by Hans and Luigi.
655 Also added some extra sanity checks to the Lua node field
658 * Support 'umath' in tex.extraprimitives(), so that formats can
659 make the \Umath* primitives unprefixed, now that they will be
660 provided by XeTeX as well.
662 * Removed a bunch of deprecated primitives
663 * \AlephVersion, \Alephrevision, \Alephversion, \Alephminorversion
664 * \OmegaVersion, \Omegarevision, \Omegaversion, \Omegaminorversion
665 * \omathcode, \odelcode, \omathchardef, \omathchar, \omathaccent,
666 \odelimiter, \oradical
667 * \Umathbotaccent, \Umathaccents
669 * Fix large file support.
671 * Fix Lua's loadfile().
673 * Removed the cidmap callbacks again (let that be done by user lua
674 code after the fact).
676 * Removed the fatal error on fonts where num_glyphs is too high,
677 as that problem is actually harmless.
679 * Some compilation issues under Win32 and Solaris resolved.
681 * Allow math extender objects to be zero width.
683 * The 'epdf' library has been extended to deal with finding and
684 saving embedded files (catalog:numEmbeddedFiles() and catalog:
685 embeddedFile, new EmbFile object).
687 ==============================================================
688 Luatex beta-0.74.0 was released 20121224
689 ==============================================================
694 There are no patches to the core Lua files; a future version
695 of luatex will switch to loading the regular lua 5.2 dynamic
696 library instead of depending on a statically compiled
699 * A bleeding-edge version of luasocket is included, as there
700 is no 5.2-compatible official release yet.
702 * A new lua extension is the two-argument version of
703 string.dump from Luajit:
705 string.dump(function f, [boolean strip])
709 * The implied existence of the following lua libraries is now
712 debug, unicode.*, luazip, lfs, lpeg, zlib, gzip, md5,
713 socket.*, profiler, epdf, fontloader, mplib, and
716 Future versions of luatex will load these modules on demand
717 from dynamic libraries.
719 Please update your sources to include a 'require' line for
720 each of the library modules mentioned.
722 * Two new callbacks: find_cidmap_file and load_cidmap_file
723 (used by the fontloader to discover .cidmaps)
725 ==============================================================
726 Luatex beta-0.72.0 was released 20121210
727 ==============================================================
731 * update various used libraries, including mplib 1.770,
732 poppler 0.21, libpng 1.5, and lpeg 0.10.2.
734 * new 'pdfscanner' lua library.
736 * various OpenType math fixes, including \Umathcharnumdef.
738 * improved placement of bottom accents.
740 * various other small fixes that have accumulated over the past
743 ==============================================================
744 Luatex beta-0.70.1 was released 20110519
745 ==============================================================
749 * fixed: recorder file location from TL (Akira).
751 * fixed: missing newline on 'No output' line.
753 * fixed: relative names in synctex file.
755 * fixed: 16bit png images in generated %!PDF-1.4.
757 * fixed: building with (installed) libpng < 1.5.0
759 * fixed: year in --version output.
761 * fixed: box output to synctex.
763 * fixed: FontDescriptor for non-embedded OpenType fonts has an
764 invalid FontFile3 entry (#654)
766 * fixed: crash on non-existent images.
768 * fixed: small memory leak in the ipc code.
770 * fixed: tex.print() and tex.sprint() don't recognize -2 as the
771 first argument (#659)
773 ==============================================================
774 Luatex beta-0.70.0 was released 20110506
775 ==============================================================
779 * fixed: various changes needed for libpng 1.5.2.
781 * fixed: node.fields() for nodes without subtype.
783 * fixed: non-argument use of os.execute().
785 * fixed: tex.[s|t|]print() with invalid catcode table arguments.
787 * fixed: recorder filename location with --output-directory.
789 * fixed: display alignment in TRT mode.
791 * luatex now uses the standard synctex files from Jérome Laurens.
794 ==============================================================
795 Luatex beta-0.66.0 was released 20110412
796 ==============================================================
800 * fixed: linebreak_filter doesn't do its default job when
801 tex.linebreak is used
803 * fixed: \escapechar ignored by \meaning
805 * fixed: wrong px default
807 * fixed: font kern attribute inheritance
809 * fixed: "nop" unrecognized in virtual fonts
811 * fixed: assertion failure in dviluatex when font ptmr8t used
813 * fixed: tex.settoks for with strings with embedded zeroes
815 * fixed: an indexing problem with nonexistent font glyphs
817 * fixed: some crashes and other bugs on the 'subtype' and 'prev'
818 fields (not all node types have those fields)
820 * fixed: crash on token.csname_id ("")
822 * fixed: initialize the statically allocated node's type ids
824 * fixed: fencepost error in math parameter counting
826 * fixed: math family numbers > 255 are allowed
828 * fixed: compilation failure on Hurd
830 * fixed: a small bug leading to displacements when reading
833 * fixed: \directlua followed by \pdfximage generates error if
836 * fixed: a problem with \vadjust pre in alignments
838 * fixed: a lua stack growing problem in the backend in 0.65.0,
839 resulting in an inability to create more than a few thousand
842 * fixed: inclusion of Scribus-generated pdfs
844 * adapt: the default form margin is now zero (was 1bp before)
846 * adapt: libpng 1.4.4, zzuplib 0.13.60, mplib 1.504
848 * adapt: small changes to the build system and new imports from
849 the texlive repository
851 * feature: new function node.currentattr() queries the current
852 active attribute list
854 * feature: Lua font loading; ignore unknown enumeration keys in
857 * feature: JPEG 2000 image support
859 * feature: continuing work on the 'epdf' library
861 * doc: the 'epdf' lua library is now documented
863 * doc: various other manual corrections
866 ==============================================================
867 Luatex beta-0.65.0 was released 20101213
868 ==============================================================
872 * The Aleph and Omega version primitives are deprecated.
874 * The Apple Snow Leopard Truetype font collections now work
877 * Libpng has been updated to 1.4.4, and zlib to 1.2.5.
879 * New lua functions node.next() and node.prev().
881 * The already deprecated for some time node.protrusion_skipable()
882 function has been removed.
884 * fontloader.apply_featurefile() and fontloader.apply_afmfile()
885 now return nil,<errortable> on failure.
887 * The various node list fields in the lua node interface have
888 been renamed from 'list' to 'head', e.g. tex.box[0].head,
889 and the 'list' name is deprecated. For now, the deprecation
890 is silent, as 'list' will stay for quite some time. Please
891 update your lua source as soon as possible, though.
893 * The call node.type(<node>) now returns "node". The existing
894 functionality is otherwise unchanged.
896 * Luafilesystem has been updated to 1.5.0. NOTE: there is an
897 incompatible change in the directory iterator method.
899 * The restriction on linebreak_filter has been eased: at least one
900 horizontal box should be returned, but that is not necessarily
901 the last node any more.
903 * Backward compatibility has been restored for \meaning\mathchar
905 * node.first_character() has been renamed to node.first_glyph()
906 to better match its actual functionality.
908 * The \Umathaccent primitive now supports both/bottom keywords,
909 and \Umathbotaccent / \Umathaccents are now deprecated.
911 * The \Umathaccent primitive now also supports the fixed keyword,
912 which supports non-growing math accents even if the font says
913 there are extensible variants.
915 * Ongoing work on the epdf library.
919 * Assignment to \dimen65535 was broken earlier.
921 * <box>.head.prev is now always initialized to null (0).
923 * luatex -lua=<script> '\relax' no longer exits immediately,
924 instead going into interactive mode as it should.
926 * The \jobname was initialized wrongly for input file names
927 with multiple dots in them.
929 * The synctex file is now written in the right place when
930 --output-directory is given.
932 * \letterspacefont could cause crashes, especially when combined
935 * Luatex would crash on linux32 systems if it was build in an
936 environment where LFS (>2GB files) was enabled by default.
938 * Node lists created by node.copy_list() could not be hyphenated
939 due to an assertion error.
941 * Synctex support was partially broken since 0.60.0.
943 * With OpenType math fonts, accents with multiple parts
944 (like the \vec arrow) forgot to include all parts if the
945 accentee was too narrow.
947 * With OpenType math fonts, accents over any class except 0 and 7
950 * kpse.lookup("plain", {all = true}) was broken in kpathsea
951 itself (no extension given as well as --all specified).
953 * A FontForge bug made Cambria Math accents look bad, and the
954 placement of math top accents did not allow a marker at the
955 origin (patches by Stefan Philipp)
957 * Cut&Paste from PDF was sometimes broken due to bad ToUnicode map.
959 * Many small manual improvements (thanks to Paul Isambert)
961 * An other bugfix to lpeg 0.9 (from Roberto Ierusalimsky)
963 * Some small fixes to writet1.w (from Han The Thanh)
965 * A build failure because of bad libz configuration on Win32
967 ==============================================================
968 Luatex beta-0.64.0 was released 20101112
969 ==============================================================
973 * New lua functions pdf.refobj(), pdf.maxobjnum() and pdf.objtype()
975 * New lua function node.is_node()
977 * The max_strings configuration variable's maximum value is
978 raised to be identical to texlive's maximum (2097151), and
979 same for param_size (32767).
981 * The embedded mplib is now 1.503.
983 * Minor cleanups in the output of fontloader.to_table():
985 - removed out-of-range altuni's from the output
986 - don't dump the extra encodings, just the actual font encoding
987 - export the encoding's name also as 'enc_name' at one level up
988 - no longer exporting unset macstyles, nor zero uniqueids
989 - fix creationtime and modification time
991 * Ongoing work on the epdf library
995 * Fix a bug where an explicit hyphen prevented hyphenation for the
996 whole rest of the paragraph
998 * Internal font copying forgot to copy the last font dimen
1000 * os.selfdir() is now documented
1002 * patch quad (\fontdimen6) in \letterspacefont to be compatible
1005 * Multi-page pdf inclusion was very slow in 0.63.0
1007 * Some extra checks added to the handling of glue_spec node
1008 objects in lua code.
1010 * Some node.prev pointers have been corrected (but this is not
1013 * A small fix to lpeg 0.9.
1016 ==============================================================
1017 Luatex beta-0.63.0 was released 20100909
1018 ==============================================================
1022 * Drop tex.ht[], tex.wd[], tex.dp[].
1024 * Drop OCP support (and associated primitives).
1026 * Add tex.catcode[], tex.lccode[], tex.sfcode[], tex.uccode[],
1027 tex.mathcode[] and tex.delcode[] and associated functions.
1029 * Add CIDset tables to the output pdf where appropriate.
1031 * Added a 'string' field to late_lua nodes on the lua side. This
1032 field does not convert the assigned string to a tokenlist.
1034 * The result of fontloader.open() now has some virtual accessors
1035 (as well as fontloader.to_table).
1037 * There is now a `short reference' in the manual folder
1042 * Fix a crash on an empty font (bugreport #468).
1044 * Fix a crash for extremely long pattern arguments.
1046 * Fix a crash on bad virtual character arguments in lua.
1048 * Fix hyphenation exceptions.
1050 * Prevent linebreak between initial local_par paragraph whatsit
1051 and a following skip (bugreport #437).
1053 * Fix placement of scripts on textstyle big operators in MATH
1054 fonts (bugreport #466).
1056 * Fix a crash on the return value of MPlib's 'postscript'
1057 operation on images.
1059 * Fix a crash on \leftghost & \rightghost in math mode.
1061 ==============================================================
1062 Luatex beta-0.62.0 was released 20100823
1063 ==============================================================
1067 * LuaTeX now uses libpoppler (0.12.4) instead of xpdf.
1069 * All backend functions now report what file they were searching
1070 for whenever a file cannot be found.
1072 * Input-ed lua files are now mentioned in the fls file if
1073 the --recorder switch is specified on the command line.
1075 * Paragraph indentation hlist nodes and hlist and vlist nodes
1076 generated by alignment rows and cells now have a subtype
1077 (3 for indent box, 4 for rows/columns, 5 for cells).
1079 * The 'epdf' lib is in active development and still growing.
1081 * The 'fontforge' table is finally removed (was deprecated
1086 * A new mplib import fixes two bad bugs in mplib:
1087 - string equality test was wrong
1088 - type declarations could delete pre-existing variables
1090 * PNG images with transparency could create random size
1091 differences in the generated PDF.
1093 * In some special cases, font expansion could cause wrong
1094 spacing in the generated PDF.
1096 * \letterspacefont was broken since a very long time.
1098 * The node subtype of the \leftskip and \rightskip glues was
1101 * Some memory leaks have been removed.
1103 * Various manual fixes.
1105 ==============================================================
1106 Luatex beta-0.61.0 was released 20100728
1107 ==============================================================
1111 * New lua library 'epdf' for introspection of PDF inclusions,
1112 see the manual for details.
1114 * Mplib version 1.502 is now included (which is still beta,
1117 * new "finish_pdffile" and "pre_dump" callbacks.
1119 * new function pdf.pageref()
1121 * In the lua 'tex' library: assignment to internal glue
1122 parameters is now allowed.
1124 * New lua function tex.error().
1128 * Fix for crashes on fonts with bad Panose values.
1130 * Fix for a box placement bug that could sometimes cause text
1133 * Fix for a few small PDF/A1-a compatibility bugs.
1135 * Fix \letterspacefont.
1137 * Fix \Ustopdisplaymath in combination with aligned displays.
1139 * In math delimiters, the last of a chain of predefined sizes
1140 was always ignored if there were also extensible parts.
1142 ==============================================================
1143 Luatex beta-0.60.2 was released 20100701
1144 ==============================================================
1148 * Various small portability fixes, especially for non-gcc
1151 * Updated synctex from Jerome Laurens.
1153 * fix bug #406: \pdfliteral hinders hyphenation.
1155 * fix pdf overprinting bug (related to \pdfliteral).
1157 * patch from Akira Kakuto that ensures that only absolute commands
1158 that are inside the %PATH% will be executed in win32's restricted
1161 * fix a buffer overflow in luafontloader.
1163 * fix cross-platform share-ability of generated formats.
1165 * fix a few typos in the manual.
1167 * fix trashing of the null glue spec by attribute reference code.
1169 * documented the deprecated state and brokenness of otp processing.
1172 ==============================================================
1173 Luatex beta-0.60.1 was released 20100428
1174 ==============================================================
1178 * renamed node.skipable() to node.skippable().
1180 * More git discovery patches in getluatexsvnversion.sh.
1182 * Added --warnings=[no|min|yes|max|all] option to build.sh.
1184 * While cross-compiling, build.sh now adds an extra linker switch
1185 to allow win32 exes to use 3G instead of 2G of virtual memory.
1189 * os.exec() & os.spawn() handled the environment differently from
1190 os.execute() on Win32 (patch from Tomek)
1192 * Builds with --enable-ipc were broken.
1194 * Assigning and acquiring \fontdimen s from TeX code was broken.
1196 * An initial attempt at fixing bug #372 (\predisplaydirection).
1198 * An attempt to fix \eqno/\leqno placements in mixed direction
1201 * Our local xpdf patch is reverted, it is not needed any more.
1203 * The os.selfdir variable was not documented, as well as broken
1206 * Fix "\input tikz hello \bye" bug, plus fix one sign error.
1208 * Fix handling of lua script files with UNC names.
1210 ==============================================================
1211 Luatex beta-0.60.0 was released 20100404
1212 ==============================================================
1216 * os.name now knows about CYGWIN (from Elie Roux)
1218 * Internal handling of direction specifiers is faster now.
1220 * Each glyph node now has three new virtual read-only fields:
1221 width, height, and depth (values in scaled points, of course)
1223 * There are new functions node.protrusion_skipable() and
1224 tex.badness() (useful for paragraph breaking in lua)
1226 * Also new: tex.linebreak(). See the manual for details.
1228 * All lua errors now report file and line numbers to aid in
1231 * Import of metapost 1.211.
1233 * pdf.pdfcatalog will be replaced soon by the new pdf.catalog
1234 pdf.pdfinfo will be replaced soon by the new pdf.info
1235 pdf.pdfnames will be replaced soon by the new pdf.names
1236 pdf.pdftrailer will be replaced soon by the new pdf.trailer
1238 * pdf.pdfmapfile and pdf.pdfmapline are replaced by the new
1239 pdf.mapfile() and pdf.mapline() functions. (a function interface
1240 fits these parameters better because they never return anything).
1242 * New read-write lua variables: pdf.pageattributes, pdf.pageresources,
1245 * getluatexsvnversion.sh now correctly detects git-svn and still
1246 manages to find a valid SVN revision number (from Patrick Gundlach)
1248 * Many of the source files have been converted to CWEB.
1252 * GNU libtool is now used to solve the various technical issues with
1253 dynamic loading of lua modules.
1255 * Error detection in scan_integer_part was wrong due to missing
1256 initialization of OK_so_far (spotted by Javier Mugica)
1258 * Synctex was broken in 0.51-0.52.
1260 * \lastlinefit was broken since ... well, nearly forever.
1262 * Reading of binary files with length zero was broken.
1264 * Trapping of unitialized rules (this was for sloppily created
1265 rule nodes from lua)
1267 * pdf.immediateobj('streamfile') was broken on 64-bit platforms.
1269 * tex.linebreak did not take the given left and right skip, but
1270 instead used the current TeX-side values (bug #356).
1272 * the found 'MAKE' command in build.sh is now fed into configure to fix
1273 problems with that not finding GNU make even when it is actually
1276 * dofile(<nil>) and loadfile(<nil>) in batch mode now give an
1277 error and continue instead of pointlessly waiting for user input.
1279 * Reverted commit #3417 (the buildpage experiment) as it causes bad
1280 things to happen when items are waiting during page breaks.
1282 * Overrule loaders[4] in --safer mode, make require() behave
1283 closer to normal lua 5.1, and add some nicer error messages
1284 (based on an email and patches from Manuel Pegourie-Gonnard)
1286 * Added an extra sanity check for GDEF loading in luafontloader,
1287 based on a crash caused by Linux' AkaashNormal.ttf.
1290 ==============================================================
1291 Luatex beta-0.52.0 was released 20100316
1292 ==============================================================
1296 * Various small manual improvements.
1298 * A better version of getluatexsvnversion.sh, from Tomek.
1300 * node.copy_list() now allows the second (optional) argument to
1303 * An import of the current state of the texlive repository
1304 (kpathsea and build system).
1308 * An attempt fix for bug #345 (math kerning is not perfect): when the
1309 current math font is a new math font, check against \catcode <cur_c>
1310 == 11 to suppress the italic correction, instead of looking at
1311 the value of space(<cur_f>).
1313 * There is a new <tfmtable> key: 'units_per_em' (defaults to 0).
1314 This is part of a fix for bug #200 (Problem with CFF fonts having
1315 em-size other than 1000): there is a special correction to the
1316 embedded cff font itself and the font scale if the font to be output
1317 is opentype or type1 in unicode encoding and the 'units_per_em
1319 <tfmtable>.units_per_em has to be passed back to luatex from
1320 the lua font loading code for this to work.
1322 * A fix for bug #314 (problem with pk file).
1324 * lua code can no longer change the internal preallocated glue_spec
1325 nodes (as that resulted in weird spacing bugs). For this, glue_specs
1326 now have a new field: 'writable'. If that field is false, a copy
1327 has to be made of the glue_spec instead of doing an assignment
1330 * Setting of \textdir inside the output routine could trash output
1331 on following pages due to a lingering internal variable.
1333 * \pdfthread crashed because the arguments were handled in reverse
1336 ==============================================================
1337 Luatex beta-0.51.0 was released 20100312
1338 ==============================================================
1342 * Various small manual improvements.
1343 * The backend message "cannot open Type 1 font file for reading"
1344 now reports which Type1 font it was looking for.
1345 * Fontforge clears some font names at loading time that will be
1346 refilled in at font generation time, but the fontloader should not
1347 do that. Patch from Khaled Hosny.
1348 * New synctex code imported from TeXLive.
1349 * luamd5/md5.h is renamed to luamd5/luamd5.h to avoid confusion.
1350 * Embedded mplib is now 1.209.
1351 * Some experimental tweaking of buildpage_filter, see the manual
1353 * Luatex now detects kfreebsd (from Alan Braslau)
1354 * The new lua function tex.sp() converts a string to a number
1355 representing scaled points.
1356 * There is now support for revision numbers in the banner and stats
1358 * The command line help and manual documentation page is extended.
1359 * node.hpack() now also accepts "cal_expand_ratio" and "subst_ex_font"
1361 * node.hpack() and node.vpack() now give back the badness of the box
1362 as second return value.
1363 * node.copy_list() now allows a second (stop) argument, this stopper
1365 * new lua functions in lfs: lfs.readlink() and lfs.shortname().
1366 * new lua function tex.tprint() that can combine multiple catcode
1367 regime prints in one function call.
1368 * new lua sub-table: tex.nest[] (read/write access to the semantic
1370 * New lua functions in kpse: kpse.lookup() and kpse.version(). See
1371 the manual for more details.
1372 * New lua function tex.shipout().
1376 * There problems in the pdf output for Type3 (pk) fonts.
1377 * Fix a bug that allowed bad commandline quoting.
1378 * Fix a bug that sometimes caused crashes when \pdfprotrudechars.
1379 * The build script now exports CONFIG_SHELL to avoid problems with
1381 * The was a bug in the generated /Image /ProcSet.
1382 * status.font_bytes reported the wrong value.
1383 * Lots of compiler warnings are removed (thanks Javier Mugica).
1384 * Patch to fontloader.info() to accept filenames with embedded
1386 * Fix a \write error with docstrip package.
1387 * Fixed a crash on AdobeMyungjoStd-Medium.otf.
1388 * Fix coco stack overflows, needed for lpeg.
1389 * \pdfcompresslevel wasn't initialized for early immediate objects.
1390 * Fix for slanted fonts when HZ was on (slant angle was multiplied).
1391 * When concatenating content streams, put a space between them.
1392 * Allow pfb lines to end with \r as well as \n (for msam10.pfb).
1393 * Fix the internal string->scaled point conversion in the lua
1395 * Memory leaks in the fontloader removed, thanks to patches from
1397 * Fix a crash caused by the combination of coroutines and font.each().
1401 * Support for Type3 .pgc files (nobody used them).
1403 ==============================================================
1404 Luatex beta-0.50.0 was released 20091224
1405 ==============================================================
1409 * Fonts now listen also to the 'extend' key in the lua font
1410 metrics table, and the processing for this is done via de
1411 pdf text matrix instead of via the font matrix, which means
1412 it now works for all font types.
1414 * The embedded Metapost library is now at version 1.209.
1418 * It is no longer possible for fonts from embedded pdf files
1419 to be replaced by / merged with the document fonts of the
1420 enveloping pdf. This regression may be temporary, depending
1421 on how the rewritten font backend will look after beta 0.60.
1425 * Use of \middle confused the \mathstyle operation.
1427 * \pdfcolorstack handling was broken.
1429 * node.unset_attribute() had a bug whereby it inverted the
1430 requested result in some cases (the node on which the unset
1431 was called was sometimes the only node at the current level
1432 that *kept* the attribute).
1434 * During font expansion, the internal font copy had one character
1435 information object less than the original, resulting in the
1436 disappearance of a glyph in some fonts when font expansion
1439 * Placement of operator scripts of OT MATH fonts is adjusted
1440 to be conformant with Word's logic where the italic correction
1441 is only used to tuck in the subscript and for nothing else.
1443 * luafontloader.open() no longer writes directly to stderr in
1444 case of internal font errors.
1446 * Any <pdf_refobj_node>.objnum could not be assigned to.
1448 * The lua 'pdf' table could not be assigned to.
1450 * The lua 'md5' library was returning incorrect results on
1451 64-bit architectures.
1453 * Luatex now compiles on GNU Hurd systems.
1455 * Fix segfault when embedding stream file object (these
1456 backend segfaults were a side-effect of the string pool
1459 ==============================================================
1460 Luatex beta-0.47.0 was released 20091218
1461 ==============================================================
1465 * New read-write lua variables pdf.pdfcatalog, pdf.pdfnames,
1466 pdf.pdfinfo, pdf.pdftrailer
1468 * The horizontal mode nodes that are added to lines during line
1469 breaking now inherit the attributes from the first and last node
1470 inside the created line.
1472 * The new function pdf.registerannot(<number>) registers an
1473 annotation object number to be included in the current
1474 page's /Annots list.
1476 * The variables <metrics>.Mathconstants.FractionDelimiterSize
1477 and <metrics>.Mathconstants.FractionDelimiterDisplayStyleSize
1478 are added to the font table. This allows proper setting of the
1479 size parameters for TeX's ...withdelims math primitives.
1481 * The internal representation of the string pool is reorganized
1482 (the pool of string characters is now allocated dynamically),
1483 and as a side-effect the lua variable status.init_pool_ptr
1484 is deprecated and will be removed in a later version. Also,
1485 status.pool_ptr now simply returns the current number of bytes
1486 in use for string characters.
1488 * There are new lua variables pdf.pdfmapline and pdf.pdfmapfile
1489 (write-only strings that mimic \pdfmapline and \pdfmapfile).
1491 * \pdfobj data and attribute are now stored as C strings instead
1492 of as token lists (this should speed up cases with a lot of data).
1494 * Artificially slanted fonts now work via the pdf text matrix
1495 (instead of adjusting the actual font) so that it now also
1496 works for non-Type1 fonts. The lua <metrics>.slant font key is
1497 now obeyed in all cases.
1499 * The lua function font.id(<string>) returns the internal font id
1500 number belonging to a control sequence name.
1502 * Pdf image inclusion is optimized such that objects from an
1503 external pdf will now be included only once even if they are
1504 referenced from multiple inclusions.
1508 * Protrusion for non-TLT documents did not work properly for
1509 the hyphenation character.
1511 * \lastbox could not remove the paragraph indent box for non-TLT
1514 * Pdf images (\pdfximage) are no longer kept open during the
1515 whole run, but closed and reopened. An error is raised if
1516 the file has changed between \pdfximage and \pdfrefximage.
1517 This prevents the 'too many open files' error when lots of
1518 images are included.
1520 * On Win32 Pdf image files are locked during the time that it is
1521 open, to prevent unnoticed file changes by external sources.
1523 * Compilation now again works on FreeBSD.
1525 * Format sharing between 32-bit and 64-bit architectures was
1528 * Unsetting attributes from lua could sometimes result in
1529 the unset state persisting beyond the current group level.
1531 * If something went wrong in the scanning of pdf action items,
1532 the error message reported the current primitive name
1535 * Luatex would crash on non-existant pdfs that were referenced
1536 from map file entries.
1538 ==============================================================
1539 Luatex beta-0.46.0 was released 20091126
1540 ==============================================================
1544 * The build.sh script now has better support for new MacOSX-es
1547 * Luatex now has experimental support for dynamic loading of
1548 external compiled lua libraries. Building luatex and loading
1549 external .so/.dll files is reported to work on Windows,
1550 linux and osx, other platforms are still unknown.
1552 * pdf.obj{type="stream"} no longer converts its argument to and
1553 from a tokenlist. This allows the use of binary data in the
1554 "string" argument. Such data does still have to hidden from
1555 the normal file parser by putting the code in a dofile()
1556 or by using string.char(), though.
1560 * Luatex 0.45.0 was not able to find truetype nor opentype fonts
1561 if there were no callbacks defined (patch from Pawel).
1563 * 0.45.0 printed the user input instead of the full pathname
1564 for \input-ed tex files.
1566 * The TFM reader now rejects fonts with tfm names that are
1567 longer than 255 characters because such font names cannot
1568 be stored in a DVI file.
1570 * The combination of \immediate\pdfxform followed by a later
1571 \pdfrefxform could cause broken pdf output files because
1572 the box used for the form could have been freed and even
1573 reused already at that moment in time, sometimes resulting
1574 in an invalid transformation matrix.
1576 * The placement of super- and subscripts for displaystyle
1577 \int's in CambriaMath is now better than before. It still
1578 needs a tweak to the metrics though: in the current version,
1579 the italic correction has to be substracted from the width
1580 of the integral sign to get correct placement (context mkiv
1581 does this). to be continued ...
1583 ==============================================================
1584 Luatex beta-0.45.0 was released 20091118
1585 ==============================================================
1589 * Loading big OTF fonts via lua is now much faster than before,
1590 at the expense of a bit of precision loss in the calculated
1593 * Two new token lists are provided: \pdfxformresources and
1594 \pdfxformattr, as an alternative to \pdfxform keywords.
1596 * \input and \openin now accept braced filenames.
1598 * The \endlinechar can now be set to any value between 0 and 127.
1600 * Luatex can now optionally use kpathsea to find lua require()
1603 * The new primitives \aligntab and \alignmark are aliases for
1604 the use of & and # in alignments.
1606 * \pdfrefximage [width <dimen>] [height <dimen>] [depth <dimen>] <imageref>
1607 overrules settings from \pdfximage for this \pdfrefximage call only
1609 * The print precision for small numbers in lua code (tostring)
1612 * Akira Kakuto suppled a patch that restricts writing to files
1613 with names such as latex.bat etc. (on windows only)
1615 * (un-feature): from now on luatex now only handles 4 direction
1616 specifiers: TLT (latin), TRT (arabic), RTT (cjk), and LTL
1617 (mongolian). The other directions now generate an error.
1619 * (un-feature): xpdf's automatic lower- and uppercasing retry attempts
1620 for nonfound image pdf files has been removed.
1622 * The callbacks hpack_filter, vpack_filter and pre_output_filter
1623 pass on an extra string argument for the direction, when known
1624 (nil == use default).
1626 * The lua functions node.hpack(), node.vpack() and node.dimensions()
1627 now accept an optional direction argument (not given == use default).
1629 * \pdfrefxform [width <dimen>] [height <dimen>] [depth <dimen>] <formref>
1630 scales a form object; similar principle as with \pdfximage: depth alone
1631 doesn't scale, it shifts vertically.
1633 * A change to the relative ordering inside font name discovery for use
1634 by the backend: now it tries <f>.psname first, as that is much less
1635 likely to contain spaces.
1637 * For ttc fonts, now the used subfont name and its index id are printed
1638 to the terminal, and if the backend cannot find a ttc subfont, the
1643 * Prevent crashes for lua-loaded fonts without a (tfm) name.
1645 * Remove spurious newlines in the output pdf that could be the
1646 result of using \pdfximage for an included pdf figure too early.
1648 * Full font embedding for wide otf and ttf fonts now really
1649 works (older versions only pretended that it did work).
1651 * node.dimensions() sometimes continued past the 'stop' node.
1653 * Images inside virtual fonts were broken.
1655 * The processing of \language=-1 was wrong, resulting in
1656 hyphenation attempts even though there was no proper language
1659 * Fix for finding files in --output-directory.
1661 * Fix for handling of --file-line-error.
1663 * tex.box[] assingments are now checked to make sure the assigned
1664 node has the right id (hlist or vlist).
1666 * show_node_list (as in \showbox) produced spurious local_par
1667 whatsit prints in the output after direction nodes.
1669 * The handling of pdf literals has been sped up.
1671 ==============================================================
1672 Luatex beta-0.44.0 was released 20091027
1673 ==============================================================
1677 * libpng is now 1.2.40.
1679 * hlist nodes now have a subtype to distinguish hlists generated
1680 by the paragraph breaking, explicit \hbox commands, and other
1681 (as-yet-undefined) sources.
1683 * \pdfobj now has an extra optional keyword: 'uncompressed',
1684 which forces the object to be written to the PDF in plain
1685 text (see the manual for the exact details).
1687 * The lua file from the luamd5 library (which provides the
1688 md5.hexsuma() function) is now embedded in the executable.
1692 * \latelua now works in DVI mode again.
1694 * status.output_file_name could crash when used too soon.
1696 * In 0.43, rules were not output at all in DVI mode.
1698 * \leavevmode\penalty-10000\penalty-10000 crashed luatex.
1700 * the API of margin kern nodes to lua was using the wrong
1701 fields in the nodes.
1703 * A few fixes to the manual.
1705 * PDF Xref stream dicts were slightly non-conformant.
1707 * There was too much space between two consecutive math displays
1708 (this bug was inherited from Aleph)
1710 * Synctex was broken (thanks, Akira)
1712 * Font mark classes were handled incorrectly by the fontloader
1715 * There was a crash possible with certain types of named PDF
1718 * Math delimiters and large operators in new MATH fonts no
1719 longer apply the italic correction (this fixes placements
1720 of super- and subscripts on such items for those fonts).
1722 * The converter from lua strings to token lists (for the node
1723 interface) sometimes generated invalid tokens.
1725 * CFF (OpenType) fonts now listen to 'embedding="full"'. TTF
1728 * Font tables with 'embedding="no"' would cause luatex to crash.
1730 * \pdfobj file {} failed to find the file if there was no lua
1733 * An optimization in MS Mincho caused luatex to crash.
1735 ==============================================================
1736 Luatex beta-0.43.0 was released 20090819
1737 ==============================================================
1741 * There is a new allowed key in the table trhat is returned
1742 by lua-loaded fonts: <f>.psname. This value should be set
1743 to the original PostScript font name of the font. Fonts inside
1744 dfont and ttc collections are fetched using this field
1745 (if it is missing, <f>.fullname will be used instead).
1747 * It is now possible to use Apple dfont font files
1748 (those that contain at least one outline font).
1750 * \latelua is now allowed inside leaders.
1752 * There is a new callback: process_output_buffer, from Manuel
1753 Pégourié-Gonnard. This callback is called just before
1754 \write acts, so it can be used to alter the file encoding
1755 of text output files.
1757 * There is a new node.dimensions() function, which calculates
1758 the natural size of (part of) a list of nodes.
1760 * The new primitive \gleaders provides 'globally aligned'
1763 * The DVI and PDF backends now share much code internally.
1765 * The embedded MPlib is now 1.207.
1767 * libpng is now 1.2.39.
1771 * We fixed lots of anonymous bugs introduced in 0.42.0 (as expected)
1773 * fontloader.info() errors are no longer fatal, the function now
1774 just returns a nil,"error string" pair.
1776 * Automatically inserted kerns for \accents are now once again
1777 valid word ends, as in \TEX.
1779 * Fixed the placement of math displays in mixed direction
1782 * The \pdfcompresslevel is now dynamic again.
1784 ==============================================================
1785 Luatex beta-0.42.0 was released 20090717
1786 ==============================================================
1788 * There is a new node.tail() function
1790 * lua-loaded fonts now support a 'nomath' key to speed up
1791 loading the lua table.
1793 * A bugfix in the ttf reader for the inclusion backend, and
1794 (also in the backend) support for treating ttc files by
1795 pretending they are single ttf fonts (both patches from pdftex)
1797 * Add Khaled Hosny's man page to the repository
1799 * The \pdfcompresslevel is now effectively fixed as soon as
1800 output to the pdf file has occurred.
1802 * Patched status.filename so that it (nearly) always returns a
1805 * fix '\the\delcode' and disable '\the\odelcode', '\the\Udelcode',
1806 and '\the\Udelcodenum'
1808 * Handle jfifs where either xres or yres is 0 and the other
1809 res is != 0 (from pdftex)
1811 * The single-argument version of lang.hyphenate() was broken.
1813 * Get rid of the \directlua/\latelua number warning.
1815 * The Lua coroutine patch (coco) is now disabled on linux
1816 powerpc architectures (because it caused crashes)
1818 * Removed obsolete pdftex primitives:
1819 \pdfoptionalwaysusepdfpagebox
1820 \pdfoptionpdfinclusionerrorlevel
1824 * The loading speed of large fonts (especially ttf) via the
1825 fontloader library, and the inclusion speed for subsetting
1826 in the backend have both been improved.
1828 * The 'pdf' lua library has been enhanced with various new
1829 functions, see the manual for details.
1831 * BLT and BRT glyph position fixed.
1833 * Various fixes for synctex offsets.
1835 * Support for exotic font string encodings has been removed
1836 from the fontloader library.
1838 * The embedded MPlib is now 1.205.
1840 * libpng is now 1.2.38.
1842 ==============================================================
1843 Luatex beta-0.40.6 was released 20090625
1844 ==============================================================
1846 * Fix two string vs. toks bugs in the lua node interface:
1847 whatsit,annot and whatsit,startlink data assignments were
1848 made directly as strings instead of being converted to tokens.
1850 * Sometimes pdf.print() could be used before the proper structures
1853 * There was a bug in the type codes for the lua package filter
1854 callback: wrong extra info was passed to lua for the alignment
1857 * The math parameters \Umathlimitdownvgap, \Umathlimitdownbgap,
1858 and \Umathlimitdownkern have been renamed to \Umathlimitbelowbgap,
1859 \Umathlimitbelowvgap, and \Umathlimitbelowkern to be more
1860 consistent with the other parameter names.
1862 * The embedded MPlib is now 1.204.
1864 * Handling of UTF-8 hyphenation exceptions has been fixed.
1866 * There were a number of typos in the manual.
1868 ==============================================================
1869 Luatex beta-0.40.5 was released 20090610
1870 ==============================================================
1872 * One of the internal print functions accidentally encoded its
1873 argument string to UTF-8 even though it was already UTF-8.
1875 * Some of the log and terminal UTF-8 output was gibberish.
1877 ==============================================================
1878 Luatex beta-0.40.4 was released 20090609
1879 ==============================================================
1881 * \the\textfont0 returned a number instead of doing a font
1884 * The embedded MPlib is now 1.203.
1886 ==============================================================
1887 Luatex beta-0.40.3 was released 20090608
1888 ==============================================================
1890 * A set of portability fixes for the AIX compiler from Vladimir
1893 * A set of fixes to the synctex support.
1895 * A patch to the build script to prevent installed X11 headers
1896 from being required.
1898 * Some weave (web syntax) fixes from Manuel Pégourié-Gonnard.
1900 * A simplification in luatex.ch (it is now less verbose
1901 about the web2c-specific extensions) from Karl Berry.
1903 * A fix in the handling of UTF-8 (input) file names.
1905 * Hyphenation exceptions were case sensitive in 0.40.2.
1907 * libpng is now 1.2.37.
1909 ==============================================================
1910 Luatex beta-0.40.2 was released 20090603
1911 ==============================================================
1913 * Fix for a compilation warning under Cygwin.
1915 * A complicated bugfix by Hartmut for a rounding problem in the
1916 VF loading that resulted in 'character width mismatch in font
1917 XY.vf ignored' messages at large load sizes
1919 * The embedded MPlib is now 1.202.
1921 * The post_page_number callback was accidentally run when
1922 shipping out xforms as well as during actual pages.
1924 * When a math accent char doesn't have a bot_accent placer,
1925 luatex now uses the top_accent placer, if present.
1927 * A crash caused by \Uroot .. {<list>}{...} is fixed
1929 * A portability fix for solaris 8 sparc using sun studio
1930 compiler, and one for glibc > 2.9.90
1932 * luatex -ini now sets the \catcode of the BOM character to
1935 * Kpathsea is updated from TeXLive, giving four extra types of
1936 searchable files: 'font feature files','cid maps','mlbib',
1939 * libpng is now 1.2.36
1941 ==============================================================
1942 Luatex beta-0.40.1 was released 20090508
1943 ==============================================================
1945 * Vertical placement of root radicals and degrees is fixed.
1947 * The use of \pageleftoffset could deviate from \hoffset
1950 * LuaTeX now issues a warning if \pagedir !- \bodydir during
1953 * The previous crash in font.read_tfm() was still not quite
1956 * The Web2C version is now also printed in the --version
1957 and --credits output.
1960 * There is a new MPlib 1.200 release candidate with a few minor
1963 * The xpdf library is updated to patch level 3.
1965 * New imports to the build system, from texlive. In particular,
1966 there is now configure-level support for building with
1967 libpoppler and support for building under cygwin 1.7 is added.
1969 ==============================================================
1970 Luatex beta-0.40.0 was released 20090422
1971 ==============================================================
1973 * The embedded MPlib is updated to version 1.200.
1975 * Texlua would crash if run font.read_tfm() was used.
1977 * Luatex would crash on empty \patterns.
1979 * Lots of small C code cleanups.
1981 * \textdir inside a \hbox dir *** was wrong earlier.
1983 * 0.39.0 introduced a bug that would make luatex crash whenever
1984 font expansion was used.
1986 * Font tables returned by define_font can now have a key named
1987 'cache' that controls the internal lua font table caching.
1989 * There is no longer a need for an explicit --progname if there
1990 is no input file given.
1992 ==============================================================
1993 Luatex beta-0.39.0 was released 20090415
1994 ==============================================================
1996 * iniluatex will from now on start up with only the TeX82 primitives
1997 and \directlua, everything else has to be bootstrapped via
1998 tex.enableprimitives(). This change was planned for 0.40.0,
1999 but *now* is the time to test it.
2001 * A bugfix for \primitive in various expandable contexts,
2002 and \primitive now generates an error message when the
2003 argument is not actually a primitive's name.
2005 * There was a bug found in the math accent handling.
2007 * Large math operators are now treated like extensible characters
2008 in the sense that they can be composed of segments.
2010 * The extra assign- and restore tracing information from eTeX
2011 had a massive bug because of a dangling else in the pascal web.
2012 As a side-effect of fixing this bugs, all such potential errors
2013 in the pascal web have been fixed (for now).
2015 * The math parameters can now be set and queried from lua code
2016 via the new tex.setmath() and tex.getmath() functions.
2018 * Reflection in a \hbox was broken.
2020 * There was a leak of direction nodes in the paragraph builder.
2022 * The font backend now does a small peek to differentiate
2023 truetype and postscript style opentype fonts. This fixes
2024 the "Can't find CFF table" bug for otf's with truetype outlines.
2026 * Parameters and registers can now also be assinged to globally
2027 from lua (see the manual for details).
2029 * It is now possible to query the current math style while a
2030 formula is still being constructed by using the new read-only
2031 value \mathstyle. Associated is the new command \Ustack that
2032 is to be used as a prefix for {.. \over ..} and friends.
2033 See the manual for more information.
2035 * The embedded MPLib is brought up to date with the current
2036 metapost repository (version 1.110 and a few small patches).
2038 * Luatex can now handle two breakpoints inside a single ligature
2039 (like for the functional word of-f-ice). The solution is not
2040 perfect yet, but the chance of missed hyphenation points in
2041 actual documents should now be negligible.
2043 * Some speedups in the font loading code, and in the handling of
2044 pdf_literal nodes that are set from within Lua code.
2046 * Some source code and manual cleanup, as usual.
2048 ==============================================================
2049 Luatex beta-0.38.0 was released 20090410
2050 ==============================================================
2052 * tex.enableprimitives() had a bug were previously defined (but
2053 currently undefined) control sequences prevented the creation
2056 * The special calling format callback.register('name', false)
2057 not only disables the callback, but also the builtin code it
2058 is supposed to replace.
2060 * Empty \localleftbox and \localrightbox -es are now suppressed.
2062 * Support for <f>.MathConstants.SubscriptShiftDownWithSuperscript
2063 was added, to solve the lack of "sub2" in OpenType math.
2065 * Luatex now supports horizontal super- and subscript placement
2066 corrections via the OpenType MATH mathkern table. See the
2069 * node.write() no longer copies its argument node list before
2072 * There are six new primitives that are verbose forms
2073 of one and two byte special tokens:
2074 \Usuperscript \Usubscript
2075 \Ustartmath \Ustopmath
2076 \Ustartdisplaymath \Ustopdisplaymath
2078 * The attribute node leaks in math mode and alignmetns have been
2081 * The 11 simple math noads are now combined into a single "noad"
2084 * Static linking against libstdc++ is working once again.
2086 * There is a small fix in the keyword scanner to solve the
2087 problem of 'Runaway ... while scanning ???' that could happen
2088 for some primitives.
2090 * Lua now also has the "architecture independent bytecode"
2093 * Lua is updated to version 5.1.4 with coco patches 1.1.5, and
2096 * Some TRT/TLT backend bugs are fixed.
2098 * Various manual updates.
2100 ==============================================================
2101 Luatex beta-0.37.0 was released 20090331
2102 ==============================================================
2104 * Luatex now implements shell_escape = 'p', a new feature
2105 in web2c that intends to make \write18 more secure. As
2106 a side-effect, if luatex is used for typesetting, it will
2107 now also apply shell_escape = 'p' and shell_escape = 'f'
2108 to the lua functions io.popen(), os.execute(), os.exec(),
2110 Nothing has changed for the case where luatex is used as
2111 a script interpreter.
2113 * Attributes can now have negative values. The special value
2114 for 'unset' is lowered to -0x7FFFFFFF (it used to be -1).
2116 * The lua 'kpse' library now has an object-oriented interface
2117 as companion to the procedural interface. This is useful for
2118 e.g. controlling the discovery of mplib files.
2120 * The new internal integer parameter \outputbox allows setting
2121 of the output box number (default: 255, max: 65535)
2123 * The new primitives \Udelimiterunder and \Udelimiterover
2124 complete the set of 'StretchStacks' for OpenType Math.
2126 * Fixed a bug in font string conversions on the Macintosh that
2127 resulted in warnings about 'unaligned pointers being freed'.
2129 * Khaled Hosny spotted a bunch of manual errors.
2131 * There was bug in the width of math_accent objects when
2132 there were super- or subscripts attached to the accentee.
2134 * In PDF mode, TRT \leaders were bugged.
2136 * The source tree now uses the new texlive build system that
2137 Peter Breitenlohner created.
2139 * There is now a single build.sh instead of four separate
2140 ones. It has a few options:
2141 --make : only make, no make distclean; configure
2142 --parallel : make -j 2 -l 3.0
2143 --nostrip : do not strip binary
2144 --mingw : crosscompile for mingw32 from i386-linux
2145 --ppc : crosscompile for ppc osx on intel osx
2147 Note: --parallel still sometimes causes crashes due to
2148 timing errors, so use that option with care.
2150 * Many compiler warnings have been removed (but not all yet).
2152 ==============================================================
2153 Luatex beta-0.36.0 was released 20090323
2154 ==============================================================
2156 * The included fontforge code is stripped considerably, and
2157 the lua table to access the code is renamed to 'fontloader'.
2158 The old name ('fontforge') will remain present for a while,
2159 but will eventually go away.
2161 * New lua functions: tex.primitives(), tex.extraprimitives,
2162 tex.enableprimitives(). This is a prelude to a big change
2163 in the next beta: iniluatex will from now on start up with
2164 only the TeX82 primitives and \directlua, everything else
2165 has to be bootstrapped via tex.enableprimitives().
2166 See the manual for more details.
2168 * Support for multiple lua states has been removed, and at the
2169 same time support for adding name ids to lua chunks has been
2170 added. See the manual for more details.
2172 * More changes to the PDF backend to make it support non-latin
2173 directions (form and image placement, vertical typesetting,
2176 * The kpathsea library is updated. Highlights: cleaner build
2177 process (thanks to Peter Breitenlohner), cleaner mingw32
2178 (cross)compilation support, and a new reentrant API.
2180 * Some possible endless loops within extended delimiters in
2181 math mode are now trapped.
2183 * Movements inside VF font characters were considerably off
2184 due to a wrong conversion routine.
2186 * Error handling for \outer has been reinstated, but can be
2187 suppressed via the new primitive \suppressoutererror.
2189 * The new primitives: \suppresslongerror and \suppressifcsnameerror
2190 that can be used to suppress errors for \par in non-long macros
2191 and for non-expandable objects inside \ifcsname ... \endcsname,
2194 * New lua function: node.vpack() via a patch from Khaled Hosny
2195 that also improves error handling in node.hpack().
2197 * Fix the typo that caused \charic (instead of \charit)
2198 to be defined as a primitive.
2200 * Suppression of hyphenation via \hyphenchar\font=-1 now works
2203 * The lua functions tex.print(), tex.sprint(), tex.write() now
2204 accept an array of strings as well as vararg list of strings
2207 * A change to be build process: luatex.p is no longer split
2208 int smaller pieces before running the C compiler.
2210 * Melissa O'Neill contributed a bugfix to the Type1 font
2213 * A bunch of smaller bugfixes and cleanups (as usual).
2215 ==============================================================
2216 Luatex beta-0.35.0 was released 20090224
2217 ==============================================================
2219 * The math handling portions of LuaTeX are converted to C code,
2220 and extended to support Unicode math. There are a great many
2221 related changes, see the new Math chapter in the manual for
2224 * A nasty bug in the paragraph breaking routine was fixed.
2225 (All lines except the first one were believed to be wider then
2226 they really were. This affected which nodes were considered
2227 as active breakpoints)
2229 * Various changes to the PDF backend to make it support non-latin
2232 * Fixed the behaviour of the page offsets. Placement of the output
2233 on the physical page should now work correctly in all directions,
2234 both in DVI and PDF.
2235 There now are \pageleftoffset and \pagetopoffset primitives,
2238 * fontforge.apply_featurefile() was broken since 0.31.0
2240 * The lua profiler library is added.
2242 * The included lua filesystem library is now 1.4.1.
2244 * Reading of pk files fixed.
2246 * An optional space afer a <direction specifier> for \textdir c.s.
2247 is ignored from now on.
2249 * \bodydir and \pagedir can now be (re)set even after the first
2250 page has been output.
2252 * The new callback mlist_to_hlist can be used to intercept the
2253 normal conversion of math lists to horizontal lists.
2255 * The programs ttf2afm and pdftosrc are removed from the luatex
2256 distribution (these belong to pdftex).
2258 * fontforge.open() now uses much less memory when opening large
2261 * The included libpng is now 1.2.35.
2263 * Quite a lot of smaller bugfixes and cleanups (as usual).
2266 ==============================================================
2267 Luatex beta-0.31.3 was released 20081229
2268 ==============================================================
2270 This release has a bunch of updates from the development trunk
2271 (#1657-1670,1677,1678,1680,1685,1687).
2273 * Closing of files opened by \externalocp.
2275 * Fix for a locale-related bug that make PDF generation fail
2276 with a "Parsing CFF Dict failed" message when including
2279 * The included metapost is now version 1.102.
2281 * PDF rules in vertical modes in RL direction where output
2282 in the wrong direction
2284 * Fix for a crash on Apple fonts that contain a 'bsln' table.
2286 * The handling of the second argument to fontforge.open() was
2289 * The included libpng is now 1.2.34
2291 * Handling of ttc files on Windows was broken
2294 ==============================================================
2295 Luatex beta-0.31.2 was released 20081209
2296 ==============================================================
2298 Besides fixing building issues, this release has
2300 * A small fix for a crash that could happen when using
2303 * A fix in the format of fontforge.to_table output.
2304 (In 0.31.1 <font>.lookups was near-empty; the lookups
2305 were accidentally output as part of the gpos table).
2307 ==============================================================
2308 Luatex beta-0.31.1 was released 20081209
2309 ==============================================================
2311 fixed a bunch of compilation errors on various platforms, but
2312 with no other visible changes.
2315 ==============================================================
2316 Luatex beta-0.31.0 was released 20081205
2317 ==============================================================
2319 This is just an intermediate release so that some testing can be
2320 done on the updated fontforge embedding.
2322 * There are new fields being generated by fontforge.to_table(),
2323 and one or two old ones have been removed. These fields are /
2324 will be documented in the manual, but very briefly:
2326 - MATH table and associated information are now exported
2327 (the main reason for the new fontforge code)
2328 - Baseline data is now exported
2329 (perhaps usable in lua code)
2330 - Multiple Master / Glyph variation data is now exported
2331 (but useless, for now)
2332 - Mac Feature (AAT) information is now exported
2333 (perhaps usable in lua code)
2334 - If (lookup) names were saved via the PfED table, these
2335 will the exported instead of the default, generated names.
2336 (as requested by Yannis)
2338 * dfont is now treated as an archive format just like ttc
2339 when it comes to fontforge.info(). NOTE: that does not mean you
2340 can actually use them, because the backend doesn't know
2341 yet how to embed dfont fonts in the PDF, that is on the
2342 TODO list for the next big beta (0.40.0).
2344 * The executables are a lot larger than before. That is because
2345 much more of fontforge is included than before. Likely this
2346 will stay this way, because this makes upgrading the ff code
2347 much easier, and it means that luatex/FF potentially
2348 understands more font formats (after upgrading the backend,
2352 ==============================================================
2353 Luatex beta-0.30.3 was released 20081128
2354 ==============================================================
2356 This release fixes a really big bug, a few smaller ones,
2357 and has updates of png and mplib:
2359 * All hyphenation patterns that were anchored at the start or
2360 end of a word were ignored in luatex versions 0.25.X and 0.30.X
2361 (and possibly even earlier).
2363 * Repeated use of \language=-1 could result in "There is not room
2364 for another language".
2366 * The lua true coroutines patch (Coco) is now disabled on OpenBSD
2367 running on non-intel platforms.
2369 * The lua socket library is patched so that it will now compile on
2372 * Luatex now has libpng 1.2.33 and mplib 1.100
2374 ==============================================================
2375 Luatex beta-0.30.2 was released 20081020
2376 ==============================================================
2378 * The Lua coco change from 0.30.1 is reverted as it gave
2379 trouble on MacOSX. Lua coco on non-intel OpenBSD platforms
2380 is now explicitly turned off.
2382 * The lua file reading speedup in 0.30.1 broke reading of
2383 files larger than 100MB.
2385 * Reading of font-related files was broken when there was a find
2386 callback, but no read callback.
2388 * The texmf.cnf array size setup values were ignored whenever
2389 --lua was given on the commandline (instead of only when
2390 texconfig.kpse_init is set to false).
2392 * glyphs with negative widths resulted in incorrect horizontal
2393 placement (overlapping) of the string in the output PDF.
2395 * Using \latelua could sometimes result in an invalid output PDF,
2396 and the argument token list was expanded too early
2398 * There was a read buffer overrun in the mapfile parser
2400 * There are two new variables in the status table:
2401 status.callbacks and status.indirect_callbacks (execution counts).
2403 ==============================================================
2404 Luatex beta-0.30.1 was released 20081009
2405 ==============================================================
2407 * Invalid return values from the linebreak_filter callback
2408 are now handled gracefully (was crashing)
2409 * a preinstalled ctangle is no longer needed except when
2411 * In 0.30.0, the .notdef fix was incorrectly applied to
2412 truetype / opentype fonts.
2413 * A bunch of all memory leaks is fixed
2414 * In lua, f:read('*a') now uses signicantly less memory
2415 * The number of \catcodetables is now limited to 64KB
2417 * Luatex could crash if there were PDF images with and
2418 without page /Group included on the same page
2419 * Lua coco now always uses setjmp (for OpenBSD compatibility)
2420 * The embedded mplib is updated to the latest svn version
2421 * # marks (characters with catcode 6) are no longer doubled
2423 * Handling the nul character (U+0000) with catcode 13
2425 * Luatex could crash on win32 with an access violation
2426 because there was one predefined language too few
2427 (the one matching \language=-1)
2429 ==============================================================
2430 Luatex beta-0.30.0 was released 20080930
2431 ==============================================================
2435 * Readable \tex internal params that are counts, attrs, or dimens are
2436 now returned as numbers instead of strings, and skips as node objects.
2437 Read-write access to tex's skip registers added: tex.skip[0] etc.
2438 * new callback: 'linebreak_callback' to replace the internal paragraph
2440 * the tex table now supports more readable 'convert' values:
2441 tex.fontname, tex.pdffontname, tex.pdffontobjnum, tex.pdffontsize,
2442 tex.uniformdeviate, tex.number, tex.romannumeral, tex.pdfpageref,
2443 tex.pdfxformname (each takes a number as argument)
2444 * new readable parameter: tex.fontidentifier(number) returns the
2445 \csname associated with that font id
2446 * luatex now outputs \FONT<nr> instead of \^^@ in Overfull/Underfull
2447 messages if the font's id text is zero (like for expanded fonts) (#77)
2448 * luatex --version is split into --version and --credits
2449 * There is now (again) an svn revision number in luatex --version (#91)
2450 * Add support for more read-only internal access from lua:
2451 tex.lastpenalty, tex.lastkern, tex.lastskip, tex.lastnodetype,
2452 tex.inputlineno, tex.badness, tex.pdftexversion, tex.pdflastobj,
2453 tex.pdflastxform, tex.pdflastximage, tex.pdflastximagepages,
2454 tex.pdflastannot, tex.pdflastxpos, tex.pdflastypos, tex.pdfrandomseed,
2455 tex.pdflastlink, tex.luatexversion, tex.Alephversion,
2456 tex.Omegaversion, tex.Alephminorversion, tex.Omegaminorversion,
2457 tex.eTeXminorversion, tex.eTeXversion, tex.currentgrouplevel,
2458 tex.currentgrouptype, tex.currentiflevel, tex.currentiftype,
2459 tex.currentifbranch, tex.pdflastximagecolordepth (#81)
2460 * the old --src-specials are replaced by --synctex (#63)
2461 * the \expanded primitive is backported from pdftex 1.50 (#43)
2462 * luatex now comes with libpng 1.2.32
2463 * experimental: tex.definefont(string, number) associates a
2464 csname string with a font id number
2466 Bugs fixed compared to 0.29.0:
2468 * dashes were exported wrongly by MPlib
2469 * multi-item \discretionaries were broken in various ways (#78, mailinglist)
2470 * read_font_info was sometimes called recursively from lua-loaded
2472 * do_vf was sometimes called on lua-loaded fonts that where
2473 already known to be virtual
2474 * trailing junk in tfm files is now ignored (needed for ecrm fonts)
2475 * pdf_ignored_dimen was initialized too late, breaking \prevdepth
2476 handling and causing output lines to overlap eachother (#72)
2477 * pdf.immediateobj() had a printf-related bug
2478 * the fontname terminal logging is fixed for strange font file names
2479 * lua tex array assignments now listen to the globaldefs setting
2480 (tex.count[0] etc) (#92,partial)
2481 * \parshape was broken (#70)
2482 * there is no longer a ".tex" extension forced on very input file (#74)
2483 * eof() for mapfiles was true one byte too soon (#76)
2484 * out of range \lefthyphenmin and \righthyphenmin settings now actually
2485 disable hyphenation (#90)
2486 * tex.unset_attribute() looked too far ahead when a to-be-unset
2487 attribute id not only did not exist in the node, but was also
2488 higher than the highest set attribute on the node. (#65)
2489 * the parameters attr and page_name of read_image() were swapped
2490 (this broke \pdfimage with attributes)
2491 * tex filenames with spaces in them on the command line are now
2493 * sometimes pfb fonts were included multiple times without valid
2495 * some parts of the pdftex 1.40.9 PNG transparancy hack were still
2496 present and caused transparant png handling to fail
2497 * \localinterlinepenalty and \localbrokenpenalty were broken
2498 * special case catcode tables are now handled better (#23)
2499 * the handling of missing .notdef charstrings in old pfb fonts
2502 ==============================================================
2503 Luatex beta-0.29.0 was released 20080718
2504 ==============================================================
2509 * The embedded pdftex is now 1.40.9 (forthcoming) except for the
2511 - the png transparancy fix is skipped because it is in conflict
2512 with a macro-based solution offered by context mkiv.
2513 - LFS (PDF files > 2GiB) is not working yet.
2514 - Synctex is still missing
2516 * libpng, xpdf, and zlib are updated to their pdftex 1.0.9 levels
2518 * MPlib is updated to 1.090
2520 * The syntax of buildpage_filter is changed to avoid confusion
2521 (and crashes). See the manual for the new calling convention.
2523 Bugs fixed compared to 0.28.0:
2525 * The previous bugfix for \languages skipping numbers was wrong.
2527 * Various compile-time warnings are suppressed
2529 * \pdfsetmatrix was broken
2531 * \pdfsave and \pdfrestore were broken
2533 * Valid user_defined whatsits nevertheless were generating errors.
2536 ==============================================================
2537 Luatex beta-0.28.0 was released 20080630
2538 ==============================================================
2540 There is one new feature:
2542 There is now experimental support for non-trivial discretionaries
2543 following explicit hyphens. In analogy to \prehyphenchar and
2544 \posthyphenchar, there are two new parameters \preexhyphenchar en
2545 \postexhyphenchar. Both new parameters default to zero (nothing).
2546 When set to a nonzero value, the parameter is added to either the
2547 pre- or post- break text. Note that this is *in addition to* the
2548 hyphen already in the input. Testing and comments are very welcome.
2550 Here is a short example (no idea what is says):
2554 \postexhyphenchar=`-
2556 pudesse t\^e-lo mantido como amigo, mas por
2557 mais bem-intencionado que eu fosse, n\~ao
2563 Bugs fixed compared to 0.27.0:
2565 * Words that started off with a character with a zero \lccode
2566 were never hyphenated at all.
2568 * There was a bug in the new active characters code that prevented
2569 the latex format from being built (with Invalid character error).
2571 * There is a temporary fix for the sometimes appearing "Font has a
2572 bad FontBB" message from Acrobat.
2574 * \leaders did not actually stretch enough (the last bit of glue
2575 that has to line up the line endings was never output to the PDF).
2577 * Bad paragraph-related callbacks could result in luatex crashing.
2579 * The pre_linebreak and post_linebreak filters were never called
2580 when \output was active (this was a leftover of a superceded
2583 * 'skipping' language codes when setting up \patterns c.s. did not
2584 work (it used the next empty slot instead of the actual value of
2587 * Using multiple 'attr' keywords on box items could cause random
2590 * Calling lang.hyphenate() with one argument (without specifying a
2591 tail node) could crash.
2593 * The luatex pdf banner and version reporting is cleaned up a bit.
2595 * Conflicting patterns inside \patterns now give an error:
2596 ! Conflicting pattern ignored.
2597 (duplicate identical patterns are ignored without error).
2599 ==============================================================
2600 Luatex beta-0.27.0 was released 20080624
2601 ==============================================================
2603 Bugs fixed compared to 0.25.3:
2605 * Unicode reencoding support for non-standard (i.e. older)
2606 Type1 fonts is now somewhat less broken than it was (#25)
2608 * .vf fonts using specials crashed luatex
2610 * luatex would crash on --\par (#33)
2612 * An attempt is made to get a sane default value for StemV in
2613 the created pdf (#32)
2615 * We can now guarantee that %PDF-1.* header is printed before
2616 the first pdf.print() output
2618 * lang.hyphenate() was broken
2620 * insert_before(a,a,b) was broken (#37)
2622 * argv[0] is now cleaned up before being used as a default for
2623 mem_name and prog_name (#28).
2625 * luatex would crash on loading extended fonts (fonts loaded
2626 via lua callbacks) from a format file.
2628 * The fix for pdftex bug #799 is backported from pdftex 1.40.4.
2630 * slnunicode had a bug in the unicode.utf8.gmatch iterator.
2632 * Queries of nonexisting fontdimens could cause a crash.
2634 * luatex would crash on {\textdir TLT\pardir TLT x\break\par }
2636 * Fixed wrong placement of lines in mixed-direction paragraphs
2637 that could happen in some situations.
2640 * Luatex now includes luasocket (#35)
2641 See http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/
2643 There is a new commandline option: --nosocket to disable this,
2644 and that is also implied by --safer.
2646 NOTE to the binary builders: there are some unfixed configure
2647 problems when you need to add a specific library to get socket
2648 support on your platform. You probably will have to edit the
2649 generated Makefile by hand (search for 'socketlib').
2651 * There is ongoing development to the 'img' and 'mplib' libraries.
2652 See the reference manual for details.
2654 * The 'character commands' in virtual fonts now support image
2655 inclusion. See the reference manual for details.
2657 * Lua error messages now include the call stack.
2659 * \directlua and \latelua have been extended to accept a 'name'
2660 keyword. The argument is a token list that is used as the lua
2661 name of this chunk in lua error messages and call stack prints.
2664 * The lua chunk names can be interfaced via a new virtual
2665 table called lua.instancename, the values in that function as
2666 defaults in the absence of 'name' keywords.
2668 * The 2-plane limit on active character range is removed (#12).
2670 * Subsetted TTF fonts in the PDF now retain the cmap table.
2672 * There is a new Lua variable os.selfdir. This contains the
2673 full absolute pathname of the directory that the executable
2674 resides in (with symlinks resolved)
2676 * There is a new function os.uname() this returns a lua
2677 table containing various platform information items.
2679 * The node library now uses text strings for direction specifiers
2680 instead of numbers. See the reference manual for details.
2682 * The 'E' (edit) as error response functionality is now a noop.
2684 * Adding luatex 0.25.3 to texlive resulted in a few minor backports,
2685 in particular: Support for mktexfmt is added, and luatangle now
2686 identifies itself as such (instead of calling itself otangle).
2688 * We fixed a whole series of portability problems (but
2689 we probably introduced new problems as well).
2691 * Most (all?) files now have a corrected Copyright header,
2692 and link in $Id$ and $URL$ into the object file.
2694 * Some unnecessary files were removed from the distribution.
2696 ==============================================================
2697 Luatex beta-0.25.3 was released 20080418
2698 ==============================================================
2701 * Pdftex bug no. 936 (sarovar) regarding vertical
2702 positioning of embedded PDF files if depth parameter is given.
2703 * Luatex gave bogus lua return values for the tex.wd/hd/dp
2704 values of void boxes
2705 * A few bugfixes in mplib (square pens caused hangs, elliptical
2706 pens caused confused output)
2707 * Hyphenation of uppercase words (\uchyph) was broken
2708 * Output image placements corrected for all 8 transform cases
2709 also when artbox etc. is used
2710 * There were missing maketexstring() calls in error messages
2711 * Math display contents were sometimes prematurely freed during
2712 the placement of the equation number
2713 * Setting \language=-1 could cause crashes due to an array
2714 index going out-of-bounds
2717 * build.sh.ppc is added to the source distribution. This is a
2718 script that crosscompiles osx ppc binaries from osx intel
2719 * tex.box[<chardef name>] is now supported (but still experimental)
2720 * a bunch of compiler warnings are removed
2721 * The fontforge library now dump AAT feature tags as and
2723 * The new function font.nextid() predicts the next assigned font id
2724 * Some source code changes are backported from texlive
2726 ==============================================================
2727 Luatex beta-0.25.2 was released 20080410
2728 ==============================================================
2730 * Updated to MPlib 0.40
2731 * Bugfixes and cleanup in the lua img table code
2732 * Fix \pdflastximagepages bug from pdftex
2733 * Fix for very large tex.print strings
2734 * Update to Lpeg 0.8.1
2735 * &D Bugfix for Type1 fonts when out-of-range characters
2736 are marked as 'used'
2738 ==============================================================
2739 Luatex beta-0.25.1 was released 20080321
2740 ==============================================================
2742 * Updated to MPlib 0.30 (that is now becoming usable)
2743 * The build requirement for a pre-installed ctangle is gone
2746 ==============================================================
2747 Luatex beta-0.25.0 was released 20080311
2748 ==============================================================
2753 This version features an embedded MP interpreter whose output
2754 can be directly accessed from lua code (mplib), without calls
2755 to an external "mpost" command. Of course it has bugs and
2756 limitations (makempx does not work, for example) but keep in
2757 mind that it is only an initial attempt.
2758 See the manual for more details.
2760 ** img.immediatewrite() is added
2761 ** images now accept a 'transform' key
2762 ** widths etc. can now be given as width="100mm"
2766 * \parshape handling was completely broken since 0.20.0+
2767 * when \pdfprotrudechars was in effect, an assertion failure
2768 could happen when embedded \hboxes in the paragraph appeared
2769 at the end of a line.
2770 * import of otf fonts with contextual lookups has been debugged,
2771 thanks to a patch by GW himself.
2772 * compiling with gcc 4.2.3 is now supported
2773 * if you want to build from source, you need a pre-installed ctangle.
2776 ==============================================================
2777 Luatex beta-0.22.1 was released 20080227
2778 ==============================================================
2780 * The macnames.c source file for building ttf2afm is restored.
2781 * "make depend" in luatexdir now works again
2782 * luatex sometimes crashed because it attempted to expand an
2783 already expanded font
2784 * luatex aborted when --progname was given but no format name.
2785 It now sets the format name to the given progname in that case
2786 * sometimes paragraphs with near-empty lines could cause a crash
2787 * img.supportedtypes() had a bug causing it to crash
2788 * img.supportedtypes() has been renamed to img.types for consistency
2789 * img.boxes() added, returns strings representing bounding boxes
2790 * img.node() added, returns a whatsit node cf. \pdfrefximage
2791 * node.write() now accepts multiple arguments
2792 * the program_name_set switch was not set automatically from C,
2793 causing errors unless lua code called kpse.set_program_name()
2795 * kpse.set_program_name() can now be called more than once
2797 * os.spawn{...} and os.exec{...} could cause crashes because of
2798 a memory allocation error
2800 ==============================================================
2801 Luatex beta-0.22.0 was released 20080215
2802 ==============================================================
2804 * We now have an official bug tracker: http://tracker.luatex.org
2805 * A new lua library (img) is added that allows a direct
2806 interface to the image handling of luatex. You can use this
2807 to include images from lua code instead of via the more
2808 traditional \pdfximage cs. See the manual.
2809 * An optional equal sign after \{pre,post}hyphenchar is now
2811 * os.exec() has been extended, and os.spawn() added. These
2812 functions have support for quoted strings, and they
2813 also accept a table with preseparated command arguments.
2814 * New string constants os.type and os.name are provided.
2815 * node.last_node() is added. This pops and returns the last
2816 node from luatex's 'current list'
2817 * node.write() is added. This appends a node to the end of
2818 luatex's 'current list' (experimental).
2819 * The strict check on unicode compliance in pattern files
2820 is dropped. Patterns files still have to be in proper UTF-8
2821 encoding, but the error for non-Unicode character values
2822 (like 0 - 31 and 127 - 159) is dropped.
2823 * \pdfadjustinterwordglue, \prependkern, \appendkern
2824 and associated \XXXXcode arrays are gone.
2825 * The rest of the pdftex font arrays are now merged into
2826 the new luatex font data structure. This means that you
2827 can now set up font expansion from lua code, and that a few
2828 font-related limits are gone.
2829 * The 'top_skip' field in 'insert' nodes is renamed to 'spec',
2830 for improved consistency.
2831 * kpse.show_path() added. This behaves just like
2832 $ kpsewhich --show-path
2833 * The unicode.utf8 functions now also accept values in the range
2834 1.114.112 - 1.114.367 that is used by LUATEX for raw byte output.
2838 * Better node memory (de)allocation error tracking and messages
2839 * Compilation on MacOSX 10.5 was broken
2840 * There was a bug in node.insert_after
2841 * Use of \{pre,post}hyphenchar was broken
2842 * lfs.permissions was leaking memory
2843 * Some warning and error messages are improved a bit
2844 * A set of bugs in character protrusion, this seems to be working
2846 * Also, a set of bugs in font expansion. This now works in most
2847 cases but is not quite bugfree yet (problematic files for testing
2849 * The functions in the kpse library would crash luatex if
2850 kpse.set_program_name() was not yet called. gives an error now.
2851 * Alignments with spanned columns could cause crashes
2852 * A patch is added for problems with filename parsing on the
2853 "first input line" (by Jonathan Kew)
2854 * The hpack_filter and vpack_filter were only called for lists longer
2856 * Luatex is now more forgiving about font subsets being smaller
2857 than their expected size (issues a warning instead of aborts now)
2858 * A "double-free ignored" error for paragraphs with lines starting
2859 with discarded items was fixed.
2861 ==============================================================
2862 Luatex beta-0.20.2 was released 20071217
2863 ==============================================================
2865 * some portability fixes to the build scripts
2866 * a fix for multi-\span in alignments causing unbreakable
2868 * manual improvements from Jonathan Sauer
2869 * fix for undefined csnames in \directlua if
2870 web2c's hash_extra is nonzero
2871 * fix for LR text inside of a RL document
2872 * fix for open_read_file callback not being called
2873 unless find_read_file was also registered
2874 * removed the ocp status message when \ocps are not
2876 * "unicodeenc" in the fontforge to_table renamed to
2877 "unicode" for improved consistency
2879 ==============================================================
2880 Luatex beta-0.20.1 was released 20071207
2881 ==============================================================
2883 * texlua was broken on Solaris because the some C header
2884 files were loaded in the wrong order.
2885 * os.tmpdir() now accepts an argument, making it easier
2886 to use. It now generates more unique filenames when
2887 it is called repeatedly in one run.
2888 * The --luaconly commandline switch is now documented
2890 * The new extended hyphenation exceptions were severely
2892 * \pdfprotrudechars could cause luatex to abort with an
2894 * There was a bug in the \span code that could cause endless
2896 * The simple forms of \leaders were messed up on windows
2897 because a variable was not properly initialized.
2898 * Non-grouped \textdir commands created invalid output.
2899 * e-TeX's pseudo files were not closed properly in ini mode.
2900 * The luatex.web now weaves properly again.
2901 * I made some small improvements to the manual.
2903 ==============================================================
2904 Luatex beta-0.20.0 was released 20071205
2905 ==============================================================
2907 News compared to the last beta (0.11.2) is as follows:
2909 * Completely overhauled hyphenation and ligkern application,
2910 including the addition of a new "lang" table in lua to
2911 interface to the language parameters, some extra functions
2912 in the "node" table, and a few extra callbacks ("hyphenate",
2913 "ligaturing", "kerning", "post_linebreak_filter").
2915 There is a new chapter in the manual to document all the
2916 changes to the hyphenation and line breaking algorithms,
2917 it is simply too much to list here.
2919 * the interface of the pre_linebreak_filter,hpack_filter,
2920 vpack_filter, and pre_output_filter has changed slightly.
2922 * boxes can now get explicit attributes different from the
2923 currently active set, using a syntax like
2925 \hbox attr2=12 attr3=-1 to 12pt {Hi!}
2927 * lpeg is now at version 0.7
2929 * a whole series of exotic bugs and compiler warnings are
2930 fixed, mostly thanks to the watchful eye of Fabrice.
2932 * texio.print now accepts multiple strings as arguments.
2934 * the lua functions os.sleep(), os.times(), os.gettimeofday()
2935 and os.tmpdir() have been added.
2937 * lua now comes with the coroutine (coco) patches from the
2938 luajit project applied.
2940 * the banner line no longer claims to be TeX.
2942 * a bunch of bugs reported on the mailing list have been
2943 fixed (I hope all of them).
2945 * (internal) we found lots of small ways to speed up lua
2948 * (internal) the node (de)allocation functions have been
2949 rewritten, so that absolutely all nodes now have a type,
2950 even the ones with variable sizes.
2953 ==============================================================
2954 Luatex snapshot-20071029 was released 20071029
2955 ==============================================================
2957 * Completely overhauled hyphenation and ligkern application.
2959 There is a new chapter in the manual to document all the
2960 changes to the hyphenation and line breaking algorithms,
2961 it is simply too much to list here.
2963 * the interface of the pre_linebreak_filter,hpack_filter,
2964 vpack_filter, and pre_output_filter has changed slightly.
2966 * lpeg is now at version 0.7
2968 * a whole series of exotic bugs and compiler warnings are
2969 fixed thanks to the watchful eye of Fabrice.
2971 * texio.print now accepts multiple strings as arguments.
2973 * The lua function os.sleep() is added
2975 ==============================================================
2976 Luatex beta-0.11.2 was released 20070918
2977 ==============================================================
2979 * Pdf inclusion and subsetting of CID-based opentype fonts
2980 now works as it should.
2982 ==============================================================
2983 Luatex beta-0.11.1 was released 20070918
2984 ==============================================================
2986 A quick list of what is new and fixed since beta 0.10.2:
2989 * pfb+afm fonts can now be used in 'wide' (encodingbytes=2) mode
2990 * searching in PDFS using 'wide' fonts now works reasonably well
2991 (based on the tounicode feature)
2992 * related to that, tounicode information can now be passed
2993 on inside the font metrics table
2994 * font subsetting is now supported for CID-based OpenType fonts
2995 (however, there is a known bug with KpozMinProVI-Regular.otf)
2996 * fontforge's warning and error messages are now intercepted
2997 and passed on to the lua code as a second return value of
2998 the fontforge.open() function
2999 * the new primitive \suppressfontnotfounderror can suppress
3000 the TeX error for "Font not found"
3001 * The lua function font.current can now be used to set TeX's
3005 * set_attribute(-1) is now the same as unset_attribute()
3006 * OpenType lookups with glyph classes would crash luatex
3007 * luazlib would not compile on debian (fix from Norbert)
3008 * CID-based fonts would crash luatex
3009 * Bare CFF should be read in binary mode (fix from Akira)
3010 * VF processing did not process packets containing zero bytes properly
3011 * the truetype collection (.ttc) handling is fixed, so that all
3012 of the fonts inside a collection can now be used reliably
3013 * application segfaults and stack overflows are intercepted
3014 so that luatex can quit a bit more gracefully
3015 * an assertion failuer on systems with signed chars (linux-powerpc)
3017 * a crash on AMD64 linux was fixed
3018 * the lua "pdf" table code was wrong
3019 * \ifcsname did not work properly for UTF-8 characters
3020 * Use of the math-related functions using make_fraction (like \atop)
3022 * \handling of \if\noexpand was wrong
3023 * applied a patch that cleans up XForm and page calculations
3024 * "autoconf" support from zziplib is stripped
3026 ==============================================================
3027 Luatex beta-0.10.2 was released 20070814
3028 ==============================================================
3032 * the primitive \span was completely broken
3033 * \pdfexpandfont (font expansion) misbehaved if it was used more
3035 * virtual fonts: sometimes they used the wrong internal font id,
3036 loading vf fonts via fonts.read_vf() was impossible, and sometimes
3037 virtual fonts created segfaults
3038 * while dumping formats, the last font parameter for each font was not
3040 * zziplib was always compiled with pre-installed zlib headers, instead
3041 of the ones in the build tree
3042 * lua 5.1.2 has trouble quoting ^Z characters etc, the tentative patch
3043 for lua 5.2 from Luiz fixes that, hopefully
3044 * fontforge.font('font.pfb') now properly parses AFM boundingboxes
3045 * non-existing files in the argument for fontforge.open() or
3046 fontforge.info() could cause segfaults, now it generates an error
3048 * fontforge.open() did not return character widths for vertical fonts
3050 * on Windows, fontforge believed that ttc files (TrueType Collections)
3051 were actually directories. ttc processing is still not 100% correct,
3052 but it is getting better
3053 * the build system used explicit 'make' sometimes
3054 * the auto-growing string pool was not used everywhere
3055 * there were some typos in the documentation parts of the pascal web
3056 * use of \parshape could easily exhaust all available memory
3061 * support for applying Adobe Feature files (.fea) and Adobe Font
3062 Metrics (.afm) is added to the fontforge library
3063 * fontforge.info() will now return an array of tables for the contents
3065 * support for a 'texluac' personality was added, to replace the 'luac'
3066 command from the official Lua distribution
3068 ==============================================================
3069 Luatex beta-0.10.1 was released 20070719
3070 ==============================================================
3072 This was a hotfix because beta-0.10.0 was completely broken.
3074 ==============================================================
3075 Luatex beta-0.10.0 was released 20070718
3076 ==============================================================
3078 The latest version of the manual is included in the package, and I
3079 am not going to repeat all of that. There were some minor changes
3080 compared to the previous snapshot, but mostly just bugfixes and
3081 documentation improvements.
3083 ==============================================================
3084 Luatex snapshot-20070626 was released 20070626
3085 ==============================================================
3087 * Integrated the lua library lzlib, this defines tables with
3088 bindings for zlib (including eazy-to-use gzip support)
3089 * Updated to slnunicode version 1.1
3090 * Some small cleanups in the sparse array handling
3091 * Moved the raw byte support out of the valid unicode range
3092 * Fixed a bug in the OFM font reader
3093 * Removed the pdftex snap nodes (and associated primitives)
3096 ==============================================================
3097 Luatex snapshot-20070622 was released 20070622
3098 ==============================================================
3100 Not a lot of news, but it fixes a few important bugs in the lua
3101 node processing. Also a few utility functions are added:
3104 rounds and bounds checks a lua number to make sure it is
3105 a valid tex integer.
3107 multiplies a number (or the numeric values in a table)
3108 with a fixed quantity, and calls tex.round() on the result.
3110 Test if a node has a specified field name
3112 removes a node from a nodelist, while keeping the list intact
3113 * node.insert_before()
3114 inserts a new node into a nodelist, just before a specified
3116 * node.insert_before()
3117 inserts a new node into a nodelist, just after a specified
3120 packages a nodelist into a hlist node
3123 ==============================================================
3124 Luatex snapshot-20070619 was released 20070619
3125 ==============================================================
3127 * The lua node processing interface is completely reworked.
3128 It is now completely based on userdata, and uses a new lua table
3129 called 'node' to hold the methods. More detailed information
3130 is in the manual (of course).
3132 * There is a fifth node processing callback:
3134 this is executed just before the packaging of \box 255.
3136 * The hpack_filter and pre_linebreak_filter callbacks now
3137 receive an extra argument indicating the number of top-level
3138 glyphs in the node list.
3140 * Virtual fonts can now contain a 'node' key in the glyph
3141 commands: the value should be a hlist node (i.e.: a horizontal
3142 box), and that will then be output for each character access
3145 * A new set of registers is added, called \attribute. These are
3146 values that will be automatically attached to nodes created in
3147 their scope. More information in the manual.
3149 * Direct read/write access to TeX's box registers is addded to
3150 the lua 'tex' table.
3152 * TeX's main memory now grows dynamically, and the (de)allocation
3153 routines have been rewritten completely.
3155 * The 'kpse' table is extended with extra interface functions, to
3156 allow texlua to be used as a scripting engine.
3158 * The \pdftexversion command now returns 200, not 140.
3160 * The displayed banner and --version screens are cleaned up.
3162 * The format file is now RLE compressed. Not as small as before,
3163 but unpacking is much faster.
3166 ==============================================================
3167 Luatex snapshot-20070426 was released 20070426
3168 ==============================================================
3170 This past month I have been busy with nodes and lists of nodes,
3171 so the big new feature in this release is that there are four
3172 callbacks that operate on node lists:
3175 pre_linebreak_filter
3179 The preliminary documentation for these is in the manual, but the basic
3180 idea is that you can filter a node list just before LuaTeX starts doing
3181 something with it (like line breaking). This functionality is not stable
3182 yet: the node presentation of the various node types is pretty much OK
3183 now, but keep in mind the following:
3185 * math noads and math typesetting are not handled at all (yet)
3186 * not all hpacks and vpacks are intercepted (yet)
3187 * the nested node list handling will probably change
3188 * A conversion tool for nodes to/from dictionaries is planned,
3191 The other changes in this snapshot are various bugfixes (for builds
3192 on various platforms as well as font issues) and speedups (in the
3193 execution of callbacks and the creation of lua font representations).
3196 ==============================================================
3197 Luatex snapshot-20070322 was released 20070322
3198 ==============================================================
3200 * I have changed the token_filter callback quite rigorously,
3201 mostly because of speed issues. The raw speed of trivial
3202 lua token handling is now only about 20 times slower than
3203 the native handling. Not bad at all, considering it has to move
3204 between interpreted and compiled code for each and every
3205 token. If you do not run the token filter inside \output,
3206 the effective run speed difference should not be much more
3209 Two big differences: you have to call token.get_next()
3210 yourself, and the token table is now a three-item array
3211 instead of a five-key hash. The minimal example changes to
3214 callback.register('token_filter', function ()
3215 return token.get_next()
3219 more details are in the manual.
3221 * I've fixed a few bugs in the handling of Opentype TTF, and added
3222 a new key in the font definition table:
3224 f.encodingbytes = (1|2)
3226 The default is 2 for opentype and truetype format, 1 otherwise.
3227 Later on, it will become possible to have a type1 font in 2-byte
3228 (CID) encoding or a truetype font in traditional encoding (1-byte),
3229 but I have not covered all cases yet.
3233 ==============================================================
3234 Luatex snapshot-20070309 was released 20070309
3235 ==============================================================
3237 * The OCP debug information is removed again.
3239 * There is a new callback that I am quite excited about myself:
3243 A bit of text from the reference manual:
3244 --------------------
3245 This callback allows you to change the modify any lexical token that
3246 enters the \type{main_control} function before \LUATEX\ executes the
3249 Note: not all tokens can be intercepted yet, only those that are `seen'
3250 by \LUATEX's main control function. Supplemental tokens like the bodies
3251 of macro definitions and the right-hand side of register assignments
3252 are not seen. For now, this is intentional.
3255 function (table <token>)
3256 return table <token>
3260 Calling convention for this callback is bit more complicated then for
3261 most other callbacks. Initially, lua function will be called with the
3262 next token from \type{get_next()} as argument, represented as a small
3263 lua table. The function should either return a lua table representing
3264 a valid to-be-processed token, or something else like nil or an empty
3267 If your lua function does not return a table representing a valid
3268 token, it will be immediately called again with yet another token
3269 from \type{get_next()} as argument, until it eventually does return
3272 But if the function does return a usable token, then that token will
3273 be processed by \LUATEX. Afterwards, the function will be called
3274 again, but now without an argument. This is repeated until it stops
3275 returning tokens. Then processing reverts back to the other branch.
3277 The point behind that roundabout calling convention is that it
3278 allows the lua function to buffer tokens for various uses. That in
3279 turn makes it possible to do some really advanced things like
3282 Now about that table. The table that the function will receive
3283 contains four fields:
3285 \starttabulate[|l|i|p|]
3286 \NC Key \NC type \NC Explanation \NC\FR
3287 \NC cmd \NC string \NC A representation of \LUATEX's internal
3289 \NC chr \NC number \NC The command code modifier\NC\NR
3290 \NC cs \NC string \NC If the token came from a csname, this
3291 is that csname\NC\NR
3292 \NC mod \NC character \NC A single character string representing
3293 the current processing mode. One of {\bf v}ertical, {\bf h}orizontal,
3294 display {\bf m}ath, {\bf n}o, internal {\bf V}ertical,
3295 restricted {\bf H}orizontal, or inline {\bf M}ath mode.\NC\LR
3298 If you modify the table before returning it, then it is wise to return
3299 either a (\type{cmd}, \type{chr}) pair, or a \type{cs} string. That is
3300 because if both options are present, the pair has precedence and the
3301 string is ignored. On the return table, {\bf mod} is ignored always.
3304 I have no long example code yet and it is not as complete as one
3305 would want it to be because it is not intercepting everything that
3306 comes in, only the bits that are triggered by the main control
3309 I decided to do a fast snapshot release for two reasons:
3311 * It is one of the easier extensions to get started with if you want
3312 to learn a bit about lua programming
3314 * I would welcome feedback on the token interface, because it will
3315 be needed in other places as well, soon. I am still not sure
3316 whether converting the command to/from strings is worth it, for
3317 example. And maybe it would be less confusing if you could return
3318 a list of tokens instead of being called repeatedly?
3320 Here is the trivial example to get you started:
3323 callback.register('token_filter', function (t) return t end)
3327 ==============================================================
3328 Luatex snapshot-20070307 was released 20070307
3329 ==============================================================
3332 * Non-CID PostScript-based Opentype fonts are now combined over
3333 the entire document, and properly subsetted. The code is
3334 borrowed from xdvipdfmx with some minor adjustments
3336 Adding support for CID-keyed OpenType fonts would not be hard
3337 but at the moment I lack example input (and incentive).
3339 * A small extension to the virtual fonts structure: you can use
3341 f.fonts[1] = { 'id' = 38}
3343 to do a backreference to a previously defined font. This saves quite
3346 * There was a bug in the handling of \leaders in the output whereby
3347 it's width was taken to be twice what it should be while writing
3348 to the PDF, fixed now.
3350 * The font inclusion code is cleaned up a bit by Hartmut.
3352 * Some compilation problems were fixed.
3354 * There is (quite a bit of) debugging information printed out when
3355 OTPs are in use, because I am tracking down a bug reported by Idris.
3357 The input of each and every OTP step is shown on the terminal in
3360 [57902][1568][58423][1568][58408][1568][58921]
3362 those are the decimal values of ocp i/o characters. If you don't
3363 need them, don't worry about it.
3365 ==============================================================
3366 Luatex snapshot-20070302 was released 20070302
3367 ==============================================================
3369 * The 'snapshot version' banner is now calculated dynamically
3370 at build time. This aids in figuring out what binary people
3371 are actually running, but it can possibly break the build on
3372 systems that do not have a `date` command.
3374 * The do_vf() function that checks for virtual font existance
3375 is now run immediately after the font definition instead of
3376 being postponed until characters are output.
3378 * The 'define_font' callback interface has changed a little.
3380 retval = function (name,size,fontid)
3382 where fontid is the internal font number of the font that
3383 is currently being defined, and retval can be either a table
3384 (as before) or a different, previously defined fontid. This is
3385 useful if a previous definition can be reused instead of
3386 creating a whole new font structure.
3388 * The internal font data structure has been redone. Glyph index
3389 inside a font is now handled by a sparse array, so that use
3390 of e.g. 0xFB01 (fi-ligature) no longer creates a 64000+ entries
3393 * The internal cache-ing of font metric information is turned
3394 off completely, because it was based on the assumption that
3395 name + size were a unique identifier for a font. This can no
3396 longer be guaranteed.
3398 * word boundary processing now works OK again, thanks to the
3399 introduction of two virtual characters in the font table
3400 definition. Besides the normal numeric entries in the
3401 f.characters table, there can now also be two string keys:
3402 "left_boundary" and "right_boundary". The ligatures and kerns
3403 of the 'left_boundary' character are used for the pre-word
3404 boundary processing, ligatures and kerns between characters
3405 and 'right_boundary' are used for the post-word processing.
3407 * Lua font table references are no longer cached by the
3408 executable ,in order to preserve memory. (the only downside
3409 is that font.fonts[] access is now slower because of the need
3410 to recreate the lua table).
3412 * There are other some small changes to the font table formats.
3413 Please see the manual for details.
3415 * A 'real' font can now still have virtual characters if they
3416 are loaded via lua. Just set the 'commands' section and/or
3417 the 'fonts' array to your liking, and it should work out.
3419 If you have created no 'fonts' array at all, then the default
3420 font (indentifier '1') is the current font, so that you
3421 can create virtual duplicates of already existing characters.
3423 Note: this does not work the other way. There can not be
3424 'real' characters in a virtual font!
3426 * Truetype-based opentype fonts no longer require Acrobat 7
3427 t(hey are now written out as if they are normal truetype).
3429 * A lua init script can now set 'texconfig.formatname' and/or
3430 'texconfig.jobname'. If ther is no file or format specified
3431 on the commandline, then, if, one of those keys is present,
3432 that key will be used instead of simply quitting with an
3435 * Placement of boxes and rules in right-to-left mode is debugged,
3436 and now seems to work ok.
3438 * Virtual font loading is debugged.
3440 * Some memory leaks are resolved
3442 * HZ font expansion should work ok again, but is not tested.
3444 * a few of the warning during opentype loading have been removed
3445 because the problems are rather harmless and turned out to be
3446 triggered by almost every font.
3449 ==============================================================
3450 Luatex snapshot-20070218 was released 20070218
3451 ==============================================================
3453 * The pdftex stuff is now updated to 1.40.3
3454 (and on top of that, it still has those extra patches announced in
3457 * The virtual font parser is debugged and now appears rather stable.
3459 * There is one extra virtual command:
3462 {"slot", 1, 97}, -- place character 97 'a' in local font 1.
3465 This is just a shortcut for {"font",1}, {"char", 97}
3467 * Some small memory leaks have been fixed. Luatex does not leak big
3468 time, but I'd like to get back to valgrind reporting '0 out of 0',
3469 instead of the current 800 bytes or so (that is a slow process).
3471 * You can read a truetype or opentype font from within lua code
3472 using font.read_ttf() or font.read_otf(), respectively.
3474 This feature uses a fair bit of the fontforge code, making the
3475 binary rather a bit larger than before. Just so you know.
3477 Apple (AAT, as well as encoding) support is still largely missing,
3478 and bitmap-only and old Multiple-Master truetype fonts are not
3479 supported at all (and never will be).
3481 The output format is (shadily) documented in the reference manual.
3482 At the moment, it very closely resembles the internal font stucture
3483 that is used by fontforge.
3485 * LuaTeX can now write wide OpenType fonts to the PDF file.
3487 There is no subsetting support yet, and a ToUnicode CMap is also
3488 still missing, but nevertheless it is already somewhat useful. The
3489 rule is very simple: if a font uses code points above 255, then it
3490 is considered to be a `wide' font, and it will be written out as
3491 a Type0 CID-keyed font to the PDF.
3493 Caveat: Getting suitable metrics into LuaTeX can be a bit of problem
3494 right now, because font.read_otf() does not produce anything that
3495 can be fed back into define_font without extra processing. Hans has
3496 some experimental Lua code for ConTeXt (of course :-)) and that is
3497 how I know it works. You can expect a nicer interface soon,
3498 hopefully next week, in the form of a simplistic table conversion
3501 * I have started work on supporting Aleph's bidi typesetting in PDF
3502 mode as well, simple text seems to be largely ok. More complicated
3503 documents will no doubt still show some bugs, but fixing those will
3504 be easy (once they are discovered). Exactly what happens with specials
3505 is not yet investigated.
3507 * Omega's (16-bit) wide virtual fonts now work OK in PDF mode. This
3508 means that many Aleph files can now be run in PDF mode directly.
3509 (the documents that use UTF-8 input encoding)
3512 ==============================================================
3513 Luatex snapshot-20070202 was released 20070202
3514 ==============================================================
3517 * The pdftex stuff is now updated to 1.40.2, and on top of that, it has
3519 - an extra patch from Han The Thanh that adds a primitive to control
3520 the merging of fonts from external pdf images (\pdfreplacefonts),
3521 and a bugfix for virtual font handling.
3523 - an extra patch by Hartmut Henkel that removes a number of malloc()s
3524 and free()s from the calls to the compression library, thereby
3525 making luatex run a bit faster.
3527 * luatex now happily accepts the following low-level syntax:
3529 \font\myfont = <general text> <at specifier>
3531 It feeds the <general text> to either kpathsea or a lua script for
3532 further processing after stripping the braces.
3534 In itself, this is not all that useful, but the reason for this
3535 syntax extension is that it paves the road for a macro package
3536 to do something like this:
3538 \font\myfont = {font="Times New Roman", color="\darkred",
3539 encoding="ec", features="liga", size=10bp}
3541 without having to resort to system-specific quoting mechanisms.
3542 Macro (and other) expansion takes inside the braced argument.
3544 (I am considering adding this extension to \input as well).
3546 * It is now possible to define a font into the font.fonts[]
3547 directly from lua, but becayse use is limited, I am only
3548 mentioning it to be complete.
3551 <number> id = font.define(<table> font)
3553 * There is a (not very reliable yet) virtual font parser accessible
3557 <table> vfdata = font.read_vf(<string> name, <number> size)
3559 The interpreter tries to give a reasonable representation of a
3560 virtual font file (the .vf file). Besides a few simple top-level
3563 designsize -- in scaled points
3565 name -- the file name
3566 checksum -- the vf checksum
3567 header -- the header comment (if any)
3569 it also has a top-level array 'fonts' wherein each item is a mini-
3570 array describing one of te mapped fonts. An example makes this
3573 "fonts" = { {"ptmr8a",655360}, {"psyr", 600000} }
3575 says that the first referenced font (index 1) in this virtual font
3576 is ptrmr8a.tfm loaded at 10pt, and the second is psyr.tfm loaded
3577 at a little over 9pt. These index numbers are used by the character
3578 command definitions that follow.
3580 At top level, there is a 'characters' array, just as for a normal
3581 font, except that each item has only two keys:
3583 "width" -- the tfm width (as stored in the .vf)
3584 "commands" -- an array of virtual font commands for a character.
3586 each of the items in the 'commands' array is itself a tiny hash.
3588 Each of those mini-hashes represents a single character packet
3589 command. Here is a 'commands' entry that contains every possible
3593 {"push"}, -- remember where we are
3594 {"right", 5000}, -- move right 0.08pt
3595 {"font", 1}, -- select the fonts[1] entry
3596 {"setchar", 97}, -- place character 97 'a'
3597 {"pop"}, -- go all the way back
3598 {"down", -200000}, -- move *up* about 3pt
3599 {"special", "pdf: 1 0 0 rg"} -- switch to red color
3600 {"rule", 500000, 20000} -- draw a bar
3601 {'special',"pdf: 0 g"} -- back to black
3605 * But the big news is that you can now define your own virtual fonts
3606 on the fly, by adding a few statements to the table returned to
3607 the 'define_font' callback.
3609 There are a few requirements:
3611 - The table has to have a top-level key 'type', and it's value
3614 The presence of this key with the specific value 'virtual'
3615 will trigger handling of the rest of the special virtual font
3616 fields in the table, but the mere existance of 'type' is
3617 enough to prevent luatex from looking for a virtual font
3620 Therefore, this also works 'in reverse': if you are absolutely
3621 certain that a font is not a virtual font, assigning the value
3622 'base' or 'real' to 'type' will inhibit tex from looking for a
3623 virtual font file, thereby saving you a disk search.
3625 - There must be a top-level 'fonts' array, as explained above.
3626 Any fonts that are not yet known to luatex at that moment,
3627 will be loaded automatically (Warning: do not ever use a font
3628 in 'fonts' with the same name you will return in the table you
3629 are defining right now!).
3631 - Each and every character in the fonts needs to have a 'commands'
3632 key, as explained above.
3634 The main point behind these restrictions is that a font is
3635 *either* a base font *or* a virtual font. It cannot be both
3639 ==============================================================
3640 Luatex snapshot-20070126 was released 20070126
3641 ==============================================================
3644 * Underscores in pascal identifiers are now retained.
3646 This took quite a bit of work. The web2c conversion tools
3647 needed only small adjustments, but most of the existing C
3648 code depended on the removal of the underscores. I had to
3649 go through changing many lines. 99% of all identifiers are
3650 now written the same on the pascal side as on the C side.
3651 This makes writing interface code quite a bit less confusing.
3653 Not everything is completely clean yet, because I did
3654 not want to change the web2c-specific C files. I often
3655 took the other approach and removed the underscores
3656 from the web2c options (like 'parsefirstlinep') in the
3657 change file instead. Ugly, but predictable.
3659 There is about a dozen or so of #defines left, that map
3660 memoryword -> memory_word
3664 * The virtual font parsing and interpreting is now done in C.
3665 (this is because it needs to be interfaced with the lua-based
3668 * I am in the process of merging: the VF stuff; the TFM stuff;
3669 the lua font loading; and the pdftex font backend into one
3670 interface, so there were some smallish changes relating to
3671 that as well. Nothing worth mentioning just yet except that
3672 luatex now will read "ovf" files as well as "vf" files.
3674 * There are a few really small bugfixes for bug reports I received
3675 on this list and by email.
3677 ==============================================================
3678 Luatex snapshot-20070119 was released 20070119
3679 ==============================================================
3681 The largest new bit is the existence of a font.fonts array, that you
3682 can use to query/adjust the internal defined tex fonts. See the manual
3685 Two small new lua extensions are added as well:
3687 * os.setenv() -- to change the environment
3688 * os.exec() -- a non-returning os.execute()
3690 And a bit of cleanup in the commandline processing.
3693 ==============================================================
3694 Luatex snapshot-20070117 was released 20070117
3695 ==============================================================
3697 * the pdftex core is updated to 1.40.1, and web2c to 7.5.6
3699 * the pdftex-specific documentation is removed
3701 * lua lpeg library updated to 0.4
3702 ( http://www.inf.puc-rio.br/~roberto/lpeg.html )
3704 * the C part of the lua md5 library is added to the binary
3705 ( http://www.inf.puc-rio.br/~roberto/md5/md5-5/md5.html )
3707 * --luaonly now puts the script itself at arg[0], and
3708 preceding commandline items in the negative indices
3709 (instead of starting the count at zero).
3710 This new approach is compatible with the standalone lua
3714 ==============================================================
3715 Luatex snapshot-20070107 was released 20070107
3716 ==============================================================
3718 Hot on the heels of 20070105, a new snapshot. It turns out
3719 that using the callback to define a font broke all ligatures.
3720 This snapshot fixes that, and it has a few minor updates to
3721 the manual. Next shapshot will be after the inclusion of
3724 ==============================================================
3725 Luatex snapshot-20070105 was released 20070105
3726 ==============================================================
3728 * the calculations that converted lua strings into tex units
3729 were horrendously wrong, this was discovered by Pawel.
3731 * io.lines() was still using the old, line ending sensitive,
3732 code from the lua core distribution
3734 * The main font memory is allocated as needed^(1) instead of
3735 statically pre-allocated.
3737 * ligatures and kerns are separated completely from each other,
3738 so use of \noligatures no longer inhibits kerning as well
3740 * Metrics can be loaded using a callback: 'define_font'.
3741 The value returned should be a lua table representing a tfm
3744 * there is a new lua table: font. It has one function:
3745 font.read_tfm() that returns a table reprentation of the tfm
3746 contents, for use with the above mentioned callback
3748 * I dropped suppport for "Level 1" OFM files. I would like
3749 to have a try at those extended font files, but I lack
3750 examples (fonts nor documents). I am not even sure such
3751 fonts have ever existed in the 'real world'.
3755 ==============================================================
3756 Luatex snapshot-20061208 was released 20061208
3757 ==============================================================
3759 * There is a new switch: --safer. This disables a number of lua
3760 functions that are more or less dangerous (a detailed list is
3763 * Two longstanding bugs have been fixed: \latelua works once
3764 again (patch by Hartmut) and a bug that caused mysterious crashes
3765 turned out to be a problem inside the paragraph builder
3766 (reconstitution of ligatures)
3768 * Six new string iterators have been added to the string library:
3769 string.characters (one 1-letter string)
3770 string.bytes (one byte)
3771 string.characterpairs (two 1-letter strings)
3772 string.bytepairs (two bytes)
3773 string.utfcharacters (a one-character utf-8 string)
3774 string.utfvalues (a unicode code point number)
3776 * The top 256 values of the unicode range (starting at hex
3777 value "10FF00) are now reserved for byte output. Characters
3778 in that range will be written by luatex after substracting
3779 that offset. The net result is that \char"10FFA9 is written
3780 as byte value hex A9 = decimal 169 = copyright sign in latin1
3782 This trick allows byte-oriented output to \pdfliterals and
3783 \specials, but should be considered very experimental.
3785 * There is a new callback called 'process_input_buffer' that can
3786 be used to mutate the line buffer just before LuaTeX actually
3787 starts looking at it.
3789 * The statistics table now has readable items
3791 statistics.lasterrorstring
3792 that represent TeX's current input id and the last error string
3794 * The show_error_hook callback no longer receives any arguments
3795 * There is a new switch: --safer. This disables a number of lua
3796 functions that are more or less dangerous (a detailed list is
3799 * Two longstanding bugs have been fixed: \latelua works once
3800 again (patch by Hartmut) and a bug that caused mysterious crashes
3801 turned out to be a problem inside the paragraph builder
3802 (reconstitution of ligatures)
3804 * Six new string iterators have been added to the string library:
3805 string.characters (one 1-letter string)
3806 string.bytes (one byte)
3807 string.characterpairs (two 1-letter strings)
3808 string.bytepairs (two bytes)
3809 string.utfcharacters (a one-character utf-8 string)
3810 string.utfvalues (a unicode code point number)
3812 * The top 256 values of the unicode range (starting at hex
3813 value "10FF00) are now reserved for byte output. Characters
3814 in that range will be written by luatex after substracting
3815 that offset. The net result is that \char"10FFA9 is written
3816 as byte value hex A9 = decimal 169 = copyright sign in latin1
3818 This trick allows byte-oriented output to \pdfliterals and
3819 \specials, but should be considered very experimental.
3821 * There is a new callback called 'process_input_buffer' that can
3822 be used to mutate the line buffer just before LuaTeX actually
3823 starts looking at it.
3825 * The statistics table now has readable items
3827 statistics.lasterrorstring
3828 that represent TeX's current input id and the last error string
3830 * The show_error_hook callback no longer receives any arguments
3832 * The statistics table now has readable items
3833 statistics.luabytecodes
3834 statistics.luastates
3835 statistics.luabytecode_bytes
3836 statistics.luastate_bytes
3837 for memory statistics reporting
3840 * The statistics table now has readable items
3841 statistics.luabytecodes
3842 statistics.luastates
3843 statistics.luabytecode_bytes
3844 statistics.luastate_bytes
3845 for memory statistics reporting
3848 ==============================================================
3849 Luatex snapshot-20061204 was released 20061204
3850 ==============================================================
3852 * The LuaTeX interpreter can now be run as a standalone lua script
3853 processor, by using a commandline like this:
3855 luatex --luaonly=luatools.lua
3857 * Luafilesystem (http://www.keplerproject.org/luafilesystem/ ) is
3860 * There are a total of eight new file discovery callbacks:
3869 this enhances the orthogonality of the callback system, nothing
3870 fundamental is changed.
3872 * There is a new callback called 'process_input_buffer' that can
3873 be used to mutate the line buffer just before LuaTeX actually
3874 starts looking at it.
3876 * The 'reader' and 'close' functions from 'open_read_file' now
3877 receive the table they are defined in as a function argument,
3878 that can be used as a per file localized data store.
3880 * Updated the Lua to the latest 5.1.1, with all known bug patches
3881 from the website applied as well
3883 * Runtime autoloading of lua .so files is now off on all platforms.
3885 * The statistics table now has readable items
3887 statistics.linenumber
3888 that represent TeX's current file name and line number
3890 * The support for user-defined type3 font .pgc files and the
3891 associated 'read_miscfonts_file' callback has been removed.
3892 (nobody used it anyway)
3894 * General cleanups to the source tree and build process.
3896 ==============================================================
3897 Luatex snapshot-20061023 was released 20061023
3898 ==============================================================
3900 * there was a missing callback: find_font_file
3901 * program_invocation_name was not set
3902 * buf_size could not be more that 300k
3905 ==============================================================
3906 Luatex snapshot-20061013 was released 20061013
3907 ==============================================================
3909 Last friday I uploaded a new snapshot and today I finally
3910 finished updating the manual to go with it. The changes all
3911 relate to startup, file i/o, and callbacks. The main achievement
3912 is: you can now run luatex without it *ever* initializing kpathsea.
3914 Because I am lazy, I have checked in the pdf of the manual
3915 as well, so that I can say: Please look at
3917 https://foundry.supelec.fr/plugins/scmsvn/viewcvs.php/manual/
3918 /luatexref-t.pdf?root=luatex&rev=148&view=log
3920 for all the details. :-)
3922 ==============================================================
3923 Luatex snapshot-20061002 was released 20061002
3924 ==============================================================
3927 * Some infrastructure changes:
3929 libs/slnunicode-0.9.1/ renamed to libs/slnunicode/
3933 (zziplib is using a different version of autofoo. I know I have
3934 messed up something in the build process, but the bit we need
3935 compiles ok so I've postponed attempting to fix it)
3937 * The callback logic has changed quite a bit.
3939 - all callbacks are now only possible in lua state 0.
3941 - The callback 'input_line' has disappeared, and is replaced by
3942 'open_read_file'. One of the return values of that callback
3943 is a table that defines a 'reader' function for line reading.
3945 See the manual for further information on this.
3947 - There are some new callbacks for the reading of various binary
3948 files. The current ones are:
3950 "read_ocp_file", "read_vf_file", "read_data_file", "read_font_file",
3953 The rest of the file types will follow soon (fonts, enc files, and
3956 - There are also some new callbacks that 'find' a file's pathname:
3958 "find_truetype_file", "find_type1_file", "find_image_file"
3960 here too, more will follow later.
3962 - the functions from io. that were copied to texio have been removed
3963 again. The new callbacks do not pass file pointers around, so
3964 they ere not longer needed
3966 - the 'open_write_file' is temporarily unavailable
3968 * startup.lua is now always loaded into lua state 0
3970 * The luazip library from kepler is linked in, so there the table 'zip'
3971 is accessible from all lua states.
3973 ==============================================================
3974 Luatex snapshot-20060922 was released 20060922
3975 ==============================================================
3977 * The texio table has gained a new function:
3979 tex_file = texio.open(filename)
3981 returns a file handle of a type that luatex can use
3982 internally (the return of io.open is unusable in callbacks
3983 because it will be garbage-collected at a random time)
3986 * In related news, there are two new callbacks you can define:
3988 callback.register('open_read_file', f)
3989 callback.register('open_write_file', f)
3991 where your function should have the following conventions:
3993 function f (number id_number, string asked_name)
3994 return boolean success, string actual_name, tex_file filep
3997 id_number: zero for the log or \input files or TeX's \read
3998 number incremented by one (\read0 becomes 1).
3999 asked_name: the user-supplied filename
4001 success: return false for error, true otherwise.
4003 The remaining two items are only looked at if you return true:
4005 actual_name: the true filename used (with extension!)
4006 filep: a file object opened though texio.open()
4009 * The tex.print function has an extra optional parameter:
4011 tex.print(ctt_id n, strings ...)
4013 This prints the strings using the catcode regime defined by
4014 \catcodetable n (assuming n is valid, see below)
4016 * The new function tex.sprint has the same lua conventions as
4017 tex.print, but behaces slightly different on the tex side:
4019 ** tex does not switch to the 'new_line' state (this implies
4020 that leading spaces are not ignored)
4021 ** no \endlinechars are inserted
4022 ** trailing spaces are not removed from the argument
4024 * Catcode tables are a completely new feature, that allows
4025 you to switch the current catcode regime in one simple
4028 \catcodetable <count>
4030 Switches to the use of a different set of catcodes (table),
4031 that is stored under the number <count>. Such a table has to
4032 be previously created using one of the two command below, or
4033 the number 0 (which is pre-inititialized)
4035 This command obeys normal grouping rules.
4037 \initcatcodetable <count>
4039 creates a new, global, independent catcode table with catcodes
4040 matching the code that are predefined by initex (tex -ini).
4042 This allocation is global
4044 \savecatcodetable <count>
4046 copies the current set of catcodes to a new, global, table
4047 with id number <count>. The definitions in this new table
4048 are all treated as if they were made in the outermost level.
4050 This allocation is global
4052 At the end of each grouping level, items within all existing
4053 catcodetables are restored, regardless of which one is the
4054 currently active table.
4056 Catcode table numbers cannot be larger than 0xFFFFFFF (228-1)
4058 * There is a new lua table: lua. It contains three read-only
4061 lua.id -- the id number of the instance
4062 lua.version -- a luatex version identifier string
4063 lua.startupfile -- the full filename (+path) of startup.lua
4065 and it also contains a read/write array:
4067 lua.bytecode[] -- lua executable bytecode
4069 This array can be used to save and restore lua functions
4070 across lua states. The accepted values are for assignments
4071 are functions and nil. Likewise, the retrieved value is
4072 either a function or nil.
4074 The contents of the lua.bytecode array is stored inside the
4075 format file, so it can also be used to preload lua code.
4078 * The format files are quire a bit smaller than before
4081 ==============================================================
4082 Luatex snapshot-20060915 was released 20060915
4083 ==============================================================
4085 * There is a new TEX primitive: \formatname. It is similar
4086 to \jobname (read-only). In initex, the expansion is empty,
4087 otherwise the expansion is the same as the \jobname from
4090 * the lua "tex" table has been expanded with a few of the 'convert'
4091 codes (read-only). The supported ones at this moment are:
4098 tex.pdfnormaldeviate
4105 This list looks haphazard, but it really is not. These are
4106 all the cases of the 'convert' internal command that do not
4107 require an argument.
4109 * The metatables of the subtables like tex.dimen[] etc. are now
4110 adjustable from lua (not that I recommend doing that;-)).
4112 * On the lua side, there is a new global value: "luaid"
4113 It holds the internal id number of this \directlua instance.
4115 * There is a new lua table, "callback", that has the single function
4116 "callback.register", used to register callbacks. This replaces
4117 the previous concoction (see my message about snapshot 20060901).
4120 callback.register(<callback name>,function (f) ... end)
4122 where the <callback name> is for the moment, either "input_line"
4123 or "show_error_hook".
4125 This function internalizes the callback function in such a way
4126 that you no longer have to worry about \luacallback (which has
4127 been removed), nor does it matter if you redefine a function
4130 The internal testing for callback presence is also quite a bit
4131 faster, thanks to this change. Callback assignments are global
4132 and the "input_line" always takes effect starting on the next
4133 input line to be read from an actual file.
4136 * \detokenizedlua has been removed. It is functionally replaced by
4137 the new function call tex.write("").
4139 Each argument to each call of tex.write () counts as an input
4141 ** all catcodes on that line are either 'space' (for " ") or
4142 'character' for all others.
4143 ** there is no \newlinechar appended.
4145 * The implementation of tex.print() has changed as well:
4147 ** the very last tex.print() line from a \directlua
4148 will no longer have a trailing \newlinechar
4149 (this is very convenient when \directlua is used
4151 ** tex.print() is quite a lot faster than before, and the total amount
4152 of returnable text from a \directlua is now only limited by
4153 available system RAM. However, each separate tex.print ()
4154 argument has to fit in TeX's input buffer.
4156 * The new primitive \luastartup can be set inside the format file
4157 to specify the lua instance number in which a possible runtime
4158 startup.lua script is executed (initex always uses 0)
4160 * There is a new primitive \scantextokens. Differences with
4161 eTeX's \scantokens are:
4163 ** the last line (usually only) from \scantextokens
4164 does not have a \newlinechar
4166 ** \scantextokens never raises an eof error.
4168 This means things like
4171 {\scantextokens{\ifnum1=1 true}\else false\fi}
4173 are legal input (but potentially dangerous!).
4176 local d = tex.dimen["unknowndimen"]
4177 'd' will now become "nil" instead of raising an error
4180 tex.dimen["unknowndimen"] = d
4181 is still (and probably will remain) illegal
4183 ==============================================================
4184 Luatex snapshot-20060908 was released 20060908
4185 ==============================================================
4187 * BIG CHANGE: \directlua now runs \scantokens internally.
4189 There is no longer a need to call scantokens yourself, the
4190 tex.print() output is now fed straight into a pseudo file.
4191 This is quite a bit faster as well as easier to use, but
4192 just in case you want it, the old behaviour is still present,
4198 * The texio library now has its own (partial) set of I/O commands,
4199 so that the standard lua io library is back to the distributed
4200 state (no more patched garbage collector)
4202 Note: This is really a very small change (it should not have any
4203 impact on wellbehaved input files), but I attempt to be complete
4204 in these notes, since there is no official documentation yet.
4207 * There is a new standard library available: kpse
4209 The most important function in that library is find_file:
4211 string = kpse.find_file(string filename
4213 [,boolean mustexist])
4215 both "type" and "mustexist" are optional, so the function
4216 has from one upto three arguments.
4218 "type" is like the '-format' argument of kpsewhich. You can
4219 run 'kpsewich -h' for a list. The default type is "tex".
4221 "mustexist" is like '-must-exist', and the default is false.
4222 If you specify "true" (or a nonzero integer), then the kpse
4223 library will search the disk as well as the ls-R databases
4225 The new library also has three other functions that map
4226 straight to kpsewhich commandline options:
4228 string = kpse.expand_path(string)
4229 string = kpse.expand_var(string)
4230 string = kpse.expand_braces(string)
4232 * There is a second callback possibility:
4234 texio.show_error_hook(string message,
4235 string|number indicator,
4238 This command is run from inside the TeX error function, and the
4239 idea is to allow you to do some extra reporting on top of what
4240 TeX already does (none of the normal actions are removed).
4242 "message" is the formal error message tex has given to the
4243 user (the line after the "! ")
4244 "indicator" is either a filename (when it is a string) or a
4245 location indicator (a number) that can means lots of different
4246 things like a token list id or a \read number.
4247 "lineno" is the current line number
4249 This is an investigative item only, comments are welcome but do
4250 not take the syntax seriously.
4252 The final goal IMO is the total replacement of TeX's error
4253 handling routines, but that needs lots of adjustments
4254 in the web source because TeX deals with errors in a somewhat
4255 haphazard fashion (it needs unification first). The current
4256 hook is only for 'testing the water'.
4258 * It is now possible to use named items in the
4264 subtables, so you can have
4266 tex.count.scratchcounter = 0
4267 local enormous = tex.dimen["maxdimen"]
4269 Luatex looks up the value for you on the fly. You have to use a
4270 valid \countdef (or \dimendef, or \toksdef), anything else will
4273 In a normal TeX file, you don't do \dimen\maxdimen, but the
4274 lua syntax seems to be a bit cleaner to me. The intention is
4275 to evntually also allow \chardefs and macros that expand
4276 into a number (todo)
4279 * The tex table has also been extended with a large list of internal
4280 parameters (partially read/write). It is possible to access
4281 about every primitive that you can use after \the *and* is a
4282 single token. So there is
4284 integer = tex.tracingcommands (\the\tracingcommands)
4285 integer = tex.prevgraf (\the\prevgraf)
4286 string = tex.output (\the\output)
4288 etc. for all of the internal parameters, but not the items
4289 that need extra arguments (like \the\scriptfont )
4291 The subset comprising simple integer and dimension registers
4292 are writable as well as readable (stuff like \tracingcommands
4295 The fact that both lists are still quite limited is a result of
4296 the very different types of things that can occur after \the and
4297 also on the LHS of an assignment. The remaining primitives will
4298 be filled in when there is a real need or implementation becomes
4299 simple, whichever comes first.
4303 ==============================================================
4304 Luatex snapshot-20060901 was released 20060901
4305 ==============================================================
4307 All changes are related to lua this time, and most are quite unstable
4308 / experimental. But first the things that are stabel/fixed bugs:
4310 * A VF loading bug that turned up in some of Hans' fonts
4313 * A small series of bounds checking fixes to \ocplist has been
4314 added to prevent the system from crashing due to array indexes
4315 running out of bounds.
4317 * The Lua file searching paths are now fixed. The search path for lua
4318 script files now contains the following items (tried in order)
4319 1. the local directory:
4321 (for document-specific files)
4322 2. the items from the expansion of kpathsea's $TEXMFSCRIPTS variable,
4323 but only the parts containing 'lua' as a subpath:
4324 $TEXMFSCRIPTS<lua>/?.lua
4325 $TEXMFSCRIPTS<lua>/?/init.lua
4326 (for format-specific files)
4327 3. the $SELFAUTOPARENT sibling directory named 'lib'.
4328 $SELFAUTOPARENT/lib/lua/5.1/?.lua
4329 $SELFAUTOPARENT/lib/lua/5.1/?/init.lua
4330 (for files that are not related to tex)
4332 The search path for dynamic libraries has only
4333 1. the local directory:
4335 (for document-specific files)
4336 2. and the $SELFAUTOPARENT sibling directory named 'lib'.
4337 $SELFAUTOPARENT/lib/lua/5.1/?.so
4339 (of course the extension is .dll on windows, but .dlls do not
4340 work at the moment so it will not do you much good)
4342 * There are two functions available within a new table called
4344 texio.write (luastring)
4345 texio.write_nl (luastring)
4346 both write the luastring to the same location(s) TeX writes
4347 its stuff. So if \batchmode is on, it writes only to the
4348 log, inside a \write, it prints to the current write file,
4351 A read|write interface to TeX's "file selector" will
4354 * At startup, luatex searches for a script named
4356 in the path list I explained above. If such a file exists, it is
4359 This happens right before the first input file needs to be opened
4360 (that is after format loading, but before any \everyjob tokens).
4362 From within the script, you can check the value of
4366 that is the 'format identification' as used by TEX. When the variable
4367 is equal to nil, luatex in in 'initex' mode, otherwise it will be
4368 something like: " (format=plain 2006.9.1)"
4371 Now for the experimental portion: callbacks. Here is what I have done
4374 * The main reason for wanting startup.lua is file (input) re-encoding.
4375 For this purpose, it is now possible to set up a callback for
4378 If you attach a Lua function to
4382 then from the next input line onwards, luatex will run that
4383 function whenever it needs a new input line from a text file.
4385 Your function will receive a file handle as argument, and
4386 should return either a string or nil (with nil signalling that
4387 the end of file has occurred).
4389 The trivial case is simply this:
4394 texio.input_line = reader
4397 Warning: The implementation is not totally finished yet. For the
4398 moment the file handle ("f" in the example) is a normal lua file,
4399 with a simple but important restriction: you cannot alter its value.
4400 You cannot f:close() it, or assign it a different value. luatex
4401 will eventually close the file itself.
4403 The restriction is a side-effect of a synchronisation problem with
4404 the lua garbage collector. Because of this, it also was necessary
4405 to turn off the automatic file closing code for normal lua io
4406 files (In other words: you have to close yourself all the files
4407 you opened yourself, and you should not close any files you did
4410 In the near future, "f" will become a special 'texio' file object
4411 and the needed functionality from the normal io library will be
4412 reimplemented. Along with that change, there will also be a callback
4413 to open (i.e. find) files, and a simple interface to the compiled-in
4414 kpathsea to use within that callback.
4417 ==============================================================
4418 Luatex snapshot-20060825 was released 20060825
4419 ==============================================================
4421 The main change in this snapshot is that it uses far less memory.
4422 luatex -ini on my linux machine went from 326Mb (last week) to
4423 93Mb (now), and "texexec luatex" now ends at 184Mb instead of
4426 This is achieved by two big changes:
4428 * The \mathcode, \delcode, \catcode, \sfcode, \lccode and \uccode
4429 tables are now sparse arrays that are implemented in C. They
4430 are no longer part of the TeX "equivalence table" and because
4431 each had 1.1 million entries with a few memory words each, this
4432 makes a major difference.
4434 See mathcodes.c and textcodes.c if you are interested in the
4435 gory details, but be warned: the code is still extremely
4436 rough and ugly. In particular, the dump and undump routines
4437 are far from optimal, resulting in somewhat larger format files
4438 than before (approx 1.3Mb larger with unicode-letters loaded,
4439 10k without); and the assignments do not show up when using
4440 the etex tracing routines \tracingassigns and \tracingrestores
4441 (code simply not written yet)
4443 * Single-character commands are no longer "special" internally,
4444 they are stored in the hash just like the multiletter csnames.
4447 ==============================================================
4448 Luatex snapshot-20060818 was released 20060818
4449 ==============================================================
4451 The snapshot is up to par with Aleph-RC4 (from texlive devel)
4452 and the latest pdftex beta (even newer than 20060811). However,
4453 there are some differences, to summarize:
4455 * There is no pool file (all strings are embedded)
4457 * -8bit and -translate-file are silently ignored
4459 * There is no mltex nor enctex (conflicts with aleph)
4461 * The tex functionality is always present and enabled
4462 (but see below about TeXXeT), so the asterisk or
4463 -etex switch for initex is not needed
4465 * "plus 1 filllllllll" does not generate any errors from TeX
4467 * TeXXeT (from eTeX) is not present, so the primives
4475 * The experimental pdftex regex match operations are removed,
4476 because that feature does not make much sense when lua is
4477 available so the primitives
4482 * The input translations from Aleph are not implemented, the
4483 16 related primitives are all missing
4489 \noDefaultOutputMode
4492 \DefaultInputTranslation
4493 \noDefaultInputTranslation
4496 \DefaultOutputTranslation
4497 \noDefaultOutputTranslation
4498 \noOutputTranslation
4500 All file IO assumes UTF-8, except that all the low-ascii
4501 controls except TAB, CR en LF are written to the terminal
4502 using ^^ notation (even these are binary in the log file).
4504 * Input characters can use the full range of Unicode,
4505 but it probably only makes sense to use values above
4506 the base plane for \mathcode and \catcode assignments,
4507 since the fonts as well as the hyphenation patterns
4508 are strictly 16-bit still.
4511 \pdfpagewidth and \pagewidth,
4512 \pdfpageheight and \pageheight,
4513 \fontcharwd and \charwd,
4514 \fontcharht and \charht,
4515 \fontchardp and \chardp,
4516 \fontcharic and \charic,
4517 are all aliases of eachother.
4521 clears a marks class completely.
4523 * The experimental pdftex primitives
4528 and provided without the extra 'pdf' prefix, so they are
4536 * I probably forgot to mention some things :-)