summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w')
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w65
1 files changed, 45 insertions, 20 deletions
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;
+ }
+}