diff options
author | Luigi Scarso <luigi.scarso@gmail.com> | 2018-01-09 23:43:20 +0000 |
---|---|---|
committer | Luigi Scarso <luigi.scarso@gmail.com> | 2018-01-09 23:43:20 +0000 |
commit | aa5d0e8bf3515c424ba0594a2d4e06ae31da7796 (patch) | |
tree | e56fd10d89732547ddb207c1998a1ded4360382e /Build/source/texk/web2c/luatexdir/pdf | |
parent | d33684eeca435784c95c62c7981dd02f7818b263 (diff) |
Imported Luatex 1.06.3 (Lua 5.2.4)
git-svn-id: svn://tug.org/texlive/trunk@46269 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdffont.w | 3 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfgen.h | 2 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfgen.w | 80 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w | 7 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w | 23 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdftables.h | 3 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdftypes.h | 1 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfxform.h | 4 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfxform.w | 6 |
9 files changed, 87 insertions, 42 deletions
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdffont.w b/Build/source/texk/web2c/luatexdir/pdf/pdffont.w index b3f1605154c..278efa9d6fa 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdffont.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdffont.w @@ -41,7 +41,8 @@ scaled_whd output_one_char(PDF pdf, halfword p) int ex_glyph = ex_glyph(p)/1000; scaled_whd ci = get_charinfo_whd(f, c); /* the real width, height and depth of the character */ if (!(char_exists(f,c))) { - char_warning(f,c); + lua_glyph_not_found_callback(f,c); + /* char_warning(f,c); */ return ci; } ci.wd = ext_xn_over_d(ci.wd, 1000000 + ex_glyph(p), 1000000); diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h index f2086663c70..01b0e74cd1e 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.h @@ -81,7 +81,7 @@ extern int ten_pow[10]; extern void pdf_flush(PDF); extern void pdf_room(PDF, int); -extern void fix_pdf_minorversion(PDF); +extern void fix_pdf_version(PDF); /* output a byte to PDF buffer without checking of overflow */ diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w index 023f7fd65a3..26b7112ed09 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w @@ -190,6 +190,7 @@ PDF init_pdf_struct(PDF pdf) memset(pdf->obj_tab, 0, sizeof(obj_entry)); pdf->minor_version = -1; + pdf->major_version = -1; pdf->decimal_digits = 4; pdf->gamma = 65536; pdf->image_gamma = 65536; @@ -262,35 +263,43 @@ void fix_o_mode(void) } } -@ This ensures that |pdfminorversion| is set only before any bytes have been -written to the generated \.{PDF} file. Here also all variables for \.{PDF} output -are initialized, the \.{PDF} file is opened by |ensure_pdf_open|, and the \.{PDF} -header is written. +@ This ensures that |pdfmajorversion| and |pdfminorversion| are set only before any +bytes have been written to the generated \.{PDF} file. Here also all variables for +\.{PDF} output are initialized, the \.{PDF} file is opened by |ensure_pdf_open|, and +the \.{PDF} header is written. @c -void fix_pdf_minorversion(PDF pdf) -{ - if (pdf->minor_version < 0) { /* unset */ +void fix_pdf_version(PDF pdf) +{ + if (pdf->major_version < 0) { /* unset */ + if (pdf_major_version == 0) { + normal_warning("pdf backend","unset major version, using 1 instead"); + pdf->major_version = 1; + } else if ((pdf_major_version < 0) || (pdf_major_version > 2)) { + formatted_warning("pdf backend","illegal major version %d, using 1 instead",pdf_major_version); + pdf->major_version = 1; + } else { + pdf->major_version = pdf_major_version; + } + } else if (pdf->major_version != pdf_major_version) { + normal_warning("pdf backend", "the major version cannot be changed after data is written to the PDF file"); + } + if (pdf->minor_version < 0) { /* unset */ if ((pdf_minor_version < 0) || (pdf_minor_version > 9)) { - const char *hlp[] = { "The pdfminorversion must be between 0 and 9.", "I changed this to 4.", NULL }; - char msg[256]; - (void) snprintf(msg, 255, "LuaTeX error (illegal pdfminorversion %d)", (int) pdf_minor_version); - tex_error(msg, hlp); + formatted_warning("pdf backend","illegal minor version %d, using 4 instead",pdf_minor_version); pdf->minor_version = 4; } else { pdf->minor_version = pdf_minor_version; } - } else { - /* Check that variables for \.{PDF} output are unchanged */ - if (pdf->minor_version != pdf_minor_version) - normal_error("pdf backend", "minorversion cannot be changed after data is written to the PDF file"); + } else if (pdf->minor_version != pdf_minor_version) { + normal_warning("pdf backend", "minorversion cannot be changed after data is written to the PDF file"); } } static void fix_pdf_draftmode(PDF pdf) { if (pdf->draftmode != draft_mode_par) - normal_error("pdf backend", "draftmode cannot be changed after data is written to the PDF file"); + normal_warning("pdf backend", "draftmode cannot be changed after data is written to the PDF file"); if (pdf->draftmode != 0) { pdf->compress_level = 0; /* re-fix it, might have been changed inbetween */ pdf->objcompresslevel = 0; @@ -1027,11 +1036,11 @@ static void ensure_output_file_open(PDF pdf, const char *ext) static void ensure_pdf_header_written(PDF pdf) { /* Initialize variables for \.{PDF} output */ - fix_pdf_minorversion(pdf); + fix_pdf_version(pdf); init_pdf_outputparameters(pdf); fix_pdf_draftmode(pdf); /* Write \.{PDF} header */ - pdf_printf(pdf, "%%PDF-1.%d\n", pdf->minor_version); + pdf_printf(pdf, "%%PDF-%d.%d\n", pdf->major_version, pdf->minor_version); /* The next blob will be removed 1.0. */ pdf_out(pdf, '%'); pdf_out(pdf, 'P' + 128); @@ -1732,6 +1741,7 @@ void pdf_begin_page(PDF pdf) pdf_dict_add_int(pdf, "FormType", 1); } xform_attributes = pdf_xform_attr; /* lookup once */ + form_margin = obj_xform_margin(pdf, pdf_cur_form); /* now stored in object */ if (xform_attributes != null) pdf_print_toks(pdf, xform_attributes); if (obj_xform_attr(pdf, pdf_cur_form) != null) { @@ -2062,19 +2072,21 @@ void pdf_end_page(PDF pdf) pdf_end_dict(pdf); } /* Generate ProcSet */ - pdf_add_name(pdf, "ProcSet"); - pdf_begin_array(pdf); - if ((procset & PROCSET_PDF) != 0) - pdf_add_name(pdf, "PDF"); - if ((procset & PROCSET_TEXT) != 0) - pdf_add_name(pdf, "Text"); - if ((procset & PROCSET_IMAGE_B) != 0) - pdf_add_name(pdf, "ImageB"); - if ((procset & PROCSET_IMAGE_C) != 0) - pdf_add_name(pdf, "ImageC"); - if ((procset & PROCSET_IMAGE_I) != 0) - pdf_add_name(pdf, "ImageI"); - pdf_end_array(pdf); + if (pdf->major_version == 1) { + pdf_add_name(pdf, "ProcSet"); + pdf_begin_array(pdf); + if ((procset & PROCSET_PDF) != 0) + pdf_add_name(pdf, "PDF"); + if ((procset & PROCSET_TEXT) != 0) + pdf_add_name(pdf, "Text"); + if ((procset & PROCSET_IMAGE_B) != 0) + pdf_add_name(pdf, "ImageB"); + if ((procset & PROCSET_IMAGE_C) != 0) + pdf_add_name(pdf, "ImageC"); + if ((procset & PROCSET_IMAGE_I) != 0) + pdf_add_name(pdf, "ImageI"); + pdf_end_array(pdf); + } pdf_end_dict(pdf); pdf_end_obj(pdf); } @@ -2182,11 +2194,7 @@ static int pdf_print_info(PDF pdf, int luatexversion, if ((pdf_suppress_optional_info & 128) == 0 && !producer_given) { pdf_add_name(pdf, "Producer"); pdf_puts(pdf, " (LuaTeX-"); - pdf_print_int(pdf, luatexversion / 100); - pdf_out(pdf, '.'); - pdf_print_int(pdf, luatexversion % 100); - pdf_out(pdf, '.'); - pdf_print(pdf, luatexrevision); + pdf_puts(pdf, luatex_version_string); pdf_out(pdf, ')'); } if ((pdf_suppress_optional_info & 16) == 0 && !creator_given) { diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w index 06755a54bdf..0703beed22c 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w @@ -197,8 +197,11 @@ void pdf_place_glyph(PDF pdf, internal_font_number f, int c, int ex) boolean move; pdfstructure *p = pdf->pstruct; scaledpos pos = pdf->posstruct->pos; - if (!char_exists(f, c)) - return; + /* already done: + if (!char_exists(f, c)) { + return; + } + */ if (font_writingmode(f) == vertical_writingmode) { if (p->wmode != WMODE_V) { p->wmode = WMODE_V; diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w index 64a36dc67bf..35687bf7401 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w @@ -103,13 +103,14 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn) if (s >= STRING_OFFSET) { /* needed for |out_save| */ j = 0; - /* the next is obsolete, in fact, specials are obsolete in pdf mode */ + /* unfortunately we always go through this when we have vf specials (and also via temp strings) */ if (literal_mode == scan_special) { if (!(str_in_cstr(s, "PDF:", 0) || str_in_cstr(s, "pdf:", 0))) { if (warn && ((!(str_in_cstr(s, "SRC:", 0) || str_in_cstr(s, "src:", 0))) || (str_length(s) == 0))) tprint_nl("Non-PDF special ignored!"); return; } + /* j = j + (pool_pointer) strlen("PDF:"); if (str_in_cstr(s, "direct:", strlen("PDF:"))) { j = j + (pool_pointer) strlen("direct:"); @@ -120,6 +121,26 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn) } else if (str_in_cstr(s, "raw:", strlen("PDF:"))) { j = j + (pool_pointer) strlen("raw:"); literal_mode = direct_raw; + } else if (str_in_cstr(s, "origin:", strlen("PDF:"))) { + j = j + (pool_pointer) strlen("origin:"); + literal_mode = set_origin; + } else { + literal_mode = set_origin; + } + */ + j = j + (pool_pointer) 4; /* strlen("PDF:") */ + if (str_in_cstr(s, "direct:", 4)) { /* strlen("PDF:") */ + j = j + (pool_pointer) 7; /* strlen("direct:") */ + literal_mode = direct_always; + } else if (str_in_cstr(s, "page:", 4)) { /* strlen("PDF:") */ + j = j + (pool_pointer) 5; /* strlen("page:") */ + literal_mode = direct_page; + } else if (str_in_cstr(s, "raw:", 4)) { /* strlen("PDF:") */ + j = j + (pool_pointer) 4; /* strlen("raw:") */ + literal_mode = direct_raw; + } else if (str_in_cstr(s, "origin:", 4)) { /* strlen("PDF:") */ + j = j + (pool_pointer) 7; /* strlen("origin:") */ + literal_mode = set_origin; } else { literal_mode = set_origin; } diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h index 9a14d65da45..cfaab5df046 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h +++ b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h @@ -123,6 +123,7 @@ typedef enum { c_pdf_image_resolution, c_pdf_pk_resolution, c_pdf_unique_resname, + c_pdf_major_version, c_pdf_minor_version, c_pdf_pagebox, c_pdf_inclusion_errorlevel, @@ -170,6 +171,7 @@ extern int pdf_retval; # define pdf_image_resolution get_tex_extension_count_register(c_pdf_image_resolution) # define pdf_pk_resolution get_tex_extension_count_register(c_pdf_pk_resolution) # define pdf_unique_resname get_tex_extension_count_register(c_pdf_unique_resname) +# define pdf_major_version get_tex_extension_count_register(c_pdf_major_version) # 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) @@ -200,6 +202,7 @@ extern int pdf_retval; # define pdf_pk_mode get_tex_extension_toks_register(t_pdf_pk_mode) # define pdf_trailer_id get_tex_extension_toks_register(t_pdf_trailer_id) +# define set_pdf_major_version(i) set_tex_extension_count_register(c_pdf_major_version,i) # define set_pdf_minor_version(i) set_tex_extension_count_register(c_pdf_minor_version,i) # define set_pdf_compress_level(i) set_tex_extension_count_register(c_pdf_compress_level,i) # define set_pdf_obj_compress_level(i) set_tex_extension_count_register(c_pdf_obj_compress_level,i) diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftypes.h b/Build/source/texk/web2c/luatexdir/pdf/pdftypes.h index 34153600d97..c5f0393cc20 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdftypes.h +++ b/Build/source/texk/web2c/luatexdir/pdf/pdftypes.h @@ -293,6 +293,7 @@ typedef struct pdf_output_file_ { int gen_tounicode; int omit_cidset; int inclusion_copy_font; + int major_version; /* fixed major part of the PDF version */ int minor_version; /* fixed minor part of the PDF version */ int compress_level; /* level for zlib object stream compression */ int objcompresslevel; /* fixed level for activating PDF object streams */ diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.h b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.h index 64525d837ea..2d6441ff496 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.h +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.h @@ -22,7 +22,7 @@ #ifndef PDFXFORM_H # define PDFXFORM_H -# define pdfmem_xform_size 9 /* size of memory in |pdf->mem| which |obj_data_ptr| holds */ +# define pdfmem_xform_size 10 /* size of memory in |pdf->mem| which |obj_data_ptr| holds */ # define obj_xform_width(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 0] # define obj_xform_height(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 1] @@ -33,6 +33,7 @@ # define obj_xform_attr_str(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 6] # define obj_xform_resources_str(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 7] # define obj_xform_type(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 8] +# define obj_xform_margin(pdf,A) pdf->mem[obj_data_ptr(pdf,A) + 9] # define set_pdf_xform_objnum(A,B) pdf_xform_objnum(A)=B # define set_obj_xform_width(pdf,A,B) obj_xform_width(pdf,A)=B @@ -44,6 +45,7 @@ # define set_obj_xform_attr_str(pdf,A,B) obj_xform_attr_str(pdf,A)=B # define set_obj_xform_resources_str(pdf,A,B) obj_xform_resources_str(pdf,A)=B # define set_obj_xform_type(pdf,A,B) obj_xform_type(pdf,A)=B +# define set_obj_xform_margin(pdf,A,B) obj_xform_margin(pdf,A)=B extern int pdf_cur_form; /* the form being output */ diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w index 4c83b024939..731dc229080 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfxform.w @@ -89,6 +89,12 @@ void scan_pdfxform(PDF pdf) } else { set_obj_xform_resources(pdf, k, null); } + if (scan_keyword("margin")) { + scan_int(); + set_obj_xform_margin(pdf, k, cur_val); + } else { + set_obj_xform_margin(pdf, k, pdf_xform_margin); + } set_obj_xform_resources_str(pdf, k, null); scan_int(); p = box(cur_val); |