diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-01-23 06:18:33 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-01-23 06:18:33 +0000 |
commit | 9e3236ef10e2f9ee8a507bd5f34b83eb8de9d2f7 (patch) | |
tree | 210736b26ac4b4cff3f99df02506a8d1d04b0e02 /Build | |
parent | 6abfd4c7200f129dbcf02070783de9135fad4926 (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.w | 91 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/lua/limglib.c | 20 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/lua/lpdflib.c | 130 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdftables.h | 2 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/textoken.w | 1 |
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); } |