summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/pdfdev.c
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-02-23 15:39:51 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-02-23 15:39:51 +0000
commit9c5cdb75e355c4041ec4d706dbb8860706f9d9e2 (patch)
tree0c045ff110d822370c7dfb19b167a4a1dc9e125d /Build/source/texk/dvipdfm-x/pdfdev.c
parentda1dad220867bd8ba8b9868aedcaa0b584e9659d (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.c53
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);
+}