fix getsup (HH)
[luatex.git] / source / texk / web2c / luatexdir / NEWS
2 This file is in the public domain.
4 ==============================================================
5 LuaTeX Release 1.0.3  was released 2017021514
6 ==============================================================
8 This is a minor upgrade and probably this version will go on texlive. There are a couple
9 of fixes and additions.
10 - We added a few a few more helpers in the pdf namespace (like set|get]gentounicode,
11   [set|get]omitcidset and set|get]decimaldigits. Some helpers were moved from the tex
12   to the pdf namespace.
14 - We added a build_page_insert callback for inserts so that one can for instance adapt
15   spacing on demand.
17 - On the agenda has been some more control over word start and end in hyphenation and
18   this is now possible via hyphenationbounds. We also updated the manual with some more
19   details.
21 - An old tracker item with respect to control over spacing around math was revived and
22   has resulted in mathsurroundmode (one can wonder how useful this is).
24 - We improved the resolution detection in included jpeg images.
27 - An ffi library has been added to luatex so that it is more in sync with luajittex. This
28   permits easy and flexible loading of libraries. Our policy is to make luatex as lean
29   as possible with no dependencies and this is a step towards that. Eventually we hope
30   to support all relevant platforms.
32 - The glue and skip register accessors have been improved as a step in freeing the user
33   from glue spec management.
35 - We added a few more getters and setters for nodes in order to get a more consistent
36   set.
38 - Irrelevant fields have been removed from the status table and an engine identifier
39   has been added.
41 - Of course there are numerous fixes and improvements but none of these have consequences
42   for the interfaces.
44 - The manual has been updated but will be improved over time.
49 ==============================================================
50 LuaTeX Release 0.95 for TeX Live 2016 was released 2016042515
51 ==============================================================
53 This is the official frozen TeXlive 2016 version.
54 - deleted 'beta' from the luatex_version_string
59 ==============================================================
60 LuaTeX Release 0.95 was released 2016040415
61 ==============================================================
63 This is a prerelease of the stable 1.0 version.
65 - glues now have gluespec merged in (idem math and insert)
66 - registers are still glue specs
67 - the spec field in glues are gone
68 - extra tex.setglue and tex.setmuglue
69 - obsolete dvi related dir fields removed
71 (if we are in time, it will be included in TeX Live 2016)
74 ==============================================================
75 LuaTeX Release 0.90.0 was released 2016032512
76 ==============================================================
78 This is the version that will go on TeX Live 2016
80 - mostly small bug fixes
81 - a few setters/getters added to the pdf namespace (were in the tex one before)
82 - a few patches to the lua interface macros
83 - a bit more control over protrusion edges
84 - no fundamental changes
88 ==============================================================
89 Luatex Release 0.89.4 was released 2016031100 
90 ==============================================================
92 Intermediary release. Several bugs fixed.
96 ==============================================================
97 Luatex Release 0.89.2 was released 2016022700 
98 ==============================================================
100 Intermediary release. Several bugs fixed.
103 ==============================================================
104 Luatex Release 0.89.0 was released 2016020500 
105 ==============================================================
107 No fundamental changes, just some fixes / improvements (and of course new bugglets).
109 - New backend things:
110  \pdfvariable pkfixeddpi = integer % > 0 : use only default dpi (so one can do with one high res instance)
111  \pdfvariable ignoreunknownimages = integer % > 0 : ignore missing and inject something empty (to be used with care)
112   and one can do this:
113  \edef\foo{\pdfvariable foo}
114  \def \oof{foo}
115  \ifx\foo\oof don't fool me\fi
116  (side effect of no longer aborting on missing, so one implement a catch)
121 ==============================================================
122 Luatex Release 0.88.0 was released 2016011500 
123 ==============================================================
125 This is a next step upto 0.90 and it has the following changes:
127 - mostly small bug fixes 
129 - a few setters/getters added to the pdf namespace (were in the tex one before)
131 - The current libraries under libs are now:
132   * poppler-0.40.0
133   * mpfr-3.1.3
134   * luajit-2.1.0-beta1
135   * gmp-6.1.0
136   * zziplib-0.13.62
137   * zlib-1.2.8
138   * lua52-5.2.4
139   * pixman-0.32.8
140   * libpng-1.6.21
141   * cairo-1.14.6
145 ==============================================================
146 Luatex beta-0.87.0 was released 2015121700 
147 ==============================================================
151 This is a next step upto 0.90 and it has the following changes:
153 - image data is no longer stored in the format (it was fragile anyway)
155 - pdf backend data generated when in ini mode is no longer stored in  the format
157 - (incomplete) \mag support removed from pdf backend (this functionality is
158   kept in dvi mode)
160 - there are a couple of improvements that should make luatex run a little bit faster
161   (but of course that depends on the job at hand)
163 - some further pending issues / cleanup has been done (but this is not reflected in the
164   interface)
166 - there is a new primitive \nospace:
168   \nospace=1   do now not inject glue for spaces (not even zero glue)
169   \nospace=2   inject zero glue for spaces
171 - there are new primitives \hpack, \vpack and \tpack that are like \hbox, \vbox and
172   \vtop but they don't trigger callbacks
174 - we no longer keep track of older math character and delimiter definition states,
175   but this should normally go unnoticed
177 - from now on only ^^XX, ^^C, ^^^^XXXX and ^^^^^^XXXXXX are supported so no funny odd
178   values (three and five)
180 - texio.setescape(0) disables escaping to terminal (a matter of taste)
182 - the (current) lc codes are now saved with the (current) language when patterns are
183   loaded unless one hs used \hjcode instead of \lccode; overloading of \hjcodes is
184   possible (but of course goes ahead of hyphenation which is delayed till parbuilding or
185   packaging
187 - active characters can now be set with: \letcharcode123=\foo (experimental)
189 - there are some experimental new primitives but these will be described when they are
190   stable (currently being tested)
192 - there is more backend error reporting and all error messages adn warnings (the non-tex
193   ones) have been normalized
195 - of course there are the usual small fixes and additional setters and getters in libraries
196   (see manual)
199 ==============================================================
200 Luatex beta-0.85.0 was released 2015111400 (5550)
201 ==============================================================
202 -- roadmap
204 The 0.85 release is has a lot of changes. It is the prelude to 0.90 which itself is
205 a prelude to the 0.95 that will go on texlive 2016. The 1.00 release will happen
206 around the 2016 context meeting. After that 2.* will become the next experimental
207 branch (leading to 3.*). The most important changes between 0.80 and 0.85 are mentioned
208 below. For more information consult the manual.
210 -- the backend commands
212 There is a better separation between front- and backend code. Some of the generic
213 \pdf* commands have been promoted to core primitives (with different names), some
214 have been removes like ximagecolordepth and ximagebbox have been removed and
215 all that are left have been organized differently. The backend is now more abstract
216 and provides three primitives only
218   \pdfextension <keyword> <optional spec>
219   \pdfvariable  <keyword>
220   \pdffeedback  <keyword>
222 The first replaces \pdfannot and alike, the second replaces the variables that can
223 be sused to control behaviour, and the third accesses the read only variables. See
224 luatex-pdf.tex in the context distribution for a plain definition file.
226 The big advantage of the separation (basically core (lua)tex + extensions) is that
227 changes in the backend don't have consequences for the frontend and it's easier to
228 locate possible issues in the code. We might split a bit more at the lua end too.
230 -- nodes
232 The boundary, dir and localpar whatsits are now normal nodes. The xforms and ximage
233 whatsits are now a special kind of rule nodes (subtypes 1 and 2) and known as box-
234 and image resources (see manual). Also, empty rules are now a valid subtype (subtype
235 3) with related commands \nohrule and \novrule.
237 At the lua end one can now access the fields of a spec subnode directly in the parent,
238 which has the benefit of more control and robust assignments (no need to check for
239 writeability) while we keep the concept of shared glue specs (tex internals). By
240 staying close to traditional TeX the Knuthian documentation still applies in most
241 cases.
243 The pdf action nodes are now pdf_action whatsit nodes (so no longer a pseudo core
244 node).
246 You can get the node subtypes with the node.subtypes function which adds a layer
247 of abstraction (foo.subtype = "string" might be added in the future).
249 -- expansion
251 The hz optimization already only supported level 2 optimization, but now has a variant
252 3 that does only stretch glyphs and not kerns. Pending is a change where we go back to
253 percentages instead of fractions of em.
255 -- math
257 The old/new codepath has been checked and italic correction which is fundamental
258 different between the engines has been (partially) redone.
260 We now have \mathsurroundskip that replaces mathsurround when it's non zero.
262 The \mathtoptions (old 1) directive can be used for testing. This primitive is mostly for
263 ourselves and used for development.
265 The \Umathcharclass, \Umathcharfam and \Umathcharslot primitives can be used to fetch
266 properties of a math character.
268 The new \Uleft, \Uright and \Umiddle fence operators accept "height <dimen>", "depth
269 <dimen>" and the "noaxis" keyword as well the "exact" keyword for non-fitting ones. There
270 is also \Uvextension. Optionally one can specify a 'class'.
272 The \Udelimiter[under|over] and \U[under|over]delimiter primitives accept a width as well
273 as left, middle and right keywords (for non fitting ones). There is also \Uhextension.
275 The \abovewithdelimiter command accepts 'exact' as keyword (before the dimension) which nils
276 the excessive spacing. The normal vgaps still apply.
278 We have a new fraction primitive \Uskewed with a companion \Uskewedwithdelims. Optional
279 keywords are 'noaxis' and 'exact'.
281 There is a new directive \mathdisplayskipmode (esp for controlling the > 0 below skip check).
283 With \mathscriptsmode you can fix anchoring of scripts (as needed for chemistry).
285 The \Umathaccent commands accept a width and fraction argument.
287 -- hyhenation
289 The discretionary command now accept an optional "penalty <number>" specification
290 where the penalty will be stored with the node. Default is hyphenpenalty.
292 -- file io
294 texio.write/write_nl now writes to file if the first argument is a (valid) number
295 reference to a file opened at the tex end; you can now open 128 files from the tex end
296 (0..127) and the system command is no longer executed with 18
298 -- lua interface
300 The tex.<internal variable> is hopefully better now. The tex.get* also can handle
301 the built in registers. Especially prevdepth access should work out ok now.
303 -- and ...
305 As usual there are lots of small fixes, improvements, overhauls, small additions,
306 hopefully all mentioned in the manual.
308 -- warning
310 This version is probably not compatible with the macro package that you use as some
311 engine specific initializations need to take place (\pdf commands) and some node types
312 have been changed. We now have separated pdf backend commands and the only left
313 primitive categories are: core, (tex), etex and luatex, so no more pdftex, omega and
314 umath (where the distinction became to fuzzy). Of course you can still prefix.
318 ==============================================================
319 Luatex beta-0.81.0 was released 2015100722 (5350)
320 ==============================================================
324 * A couple of primitives are removed, renamed and/or promoted to core (luatex) primitives. 
325 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,
327    Updating to this version also might demand an update in the
328    macro package that you use!
330 Here we go:
332 % removed, can be done with callbacks if needed, one can define dimen dummies, like
334 \newdimen\pdfeachlineheight
335 \newdimen\pdfeachlinedepth
336 \newdimen\pdflastlinedepth
337 \newdimen\pdffirstlineheight
338 \newdimen\pdfignoreddimen
340 % removed, were already obsolete, one can \let them
342 \let\pdftexversion \luatexversion
343 \let\pdftexrevision\luatexrevision
344 \let\pdftexbanner  \luatexbanner
346 % promoted (from pdftex), so pdf prefix gone, one can \let them
348 \let\pdfnormaldeviate \normaldeviate
349 \let\pdfuniformdeviate\uniformdeviate
350 \let\pdfsetrandomseed \setrandomseed
351 \let\pdfrandomseed    \randomseed
353 % promoted (from omega), so pdf prefix gone, one can \let them
355 \let\pdfpagewidth \pagewidth
356 \let\pdfpageheight\pageheight
358 % redundant (etex wins over omega), so \font-less ones gone, one can \let them
360 \let\chardp\fontchardp
361 \let\charht\fontcharht
362 \let\charit\fontcharit
363 \let\charwd\fontcharwd
365 % promoted (from aleph)
367 \pagerightoffset
368 \pagebottomoffset
370 % promoted (from pdftex)
372 \ifincsname
373 \expanded
374 \quitvmode
376 % removed (from pdftex), so *pdf* ones gone, one can \let them
378 \let\ifpdfabsnum   \ifabsnum
379 \let\ifpdfabsdim   \ifabsdim
380 \let\ifpdfprimitive\ifprimitive
381 \let\pdfprimitive  \primitive
383 % promoted (from omega)
385 \pagedir
386 \bodydir
387 \pardir
388 \textdir
389 \mathdir
391 % promoted (from aleph)
393 \boxdir
395 % promoted (from pdftex)
397 \lpcode
398 \rpcode
399 \efcode
400 \leftmarginkern
401 \rightmarginkern
403 \tagcode
404 \letterspacefont
406 % promoted (from pdftex), so *pdf* ones gone, one can \let them
408 \let\pdfprotrudechars\protrudechars
409 \let\pdfadjustspacing\adjustspacing
411 \let\pdfnoligatures  \ignoreligaturesinfont
412 \let\pdffontexpand   \expandglyphsinfont
414 % promoted (from pdftex), so *pdf* ones gone, one can \let them
416 \let\pdfsavepos \savepos
417 \let\pdflastxpos\lastxpos
418 \let\pdflastypos\lastypos
420 % on the todo list are:
422 \pdfoutput         : \outputmode
423 \pdfmatrix         : will get a normal syntax, no weird { } parsing
425 \pdfcolorstackinit : might become obsolete
426 \pdfcolorstack     : might become obsolete
428 So, apart from a few, the \pdf* primitives now relate to the backend only.
430 % There is also a new primitive:
432 \hyphenationmin
434 This one determines the minimum word length (per language).
435  At the same time we moved the (ex)hyphenpenalties 
436 in the disc nodes so you can inject discretionaries with specific penalties.
438 There will also be an updated manual.
439 Hans
442 * new epdf.openMemStream(s,l,docid)
443 to create a pdf from a lightuserdata or  string.
444 (experimental, do not use in production.)
446 * uniform random generator in mplib is now specific for each numbersystem;
448 * too_precise implemented for binary number system;
450 * several bug fixes.
453 ==============================================================
454 Luatex beta-0.80.0 was released 20150319 (5195)
455 ==============================================================
457 * New library newtokenlib. It will replace the current token lib.
458 * Fixed a bug on the normal random generator for double/decimal/binary
459   number systems.
460 * Several others bugs fixed.
463 ==============================================================
464 Luatex beta- was released 20150122 (5140)
465 ==============================================================
467 * Fixed a bug in  mp.w with a wrong input that gives a seg. fault.
471 ==============================================================
472 Luatex beta-0.79.3 was released 20150121 (5130)
473 ==============================================================
476 * It's now possible with the MinGW compilers to build luatex and luajittex as DLL 
477   for Windows 32bit/64bit.  The files are:
478   libkpathsea-6.dll  luajittex.exe  luatex.exe  texlua52.dll  texluajit.dll
479   In the next release the script be updated; for the moment just add
480   "--enable-shared -disable-native-texlive-build " after --disable-all-pkgs 
481   in TL_MAKE. 
482   Building as DLL was tested only for Windows.
484 * When possibile  symbols in the exe are now hidden: 
485   this should avoid conflicts with the loading of dynamic shared object.
487 * several bugfixes and improvements. The patches for MetaPost
488   fix seg. faults occourred with wrong inputs.
489   The functions:
490    mp_get_numeric_value, mp_get_string_value, mp_get_boolean_value 
491   works if the value is a variable (i.e. not an internal variable, 
492   a loop variable and a macro argument);
493   only mp_get_numeric_value now has support for loop variable
494   and internal variable (but still  not for macro arguments).
497 ==============================================================
498 Luatex beta-0.79.2 was released 20141111 (5082)
499 ==============================================================
502 * WARNING: the structure of the format file is changed.
503   After  the  Web2C \TeX's magic constant: "W2TX"  there is now
504   a FORMAT_ID, a 32bit field that cannot be between 0 and 256 (included)
505   so that there are no conflicts with the preexisting  structure
506   of the format.
507   The value can be seen with --debug-format and currently is
508   907 (the sum of the values of the bytes of the ASCII string "don knuth").
510 * There is a new set of lua functions for StructElement and Attribute,
511   convenient (even if not indispensable) for tagged pdf.
514 * several bugfixes and improvements.
517 ==============================================================
518 Luatex beta-0.79.0 was released 20140328 (4960)
519 ==============================================================
521 * The luafontloader now returns 'tsidebearing' glyph values
522   for OT/TT fonts, if applicable.
524 * new lua variables: stats.luatex_hashtype, stats.luatex_hashchars,
525   stats.lastluaerrorstring; the luajittex string hash method is now
526   lua 5.1 compliant which gives better results for similar strings
528 * new lua functions: tex.init_rand(), tex.uniform_rand(),
529   tex.normal_rand(), tex.lua_math_randomseed(), tex.lua_math_random(),
530   tex.show_context(); these helpers make luatex and luajittex compatible
532 * In the lua node interface, there were often issues with rubbish
533   in (especially) 'prev' fields because luatex itself never looks
534   at those values. This is now cleaned up to prevent weird stuff
535   happening inside lua node processing code.
537 * pdf.pageattributes, pdf.pagesattributes,, pdf.catalog,
538   pdf.names and pdf.trailer now behave consistent and can be used
539   to add these properties at the lua end in addition to their \pdf*
540   counterparts atthe tex end; there are now pdf.get* and pdf.set*
541   commands for them too (in future versions the old ways can become
542   obsolete)
544 * new accessors pdf.geth, pdfgetv, pdfgetpos, getgetmatrix as well
545   as pdfhasmatrix helpers (in future versions the direct pdf.h and
546   pdf.v accessor can become obsolete)
548 * the pdf.pdf* variables have been removed (they were already
549   obsolete for some years)
551 * a new properties mechanism for associating lua tables with nodes
552   that get cleaned up when nodes a freed (see manual for details)
554 * several improvements to the way temporary (backend) data is stored
555   at the lua end (better protection, more consistent)
557 * a 'l' type for user nodes that holds a lua variable (can be set
558   at the lua end)
560 * if a late lua node is set at the lua end the string value can be
561   a function as well which is then executed during serialization to
562   the backend stream
564 * Various small speedups
566 * Various smallish fixes to the node direct interface
568 * LPeg is now at version 0.12
570 * Some small fixes to the CFF (font) parsing
572 * Font file inclusion reporting messages on the terminal now
573   comply to the texconfig.trace_file_names setting
575 * Removed some of the additional return
576   information that was added in 0.78.2, but could not work
577   properly.
579 * new primitive \luafunction (see manual), with associated
580   lua.get_functions_table() function
582 * lua error message reporting has been altered a bit to make
583   the distinction between \directlua and other lua source code
584   sources clearer
586 * Additional pdf document data functionality in the 'pdf' table
587   has been cleaned up internally
589 * Additional pdf destination names can now be set via lua.
591 * New callbacks: finish_pdfpage, show_error_message,
592   show_lua_error_hook, start_file, stop_file
594 * Handling of \tracinglostchars is fixed
596 * Embedded metapost library version is now 1.900
598 * luajittex is now included in the distribution. One can use
599 to build both luatex and luajittex, where
600   supported by the platform
602 * Synchronization with the TeXLive sources updated the following
603   libraries:
604   * libpng is now 1.6.10
605   * poppler is now 0.25.2
607 ==============================================================
608 Luatex beta-0.78.2 was released 20140113 (4748)
609 ==============================================================
611 * Extended luafontloader's info() function to include data
612   from the 'pfminfo' and 'names' structure.
614 * Fixed a bug in the luafontloader library that made loading
615   some fonts extremely slow (LastResort.ttf)
617 * Removed a recent extension in the luafontloader library that
618   made loading fonts with lots of glyphs slow (ArialUnicoce.ttf).
619   Note: the extension made sure that there were no duplicate
620   glyph names in the font after loading.
622 * Restored --recorder output for lua files (dofile/loadfile/
624 * One-at-a-time pattern adding from lua used to require enormous
625   amounts of memory
627 * luatex's fontloader.to_table() no longer reports 'altuni' table
628   information for alternates that are solely driven by the font
629   encoding. This fixes loading time issues for fonts that fill
630   encodings by copying a single glyph many times, like e.g.
631   LastResort.ttf from Apple.
633 * The datestamp no longer appears in any banners. The associated
634   \luatexdatestamp primitive is deprecated and will be removed
635   in 0.80.0.
637 * Synchronization with the TeXLive sources updated the following
638   libraries:
639   * cairo is now 1.12.16
640   * pixman is now 0.32.4
641   * lua is now 5.2.3
642   * zlib is now 1.2.8
643   * poppler is now 0.25.0
645 * That same TL synchronization also fixes these issues:
646   * Always write "\nendstream" to the PDF for PDF/A-1b compliance.
647   * Large file support (>4GB) in Lua
648   * Big images could overflow on systems where sizeof(long)=4.
649   * In writing CID CFF fonts to the PDF, and end_dict() was missing.
650   * Unknown 'post' table versions (found in some broken ttf/otf
651     fonts) are now treated as-if they specified version 3.0.
652   * Fix crashes on 32-bit systems caused by bad C header inclusion
653     order
654   * Handle '--luac' and '--luaconly' properly
655   * luatex is now released under GPLv2+, not just GPLv2.
656   * luatex can now find .ofm metric files even if the extension
657     is not given explicitly.
659 * node.unset_attribute() was broken in 0.78.0
661 * The UTF-8 commandline patch from 0.78.0 for Win32 was removed
662   again (did not work properly)
664 ==============================================================
665 Luatex beta-0.78.0 was released 20131231
666 ==============================================================
668 * Instead of using expanded fonts, just calculate the expanded
669   width of glyphs where needed, and carry expand info in the
670   glyph nodes (all based on Hans' suggestions). All font expansion
671   functions are disabled and most are removed.
673 * New, faster (but limited) direct node access from lua, see
674   the manual for details
676 * Support for Apple Advanced Typography (AAT) information in
677   fonts is dropped
679 * Extended build script for mingw/msys (includes 64-bit support)
681 * Various patches from/via Akira Kakuta for better Win32
682   integration
684 * Fixes for some bugs in de pdfscanner library (mostly related
685   to inline images)
687 * Maximum hyphenated word length is now 64Kb characters.
689 * Various patches from Khaled Hosny and Luigi Scarso for the
690   luafontloader subsystem
692 * Fix for a crash when re-dumping formats
694 * Fix for a Selene unicode library bug where some characters in
695   UTF-8 were incorrectly flagged as having the 'Space' property
697 * Some smaller fixes
699 ==============================================================
700 Luatex beta-0.76.0 was released 20130405
701 ==============================================================
703 * Metapost 1.801.
705 * Small patches from TeXLive 2013, as well as an update to the
706   latest libraries (libpng, poppler, etc.)
708 * Speed up printing (of TeX strings) to the terminal and log.
710 * New lua function node.end_of_math().
712 * Fixed a memory leak in the lua function pdfscanner.scan().
714 ==============================================================
715 Luatex beta-0.75.0 was released 20130301
716 ==============================================================
718 News:
720 * New expandable primitive \Uchar.
722 * Metapost 1.790.
724 * New version of lnodelib.c with speedups by Hans and Luigi.
725   Also added some extra sanity checks to the Lua node field
726   setting functions.
728 * Support 'umath' in tex.extraprimitives(), so that formats can
729   make the \Umath* primitives unprefixed, now that they will be
730   provided by XeTeX as well.
732 * Removed a bunch of deprecated primitives
733   * \AlephVersion, \Alephrevision, \Alephversion, \Alephminorversion
734   * \OmegaVersion, \Omegarevision, \Omegaversion, \Omegaminorversion
735   * \omathcode, \odelcode, \omathchardef, \omathchar, \omathaccent,
736     \odelimiter, \oradical
737   * \Umathbotaccent, \Umathaccents
739 * Fix large file support.
741 * Fix Lua's loadfile().
743 * Removed the cidmap callbacks again (let that be done by user lua
744   code after the fact).
746 * Removed the fatal error on fonts where num_glyphs is too high,
747   as that problem is actually harmless.
749 * Some compilation issues under Win32 and Solaris resolved.
751 * Allow math extender objects to be zero width.
753 * The 'epdf' library has been extended to deal with finding and
754   saving embedded files (catalog:numEmbeddedFiles() and catalog:
755   embeddedFile, new EmbFile object).
757 ==============================================================
758 Luatex beta-0.74.0 was released 20121224
759 ==============================================================
761 News:
763 * lua 5.2
764   There are no patches to the core Lua files; a future version
765   of luatex will switch to loading the regular lua 5.2 dynamic
766   library instead of depending on a statically compiled
767   one.
769 * A bleeding-edge version of luasocket is included, as there
770   is no 5.2-compatible official release yet.
772 * A new lua extension is the two-argument version of
773   string.dump from Luajit:
775     string.dump(function f, [boolean strip])
777 * mpost 1.780
779 * The implied existence of the following lua libraries is now
780   deprecated:
782      debug, unicode.*, luazip, lfs, lpeg, zlib, gzip, md5,
783      socket.*, profiler, epdf, fontloader, mplib, and
784      pdfscanner.
786   Future versions of luatex will load these modules on demand
787   from dynamic libraries.
789   Please update your sources to include a 'require' line for
790   each of the library modules mentioned.
792 * Two new callbacks: find_cidmap_file and load_cidmap_file
793   (used by the fontloader to discover .cidmaps)
795 ==============================================================
796 Luatex beta-0.72.0 was released 20121210
797 ==============================================================
799 News:
801 * update various used libraries, including mplib 1.770,
802   poppler 0.21, libpng 1.5, and lpeg 0.10.2.
804 * new 'pdfscanner' lua library.
806 * various OpenType math fixes, including \Umathcharnumdef.
808 * improved placement of bottom accents.
810 * various other small fixes that have accumulated over the past
811   year-and-a-half.
813 ==============================================================
814 Luatex beta-0.70.1 was released 20110519
815 ==============================================================
817 News:
819 * fixed: recorder file location from TL (Akira).
821 * fixed: missing newline on 'No output' line.
823 * fixed: relative names in synctex file.
825 * fixed: 16bit png images in generated %!PDF-1.4.
827 * fixed: building with (installed) libpng < 1.5.0
829 * fixed: year in --version output.
831 * fixed: box output to synctex.
833 * fixed: FontDescriptor for non-embedded OpenType fonts has an
834   invalid FontFile3 entry (#654)
836 * fixed: crash on non-existent images.
838 * fixed: small memory leak in the ipc code.
840 * fixed: tex.print() and tex.sprint() don't recognize -2 as the
841   first argument (#659)
843 ==============================================================
844 Luatex beta-0.70.0 was released 20110506
845 ==============================================================
847 News:
849 * fixed: various changes needed for libpng 1.5.2.
851 * fixed: node.fields() for nodes without subtype.
853 * fixed: non-argument use of os.execute().
855 * fixed: tex.[s|t|]print() with invalid catcode table arguments.
857 * fixed: recorder filename location with --output-directory.
859 * fixed: display alignment in TRT mode.
861 * luatex now uses the standard synctex files from Jérome Laurens.
864 ==============================================================
865 Luatex beta-0.66.0 was released 20110412
866 ==============================================================
868 News:
870 * fixed: linebreak_filter doesn't do its default job when
871   tex.linebreak is used
873 * fixed: \escapechar ignored by \meaning
875 * fixed: wrong px default
877 * fixed: font kern attribute inheritance
879 * fixed: "nop" unrecognized in virtual fonts
881 * fixed: assertion failure in dviluatex when font ptmr8t used
883 * fixed: tex.settoks for with strings with embedded zeroes
885 * fixed: an indexing problem with nonexistent font glyphs
887 * fixed: some crashes and other bugs on the 'subtype' and 'prev'
888   fields (not all node types have those fields)
890 * fixed: crash on  token.csname_id ("")
892 * fixed: initialize the statically allocated node's type ids
894 * fixed: fencepost error in math parameter counting
896 * fixed: math family numbers > 255 are allowed
898 * fixed: compilation failure on Hurd
900 * fixed: a small bug leading to displacements when reading
901   the AccentTop table
903 * fixed: \directlua followed by \pdfximage generates error if
904   draft mode is active
906 * fixed: a problem with \vadjust pre in alignments
908 * fixed: a lua stack growing problem in the backend in 0.65.0,
909   resulting in an inability to create more than a few thousand
910   generated pages
912 * fixed: inclusion of Scribus-generated pdfs
914 * adapt: the default form margin is now zero (was 1bp before)
916 * adapt: libpng 1.4.4, zzuplib 0.13.60, mplib 1.504
918 * adapt: small changes to the build system and new imports from
919   the texlive repository
921 * feature: new function node.currentattr() queries the current
922   active attribute list
924 * feature: Lua font loading; ignore unknown enumeration keys in
925   MathConstants
927 * feature: JPEG 2000 image support
929 * feature: continuing work on the 'epdf' library
931 * doc: the 'epdf' lua library is now documented
933 * doc: various other manual corrections
936 ==============================================================
937 Luatex beta-0.65.0 was released 20101213
938 ==============================================================
940 News:
942 * The Aleph and Omega version primitives are deprecated.
944 * The Apple Snow Leopard Truetype font collections now work
945   properly.
947 * Libpng has been updated to 1.4.4, and zlib to 1.2.5.
949 * New lua functions and node.prev().
951 * The already deprecated for some time node.protrusion_skipable()
952   function has been removed.
954 * fontloader.apply_featurefile() and fontloader.apply_afmfile()
955   now return nil,<errortable> on failure.
957 * The various node list fields in the lua node interface have
958   been renamed from 'list' to 'head', e.g.[0].head,
959   and the 'list' name is deprecated. For now, the deprecation
960   is silent, as 'list' will stay for quite some time. Please
961   update your lua source as soon as possible, though.
963 * The call node.type(<node>) now returns "node". The existing
964   functionality is otherwise unchanged.
966 * Luafilesystem has been updated to 1.5.0. NOTE: there is an
967   incompatible change in the directory iterator method.
969 * The restriction on linebreak_filter has been eased: at least one
970   horizontal box should be returned, but that is not necessarily
971   the last node any more.
973 * Backward compatibility has been restored for \meaning\mathchar
975 * node.first_character() has been renamed to node.first_glyph()
976   to better match its actual functionality.
978 * The \Umathaccent primitive now supports both/bottom keywords,
979   and \Umathbotaccent / \Umathaccents are now deprecated.
981 * The \Umathaccent primitive now also supports the fixed keyword,
982   which supports non-growing math accents even if the font says
983   there are extensible variants.
985 * Ongoing work on the epdf library.
987 Bugfixes:
989 * Assignment to \dimen65535 was broken earlier.
991 * <box>.head.prev is now always initialized to null (0).
993 * luatex -lua=<script> '\relax' no longer exits immediately,
994   instead going into interactive mode as it should.
996 * The \jobname was initialized wrongly for input file names
997   with multiple dots in them.
999 * The synctex file is now written in the right place when
1000   --output-directory is given.
1002 * \letterspacefont could cause crashes, especially when combined
1003   with font expansion.
1005 * Luatex would crash on linux32 systems if it was build in an
1006   environment where LFS (>2GB files) was enabled by default.
1008 * Node lists created by node.copy_list() could not be hyphenated
1009   due to an assertion error.
1011 * Synctex support was partially broken since 0.60.0.
1013 * With OpenType math fonts, accents with multiple parts
1014   (like the \vec arrow) forgot to include all parts if the
1015   accentee was too narrow.
1017 * With OpenType math fonts, accents over any class except 0 and 7
1018   were misplaced.
1020 * kpse.lookup("plain", {all = true}) was broken in kpathsea
1021   itself (no extension given as well as --all specified).
1023 * A FontForge bug made Cambria Math accents look bad, and the
1024   placement of math top accents did not allow a marker at the
1025   origin (patches by Stefan Philipp)
1027 * Cut&Paste from PDF was sometimes broken due to bad ToUnicode map.
1029 * Many small manual improvements (thanks to Paul Isambert)
1031 * An other bugfix to lpeg 0.9 (from Roberto Ierusalimsky)
1033 * Some small fixes to writet1.w (from Han The Thanh)
1035 * A build failure because of bad libz configuration on Win32
1037 ==============================================================
1038 Luatex beta-0.64.0 was released 20101112
1039 ==============================================================
1041 News:
1043 * New lua functions pdf.refobj(), pdf.maxobjnum() and pdf.objtype()
1045 * New lua function node.is_node()
1047 * The max_strings configuration variable's maximum value is
1048   raised to be identical to texlive's maximum (2097151), and
1049   same for param_size (32767).
1051 * The embedded mplib is now 1.503.
1053 * Minor cleanups in the output of fontloader.to_table():
1055   - removed out-of-range altuni's from the output
1056   - don't dump the extra encodings, just the actual font encoding
1057   - export the encoding's name also as 'enc_name' at one level up
1058   - no longer exporting unset macstyles, nor zero uniqueids
1059   - fix creationtime and modification time
1061 * Ongoing work on the epdf library
1063 Bugfixes:
1065 * Fix a bug where an explicit hyphen prevented hyphenation for the
1066   whole rest of the paragraph
1068 * Internal font copying forgot to copy the last font dimen
1070 * os.selfdir() is now documented
1072 * patch quad (\fontdimen6) in \letterspacefont to be compatible
1073   with pdftex
1075 * Multi-page pdf inclusion was very slow in 0.63.0
1077 * Some extra checks added to the handling of glue_spec node
1078   objects in lua code.
1080 * Some node.prev pointers have been corrected (but this is not
1081   quite finished).
1083 * A small fix to lpeg 0.9.
1086 ==============================================================
1087 Luatex beta-0.63.0 was released 20100909
1088 ==============================================================
1090 News:
1092 * Drop[], tex.wd[], tex.dp[].
1094 * Drop OCP support (and associated primitives).
1096 * Add tex.catcode[], tex.lccode[], tex.sfcode[], tex.uccode[],
1097   tex.mathcode[] and tex.delcode[] and associated functions.
1099 * Add CIDset tables to the output pdf where appropriate.
1101 * Added a 'string' field to late_lua nodes on the lua side. This
1102   field does not convert the assigned string to a tokenlist.
1104 * The result of now has some virtual accessors
1105   (as well as fontloader.to_table).
1107 * There is now a `short reference' in the manual folder
1108   (functionref.pdf)
1110 Bugfixes:
1112 * Fix a crash on an empty font (bugreport #468).
1114 * Fix a crash for extremely long pattern arguments.
1116 * Fix a crash on bad virtual character arguments in lua.
1118 * Fix hyphenation exceptions.
1120 * Prevent linebreak between initial local_par paragraph whatsit
1121   and a following skip (bugreport #437).
1123 * Fix placement of scripts on textstyle big operators in MATH
1124   fonts (bugreport #466).
1126 * Fix a crash on the return value of MPlib's 'postscript'
1127   operation on images.
1129 * Fix a crash on \leftghost & \rightghost in math mode.
1131 ==============================================================
1132 Luatex beta-0.62.0 was released 20100823
1133 ==============================================================
1135 News:
1137 * LuaTeX now uses libpoppler (0.12.4) instead of xpdf.
1139 * All backend functions now report what file they were searching
1140   for whenever a file cannot be found.
1142 * Input-ed lua files are now mentioned in the fls file if
1143   the --recorder switch is specified on the command line.
1145 * Paragraph indentation hlist nodes and hlist and vlist nodes
1146   generated by alignment rows and cells now have a subtype
1147   (3 for indent box, 4 for rows/columns, 5 for cells).
1149 * The 'epdf' lib is in active development and still growing.
1151 * The 'fontforge' table is finally removed (was deprecated
1152   since 0.40).
1154 Bugfixes:
1156 * A new mplib import fixes two bad bugs in mplib:
1157   - string equality test was wrong
1158   - type declarations could delete pre-existing variables
1160 * PNG images with transparency could create random size
1161   differences in the generated PDF.
1163 * In some special cases, font expansion could cause wrong
1164   spacing in the generated PDF.
1166 * \letterspacefont was broken since a very long time.
1168 * The node subtype of the \leftskip and \rightskip glues was
1169   wrong.
1171 * Some memory leaks have been removed.
1173 * Various manual fixes.
1175 ==============================================================
1176 Luatex beta-0.61.0 was released 20100728
1177 ==============================================================
1179 New features:
1181 * New lua library 'epdf' for introspection of PDF inclusions,
1182   see the manual for details.
1184 * Mplib version 1.502 is now included (which is still beta,
1185   so be careful).
1187 * new "finish_pdffile" and "pre_dump" callbacks.
1189 * new function pdf.pageref()
1191 * In the lua 'tex' library: assignment to internal glue
1192   parameters is now allowed.
1194 * New lua function tex.error().
1196 Bugfixes:
1198 * Fix for crashes on fonts with bad Panose values.
1200 * Fix for a box placement bug that could sometimes cause text
1201   to overlap.
1203 * Fix for a few small PDF/A1-a compatibility bugs.
1205 * Fix \letterspacefont.
1207 * Fix \Ustopdisplaymath in combination with aligned displays.
1209 * In math delimiters, the last of a chain of predefined sizes
1210   was always ignored if there were also extensible parts.
1212 ==============================================================
1213 Luatex beta-0.60.2 was released 20100701
1214 ==============================================================
1216 Bugfixes:
1218 * Various small portability fixes, especially for non-gcc
1219   compilers.
1221 * Updated synctex from Jerome Laurens.
1223 * fix bug #406: \pdfliteral hinders hyphenation.
1225 * fix pdf overprinting bug (related to \pdfliteral).
1227 * patch from Akira Kakuto that ensures that only absolute commands
1228 that are inside the %PATH% will be executed in win32's restricted
1229 \write18
1231 * fix a buffer overflow in luafontloader.
1233 * fix cross-platform share-ability of generated formats.
1235 * fix a few typos in the manual.
1237 * fix trashing of the null glue spec by attribute reference code.
1239 * documented the deprecated state and brokenness of otp processing.
1242 ==============================================================
1243 Luatex beta-0.60.1 was released 20100428
1244 ==============================================================
1246 New features:
1248 * renamed node.skipable() to node.skippable().
1250 * More git discovery patches in
1252 * Added --warnings=[no|min|yes|max|all] option to
1254 * While cross-compiling, now adds an extra linker switch
1255   to allow win32 exes to use 3G instead of 2G of virtual memory.
1257 Bugfixes:
1259 * os.exec() & os.spawn() handled the environment differently from
1260   os.execute() on Win32 (patch from Tomek)
1262 * Builds with --enable-ipc were broken.
1264 * Assigning and acquiring \fontdimen s from TeX code was broken.
1266 * An initial attempt at fixing bug #372 (\predisplaydirection).
1268 * An attempt to fix \eqno/\leqno placements in mixed direction
1269   \mathdir/\textdir.
1271 * Our local xpdf patch is reverted, it is not needed any more.
1273 * The os.selfdir variable was not documented, as well as broken
1274   on WIN32.
1276 * Fix "\input tikz hello \bye" bug, plus fix one sign error.
1278 * Fix handling of lua script files with UNC names.
1280 ==============================================================
1281 Luatex beta-0.60.0 was released 20100404
1282 ==============================================================
1284 New features:
1286 * now knows about CYGWIN (from Elie Roux)
1288 * Internal handling of direction specifiers is faster now.
1290 * Each glyph node now has three new virtual read-only fields:
1291   width, height, and depth (values in scaled points, of course)
1293 * There are new functions node.protrusion_skipable() and
1294   tex.badness() (useful for paragraph breaking in lua)
1296 * Also new: tex.linebreak(). See the manual for details.
1298 * All lua errors now report file and line numbers to aid in
1299   debugging.
1301 * Import of metapost 1.211.
1303 * pdf.pdfcatalog will be replaced soon by the new pdf.catalog
1304   pdf.pdfinfo will be replaced soon by the new
1305   pdf.pdfnames will be replaced soon by the new pdf.names
1306   pdf.pdftrailer will be replaced soon by the new pdf.trailer
1308 * pdf.pdfmapfile and pdf.pdfmapline are replaced by the new
1309   pdf.mapfile() and pdf.mapline() functions. (a function interface
1310   fits these parameters better because they never return anything).
1312 * New read-write lua variables: pdf.pageattributes, pdf.pageresources,
1313   pdf.pagesresources
1315 * now correctly detects git-svn and still
1316   manages to find a valid SVN revision number (from Patrick Gundlach)
1318 * Many of the source files have been converted to CWEB.
1320 Bug fixes:
1322 * GNU libtool is now used to solve the various technical issues with
1323   dynamic loading of lua modules.
1325 * Error detection in scan_integer_part was wrong due to missing
1326   initialization of OK_so_far (spotted by Javier Mugica)
1328 * Synctex was broken in 0.51-0.52.
1330 * \lastlinefit was broken since ... well, nearly forever.
1332 * Reading of binary files with length zero was broken.
1334 * Trapping of unitialized rules (this was for sloppily created
1335   rule nodes from lua)
1337 * pdf.immediateobj('streamfile') was broken on 64-bit platforms.
1339 * tex.linebreak did not take the given left and right skip, but
1340   instead used the current TeX-side values (bug #356).
1342 * the found 'MAKE' command in is now fed into configure to fix
1343   problems with that not finding GNU make even when it is actually
1344   installed.
1346 * dofile(<nil>) and loadfile(<nil>) in batch mode now give an
1347   error and continue instead of pointlessly waiting for user input.
1349 * Reverted commit #3417 (the buildpage experiment) as it causes bad
1350   things to happen when items are waiting during page breaks.
1352 * Overrule loaders[4] in --safer mode, make require() behave
1353   closer to normal lua 5.1, and add some nicer error messages
1354   (based on an email and patches from Manuel Pegourie-Gonnard)
1356 * Added an extra sanity check for GDEF loading in luafontloader,
1357   based on a crash caused by Linux' AkaashNormal.ttf.
1360 ==============================================================
1361 Luatex beta-0.52.0 was released 20100316
1362 ==============================================================
1364 New features:
1366 * Various small manual improvements.
1368 * A better version of, from Tomek.
1370 * node.copy_list() now allows the second (optional) argument to
1371   be nil.
1373 * An import of the current state of the texlive repository
1374   (kpathsea and build system).
1376 Bug fixes:
1378 * An attempt fix for bug #345 (math kerning is not perfect): when the
1379   current math font is a new math font, check against \catcode <cur_c>
1380   == 11 to suppress the italic correction, instead of looking at
1381   the value of space(<cur_f>).
1383 * There is a new <tfmtable> key: 'units_per_em' (defaults to 0).
1384   This is part of a fix for bug #200 (Problem with CFF fonts having
1385   em-size other than 1000): there is a special correction to the
1386   embedded cff font itself and the font scale if the font to be output
1387   is opentype or type1 in unicode encoding and the 'units_per_em
1388   differs' from zero.
1389   <tfmtable>.units_per_em has to be passed back to luatex from
1390   the lua font loading code for this to work.
1392 * A fix for bug #314 (problem with pk file).
1394 * lua code can no longer change the internal preallocated glue_spec
1395   nodes (as that resulted in weird spacing bugs). For this, glue_specs
1396   now have a new field: 'writable'. If that field is false, a copy
1397   has to be made of the glue_spec instead of doing an assignment
1398   to it.
1400 * Setting of \textdir inside the output routine could trash output
1401   on following pages due to a lingering internal variable.
1403 * \pdfthread crashed because the arguments were handled in reverse
1404   order.
1406 ==============================================================
1407 Luatex beta-0.51.0 was released 20100312
1408 ==============================================================
1410 New features:
1412 * Various small manual improvements.
1413 * The backend message "cannot open Type 1 font file for reading"
1414   now reports which Type1 font it was looking for.
1415 * Fontforge clears some font names at loading time that will be
1416   refilled in at font generation time, but the fontloader should not
1417   do that. Patch from Khaled Hosny.
1418 * New synctex code imported from TeXLive.
1419 * luamd5/md5.h is renamed to luamd5/luamd5.h to avoid confusion.
1420 * Embedded mplib is now 1.209.
1421 * Some experimental tweaking of buildpage_filter, see the manual
1422   for details.
1423 * Luatex now detects kfreebsd (from Alan Braslau)
1424 * The new lua function tex.sp() converts a string to a number
1425   representing scaled points.
1426 * There is now support for revision numbers in the banner and stats
1427   library again.
1428 * The command line help and manual documentation page is extended.
1429 * node.hpack() now also accepts "cal_expand_ratio" and "subst_ex_font"
1430   modifiers.
1431 * node.hpack() and node.vpack() now give back the badness of the box
1432   as second return value.
1433 * node.copy_list() now allows a second (stop) argument, this stopper
1434   is not copied.
1435 * new lua functions in lfs: lfs.readlink() and lfs.shortname().
1436 * new lua function tex.tprint() that can combine multiple catcode
1437   regime prints in one function call.
1438 * new lua sub-table: tex.nest[] (read/write access to the semantic
1439   nest state).
1440 * New lua functions in kpse: kpse.lookup() and kpse.version(). See
1441   the manual for more details.
1442 * New lua function tex.shipout().
1444 Bug fixes:
1446 * There problems in the pdf output for Type3 (pk) fonts.
1447 * Fix a bug that allowed bad commandline quoting.
1448 * Fix a bug that sometimes caused crashes when \pdfprotrudechars.
1449 * The build script now exports CONFIG_SHELL to avoid problems with
1450   /bin/dash.
1451 * The was a bug in the generated /Image /ProcSet.
1452 * status.font_bytes reported the wrong value.
1453 * Lots of compiler warnings are removed (thanks Javier Mugica).
1454 * Patch to to accept filenames with embedded
1455   parentheses.
1456 * Fix a \write error with docstrip package.
1457 * Fixed a crash on AdobeMyungjoStd-Medium.otf.
1458 * Fix coco stack overflows, needed for lpeg.
1459 * \pdfcompresslevel wasn't initialized for early immediate objects.
1460 * Fix for slanted fonts when HZ was on (slant angle was multiplied).
1461 * When concatenating content streams, put a space between them.
1462 * Allow pfb lines to end with \r as well as \n (for msam10.pfb).
1463 * Fix the internal string->scaled point conversion in the lua
1464   interface.
1465 * Memory leaks in the fontloader removed, thanks to patches from
1466   Elie Roux.
1467 * Fix a crash caused by the combination of coroutines and font.each().
1469 Removed features:
1471 * Support for Type3 .pgc files (nobody used them).
1473 ==============================================================
1474 Luatex beta-0.50.0 was released 20091224
1475 ==============================================================
1477 New features:
1479 * Fonts now listen also to the 'extend' key in the lua font
1480   metrics table, and the processing for this is done via de
1481   pdf text matrix instead of via the font matrix, which means
1482   it now works for all font types.
1484 * The embedded Metapost library is now at version 1.209.
1486 Dropped features:
1488 * It is no longer possible for fonts from embedded pdf files
1489   to be replaced by / merged with the document fonts of the
1490   enveloping pdf. This regression may be temporary, depending
1491   on how the rewritten font backend will look after beta 0.60.
1493 Bug fixes:
1495 * Use of \middle confused the \mathstyle operation.
1497 * \pdfcolorstack handling was broken.
1499 * node.unset_attribute() had a bug whereby it inverted the
1500   requested result in some cases (the node on which the unset
1501   was called was sometimes the only node at the current level
1502   that *kept* the attribute).
1504 * During font expansion, the internal font copy had one character
1505   information object less than the original, resulting in the
1506   disappearance of a glyph in some fonts when font expansion
1507   was active.
1509 * Placement of operator scripts of OT MATH fonts is adjusted
1510   to be conformant with Word's logic where the italic correction
1511   is only used to tuck in the subscript and for nothing else.
1513 * no longer writes directly to stderr in
1514   case of internal font errors.
1516 * Any <pdf_refobj_node>.objnum could not be assigned to.
1518 * The lua 'pdf' table could not be assigned to.
1520 * The lua 'md5' library was returning incorrect results on
1521   64-bit architectures.
1523 * Luatex now compiles on GNU Hurd systems.
1525 * Fix segfault when embedding stream file object (these
1526   backend segfaults were a side-effect of the string pool
1527   patches).
1529 ==============================================================
1530 Luatex beta-0.47.0 was released 20091218
1531 ==============================================================
1533 New features:
1535 * New read-write lua variables pdf.pdfcatalog, pdf.pdfnames,
1536   pdf.pdfinfo, pdf.pdftrailer
1538 * The horizontal mode nodes that are added to lines during line
1539   breaking now inherit the attributes from the first and last node
1540   inside the created line.
1542 * The new function pdf.registerannot(<number>) registers an
1543   annotation object number to be included in the current
1544   page's /Annots list.
1546 * The variables <metrics>.Mathconstants.FractionDelimiterSize
1547   and <metrics>.Mathconstants.FractionDelimiterDisplayStyleSize
1548   are added to the font table. This allows proper setting of the
1549   size parameters for TeX's ...withdelims math primitives.
1551 * The internal representation of the string pool is reorganized
1552   (the pool of string characters is now allocated dynamically),
1553   and as a side-effect the lua variable status.init_pool_ptr
1554   is deprecated and will be removed in a later version. Also,
1555   status.pool_ptr now simply returns the current number of bytes
1556   in use for string characters.
1558 * There are new lua variables pdf.pdfmapline and pdf.pdfmapfile
1559   (write-only strings that mimic \pdfmapline and \pdfmapfile).
1561 * \pdfobj data and attribute are now stored as C strings instead
1562   of as token lists (this should speed up cases with a lot of data).
1564 * Artificially slanted fonts now work via the pdf text matrix
1565   (instead of adjusting the actual font) so that it now also
1566   works for non-Type1 fonts. The lua <metrics>.slant font key is
1567   now obeyed in all cases.
1569 * The lua function<string>) returns the internal font id
1570   number belonging to a control sequence name.
1572 * Pdf image inclusion is optimized such that objects from an
1573   external pdf will now be included only once even if they are
1574   referenced from multiple inclusions.
1576 Bug fixes:
1578 * Protrusion for non-TLT documents did not work properly for
1579   the hyphenation character.
1581 * \lastbox could not remove the paragraph indent box for non-TLT
1582   documents.
1584 * Pdf images (\pdfximage) are no longer kept open during the
1585   whole run, but closed and reopened. An error is raised if
1586   the file has changed between \pdfximage and \pdfrefximage.
1587   This prevents the 'too many open files' error when lots of
1588   images are included.
1590 * On Win32 Pdf image files are locked during the time that it is
1591   open, to prevent unnoticed file changes by external sources.
1593 * Compilation now again works on FreeBSD.
1595 * Format sharing between 32-bit and 64-bit architectures was
1596   broken.
1598 * Unsetting attributes from lua could sometimes result in
1599   the unset state persisting beyond the current group level.
1601 * If something went wrong in the scanning of pdf action items,
1602   the error message reported the current primitive name
1603   incorrectly.
1605 * Luatex would crash on non-existant pdfs that were referenced
1606   from map file entries.
1608 ==============================================================
1609 Luatex beta-0.46.0 was released 20091126
1610 ==============================================================
1612 New features:
1614 * The script now has better support for new MacOSX-es
1615   (patch from Mojca).
1617 * Luatex now has experimental support for dynamic loading of
1618   external compiled lua libraries. Building luatex and loading
1619   external .so/.dll files is reported to work on Windows,
1620   linux and osx, other platforms are still unknown.
1622 * pdf.obj{type="stream"} no longer converts its argument to and
1623   from a tokenlist. This allows the use of binary data in the
1624   "string" argument. Such data does still have to hidden from
1625   the normal file parser by putting the code in a dofile()
1626   or by using string.char(), though.
1628 Bug fixes:
1630 * Luatex 0.45.0 was not able to find truetype nor opentype fonts
1631   if there were no callbacks defined (patch from Pawel).
1633 * 0.45.0 printed the user input instead of the full pathname
1634   for \input-ed tex files.
1636 * The TFM reader now rejects fonts with tfm names that are
1637   longer than 255 characters because such font names cannot
1638   be stored in a DVI file.
1640 * The combination of \immediate\pdfxform followed by a later
1641   \pdfrefxform could cause broken pdf output files because
1642   the box used for the form could have been freed and even
1643   reused already at that moment in time, sometimes resulting
1644   in an invalid transformation matrix.
1646 * The placement of super- and subscripts for displaystyle
1647   \int's in CambriaMath is now better than before. It still
1648   needs a tweak to the metrics though: in the current version,
1649   the italic correction has to be substracted from the width
1650   of the integral sign to get correct placement (context mkiv
1651   does this).  to be continued ...
1653 ==============================================================
1654 Luatex beta-0.45.0 was released 20091118
1655 ==============================================================
1657 New features:
1659 * Loading big OTF fonts via lua is now much faster than before,
1660   at the expense of a bit of precision loss in the calculated
1661   bounding boxes.
1663 * Two new token lists are provided: \pdfxformresources and
1664   \pdfxformattr, as an alternative to \pdfxform keywords.
1666 * \input and \openin now accept braced filenames.
1668 * The \endlinechar can now be set to any value between 0 and 127.
1670 * Luatex can now optionally use kpathsea to find lua require()
1671   files.
1673 * The new primitives \aligntab and \alignmark are aliases for
1674   the use of & and # in alignments.
1676 * \pdfrefximage [width <dimen>] [height <dimen>] [depth <dimen>] <imageref>
1677   overrules settings from \pdfximage for this \pdfrefximage call only
1679 * The print precision for small numbers in lua code (tostring)
1680   has been improved.
1682 * Akira Kakuto suppled a patch that restricts writing to files
1683   with names such as latex.bat etc. (on windows only)
1685 * (un-feature): from now on luatex now only handles 4 direction
1686   specifiers: TLT (latin), TRT (arabic), RTT (cjk), and LTL
1687   (mongolian). The other directions now generate an error.
1689 * (un-feature): xpdf's automatic lower- and uppercasing retry attempts
1690   for nonfound image pdf files has been removed.
1692 * The callbacks hpack_filter, vpack_filter and pre_output_filter
1693   pass on an extra string argument for the direction, when known
1694   (nil == use default).
1696 * The lua functions node.hpack(), node.vpack() and node.dimensions()
1697   now accept an optional direction argument (not given == use default).
1699 * \pdfrefxform [width <dimen>] [height <dimen>] [depth <dimen>] <formref>
1700   scales a form object; similar principle as with \pdfximage: depth alone
1701   doesn't scale, it shifts vertically.
1703 * A change to the relative ordering inside font name discovery for use
1704   by the backend: now it tries <f>.psname first, as that is much less
1705   likely to contain spaces.
1707 * For ttc fonts, now the used subfont name and its index id are printed
1708   to the terminal, and if the backend cannot find a ttc subfont, the
1709   run is aborted.
1711 Bug fixes:
1713 * Prevent crashes for lua-loaded fonts without a (tfm) name.
1715 * Remove spurious newlines in the output pdf that could be the
1716   result of using \pdfximage for an included pdf figure too early.
1718 * Full font embedding for wide otf and ttf fonts now really
1719   works (older versions only pretended that it did work).
1721 * node.dimensions() sometimes continued past the 'stop' node.
1723 * Images inside virtual fonts were broken.
1725 * The processing of \language=-1 was wrong, resulting in
1726   hyphenation attempts even though there was no proper language
1727   set up.
1729 * Fix for finding files in --output-directory.
1731 * Fix for handling of --file-line-error.
1733 *[] assingments are now checked to make sure the assigned
1734   node has the right id (hlist or vlist).
1736 * show_node_list (as in \showbox) produced spurious local_par
1737   whatsit prints in the output after direction nodes.
1739 * The handling of pdf literals has been sped up.
1741 ==============================================================
1742 Luatex beta-0.44.0 was released 20091027
1743 ==============================================================
1745 New features:
1747 * libpng is now 1.2.40.
1749 * hlist nodes now have a subtype to distinguish hlists generated
1750   by the paragraph breaking, explicit \hbox commands, and other
1751   (as-yet-undefined) sources.
1753 * \pdfobj now has an extra optional keyword: 'uncompressed',
1754   which forces the object to be written to the PDF in plain
1755   text (see the manual for the exact details).
1757 * The lua file from the luamd5 library (which provides the
1758   md5.hexsuma() function) is now embedded in the executable.
1760 Bug fixes:
1762 * \latelua now works in DVI mode again.
1764 * status.output_file_name could crash when used too soon.
1766 * In 0.43, rules were not output at all in DVI mode.
1768 * \leavevmode\penalty-10000\penalty-10000 crashed luatex.
1770 * the API of margin kern nodes to lua was using the wrong
1771   fields in the nodes.
1773 * A few fixes to the manual.
1775 * PDF Xref stream dicts were slightly non-conformant.
1777 * There was too much space between two consecutive math displays
1778   (this bug was inherited from Aleph)
1780 * Synctex was broken (thanks, Akira)
1782 * Font mark classes were handled incorrectly by the fontloader
1783   code.
1785 * There was a crash possible with certain types of named PDF
1786   destinations.
1788 * Math delimiters and large operators in new MATH fonts no
1789   longer apply the italic correction (this fixes placements
1790   of super- and subscripts on such items for those fonts).
1792 * The converter from lua strings to token lists (for the node
1793   interface) sometimes generated invalid tokens.
1795 * CFF (OpenType) fonts now listen to 'embedding="full"'. TTF
1796   is still todo.
1798 * Font tables with 'embedding="no"' would cause luatex to crash.
1800 * \pdfobj file {} failed to find the file if there was no lua
1801   callback in place.
1803 * An optimization in MS Mincho caused luatex to crash.
1805 ==============================================================
1806 Luatex beta-0.43.0 was released 20090819
1807 ==============================================================
1809 New features:
1811 * There is a new allowed key in the table trhat is returned
1812   by lua-loaded fonts: <f>.psname. This value should be set
1813   to the original PostScript font name of the font. Fonts inside
1814   dfont and ttc collections are fetched using this field
1815   (if it is missing, <f>.fullname will be used instead).
1817 * It is now possible to use Apple dfont font files
1818   (those that contain at least one outline font).
1820 * \latelua is now allowed inside leaders.
1822 * There is a new callback: process_output_buffer, from Manuel
1823   Pégourié-Gonnard. This callback is called just before
1824   \write acts, so it can be used to alter the file encoding
1825   of text output files.
1827 * There is a new node.dimensions() function, which calculates
1828   the natural size of (part of) a list of nodes.
1830 * The new primitive \gleaders provides 'globally aligned'
1831   leaders.
1833 * The DVI and PDF backends now share much code internally.
1835 * The embedded MPlib is now 1.207.
1837 * libpng is now 1.2.39.
1839 Bugfixes:
1841 * We fixed lots of anonymous bugs introduced in 0.42.0 (as expected)
1843 * errors are no longer fatal, the function now
1844   just returns a nil,"error string" pair.
1846 * Automatically inserted kerns for \accents are now once again
1847   valid word ends, as in \TEX.
1849 * Fixed the placement of math displays in mixed direction
1850   settings.
1852 * The \pdfcompresslevel is now dynamic again.
1854 ==============================================================
1855 Luatex beta-0.42.0 was released 20090717
1856 ==============================================================
1858 * There is a new node.tail() function
1860 * lua-loaded fonts now support a 'nomath' key to speed up
1861   loading the lua table.
1863 * A bugfix in the ttf reader for the inclusion backend, and
1864   (also in the backend) support for treating ttc files by
1865   pretending they are single ttf fonts (both patches from pdftex)
1867 * Add Khaled Hosny's man page to the repository
1869 * The \pdfcompresslevel is now effectively fixed as soon as
1870   output to the pdf file has occurred.
1872 * Patched status.filename so that it (nearly) always returns a
1873   file name.
1875 * fix '\the\delcode' and disable '\the\odelcode', '\the\Udelcode',
1876   and '\the\Udelcodenum'
1878 * Handle jfifs where either xres or yres is 0 and the other
1879   res is != 0 (from pdftex)
1881 * The single-argument version of lang.hyphenate() was broken.
1883 * Get rid of the \directlua/\latelua number warning.
1885 * The Lua coroutine patch (coco) is now disabled on linux
1886   powerpc architectures (because it caused crashes)
1888 * Removed obsolete pdftex primitives:
1889   \pdfoptionalwaysusepdfpagebox
1890   \pdfoptionpdfinclusionerrorlevel
1891   \pdfforcepagebox
1892   \pdfmovechars
1894 * The loading speed of large fonts (especially ttf) via the
1895   fontloader library, and the inclusion speed for subsetting
1896   in the backend have both been improved.
1898 * The 'pdf' lua library has been enhanced with various new
1899   functions, see the manual for details.
1901 * BLT and BRT glyph position fixed.
1903 * Various fixes for synctex offsets.
1905 * Support for exotic font string encodings has been removed
1906   from the fontloader library.
1908 * The embedded MPlib is now 1.205.
1910 * libpng is now 1.2.38.
1912 ==============================================================
1913 Luatex beta-0.40.6 was released 20090625
1914 ==============================================================
1916 * Fix two string vs. toks bugs in the lua node interface:
1917   whatsit,annot and whatsit,startlink data assignments were
1918   made directly as strings instead of being converted to tokens.
1920 * Sometimes pdf.print() could be used before the proper structures
1921   were initialized.
1923 * There was a bug in the type codes for the lua package filter
1924   callback: wrong extra info was passed to lua for the alignment
1925   and vsplit cases.
1927 * The math parameters \Umathlimitdownvgap, \Umathlimitdownbgap,
1928   and \Umathlimitdownkern have been renamed to \Umathlimitbelowbgap,
1929   \Umathlimitbelowvgap, and \Umathlimitbelowkern to be more
1930   consistent with the other parameter names.
1932 * The embedded MPlib is now 1.204.
1934 * Handling of UTF-8 hyphenation exceptions has been fixed.
1936 * There were a number of typos in the manual.
1938 ==============================================================
1939 Luatex beta-0.40.5 was released 20090610
1940 ==============================================================
1942 * One of the internal print functions accidentally encoded its
1943   argument string to UTF-8 even though it was already UTF-8.
1945 * Some of the log and terminal UTF-8 output was gibberish.
1947 ==============================================================
1948 Luatex beta-0.40.4 was released 20090609
1949 ==============================================================
1951 * \the\textfont0 returned a number instead of doing a font
1952   switch.
1954 * The embedded MPlib is now 1.203.
1956 ==============================================================
1957 Luatex beta-0.40.3 was released 20090608
1958 ==============================================================
1960 * A set of portability fixes for the AIX compiler from Vladimir
1961   Volovich.
1963 * A set of fixes to the synctex support.
1965 * A patch to the build script to prevent installed X11 headers
1966   from being required.
1968 * Some weave (web syntax) fixes from Manuel Pégourié-Gonnard.
1970 * A simplification in (it is now less verbose
1971   about the web2c-specific extensions) from Karl Berry.
1973 * A fix in the handling of UTF-8 (input) file names.
1975 * Hyphenation exceptions were case sensitive in 0.40.2.
1977 * libpng is now 1.2.37.
1979 ==============================================================
1980 Luatex beta-0.40.2 was released 20090603
1981 ==============================================================
1983 * Fix for a compilation warning under Cygwin.
1985 * A complicated bugfix by Hartmut for a rounding problem in the
1986   VF loading that resulted in 'character width mismatch in font
1987   XY.vf ignored' messages at large load sizes
1989 * The embedded MPlib is now 1.202.
1991 * The post_page_number callback was accidentally run when
1992   shipping out xforms as well as during actual pages.
1994 * When a math accent char doesn't have a bot_accent placer,
1995   luatex now uses the top_accent placer, if present.
1997 * A crash caused by \Uroot .. {<list>}{...} is fixed
1999 * A portability fix for solaris 8 sparc using sun studio
2000   compiler, and one for glibc > 2.9.90
2002 * luatex -ini now sets the \catcode of the BOM character to
2003   ignore
2005 * Kpathsea is updated from TeXLive, giving four extra types of
2006   searchable files: 'font feature files','cid maps','mlbib',
2007   and 'mlbst'.
2009 * libpng is now 1.2.36
2011 ==============================================================
2012 Luatex beta-0.40.1 was released 20090508
2013 ==============================================================
2015 * Vertical placement of root radicals and degrees is fixed.
2017 * The use of \pageleftoffset could deviate from \hoffset
2018   if \mag != 1000.
2020 * LuaTeX now issues a warning if \pagedir !- \bodydir during
2021   shipout.
2023 * The previous crash in font.read_tfm() was still not quite
2024   correct.
2026 * The Web2C version is now also printed in the --version
2027   and --credits output.
2030 * There is a new MPlib 1.200 release candidate with a few minor
2031   fixes included.
2033 * The xpdf library is updated to patch level 3.
2035 * New imports to the build system, from texlive. In particular,
2036   there is now configure-level support for building with
2037   libpoppler and support for building under cygwin 1.7 is added.
2039 ==============================================================
2040 Luatex beta-0.40.0 was released 20090422
2041 ==============================================================
2043 * The embedded MPlib is updated to version 1.200.
2045 * Texlua would crash if run font.read_tfm() was used.
2047 * Luatex would crash on empty \patterns.
2049 * Lots of small C code cleanups.
2051 * \textdir inside a \hbox dir *** was wrong earlier.
2053 * 0.39.0 introduced a bug that would make luatex crash whenever
2054   font expansion was used.
2056 * Font tables returned by define_font can now have a key named
2057   'cache' that controls the internal lua font table caching.
2059 * There is no longer a need for an explicit --progname if there
2060   is no input file given.
2062 ==============================================================
2063 Luatex beta-0.39.0 was released 20090415
2064 ==============================================================
2066 * iniluatex will from now on start up with only the TeX82 primitives
2067   and \directlua, everything else has to be bootstrapped via
2068   tex.enableprimitives(). This change was planned for 0.40.0,
2069   but *now* is the time to test it.
2071 * A bugfix for \primitive in various expandable contexts,
2072   and \primitive now generates an error message when the
2073   argument is not actually a primitive's name.
2075 * There was a bug found in the math accent handling.
2077 * Large math operators are now treated like extensible characters
2078   in the sense that they can be composed of segments.
2080 * The extra assign- and restore tracing information from eTeX
2081   had a massive bug because of a dangling else in the pascal web.
2082   As a side-effect of fixing this bugs, all such potential errors
2083   in the pascal web have been fixed (for now).
2085 * The math parameters can now be set and queried from lua code
2086   via the new tex.setmath() and tex.getmath() functions.
2088 * Reflection in a \hbox was broken.
2090 * There was a leak of direction nodes in the paragraph builder.
2092 * The font backend now does a small peek to differentiate
2093   truetype and postscript style opentype fonts. This fixes
2094   the "Can't find CFF table" bug for otf's with truetype outlines.
2096 * Parameters and registers can now also be assinged to globally
2097   from lua (see the manual for details).
2099 * It is now possible to query the current math style while a
2100   formula is still being constructed by using the new read-only
2101   value \mathstyle. Associated is the new command \Ustack that
2102   is to be used as a prefix for {.. \over ..} and friends.
2103   See the manual for more information.
2105 * The embedded MPLib is brought up to date with the current
2106   metapost repository (version 1.110 and a few small patches).
2108 * Luatex can now handle two breakpoints inside a single ligature
2109   (like for the functional word of-f-ice). The solution is not
2110   perfect yet, but the chance of missed hyphenation points in
2111   actual documents should now be negligible.
2113 * Some speedups in the font loading code, and in the handling of
2114   pdf_literal nodes that are set from within Lua code.
2116 * Some source code and manual cleanup, as usual.
2118 ==============================================================
2119 Luatex beta-0.38.0 was released 20090410
2120 ==============================================================
2122 * tex.enableprimitives() had a bug were previously defined (but
2123   currently undefined) control sequences prevented the creation
2124   of the new csname.
2126 * The special calling format callback.register('name', false)
2127   not only disables the callback, but also the builtin code it
2128   is supposed to replace.
2130 * Empty \localleftbox and \localrightbox -es are now suppressed.
2132 * Support for <f>.MathConstants.SubscriptShiftDownWithSuperscript
2133   was added, to solve the lack of "sub2" in OpenType math.
2135 * Luatex now supports horizontal super- and subscript placement
2136   corrections via the OpenType MATH mathkern table. See the
2137   manual for details.
2139 * node.write() no longer copies its argument node list before
2140   appending it.
2142 * There are six new primitives that are verbose forms
2143   of one and two byte special tokens:
2144   \Usuperscript \Usubscript
2145   \Ustartmath \Ustopmath
2146   \Ustartdisplaymath \Ustopdisplaymath
2148 * The attribute node leaks in math mode and alignmetns have been
2149   fixed.
2151 * The 11 simple math noads are now combined into a single "noad"
2152   node type.
2154 * Static linking against libstdc++ is working once again.
2156 * There is a small fix in the keyword scanner to solve the
2157   problem of 'Runaway ... while scanning ???' that could happen
2158   for some primitives.
2160 * Lua now also has the "architecture independent bytecode"
2161   patch applied.
2163 * Lua is updated to version 5.1.4 with coco patches 1.1.5, and
2164   lpeg is now 0.9.
2166 * Some TRT/TLT backend bugs are fixed.
2168 * Various manual updates.
2170 ==============================================================
2171 Luatex beta-0.37.0 was released 20090331
2172 ==============================================================
2174 * Luatex now implements shell_escape = 'p', a new feature
2175   in web2c that intends to make \write18 more secure. As
2176   a side-effect, if luatex is used for typesetting, it will
2177   now also apply shell_escape = 'p' and shell_escape = 'f'
2178   to the lua functions io.popen(), os.execute(), os.exec(),
2179   and os.spawn().
2180   Nothing has changed for the case where luatex is used as
2181   a script interpreter.
2183 * Attributes can now have negative values. The special value
2184   for 'unset' is lowered to -0x7FFFFFFF (it used to be -1).
2186 * The lua 'kpse' library now has an object-oriented interface
2187   as companion to the procedural interface. This is useful for
2188   e.g. controlling the discovery of mplib files.
2190 * The new internal integer parameter \outputbox allows setting
2191   of the output box number (default: 255, max: 65535)
2193 * The new primitives \Udelimiterunder and \Udelimiterover
2194   complete the set of 'StretchStacks' for OpenType Math.
2196 * Fixed a bug in font string conversions on the Macintosh that
2197   resulted in warnings about 'unaligned pointers being freed'.
2199 * Khaled Hosny spotted a bunch of manual errors.
2201 * There was bug in the width of math_accent objects when
2202   there were super- or subscripts attached to the accentee.
2204 * In PDF mode, TRT \leaders were bugged.
2206 * The source tree now uses the new texlive build system that
2207   Peter Breitenlohner created.
2209 * There is now a single instead of four separate
2210   ones. It has a few options:
2211       --make      : only make, no make distclean; configure
2212       --parallel  : make -j 2 -l 3.0
2213       --nostrip   : do not strip binary
2214       --mingw     : crosscompile for mingw32 from i386-linux
2215       --ppc       : crosscompile for ppc osx on intel osx
2217   Note: --parallel still sometimes causes crashes due to
2218   timing errors, so use that option with care.
2220 * Many compiler warnings have been removed (but not all yet).
2222 ==============================================================
2223 Luatex beta-0.36.0 was released 20090323
2224 ==============================================================
2226 * The included fontforge code is stripped considerably, and
2227   the lua table to access the code is renamed to 'fontloader'.
2228   The old name ('fontforge') will remain present for a while,
2229   but will eventually go away.
2231 * New lua functions: tex.primitives(), tex.extraprimitives,
2232   tex.enableprimitives().  This is a prelude to a big change
2233   in the next beta: iniluatex will from now on start up with
2234   only the TeX82 primitives and \directlua, everything else
2235   has to be bootstrapped via tex.enableprimitives().
2236   See the manual for more details.
2238 * Support for multiple lua states has been removed, and at the
2239   same time support for adding name ids to lua chunks has been
2240   added.  See the manual for more details.
2242 * More changes to the PDF backend to make it support non-latin
2243   directions (form and image placement, vertical typesetting,
2244   synctex).
2246 * The kpathsea library is updated. Highlights: cleaner build
2247   process (thanks to Peter Breitenlohner), cleaner mingw32
2248   (cross)compilation support, and a new reentrant API.
2250 * Some possible endless loops within extended delimiters in
2251   math mode are now trapped.
2253 * Movements inside VF font characters were considerably off
2254   due to a wrong conversion routine.
2256 * Error handling for \outer has been reinstated, but can be
2257   suppressed via the new primitive \suppressoutererror.
2259 * The new primitives: \suppresslongerror and \suppressifcsnameerror
2260   that can be used to suppress errors for \par in non-long macros
2261   and for non-expandable objects inside \ifcsname ... \endcsname,
2262   respectively.
2264 * New lua function: node.vpack() via a patch from Khaled Hosny
2265   that also improves error handling in node.hpack().
2267 * Fix the typo that caused \charic (instead of \charit)
2268   to be defined as a primitive.
2270 * Suppression of hyphenation via \hyphenchar\font=-1 now works
2271   again.
2273 * The lua functions tex.print(), tex.sprint(), tex.write() now
2274   accept an array of strings as well as vararg list of strings
2275   to print.
2277 * A change to be build process: luatex.p is no longer split
2278   int smaller pieces before running the C compiler.
2280 * Melissa O'Neill contributed a bugfix to the Type1 font
2281   subsetting code.
2283 * A bunch of smaller bugfixes and cleanups (as usual).
2285 ==============================================================
2286 Luatex beta-0.35.0 was released 20090224
2287 ==============================================================
2289 * The math handling portions of LuaTeX are converted to C code,
2290   and extended to support Unicode math. There are a great many
2291   related changes, see the new Math chapter in the manual for
2292   details.
2294 * A nasty bug in the paragraph breaking routine was fixed.
2295   (All lines except the first one were believed to be wider then
2296   they really were. This affected which nodes were considered
2297   as active breakpoints)
2299 * Various changes to the PDF backend to make it support non-latin
2300   directions.
2302 * Fixed the behaviour of the page offsets. Placement of the output
2303   on the physical page should now work correctly in all directions,
2304   both in DVI and PDF.
2305   There now are \pageleftoffset and \pagetopoffset primitives,
2306   as well as
2308 * fontforge.apply_featurefile() was broken since 0.31.0
2310 * The lua profiler library is added.
2312 * The included lua filesystem library is now 1.4.1.
2314 * Reading of pk files fixed.
2316 * An optional space afer a <direction specifier> for \textdir c.s.
2317   is ignored from  now on.
2319 * \bodydir and \pagedir can now be (re)set even after the first
2320   page has been output.
2322 * The new callback mlist_to_hlist can be used to intercept the
2323   normal conversion of math lists to horizontal lists.
2325 * The programs ttf2afm and pdftosrc are removed from the luatex
2326   distribution (these belong to pdftex).
2328 * now uses much less memory when opening large
2329   (CJK) fonts.
2331 * The included libpng is now 1.2.35.
2333 * Quite a lot of smaller bugfixes and cleanups (as usual).
2336 ==============================================================
2337 Luatex beta-0.31.3 was released 20081229
2338 ==============================================================
2340 This release has a bunch of updates from the development trunk
2341 (#1657-1670,1677,1678,1680,1685,1687).
2343   * Closing of files opened by \externalocp.
2345   * Fix for a locale-related bug that make PDF generation fail
2346     with a "Parsing CFF Dict failed" message when including
2347     opentype fonts.
2349   * The included metapost is now version 1.102.
2351   * PDF rules in vertical modes in RL direction where output
2352     in the wrong direction
2354   * Fix for a crash on Apple fonts that contain a 'bsln' table.
2356   * The handling of the second argument to was
2357     broken
2359   * The included libpng is now 1.2.34
2361   * Handling of ttc files on Windows was broken
2364 ==============================================================
2365 Luatex beta-0.31.2 was released 20081209
2366 ==============================================================
2368 Besides fixing building issues, this release has
2370   * A small fix for a crash that could happen when using
2371     external OCPs.
2373   * A fix in the format of fontforge.to_table output.
2374     (In 0.31.1 <font>.lookups was near-empty; the lookups
2375     were accidentally output as part of the gpos table).
2377 ==============================================================
2378 Luatex beta-0.31.1 was released 20081209
2379 ==============================================================
2381 fixed a bunch of compilation errors on various platforms, but
2382 with no other visible changes.
2385 ==============================================================
2386 Luatex beta-0.31.0 was released 20081205
2387 ==============================================================
2389 This is just an intermediate release so that some testing can be
2390 done on the updated fontforge embedding.
2392 * There are new fields being generated by fontforge.to_table(),
2393   and one or two old ones have been removed. These fields are /
2394   will be documented in the manual, but very briefly:
2396   - MATH table and associated information are now exported
2397     (the main reason for the new fontforge code)
2398   - Baseline data is now exported
2399     (perhaps usable in lua code)
2400   - Multiple Master / Glyph variation data is now exported
2401     (but useless, for now)
2402   - Mac Feature (AAT) information is now exported
2403     (perhaps usable in lua code)
2404   - If (lookup) names were saved via the PfED table, these
2405     will the exported instead of the default, generated names.
2406     (as requested by Yannis)
2408 * dfont is now treated as an archive format just like ttc
2409   when it comes to NOTE: that does not mean you
2410   can actually use them, because the  backend doesn't know
2411   yet how to embed dfont fonts in the PDF, that is on the
2412   TODO list for the next big beta (0.40.0).
2414 * The executables are a lot larger than before. That is because
2415   much more of fontforge is included than before. Likely this
2416   will stay this way, because this makes upgrading the ff code
2417   much easier, and it means that luatex/FF potentially
2418   understands more font formats (after upgrading the backend,
2419   of course)
2422 ==============================================================
2423 Luatex beta-0.30.3 was released 20081128
2424 ==============================================================
2426 This release fixes a really big bug, a few smaller ones,
2427 and has updates of png and mplib:
2429 * All hyphenation patterns that were anchored at the start or
2430   end of a word were ignored in luatex versions 0.25.X and 0.30.X
2431   (and possibly even earlier).
2433 * Repeated use of \language=-1 could result in "There is not room
2434   for another language".
2436 * The lua true coroutines patch (Coco) is now disabled on OpenBSD
2437   running on non-intel platforms.
2439 * The lua socket library is patched so that it will now compile on
2440   OpenSolaris.
2442 * Luatex now has libpng 1.2.33 and mplib 1.100
2444 ==============================================================
2445 Luatex beta-0.30.2 was released 20081020
2446 ==============================================================
2448 * The Lua coco change from 0.30.1 is reverted as it gave
2449   trouble on MacOSX. Lua coco on non-intel OpenBSD platforms
2450   is now explicitly turned off.
2452 * The lua file reading speedup in 0.30.1 broke reading of
2453   files larger than 100MB.
2455 * Reading of font-related files was broken when there was a find
2456   callback, but no read callback.
2458 * The texmf.cnf array size setup values were ignored whenever
2459   --lua was given on the commandline (instead of only when
2460   texconfig.kpse_init is set to false).
2462 * glyphs with negative widths resulted in incorrect horizontal
2463   placement (overlapping) of the string in the output PDF.
2465 * Using \latelua could sometimes result in an invalid output PDF,
2466   and the argument token list was expanded too early
2468 * There was a read buffer overrun in the mapfile parser
2470 * There are two new variables in the status table:
2471   status.callbacks and status.indirect_callbacks (execution counts).
2473 ==============================================================
2474 Luatex beta-0.30.1 was released 20081009
2475 ==============================================================
2477 * Invalid return values from the linebreak_filter callback
2478   are now handled gracefully (was crashing)
2479 * a preinstalled ctangle is no longer needed except when
2480   cross-compiling
2481 * In 0.30.0, the .notdef fix was incorrectly applied to
2482   truetype / opentype fonts.
2483 * A bunch of all memory leaks is fixed
2484 * In lua, f:read('*a') now uses signicantly less memory
2485 * The number of \catcodetables is now limited to 64KB
2486   (for speed reasons)
2487 * Luatex could crash if there were PDF images with and
2488   without page /Group included on the same page
2489 * Lua coco now always uses setjmp (for OpenBSD compatibility)
2490 * The embedded mplib is updated to the latest svn version
2491 * # marks (characters with catcode 6) are no longer doubled
2492   inside \directlua
2493 * Handling the nul character (U+0000) with catcode 13
2494   (active) was broken
2495 * Luatex could crash on win32 with an access violation
2496   because there was one predefined language too few
2497   (the one matching \language=-1)
2499 ==============================================================
2500 Luatex beta-0.30.0 was released 20080930
2501 ==============================================================
2503 New features:
2505 * Readable \tex internal params that are counts, attrs, or dimens are
2506   now returned as numbers instead of strings, and skips as node objects.
2507   Read-write access to tex's skip registers added: tex.skip[0] etc.
2508 * new callback: 'linebreak_callback' to replace the internal paragraph
2509   breaking code
2510 * the tex table now supports more readable 'convert' values:
2511   tex.fontname, tex.pdffontname, tex.pdffontobjnum, tex.pdffontsize,
2512   tex.uniformdeviate, tex.number, tex.romannumeral, tex.pdfpageref,
2513   tex.pdfxformname  (each takes a number as argument)
2514 * new readable parameter: tex.fontidentifier(number) returns the
2515   \csname associated with that font id
2516 * luatex now outputs \FONT<nr> instead of \^^@ in Overfull/Underfull
2517   messages if the font's id text is zero (like for expanded fonts) (#77)
2518  * luatex --version is split into --version and --credits
2519 * There is now (again) an svn revision number in luatex --version (#91)
2520 * Add support for more read-only internal access from lua:
2521   tex.lastpenalty, tex.lastkern, tex.lastskip, tex.lastnodetype,
2522   tex.inputlineno, tex.badness, tex.pdftexversion, tex.pdflastobj,
2523   tex.pdflastxform, tex.pdflastximage, tex.pdflastximagepages,
2524   tex.pdflastannot, tex.pdflastxpos, tex.pdflastypos, tex.pdfrandomseed,
2525   tex.pdflastlink, tex.luatexversion, tex.Alephversion,
2526   tex.Omegaversion, tex.Alephminorversion, tex.Omegaminorversion,
2527   tex.eTeXminorversion, tex.eTeXversion, tex.currentgrouplevel,
2528   tex.currentgrouptype, tex.currentiflevel, tex.currentiftype,
2529   tex.currentifbranch, tex.pdflastximagecolordepth (#81)
2530 * the old --src-specials are replaced by --synctex (#63)
2531 * the \expanded primitive is backported from pdftex 1.50 (#43)
2532 * luatex now comes with libpng 1.2.32
2533 * experimental: tex.definefont(string, number) associates a
2534   csname string with a font id number
2536 Bugs fixed compared to 0.29.0:
2538 * dashes were exported wrongly by MPlib
2539 * multi-item \discretionaries were broken in various ways (#78, mailinglist)
2540 * read_font_info was sometimes called recursively from lua-loaded
2541   virtual fonts
2542 * do_vf was sometimes called on lua-loaded fonts that where
2543   already known to be virtual
2544 * trailing junk in tfm files is now ignored (needed for ecrm fonts)
2545 * pdf_ignored_dimen was initialized too late, breaking \prevdepth
2546   handling and causing output lines to overlap eachother (#72)
2547 * pdf.immediateobj() had a printf-related bug
2548 * the fontname terminal logging is fixed for strange font file names
2549 * lua tex array assignments now listen to the globaldefs setting
2550   (tex.count[0] etc) (#92,partial)
2551 * \parshape was broken (#70)
2552 * there is no longer a ".tex" extension forced on very input file (#74)
2553 * eof() for mapfiles was true one byte too soon (#76)
2554 * out of range \lefthyphenmin and \righthyphenmin settings now actually
2555   disable hyphenation (#90)
2556 * tex.unset_attribute() looked too far ahead when a to-be-unset
2557   attribute id not only did not exist in the node, but was also
2558   higher than the highest set attribute on the node. (#65)
2559 * the parameters attr and page_name of read_image() were swapped
2560   (this broke \pdfimage with attributes)
2561 * tex filenames with spaces in them on the command line are now
2562   allowed again (#30)
2563 * sometimes pfb fonts were included multiple times without valid
2564   reason (#29)
2565 * some parts of the pdftex 1.40.9 PNG transparancy hack were still
2566   present and caused transparant png handling to fail
2567 * \localinterlinepenalty and \localbrokenpenalty were broken
2568 * special case catcode tables are now handled better (#23)
2569 * the handling of missing .notdef charstrings in old pfb fonts
2570   is fixed (#27)
2572 ==============================================================
2573 Luatex beta-0.29.0 was released 20080718
2574 ==============================================================
2577 New features:
2579 * The embedded pdftex is now 1.40.9 (forthcoming) except for the
2580    following:
2581    - the png transparancy fix is skipped because it is in conflict
2582      with a macro-based solution offered by context mkiv.
2583    - LFS (PDF files > 2GiB) is not working yet.
2584    - Synctex is still missing
2586 * libpng, xpdf, and zlib are updated to their pdftex 1.0.9 levels
2588 * MPlib is updated to 1.090
2590 * The syntax of buildpage_filter is changed to avoid confusion
2591    (and crashes). See the manual for the new calling convention.
2593 Bugs fixed compared to 0.28.0:
2595 * The previous bugfix for \languages skipping numbers was wrong.
2597 * Various compile-time warnings are suppressed
2599 * \pdfsetmatrix was broken
2601 * \pdfsave and \pdfrestore were broken
2603 * Valid user_defined whatsits nevertheless were generating errors.
2606 ==============================================================
2607 Luatex beta-0.28.0 was released 20080630
2608 ==============================================================
2610 There is one new feature:
2612 There is now experimental support for non-trivial discretionaries
2613 following explicit hyphens. In analogy to \prehyphenchar and
2614 \posthyphenchar, there are two new parameters \preexhyphenchar en
2615 \postexhyphenchar. Both new parameters default to zero (nothing).
2616 When set to a nonzero value, the parameter is added to either the
2617 pre- or post- break text. Note that this is *in addition to* the
2618 hyphen already in the input. Testing and comments are very welcome.
2620 Here is a short example (no idea what is says):
2622    \pdfoutput=1
2623    \hsize=2in
2624    \postexhyphenchar=`-
2625    Seria bom se eu
2626    pudesse t\^e-lo mantido como amigo, mas por
2627    mais bem-intencionado que eu fosse, n\~ao
2628    foi possivel
2629    \bye
2633 Bugs fixed compared to 0.27.0:
2635 * Words that started off with a character with a zero \lccode
2636    were never hyphenated at all.
2638 * There was a bug in the new active characters code that prevented
2639    the latex format from being built (with Invalid character error).
2641 * There is a temporary fix for the sometimes appearing "Font has a
2642    bad FontBB" message from Acrobat.
2644 * \leaders did not actually stretch enough (the last bit of glue
2645    that has to line up the line endings was never output to the PDF).
2647 * Bad paragraph-related callbacks could result in luatex crashing.
2649 * The pre_linebreak and post_linebreak filters were never called
2650    when \output was active (this was a leftover of a superceded
2651    optimization).
2653 * 'skipping' language codes when setting up \patterns c.s. did not
2654    work (it used the next empty slot instead of the actual value of
2655    \language).
2657 * Using multiple 'attr' keywords on box items could cause random
2658    crashes.
2660 * Calling lang.hyphenate() with one argument (without specifying a
2661     tail node) could crash.
2663 * The luatex pdf banner and version reporting is cleaned up a bit.
2665 * Conflicting patterns inside \patterns now give an error:
2666      ! Conflicting pattern ignored.
2667    (duplicate identical patterns are ignored without error).
2669 ==============================================================
2670 Luatex beta-0.27.0 was released 20080624
2671 ==============================================================
2673 Bugs fixed compared to 0.25.3:
2675 * Unicode reencoding support for non-standard (i.e. older)
2676    Type1 fonts is now somewhat less broken than it was (#25)
2678 * .vf fonts using specials crashed luatex
2680 * luatex would crash on --\par (#33)
2682 * An attempt is made to get a sane default value for StemV in
2683    the created pdf (#32)
2685 * We can now guarantee that %PDF-1.* header is printed before
2686    the first pdf.print() output
2688 * lang.hyphenate() was broken
2690 * insert_before(a,a,b) was broken (#37)
2692 * argv[0] is now cleaned up before being used as a default for
2693    mem_name and prog_name (#28).
2695 * luatex would crash on loading extended fonts (fonts loaded
2696    via lua callbacks) from a format file.
2698 * The fix for pdftex bug #799 is backported from pdftex 1.40.4.
2700 * slnunicode had a bug in the unicode.utf8.gmatch iterator.
2702 * Queries of nonexisting fontdimens could cause a crash.
2704 * luatex would crash on {\textdir TLT\pardir TLT x\break\par }
2706 * Fixed wrong placement of lines in mixed-direction paragraphs
2707    that could happen in some situations.
2709 Other news:
2710 * Luatex now includes luasocket (#35)
2711    See
2712    for usage.
2713    There is a new commandline option: --nosocket to disable this,
2714    and that is also implied by --safer.
2716    NOTE to the binary builders: there are some unfixed configure
2717    problems when you need to add a specific library to get socket
2718    support on your platform. You probably will have to edit the
2719    generated Makefile by hand (search for 'socketlib').
2721 * There is ongoing development to the 'img' and 'mplib' libraries.
2722    See the reference manual for details.
2724 * The 'character commands' in virtual fonts now support image
2725    inclusion. See the reference manual for details.
2727 * Lua error messages now include the call stack.
2729 * \directlua and \latelua have been extended to accept a 'name'
2730    keyword. The argument is a token list that is used as the lua
2731    name of this chunk in lua error messages and call stack prints.
2732    (#42)
2734 * The lua chunk names can be interfaced via a new virtual
2735    table called lua.instancename, the values in that function as
2736    defaults in the absence of 'name' keywords.
2738 * The 2-plane limit on active character range is removed (#12).
2740 * Subsetted TTF fonts in the PDF now retain the cmap table.
2742 * There is a new Lua variable os.selfdir. This contains the
2743    full absolute pathname of the directory that the executable
2744    resides in (with symlinks resolved)
2746 * There is a new function os.uname() this returns a lua
2747    table containing various platform information items.
2749 * The node library now uses text strings for direction specifiers
2750    instead of numbers. See the reference manual for details.
2752 * The 'E' (edit) as error response functionality is now a noop.
2754 * Adding luatex 0.25.3 to texlive resulted in a few minor backports,
2755    in particular: Support for mktexfmt is added, and luatangle now
2756    identifies itself as such (instead of calling itself otangle).
2758 * We fixed a whole series of portability problems (but
2759    we probably introduced new problems as well).
2761 * Most (all?) files now have a corrected Copyright header,
2762    and link in NEWS source/texk/web2c/luatexdir/NEWS  into the object file.
2764 * Some unnecessary files were removed from the distribution.
2766 ==============================================================
2767 Luatex beta-0.25.3 was released 20080418
2768 ==============================================================
2770 Bugs fixed:
2771 * Pdftex bug no. 936 (sarovar) regarding vertical
2772   positioning of embedded PDF files if depth parameter is given.
2773 * Luatex gave bogus lua return values for the tex.wd/hd/dp
2774   values of void boxes
2775 * A few bugfixes in mplib (square pens caused hangs, elliptical
2776   pens caused confused output)
2777 * Hyphenation of uppercase words (\uchyph) was broken
2778 * Output image placements corrected for all 8 transform cases
2779   also when artbox etc. is used
2780 * There were missing maketexstring() calls in error messages
2781 * Math display contents were sometimes prematurely freed during
2782   the placement of the equation number
2783 * Setting \language=-1 could cause crashes due to an array
2784   index going out-of-bounds
2786 Other news:
2787 * is added to the source distribution. This is a
2788   script that crosscompiles osx ppc binaries from osx intel
2789 *[<chardef name>] is now supported (but still experimental)
2790 * a bunch of compiler warnings are removed
2791 * The fontforge library now dump AAT feature tags as and
2792   "<id,flags>" string
2793 * The new function font.nextid() predicts the next assigned font id
2794 * Some source code changes are backported from texlive
2796 ==============================================================
2797 Luatex beta-0.25.2 was released 20080410
2798 ==============================================================
2800 * Updated to MPlib 0.40
2801 * Bugfixes and cleanup in the lua img table code
2802 * Fix \pdflastximagepages bug from pdftex
2803 * Fix for very large tex.print strings
2804 * Update to Lpeg 0.8.1
2805 * &D Bugfix for Type1 fonts when out-of-range characters
2806   are marked as 'used'
2808 ==============================================================
2809 Luatex beta-0.25.1 was released 20080321
2810 ==============================================================
2812 * Updated to MPlib 0.30 (that is now becoming usable)
2813 * The build requirement for a pre-installed ctangle is gone
2814   (thanks to Martin)
2816 ==============================================================
2817 Luatex beta-0.25.0 was released 20080311
2818 ==============================================================
2820 New:
2822 * mplib library:
2823    This version features an embedded MP interpreter whose output
2824    can be directly accessed from lua code (mplib), without calls
2825    to an external "mpost" command. Of course it has bugs and
2826    limitations (makempx does not work, for example) but keep in
2827    mind that it is only an initial attempt.
2828    See the manual for more details.
2829 * img library:
2830    ** img.immediatewrite() is added
2831    ** images now accept a 'transform' key
2832    ** widths etc. can now be given as width="100mm"
2834 Fixed:
2836 * \parshape handling was completely broken since 0.20.0+
2837 * when \pdfprotrudechars was in effect, an assertion failure
2838    could happen when embedded \hboxes in the paragraph appeared
2839    at the end of a line.
2840 * import of otf fonts with contextual lookups has been debugged,
2841    thanks to a patch by GW himself.
2842 * compiling with gcc 4.2.3 is now supported
2843 * if you want to build from source, you need a pre-installed ctangle.
2846 ==============================================================
2847 Luatex beta-0.22.1 was released 20080227
2848 ==============================================================
2850 * The macnames.c source file for building ttf2afm is restored.
2851 * "make depend" in luatexdir now works again
2852 * luatex sometimes crashed because it attempted to expand an
2853   already expanded font
2854 * luatex aborted when --progname was given but no format name.
2855   It now sets the format name to the given progname in that case
2856 * sometimes paragraphs with near-empty lines could cause a crash
2857 * img.supportedtypes() had a bug causing it to crash
2858 * img.supportedtypes() has been renamed to img.types for consistency
2859 * img.boxes() added, returns strings representing bounding boxes
2860 * img.node() added, returns a whatsit node cf. \pdfrefximage
2861 * node.write() now accepts multiple arguments
2862 * the program_name_set switch was not set automatically from C,
2863   causing errors unless lua code called kpse.set_program_name()
2864   explicitly
2865 * kpse.set_program_name() can now be called more than once
2866   in a single run.
2867 * os.spawn{...} and os.exec{...} could cause crashes because of
2868   a memory allocation error
2870 ==============================================================
2871 Luatex beta-0.22.0 was released 20080215
2872 ==============================================================
2874 * We now have an official bug tracker:
2875 * A new lua library (img) is added that allows a direct
2876    interface to the image handling of luatex. You can use this
2877    to include images from lua code instead of via the more
2878    traditional \pdfximage cs. See the manual.
2879 * An optional equal sign after \{pre,post}hyphenchar is now
2880    allowed.
2881 * os.exec() has been extended, and os.spawn() added. These
2882    functions have support for quoted strings, and they
2883    also accept a table with preseparated command arguments.
2884 * New string constants os.type and are provided.
2885 * node.last_node() is added. This pops and returns the last
2886    node from luatex's 'current list'
2887 * node.write() is added. This appends a node to the end of
2888    luatex's 'current list' (experimental).
2889 * The strict check on unicode compliance in pattern files
2890    is dropped. Patterns files still have to be in proper UTF-8
2891    encoding, but the error for non-Unicode character values
2892    (like 0 - 31 and 127 - 159) is dropped.
2893 * \pdfadjustinterwordglue, \prependkern, \appendkern
2894    and associated \XXXXcode arrays are gone.
2895 * The rest of the pdftex font arrays are now merged into
2896    the new luatex font data structure. This means that you
2897    can now set up font expansion from lua code, and that a few
2898    font-related limits are gone.
2899 * The 'top_skip' field in 'insert' nodes is renamed to 'spec',
2900    for improved consistency.
2901 * kpse.show_path() added. This behaves just like
2902    $ kpsewhich --show-path
2903 * The unicode.utf8 functions now also accept values in the range
2904    1.114.112 - 1.114.367 that is used by LUATEX for raw byte output.
2906 What's been fixed:
2908 * Better node memory (de)allocation error tracking and messages
2909 * Compilation on MacOSX 10.5 was broken
2910 * There was a bug in node.insert_after
2911 * Use of \{pre,post}hyphenchar was broken
2912 * lfs.permissions was leaking memory
2913 * Some warning and error messages are improved a bit
2914 * A set of bugs in character protrusion, this seems to be working
2915    ok now.
2916 * Also, a set of bugs in font expansion. This now works in most
2917    cases but is not quite bugfree yet (problematic files for testing
2918    are welcomed).
2919 * The functions in the kpse library would crash luatex if
2920    kpse.set_program_name() was not yet called. gives an error now.
2921 * Alignments with spanned columns could cause crashes
2922 * A patch is added for problems with filename parsing on the
2923    "first input line" (by Jonathan Kew)
2924 * The hpack_filter and vpack_filter were only called for lists longer
2925    than one node.
2926 * Luatex is now more forgiving about font subsets being smaller
2927    than their expected size (issues a warning instead of aborts now)
2928 * A "double-free ignored" error for paragraphs with lines starting
2929    with discarded items was fixed.
2931 ==============================================================
2932 Luatex beta-0.20.2 was released 20071217
2933 ==============================================================
2935 * some portability fixes to the build scripts
2936 * a fix for multi-\span in alignments causing unbreakable
2937    loops
2938 * manual improvements from Jonathan Sauer
2939 * fix for undefined csnames in \directlua if
2940    web2c's hash_extra is nonzero
2941 * fix for LR text inside of a RL document
2942 * fix for open_read_file callback not being called
2943    unless find_read_file was also registered
2944 * removed the ocp status message when \ocps are not
2945    actually used
2946 * "unicodeenc" in the fontforge to_table renamed to
2947    "unicode" for improved consistency
2949 ==============================================================
2950 Luatex beta-0.20.1 was released 20071207
2951 ==============================================================
2953 * texlua was broken on Solaris because the some C header
2954    files were loaded in the wrong order.
2955 * os.tmpdir() now accepts an argument, making it easier
2956    to use. It now generates more unique filenames when
2957    it is called repeatedly in one run.
2958 * The --luaconly commandline switch is now documented
2959    in the --help text.
2960 * The new extended hyphenation exceptions were severely
2961    broken.
2962 * \pdfprotrudechars could cause luatex to abort with an
2963    assertion failure.
2964 * There was a bug in the  \span code that could cause endless
2965    loops.
2966 * The simple forms of \leaders were messed up on windows
2967    because a variable was not properly initialized.
2968 * Non-grouped \textdir commands created invalid output.
2969 * e-TeX's pseudo files were not closed properly in ini mode.
2970 * The luatex.web now weaves properly again.
2971 * I made some small improvements to the manual.
2973 ==============================================================
2974 Luatex beta-0.20.0 was released 20071205
2975 ==============================================================
2977 News compared to the last beta (0.11.2) is as follows:
2979 * Completely overhauled hyphenation and ligkern application,
2980   including the addition of a new "lang" table in lua to
2981   interface to the language parameters, some extra functions
2982   in the "node" table, and a few extra callbacks ("hyphenate",
2983   "ligaturing", "kerning", "post_linebreak_filter").
2985   There is a new chapter in the manual to document all the
2986   changes to the hyphenation and line breaking algorithms,
2987   it is simply too much to list here.
2989 * the interface of the pre_linebreak_filter,hpack_filter,
2990   vpack_filter, and pre_output_filter has changed slightly.
2992 * boxes can now get explicit attributes different from the
2993   currently active set, using a syntax like
2995   \hbox attr2=12 attr3=-1 to 12pt {Hi!}
2997 * lpeg is now at version 0.7
2999 * a whole series of exotic bugs and compiler warnings are
3000   fixed, mostly thanks to the watchful eye of Fabrice.
3002 * texio.print now accepts multiple strings as arguments.
3004 * the lua functions os.sleep(), os.times(), os.gettimeofday()
3005   and os.tmpdir() have been added.
3007 * lua now comes with the coroutine (coco) patches from the
3008   luajit project applied.
3010 * the banner line no longer claims to be TeX.
3012 * a bunch of bugs reported on the mailing list have been
3013   fixed (I hope all of them).
3015 * (internal) we found lots of small ways to speed up lua
3016   node processing.
3018 * (internal) the node (de)allocation functions have been
3019   rewritten, so that absolutely all nodes now have a type,
3020   even the ones with variable sizes.
3023 ==============================================================
3024 Luatex snapshot-20071029 was released 20071029
3025 ==============================================================
3027 * Completely overhauled hyphenation and ligkern application.
3029   There is a new chapter in the manual to document all the
3030   changes to the hyphenation and line breaking algorithms,
3031   it is simply too much to list here.
3033 * the interface of the pre_linebreak_filter,hpack_filter,
3034   vpack_filter, and pre_output_filter has changed slightly.
3036 * lpeg is now at version 0.7
3038 * a whole series of exotic bugs and compiler warnings are
3039   fixed thanks to the watchful eye of Fabrice.
3041 * texio.print now accepts multiple strings as arguments.
3043 * The lua function os.sleep() is added
3045 ==============================================================
3046 Luatex beta-0.11.2 was released 20070918
3047 ==============================================================
3049 * Pdf inclusion and subsetting of CID-based opentype fonts
3050   now works as it should.
3052 ==============================================================
3053 Luatex beta-0.11.1 was released 20070918
3054 ==============================================================
3056 A quick list of what is new and fixed since beta 0.10.2:
3058 New:
3059 * pfb+afm fonts can now be used in 'wide' (encodingbytes=2) mode
3060 * searching in PDFS using 'wide' fonts now works reasonably well
3061   (based on the tounicode feature)
3062 * related to that, tounicode information can now be passed
3063   on inside the font metrics table
3064 * font subsetting is now supported for CID-based OpenType fonts
3065   (however, there is a known bug with KpozMinProVI-Regular.otf)
3066 * fontforge's warning and error messages are now intercepted
3067   and passed on to the lua code as a second return value of
3068   the function
3069 * the new primitive \suppressfontnotfounderror can suppress
3070   the TeX error for "Font not found"
3071 * The lua function font.current can now be used to set TeX's
3072   current font
3074 Fixes:
3075 * set_attribute(-1) is now the same as unset_attribute()
3076 * OpenType lookups with glyph classes would crash luatex
3077 * luazlib would not compile on debian (fix from Norbert)
3078 * CID-based fonts would crash luatex
3079 * Bare CFF should be read in binary mode (fix from Akira)
3080 * VF processing did not process packets containing zero bytes properly
3081 * the truetype collection (.ttc) handling is fixed, so that all
3082   of the fonts inside a collection can now be used reliably
3083 * application segfaults and stack overflows are intercepted
3084   so that luatex can quit a bit more gracefully
3085 * an assertion failuer on systems with signed chars (linux-powerpc)
3086   is fixed
3087 * a crash on AMD64 linux was fixed
3088 * the lua "pdf" table code was wrong
3089 * \ifcsname did not work properly for UTF-8 characters
3090 * Use of the math-related functions using make_fraction (like \atop)
3091   caused a crash
3092 * \handling of \if\noexpand was wrong
3093 * applied a patch that cleans up XForm and page calculations
3094 * "autoconf" support from zziplib is stripped
3096 ==============================================================
3097 Luatex beta-0.10.2 was released 20070814
3098 ==============================================================
3100 Bugs fixed:
3102 * the primitive \span was completely broken
3103 * \pdfexpandfont (font expansion) misbehaved if it was used more
3104    than once
3105 * virtual fonts: sometimes they used the wrong internal font id,
3106    loading vf fonts via fonts.read_vf() was impossible, and sometimes
3107    virtual fonts created segfaults
3108 * while dumping formats, the last font parameter for each font was not
3109    dumped at all
3110 * zziplib was always compiled with pre-installed zlib headers, instead
3111    of the ones in the build tree
3112 * lua 5.1.2 has trouble quoting ^Z characters etc, the tentative patch
3113    for lua 5.2 from Luiz fixes that, hopefully
3114 * fontforge.font('font.pfb') now properly parses AFM boundingboxes
3115 * non-existing files in the argument for or
3116 could cause segfaults, now it generates an error
3117    instead
3118 * did not return character widths for vertical fonts
3119    as it should
3120 * on Windows, fontforge believed that ttc files (TrueType Collections)
3121    were actually directories. ttc processing is still not 100% correct,
3122    but it is getting better
3123 * the build system used explicit 'make' sometimes
3124 * the auto-growing string pool was not used everywhere
3125 * there were some typos in the documentation parts of the pascal web
3126 * use of \parshape could easily exhaust all available memory
3129 New features:
3131 * support for applying Adobe Feature files (.fea) and Adobe Font
3132    Metrics (.afm) is added to the fontforge library
3133 * will now return an array of tables for the contents
3134    for ttc files
3135 * support for a 'texluac' personality was added, to replace the 'luac'
3136    command from the official Lua distribution
3138 ==============================================================
3139 Luatex beta-0.10.1 was released 20070719
3140 ==============================================================
3142 This was a hotfix because beta-0.10.0 was completely broken.
3144 ==============================================================
3145 Luatex beta-0.10.0 was released 20070718
3146 ==============================================================
3148 The latest version of the manual is included in the package, and I
3149 am not going to repeat all of that. There were some minor changes
3150 compared to the previous snapshot, but mostly just bugfixes and
3151 documentation improvements.
3153 ==============================================================
3154 Luatex snapshot-20070626 was released 20070626
3155 ==============================================================
3157 * Integrated the lua library lzlib, this defines tables with
3158    bindings for zlib (including eazy-to-use gzip support)
3159 * Updated to slnunicode version 1.1
3160 * Some small cleanups in the sparse array handling
3161 * Moved the raw byte support out of the valid unicode range
3162 * Fixed a bug in the OFM font reader
3163 * Removed the pdftex snap nodes (and associated primitives)
3166 ==============================================================
3167 Luatex snapshot-20070622 was released 20070622
3168 ==============================================================
3170 Not a lot of news, but it fixes a few important bugs in the lua
3171 node processing. Also a few utility functions are added:
3173 * tex.round()
3174    rounds and bounds checks a lua number to make sure it is
3175    a valid tex integer.
3176 * tex.scale()
3177    multiplies a number (or the numeric values in a table)
3178    with a fixed quantity, and calls tex.round() on the result.
3179 * node.has_field()
3180    Test if a node has a specified field name
3181 * node.remove()
3182    removes a node from a nodelist, while keeping the list intact
3183 * node.insert_before()
3184    inserts a new node into a nodelist, just before a specified
3185    location node
3186 * node.insert_before()
3187    inserts a new node into a nodelist, just after a specified
3188    location node
3189 * node.hpack()
3190    packages a nodelist into a hlist node
3193 ==============================================================
3194 Luatex snapshot-20070619 was released 20070619
3195 ==============================================================
3197 * The lua node processing interface is completely reworked.
3198    It is now completely based on userdata, and uses a new lua table
3199    called 'node' to hold the methods. More detailed information
3200    is in the manual (of course).
3202 * There is a fifth node processing callback:
3203       pre_output_filter
3204    this is executed just before the packaging of \box 255.
3206 * The hpack_filter and pre_linebreak_filter callbacks now
3207    receive an extra argument indicating the number of top-level
3208    glyphs in the node list.
3210 * Virtual fonts can now contain a 'node' key in the glyph
3211    commands: the value should be a hlist node (i.e.: a horizontal
3212    box), and that will then be output for each character access
3213    in that font.
3215 * A new set of registers is added, called \attribute. These are
3216    values that will be automatically attached to nodes created in
3217    their scope. More information in the manual.
3219 * Direct read/write access to TeX's box registers is addded to
3220    the lua 'tex' table.
3222 * TeX's main memory now grows dynamically, and the (de)allocation
3223    routines have been rewritten completely.
3225 * The 'kpse' table is extended with extra interface functions, to
3226    allow texlua to be used as a scripting engine.
3228 * The \pdftexversion command now returns 200, not 140.
3230 * The displayed banner and --version screens are cleaned up.
3232 * The format file is now RLE compressed. Not as small as before,
3233    but unpacking is much faster.
3236 ==============================================================
3237 Luatex snapshot-20070426 was released 20070426
3238 ==============================================================
3240 This past month I have been busy with nodes and lists of nodes,
3241 so the big new feature in this release is that there are four
3242 callbacks that operate on node lists:
3244   buildpage_filter
3245   pre_linebreak_filter
3246   hpack_filter
3247   vpack_filter
3249 The preliminary documentation for these is in the manual, but the basic
3250 idea is that you can filter a node list just before LuaTeX starts doing
3251 something with it (like line breaking). This functionality is not stable
3252 yet: the node presentation of the various node types is pretty much OK
3253 now, but keep in mind the following:
3255   * math noads and math typesetting are not handled at all (yet)
3256   * not all hpacks and vpacks are intercepted (yet)
3257   * the nested node list handling will probably change
3258   * A conversion tool for nodes to/from dictionaries is planned,
3259     but not done yet
3261 The other changes in this snapshot are various bugfixes (for builds
3262 on various platforms as well as font issues) and speedups (in the
3263 execution of callbacks and the creation of lua font representations).
3266 ==============================================================
3267 Luatex snapshot-20070322 was released 20070322
3268 ==============================================================
3270 * I have changed the token_filter callback quite rigorously,
3271    mostly because of speed issues. The raw speed of trivial
3272    lua token handling is now only about 20 times slower than
3273    the native handling. Not bad at all, considering it has to move
3274    between interpreted and compiled code for each and every
3275    token. If you do not run the token filter inside \output,
3276    the effective run speed difference should not be much more
3277    than a factor 1.5.
3279    Two big differences: you have to call token.get_next()
3280    yourself, and the token table is now a three-item array
3281    instead of a five-key hash. The minimal example changes to
3283    \directlua0{
3284      callback.register('token_filter', function ()
3285        return token.get_next()
3286        end)
3287    }
3289    more details are in the manual.
3291 * I've fixed a few bugs in the handling of Opentype TTF, and added
3292    a new key in the font definition table:
3294       f.encodingbytes = (1|2)
3296    The default is 2 for opentype and truetype format, 1 otherwise.
3297    Later on, it will become possible to have a type1 font in 2-byte
3298    (CID) encoding or a truetype font in traditional encoding (1-byte),
3299    but I have not covered all cases yet.
3303 ==============================================================
3304 Luatex snapshot-20070309 was released 20070309
3305 ==============================================================
3307 * The OCP debug information is removed again.
3309 * There is a new callback that I am quite excited about myself:
3310    'token_filter'.
3313 A bit of text from the reference manual:
3314 --------------------
3315 This callback allows you to change the modify any lexical token that
3316 enters the \type{main_control} function before \LUATEX\ executes the
3317 associated command.
3319 Note: not all tokens can be intercepted yet, only those that are `seen'
3320 by \LUATEX's main control function.  Supplemental tokens like the bodies
3321 of macro definitions and the right-hand side of register assignments
3322 are not seen. For now, this is intentional.
3324 \startfunctioncall
3325       function (table <token>)
3326          return table <token>
3327       end
3328 \stopfunctioncall
3330 Calling convention for this callback is bit more complicated then for
3331 most other callbacks.  Initially, lua function will be called with the
3332 next token from \type{get_next()} as argument, represented as a small
3333 lua table.  The function should either return a lua table representing
3334 a valid to-be-processed token, or something else like nil or an empty
3335 table.
3337 If your lua function does not return a table representing a valid
3338 token, it will be immediately called again with yet another token
3339 from \type{get_next()} as argument, until it eventually does return
3340 a useful token.
3342 But if the function does return a usable token, then that token will
3343 be processed by \LUATEX. Afterwards, the function will be called
3344 again, but now without an argument. This is repeated until it stops
3345 returning tokens.  Then processing reverts back to the other branch.
3347 The point behind that roundabout calling convention is that it
3348 allows the lua function to buffer tokens for various uses. That in
3349 turn makes it possible to do some really advanced things like
3350 replacing OTPs.
3352 Now about that table. The table that the function will receive
3353 contains four fields:
3355 \starttabulate[|l|i|p|]
3356 \NC Key     \NC  type    \NC                Explanation \NC\FR
3357 \NC cmd     \NC  string \NC A representation of  \LUATEX's internal
3358                              command code\NC\NR
3359 \NC chr     \NC  number \NC The command code modifier\NC\NR
3360 \NC cs      \NC  string \NC If the token came from a csname, this
3361                              is  that csname\NC\NR
3362 \NC mod     \NC character \NC A single character string representing
3363 the current processing mode. One of {\bf v}ertical, {\bf h}orizontal,
3364 display {\bf m}ath, {\bf n}o, internal {\bf V}ertical,
3365             restricted {\bf H}orizontal, or inline {\bf M}ath mode.\NC\LR
3366 \stoptabulate
3368 If you modify the table before returning it, then it is wise to return
3369 either a (\type{cmd}, \type{chr}) pair, or a \type{cs} string.  That is
3370 because if both options are present, the pair has precedence and the
3371 string is ignored. On the return table, {\bf mod} is ignored always.
3372 --------------
3374 I have no long example code yet and it is not as complete as one
3375 would want it to be because it is not intercepting everything that
3376 comes in, only the bits that are triggered by the main control
3377 loop.
3379 I decided to do a fast snapshot release for two reasons:
3381 * It is one of the easier extensions to get started with if you want
3382    to learn a bit about lua programming
3384 * I would welcome feedback on the token interface, because it will
3385    be needed in other places as well, soon. I am still not sure
3386    whether converting the command to/from strings is worth it, for
3387    example. And maybe it would be less confusing if you could return
3388    a list of tokens instead of being called repeatedly?
3390 Here is the trivial example to get you started:
3392     \directlua0{
3393       callback.register('token_filter', function (t) return t end)
3394     }
3397 ==============================================================
3398 Luatex snapshot-20070307 was released 20070307
3399 ==============================================================
3402 * Non-CID PostScript-based Opentype fonts are now combined over
3403    the entire document, and properly subsetted. The code is
3404    borrowed from xdvipdfmx with some minor adjustments
3406    Adding support for CID-keyed OpenType fonts would not be hard
3407    but at the moment I lack example input (and incentive).
3409 * A small extension to the virtual fonts structure: you can use
3411      f.fonts[1] = { 'id' = 38}
3413    to do a backreference to a previously defined font. This saves quite
3414    a few computations
3416 * There was a bug in the handling of \leaders in the output whereby
3417    it's width was taken to be twice what it should be while writing
3418    to the PDF, fixed now.
3420 * The font inclusion code is cleaned up a bit by Hartmut.
3422 * Some compilation problems were fixed.
3424 * There is (quite a bit of) debugging information printed out when
3425    OTPs are in use, because I am tracking down a bug reported by Idris.
3427    The input of each and every OTP step is shown on the terminal in
3428    a line line this:
3430      [57902][1568][58423][1568][58408][1568][58921]
3432    those are the decimal values of ocp i/o characters. If you don't
3433    need them, don't worry about it.
3435 ==============================================================
3436 Luatex snapshot-20070302 was released 20070302
3437 ==============================================================
3439 * The 'snapshot version' banner is now calculated dynamically
3440   at build time. This aids in figuring out what binary people
3441   are actually running, but it can possibly break the build on
3442   systems that do not have a `date` command.
3444 * The do_vf() function that checks for virtual font existance
3445   is now run immediately after the font definition instead of
3446   being postponed until characters are output.
3448 * The 'define_font' callback interface has changed a little.
3449   It is now:
3450     retval = function (name,size,fontid)
3452   where fontid is the internal font number of the font that
3453   is currently being defined, and retval can be either a table
3454   (as before) or a different, previously defined fontid. This is
3455   useful if a previous definition can be reused instead of
3456   creating a whole new font structure.
3458 * The internal font data structure has been redone. Glyph index
3459   inside a font is now handled by a sparse array, so that use
3460   of e.g. 0xFB01 (fi-ligature) no longer creates a 64000+ entries
3461   character array.
3463 * The internal cache-ing of font metric information is turned
3464   off completely, because it was based on the assumption that
3465   name + size were a unique identifier for a font. This can no
3466   longer be guaranteed.
3468 * word boundary processing now works OK again, thanks to the
3469   introduction of two virtual characters in the font table
3470   definition. Besides the normal numeric entries in the
3471   f.characters table, there can now also be two string keys:
3472   "left_boundary" and "right_boundary". The  ligatures and kerns
3473   of the 'left_boundary' character are used for the pre-word
3474   boundary processing, ligatures and kerns between characters
3475   and 'right_boundary' are used for the post-word processing.
3477 * Lua font table references are no longer cached by the
3478   executable ,in order to preserve memory. (the only downside
3479   is that font.fonts[] access is now slower because of the need
3480   to recreate the lua table).
3482 * There are other some small changes to the font table formats.
3483   Please see the manual for details.
3485 * A 'real' font can now still have virtual characters if they
3486   are loaded via lua. Just set the 'commands' section and/or
3487   the 'fonts' array to your liking, and it should work out.
3489   If you have created no 'fonts' array at all, then the default
3490   font (indentifier '1')  is the current font, so that you
3491   can create virtual duplicates of already existing characters.
3493   Note: this does not work the other way. There can not be
3494   'real' characters in a virtual font!
3496 * Truetype-based opentype fonts no longer require Acrobat 7
3497   t(hey are now written out as if they are normal truetype).
3499 * A lua init script can now set 'texconfig.formatname' and/or
3500   'texconfig.jobname'. If ther is no file or format specified
3501   on the commandline, then, if, one of those keys is present,
3502   that key will be used instead of simply quitting with an
3503   error.
3505 * Placement of boxes and rules in right-to-left mode is debugged,
3506   and now seems to work ok.
3508 * Virtual font loading is debugged.
3510 * Some memory leaks are resolved
3512 * HZ font expansion should work ok again, but is not tested.
3514 * a few of the warning during opentype loading have been removed
3515   because the problems are rather harmless and turned out to be
3516   triggered by almost every font.
3519 ==============================================================
3520 Luatex snapshot-20070218 was released 20070218
3521 ==============================================================
3523 * The pdftex stuff is now updated to 1.40.3
3524   (and on top of that, it still has those extra patches announced in
3525   snapshot 20070202)
3527 * The virtual font parser is debugged and now appears rather stable.
3529 * There is one extra virtual command:
3531     "commands" = {
3532        {"slot", 1, 97}, -- place character 97 'a' in local font 1.
3533      }
3535   This is just a shortcut for {"font",1}, {"char", 97}
3537 * Some small memory leaks have been fixed. Luatex does not leak big
3538   time, but I'd like to get back to valgrind reporting '0 out of 0',
3539   instead of the current 800 bytes or so (that is a slow process).
3541 * You can read a truetype or opentype font from within lua code
3542   using font.read_ttf() or font.read_otf(), respectively.
3544   This feature uses a fair bit of the fontforge code, making the
3545   binary rather a bit larger than before. Just so you know.
3547   Apple (AAT, as well as encoding) support is still largely missing,
3548   and bitmap-only and old Multiple-Master truetype fonts are not
3549   supported at all (and never will be).
3551   The output format is (shadily) documented in the reference manual.
3552   At the moment, it very closely resembles the internal font stucture
3553   that is used by fontforge.
3555 * LuaTeX can now write wide OpenType fonts to the PDF file.
3557   There is no subsetting support yet, and a ToUnicode CMap is also
3558   still missing, but nevertheless it is already somewhat useful. The
3559   rule is very simple: if a font uses code points above 255, then it
3560   is considered to be a `wide' font, and it will be written out as
3561   a Type0 CID-keyed font to the PDF.
3563   Caveat: Getting suitable metrics into LuaTeX can be a bit of problem
3564   right now, because font.read_otf() does not produce anything that
3565   can be fed back into define_font without extra processing.  Hans has
3566   some experimental Lua code for ConTeXt (of course :-)) and that is
3567   how I know it works.  You can expect a nicer interface soon,
3568   hopefully next week, in the form of a simplistic table conversion
3569   routine.
3571 * I have started work on supporting Aleph's bidi typesetting in PDF
3572   mode as well, simple text seems to be largely ok. More complicated
3573   documents will no doubt still show some bugs, but fixing those will
3574   be easy (once they are discovered). Exactly what happens with specials
3575   is not yet investigated.
3577 * Omega's (16-bit) wide virtual fonts now work OK in PDF mode. This
3578   means that many Aleph files can now be run in PDF mode directly.
3579   (the documents that use UTF-8 input encoding)
3582 ==============================================================
3583 Luatex snapshot-20070202 was released 20070202
3584 ==============================================================
3587 * The pdftex stuff is now updated to 1.40.2, and on top of that, it has
3589    - an extra patch from Han The Thanh that adds a primitive to control
3590      the merging of fonts from external pdf images (\pdfreplacefonts),
3591      and a bugfix for virtual font handling.
3593    - an extra patch by Hartmut Henkel that removes a number of malloc()s
3594      and free()s from the calls to the compression library, thereby
3595      making luatex run a bit faster.
3597 * luatex now happily accepts the following low-level syntax:
3599     \font\myfont = <general text> <at specifier>
3601    It feeds the <general text> to either kpathsea or a lua script for
3602    further processing after stripping the braces.
3604    In itself, this is not all that useful, but the reason for this
3605    syntax extension is that it paves the road for a macro package
3606    to do something like this:
3608     \font\myfont = {font="Times New Roman", color="\darkred",
3609                     encoding="ec", features="liga", size=10bp}
3611    without having to resort to system-specific quoting mechanisms.
3612    Macro (and other) expansion takes inside the braced argument.
3614    (I am considering adding this extension to \input as well).
3616 * It is now possible to define a font into the font.fonts[]
3617    directly from lua, but becayse use is limited, I am only
3618    mentioning it to be complete.
3620    Syntax:
3621         <number> id = font.define(<table> font)
3623 * There is a (not very reliable yet) virtual font parser accessible
3624    from lua.
3626    Syntax:
3627         <table> vfdata = font.read_vf(<string> name, <number> size)
3629    The interpreter tries to give a reasonable representation of a
3630    virtual font file (the .vf file). Besides a few simple top-level
3631    items:
3633      designsize  -- in scaled points
3634      size        -- also in sp
3635      name        -- the file name
3636      checksum    -- the vf checksum
3637      header      -- the header comment  (if any)
3639    it also has a top-level array 'fonts' wherein each item is a mini-
3640    array describing one of te mapped fonts. An example makes this
3641    easy to understand
3643     "fonts" = { {"ptmr8a",655360}, {"psyr", 600000} }
3645    says that the first referenced font (index 1) in this virtual font
3646    is ptrmr8a.tfm loaded at 10pt,  and the second is psyr.tfm loaded
3647    at a little over 9pt. These index numbers are used by the character
3648    command definitions that follow.
3650    At top level, there is a 'characters' array, just as for a normal
3651    font, except that each item has only two keys:
3653      "width"    -- the tfm width (as stored in the .vf)
3654      "commands" -- an array of virtual font commands for a character.
3656    each of the items in the 'commands' array is itself a tiny hash.
3658    Each of those mini-hashes represents a single character packet
3659    command. Here is a 'commands' entry that contains every possible
3660    one at least once:
3662      "commands" = {
3663         {"push"},                     -- remember where we are
3664         {"right", 5000},              -- move right 0.08pt
3665         {"font", 1},                  -- select the fonts[1] entry
3666         {"setchar", 97},              -- place character 97 'a'
3667         {"pop"},                      -- go all the way back
3668         {"down", -200000},            -- move *up* about 3pt
3669         {"special", "pdf: 1 0 0 rg"}  -- switch to red color
3670         {"rule", 500000, 20000}       -- draw a bar
3671         {'special',"pdf: 0 g"}        -- back to black
3672       }
3675 * But the big news is that you can now define your own virtual fonts
3676    on the fly, by adding a few statements to the table returned to
3677    the 'define_font' callback.
3679    There are a few requirements:
3681    - The table has to have a top-level key 'type', and it's value
3682      must be 'virtual'.
3684      The presence of this key with the specific value 'virtual'
3685      will trigger handling of the rest of the special virtual font
3686      fields in the table, but the mere existance of 'type' is
3687      enough to prevent luatex from looking for a virtual font
3688      on its own.
3690      Therefore, this also works 'in reverse': if you are absolutely
3691      certain that a font is not a virtual font, assigning the value
3692      'base' or 'real' to 'type' will inhibit tex from looking for a
3693      virtual font file, thereby saving you a disk search.
3695    - There must be a top-level 'fonts' array, as explained above.
3696      Any fonts that are not yet known to luatex at that moment,
3697      will be loaded automatically (Warning: do not ever use a font
3698      in 'fonts' with the same name you will return in the table you
3699      are defining right now!).
3701    - Each and every character in the fonts needs to have a 'commands'
3702      key, as explained above.
3704    The main point behind these restrictions is that a font is
3705    *either* a base font *or* a virtual font. It cannot be both
3706    at the same time.
3709 ==============================================================
3710 Luatex snapshot-20070126 was released 20070126
3711 ==============================================================
3714 * Underscores in pascal identifiers are now retained.
3716    This took quite a bit of work. The web2c conversion tools
3717    needed only small adjustments, but most of the existing C
3718    code depended on the removal of the underscores. I had to
3719    go through changing many lines. 99% of all identifiers are
3720    now written the same on the pascal side as on the C side.
3721    This makes writing interface code quite a bit less confusing.
3723    Not everything is completely clean yet, because I did
3724    not want to change the web2c-specific C files. I often
3725    took the other approach and removed the underscores
3726    from the web2c options (like 'parsefirstlinep') in the
3727    change file instead. Ugly, but predictable.
3729    There is about a dozen or so of #defines left, that map
3730         memoryword -> memory_word
3731          strpool    -> str_pool
3732    etc.
3734 * The virtual font parsing and interpreting is now done in C.
3735    (this is because it needs to be interfaced with the lua-based
3736    font loader)
3738 * I am in the process of merging: the VF stuff; the TFM stuff;
3739    the lua font loading; and the pdftex font backend into one
3740    interface, so there were some smallish changes relating to
3741    that as well. Nothing worth mentioning just yet except that
3742    luatex now will read "ovf" files as well as "vf" files.
3744 * There are a few really small bugfixes for bug reports I received
3745   on this list and by email.
3747 ==============================================================
3748 Luatex snapshot-20070119 was released 20070119
3749 ==============================================================
3751 The largest new bit is the existence of a font.fonts array, that you
3752 can use to query/adjust the internal defined tex fonts. See the manual
3753 for more details.
3755 Two small new lua extensions are added as well:
3757    * os.setenv() -- to change the environment
3758    * os.exec()   -- a non-returning os.execute()
3760 And a bit of cleanup in the commandline processing.
3763 ==============================================================
3764 Luatex snapshot-20070117 was released 20070117
3765 ==============================================================
3767 * the pdftex core is updated to 1.40.1, and web2c to 7.5.6
3769 * the pdftex-specific documentation is removed
3771 * lua lpeg library updated to 0.4
3772    ( )
3774 * the C part of the lua md5 library is added to the binary
3775    ( )
3777 * --luaonly now puts the script itself at arg[0], and
3778    preceding commandline items in the negative indices
3779    (instead of starting the count at zero).
3780    This new approach is compatible with the standalone lua
3781    interpreter.
3784 ==============================================================
3785 Luatex snapshot-20070107 was released 20070107
3786 ==============================================================
3788 Hot on the heels of 20070105, a new snapshot. It turns out
3789 that using the callback to define a font broke all ligatures.
3790 This snapshot fixes that, and it has a few minor updates to
3791 the manual. Next shapshot will be after the inclusion of
3792 pdftex 1.40.1.
3794 ==============================================================
3795 Luatex snapshot-20070105 was released 20070105
3796 ==============================================================
3798  * the calculations that converted lua strings into tex units
3799    were horrendously wrong, this was discovered by Pawel.
3801  * io.lines() was still using the old, line ending sensitive,
3802    code from the lua core distribution
3804  * The main font memory is allocated as needed^(1) instead of
3805    statically pre-allocated.
3807  * ligatures and kerns are separated completely from each other,
3808    so use of \noligatures no longer inhibits kerning as well
3810  * Metrics can be loaded using a callback: 'define_font'.
3811    The value returned should be a lua table representing a tfm
3812    file.
3814  * there is a new lua table: font. It has one function:
3815    font.read_tfm() that returns a table reprentation of the tfm
3816    contents, for use with the above mentioned callback
3818  * I dropped suppport for "Level 1" OFM files. I would like
3819    to have a try at those extended font files, but I lack
3820    examples (fonts nor documents). I am not even sure such
3821    fonts have ever existed in the 'real world'.
3825 ==============================================================
3826 Luatex snapshot-20061208 was released 20061208
3827 ==============================================================
3829 * There is a new switch: --safer. This disables a number of lua
3830    functions that are more or less dangerous (a detailed list is
3831    in the manual)
3833 * Two longstanding bugs have been fixed: \latelua works once
3834    again (patch by Hartmut) and a bug that caused mysterious crashes
3835    turned out to be a problem inside the paragraph builder
3836    (reconstitution of ligatures)
3838 * Six new string iterators have been added to the string library:
3839       string.characters        (one 1-letter string)
3840       string.bytes             (one byte)
3841       string.characterpairs    (two 1-letter strings)
3842       string.bytepairs         (two bytes)
3843       string.utfcharacters     (a one-character utf-8 string)
3844       string.utfvalues         (a unicode code point number)
3846 * The top 256 values of the unicode range (starting at hex
3847    value "10FF00) are now reserved for byte output. Characters
3848    in that range will be written by luatex after substracting
3849    that offset. The net result is that \char"10FFA9 is written
3850    as byte value hex A9 = decimal 169 = copyright sign in latin1
3852    This trick allows byte-oriented output to \pdfliterals and
3853    \specials, but should be considered very experimental.
3855 * There is a new callback called 'process_input_buffer' that can
3856     be used to mutate the line buffer just before LuaTeX actually
3857     starts looking at it.
3859 * The statistics table now has readable items
3860         statistics.inputid
3861         statistics.lasterrorstring
3862     that represent TeX's current input id and the last error string
3864 * The show_error_hook callback no longer receives any arguments
3865 * There is a new switch: --safer. This disables a number of lua
3866    functions that are more or less dangerous (a detailed list is
3867    in the manual)
3869 * Two longstanding bugs have been fixed: \latelua works once
3870    again (patch by Hartmut) and a bug that caused mysterious crashes
3871    turned out to be a problem inside the paragraph builder
3872    (reconstitution of ligatures)
3874 * Six new string iterators have been added to the string library:
3875       string.characters        (one 1-letter string)
3876       string.bytes             (one byte)
3877       string.characterpairs    (two 1-letter strings)
3878       string.bytepairs         (two bytes)
3879       string.utfcharacters     (a one-character utf-8 string)
3880       string.utfvalues         (a unicode code point number)
3882 * The top 256 values of the unicode range (starting at hex
3883    value "10FF00) are now reserved for byte output. Characters
3884    in that range will be written by luatex after substracting
3885    that offset. The net result is that \char"10FFA9 is written
3886    as byte value hex A9 = decimal 169 = copyright sign in latin1
3888    This trick allows byte-oriented output to \pdfliterals and
3889    \specials, but should be considered very experimental.
3891 * There is a new callback called 'process_input_buffer' that can
3892     be used to mutate the line buffer just before LuaTeX actually
3893     starts looking at it.
3895 * The statistics table now has readable items
3896         statistics.inputid
3897         statistics.lasterrorstring
3898     that represent TeX's current input id and the last error string
3900 * The show_error_hook callback no longer receives any arguments
3902 * The statistics table now has readable items
3903         statistics.luabytecodes
3904         statistics.luastates
3905         statistics.luabytecode_bytes
3906         statistics.luastate_bytes
3907    for memory statistics reporting
3910 * The statistics table now has readable items
3911         statistics.luabytecodes
3912         statistics.luastates
3913         statistics.luabytecode_bytes
3914         statistics.luastate_bytes
3915    for memory statistics reporting
3918 ==============================================================
3919 Luatex snapshot-20061204 was released 20061204
3920 ==============================================================
3922 * The LuaTeX interpreter can now be run as a standalone lua script
3923   processor, by using a commandline like this:
3925     luatex --luaonly=luatools.lua
3927 * Luafilesystem ( ) is
3928   included.
3930 * There are a total of eight new file discovery callbacks:
3931     find_vf_file
3932     find_ocp_file
3933     find_map_file
3934     find_enc_file
3935     find_sfd_file
3936     find_pk_file
3937     find_data_file
3938     find_opentype_file
3939   this enhances the orthogonality of the callback system, nothing
3940   fundamental is changed.
3942 * There is a new callback called 'process_input_buffer' that can
3943   be used to mutate the line buffer just before LuaTeX actually
3944   starts looking at it.
3946 * The 'reader' and 'close' functions from 'open_read_file' now
3947   receive the table they are defined in as a function argument,
3948   that can be used as a per file localized data store.
3950 * Updated the Lua to the latest 5.1.1, with all known bug patches
3951   from the website applied as well
3953 * Runtime autoloading of lua .so files is now off on all platforms.
3955 * The statistics table now has readable items
3956     statistics.filename
3957     statistics.linenumber
3958   that represent TeX's current file name and line number
3960 * The support for user-defined type3 font .pgc files and the
3961   associated 'read_miscfonts_file' callback has been removed.
3962   (nobody used it anyway)
3964 * General cleanups to the source tree and build process.
3966 ==============================================================
3967 Luatex snapshot-20061023 was released 20061023
3968 ==============================================================
3970 * there was a missing callback: find_font_file
3971 * program_invocation_name was not set
3972 * buf_size could not be more that 300k
3975 ==============================================================
3976 Luatex snapshot-20061013 was released 20061013
3977 ==============================================================
3979 Last friday I uploaded a new snapshot and today I finally
3980 finished updating the manual to go with it. The changes all
3981 relate to startup, file i/o, and callbacks. The main achievement
3982 is: you can now run luatex without it *ever* initializing kpathsea.
3984 Because I am lazy, I have checked in the pdf of the manual
3985 as well, so that I can say: Please look at
3988     /luatexref-t.pdf?root=luatex&rev=148&view=log
3990 for all the details.  :-)
3992 ==============================================================
3993 Luatex snapshot-20061002 was released 20061002
3994 ==============================================================
3997 * Some infrastructure changes:
3999   libs/slnunicode-0.9.1/ renamed to libs/slnunicode/
4000   libs/zziplib added
4001   libs/luazip added
4003   (zziplib is using a different version of autofoo. I know I have
4004   messed up something in the build process, but the bit we need
4005   compiles ok so I've postponed attempting to fix it)
4007 * The callback logic has changed quite a bit.
4009   - all callbacks are now only possible in lua state 0.
4011   - The callback 'input_line' has disappeared, and is replaced by
4012     'open_read_file'. One of the return values of that callback
4013     is a table that defines a 'reader' function for line reading.
4015     See the manual for further information on this.
4017   - There are some new callbacks for the reading of various binary
4018     files. The current ones are:
4020     "read_ocp_file", "read_vf_file", "read_data_file", "read_font_file",
4021     "read_map_file".
4023     The rest of the file types will follow soon (fonts, enc files, and
4024     images).
4026   - There are also some new callbacks that 'find' a file's pathname:
4028     "find_truetype_file", "find_type1_file", "find_image_file"
4030     here too, more will follow later.
4032   - the functions from io. that were copied to texio have been removed
4033     again. The new callbacks do not pass file pointers around, so
4034     they ere not longer needed
4036   - the 'open_write_file' is temporarily unavailable
4038 * startup.lua is now always loaded into lua state 0
4040 * The luazip library from kepler is linked in, so there the table 'zip'
4041   is accessible from all lua states.
4043 ==============================================================
4044 Luatex snapshot-20060922 was released 20060922
4045 ==============================================================
4047 * The texio table has gained a new function:
4049      tex_file =
4051    returns a file handle of a type that luatex can use
4052    internally (the return of is unusable in callbacks
4053    because it will be garbage-collected at a random time)
4056 * In related news, there are two new callbacks you can define:
4058         callback.register('open_read_file', f)
4059         callback.register('open_write_file', f)
4061    where your function should have the following conventions:
4063    function f (number id_number, string asked_name)
4064       return boolean success, string actual_name, tex_file filep
4065    end
4067    id_number:   zero for the log or \input files  or TeX's \read
4068                 number incremented by one (\read0 becomes 1).
4069    asked_name:  the user-supplied filename
4071    success:     return false for error, true otherwise.
4073    The remaining two items are only looked at if you return true:
4075    actual_name:  the true filename used (with extension!)
4076    filep:        a file object opened though
4079 * The tex.print function has an extra optional parameter:
4081        tex.print(ctt_id n, strings ...)
4083    This prints the strings using the catcode regime defined by
4084    \catcodetable n (assuming n is valid, see below)
4086 * The new function tex.sprint has the same lua conventions as
4087    tex.print, but behaces slightly different on the tex side:
4089    ** tex does not switch to the 'new_line' state (this implies
4090       that leading spaces are not ignored)
4091    ** no \endlinechars are inserted
4092    ** trailing spaces are not removed from the argument
4094 * Catcode tables are a completely new feature, that allows
4095    you to switch the current catcode regime in one simple
4096    statement:
4098    \catcodetable <count>
4100       Switches to the use of a different set of catcodes (table),
4101       that is stored under the number <count>. Such a table has to
4102       be previously created using one of the two command below, or
4103       the number 0 (which is pre-inititialized)
4105       This command obeys normal grouping rules.
4107    \initcatcodetable <count>
4109       creates a new, global, independent catcode table with catcodes
4110       matching the code that are predefined by initex (tex -ini).
4112      This allocation is global
4114    \savecatcodetable <count>
4116       copies the current set of catcodes to a new, global, table
4117       with id number <count>. The definitions in this new table
4118       are all treated as if they were made in the outermost level.
4120      This allocation is global
4122    At the end of each grouping level, items within all existing
4123    catcodetables are restored, regardless of which one is the
4124    currently active table.
4126    Catcode table numbers cannot be larger than 0xFFFFFFF (228-1)
4128 * There is a new lua table: lua. It contains three read-only
4129    items:
4131          -- the id number of the instance
4132      lua.version     -- a luatex version identifier string
4133      lua.startupfile -- the full filename (+path) of startup.lua
4135    and it also contains a read/write array:
4137      lua.bytecode[]  -- lua executable bytecode
4139    This array can be used to save and restore lua functions
4140    across lua states. The accepted values are for assignments
4141    are functions and nil. Likewise, the retrieved value is
4142    either a function or nil.
4144    The contents of the lua.bytecode array is stored inside the
4145    format file, so it can also be used to preload lua code.
4148 * The format files are quire a bit smaller than before
4151 ==============================================================
4152 Luatex snapshot-20060915 was released 20060915
4153 ==============================================================
4155 * There is a new TEX primitive: \formatname. It is similar
4156   to \jobname (read-only). In initex, the expansion is empty,
4157   otherwise the expansion is the same as the \jobname from
4158   the initex run.
4160 * the lua "tex" table has been expanded with a few of the 'convert'
4161   codes (read-only). The supported ones at this moment are:
4163   tex.eTeXVersion
4164   tex.OmegaVersion
4165   tex.AlephVersion
4166   tex.pdftexrevision
4167   tex.pdftexbanner
4168   tex.pdfnormaldeviate
4169   tex.jobname
4170   tex.formatname
4171   tex.eTeXrevision
4172   tex.Omegarevision
4173   tex.Alephrevision
4175   This list looks haphazard,  but it really is not. These are
4176   all the cases of the 'convert' internal command that do not
4177   require an argument.
4179 * The metatables of the subtables like tex.dimen[] etc. are now
4180   adjustable from lua (not that I recommend doing that;-)).
4182 * On the lua side, there is a new global value: "luaid"
4183   It holds the internal id number of this \directlua instance.
4185 * There is a new lua table, "callback", that has the single function
4186   "callback.register", used to register callbacks.   This replaces
4187   the previous concoction (see my message about snapshot 20060901).
4188   Syntax is :
4190   callback.register(<callback name>,function (f) ... end)
4192   where the <callback name> is for the moment, either "input_line"
4193   or "show_error_hook".
4195   This function internalizes the callback function in such a way
4196   that you no longer have to worry about \luacallback (which has
4197   been removed), nor does it matter if you redefine a function
4198   accidentally.
4200  The internal testing for callback presence is also quite a bit
4201  faster, thanks to this change. Callback assignments are global
4202  and the "input_line" always takes effect starting on the next
4203  input line to be read from an actual file.
4206 * \detokenizedlua has been removed. It is functionally replaced by
4207   the new function call tex.write("").
4209   Each argument to each call of tex.write () counts as an input
4210   line, but:
4211   ** all catcodes on that line are either 'space' (for " ") or
4212      'character' for all others.
4213   ** there is no \newlinechar appended.
4215 * The implementation of tex.print() has changed as well:
4217   ** the very last tex.print() line from a \directlua
4218      will no longer have a trailing \newlinechar
4219      (this is very convenient when \directlua is used
4220      within an \edef)
4221   ** tex.print() is quite a lot faster than before, and the total amount
4222      of returnable text from a \directlua is now only limited by
4223      available system RAM. However, each separate tex.print ()
4224      argument has to fit in TeX's input buffer.
4226 * The new primitive \luastartup can be set inside the format file
4227   to specify the lua instance number in which a possible runtime
4228   startup.lua script is executed (initex always uses 0)
4230 * There is a new primitive \scantextokens. Differences with
4231   eTeX's \scantokens are:
4233   ** the last line (usually only) from \scantextokens
4234      does not have a \newlinechar
4236   ** \scantextokens never raises an eof error.
4238   This means things like
4240   \edef\testone
4241         {\scantextokens{\ifnum1=1 true}\else false\fi}
4243   are legal input (but potentially dangerous!).
4245 * If you say
4246      local d  = tex.dimen["unknowndimen"]
4247   'd' will now become "nil" instead of raising an error
4249    However,
4250      tex.dimen["unknowndimen"] = d
4251    is still (and probably will remain) illegal
4253 ==============================================================
4254 Luatex snapshot-20060908 was released 20060908
4255 ==============================================================
4257 * BIG CHANGE: \directlua now runs \scantokens internally.
4259   There is no longer a need to call scantokens yourself, the
4260   tex.print() output is now fed straight into a pseudo file.
4261   This is quite a bit faster as well as easier to use, but
4262   just in case you want it, the old behaviour is still present,
4263   under the new name
4265     \detokenizedlua
4268 * The texio library now has its own (partial) set of I/O commands,
4269   so that the standard lua io library is back to the distributed
4270   state (no more patched garbage collector)
4272   Note: This is really a very small change (it should not have any
4273   impact on wellbehaved input files), but I attempt to be complete
4274   in these notes, since there is no official documentation yet.
4277 * There is a new standard library available: kpse
4279   The most important function in that library is find_file:
4281     string = kpse.find_file(string filename
4282                             [,string type]
4283                             [,boolean mustexist])
4285   both "type" and "mustexist" are optional, so the function
4286   has from one upto three arguments.
4288   "type" is like the '-format' argument of kpsewhich. You can
4289      run 'kpsewich -h'  for a list. The default type is "tex".
4291   "mustexist" is like '-must-exist', and the default  is false.
4292      If you specify "true" (or a nonzero integer), then the kpse
4293      library will search the disk as well as the ls-R databases
4295   The new library also has three other functions that map
4296   straight to kpsewhich commandline options:
4298     string = kpse.expand_path(string)
4299     string = kpse.expand_var(string)
4300     string = kpse.expand_braces(string)
4302 * There is a second callback possibility:
4304     texio.show_error_hook(string message,
4305                           string|number indicator,
4306                           number lineno)
4308   This command is run from inside the TeX error function, and the
4309   idea is to allow you to do some extra reporting on top of what
4310   TeX already does (none of the normal actions are removed).
4312   "message" is the formal error message tex has given to the
4313      user (the line after the "! ")
4314   "indicator" is either a filename (when it is a string) or a
4315      location indicator (a number) that can means lots of different
4316      things like a token list id or a \read number.
4317   "lineno"  is the current line number
4319   This is an investigative item only, comments are welcome but do
4320   not take the syntax seriously.
4322   The final goal IMO is the total replacement of TeX's error
4323   handling routines, but that needs lots of adjustments
4324   in the web source because TeX deals with errors in a somewhat
4325   haphazard fashion (it needs unification first). The current
4326   hook is only for 'testing the water'.
4328 * It is now possible to use named items in the
4330     tex.count[]
4331     tex.dimen[]
4332     tex.toks[]
4334   subtables, so you can have
4336     tex.count.scratchcounter = 0
4337         local enormous = tex.dimen["maxdimen"]
4339   Luatex looks up the value for you on the fly. You have to use a
4340   valid \countdef (or \dimendef, or \toksdef), anything else will
4341   generate an error.
4343   In a normal TeX file, you don't do \dimen\maxdimen, but the
4344   lua syntax seems to be a bit cleaner to me. The intention is
4345   to evntually also allow \chardefs and macros that expand
4346   into a number (todo)
4349 * The tex table has also been extended with a large list of internal
4350   parameters (partially read/write). It is possible to access
4351   about every primitive that you can use after \the *and* is a
4352   single token. So there is
4354        integer   = tex.tracingcommands (\the\tracingcommands)
4355        integer   = tex.prevgraf        (\the\prevgraf)
4356        string    = tex.output          (\the\output)
4358   etc. for all of the internal parameters, but not the items
4359   that need extra arguments (like \the\scriptfont )
4361   The subset comprising simple integer and dimension registers
4362   are writable as well as readable (stuff like \tracingcommands
4363   and \parindent).
4365   The fact that both lists are still quite limited is a result of
4366   the very different types of things that can occur after \the and
4367   also on the LHS of an assignment. The remaining primitives will
4368   be filled in when there is a real need or implementation becomes
4369   simple, whichever comes first.
4373 ==============================================================
4374 Luatex snapshot-20060901 was released 20060901
4375 ==============================================================
4377 All changes are related to lua this time, and most are quite unstable
4378 / experimental. But first the things that are stabel/fixed bugs:
4380 * A VF loading bug that turned up in some of Hans' fonts
4381   has been fixed
4383 * A small series of bounds checking fixes to \ocplist has been
4384   added to prevent the system from crashing due to array indexes
4385   running out of bounds.
4387 * The Lua file searching paths are now fixed. The search path for lua
4388   script files now contains the following items (tried in order)
4389   1. the local directory:
4390        ./?.lua
4391     (for document-specific files)
4392   2. the items from the expansion of kpathsea's $TEXMFSCRIPTS variable,
4393     but only the parts containing 'lua' as a subpath:
4394        $TEXMFSCRIPTS<lua>/?.lua
4395        $TEXMFSCRIPTS<lua>/?/init.lua
4396      (for format-specific files)
4397   3. the $SELFAUTOPARENT sibling directory named 'lib'.
4398        $SELFAUTOPARENT/lib/lua/5.1/?.lua
4399        $SELFAUTOPARENT/lib/lua/5.1/?/init.lua
4400      (for files that are not related to tex)
4402   The search path for dynamic libraries has only
4403   1. the local directory:
4404        ./?.so
4405     (for document-specific files)
4406   2. and the $SELFAUTOPARENT sibling directory named 'lib'.
4407        $SELFAUTOPARENT/lib/lua/5.1/?.so
4409   (of course the extension is .dll on windows, but .dlls do not
4410    work at the moment so it will not do you much good)
4412 * There are two functions available within a new table called
4413   texio:
4414     texio.write (luastring)
4415     texio.write_nl (luastring)
4416   both write the luastring to the same location(s) TeX writes
4417   its stuff. So if \batchmode is on, it writes only to the
4418   log, inside a \write, it prints to the current write file,
4419   etc.
4421   A read|write interface to TeX's "file selector" will
4422   follow shortly.
4424 * At startup, luatex searches for a script named
4425     startup.lua
4426   in the path list I explained above. If such a file exists, it is
4427   loaded.
4429   This happens right before the first input file needs to be opened
4430   (that is after format loading, but before any \everyjob tokens).
4432   From within the script, you can check the value of
4434     tex.formatname
4436   that is the 'format identification' as used by TEX. When the variable
4437   is equal to nil, luatex in in 'initex' mode, otherwise it will be
4438   something like: " (format=plain 2006.9.1)"
4441 Now for the experimental portion: callbacks. Here is what I have done
4442 so far:
4444 * The main reason for wanting startup.lua is file (input) re-encoding.
4445   For this purpose, it is now possible to set up a callback for
4446   luatex to execute.
4448   If you attach a Lua function to
4450     texio.input_line
4452   then from the next input line onwards, luatex will run that
4453   function whenever it needs a new input line from a text file.
4455   Your function will receive a file handle as argument, and
4456   should return either a string or nil (with nil signalling that
4457   the end of file has occurred).
4459   The trivial case is simply this:
4461     function reader (f)
4462         return f:read()
4463     end
4464     texio.input_line = reader
4467   Warning: The implementation is not totally finished yet. For the
4468   moment the file handle ("f" in the example) is a normal lua file,
4469   with a simple but important restriction: you cannot alter its value.
4470   You cannot f:close() it, or assign it a different value. luatex
4471   will eventually close the file itself.
4473   The restriction is a side-effect of a synchronisation problem with
4474   the lua garbage collector. Because of this, it also was necessary
4475   to turn off the automatic file closing code for normal lua io
4476   files (In other words: you have to close yourself all the files
4477   you opened yourself, and you should not close any files you did
4478   not open yourself).
4480   In the near future, "f" will become a special 'texio' file object
4481   and the needed functionality from the normal io library will be
4482   reimplemented. Along with that change, there will also be a callback
4483   to open (i.e. find) files, and a simple interface to the compiled-in
4484   kpathsea to use within that callback.
4487 ==============================================================
4488 Luatex snapshot-20060825 was released 20060825
4489 ==============================================================
4491 The main change in this snapshot is that it uses far less memory.
4492 luatex -ini on my linux machine went from 326Mb (last week) to
4493 93Mb (now), and "texexec luatex" now ends at 184Mb instead of
4494 over 1/2Gb.
4496 This is achieved by two big changes:
4498 * The \mathcode, \delcode, \catcode, \sfcode, \lccode and \uccode
4499    tables are now sparse arrays that are implemented in C. They
4500    are no longer part of the TeX "equivalence table" and because
4501    each had 1.1 million entries with a few memory words each, this
4502    makes a major difference.
4504    See mathcodes.c and textcodes.c if you are interested in the
4505    gory details, but be warned: the code is still extremely
4506    rough and ugly. In particular, the dump and undump routines
4507    are far from optimal, resulting in somewhat larger format files
4508    than before (approx 1.3Mb larger with unicode-letters loaded,
4509    10k without); and the assignments do not show up when using
4510    the etex tracing routines \tracingassigns and \tracingrestores
4511    (code simply not written yet)
4513 * Single-character commands are no longer "special" internally,
4514    they are stored in the hash just like the multiletter csnames.
4517 ==============================================================
4518 Luatex snapshot-20060818 was released 20060818
4519 ==============================================================
4521 The snapshot is up to par with Aleph-RC4 (from texlive devel)
4522 and the latest pdftex beta (even newer than 20060811). However,
4523 there are some differences, to summarize:
4525 * There is no pool file (all strings are embedded)
4527 * -8bit and -translate-file are silently ignored
4529 * There is no mltex nor enctex (conflicts with aleph)
4531 * The tex functionality is always present and enabled
4532   (but see below about TeXXeT), so the asterisk or
4533   -etex switch for initex is not needed
4535 * "plus 1 filllllllll" does not generate any errors from TeX
4537 * TeXXeT (from eTeX) is not present, so the primives
4538     \TeXXeTstate
4539     \beginR
4540     \beginL
4541     \endR
4542     \endL
4543   are missing
4545 * The experimental pdftex regex match operations are removed,
4546   because that feature does not make much sense when lua is
4547   available so the primitives
4548         \pdfmatch
4549     \pdflastmatch
4550   are missing
4552 * The input translations from Aleph are not implemented, the
4553   16 related primitives are all missing
4554      \DefaultInputMode
4555      \noDefaultInputMode
4556      \noInputMode
4557      \InputMode
4558      \DefaultOutputMode
4559      \noDefaultOutputMode
4560      \noOutputMode
4561      \OutputMode
4562      \DefaultInputTranslation
4563      \noDefaultInputTranslation
4564      \noInputTranslation
4565      \InputTranslation
4566      \DefaultOutputTranslation
4567      \noDefaultOutputTranslation
4568      \noOutputTranslation
4569      \OutputTranslation
4570   All file IO assumes UTF-8, except that all the low-ascii
4571   controls except TAB, CR en LF are written to the terminal
4572   using ^^  notation (even these are binary in the log file).
4574 * Input characters can use the full range of Unicode,
4575   but it probably only makes sense to use values above
4576   the base plane for \mathcode and \catcode assignments,
4577   since the fonts as well as the hyphenation patterns
4578   are strictly 16-bit still.
4580 * The primitives
4581      \pdfpagewidth and \pagewidth,
4582      \pdfpageheight and \pageheight,
4583      \fontcharwd and \charwd,
4584      \fontcharht and \charht,
4585      \fontchardp and \chardp,
4586      \fontcharic and \charic,
4587   are all aliases of eachother.
4589 * The new primitive
4590      \clearmarks<number>
4591   clears a marks class completely.
4593 * The experimental pdftex primitives
4594      \pdfprimitive
4595      \ifpdfprimitive
4596      \ifpdfabsnum
4597      \ifpdfabsdim
4598   and provided without the extra 'pdf' prefix, so they are
4599   simply called
4600      \primitive
4601      \ifprimitive
4602      \ifabsnum
4603      \ifabsdim
4604   instead.
4606 * I probably forgot to mention some things :-)