summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-12-10 09:22:25 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-12-10 09:22:25 +0000
commit70b9e104222eb5ba7a495c6267643c6470fb4667 (patch)
tree6b540c75177a4ec7d7ad0b607542c0f3620b1d3e /Build/source
parentdb2683e88ae12a32ad6620b4e40218761ea14f41 (diff)
LuaTeX: Sync with https://foundry.supelec.fr/svn/luatex/trunk r5092
git-svn-id: svn://tug.org/texlive/trunk@35779 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/texk/web2c/luatexdir/ChangeLog5
-rw-r--r--Build/source/texk/web2c/luatexdir/NEWS22
-rw-r--r--Build/source/texk/web2c/luatexdir/dvi/dvigen.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/font/dofont.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/font/luafont.w32
-rw-r--r--Build/source/texk/web2c/luatexdir/font/mapfile.w13
-rw-r--r--Build/source/texk/web2c/luatexdir/font/subfont.w10
-rw-r--r--Build/source/texk/web2c/luatexdir/font/texfont.w10
-rw-r--r--Build/source/texk/web2c/luatexdir/font/tounicode.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/font/tt_glyf.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/font/writecff.w10
-rw-r--r--Build/source/texk/web2c/luatexdir/font/writeenc.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/font/writefont.w5
-rw-r--r--Build/source/texk/web2c/luatexdir/font/writet1.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/font/writettf.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/image/epdf.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/image/writepng.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/lang/texlang.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/lang/texlang.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c29
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lepdflib.cc777
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/llanglib.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/llfslibext.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lnodelib.c38
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/loslibext.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lpdflib.c7
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lstatslib.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/ltexlib.c46
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/luainit.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/luatex-api.h25
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/configure-pfaedit.h9
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/pfaedit.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/luascripts/pdflua.c37
-rw-r--r--Build/source/texk/web2c/luatexdir/luascripts/pdflua.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/luatex.c10
-rw-r--r--Build/source/texk/web2c/luatexdir/luatex.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/luatex_svnversion.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/luatexcallbackids.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfaction.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfannot.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfgen.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfgen.w65
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfglyph.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdflink.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfoutline.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpage.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpage.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfrule.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfrule.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfshipout.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfthread.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfxform.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/align.w3
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/arithmetic.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/conditional.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/dumpdata.w27
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/equivalents.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/errors.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/errors.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/expand.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/extensions.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/filename.w20
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/inputstack.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/linebreak.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/maincontrol.w10
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/mathcodes.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/memoryword.h4
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/memoryword.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/mlist.w13
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/nesting.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/packaging.w14
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/postlinebreak.w85
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/primitive.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/printing.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/printing.w17
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/scanning.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/stringpool.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/stringpool.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/texdeffont.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/texmath.w7
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/textcodes.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/textoken.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/avlstuff.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/avlstuff.w4
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/managed-sa.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/unistring.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/unistring.w2
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/utils.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/utils/utils.w2
97 files changed, 1272 insertions, 237 deletions
diff --git a/Build/source/texk/web2c/luatexdir/ChangeLog b/Build/source/texk/web2c/luatexdir/ChangeLog
index 2d306f53c48..16350bc3d84 100644
--- a/Build/source/texk/web2c/luatexdir/ChangeLog
+++ b/Build/source/texk/web2c/luatexdir/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Sync with https://foundry.supelec.fr/svn/luatex/trunk/source/
+ texk/web2c/luatexdir/ r5092.
+
2014-11-06 Peter Breitenlohner <peb@mppmu.mpg.de>
* luatex.c: Avoid MinGW64 warnings (INVALID_SOCKET => -1).
diff --git a/Build/source/texk/web2c/luatexdir/NEWS b/Build/source/texk/web2c/luatexdir/NEWS
index 0d1dc49b10b..a1746ea2d5e 100644
--- a/Build/source/texk/web2c/luatexdir/NEWS
+++ b/Build/source/texk/web2c/luatexdir/NEWS
@@ -2,6 +2,26 @@
This file is in the public domain.
==============================================================
+Luatex beta-0.79.2 was released 20141111 (5082)
+==============================================================
+
+
+* WARNING: the structure of the format file is changed.
+ After the Web2C \TeX's magic constant: "W2TX" there is now
+ a FORMAT_ID, a 32bit field that cannot be between 0 and 256 (included)
+ so that there are no conflicts with the preexisting structure
+ of the format.
+ The value can be seen with --debug-format and currently is
+ 907 (the sum of the values of the bytes of the ASCII string "don knuth").
+
+* There is a new set of lua functions for StructElement and Attribute,
+ convenient (even if not indispensable) for tagged pdf.
+
+
+* several bugfixes and improvements.
+
+
+==============================================================
Luatex beta-0.79.0 was released 20140328 (4960)
==============================================================
@@ -2246,7 +2266,7 @@ Other news:
we probably introduced new problems as well).
* Most (all?) files now have a corrected Copyright header,
- and link in $Id: NEWS 4962 2014-03-28 15:23:35Z taco $ and $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/NEWS $ into the object file.
+ and link in $Id: NEWS 5082 2014-11-11 09:58:10Z luigi $ and $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/NEWS $ into the object file.
* Some unnecessary files were removed from the distribution.
diff --git a/Build/source/texk/web2c/luatexdir/dvi/dvigen.w b/Build/source/texk/web2c/luatexdir/dvi/dvigen.w
index a2e2e215a1f..97bd38e7d0c 100644
--- a/Build/source/texk/web2c/luatexdir/dvi/dvigen.w
+++ b/Build/source/texk/web2c/luatexdir/dvi/dvigen.w
@@ -30,7 +30,7 @@
@ Initial identification of this file, and the needed headers.
@c
static const char _svn_version[] =
- "$Id: dvigen.w 4679 2013-12-19 15:47:53Z luigi $"
+ "$Id: dvigen.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/dvi/dvigen.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/font/dofont.w b/Build/source/texk/web2c/luatexdir/font/dofont.w
index bed6850c241..15688fd63e3 100644
--- a/Build/source/texk/web2c/luatexdir/font/dofont.w
+++ b/Build/source/texk/web2c/luatexdir/font/dofont.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: dofont.w 4524 2012-12-20 15:38:02Z taco $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/dofont.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/dofont.w $";
#include "ptexlib.h"
#include "lua/luatex-api.h"
diff --git a/Build/source/texk/web2c/luatexdir/font/luafont.w b/Build/source/texk/web2c/luatexdir/font/luafont.w
index c64f6544ecb..089558c1314 100644
--- a/Build/source/texk/web2c/luatexdir/font/luafont.w
+++ b/Build/source/texk/web2c/luatexdir/font/luafont.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: luafont.w 4847 2014-03-05 18:13:17Z luigi $"
+ "$Id: luafont.w 5064 2014-10-13 12:47:11Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/luafont.w $";
#include "ptexlib.h"
@@ -173,18 +173,24 @@ static void font_char_to_lua(lua_State * L, internal_font_number f, charinfo * c
lua_pushnumber(L, get_charinfo_depth(co));
lua_rawset(L, -3);
- lua_pushstring(L, "italic");
- lua_pushnumber(L, get_charinfo_italic(co));
- lua_rawset(L, -3);
- lua_pushstring(L, "top_accent");
- lua_pushnumber(L, get_charinfo_top_accent(co));
- lua_rawset(L, -3);
+ if (get_charinfo_italic(co) != 0) {
+ lua_pushstring(L, "italic");
+ lua_pushnumber(L, get_charinfo_italic(co));
+ lua_rawset(L, -3);
+ }
- lua_pushstring(L, "bot_accent");
- lua_pushnumber(L, get_charinfo_bot_accent(co));
- lua_rawset(L, -3);
+ if (get_charinfo_top_accent(co) !=0) {
+ lua_pushstring(L, "top_accent");
+ lua_pushnumber(L, get_charinfo_top_accent(co));
+ lua_rawset(L, -3);
+ }
+ if (get_charinfo_bot_accent(co) != 0) {
+ lua_pushstring(L, "bot_accent") ;
+ lua_pushnumber(L, get_charinfo_bot_accent(co));
+ lua_rawset(L, -3);
+ }
if (get_charinfo_ef(co) != 0) {
lua_pushstring(L, "expansion_factor");
@@ -198,13 +204,12 @@ static void font_char_to_lua(lua_State * L, internal_font_number f, charinfo * c
lua_rawset(L, -3);
}
- if (get_charinfo_lp(co) != 0) {
+ if (get_charinfo_rp(co) != 0) {
lua_pushstring(L, "right_protruding");
lua_pushnumber(L, get_charinfo_rp(co));
lua_rawset(L, -3);
}
-
if (font_encodingbytes(f) == 2) {
lua_pushstring(L, "index");
lua_pushnumber(L, get_charinfo_index(co));
@@ -1441,6 +1446,7 @@ int font_from_lua(lua_State * L, int f)
i = maketexstring(s);
set_pdf_font_attr(f, i);
}
+ free(s);
i = n_enum_field(L, lua_key_index(type), unknown_font_type, font_type_strings);
set_font_type(f, i);
@@ -1480,6 +1486,8 @@ int font_from_lua(lua_State * L, int f)
/* } */
/* lua_pop(L, 1); /\* pop name *\/ */
ss = n_string_field(L, lua_key_index(name));
+ /* string is anchored */
+ lua_pop(L,1);
}
if (ss != NULL) {
/* lua_getfield(L, -1, "size"); */
diff --git a/Build/source/texk/web2c/luatexdir/font/mapfile.w b/Build/source/texk/web2c/luatexdir/font/mapfile.w
index ff52ac5e6cc..d94189f4d6a 100644
--- a/Build/source/texk/web2c/luatexdir/font/mapfile.w
+++ b/Build/source/texk/web2c/luatexdir/font/mapfile.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
- "$Id: mapfile.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: mapfile.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/mapfile.w $";
#include "ptexlib.h"
@@ -337,7 +337,8 @@ static void fm_scan_line(void)
float d;
fm_entry *fm;
char fm_line[FM_BUF_SIZE], buf[FM_BUF_SIZE];
- char *p, *q, *r, *s;
+ char *p, *q, *s;
+ char *r = NULL;
switch (mitem->type) {
case MAPFILE:
p = fm_line;
@@ -366,15 +367,15 @@ static void fm_scan_line(void)
fm = new_fm_entry();
read_field(r, q, buf);
set_field(tfm_name);
- if (!isdigit((unsigned char)*r)) { /* 2nd field ps_name may not start with a digit */
+ if (!isdigit(*r)) { /* 2nd field ps_name may not start with a digit */
read_field(r, q, buf);
set_field(ps_name);
}
- if (isdigit((unsigned char)*r)) { /* font descriptor /Flags given? */
- for (s = r; isdigit((unsigned char)*s); s++);
+ if (isdigit(*r)) { /* font descriptor /Flags given? */
+ for (s = r; isdigit(*s); s++);
if (*s == ' ' || *s == '"' || *s == '<' || *s == '\0') { /* not e. g. 8r.enc */
fm->fd_flags = atoi(r);
- while (isdigit((unsigned char)*r))
+ while (isdigit(*r))
r++;
}
}
diff --git a/Build/source/texk/web2c/luatexdir/font/subfont.w b/Build/source/texk/web2c/luatexdir/font/subfont.w
index 06678c1e195..f35d601547a 100644
--- a/Build/source/texk/web2c/luatexdir/font/subfont.w
+++ b/Build/source/texk/web2c/luatexdir/font/subfont.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
- "$Id: subfont.w 4847 2014-03-05 18:13:17Z luigi $"
+ "$Id: subfont.w 5017 2014-06-05 15:11:19Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/subfont.w $";
#include "ptexlib.h"
@@ -40,7 +40,7 @@ static int sfd_curbyte = 0;
#define sfd_read_file() readbinfile(sfd_file,&sfd_buffer,&sfd_size)
#define sfd_getchar() sfd_buffer[sfd_curbyte++]
-#define sfd_eof() (sfd_curbyte>sfd_size)
+#define sfd_eof() (sfd_curbyte>=sfd_size)
static FILE *sfd_file;
@@ -102,9 +102,11 @@ static void sfd_getline(boolean expect_eof)
char c;
restart:
if (sfd_eof()) {
- if (expect_eof)
+ if (expect_eof) {
+ if (*sfd_line == '#')
+ *sfd_line = 10;
return;
- else
+ } else
luatex_fail("unexpected end of file");
}
p = sfd_line;
diff --git a/Build/source/texk/web2c/luatexdir/font/texfont.w b/Build/source/texk/web2c/luatexdir/font/texfont.w
index 6d2358349d3..65fdc6a332e 100644
--- a/Build/source/texk/web2c/luatexdir/font/texfont.w
+++ b/Build/source/texk/web2c/luatexdir/font/texfont.w
@@ -32,7 +32,7 @@ problematic |if 0 != null|.
@c
static const char _svn_version[] =
- "$Id: texfont.w 4847 2014-03-05 18:13:17Z luigi $"
+ "$Id: texfont.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/texfont.w $";
#include "ptexlib.h"
@@ -1760,6 +1760,10 @@ void undump_font(int f)
undump_things(*math_param_base(f), (font_math_params(f) + 1));
}
+ font_tables[f]->characters = new_sa_tree(1, 0); /* stack size 1, default item value 0 */
+ ci = xcalloc(1, sizeof(charinfo));
+ set_charinfo_name(ci, xstrdup(".notdef"));
+ font_tables[f]->charinfo = ci;
undump_int(x);
if (x) {
i = undump_charinfo(f);
@@ -1768,10 +1772,6 @@ void undump_font(int f)
if (x) {
i = undump_charinfo(f);
} /* right boundary */
- font_tables[f]->characters = new_sa_tree(1, 0); /* stack size 1, default item value 0 */
- ci = xcalloc(1, sizeof(charinfo));
- set_charinfo_name(ci, xstrdup(".notdef"));
- font_tables[f]->charinfo = ci;
i = font_bc(f);
while (i < font_ec(f)) {
diff --git a/Build/source/texk/web2c/luatexdir/font/tounicode.w b/Build/source/texk/web2c/luatexdir/font/tounicode.w
index 1ed589eb1ce..b33bef027a0 100644
--- a/Build/source/texk/web2c/luatexdir/font/tounicode.w
+++ b/Build/source/texk/web2c/luatexdir/font/tounicode.w
@@ -92,7 +92,7 @@ void def_tounicode(str_number glyph, str_number unistr)
for (i = 0; i < l; i++) {
if (p[i] == ' ')
valid_unistr = 2; /* if a space occurs we treat this entry as a string */
- else if (!isXdigit((unsigned char)p[i])) {
+ else if (!isXdigit(p[i])) {
valid_unistr = 0;
break;
}
@@ -151,7 +151,7 @@ static long check_unicode_value(char *s, boolean multiple_value)
return UNI_UNDEF;
for (i = 0; i < l; i++) {
- if (!isXdigit((unsigned char)s[i]))
+ if (!isXdigit(s[i]))
return UNI_UNDEF;
if (multiple_value) {
if (i % 4 == 3) {
diff --git a/Build/source/texk/web2c/luatexdir/font/tt_glyf.w b/Build/source/texk/web2c/luatexdir/font/tt_glyf.w
index be0bf375b36..21ceba11e14 100644
--- a/Build/source/texk/web2c/luatexdir/font/tt_glyf.w
+++ b/Build/source/texk/web2c/luatexdir/font/tt_glyf.w
@@ -24,7 +24,7 @@
@ @c
static const char _svn_version[] =
"$Id: tt_glyf.w 4457 2012-07-13 13:16:19Z taco $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/tt_glyf.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/tt_glyf.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/font/writecff.w b/Build/source/texk/web2c/luatexdir/font/writecff.w
index 3c9174d1aae..defe4b6841f 100644
--- a/Build/source/texk/web2c/luatexdir/font/writecff.w
+++ b/Build/source/texk/web2c/luatexdir/font/writecff.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: writecff.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: writecff.w 5041 2014-07-16 16:13:03Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writecff.w $";
#include "ptexlib.h"
@@ -169,8 +169,10 @@ cff_index *cff_get_index_header(cff_font * cff)
idx->offset =
xmalloc((unsigned) (((unsigned) count + 1) * sizeof(l_offset)));
- for (i = 0; i < count + 1; i++) {
+ for (i = 0; i <count + 1 ; i++) {
(idx->offset)[i] = get_offset(cff, idx->offsize);
+ if (i == USHRT_MAX)
+ break;
}
if (idx->offset[0] != 1)
@@ -3158,7 +3160,7 @@ void write_cff(PDF pdf, cff_font * cffont, fd_entry * fd)
}
/* build the new charstrings entry */
- charstrings = cff_new_index((card16) (cs_count1 + 1));
+ charstrings = cff_new_index((card16) (cs_count1==USHRT_MAX?cs_count1: cs_count1 + 1));
max_len = 2 * CS_STR_LEN_MAX;
charstrings->data = xcalloc((unsigned) max_len, sizeof(card8));
charstring_len = 0;
@@ -3437,7 +3439,7 @@ void write_cid_cff(PDF pdf, cff_font * cffont, fd_entry * fd)
fdselect->num_entries = 0;
fdselect->data.ranges = xcalloc(num_glyphs, sizeof(cff_range3));
- charstrings = cff_new_index((card16) (cs_count1 + 1));
+ charstrings = cff_new_index((card16) (cs_count1==USHRT_MAX?cs_count1: cs_count1 + 1));
max_len = 2 * CS_STR_LEN_MAX;
charstrings->data = xcalloc((unsigned) max_len, sizeof(card8));
charstring_len = 0;
diff --git a/Build/source/texk/web2c/luatexdir/font/writeenc.w b/Build/source/texk/web2c/luatexdir/font/writeenc.w
index 1f769e667f2..476741e93aa 100644
--- a/Build/source/texk/web2c/luatexdir/font/writeenc.w
+++ b/Build/source/texk/web2c/luatexdir/font/writeenc.w
@@ -21,7 +21,7 @@
@ @c
static const char _svn_version[] =
"$Id: writeenc.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/writeenc.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writeenc.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/font/writefont.w b/Build/source/texk/web2c/luatexdir/font/writefont.w
index ff986bf86fe..3377059f304 100644
--- a/Build/source/texk/web2c/luatexdir/font/writefont.w
+++ b/Build/source/texk/web2c/luatexdir/font/writefont.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
- "$Id: writefont.w 4847 2014-03-05 18:13:17Z luigi $"
+ "$Id: writefont.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writefont.w $";
#include "ptexlib.h"
@@ -426,6 +426,9 @@ static void register_fo_entry(fo_entry * fo)
static void write_fontfile(PDF pdf, fd_entry * fd)
{
assert(is_included(fd->fm));
+ /* In principle we could replace the pdftex derived ttf.otf inclusion part */
+ /* by using the regular code for this and assigning indices and tounicodes */
+ /* to the character blobs, but for the moment we keep the current approach */
if (is_cidkeyed(fd->fm)) {
if (is_opentype(fd->fm))
writetype0(pdf, fd);
diff --git a/Build/source/texk/web2c/luatexdir/font/writet1.w b/Build/source/texk/web2c/luatexdir/font/writet1.w
index 036c65ad9c3..2e65017d2f8 100644
--- a/Build/source/texk/web2c/luatexdir/font/writet1.w
+++ b/Build/source/texk/web2c/luatexdir/font/writet1.w
@@ -456,7 +456,7 @@ static float t1_scan_num(char *p, char **r)
luatex_fail("a number expected: `%s'", t1_line_array);
}
if (r != NULL) {
- for (; isdigit((unsigned char)*p) || *p == '.' ||
+ for (; isdigit(*p) || *p == '.' ||
*p == 'e' || *p == 'E' || *p == '+' || *p == '-'; p++);
*r = p;
}
@@ -1522,7 +1522,7 @@ static void t1_flush_cs(PDF pdf, boolean is_subr)
t1_line_ptr = t1_line_array;
for (p = start_line; p - start_line < size_pos;)
*t1_line_ptr++ = *p++;
- while (isdigit((unsigned char)*p))
+ while (isdigit(*p))
p++;
sprintf(t1_line_ptr, "%u", count);
strcat(t1_line_ptr, p);
diff --git a/Build/source/texk/web2c/luatexdir/font/writettf.w b/Build/source/texk/web2c/luatexdir/font/writettf.w
index 169e1c20d81..2cab4b2371c 100644
--- a/Build/source/texk/web2c/luatexdir/font/writettf.w
+++ b/Build/source/texk/web2c/luatexdir/font/writettf.w
@@ -622,7 +622,7 @@ static char *strip_spaces_and_delims(char *s, int l)
for (i = 0; i < l; s++, i++) {
if (*s == '(' || *s == ')' || *s == '<' || *s == '>' ||
*s == '[' || *s == ']' || *s == '{' || *s == '}' ||
- *s == '/' || *s == '%' || isspace((unsigned char)*s))
+ *s == '/' || *s == '%' || isspace(*s))
continue;
*p++ = *s;
}
diff --git a/Build/source/texk/web2c/luatexdir/image/epdf.h b/Build/source/texk/web2c/luatexdir/image/epdf.h
index 8f806cd005f..4982b6af10c 100644
--- a/Build/source/texk/web2c/luatexdir/image/epdf.h
+++ b/Build/source/texk/web2c/luatexdir/image/epdf.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: epdf.h 4718 2014-01-02 15:35:31Z taco $ */
+/* $Id: epdf.h 5081 2014-11-07 18:38:33Z luigi $ */
// this is the common header file for C++ sources pdftoepdf.cc and lepdflib.cc
diff --git a/Build/source/texk/web2c/luatexdir/image/writepng.w b/Build/source/texk/web2c/luatexdir/image/writepng.w
index 50eec4636f2..6b2ad9197fc 100644
--- a/Build/source/texk/web2c/luatexdir/image/writepng.w
+++ b/Build/source/texk/web2c/luatexdir/image/writepng.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
- "$Id: writepng.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: writepng.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writepng.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/lang/texlang.h b/Build/source/texk/web2c/luatexdir/lang/texlang.h
index dd3a5c3bdfa..3450dd98960 100644
--- a/Build/source/texk/web2c/luatexdir/lang/texlang.h
+++ b/Build/source/texk/web2c/luatexdir/lang/texlang.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: texlang.h 3394 2010-01-26 14:20:46Z taco $ */
+/* $Id: texlang.h 4664 2013-12-09 13:43:42Z taco $ */
#ifndef TEXLANG_H
# define TEXLANG_H
diff --git a/Build/source/texk/web2c/luatexdir/lang/texlang.w b/Build/source/texk/web2c/luatexdir/lang/texlang.w
index 97d9f00c682..9ffe9f546a9 100644
--- a/Build/source/texk/web2c/luatexdir/lang/texlang.w
+++ b/Build/source/texk/web2c/luatexdir/lang/texlang.w
@@ -193,7 +193,7 @@ const char *clean_hyphenation(const char *buff, char **cleaned)
char *uindex = (char *)word;
const char *s = buff;
- while (*s && !isspace((unsigned char)*s)) {
+ while (*s && !isspace(*s)) {
word[i++] = (unsigned)*s;
s++;
if ((s-buff)>MAX_WORD_LEN) {
@@ -271,7 +271,7 @@ void load_hyphenation(struct tex_language *lang, const unsigned char *buff)
lua_rawgeti(L, LUA_REGISTRYINDEX, lang->exceptions);
s = (const char *) buff;
while (*s) {
- while (isspace((unsigned char)*s))
+ while (isspace(*s))
s++;
if (*s) {
value = s;
diff --git a/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c b/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c
index 160fbe3bde6..f8b4360e56b 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c
@@ -21,7 +21,7 @@
#include "lua/luatex-api.h"
static const char _svn_version[] =
- "$Id: lcallbacklib.c 4956 2014-03-28 12:12:17Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lcallbacklib.c $";
+ "$Id: lcallbacklib.c 5081 2014-11-07 18:38:33Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lcallbacklib.c $";
int callback_count = 0;
int saved_callback_count = 0;
@@ -69,6 +69,7 @@ static const char *const callbacknames[] = {
"finish_pdfpage",
"pre_dump","start_file", "stop_file",
"show_error_message","show_lua_error_hook",
+ "pdf_stream_filter_callback",
NULL
};
@@ -188,6 +189,7 @@ void get_saved_lua_string(int r, const char *name, char **target)
#define CALLBACK_STRNUMBER 's'
#define CALLBACK_STRING 'S'
#define CALLBACK_CHARNUM 'c'
+#define CALLBACK_LSTRING 'L'
int run_saved_callback(int r, const char *name, const char *values, ...)
@@ -265,6 +267,7 @@ int do_run_callback(int special, const char *values, va_list vl)
size_t len;
int narg, nres;
const char *s;
+ lstring *lstr;
char cs;
int *bufloc;
char *ss = NULL;
@@ -288,6 +291,10 @@ int do_run_callback(int special, const char *values, va_list vl)
s = va_arg(vl, char *);
lua_pushstring(L, s);
break;
+ case CALLBACK_LSTRING: /* 'lstring' */
+ lstr = va_arg(vl, lstring *);
+ lua_pushlstring(L, (const char *)lstr->s, lstr->l);
+ break;
case CALLBACK_INTEGER: /* int */
lua_pushnumber(L, va_arg(vl, int));
break;
@@ -420,6 +427,26 @@ int do_run_callback(int special, const char *values, va_list vl)
*va_arg(vl, char **) = ss;
}
break;
+ case CALLBACK_LSTRING: /* lstring */
+ if (!lua_isstring(L, nres)) {
+ if (!lua_isnil(L, nres)) {
+ fprintf(stderr, "Expected a string for (S), not: %s\n",
+ lua_typename(L, lua_type(L, nres)));
+ goto EXIT;
+ }
+ }
+ s = lua_tolstring(L, nres, &len);
+
+ if (s == NULL) /* |len| can be zero */
+ *va_arg(vl, int *) = 0;
+ else {
+ lstring *ret = xmalloc(sizeof(lstring));
+ ret->s = xmalloc((unsigned) (len + 1));
+ (void) memcpy(ret->s, s, (len + 1));
+ ret->l = len;
+ *va_arg(vl, lstring **) = ret;
+ }
+ break;
default:
fprintf(stdout, "invalid return value type");
goto EXIT;
diff --git a/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc b/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc
index 5b4a512a195..1adaa120362 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc
+++ b/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc
@@ -19,11 +19,13 @@
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
static const char _svn_version[] =
- "$Id: lepdflib.cc 4847 2014-03-05 18:13:17Z luigi $ "
+ "$Id: lepdflib.cc 5081 2014-11-07 18:38:33Z luigi $ "
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lepdflib.cc $";
#include "image/epdf.h"
+
+
// define DEBUG
//**********************************************************************
@@ -65,6 +67,11 @@ static const char *ErrorCodeNames[] = { "None", "OpenFile", "BadCatalog",
#define M_PDFRectangle "epdf.PDFRectangle"
#define M_Ref "epdf.Ref"
#define M_Stream "epdf.Stream"
+#ifdef HAVE_STRUCTTREEROOT_H
+#define M_StructElement "epdf.StructElement"
+#define M_Attribute "epdf.Attribute"
+#define M_TextSpan "epdf.TextSpan"
+#endif
#define M_StructTreeRoot "epdf.StructTreeRoot"
#define M_XRefEntry "epdf.XRefEntry"
#define M_XRef "epdf.XRef"
@@ -97,6 +104,11 @@ new_poppler_userdata(Page);
new_poppler_userdata(PDFRectangle);
new_poppler_userdata(Ref);
new_poppler_userdata(Stream);
+#ifdef HAVE_STRUCTTREEROOT_H
+new_poppler_userdata(StructElement);
+new_poppler_userdata(Attribute);
+new_poppler_userdata(TextSpan);
+#endif
new_poppler_userdata(StructTreeRoot);
new_poppler_userdata(XRef);
@@ -124,6 +136,7 @@ static int l_open_PDFDoc(lua_State * L)
if (d == NULL)
lua_pushnil(L);
else {
+ globalParams = new GlobalParams();
uout = new_PDFDoc_userdata(L);
uout->d = d;
uout->atype = ALLOC_LEPDF;
@@ -147,6 +160,178 @@ static int l_new_Array(lua_State * L)
return 1;
}
+#ifdef HAVE_STRUCTTREEROOT_H
+static int l_new_Attribute(lua_State * L)
+{
+ Attribute::Type t;
+ const char *n;
+ int nlen;
+ udstruct *uobj, *uout;
+
+ if (lua_type(L,1)==LUA_TNUMBER) {
+ uobj = (udstruct *) luaL_checkudata(L, 2, M_Object);
+ if (uobj->pd != NULL && uobj->pd->pc != uobj->pc)
+ pdfdoc_changed_error(L);
+ t = (Attribute::Type) luaL_checkint(L, 1);
+ uout = new_Attribute_userdata(L);
+ uout->d = new Attribute(t, (Object *)uobj->d);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uobj->pc;
+ uout->pd = uobj->pd;
+
+ } else if (lua_type(L,1)==LUA_TSTRING) {
+ n = luaL_checkstring(L,1);
+ nlen = luaL_checkint(L,2);
+ uobj = (udstruct *) luaL_checkudata(L, 3, M_Object);
+ if (uobj->pd != NULL && uobj->pd->pc != uobj->pc)
+ pdfdoc_changed_error(L);
+ uout = new_Attribute_userdata(L);
+ uout->d = new Attribute(n, nlen, (Object *)uobj->d);
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uobj->pc;
+ uout->pd = uobj->pd;
+ } else
+ lua_pushnil(L);
+ return 1;
+}
+
+#define ATTRIBUTE_TYPE_ENTRY(name) \
+ lua_pushstring(L, #name); \
+ lua_pushinteger(L, Attribute::name); \
+ lua_settable(L,-3)
+
+
+#define STRUCTELEMENT_TYPE_ENTRY(name) \
+ lua_pushstring(L, #name); \
+ lua_pushinteger(L, StructElement::name); \
+ lua_settable(L,-3)
+
+
+static int l_Attribute_Type(lua_State * L) {
+ lua_createtable (L, 0, 42);
+ ATTRIBUTE_TYPE_ENTRY(BBox);
+ ATTRIBUTE_TYPE_ENTRY(BackgroundColor);
+ ATTRIBUTE_TYPE_ENTRY(BorderColor);
+ ATTRIBUTE_TYPE_ENTRY(BorderThickness);
+ ATTRIBUTE_TYPE_ENTRY(Color);
+ ATTRIBUTE_TYPE_ENTRY(ColumnGap);
+ ATTRIBUTE_TYPE_ENTRY(ColumnWidths);
+ ATTRIBUTE_TYPE_ENTRY(Desc);
+ ATTRIBUTE_TYPE_ENTRY(Role);
+ ATTRIBUTE_TYPE_ENTRY(TextDecorationColor);
+ ATTRIBUTE_TYPE_ENTRY(TextDecorationThickness);
+ ATTRIBUTE_TYPE_ENTRY(BaselineShift);
+ ATTRIBUTE_TYPE_ENTRY(BlockAlign);
+ ATTRIBUTE_TYPE_ENTRY(BorderStyle);
+ ATTRIBUTE_TYPE_ENTRY(ColSpan);
+ ATTRIBUTE_TYPE_ENTRY(ColumnCount);
+ ATTRIBUTE_TYPE_ENTRY(EndIndent);
+ ATTRIBUTE_TYPE_ENTRY(GlyphOrientationVertical);
+ ATTRIBUTE_TYPE_ENTRY(Headers);
+ ATTRIBUTE_TYPE_ENTRY(Height);
+ ATTRIBUTE_TYPE_ENTRY(InlineAlign);
+ ATTRIBUTE_TYPE_ENTRY(LineHeight);
+ ATTRIBUTE_TYPE_ENTRY(ListNumbering);
+ ATTRIBUTE_TYPE_ENTRY(Padding);
+ ATTRIBUTE_TYPE_ENTRY(Placement);
+ ATTRIBUTE_TYPE_ENTRY(RowSpan);
+ ATTRIBUTE_TYPE_ENTRY(RubyAlign);
+ ATTRIBUTE_TYPE_ENTRY(RubyPosition);
+ ATTRIBUTE_TYPE_ENTRY(Scope);
+ ATTRIBUTE_TYPE_ENTRY(SpaceAfter);
+ ATTRIBUTE_TYPE_ENTRY(SpaceBefore);
+ ATTRIBUTE_TYPE_ENTRY(StartIndent);
+ ATTRIBUTE_TYPE_ENTRY(Summary);
+ ATTRIBUTE_TYPE_ENTRY(TBorderStyle);
+ ATTRIBUTE_TYPE_ENTRY(TPadding);
+ ATTRIBUTE_TYPE_ENTRY(TextAlign);
+ ATTRIBUTE_TYPE_ENTRY(TextDecorationType);
+ ATTRIBUTE_TYPE_ENTRY(TextIndent);
+ ATTRIBUTE_TYPE_ENTRY(Width);
+ ATTRIBUTE_TYPE_ENTRY(WritingMode);
+ ATTRIBUTE_TYPE_ENTRY(Unknown);
+ ATTRIBUTE_TYPE_ENTRY(checked);
+ return 1;
+}
+
+static int l_StructElement_Type(lua_State * L) {
+ lua_createtable (L, 0, 50);
+ STRUCTELEMENT_TYPE_ENTRY(Document);
+ STRUCTELEMENT_TYPE_ENTRY(Part);
+ STRUCTELEMENT_TYPE_ENTRY(Art);
+ STRUCTELEMENT_TYPE_ENTRY(Sect);
+ STRUCTELEMENT_TYPE_ENTRY(Div);
+ STRUCTELEMENT_TYPE_ENTRY(BlockQuote);
+ STRUCTELEMENT_TYPE_ENTRY(Caption);
+ STRUCTELEMENT_TYPE_ENTRY(NonStruct);
+ STRUCTELEMENT_TYPE_ENTRY(Index);
+ STRUCTELEMENT_TYPE_ENTRY(Private);
+ STRUCTELEMENT_TYPE_ENTRY(Span);
+ STRUCTELEMENT_TYPE_ENTRY(Quote);
+ STRUCTELEMENT_TYPE_ENTRY(Note);
+ STRUCTELEMENT_TYPE_ENTRY(Reference);
+ STRUCTELEMENT_TYPE_ENTRY(BibEntry);
+ STRUCTELEMENT_TYPE_ENTRY(Code);
+ STRUCTELEMENT_TYPE_ENTRY(Link);
+ STRUCTELEMENT_TYPE_ENTRY(Annot);
+ STRUCTELEMENT_TYPE_ENTRY(Ruby);
+ STRUCTELEMENT_TYPE_ENTRY(RB);
+ STRUCTELEMENT_TYPE_ENTRY(RT);
+ STRUCTELEMENT_TYPE_ENTRY(RP);
+ STRUCTELEMENT_TYPE_ENTRY(Warichu);
+ STRUCTELEMENT_TYPE_ENTRY(WT);
+ STRUCTELEMENT_TYPE_ENTRY(WP);
+ STRUCTELEMENT_TYPE_ENTRY(P);
+ STRUCTELEMENT_TYPE_ENTRY(H);
+ STRUCTELEMENT_TYPE_ENTRY(H1);
+ STRUCTELEMENT_TYPE_ENTRY(H2);
+ STRUCTELEMENT_TYPE_ENTRY(H3);
+ STRUCTELEMENT_TYPE_ENTRY(H4);
+ STRUCTELEMENT_TYPE_ENTRY(H5);
+ STRUCTELEMENT_TYPE_ENTRY(H6);
+ STRUCTELEMENT_TYPE_ENTRY(L);
+ STRUCTELEMENT_TYPE_ENTRY(LI);
+ STRUCTELEMENT_TYPE_ENTRY(Lbl);
+ STRUCTELEMENT_TYPE_ENTRY(LBody);
+ STRUCTELEMENT_TYPE_ENTRY(Table);
+ STRUCTELEMENT_TYPE_ENTRY(TR);
+ STRUCTELEMENT_TYPE_ENTRY(TH);
+ STRUCTELEMENT_TYPE_ENTRY(TD);
+ STRUCTELEMENT_TYPE_ENTRY(THead);
+ STRUCTELEMENT_TYPE_ENTRY(TFoot);
+ STRUCTELEMENT_TYPE_ENTRY(TBody);
+ STRUCTELEMENT_TYPE_ENTRY(Figure);
+ STRUCTELEMENT_TYPE_ENTRY(Formula);
+ STRUCTELEMENT_TYPE_ENTRY(Form);
+ STRUCTELEMENT_TYPE_ENTRY(TOC);
+ STRUCTELEMENT_TYPE_ENTRY(TOCI);
+ lua_pushstring(L, "Unknown");
+ lua_pushinteger(L, 0);
+ lua_settable(L,-3);
+ return 1;
+}
+
+static int l_AttributeOwner_Type(lua_State * L) {
+ lua_createtable (L, 0, 12);
+ lua_pushstring(L, "XML-1.00"); lua_pushinteger(L, Attribute::XML_1_00); lua_settable(L,-3);
+ lua_pushstring(L, "HTML-3.20"); lua_pushinteger(L, Attribute::HTML_3_20); lua_settable(L,-3);
+ lua_pushstring(L, "HTML-4.01"); lua_pushinteger(L, Attribute::HTML_4_01); lua_settable(L,-3);
+ lua_pushstring(L, "OEB-1.00"); lua_pushinteger(L, Attribute::OEB_1_00); lua_settable(L,-3);
+ lua_pushstring(L, "RTF-1.05"); lua_pushinteger(L, Attribute::RTF_1_05); lua_settable(L,-3);
+ lua_pushstring(L, "CSS-1.00"); lua_pushinteger(L, Attribute::CSS_1_00); lua_settable(L,-3);
+ lua_pushstring(L, "CSS-2.00"); lua_pushinteger(L, Attribute::CSS_2_00); lua_settable(L,-3);
+ lua_pushstring(L, "Layout"); lua_pushinteger(L, Attribute::Layout); lua_settable(L,-3);
+ lua_pushstring(L, "PrintField"); lua_pushinteger(L, Attribute::PrintField); lua_settable(L,-3);
+ lua_pushstring(L, "Table"); lua_pushinteger(L, Attribute::Table); lua_settable(L,-3);
+ lua_pushstring(L, "List"); lua_pushinteger(L, Attribute::List); lua_settable(L,-3);
+ lua_pushstring(L, "UserProperties"); lua_pushinteger(L, Attribute::UserProperties);lua_settable(L,-3);
+ return 1;
+}
+
+
+#endif
+
+
static int l_new_Dict(lua_State * L)
{
udstruct *uxref, *uout;
@@ -188,6 +373,12 @@ static int l_new_PDFRectangle(lua_State * L)
static const struct luaL_Reg epdflib_f[] = {
{"open", l_open_PDFDoc},
{"Array", l_new_Array},
+#ifdef HAVE_STRUCTTREEROOT_H
+ {"Attribute", l_new_Attribute},
+ {"StructElement_Type", l_StructElement_Type},
+ {"Attribute_Type", l_Attribute_Type},
+ {"AttributeOwner_Type",l_AttributeOwner_Type},
+#endif
{"Dict", l_new_Dict},
{"Object", l_new_Object},
{"PDFRectangle", l_new_PDFRectangle},
@@ -242,6 +433,25 @@ static int m_##in##_##function(lua_State * L) \
return 1; \
}
+
+#define m_poppler_get_GUINT(in, function) \
+static int m_##in##_##function(lua_State * L) \
+{ \
+ unsigned int i; \
+ udstruct *uin; \
+ uin = (udstruct *) luaL_checkudata(L, 1, M_##in); \
+ if (uin->pd != NULL && uin->pd->pc != uin->pc) \
+ pdfdoc_changed_error(L); \
+ i = (unsigned int) ((in *) uin->d)->function(); \
+ lua_pushinteger(L, i); \
+ return 1; \
+}
+
+#define m_poppler_get_UINT(in, function) \
+m_poppler_get_GUINT(in, function)
+
+
+
#define m_poppler_get_DOUBLE(in, function) \
static int m_##in##_##function(lua_State * L) \
{ \
@@ -1875,7 +2085,8 @@ static int m_Object__gc(lua_State * L)
printf("\n===== Object GC ===== uin=<%p>\n", uin);
#endif
if (uin->atype == ALLOC_LEPDF) {
- ((Object *) uin->d)->free();
+ // free() seems to collide with the lua gc
+ //((Object *) uin->d)->free();
delete(Object *) uin->d;
}
return 0;
@@ -2532,6 +2743,562 @@ static const struct luaL_Reg Stream_m[] = {
{NULL, NULL} // sentinel
};
+#ifdef HAVE_STRUCTTREEROOT_H
+//**********************************************************************
+// TextSpan
+
+m_poppler_get_GOOSTRING(TextSpan, getText);
+m_poppler__tostring(TextSpan);
+
+static const struct luaL_Reg TextSpan_m[] = {
+ {"getText", m_TextSpan_getText},
+ {"__tostring", m_TextSpan__tostring},
+ {NULL, NULL} // sentinel
+};
+
+
+
+
+//**********************************************************************
+// Attribute
+m_poppler_get_BOOL(Attribute,isOk);
+m_poppler_get_INT(Attribute,getType);
+m_poppler_get_INT(Attribute,getOwner);
+m_poppler_get_GOOSTRING(Attribute,getName);
+
+static int m_Attribute_getTypeName(lua_State * L)
+{
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ lua_pushstring(L, ((Attribute *) uin->d)->getTypeName());
+ return 1;
+}
+
+static int m_Attribute_getOwnerName(lua_State * L)
+{
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ lua_pushstring(L, ((Attribute *) uin->d)->getOwnerName());
+ return 1;
+}
+
+static int m_Attribute_getValue(lua_State * L)
+{
+ udstruct *uin, *uout;
+ Object *origin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uout = new_Object_userdata(L);
+ uout->d = new Object();
+ origin = (Object *) (((Attribute *) uin->d)->getValue());
+ origin->copy ( ((Object *)uout->d) );
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ return 1;
+}
+
+
+static int m_Attribute_getDefaultValue(lua_State * L)
+{
+ Attribute::Type t;
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ t = (Attribute::Type) luaL_checkint(L, 2);
+ uout = new_Object_userdata(L);
+ uout->d = ((Attribute *)uin->d)->getDefaultValue(t) ;
+ //uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ return 1;
+}
+
+
+m_poppler_get_GUINT(Attribute,getRevision);
+
+static int m_Attribute_setRevision(lua_State * L)
+{
+ Guint i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (Guint) luaL_checkint(L, 2);
+ ((Attribute *) uin->d)->setRevision(i);
+ return 0;
+}
+
+m_poppler_get_BOOL(Attribute, isHidden);
+
+static int m_Attribute_setHidden(lua_State * L)
+{
+ GBool i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (GBool) lua_toboolean(L, 2);
+ ((Attribute *) uin->d)->setHidden(i);
+ return 0;
+}
+
+static int m_Attribute_getFormattedValue(lua_State * L)
+{
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ lua_pushstring(L, ((Attribute *) uin->d)->getFormattedValue());
+ return 1;
+}
+
+
+static int m_Attribute_setFormattedValue(lua_State * L)
+{
+ const char *c;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ c = luaL_checkstring(L, 2);
+ ((Attribute *) uin->d)->setFormattedValue(c);
+ return 0;
+}
+
+static int m_Attribute__gc(lua_State * L)
+{
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+#ifdef DEBUG
+ printf("\n===== Attribute GC ===== uin=<%p>\n", uin);
+#endif
+ if (uin->atype == ALLOC_LEPDF) {
+ delete(Attribute *) uin->d;
+ }
+ return 0;
+}
+
+
+m_poppler__tostring(Attribute);
+
+
+static const struct luaL_Reg Attribute_m[] = {
+ {"isOk",m_Attribute_isOk},
+ {"getType",m_Attribute_getType},
+ {"getOwner",m_Attribute_getOwner},
+ {"getTypeName",m_Attribute_getTypeName},
+ {"getOwnerName",m_Attribute_getOwnerName},
+ {"getValue",m_Attribute_getValue},
+ {"getDefaultValue",m_Attribute_getDefaultValue},
+ {"getName",m_Attribute_getName},
+ {"getRevision",m_Attribute_getRevision},
+ {"setRevision",m_Attribute_setRevision},
+ {"istHidden",m_Attribute_isHidden},
+ {"setHidden",m_Attribute_setHidden},
+ {"getFormattedValue",m_Attribute_getFormattedValue},
+ {"setFormattedValue",m_Attribute_setFormattedValue},
+ {"__gc", m_Attribute__gc},
+ {"__tostring", m_Attribute__tostring},
+ {NULL, NULL} // sentinel
+};
+
+
+
+
+//**********************************************************************
+// StructElement
+
+
+m_poppler_get_INT(StructElement,getType);
+m_poppler_get_BOOL(StructElement,isOk);
+m_poppler_get_BOOL(StructElement,isBlock);
+m_poppler_get_BOOL(StructElement,isInline);
+m_poppler_get_BOOL(StructElement,isGrouping);
+m_poppler_get_BOOL(StructElement,isContent);
+m_poppler_get_BOOL(StructElement,isObjectRef);
+m_poppler_get_BOOL(StructElement,hasPageRef);
+m_poppler_get_INT(StructElement,getMCID);
+m_poppler_get_INT(StructElement, getNumChildren);
+
+m_poppler_get_GUINT(StructElement,getRevision);
+m_poppler_get_UINT(StructElement,getNumAttributes);
+
+m_poppler_get_GOOSTRING(StructElement, getID);
+m_poppler_get_GOOSTRING(StructElement, getLanguage);
+m_poppler_get_GOOSTRING(StructElement, getTitle);
+m_poppler_get_GOOSTRING(StructElement, getExpandedAbbr);
+m_poppler_get_GOOSTRING(StructElement, getAltText);
+m_poppler_get_GOOSTRING(StructElement, getActualText);
+
+m_poppler_get_poppler(StructElement, StructTreeRoot, getStructTreeRoot);
+m_poppler__tostring(StructElement);
+
+
+static int m_StructElement_getObjectRef(lua_State * L)
+{
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uout = new_Ref_userdata(L);
+ uout->d = (Ref *) gmalloc(sizeof(Ref));
+ ((Ref *) uout->d)->num = ((StructElement *) uin->d)->getObjectRef().num;
+ ((Ref *) uout->d)->gen = ((StructElement *) uin->d)->getObjectRef().gen;
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ return 1;
+}
+
+
+static int m_StructElement_getParentRef(lua_State * L)
+{
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uout = new_Ref_userdata(L);
+ uout->d = (Ref *) gmalloc(sizeof(Ref));
+ ((Ref *) uout->d)->num = ((StructElement *) uin->d)->getParentRef().num;
+ ((Ref *) uout->d)->gen = ((StructElement *) uin->d)->getParentRef().gen;
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ return 1;
+}
+
+// Not exactly as the header:
+// Ref = StructElement:getPageRef()
+// Ref is false if the C++ functione return false
+static int m_StructElement_getPageRef(lua_State * L)
+{
+ GBool b;
+ Ref *r;
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ r = (Ref *) gmalloc(sizeof(Ref));
+ b = ((StructElement *) uin->d)->getPageRef( *r );
+ if (b) {
+ uout = new_Ref_userdata(L);
+ uout->d = r ;
+ //uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ } else
+ lua_pushboolean(L,0);
+ return 1;
+}
+
+
+
+static int m_StructElement_getTypeName(lua_State * L)
+{
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ lua_pushstring(L, ((StructElement *) uin->d)->getTypeName());
+ return 1;
+}
+
+
+static int m_StructElement_setRevision(lua_State * L)
+{
+ Guint i;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (Guint) luaL_checkint(L, 2);
+ ((StructElement *) uin->d)->setRevision(i);
+ return 0;
+}
+
+static int m_StructElement_getText(lua_State * L)
+{
+ GBool i;
+ GooString *gs;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (GBool) lua_toboolean(L, 2);
+ gs = ((StructElement *) uin->d)->getText(i);
+ if (gs != NULL)
+ lua_pushlstring(L, gs->getCString(), gs->getLength());
+ else
+ lua_pushnil(L);
+ return 1;
+}
+
+
+static int m_StructElement_getChild(lua_State * L)
+{
+ StructElement *c;
+ int i;
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (int) luaL_checkint(L, 2);
+ c = ((StructElement *) uin->d)->getChild(i-1);
+ if (c != NULL) {
+ uout = new_StructElement_userdata(L);
+ uout->d = c ;
+ //uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ }
+ else
+ lua_pushnil(L);
+ return 1;
+}
+
+
+static int m_StructElement_appendChild(lua_State * L)
+{
+ udstruct *uin, *uin1;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uin1 = (udstruct *) luaL_checkudata(L, 2, M_StructElement);
+ if (uin1->pd != NULL && uin1->pd->pc != uin1->pc)
+ pdfdoc_changed_error(L);
+ ((StructElement *) uin->d)->appendChild( (StructElement *)uin1->d );
+ return 0;
+}
+
+
+static int m_StructElement_getAttribute(lua_State * L)
+{
+ Attribute *a;
+ int i;
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (int) luaL_checkint(L, 2);
+ a = ((StructElement *) uin->d)->getAttribute(i-1);
+ if (a != NULL) {
+ uout = new_Attribute_userdata(L);
+ uout->d = a ;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ }
+ else
+ lua_pushnil(L);
+ return 1;
+}
+
+
+
+static int m_StructElement_appendAttribute(lua_State * L)
+{
+
+ udstruct *uin, *uin1;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uin1 = (udstruct *) luaL_checkudata(L, 2, M_Attribute);
+ if (uin1->pd != NULL && uin1->pd->pc != uin1->pc)
+ pdfdoc_changed_error(L);
+ ((StructElement *) uin->d)->appendAttribute( (Attribute *)uin1->d );
+ return 0;
+}
+
+
+static int m_StructElement_findAttribute(lua_State * L)
+{
+ Attribute::Type t;
+ Attribute::Owner o;
+ GBool g;
+ udstruct *uin, *uout;
+ const Attribute *a;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ t = (Attribute::Type) luaL_checkint(L,1);
+ o = (Attribute::Owner) luaL_checkint(L,2);
+ g = (GBool) lua_toboolean(L, 3);
+ a = ((StructElement *) uin->d)->findAttribute(t,g,o);
+
+ if (a!=NULL){
+ uout = new_Attribute_userdata(L);
+ uout->d = new Attribute(a->getType(),a->getValue());
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ } else
+ lua_pushnil(L);
+ return 1;
+}
+
+// This returns a lua table
+static int m_StructElement_getTextSpans(lua_State * L)
+{
+ int i ;
+ udstruct *uin, *uout;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+
+ if ((((StructElement *) uin->d)->getTextSpans()).size()>0) {
+ lua_createtable (L,
+ (int) (((StructElement *) uin->d)->getTextSpans()).size(),
+ 0);
+ for(i=0;i<(int) (((StructElement *) uin->d)->getTextSpans()).size(); i++){
+ uout = new_TextSpan_userdata(L);
+ uout->d = new TextSpan( (((StructElement *) uin->d)->getTextSpans())[i] );
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ lua_rawseti(L,-2,i+1);
+ }
+ } else
+ lua_pushnil(L);
+ return 1;
+}
+
+
+
+static const struct luaL_Reg StructElement_m[] = {
+ {"getTypeName", m_StructElement_getTypeName},
+ {"getType",m_StructElement_getType},
+ {"isOk",m_StructElement_isOk},
+ {"isBlock",m_StructElement_isBlock},
+ {"isInline",m_StructElement_isInline},
+ {"isGrouping",m_StructElement_isGrouping},
+ {"isContent",m_StructElement_isContent},
+ {"isObjectRef",m_StructElement_isObjectRef},
+ {"getMCID",m_StructElement_getMCID},
+ {"getObjectRef",m_StructElement_getObjectRef},
+ {"getParentRef",m_StructElement_getParentRef},
+ {"hasPageRef",m_StructElement_hasPageRef},
+ {"getPageRef",m_StructElement_getPageRef},
+ {"getStructTreeRoot",m_StructElement_getStructTreeRoot},
+ {"getID",m_StructElement_getID},
+ {"getLanguage",m_StructElement_getLanguage},
+ {"getRevision",m_StructElement_getRevision},
+ {"setRevision",m_StructElement_setRevision},
+ {"getTitle",m_StructElement_getTitle},
+ {"getExpandedAbbr",m_StructElement_getExpandedAbbr},
+ {"getNumChildren",m_StructElement_getNumChildren},
+ {"getChild",m_StructElement_getChild},
+ {"appendChild",m_StructElement_appendChild},
+ {"getNumAttributes",m_StructElement_getNumAttributes},
+ {"getAttribute",m_StructElement_getAttribute},
+ {"appendAttribute",m_StructElement_appendAttribute},
+ {"findAttribute",m_StructElement_findAttribute},
+ {"getAltText",m_StructElement_getAltText},
+ {"getActualText",m_StructElement_getActualText},
+ {"getText",m_StructElement_getText},
+ {"getTextSpans",m_StructElement_getTextSpans},
+ {"__tostring", m_StructElement__tostring},
+ {NULL, NULL} // sentinel
+};
+
+
+//**********************************************************************
+// StructTreeRoot
+
+m_poppler_get_INT(StructTreeRoot, getNumChildren);
+m_poppler_get_poppler(StructTreeRoot, PDFDoc, getDoc);
+m_poppler_get_poppler(StructTreeRoot, Dict, getRoleMap);
+m_poppler_get_poppler(StructTreeRoot, Dict, getClassMap);
+m_poppler__tostring(StructTreeRoot);
+
+static int m_StructTreeRoot_getChild(lua_State * L)
+{
+ unsigned int i;
+ udstruct *uin, *uout;
+ StructElement *child ;
+ StructTreeRoot *root ;
+
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructTreeRoot);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (unsigned) luaL_checkint(L, 2);
+ root = (StructTreeRoot *) uin->d;
+ if (i-1 < root->getNumChildren() ){
+ child = root->getChild(i-1);
+ uout = new_StructElement_userdata(L);
+ uout->d = child;
+ //uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ } else
+ lua_pushnil(L);
+ return 1;
+}
+
+static int m_StructTreeRoot_appendChild(lua_State * L)
+{
+ udstruct *uin, *uin_child, *uout;
+ StructElement *child ;
+ StructTreeRoot *root ;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructTreeRoot);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ uin_child = (udstruct *) luaL_checkudata(L, 2, M_StructElement);
+ if (uin_child->pd != NULL && uin_child->pd->pc != uin_child->pc)
+ pdfdoc_changed_error(L);
+ root = (StructTreeRoot *) uin->d;
+ child = (StructElement *) uin_child->d;
+ root->appendChild(child);
+ return 0;
+}
+
+
+static int m_StructTreeRoot_findParentElement(lua_State * L)
+{
+ unsigned int i;
+ udstruct *uin, *uout;
+ const StructElement *parent ;
+ StructTreeRoot *root ;
+
+ uin = (udstruct *) luaL_checkudata(L, 1, M_StructTreeRoot);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ i = (unsigned) luaL_checkint(L, 2);
+ root = (StructTreeRoot *) uin->d;
+ parent = root->findParentElement(i-1);
+ if (parent != NULL) {
+ uout = new_StructElement_userdata(L);
+ uout->d = new StructElement( *parent );
+ uout->atype = ALLOC_LEPDF;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ } else
+ lua_pushnil(L);
+ return 1;
+}
+
+
+static const struct luaL_Reg StructTreeRoot_m[] = {
+ {"findParentElement", m_StructTreeRoot_findParentElement},
+ {"getDoc",m_StructTreeRoot_getDoc},
+ {"getRoleMap",m_StructTreeRoot_getRoleMap},
+ {"getClassMap",m_StructTreeRoot_getClassMap},
+ {"getNumChildren",m_StructTreeRoot_getNumChildren},
+ {"getChild",m_StructTreeRoot_getChild},
+ {"appendChild",m_StructTreeRoot_appendChild},
+ {"findParentElement",m_StructTreeRoot_findParentElement},
+ {"__tostring", m_StructTreeRoot__tostring},
+ {NULL, NULL} // sentinel
+};
+#endif
+
//**********************************************************************
// XRef
@@ -2667,6 +3434,12 @@ int luaopen_epdf(lua_State * L)
setfuncs_meta(PDFRectangle);
setfuncs_meta(Ref);
setfuncs_meta(Stream);
+#ifdef HAVE_STRUCTTREEROOT_H
+ setfuncs_meta(Attribute);
+ setfuncs_meta(StructElement);
+ setfuncs_meta(StructTreeRoot);
+ setfuncs_meta(TextSpan);
+#endif
setfuncs_meta(XRef);
setfuncs_meta(XRefEntry);
diff --git a/Build/source/texk/web2c/luatexdir/lua/llanglib.c b/Build/source/texk/web2c/luatexdir/lua/llanglib.c
index b0d2efb5333..e0139d677d5 100644
--- a/Build/source/texk/web2c/luatexdir/lua/llanglib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/llanglib.c
@@ -23,7 +23,7 @@
static const char _svn_version[] =
- "$Id: llanglib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/llanglib.c $";
+ "$Id: llanglib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/llanglib.c $";
#define LANG_METATABLE "luatex.lang"
diff --git a/Build/source/texk/web2c/luatexdir/lua/llfslibext.c b/Build/source/texk/web2c/luatexdir/lua/llfslibext.c
index a72369cb66e..78972b53b18 100644
--- a/Build/source/texk/web2c/luatexdir/lua/llfslibext.c
+++ b/Build/source/texk/web2c/luatexdir/lua/llfslibext.c
@@ -25,7 +25,7 @@
#include <time.h>
static const char _svn_version[] =
- "$Id: llfslibext.c 4421 2012-05-21 15:20:49Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/llfslibext.c $";
+ "$Id: llfslibext.c 4421 2012-05-21 15:20:49Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/llfslibext.c $";
#ifdef _WIN32
# include <windows.h>
diff --git a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c
index 4f98dc19526..dfe51e26b69 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c
@@ -96,7 +96,7 @@
*/
static const char _svn_version[] =
- "$Id: lnodelib.c 4956 2014-03-28 12:12:17Z luigi $ "
+ "$Id: lnodelib.c 5091 2014-12-09 15:44:36Z luigi $ "
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lnodelib.c $";
#include "ptexlib.h"
@@ -1984,14 +1984,18 @@ static int lua_nodelib_end_of_math(lua_State * L)
halfword *n;
halfword t;
if (lua_isnil(L, 1))
- return 1; /* the nil itself */
+ return 0;
n = check_isnode(L, 1);
t = *n;
if (t == null)
- return 1; /* the old userdata */
+ return 0;
+ if (type(t)==math_node && (subtype(t)==1)) {
+ lua_nodelib_push_fast(L, t);
+ return 1;
+ }
while (vlink(t) != null) {
- t = vlink(t); /* skip first node */
- if (t && type(t)==math_node) {
+ t = vlink(t);
+ if (t && (type(t)==math_node) && (subtype(t)==1)) {
lua_nodelib_push_fast(L, t);
return 1;
}
@@ -2005,19 +2009,23 @@ static int lua_nodelib_direct_end_of_math(lua_State * L)
{
halfword n;
n = (halfword) lua_tonumber(L, 1);
- if (n != null) {
- while (vlink(n) != null) {
- n = vlink(n); /* skip first node */
- if (n && type(n)==math_node) {
- lua_pushnumber(L, n);
- return 1;
- }
+ if (n == null)
+ return 0;
+ if ((type(n)==math_node && (subtype(n)==1))) {
+ lua_pushnumber(L, n);
+ return 1;
+ }
+ while (vlink(n) != null) {
+ n = vlink(n);
+ if (n && (type(n)==math_node) && (subtype(n)==1)) {
+ lua_pushnumber(L, n);
+ return 1;
}
}
- lua_pushnil(L);
return 0;
}
+
/* node.has_attribute (gets attribute) */
static int lua_nodelib_has_attribute(lua_State * L)
@@ -4171,7 +4179,7 @@ static int lua_nodelib_has_glyph(lua_State * L)
halfword *a;
halfword h = (halfword) *(check_isnode(L,1)) ;
while (h != null) {
- if (type(h) == glyph_node) {
+ if ( (type(h) == glyph_node) || (type(h) == disc_node)) {
fast_metatable(h);
return 1;
} else {
@@ -4188,7 +4196,7 @@ static int lua_nodelib_direct_has_glyph(lua_State * L)
{
halfword h = (halfword) lua_tonumber(L,1) ;
while (h != null) {
- if (type(h) == glyph_node) {
+ if ((type(h) == glyph_node) || (type(h) == disc_node)) {
nodelib_pushdirect(h);
return 1;
} else {
diff --git a/Build/source/texk/web2c/luatexdir/lua/loslibext.c b/Build/source/texk/web2c/luatexdir/lua/loslibext.c
index 78f1e4803ab..575202b05db 100644
--- a/Build/source/texk/web2c/luatexdir/lua/loslibext.c
+++ b/Build/source/texk/web2c/luatexdir/lua/loslibext.c
@@ -25,7 +25,7 @@
#include <time.h>
static const char _svn_version[] =
- "$Id: loslibext.c 4479 2012-11-07 16:38:55Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/loslibext.c $";
+ "$Id: loslibext.c 4479 2012-11-07 16:38:55Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/loslibext.c $";
#if defined(_WIN32) || defined(__NT__)
# define MKDIR(a,b) mkdir(a)
diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
index a93f75a2aa0..1762833b037 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
@@ -18,7 +18,7 @@
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
static const char _svn_version[] =
- "$Id: lpdflib.c 4956 2014-03-28 12:12:17Z luigi $ "
+ "$Id: lpdflib.c 5018 2014-06-06 09:11:09Z taco $ "
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lpdflib.c $";
#include "ptexlib.h"
@@ -576,8 +576,10 @@ static int getpdf(lua_State * L)
s = lua_tostring(L, -1);
if (lua_key_eq(s,h)) {
lua_pushnumber(L, static_pdf->posstruct->pos.h);
+ return 1;
} else if (lua_key_eq(s,v)) {
lua_pushnumber(L, static_pdf->posstruct->pos.v);
+ return 1;
} else if (
lua_key_eq(s,catalog) || lua_key_eq(s,info) || lua_key_eq(s,trailer) || lua_key_eq(s,names) ||
lua_key_eq(s,pageattributes) || lua_key_eq(s,pagesattributes) || lua_key_eq(s,pageresources)
@@ -587,9 +589,10 @@ static int getpdf(lua_State * L)
/* [pdf table] [key] [pdf.data table] */
lua_replace(L, -3);
/* [pdf.data table] [key] */
+ lua_rawget(L, -2);
+ return 1;
}
}
- lua_rawget(L, -2);
return 0;
}
diff --git a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
index 2d301d7369f..acf6895dbf3 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
@@ -18,7 +18,7 @@
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
static const char _svn_version[] =
- "$Id: lstatslib.c 4956 2014-03-28 12:12:17Z luigi $ "
+ "$Id: lstatslib.c 5081 2014-11-07 18:38:33Z luigi $ "
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lstatslib.c $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/lua/ltexlib.c b/Build/source/texk/web2c/luatexdir/lua/ltexlib.c
index 48c9e6f17ac..df5b4748800 100644
--- a/Build/source/texk/web2c/luatexdir/lua/ltexlib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/ltexlib.c
@@ -27,7 +27,7 @@ setter no prev link is created so we can presume that it's not used later on. */
static const char _svn_version[] =
- "$Id: ltexlib.c 4956 2014-03-28 12:12:17Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltexlib.c $";
+ "$Id: ltexlib.c 5081 2014-11-07 18:38:33Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltexlib.c $";
#define attribute(A) eqtb[attribute_base+(A)].hh.rh
#define dimen(A) eqtb[scaled_base+(A)].hh.rh
@@ -288,7 +288,7 @@ void luacstring_close(int n)
next = next->next;
if (t==read_spindle.tail) {
read_spindle.tail = NULL; // prevent double-free
- }
+ }
free(t);
}
read_spindle.head = NULL;
@@ -2443,7 +2443,7 @@ static int tex_run_boot(lua_State * L)
/* tex random generators */
static int tex_init_rand(lua_State * L)
-{
+{
int sp;
if (!lua_isnumber(L, 1)) {
luaL_error(L, "argument must be a number");
@@ -2455,7 +2455,7 @@ static int tex_init_rand(lua_State * L)
}
static int tex_unif_rand(lua_State * L)
-{
+{
int sp;
if (!lua_isnumber(L, 1)) {
luaL_error(L, "argument must be a number");
@@ -2467,13 +2467,13 @@ static int tex_unif_rand(lua_State * L)
}
static int tex_norm_rand(lua_State * L)
-{
+{
lua_pushnumber(L, norm_rand());
return 1;
}
/* Same as lua but with tex rng */
-static int lua_math_random (lua_State *L)
+static int lua_math_random (lua_State *L)
{
lua_Number rand_max = 0x7fffffff ;
lua_Number r = unif_rand(rand_max) ;
@@ -2504,6 +2504,39 @@ static int lua_math_random (lua_State *L)
+/* Experimental code can either become permanent or disappear. It is
+undocumented and mostly present in the experimental branch but for
+practical reasons we also have the setup code in the regular binary.
+The experimental_code array is indexed by i with 1<= i <= max_experimental_code,
+position 0 is not used */
+int experimental_code[MAX_EXPERIMENTAL_CODE_SIZE] = { 0 };
+
+
+static int set_experimental_code(lua_State *L)
+{
+ int e, b, i ;
+
+ if (lua_isboolean(L,1)) {
+ e = 0 ;
+ b = lua_toboolean(L,1) ;
+ } else if (lua_isnumber(L,1) && lua_isboolean(L,2)) {
+ e = (int) lua_tonumber(L, 1);
+ b = lua_toboolean(L,2) ;
+ } else {
+ return luaL_error(L, "boolean or number and boolean expected");
+ }
+ if (e==0) {
+ for (i=1;i<=max_experimental_code;i++) {
+ experimental_code[i] = b;
+ }
+ } else if (0<e && e<=max_experimental_code ) {
+ experimental_code[e] = b;
+ } else {
+ return luaL_error(L, "first number out of range");
+ }
+ return 0;
+}
+
static int tex_run_main(lua_State * L)
{
(void) L;
@@ -2609,6 +2642,7 @@ static const struct luaL_Reg texlib[] = {
{"normal_rand", tex_norm_rand},
{"lua_math_randomseed", tex_init_rand}, /* syntactic sugar */
{"lua_math_random", lua_math_random},
+ {"set_experimental_code",set_experimental_code},
{"show_context", tex_show_context},
{NULL, NULL} /* sentinel */
};
diff --git a/Build/source/texk/web2c/luatexdir/lua/luainit.w b/Build/source/texk/web2c/luatexdir/lua/luainit.w
index dbf49093516..11d78503e30 100644
--- a/Build/source/texk/web2c/luatexdir/lua/luainit.w
+++ b/Build/source/texk/web2c/luatexdir/lua/luainit.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: luainit.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: luainit.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/luainit.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
index a42b147c301..6e9c5e278e7 100644
--- a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
+++ b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: luatex-api.h 4956 2014-03-28 12:12:17Z luigi $ */
+/* $Id: luatex-api.h 5081 2014-11-07 18:38:33Z luigi $ */
#ifndef LUATEX_API_H
# define LUATEX_API_H 1
@@ -1002,6 +1002,29 @@ init_lua_key_alias(term_and_log,"term and log")
} while(0)
+
+
+#ifdef __MINGW32__
+extern FILE *_cairo_win32_tmpfile( void );
+#define tmpfile() _cairo_win32_tmpfile()
+#endif /* __MINGW32__ */
+
+
+
+/*
+* experimental code (no primitive):
+
+ 0 = all
+ 1 = retain math nodes
+
+*/
+
+#define max_experimental_code 1
+#define MAX_EXPERIMENTAL_CODE_SIZE max_experimental_code+1
+/* to be indexed by i with 1<= i <=max_experimental_code */
+extern int experimental_code[MAX_EXPERIMENTAL_CODE_SIZE] ;
+
+
#endif /* LUATEX_API_H */
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/configure-pfaedit.h b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/configure-pfaedit.h
index 208341dd8a7..145f8b85333 100644
--- a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/configure-pfaedit.h
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/configure-pfaedit.h
@@ -289,4 +289,13 @@
/* fonts */
#define BACK_LAYER_MAX 256
+
+
+#ifdef __MINGW32__
+#include <stdio.h>
+extern FILE *_cairo_win32_tmpfile( void );
+#define tmpfile() _cairo_win32_tmpfile()
+#endif /* __MINGW32__ */
+
+
#endif
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/pfaedit.h b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/pfaedit.h
index dc06e0e0807..73d0928a5e2 100644
--- a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/pfaedit.h
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/pfaedit.h
@@ -77,5 +77,4 @@ extern Encoding *enclist;
#define SCRIPT_MENU_MAX 10
-
#endif
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c b/Build/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c
index 59e4b703fe9..7db31c12126 100644
--- a/Build/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c
@@ -29,7 +29,7 @@
static const char _svn_version[] =
"$Id: ffdummies.c 3738 2010-07-13 10:28:24Z oneiros $ "
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luafontloader/src/ffdummies.c $";
/* fix for non-gcc compilation: */
diff --git a/Build/source/texk/web2c/luatexdir/luascripts/pdflua.c b/Build/source/texk/web2c/luatexdir/luascripts/pdflua.c
index e81deee984b..b75ae3a7df8 100644
--- a/Build/source/texk/web2c/luatexdir/luascripts/pdflua.c
+++ b/Build/source/texk/web2c/luatexdir/luascripts/pdflua.c
@@ -20,26 +20,25 @@
#include "ptexlib.h"
-static const Byte compr[260] = {
- 0x78, 0x9c, 0xad, 0x51, 0xc1, 0x4a, 0xc4, 0x30, 0x10, 0xbd, 0xe7, 0x2b, 0xe6, 0xd0, 0x83, 0xc2,
- 0x36, 0x49, 0x57, 0x41, 0x5a, 0xd8, 0x0f, 0x10, 0x3c, 0x09, 0x5e, 0xbc, 0xa5, 0xe9, 0xb4, 0x0d,
- 0x0d, 0x49, 0x98, 0x24, 0xee, 0x2e, 0xe2, 0xbf, 0x9b, 0x42, 0xd1, 0x55, 0xf1, 0xb6, 0x61, 0x12,
- 0x1e, 0xf3, 0x5e, 0xe6, 0x3d, 0x98, 0xba, 0x86, 0xea, 0x71, 0xe8, 0x20, 0x0c, 0xa3, 0xcd, 0x8a,
- 0x97, 0x0b, 0x77, 0xed, 0x7d, 0x0b, 0x7b, 0xd9, 0xc8, 0xba, 0x69, 0x6a, 0xf9, 0x00, 0x52, 0x76,
- 0xb2, 0xed, 0x9a, 0xf6, 0x15, 0xe6, 0x19, 0xdd, 0x82, 0x16, 0x2a, 0x56, 0x97, 0x6f, 0x2f, 0xcf,
- 0x4f, 0x1d, 0xcc, 0x29, 0x85, 0xd8, 0x09, 0x31, 0xfa, 0xec, 0x06, 0x3a, 0xf3, 0x98, 0x03, 0x5a,
- 0xd4, 0x7c, 0x24, 0x11, 0xdf, 0x9c, 0x28, 0xf3, 0x12, 0x9e, 0x44, 0x4f, 0xca, 0xe9, 0x19, 0xa3,
- 0xc0, 0x53, 0x3d, 0xd9, 0x73, 0x98, 0x45, 0xf4, 0x99, 0x34, 0x8a, 0x42, 0x2e, 0xe2, 0x88, 0xfd,
- 0x5e, 0x6f, 0xd2, 0xc1, 0xd0, 0x8a, 0xa2, 0x26, 0x13, 0x52, 0x14, 0x17, 0xb1, 0x2a, 0xb6, 0xba,
- 0xa6, 0xd9, 0x44, 0x28, 0x85, 0x8a, 0xec, 0x19, 0x8e, 0x9e, 0x16, 0x30, 0x0e, 0x02, 0xf9, 0x89,
- 0x30, 0x46, 0xce, 0xf9, 0xaa, 0xba, 0xce, 0x61, 0xac, 0xc7, 0xc9, 0xb8, 0xa0, 0x26, 0x84, 0x03,
- 0x8c, 0xd9, 0xe9, 0x64, 0xbc, 0xbb, 0x51, 0xb7, 0x0c, 0xdd, 0xc0, 0xd6, 0xe7, 0x3f, 0xca, 0xe7,
- 0x14, 0x4a, 0x15, 0x36, 0x26, 0xc2, 0x1f, 0x92, 0x4d, 0x71, 0xbd, 0x8c, 0xd6, 0x6b, 0x65, 0xb7,
- 0xf5, 0x15, 0xa3, 0x77, 0x06, 0x70, 0x19, 0xfb, 0x0b, 0xef, 0x0a, 0xf1, 0x1d, 0x79, 0x43, 0x6b,
- 0xf3, 0x6f, 0xd8, 0x5f, 0x9d, 0x1d, 0xfb, 0x60, 0x8c, 0x30, 0x65, 0x72, 0x9b, 0x0f, 0xfb, 0x04,
- 0xb9, 0x50, 0xa4, 0xf0
+static const Byte compr[251] = {
+ 0x78, 0x9c, 0xad, 0x51, 0xc1, 0x4a, 0xc4, 0x30, 0x14, 0xbc, 0xbf, 0xaf, 0x78, 0x87, 0x1e, 0x14,
+ 0xb6, 0x49, 0xba, 0x0a, 0xd2, 0x82, 0x1f, 0x20, 0x78, 0x12, 0xbc, 0x78, 0xeb, 0xa6, 0xaf, 0x6d,
+ 0x68, 0x48, 0xc2, 0x4b, 0xe2, 0xba, 0x88, 0xff, 0x6e, 0x0a, 0x45, 0x57, 0xc5, 0xdb, 0x86, 0x97,
+ 0x30, 0xcc, 0x4c, 0x32, 0x03, 0xa9, 0x6b, 0xac, 0x1e, 0x86, 0x0e, 0xc3, 0x30, 0xda, 0xdc, 0x8b,
+ 0xb2, 0xf1, 0xa6, 0xbd, 0x6d, 0x71, 0xaf, 0x1a, 0x55, 0x37, 0x4d, 0xad, 0xee, 0x50, 0xa9, 0x4e,
+ 0xb5, 0x5d, 0xd3, 0xbe, 0xe0, 0x3c, 0x93, 0x5b, 0xc8, 0x62, 0x05, 0x75, 0xb9, 0xf6, 0xfc, 0xf4,
+ 0xd8, 0xe1, 0x9c, 0x52, 0x88, 0x9d, 0x94, 0xa3, 0xcf, 0x6e, 0xe0, 0x93, 0x88, 0x39, 0x90, 0x25,
+ 0x2d, 0x46, 0x96, 0xf1, 0xd5, 0xc9, 0xf2, 0x5e, 0xa2, 0x37, 0x99, 0x38, 0xbb, 0x45, 0x46, 0x9f,
+ 0x59, 0x93, 0x2c, 0xc4, 0x22, 0x8f, 0x74, 0xd8, 0xeb, 0x4d, 0x1e, 0x0c, 0xaf, 0x28, 0x6a, 0x36,
+ 0x21, 0x45, 0x79, 0x56, 0xa5, 0x82, 0x35, 0x29, 0xcd, 0x26, 0x62, 0x19, 0xea, 0xd9, 0x9e, 0xf0,
+ 0xe8, 0x79, 0x41, 0xe3, 0x30, 0xb0, 0x9f, 0x98, 0x62, 0x14, 0x42, 0xac, 0xae, 0xcb, 0x2c, 0x80,
+ 0x03, 0x4d, 0xc6, 0x85, 0x7e, 0x22, 0xbc, 0xc7, 0x31, 0x3b, 0x9d, 0x8c, 0x77, 0x57, 0xfd, 0x35,
+ 0x90, 0x1b, 0x60, 0x3d, 0xfe, 0x93, 0x7c, 0x4e, 0xa1, 0x4c, 0x51, 0x63, 0x62, 0xfa, 0x61, 0xd9,
+ 0x1c, 0x97, 0xeb, 0x68, 0xbd, 0xee, 0xed, 0xf6, 0x65, 0x25, 0xe8, 0x1d, 0x10, 0xcf, 0x6b, 0x7f,
+ 0xe1, 0x5d, 0x11, 0xbe, 0x2b, 0x6f, 0x68, 0x25, 0xff, 0x96, 0xfd, 0xc5, 0xec, 0xe0, 0x03, 0x80,
+ 0x29, 0x65, 0x76, 0x5b, 0x0e, 0x7c, 0x02, 0x59, 0xee, 0xa0, 0x81
};
-static const zlib_struct compr_struct = { 566, 260, compr };
+static const zlib_struct compr_struct = { 554, 251, compr };
const zlib_struct *pdflua_zlib_struct_ptr = &compr_struct;
diff --git a/Build/source/texk/web2c/luatexdir/luascripts/pdflua.lua b/Build/source/texk/web2c/luatexdir/luascripts/pdflua.lua
index dbb960fa6a4..a72b1a48256 100644
--- a/Build/source/texk/web2c/luatexdir/luascripts/pdflua.lua
+++ b/Build/source/texk/web2c/luatexdir/luascripts/pdflua.lua
@@ -1,5 +1,5 @@
-- $Id: pdflua.lua 3949 2010-11-07 00:09:19Z hhenkel $
--- $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/luascripts/pdflua.lua $
+-- $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luascripts/pdflua.lua $
-- this is early work in progress...
diff --git a/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w b/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w
index b642b182467..fbd8cdda34c 100644
--- a/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w
+++ b/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w
@@ -19,7 +19,7 @@
% with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
%
% $Id: txt2zlib.w 4479 2012-11-07 16:38:55Z taco $
-% $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/luascripts/txt2zlib.w $
+% $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luascripts/txt2zlib.w $
@
@c
diff --git a/Build/source/texk/web2c/luatexdir/luatex.c b/Build/source/texk/web2c/luatexdir/luatex.c
index c5b1ee034b1..43e056f68aa 100644
--- a/Build/source/texk/web2c/luatexdir/luatex.c
+++ b/Build/source/texk/web2c/luatexdir/luatex.c
@@ -24,16 +24,16 @@
#include "luatex_svnversion.h"
static const char _svn_version[] =
- "$Id: luatex.c 4969 2014-03-29 08:47:58Z taco $ "
- "$URL: https://foundry.supelec.fr/svn/luatex/tags/beta-0.79.1/source/texk/web2c/luatexdir/luatex.c $";
+ "$Id: luatex.c 5082 2014-11-11 09:58:10Z luigi $ "
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luatex.c $";
#define TeX
int luatex_svn = luatex_svn_revision;
int luatex_version = 79; /* \.{\\luatexversion} */
-int luatex_revision = '1'; /* \.{\\luatexrevision} */
-int luatex_date_info = 2014040100; /* the compile date is now hardwired */
-const char *luatex_version_string = "beta-0.79.1";
+int luatex_revision = '2'; /* \.{\\luatexrevision} */
+int luatex_date_info = 2014111100; /* the compile date is now hardwired */
+const char *luatex_version_string = "beta-0.79.2";
const char *engine_name = my_name; /* the name of this engine */
#include <kpathsea/c-ctype.h>
diff --git a/Build/source/texk/web2c/luatexdir/luatex.h b/Build/source/texk/web2c/luatexdir/luatex.h
index f0cf9207af1..515d8b90d75 100644
--- a/Build/source/texk/web2c/luatexdir/luatex.h
+++ b/Build/source/texk/web2c/luatexdir/luatex.h
@@ -18,7 +18,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: luatex.h 4718 2014-01-02 15:35:31Z taco $ */
+/* $Id: luatex.h 5081 2014-11-07 18:38:33Z luigi $ */
#ifndef LUATEX_H
# define LUATEX_H
diff --git a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
index 5617183ee9d..bef33fd6cda 100644
--- a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
+++ b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
@@ -1 +1 @@
-#define luatex_svn_revision 4971
+#define luatex_svn_revision -1
diff --git a/Build/source/texk/web2c/luatexdir/luatexcallbackids.h b/Build/source/texk/web2c/luatexdir/luatexcallbackids.h
index c05e4f6024e..e4d66953440 100644
--- a/Build/source/texk/web2c/luatexdir/luatexcallbackids.h
+++ b/Build/source/texk/web2c/luatexdir/luatexcallbackids.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: luatexcallbackids.h 4956 2014-03-28 12:12:17Z luigi $ */
+/* $Id: luatexcallbackids.h 5081 2014-11-07 18:38:33Z luigi $ */
#ifndef LUATEXCALLBACKIDS_H
#define LUATEXCALLBACKIDS_H
@@ -62,6 +62,7 @@ typedef enum {
pre_dump_callback,
start_file_callback, stop_file_callback,
show_error_message_callback,show_lua_error_hook_callback,
+ pdf_stream_filter_callback,
total_callbacks
} callback_callback_types;
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfaction.w b/Build/source/texk/web2c/luatexdir/pdf/pdfaction.w
index 9bc503a8ec8..4bea1ebd3cd 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfaction.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfaction.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfaction.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfaction.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfaction.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfannot.w b/Build/source/texk/web2c/luatexdir/pdf/pdfannot.w
index 88f548de3eb..30775fa5fa2 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfannot.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfannot.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfannot.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfannot.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfannot.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h
index 225ac6045e7..c6a1256e05d 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfgen.h 4956 2014-03-28 12:12:17Z luigi $ */
+/* $Id: pdfgen.h 5081 2014-11-07 18:38:33Z luigi $ */
#ifndef PDFGEN_H
# define PDFGEN_H
@@ -197,6 +197,7 @@ extern char *get_resname_prefix(PDF);
extern void pdf_begin_page(PDF pdf);
extern void pdf_end_page(PDF pdf);
extern void print_pdf_table_string(PDF pdf, const char *s);
+extern const char *get_pdf_table_string(const char *s);
extern int get_pdf_table_bool(PDF, const char *, int);
extern void fix_o_mode(PDF pdf);
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w
index 78873c7b5d5..35ce3307cc0 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w
@@ -19,8 +19,8 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfgen.w 4967 2014-03-28 19:44:06Z luigi $"
- "$URL: https://foundry.supelec.fr/svn/luatex/tags/beta-0.79.1/source/texk/web2c/luatexdir/pdf/pdfgen.w $";
+ "$Id: pdfgen.w 5081 2014-11-07 18:38:33Z luigi $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfgen.w $";
#include "ptexlib.h"
@@ -155,8 +155,10 @@ PDF init_pdf_struct(PDF pdf)
os->curbuf = PDFOUT_BUF;
pdf->buf = os->buf[os->curbuf];
-
- pdf->fb = new_strbuf(1, 100000000);
+
+ /* Later ttf_seek_outbuf(TABDIR_OFF + n * 4 * TTF_ULONG_SIZE) */
+ /* in ttf_init_font will need 236 bytes, so we start with 256 bytes as in pdftex. */
+ pdf->fb = new_strbuf(256, 100000000);
pdf->stream_deflate = false;
pdf->stream_writing = false;
@@ -235,9 +237,12 @@ static output_mode get_o_mode(void)
{
output_mode o_mode;
if (pdf_output > 0) {
+ /* ls-hh: for the moment disabled ... incomplete old experiment */
+ /*
if (pdf_output == 2009)
o_mode = OMODE_LUA;
else
+ */
o_mode = OMODE_PDF;
} else
o_mode = OMODE_DVI;
@@ -616,7 +621,7 @@ void pdf_print_str(PDF pdf, const char *s)
return;
}
s++;
- while (is_hex_char((unsigned char)*s))
+ while (is_hex_char(*s))
s++;
if (s != orig + l) {
pdf_out(pdf, '(');
@@ -639,7 +644,9 @@ void pdf_begin_stream(PDF pdf)
pdf_puts(pdf, "\nstream\n");
pdf_save_offset(pdf);
pdf_flush(pdf);
- if (os->trigger_luastm) {
+
+ if (callback_defined(pdf_stream_filter_callback)) {
+ /*if (os->trigger_luastm) {*/
os->trigger_luastm = false; /* this was just a trigger */
luaL_buffinit(Luas, &(os->b));
lbuf->p = lbuf->data = (unsigned char *) luaL_prepbuffer(&(os->b));
@@ -660,9 +667,20 @@ void pdf_begin_stream(PDF pdf)
@c
void pdf_end_stream(PDF pdf)
{
+ typedef struct strbuf_const_s_ {
+ unsigned const char *data; /* a PDF stream buffer */
+ unsigned const char *p; /* pointer to the next character in the PDF stream buffer */
+ size_t size; /* currently allocated size of the PDF stream buffer, grows dynamically */
+ size_t limit; /* maximum allowed PDF stream buffer size */
+ } strbuf_const_s;
+
+
os_struct *os = pdf->os;
- strbuf_s *lbuf = os->buf[LUASTM_BUF];
+ /* Old code, */
+ /* strbuf_s *lbuf = os->buf[LUASTM_BUF]; */
+ strbuf_const_s *lbuf = (strbuf_const_s * )os->buf[LUASTM_BUF];
const_lstring ls;
+ int callback_id ;
assert(pdf->buf == os->buf[os->curbuf]);
switch (os->curbuf) {
case PDFOUT_BUF:
@@ -673,12 +691,17 @@ void pdf_end_stream(PDF pdf)
case LUASTM_BUF:
luaL_addsize(&(os->b), strbuf_offset(os->buf[LUASTM_BUF]));
luaL_pushresult(&(os->b));
-
/* now the complete page stream is on the Lua stack */
/* TODO: pagestream filter callback here */
+ callback_id = callback_defined(pdf_stream_filter_callback);
+ if (callback_id > 0) {
+ run_callback(callback_id, "S->S");
+ }
+
ls.s = lua_tolstring(Luas, -1, &ls.l);
- lbuf->data = (unsigned char *) ls.s;
+ /* lbuf->data = (unsigned char *) ls.s; */
+ lbuf->data = (unsigned const char *) ls.s;
lbuf->p = lbuf->data + ls.l;
os->curbuf = LUASTM_BUF;
pdf->buf = os->buf[os->curbuf];
@@ -751,17 +774,19 @@ for optimizations that are not possible in pascal.
@c
scaled round_xn_over_d(scaled x, int n, unsigned int d)
{
- boolean positive; /* was |x>=0|? */
+ boolean positive = true; /* was |x>=0|, |n>=0| ? */
unsigned t, u, v; /* intermediate quantities */
- if (x >= 0) {
- positive = true;
- } else {
+ if (x < 0) {
+ positive = !positive;
x = -(x);
- positive = false;
}
- t = (unsigned) ((x % 0100000) * n);//printf("t=%d\n",t);
- u = (unsigned) (((unsigned) (x) / 0100000) * (unsigned) n + (t / 0100000));//printf("u=%d\n",u);
- v = (u % d) * 0100000 + (t % 0100000);//printf("v=%d\n",v);
+ if (n < 0) {
+ positive = !positive;
+ n = -(n);
+ }
+ t = (unsigned) ((x % 0100000) * n);
+ u = (unsigned) (((unsigned) (x) / 0100000) * (unsigned) n + (t / 0100000));
+ v = (u % d) * 0100000 + (t % 0100000);
if (u / d >= 0100000)
arith_error = true;
else
@@ -1901,7 +1926,7 @@ void print_pdf_table_string(PDF pdf, const char *s)
}
@ @c
-static const char *get_pdf_table_string(const char *s)
+const char *get_pdf_table_string(const char *s)
{
const_lstring ls;
lua_rawgeti(Luas, LUA_REGISTRYINDEX, lua_key_index(pdf_data));
@@ -1910,8 +1935,10 @@ static const char *get_pdf_table_string(const char *s)
lua_rawget(Luas, -2); /* s? t ... */
if (lua_isstring(Luas, -1)) { /* s t ... */
ls.s = lua_tolstring(Luas, -1, &ls.l);
+ /* s is supposed to be anchored (e.g in the registry)
+ so it's not garbage collected */
lua_pop(Luas, 2); /* ... */
- return ls.s;
+ return ls.s;
}
lua_pop(Luas, 2); /* ... */
return NULL ;
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.h b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.h
index 563a59847bc..b8ca8d97952 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfglyph.h 4679 2013-12-19 15:47:53Z luigi $ */
+/* $Id: pdfglyph.h 5073 2014-10-24 16:54:52Z oneiros $ */
#ifndef PDFGLYPH_H
# define PDFGLYPH_H
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w
index c9fa5775198..84b2df14d37 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfglyph.w 4718 2014-01-02 15:35:31Z taco $"
+ "$Id: pdfglyph.w 5073 2014-10-24 16:54:52Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfglyph.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdflink.w b/Build/source/texk/web2c/luatexdir/pdf/pdflink.w
index 73ce55d8e3d..400cd9bcf4a 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdflink.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdflink.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdflink.w 4451 2012-07-05 21:13:01Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdflink.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdflink.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
index e4aba134dda..7ad2065dc3a 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfliteral.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfliteral.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfliteral.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.h b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.h
index 69ddf3406ca..b698ab86081 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfluaapi.h 3949 2010-11-07 00:09:19Z hhenkel $ */
+/* $Id: pdfluaapi.h 5072 2014-10-24 16:53:43Z oneiros $ */
#ifndef PDFLUAAPI_H
# define PDFLUAAPI_H
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w
index a32d20490fd..fa0f4189160 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfluaapi.w 4847 2014-03-05 18:13:17Z luigi $"
+ "$Id: pdfluaapi.w 5072 2014-10-24 16:53:43Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfluaapi.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfoutline.w b/Build/source/texk/web2c/luatexdir/pdf/pdfoutline.w
index a54cd563301..130d9720800 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfoutline.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfoutline.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfoutline.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfoutline.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfoutline.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
index a4fe0f53ba0..f742eff2fb1 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfpage.h 4313 2011-06-21 18:31:19Z hhenkel $ */
+/* $Id: pdfpage.h 5073 2014-10-24 16:54:52Z oneiros $ */
#ifndef PDFPAGE_H
# define PDFPAGE_H
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
index e089a8ed83c..c53db084423 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfpage.w 4718 2014-01-02 15:35:31Z taco $"
+ "$Id: pdfpage.w 5073 2014-10-24 16:54:52Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfpage.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.h b/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.h
index 13185874ca0..fdd7841d5da 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfpagetree.h 4214 2011-04-27 21:53:38Z hhenkel $ */
+/* $Id: pdfpagetree.h 5073 2014-10-24 16:54:52Z oneiros $ */
#ifndef PAGETREE_H
# define PAGETREE_H
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.w b/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.w
index d35d91578d9..1e2716bb0a7 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpagetree.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfpagetree.w 4957 2014-03-28 13:14:51Z taco $"
+ "$Id: pdfpagetree.w 5073 2014-10-24 16:54:52Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfpagetree.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfrule.h b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.h
index d1d13b77f00..aa5cc9b0e7f 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfrule.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: pdfrule.h 3003 2009-08-16 19:55:55Z hhenkel $ */
+/* $Id: pdfrule.h 5073 2014-10-24 16:54:52Z oneiros $ */
#ifndef PDFRULE_H
# define PDFRULE_H
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w
index a7ed050a644..a4665e951f8 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfrule.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: pdfrule.w 4718 2014-01-02 15:35:31Z taco $"
+ "$Id: pdfrule.w 5073 2014-10-24 16:54:52Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfrule.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfshipout.w b/Build/source/texk/web2c/luatexdir/pdf/pdfshipout.w
index 61342ed7786..f007a236c5b 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfshipout.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfshipout.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfshipout.w 4451 2012-07-05 21:13:01Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfshipout.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfshipout.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfthread.w b/Build/source/texk/web2c/luatexdir/pdf/pdfthread.w
index 5855647cddc..f2c8784f7f9 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfthread.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfthread.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfthread.w 4451 2012-07-05 21:13:01Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfthread.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfthread.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w
index 17d7291f950..edf3d2ac4e4 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: pdfxform.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfxform.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfxform.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/align.w b/Build/source/texk/web2c/luatexdir/tex/align.w
index de80cc0a093..1e5c48cc0c4 100644
--- a/Build/source/texk/web2c/luatexdir/tex/align.w
+++ b/Build/source/texk/web2c/luatexdir/tex/align.w
@@ -21,7 +21,7 @@
@ @c
static const char _svn_version[] =
- "$Id: align.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: align.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/align.w $";
#include "ptexlib.h"
@@ -1135,6 +1135,7 @@ value is changed to zero and so is the next tabskip.
if (cur_list.mode_field == mmode) {
finish_display_alignment(p, q, pd);
} else {
+ cur_list.prev_depth_field = pd; /* aux:=aux_save; */
vlink(cur_list.tail_field) = p;
if (p != null)
cur_list.tail_field = q;
diff --git a/Build/source/texk/web2c/luatexdir/tex/arithmetic.w b/Build/source/texk/web2c/luatexdir/tex/arithmetic.w
index 1c84167ced5..5606aa641ec 100644
--- a/Build/source/texk/web2c/luatexdir/tex/arithmetic.w
+++ b/Build/source/texk/web2c/luatexdir/tex/arithmetic.w
@@ -21,8 +21,8 @@
@ @c
static const char _svn_version[] =
- "$Id: arithmetic.w 4634 2013-04-21 14:45:45Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/arithmetic.w $";
+ "$Id: arithmetic.w 4593 2013-03-19 14:25:17Z taco $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/arithmetic.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/conditional.w b/Build/source/texk/web2c/luatexdir/tex/conditional.w
index bcea19201a2..16092a491da 100644
--- a/Build/source/texk/web2c/luatexdir/tex/conditional.w
+++ b/Build/source/texk/web2c/luatexdir/tex/conditional.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: conditional.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/conditional.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/conditional.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/dumpdata.w b/Build/source/texk/web2c/luatexdir/tex/dumpdata.w
index 718d6b7fb17..46913bce3a8 100644
--- a/Build/source/texk/web2c/luatexdir/tex/dumpdata.w
+++ b/Build/source/texk/web2c/luatexdir/tex/dumpdata.w
@@ -19,14 +19,21 @@
@ @c
static const char _svn_version[] =
- "$Id: dumpdata.w 4563 2013-01-21 03:22:53Z khaled $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/dumpdata.w $";
+ "$Id: dumpdata.w 5081 2014-11-07 18:38:33Z luigi $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/dumpdata.w $";
#include "ptexlib.h"
#define font_id_text(A) cs_text(font_id_base+(A))
#define prev_depth cur_list.prev_depth_field
+/* 907 = sum of the values of the bytes of "don knuth" */
+/* The next FORMAT_ID will be 907+1 */
+#define FORMAT_ID (907+0)
+#if ((FORMAT_ID>=0) && (FORMAT_ID<=256))
+#error Wrong value for FORMAT_ID.
+#endif
+
@ After \.{INITEX} has seen a collection of fonts and macros, it
can write all the necessary information on an auxiliary file so
@@ -42,8 +49,10 @@ after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this
string says simply `\.{(INITEX)}'; for other versions of \TeX\ it says,
for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
month, and day that the format file was created. We have |format_ident=0|
-before \TeX's tables are loaded.
-
+before \TeX's tables are loaded. |FORMAT_ID| is a new field of type int
+suitable for the identification of a format: values between 0 and 256
+(included) can not be used because in the previous format they are used
+for the length of the name of the engine.
@c
str_number format_ident;
str_number format_name; /* principal file name */
@@ -114,6 +123,8 @@ void store_fmt_file(void)
dump/undump macros. */
dump_int(0x57325458); /* Web2C \TeX's magic constant: "W2TX" */
+ dump_int(FORMAT_ID);
+
/* Align engine to 4 bytes with one or more trailing NUL */
x = (int) strlen(engine_name);
format_engine = xmalloc((unsigned) (x + 4));
@@ -368,11 +379,17 @@ boolean load_fmt_file(const char *fmtname)
format_debug("format magic number", x);
if (x != 0x57325458)
goto BAD_FMT; /* not a format file */
+
+ undump_int(x);
+ format_debug("format id", x);
+ if (x != FORMAT_ID)
+ goto BAD_FMT; /* FORMAT_ID mismatch */
+
undump_int(x);
format_debug("engine name size", x);
if ((x < 0) || (x > 256))
goto BAD_FMT; /* corrupted format file */
-
+
format_engine = xmalloc((unsigned) x);
undump_things(format_engine[0], x);
format_engine[x - 1] = 0; /* force string termination, just in case */
diff --git a/Build/source/texk/web2c/luatexdir/tex/equivalents.w b/Build/source/texk/web2c/luatexdir/tex/equivalents.w
index 74465213702..3c948634f98 100644
--- a/Build/source/texk/web2c/luatexdir/tex/equivalents.w
+++ b/Build/source/texk/web2c/luatexdir/tex/equivalents.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: equivalents.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/equivalents.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/equivalents.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/errors.h b/Build/source/texk/web2c/luatexdir/tex/errors.h
index e0ea6e671ad..537bea562da 100644
--- a/Build/source/texk/web2c/luatexdir/tex/errors.h
+++ b/Build/source/texk/web2c/luatexdir/tex/errors.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: errors.h 4956 2014-03-28 12:12:17Z luigi $ */
+/* $Id: errors.h 5081 2014-11-07 18:38:33Z luigi $ */
#ifndef ERRORS_H
# define ERRORS_H
@@ -97,6 +97,7 @@ extern void tex_error(const char *msg, const char **hlp);
extern void back_error(void);
extern void ins_error(void);
+extern void flush_err(void);
extern void char_warning(internal_font_number f, int c);
diff --git a/Build/source/texk/web2c/luatexdir/tex/errors.w b/Build/source/texk/web2c/luatexdir/tex/errors.w
index 120d44b8a3c..eab33d9c809 100644
--- a/Build/source/texk/web2c/luatexdir/tex/errors.w
+++ b/Build/source/texk/web2c/luatexdir/tex/errors.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: errors.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: errors.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/errors.w $";
#include "ptexlib.h"
@@ -60,7 +60,7 @@ char *last_error = NULL;
int err_old_setting = 0 ;
int in_error = 0 ;
-static void flush_err(void)
+void flush_err(void)
{
str_number s_error;
char *s = NULL;
diff --git a/Build/source/texk/web2c/luatexdir/tex/expand.w b/Build/source/texk/web2c/luatexdir/tex/expand.w
index 60e1e05686c..d00d84e128d 100644
--- a/Build/source/texk/web2c/luatexdir/tex/expand.w
+++ b/Build/source/texk/web2c/luatexdir/tex/expand.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: expand.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/expand.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/expand.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/extensions.w b/Build/source/texk/web2c/luatexdir/tex/extensions.w
index 99d6b77697b..41f709d3e29 100644
--- a/Build/source/texk/web2c/luatexdir/tex/extensions.w
+++ b/Build/source/texk/web2c/luatexdir/tex/extensions.w
@@ -23,7 +23,7 @@
@ @c
static const char _svn_version[] =
"$Id: extensions.w 4519 2012-12-14 09:11:19Z taco $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/extensions.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/extensions.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/filename.w b/Build/source/texk/web2c/luatexdir/tex/filename.w
index 697f413f2fa..95a94a75074 100644
--- a/Build/source/texk/web2c/luatexdir/tex/filename.w
+++ b/Build/source/texk/web2c/luatexdir/tex/filename.w
@@ -19,8 +19,8 @@
@ @c
static const char _svn_version[] =
- "$Id: filename.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/filename.w $";
+ "$Id: filename.w 5081 2014-11-07 18:38:33Z luigi $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/filename.w $";
#include "ptexlib.h"
@@ -236,6 +236,7 @@ char *prompt_file_name(const char *s, const char *e)
{
int k; /* index into |buffer| */
str_number saved_cur_name; /* to catch empty terminal input */
+ int callback_id ;
char prompt[256];
char *ar, *na, *ex;
saved_cur_name = cur_name;
@@ -254,10 +255,16 @@ char *prompt_file_name(const char *s, const char *e)
free(na);
free(ex);
print_err(prompt);
- if ((strcmp(e, ".tex") == 0) || (strcmp(e, "") == 0))
- show_context();
- if (strcmp(s, "input file name") == 0)
- tprint_nl(promptfilenamehelpmsg ")");
+ callback_id = callback_defined(show_error_hook_callback);
+ if (callback_id > 0) {
+ flush_err();
+ run_callback(callback_id, "->");
+ } else {
+ if ((strcmp(e, ".tex") == 0) || (strcmp(e, "") == 0))
+ show_context();
+ if (strcmp(s, "input file name") == 0)
+ tprint_nl(promptfilenamehelpmsg ")");
+ }
tprint_nl("Please type another ");
tprint(s);
if (interaction < scroll_mode)
@@ -283,6 +290,7 @@ char *prompt_file_name(const char *s, const char *e)
return pack_file_name(cur_name, cur_area, cur_ext);
}
+
@ @c
void tprint_file_name(unsigned char *n, unsigned char *a, unsigned char *e)
{
diff --git a/Build/source/texk/web2c/luatexdir/tex/inputstack.w b/Build/source/texk/web2c/luatexdir/tex/inputstack.w
index 136d9507c03..2fc5628e251 100644
--- a/Build/source/texk/web2c/luatexdir/tex/inputstack.w
+++ b/Build/source/texk/web2c/luatexdir/tex/inputstack.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: inputstack.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/inputstack.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/inputstack.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/linebreak.w b/Build/source/texk/web2c/luatexdir/tex/linebreak.w
index 646676bcfa2..fd486c3367e 100644
--- a/Build/source/texk/web2c/luatexdir/tex/linebreak.w
+++ b/Build/source/texk/web2c/luatexdir/tex/linebreak.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: linebreak.w 4775 2014-02-07 12:36:34Z luigi $"
+ "$Id: linebreak.w 4777 2014-02-10 10:09:39Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/linebreak.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/maincontrol.w b/Build/source/texk/web2c/luatexdir/tex/maincontrol.w
index 5ee630dc24d..05b842217a5 100644
--- a/Build/source/texk/web2c/luatexdir/tex/maincontrol.w
+++ b/Build/source/texk/web2c/luatexdir/tex/maincontrol.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: maincontrol.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: maincontrol.w 5011 2014-05-26 08:05:55Z khaled $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/maincontrol.w $";
#include "ptexlib.h"
@@ -2798,19 +2798,15 @@ void assign_internal_value(int a, halfword p, int val)
if (val > 127) {
print_err("Invalid \\newlinechar");
help2
- ("The value for \\newlinechar has to be between 0 and 127.",
+ ("The value for \\newlinechar has to be no higher than 127.",
"Your invalid assignment will be ignored.");
error();
- } else if (val < 0) {
- word_define(p, -1);
} else {
word_define(p, val);
}
break;
case end_line_char_code:
- if (val < 0) {
- word_define(p, -1);
- } else if (val > 127) {
+ if (val > 127) {
print_err("Invalid \\endlinechar");
help2
("The value for \\endlinechar has to be no higher than 127.",
diff --git a/Build/source/texk/web2c/luatexdir/tex/mathcodes.w b/Build/source/texk/web2c/luatexdir/tex/mathcodes.w
index 1603365bc2c..7092dace012 100644
--- a/Build/source/texk/web2c/luatexdir/tex/mathcodes.w
+++ b/Build/source/texk/web2c/luatexdir/tex/mathcodes.w
@@ -21,7 +21,7 @@
@ @c
static const char _svn_version[] =
"$Id: mathcodes.w 4562 2013-01-21 02:58:59Z khaled $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/mathcodes.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/mathcodes.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/memoryword.h b/Build/source/texk/web2c/luatexdir/tex/memoryword.h
index 8c44a7e4e0d..6f9cfa393b1 100644
--- a/Build/source/texk/web2c/luatexdir/tex/memoryword.h
+++ b/Build/source/texk/web2c/luatexdir/tex/memoryword.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: memoryword.h 3352 2010-01-10 15:35:31Z hhenkel $ */
+/* $Id: memoryword.h 5031 2014-07-04 07:16:27Z luigi $ */
/* This header file is extra special because it is read in from
within the pascal source */
@@ -123,7 +123,7 @@ typedef union {
typedef FILE *word_file;
# ifdef DEBUG
-extern procedure print_word(memory_word w);
+extern void print_word(memory_word w);
# endif
#endif
diff --git a/Build/source/texk/web2c/luatexdir/tex/memoryword.w b/Build/source/texk/web2c/luatexdir/tex/memoryword.w
index 339e094bb2c..d3002f1b2b6 100644
--- a/Build/source/texk/web2c/luatexdir/tex/memoryword.w
+++ b/Build/source/texk/web2c/luatexdir/tex/memoryword.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: memoryword.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/memoryword.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/memoryword.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/mlist.w b/Build/source/texk/web2c/luatexdir/tex/mlist.w
index 3621d9f64b6..e653c07c6f0 100644
--- a/Build/source/texk/web2c/luatexdir/tex/mlist.w
+++ b/Build/source/texk/web2c/luatexdir/tex/mlist.w
@@ -24,7 +24,7 @@
@ @c
static const char _svn_version[] =
- "$Id: mlist.w 4804 2014-02-12 14:41:14Z luigi $"
+ "$Id: mlist.w 5033 2014-07-05 00:36:59Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/mlist.w $";
#include "ptexlib.h"
@@ -1021,6 +1021,7 @@ try_couple_nodes(p,list_ptr(b));
}
}
+
static void stack_glue_into_box(pointer b, scaled min, scaled max) {
pointer p, q; /* new node placed into |b| */
q = new_spec(zero_glue);
@@ -1029,10 +1030,8 @@ static void stack_glue_into_box(pointer b, scaled min, scaled max) {
p = new_glue(q);
reset_attributes(p, node_attr(b));
if (type(b) == vlist_node) {
-// vlink(p) = list_ptr(b);
-try_couple_nodes(p,list_ptr(b));
+ try_couple_nodes(p,list_ptr(b));
list_ptr(b) = p;
- height(b) = height(p);
} else {
q = list_ptr(b);
if (q == null) {
@@ -1042,10 +1041,6 @@ try_couple_nodes(p,list_ptr(b));
q = vlink(q);
couple_nodes(q,p);
}
- if (height(b) < height(p))
- height(b) = height(p);
- if (depth(b) < depth(p))
- depth(b) = depth(p);
}
}
@@ -2539,7 +2534,7 @@ static void make_ord(pointer q)
type(nucleus(r)) = math_text_char_node; /* prevent combination */
break;
default:
- couple_nodes(q,vlink(p));
+ try_couple_nodes(q,vlink(p));
math_character(nucleus(q)) = lig_replacement(lig); /* \.{=:} */
s = math_clone(subscr(p));
subscr(q) = s;
diff --git a/Build/source/texk/web2c/luatexdir/tex/nesting.w b/Build/source/texk/web2c/luatexdir/tex/nesting.w
index aa0f32e3324..177901166f4 100644
--- a/Build/source/texk/web2c/luatexdir/tex/nesting.w
+++ b/Build/source/texk/web2c/luatexdir/tex/nesting.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: nesting.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/nesting.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/nesting.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/packaging.w b/Build/source/texk/web2c/luatexdir/tex/packaging.w
index d6d02106022..42a87f1ee0d 100644
--- a/Build/source/texk/web2c/luatexdir/tex/packaging.w
+++ b/Build/source/texk/web2c/luatexdir/tex/packaging.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: packaging.w 4679 2013-12-19 15:47:53Z luigi $"
+ "$Id: packaging.w 5023 2014-06-18 08:22:44Z taco $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/packaging.w $";
#include "ptexlib.h"
@@ -1216,10 +1216,14 @@ void package(int c)
halfword p; /* first node in a box */
scaled d; /* max depth */
int grp;
+ halfword saved0, saved2, saved3;
grp = cur_group;
d = box_max_depth;
unsave();
save_ptr -= 4;
+ saved0 = saved_value(0);
+ saved2 = saved_value(2);
+ saved3 = saved_value(3);
if (cur_list.mode_field == -hmode) {
cur_box = filtered_hpack(cur_list.head_field,
cur_list.tail_field, saved_value(1),
@@ -1246,15 +1250,15 @@ void package(int c)
}
}
- if (saved_value(2) != null) {
+ if (saved2 != null) {
/* DIR: Adjust back |text_dir_ptr| for |scan_spec| */
flush_node_list(text_dir_ptr);
- text_dir_ptr = saved_value(2);
+ text_dir_ptr = saved2;
}
- replace_attribute_list(cur_box, saved_value(3));
+ replace_attribute_list(cur_box, saved3);
pop_nest();
- box_end(saved_value(0));
+ box_end(saved0);
}
diff --git a/Build/source/texk/web2c/luatexdir/tex/postlinebreak.w b/Build/source/texk/web2c/luatexdir/tex/postlinebreak.w
index ef769f7a357..d7990ca52c0 100644
--- a/Build/source/texk/web2c/luatexdir/tex/postlinebreak.w
+++ b/Build/source/texk/web2c/luatexdir/tex/postlinebreak.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: postlinebreak.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: postlinebreak.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/postlinebreak.w $";
#include "ptexlib.h"
@@ -98,7 +98,7 @@ void ext_post_line_break(int paragraph_dir,
halfword cur_line; /*the current line number being justified */
dir_ptr = cur_list.dirs_field;
- /* Reverse the links of the relevant passive nodes, setting |cur_p| to
+ /* Reverse the links of the relevant passive nodes, setting |cur_p| to
the first breakpoint; */
/* The job of reversing links in a list is conveniently regarded as the job
of taking items off one stack and putting them on another. In this case we
@@ -108,7 +108,7 @@ void ext_post_line_break(int paragraph_dir,
*/
q = break_node(best_bet);
#if 0
- used_discs = used_disc(best_bet);
+ used_discs = used_disc(best_bet);
#endif
/* |has_direction| */
cur_p = null;
@@ -530,17 +530,78 @@ void ext_post_line_break(int paragraph_dir,
|break_width| values are computed for non-discretionary
breakpoints. */
r = temp_head;
- while (1) {
- q = vlink(r);
- if (q == cur_break(cur_p) || is_char_node(q))
- break;
- if (!((type(q) == whatsit_node)
- && (subtype(q) == local_par_node))) {
- if (non_discardable(q)
- || (type(q) == kern_node && subtype(q) != explicit))
+ if (experimental_code[1]) {
+ /* hh-ls: This is a first step to improving symmetry and consistency in the node
+ list. This is normally no issue in tex, but in callbacks it matters. */
+
+ /* Normally we have a matching math open and math close node but when we cross a line
+ the open node is removed, including any glue or penalties following it. This is however
+ not that nice for callbacks that rely on symmetry. Of course this only counts for one
+ liners, as we can still have only a begin or end node on a line. The end_of_math lua
+ helper is made robust against this although there you should be aware of the fact that
+ one can end up in the middle of math in callbacks that don't work on whole paragraphs,
+ but at least this branch makes sure that some proper analysis is possible. (todo: check
+ if math glyphs have the subtype marked done). */
+
+ halfword m = null ;
+ halfword mp, mn, rn ;
+ while (1) {
+ q = vlink(r);
+ if (! q) {
+ /* unlikely */
break;
+ } else if (q == cur_break(cur_p)) {
+ /* quit */
+ break;
+ } else if (type(q) == glyph_node) {
+ /* quit: is > math_code */
+ break;
+ } else if (type(q) == math_node) {
+ /* we want to keep symmetry */
+ surround(q) = 0 ;
+ // fprintf(stdout,"KEEP MATH NODE\n");
+ m = q ;
+ } else if (type(q) == kern_node && subtype(q) != explicit) {
+ /* quit: so we keep \kern but also auto kerns */
+ break;
+ } if (non_discardable(q)) {
+ /* quit: < math_node */
+ break;
+ } else {
+ /* skip: glue, penalty, (font)kern, noads, temp stuff, all kind of left-overs */
+ }
+ r = q;
+ }
+ if (m != null) {
+ if (r == m) {
+ /* [a] [b] [m=r] => [a] [b=r] */
+ r = alink(m) ;
+ } else {
+ /* [a] [b] [m] [c] [r] [rn] => [a] [b] [c] [r] [m] [rn] */
+ mp = alink(m) ;
+ mn = vlink(m) ;
+ rn = vlink(r) ;
+ vlink(r) = m ;
+ alink(m) = r ;
+ if (rn) {
+ alink(rn) = m ;
+ vlink(m) = rn ;
+ }
+ vlink(mp) = mn ;
+ alink(mn) = mp ;
+ }
+ }
+ } else {
+ while (1) {
+ q = vlink(r);
+ if (q == cur_break(cur_p) || is_char_node(q))
+ break;
+ if (!((type(q) == whatsit_node) && (subtype(q) == local_par_node))) {
+ if (non_discardable(q) || (type(q) == kern_node && subtype(q) != explicit))
+ break;
+ }
+ r = q;
}
- r = q;
}
if (r != temp_head) {
vlink(r) = null;
diff --git a/Build/source/texk/web2c/luatexdir/tex/primitive.w b/Build/source/texk/web2c/luatexdir/tex/primitive.w
index ab983cfe346..e02ae1a7735 100644
--- a/Build/source/texk/web2c/luatexdir/tex/primitive.w
+++ b/Build/source/texk/web2c/luatexdir/tex/primitive.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: primitive.w 4562 2013-01-21 02:58:59Z khaled $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/primitive.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/primitive.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.h b/Build/source/texk/web2c/luatexdir/tex/printing.h
index e664c51d720..057ed422b95 100644
--- a/Build/source/texk/web2c/luatexdir/tex/printing.h
+++ b/Build/source/texk/web2c/luatexdir/tex/printing.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: printing.h 4722 2014-01-03 09:32:35Z taco $ */
+/* $Id: printing.h 5002 2014-05-20 09:14:16Z taco $ */
#ifndef PRINTING_H
# define PRINTING_H
@@ -60,6 +60,7 @@ by changing |wterm|, |wterm_ln|, and |wterm_cr| in this section.
extern void print_ln(void);
extern void print_char(int s);
extern void print(int s);
+extern void lprint (lstring *ss);
extern void print_nl(str_number s);
extern void print_nlp(void);
extern void print_banner(const char *, int);
diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.w b/Build/source/texk/web2c/luatexdir/tex/printing.w
index 9b2404c0196..ce64d1e829c 100644
--- a/Build/source/texk/web2c/luatexdir/tex/printing.w
+++ b/Build/source/texk/web2c/luatexdir/tex/printing.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: printing.w 4857 2014-03-07 00:01:41Z luigi $"
+ "$Id: printing.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/printing.w $";
#include "ptexlib.h"
@@ -226,8 +226,6 @@ to do the same substraction while typesetting.
@c
void print(int s)
{ /* prints string |s| */
- unsigned char *j, *l; /* current character code position */
-
if (s >= str_ptr) {
/* this can't happen */
print_char('?');
@@ -285,8 +283,13 @@ void print(int s)
append_string(str_string(s), (unsigned) str_length(s));
return;
}
- j = str_string(s);
- l = j + str_length(s);
+ lprint(&str_lstring(s));
+}
+
+void lprint (lstring *ss) {
+ unsigned char *j, *l; /* current character code position */
+ j = ss->s;
+ l = j + ss->l;
while (j < l) {
/* 0x110000 in utf=8: 0xF4 0x90 0x80 0x80 */
/* I don't bother checking the last two bytes explicitly */
@@ -302,7 +305,6 @@ void print(int s)
}
}
-
@ The procedure |print_nl| is like |print|, but it makes sure that the
string appears at the beginning of a new line.
@@ -339,8 +341,9 @@ void tprint(const char *sss)
break;
case pseudo:
while (*sss) {
- if (tally++ < trick_count) {
+ if (tally < trick_count) {
trick_buf[tally % error_line] = (packed_ASCII_code) *sss++;
+ tally++;
} else {
return;
}
diff --git a/Build/source/texk/web2c/luatexdir/tex/scanning.w b/Build/source/texk/web2c/luatexdir/tex/scanning.w
index f3cc9b29bb5..7e2283a92cc 100644
--- a/Build/source/texk/web2c/luatexdir/tex/scanning.w
+++ b/Build/source/texk/web2c/luatexdir/tex/scanning.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: scanning.w 4877 2014-03-14 01:26:05Z luigi $"
+ "$Id: scanning.w 5009 2014-05-26 07:49:59Z taco $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/scanning.w $";
#include "ptexlib.h"
@@ -2089,7 +2089,7 @@ halfword scan_toks(boolean macro_def, boolean xpand)
sprint_cs(warning_index);
help3("You meant to type ## instead of #, right?",
"Or maybe a } was forgotten somewhere earlier, and things",
- "are all screwed up? I''m going to assume that you meant ##.");
+ "are all screwed up? I'm going to assume that you meant ##.");
back_error();
cur_tok = s;
} else {
diff --git a/Build/source/texk/web2c/luatexdir/tex/stringpool.h b/Build/source/texk/web2c/luatexdir/tex/stringpool.h
index 136e5cdb758..d9a33fe102d 100644
--- a/Build/source/texk/web2c/luatexdir/tex/stringpool.h
+++ b/Build/source/texk/web2c/luatexdir/tex/stringpool.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: stringpool.h 4634 2013-04-21 14:45:45Z hhenkel $ */
+/* $Id: stringpool.h 4599 2013-03-19 15:41:07Z taco $ */
#ifndef STRINGPOOL_H
# define STRINGPOOL_H
diff --git a/Build/source/texk/web2c/luatexdir/tex/stringpool.w b/Build/source/texk/web2c/luatexdir/tex/stringpool.w
index 4df0c53c54b..990c619d7f2 100644
--- a/Build/source/texk/web2c/luatexdir/tex/stringpool.w
+++ b/Build/source/texk/web2c/luatexdir/tex/stringpool.w
@@ -19,8 +19,8 @@
@ @c
static const char _svn_version[] =
- "$Id: stringpool.w 4634 2013-04-21 14:45:45Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/stringpool.w $";
+ "$Id: stringpool.w 4599 2013-03-19 15:41:07Z taco $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/stringpool.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/texdeffont.w b/Build/source/texk/web2c/luatexdir/tex/texdeffont.w
index 2766c4b4cd7..174a1ba86dc 100644
--- a/Build/source/texk/web2c/luatexdir/tex/texdeffont.w
+++ b/Build/source/texk/web2c/luatexdir/tex/texdeffont.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: texdeffont.w 4520 2012-12-14 09:15:55Z taco $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/texdeffont.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/texdeffont.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/texmath.w b/Build/source/texk/web2c/luatexdir/tex/texmath.w
index 527be959082..428e5001304 100644
--- a/Build/source/texk/web2c/luatexdir/tex/texmath.w
+++ b/Build/source/texk/web2c/luatexdir/tex/texmath.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: texmath.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: texmath.w 5081 2014-11-07 18:38:33Z luigi $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/texmath.w $";
#include "ptexlib.h"
@@ -1418,7 +1418,10 @@ void math_limit_switch(void)
NULL
};
if (head != tail) {
- if (type(tail) == simple_noad) {
+ if (type(tail) == simple_noad &&
+ (subtype(tail) == op_noad_type_normal ||
+ subtype(tail) == op_noad_type_limits ||
+ subtype(tail) == op_noad_type_no_limits)) {
subtype(tail) = (quarterword) cur_chr;
return;
}
diff --git a/Build/source/texk/web2c/luatexdir/tex/textcodes.w b/Build/source/texk/web2c/luatexdir/tex/textcodes.w
index e54aa0f72d0..08d890dfb3d 100644
--- a/Build/source/texk/web2c/luatexdir/tex/textcodes.w
+++ b/Build/source/texk/web2c/luatexdir/tex/textcodes.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
"$Id: textcodes.w 4519 2012-12-14 09:11:19Z taco $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/textcodes.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/textcodes.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/tex/textoken.w b/Build/source/texk/web2c/luatexdir/tex/textoken.w
index e9ae2e670a4..d37b85ae6f8 100644
--- a/Build/source/texk/web2c/luatexdir/tex/textoken.w
+++ b/Build/source/texk/web2c/luatexdir/tex/textoken.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: textoken.w 4956 2014-03-28 12:12:17Z luigi $"
+ "$Id: textoken.w 5004 2014-05-20 09:23:31Z taco $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/textoken.w $";
#include "ptexlib.h"
@@ -2323,7 +2323,7 @@ char *tokenlist_to_cstring(int pp, int inhibit_par, int *siz)
s++;
}
} else {
- Print_uchar(e);
+ if (e>=0 && e<0x110000) Print_uchar(e);
while (*s) {
Print_char(*s);
s++;
diff --git a/Build/source/texk/web2c/luatexdir/utils/avlstuff.h b/Build/source/texk/web2c/luatexdir/utils/avlstuff.h
index 05543befc20..6eb9ac6773d 100644
--- a/Build/source/texk/web2c/luatexdir/utils/avlstuff.h
+++ b/Build/source/texk/web2c/luatexdir/utils/avlstuff.h
@@ -18,7 +18,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: avlstuff.h 4634 2013-04-21 14:45:45Z hhenkel $ */
+/* $Id: avlstuff.h 5074 2014-10-24 16:57:38Z oneiros $ */
#ifndef AVLSTUFF_H
# define AVLSTUFF_H
diff --git a/Build/source/texk/web2c/luatexdir/utils/avlstuff.w b/Build/source/texk/web2c/luatexdir/utils/avlstuff.w
index ca00f29b75d..fc94e68fe9a 100644
--- a/Build/source/texk/web2c/luatexdir/utils/avlstuff.w
+++ b/Build/source/texk/web2c/luatexdir/utils/avlstuff.w
@@ -22,8 +22,8 @@
@ @c
static const char _svn_version[] =
- "$Id: avlstuff.w 4634 2013-04-21 14:45:45Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/utils/avlstuff.w $";
+ "$Id: avlstuff.w 5074 2014-10-24 16:57:38Z oneiros $"
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/utils/avlstuff.w $";
#include "ptexlib.h"
#include "utils/avl.h"
diff --git a/Build/source/texk/web2c/luatexdir/utils/managed-sa.w b/Build/source/texk/web2c/luatexdir/utils/managed-sa.w
index ed85a696acf..afdd99bfa61 100644
--- a/Build/source/texk/web2c/luatexdir/utils/managed-sa.w
+++ b/Build/source/texk/web2c/luatexdir/utils/managed-sa.w
@@ -22,7 +22,7 @@
@ @c
static const char _svn_version[] =
"$Id: managed-sa.w 4442 2012-05-25 22:40:34Z hhenkel $"
- "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/utils/managed-sa.w $";
+ "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/utils/managed-sa.w $";
#include "ptexlib.h"
diff --git a/Build/source/texk/web2c/luatexdir/utils/unistring.h b/Build/source/texk/web2c/luatexdir/utils/unistring.h
index e1f8e336c70..af9ba0f8f56 100644
--- a/Build/source/texk/web2c/luatexdir/utils/unistring.h
+++ b/Build/source/texk/web2c/luatexdir/utils/unistring.h
@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: unistring.h 4634 2013-04-21 14:45:45Z hhenkel $ */
+/* $Id: unistring.h 5074 2014-10-24 16:57:38Z oneiros $ */
#ifndef UNISTRING_H
# define UNISTRING_H
diff --git a/Build/source/texk/web2c/luatexdir/utils/unistring.w b/Build/source/texk/web2c/luatexdir/utils/unistring.w
index 5babddff1d2..9e3eb4f243b 100644
--- a/Build/source/texk/web2c/luatexdir/utils/unistring.w
+++ b/Build/source/texk/web2c/luatexdir/utils/unistring.w
@@ -19,7 +19,7 @@
@ @c
static const char _svn_version[] =
- "$Id: unistring.w 4718 2014-01-02 15:35:31Z taco $"
+ "$Id: unistring.w 5074 2014-10-24 16:57:38Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/utils/unistring.w $";
@ @c
diff --git a/Build/source/texk/web2c/luatexdir/utils/utils.h b/Build/source/texk/web2c/luatexdir/utils/utils.h
index f67f080db11..d342feed4dd 100644
--- a/Build/source/texk/web2c/luatexdir/utils/utils.h
+++ b/Build/source/texk/web2c/luatexdir/utils/utils.h
@@ -18,7 +18,7 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: utils.h 4479 2012-11-07 16:38:55Z taco $ */
+/* $Id: utils.h 5074 2014-10-24 16:57:38Z oneiros $ */
#ifndef UTILS_H
# define UTILS_H
diff --git a/Build/source/texk/web2c/luatexdir/utils/utils.w b/Build/source/texk/web2c/luatexdir/utils/utils.w
index c164a0463fb..bb91e57b955 100644
--- a/Build/source/texk/web2c/luatexdir/utils/utils.w
+++ b/Build/source/texk/web2c/luatexdir/utils/utils.w
@@ -20,7 +20,7 @@
@ @c
static const char _svn_version[] =
- "$Id: utils.w 4903 2014-03-15 12:18:10Z taco $"
+ "$Id: utils.w 5074 2014-10-24 16:57:38Z oneiros $"
"$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/utils/utils.w $";
@ @c