diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-02-23 15:39:51 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2016-02-23 15:39:51 +0000 |
commit | 9c5cdb75e355c4041ec4d706dbb8860706f9d9e2 (patch) | |
tree | 0c045ff110d822370c7dfb19b167a4a1dc9e125d /Build/source/texk/dvipdfm-x/pdfdev.c | |
parent | da1dad220867bd8ba8b9868aedcaa0b584e9659d (diff) |
texk/dvipdfmx: Support a new primitive in XeTeX 0.99995 (from Jonathan)
git-svn-id: svn://tug.org/texlive/trunk@39835 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/pdfdev.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/pdfdev.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Build/source/texk/dvipdfm-x/pdfdev.c b/Build/source/texk/dvipdfm-x/pdfdev.c index bfe5c4968db..553b271dead 100644 --- a/Build/source/texk/dvipdfm-x/pdfdev.c +++ b/Build/source/texk/dvipdfm-x/pdfdev.c @@ -1949,3 +1949,56 @@ transform_info_clear (transform_info *info) info->flags = 0; } + +void +pdf_dev_begin_actualtext (uint16_t *unicodes, int count) +{ + int len, i, pdf_doc_enc = 1; + + /* check whether we can use PDFDocEncoding for this string + (we punt on the 0x80..0xA0 range that does not directly correspond to unicode) */ + for (i = 0; i < count; i++) { + if (unicodes[i] > 0xff || (unicodes[i] > 0x7f && unicodes[i] < 0xa1)) { + pdf_doc_enc = 0; + break; + } + } + + graphics_mode(); + + len = sprintf(work_buffer, "\n/Span<</ActualText("); + if (!pdf_doc_enc) { + len += sprintf(work_buffer + len, "\xFE\xFF"); + } + pdf_doc_add_page_content(work_buffer, len); + + while (count-- > 0) { + unsigned char s[2] = { *unicodes >> 8, *unicodes & 0xff }; + i = pdf_doc_enc; /* if using PDFDocEncoding, we only care about the low 8 bits, + so start with the second byte of our pair */ + len = 0; + for (; i < 2; i++) { + unsigned char c = s[i]; + if (c == '(' || c == ')' || c == '\\') { + len += sprintf(work_buffer + len, "\\%c", c); + } else if (c < ' ') { + len += sprintf(work_buffer + len, "\\%03o", c); + } else { + len += sprintf(work_buffer + len, "%c", c); + } + } + pdf_doc_add_page_content(work_buffer, len); + ++unicodes; + } + + len = sprintf(work_buffer, ")>>BDC"); + pdf_doc_add_page_content(work_buffer, len); +} + +void +pdf_dev_end_actualtext () +{ + graphics_mode(); + + pdf_doc_add_page_content(" EMC", 4); +} |