diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/pdf/pdfliteral.w | 65 |
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; + } +} |