summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-01-23 06:18:33 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-01-23 06:18:33 +0000
commit9e3236ef10e2f9ee8a507bd5f34b83eb8de9d2f7 (patch)
tree210736b26ac4b4cff3f99df02506a8d1d04b0e02 /Build
parent6abfd4c7200f129dbcf02070783de9135fad4926 (diff)
web2c/luatexdir: sync with the upstream
git-svn-id: svn://tug.org/texlive/trunk@39465 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/texk/web2c/luatexdir/image/writeimg.w91
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/limglib.c20
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lpdflib.c130
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdftables.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/textoken.w1
5 files changed, 176 insertions, 68 deletions
diff --git a/Build/source/texk/web2c/luatexdir/image/writeimg.w b/Build/source/texk/web2c/luatexdir/image/writeimg.w
index c002b56dca9..7407d228a0f 100644
--- a/Build/source/texk/web2c/luatexdir/image/writeimg.w
+++ b/Build/source/texk/web2c/luatexdir/image/writeimg.w
@@ -22,7 +22,6 @@
@ @c
#include "ptexlib.h"
-#include <assert.h>
#include <kpathsea/c-auto.h>
#include <kpathsea/c-memstr.h>
@@ -112,31 +111,34 @@ static void check_type_by_header(image_dict * idict)
FILE *file = NULL;
char header[MAX_HEADER];
char prefix[LEN_PDF_MEMSTREAM+1];
-
- assert(idict != NULL);
+ if (idict == NULL)
+ return;
if (img_type(idict) != IMG_TYPE_NONE)
return;
/* here we read the and also check for a memstream object */
- assert(img_filepath(idict) && FOPEN_RBIN_MODE);
+ if (!img_filepath(idict) || !FOPEN_RBIN_MODE) {
+ normal_error("pdf backend","reading image file failed");
+ }
file = fopen(img_filepath(idict), FOPEN_RBIN_MODE);
if (file == NULL) {
/* check the prefix of img_filepath(idict) */
for (i = 0; (unsigned) i < LEN_PDF_MEMSTREAM; i++) {
- prefix[i] = (char) (img_filepath(idict)[i]);
- }
- prefix[LEN_PDF_MEMSTREAM]='\0';
- if (strncmp(prefix, HEADER_PDF_MEMSTREAM, LEN_PDF_MEMSTREAM) == 0) {
+ prefix[i] = (char) (img_filepath(idict)[i]);
+ }
+ prefix[LEN_PDF_MEMSTREAM]='\0';
+ if (strncmp(prefix, HEADER_PDF_MEMSTREAM, LEN_PDF_MEMSTREAM) == 0) {
img_type(idict) = IMG_TYPE_PDFMEMSTREAM;
return;
- } else {
- FATAL_PERROR(img_filepath(idict));
- }
+ } else {
+ formatted_error("pdf backend","reading image file '%s' failed",img_filepath(idict));
+ }
}
/* a valid file, but perhaps unsupported */
for (i = 0; (unsigned) i < MAX_HEADER; i++) {
header[i] = (char) xgetc(file);
- if (feof(file))
+ if (feof(file)) {
normal_error("pdf backend","reading image file failed");
+ }
}
xfclose(file, img_filepath(idict));
/* tests */
@@ -180,8 +182,6 @@ static void check_type_by_extension(image_dict * idict)
@ @c
void new_img_pdfstream_struct(image_dict * p)
{
- assert(p != NULL);
- assert(img_pdfstream_ptr(p) == NULL);
img_pdfstream_ptr(p) = xtalloc(1, pdf_stream_struct);
img_pdfstream_stream(p) = NULL;
}
@@ -203,7 +203,6 @@ image *new_image(void)
image_dict *new_image_dict(void)
{
image_dict *p = xtalloc(1, image_dict);
- assert(p != NULL);
memset(p, 0, sizeof(image_dict));
set_wd_running(p);
set_ht_running(p);
@@ -238,7 +237,6 @@ void free_image_dict(image_dict * p)
if (ini_version)
return; /* The image may be \.{\\dump}ed to a format */
/* called from limglib.c */
- assert(img_state(p) < DICT_REFERED);
switch (img_type(p)) {
case IMG_TYPE_PDFMEMSTREAM:
case IMG_TYPE_PDF:
@@ -266,10 +264,9 @@ void free_image_dict(image_dict * p)
case IMG_TYPE_NONE:
break;
default:
- assert(0);
+ normal_error("pdf backend","unknown image type");
}
free_dict_strings(p);
- assert(img_file(p) == NULL);
xfree(p);
}
@@ -278,7 +275,6 @@ void read_img(image_dict * idict)
{
char *filepath = NULL;
int callback_id;
- assert(idict != NULL);
if (img_filename(idict) == NULL) {
normal_error("pdf backend","image file name missing");
}
@@ -320,11 +316,20 @@ void read_img(image_dict * idict)
read_jbig2_info(idict);
break;
default:
- normal_error("pdf backend","internal error: unknown image type");
+ img_type(idict) = IMG_TYPE_NONE;
+ if (pdf_ignore_unknown_images) {
+ normal_warning("pdf backend","internal error: ignoring unknown image type");
+ } else {
+ normal_error("pdf backend","internal error: unknown image type");
+ }
+ break;
}
cur_file_name = NULL;
- if (img_state(idict) < DICT_FILESCANNED)
+ if (img_type(idict) == IMG_TYPE_NONE) {
+ img_state(idict) = DICT_NEW;
+ } else if (img_state(idict) < DICT_FILESCANNED) {
img_state(idict) = DICT_FILESCANNED;
+ }
}
@ @c
@@ -340,7 +345,9 @@ static image_dict *read_image(char *file_name, int page_num, char *page_name, in
img_colorspace(idict) = colorspace;
img_pagenum(idict) = page_num;
img_pagename(idict) = page_name;
- assert(file_name != NULL);
+ if (file_name == NULL) {
+ normal_error("pdf backend","no image filename given");
+ }
cur_file_name = file_name;
img_filename(idict) = file_name;
img_pagebox(idict) = page_box;
@@ -400,7 +407,9 @@ void scan_pdfximage(PDF pdf) /* static_pdf */
}
scan_toks(false, true);
file_name = tokenlist_to_cstring(def_ref, true, NULL);
- assert(file_name != NULL);
+ if (file_name == NULL) {
+ normal_error("pdf backend","no image filename given");
+ }
delete_token_ref(def_ref);
idict = read_image(file_name, page, named, colorspace, pagebox);
img_attr(idict) = attr;
@@ -423,16 +432,23 @@ void scan_pdfrefximage(PDF pdf)
check_obj_type(pdf, obj_type_ximage, cur_val);
tail_append(new_rule(image_rule));
idict = idict_array[obj_data_ptr(pdf, cur_val)];
- if (alt_rule.wd != null_flag || alt_rule.ht != null_flag
- || alt_rule.dp != null_flag)
- dim = scale_img(idict, alt_rule, transform);
- else
- dim = scale_img(idict, img_dimen(idict), img_transform(idict));
- width(tail) = dim.wd;
- height(tail) = dim.ht;
- depth(tail) = dim.dp;
- rule_transform(tail) = transform;
- rule_index(tail) = img_index(idict);
+ if (img_state(idict) == DICT_NEW) {
+ normal_warning("image","don't rely on the image data to be okay");
+ width(tail) = 0;
+ height(tail) = 0;
+ depth(tail) = 0;
+ } else {
+ if (alt_rule.wd != null_flag || alt_rule.ht != null_flag || alt_rule.dp != null_flag) {
+ dim = scale_img(idict, alt_rule, transform);
+ } else {
+ dim = scale_img(idict, img_dimen(idict), img_transform(idict));
+ }
+ width(tail) = dim.wd;
+ height(tail) = dim.ht;
+ depth(tail) = dim.dp;
+ rule_transform(tail) = transform;
+ rule_index(tail) = img_index(idict);
+ }
}
@ |tex_scale()| sequence of decisions:
@@ -504,7 +520,6 @@ scaled_whd scale_img(image_dict * idict, scaled_whd alt_rule, int transform)
int x, y, xr, yr, tmp; /* size and resolution of image */
scaled_whd nat; /* natural size corresponding to image resolution */
int default_res;
- assert(idict != NULL);
if ((img_type(idict) == IMG_TYPE_PDF || img_type(idict) == IMG_TYPE_PDFMEMSTREAM
|| img_type(idict) == IMG_TYPE_PDFSTREAM) && img_is_bbox(idict)) {
x = img_xsize(idict) = img_bbox(idict)[2] - img_bbox(idict)[0]; /* dimensions from image.bbox */
@@ -557,7 +572,6 @@ scaled_whd scale_img(image_dict * idict, scaled_whd alt_rule, int transform)
@ @c
void write_img(PDF pdf, image_dict * idict)
{
- assert(idict != NULL);
if (img_state(idict) < DICT_WRITTEN) {
report_start_file(filetype_image, img_filepath(idict));
switch (img_type(idict)) {
@@ -581,7 +595,7 @@ void write_img(PDF pdf, image_dict * idict)
write_pdfstream(pdf, idict);
break;
default:
- normal_error("pdf backend","internal error: unknown image type");
+ normal_error("pdf backend","internal error: writing unknown image type");
}
report_stop_file(filetype_image);
if (img_type(idict) == IMG_TYPE_PNG) {
@@ -612,8 +626,6 @@ void check_pdfstream_dict(image_dict * idict)
@ @c
void write_pdfstream(PDF pdf, image_dict * idict)
{
- assert(img_pdfstream_ptr(idict) != NULL);
- assert(img_is_bbox(idict));
pdf_begin_obj(pdf, img_objnum(idict), OBJSTM_NEVER);
pdf_begin_dict(pdf);
pdf_dict_add_name(pdf, "Type", "XObject");
@@ -643,21 +655,18 @@ size_t idict_limit;
void idict_to_array(image_dict * idict)
{
- assert(idict != NULL);
if (idict_ptr - idict_array == 0) { /* align to count from 1 */
alloc_array(idict, 1, SMALL_BUF_SIZE); /* /Im0 unused */
idict_ptr++;
}
alloc_array(idict, 1, SMALL_BUF_SIZE);
*idict_ptr = idict;
- assert(img_index(idict) == idict_ptr - idict_array);
idict_ptr++;
}
void pdf_dict_add_img_filename(PDF pdf, image_dict * idict)
{
char s[21], *p;
- assert(idict != NULL);
if (pdf_image_addfilename>0) {
/* for now PTEX.FileName only for PDF, but prepared for JPG, PNG, ... */
if (! ( (img_type(idict) == IMG_TYPE_PDF) || (img_type(idict) == IMG_TYPE_PDFMEMSTREAM) ))
diff --git a/Build/source/texk/web2c/luatexdir/lua/limglib.c b/Build/source/texk/web2c/luatexdir/lua/limglib.c
index 22dc80e38d6..07467886b59 100644
--- a/Build/source/texk/web2c/luatexdir/lua/limglib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/limglib.c
@@ -21,7 +21,6 @@
#include "lua/luatex-api.h"
#include <stdio.h>
#include <string.h>
-#include <assert.h>
#include "lua.h"
#include "lauxlib.h"
@@ -65,8 +64,9 @@ static void copy_image(lua_State * L, lua_Number scale)
img_dictref(b) = luaL_ref(L, LUA_REGISTRYINDEX); /* b */
d = img_dict(*aa);
img_luaref(d) += 1;
- } else
- assert(img_state(img_dict(a)) >= DICT_REFERED);
+ } else if (img_state(img_dict(a)) < DICT_REFERED) {
+ luaL_error(L, "img.copy needs an proper image as argument");
+ }
}
static void lua_to_image(lua_State * L, image * a, image_dict * d);
@@ -75,8 +75,9 @@ int l_new_image(lua_State * L)
{
image *a, **aa;
image_dict **add;
- if (lua_gettop(L) > 0 && ! lua_istable(L, -1))
+ if (lua_gettop(L) > 0 && ! lua_istable(L, -1)) {
luaL_error(L, "img.new needs table as optional argument"); /* (t) */
+ }
aa = (image **) lua_newuserdata(L, sizeof(image *)); /* i (t) */
luaL_getmetatable(L, TYPE_IMG); /* m i (t) */
lua_setmetatable(L, -2); /* i (t) */
@@ -127,8 +128,9 @@ static void read_scale_img(image * a)
else {
read_img(ad);
}
- }
- if (is_wd_running(a) || is_ht_running(a) || is_dp_running(a)) {
+ } else if (img_state(ad) == DICT_NEW) {
+ normal_warning("image","don't rely on the image data to be okay");
+ } else if (is_wd_running(a) || is_ht_running(a) || is_dp_running(a)) {
img_dimen(a) = scale_img(ad, img_dimen(a), img_transform(a));
}
}
@@ -231,7 +233,7 @@ static void write_image_or_node(lua_State * L, wrtype_e writetype)
lua_nodelib_push_fast(L, n);
break;
default:
- assert(0);
+ luaL_error(L, "%s expects an valid image", wrtype_s[writetype]);
}
if (img_state(ad) < DICT_REFERED)
img_state(ad) = DICT_REFERED;
@@ -297,7 +299,9 @@ void vf_out_image(PDF pdf, unsigned i)
aa = (image **) luaL_checkudata(L, -1, TYPE_IMG);
a = *aa;
ad = img_dict(a);
- assert(ad != NULL);
+ if (ad == NULL) {
+ luaL_error(L, "invalid image dictionary");
+ }
setup_image(pdf, a, WR_VF_IMG);
place_img(pdf, ad, img_dimen(a), img_transform(a));
lua_pop(L, 1);
diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
index 3a1c58f2ed4..334571b215d 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
@@ -961,6 +961,85 @@ static int setpdforigin(lua_State * L)
return 0 ;
}
+static int getpdforigin(lua_State * L)
+{
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_h_origin));
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_v_origin));
+ return 2 ;
+}
+
+static int setpdfthreadmargin(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_dimen_register(d_pdf_thread_margin,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int setpdfdestmargin(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_dimen_register(d_pdf_dest_margin,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int setpdflinkmargin(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_dimen_register(d_pdf_link_margin,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int setpdfxformmargin(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_dimen_register(d_pdf_xform_margin,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int getpdfthreadmargin(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_thread_margin));
+ return 1;
+}
+
+static int getpdfdestmargin(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_dest_margin));
+ return 1;
+}
+
+static int getpdflinkmargin(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_link_margin));
+ return 1;
+}
+
+static int getpdfxformmargin(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_dimen_register(d_pdf_xform_margin));
+ return 1;
+}
+
+static int setpdfinclusionerrorlevel(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_count_register(c_pdf_inclusion_errorlevel,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int setpdfignoreunknownimages(lua_State * L) {
+ if (lua_type(L, 1) == LUA_TNUMBER) {
+ set_tex_extension_count_register(c_pdf_ignore_unknown_images,lua_tointeger(L, 1));
+ }
+ return 0;
+}
+
+static int getpdfinclusionerrorlevel(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_count_register(c_pdf_inclusion_errorlevel));
+ return 1;
+}
+
+static int getpdfignoreunknownimages(lua_State * L) {
+ lua_pushinteger(L,get_tex_extension_count_register(c_pdf_ignore_unknown_images));
+ return 1;
+}
+
static int newpdfcolorstack(lua_State * L)
{
const char *s = NULL;
@@ -993,20 +1072,19 @@ static int newpdfcolorstack(lua_State * L)
}
static const struct luaL_Reg pdflib[] = {
- { "immediateobj", l_immediateobj },
- { "mapfile", l_mapfile },
- { "mapline", l_mapline },
- { "maxobjnum", l_maxobjnum },
+ { "gethpos", l_gethpos },
+ { "getvpos", l_getvpos },
{ "obj", l_obj },
- { "objtype", l_objtype },
- { "pageref", l_pageref },
- { "print", luapdfprint },
+ { "immediateobj", l_immediateobj },
{ "refobj", l_refobj },
{ "registerannot", l_registerannot },
{ "reserveobj", l_reserveobj },
{ "getpos", l_getpos },
- { "gethpos", l_gethpos },
- { "getvpos", l_getvpos },
+ { "pageref", getpdfpageref },
+ { "maxobjnum", l_maxobjnum },
+ { "pageref", l_pageref },
+ { "print", luapdfprint },
+ { "objtype", l_objtype },
{ "getmatrix", l_getmatrix },
{ "hasmatrix", l_hasmatrix },
{ "setcatalog", l_set_catalog },
@@ -1038,16 +1116,30 @@ static const struct luaL_Reg pdflib[] = {
{ "getdecimaldigits", l_get_decimal_digits },
{ "setdecimaldigits", l_set_decimal_digits },
/* moved from tex table */
- { "fontname", getpdffontname},
- { "fontobjnum", getpdffontobjnum},
- { "fontsize", getpdffontsize},
- { "pageref", getpdfpageref},
- { "xformname", getpdfxformname},
- { "getversion", getpdfversion},
- { "getminorversion", getpdfminorversion},
- { "setminorversion", setpdfminorversion},
- { "newcolorstack", newpdfcolorstack},
- { "setorigin",setpdforigin},
+ { "fontname", getpdffontname },
+ { "fontobjnum", getpdffontobjnum },
+ { "fontsize", getpdffontsize },
+ { "xformname", getpdfxformname },
+ { "getversion", getpdfversion },
+ { "getminorversion", getpdfminorversion },
+ { "setminorversion", setpdfminorversion },
+ { "newcolorstack", newpdfcolorstack },
+ { "setorigin", setpdforigin },
+ { "getorigin", getpdforigin },
+ { "setthreadmargin", setpdfthreadmargin },
+ { "setdestmargin", setpdfdestmargin },
+ { "setlinkmargin", setpdflinkmargin },
+ { "setxformmargin", setpdfxformmargin },
+ { "getthreadmargin", getpdfthreadmargin },
+ { "getdestmargin", getpdfdestmargin },
+ { "getlinkmargin", getpdflinkmargin },
+ { "getxformmargin", getpdfxformmargin },
+ { "getinclusionerrorlevel", getpdfinclusionerrorlevel },
+ { "getignoreunknownimages", getpdfignoreunknownimages },
+ { "setinclusionerrorlevel", setpdfinclusionerrorlevel },
+ { "setignoreunknownimages", setpdfignoreunknownimages },
+ { "mapfile", l_mapfile },
+ { "mapline", l_mapline },
/* sentinel */
{NULL, NULL}
};
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
index f42122ee644..7b508c4e161 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
@@ -122,6 +122,7 @@ typedef enum {
c_pdf_minor_version,
c_pdf_pagebox,
c_pdf_inclusion_errorlevel,
+ c_pdf_ignore_unknown_images,
c_pdf_gamma,
c_pdf_image_apply_gamma,
c_pdf_image_gamma,
@@ -163,6 +164,7 @@ extern int pdf_retval;
# define pdf_minor_version get_tex_extension_count_register(c_pdf_minor_version)
# define pdf_pagebox get_tex_extension_count_register(c_pdf_pagebox)
# define pdf_inclusion_errorlevel get_tex_extension_count_register(c_pdf_inclusion_errorlevel)
+# define pdf_ignore_unknown_images get_tex_extension_count_register(c_pdf_ignore_unknown_images)
# define pdf_gamma get_tex_extension_count_register(c_pdf_gamma)
# define pdf_image_apply_gamma get_tex_extension_count_register(c_pdf_image_apply_gamma)
# define pdf_image_gamma get_tex_extension_count_register(c_pdf_image_gamma)
diff --git a/Build/source/texk/web2c/luatexdir/tex/textoken.w b/Build/source/texk/web2c/luatexdir/tex/textoken.w
index 996e3cf2303..0cdbb9703c3 100644
--- a/Build/source/texk/web2c/luatexdir/tex/textoken.w
+++ b/Build/source/texk/web2c/luatexdir/tex/textoken.w
@@ -2303,6 +2303,7 @@ static int do_variable_pdf(halfword c)
else if (scan_keyword("minorversion")) { do_variable_backend_int(c_pdf_minor_version); }
else if (scan_keyword("pagebox")) { do_variable_backend_int(c_pdf_pagebox); }
else if (scan_keyword("inclusionerrorlevel")) { do_variable_backend_int(c_pdf_inclusion_errorlevel); }
+ else if (scan_keyword("ignoreunknownimages")) { do_variable_backend_int(c_pdf_ignore_unknown_images); }
else if (scan_keyword("gamma")) { do_variable_backend_int(c_pdf_gamma); }
else if (scan_keyword("imageapplygamma")) { do_variable_backend_int(c_pdf_image_apply_gamma); }
else if (scan_keyword("imagegamma")) { do_variable_backend_int(c_pdf_image_gamma); }