summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/pdf
diff options
context:
space:
mode:
authorLuigi Scarso <luigi.scarso@gmail.com>2018-01-09 23:43:20 +0000
committerLuigi Scarso <luigi.scarso@gmail.com>2018-01-09 23:43:20 +0000
commitaa5d0e8bf3515c424ba0594a2d4e06ae31da7796 (patch)
treee56fd10d89732547ddb207c1998a1ded4360382e /Build/source/texk/web2c/luatexdir/pdf
parentd33684eeca435784c95c62c7981dd02f7818b263 (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.w3
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfgen.h2
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfgen.w80
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfglyph.w7
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w23
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdftables.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdftypes.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfxform.h4
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfxform.w6
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);