summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/pdf
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf')
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfliteral.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w65
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpage.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfpage.w15
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdftables.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdftables.w2
6 files changed, 64 insertions, 21 deletions
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.h b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.h
index 14c197d0f72..388742732aa 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.h
@@ -27,6 +27,7 @@
# define set_pdf_literal_data(A,B) pdf_literal_data(A)=B
extern void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn);
+extern void pdf_literal_set_mode(PDF pdf, int literal_mode);
extern void pdf_special(PDF pdf, halfword p);
extern void pdf_out_literal(PDF pdf, halfword p);
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
index 35687bf7401..94bb2c93c4a 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
@@ -62,6 +62,12 @@ void pdf_out_literal(PDF pdf, halfword p)
case direct_page:
pdf_goto_pagemode(pdf);
break;
+ case direct_text:
+ pdf_goto_textmode(pdf);
+ break;
+ case direct_font:
+ pdf_goto_fontmode(pdf);
+ break;
case direct_always:
pdf_end_string_nl(pdf);
ps->need_tm = true;
@@ -105,29 +111,11 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn)
j = 0;
/* 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)))
+ 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:");
- literal_mode = direct_always;
- } else if (str_in_cstr(s, "page:", strlen("PDF:"))) {
- j = j + (pool_pointer) strlen("page:");
- literal_mode = direct_page;
- } 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:") */
@@ -135,6 +123,9 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn)
} 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, "text:", 4)) { /* strlen("PDF:") */
+ j = j + (pool_pointer) 5; /* strlen("text:") */
+ literal_mode = direct_text;
} else if (str_in_cstr(s, "raw:", 4)) { /* strlen("PDF:") */
j = j + (pool_pointer) 4; /* strlen("raw:") */
literal_mode = direct_raw;
@@ -154,6 +145,10 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn)
case direct_page:
pdf_goto_pagemode(pdf);
break;
+ case direct_text:
+ pdf_goto_fontmode(pdf);
+// pdf_goto_textmode(pdf);
+ break;
case direct_always:
pdf_end_string_nl(pdf);
p->need_tm = true;
@@ -174,3 +169,33 @@ void pdf_literal(PDF pdf, str_number s, int literal_mode, boolean warn)
}
pdf_out(pdf, '\n');
}
+
+void pdf_literal_set_mode(PDF pdf, int literal_mode)
+{
+ pdfstructure *p = pdf->pstruct;
+ switch (literal_mode) {
+ case set_origin:
+ pdf_goto_pagemode(pdf);
+ pdf_set_pos(pdf, pdf->posstruct->pos);
+ break;
+ case direct_page:
+ pdf_goto_pagemode(pdf);
+ break;
+ case direct_text:
+ pdf_goto_textmode(pdf);
+ break;
+ case direct_font:
+ pdf_goto_fontmode(pdf);
+ break;
+ case direct_always:
+ pdf_end_string_nl(pdf);
+ p->need_tm = true;
+ break;
+ case direct_raw:
+ pdf_end_string_nl(pdf);
+ break;
+ default:
+ normal_error("pdf backend","bad literal mode");
+ break;
+ }
+}
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
index 175fbcc6c7e..c7a5f8a7076 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.h
@@ -38,6 +38,7 @@ boolean calc_pdfpos(pdfstructure * p, scaledpos pos);
void pdf_end_string_nl(PDF pdf);
void pdf_goto_pagemode(PDF pdf);
void pdf_goto_textmode(PDF pdf);
+void pdf_goto_fontmode(PDF pdf);
void init_pdf_pagecalculations(PDF pdf);
void pdf_print_cm(PDF pdf, pdffloat * cm);
void pdf_set_pos(PDF pdf, scaledpos pos);
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
index f0782d2093c..ecc51ddfd63 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfpage.w
@@ -257,3 +257,18 @@ void pdf_goto_textmode(PDF pdf)
normal_error("pdf backend","text mode expected in goto_text_mode");
}
}
+
+void pdf_goto_fontmode(PDF pdf){
+ pdfstructure *p = pdf->pstruct;
+ const scaledpos origin = {
+ 0, 0
+ };
+ if (is_charmode(p))
+ end_charmode(pdf);
+ if (is_chararraymode(p))
+ end_chararray(pdf);
+ if (is_textmode(p))
+ end_text(pdf);
+ pdf_set_pos(pdf, origin);
+ p->mode = PMODE_PAGE;
+}
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
index cfaab5df046..e29c5603d66 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdftables.h
@@ -164,6 +164,7 @@ extern int pdf_last_annot;
extern int pdf_last_link;
extern int pdf_last_obj;
extern int pdf_retval;
+extern int pdf_cur_form;
# define pdf_compress_level get_tex_extension_count_register(c_pdf_compress_level)
# define pdf_obj_compress_level get_tex_extension_count_register(c_pdf_obj_compress_level)
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftables.w b/Build/source/texk/web2c/luatexdir/pdf/pdftables.w
index d8b5cf10321..31fc2c9ad4e 100644
--- a/Build/source/texk/web2c/luatexdir/pdf/pdftables.w
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdftables.w
@@ -32,6 +32,7 @@ int pdf_last_annot;
int pdf_last_link;
int pdf_last_obj;
int pdf_retval; /* global multi-purpose return value */
+int pdf_cur_form; /* the form being output */
@ AVL sort entry into |avl_table[]|
@c
@@ -272,7 +273,6 @@ void libpdffinish(PDF pdf)
enc_free();
epdf_free();
ttf_free();
- sfd_free();
glyph_unicode_free();
zip_free(pdf);
}