<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
Hi Akira,
<div class=""><br class="">
<blockquote type="cite" class="">On May 31, 2017, at 2:59 PM, Akira Kakuto <<a href="mailto:kakuto@fuk.kindai.ac.jp" class="">kakuto@fuk.kindai.ac.jp</a>> wrote:<br class="">
<br class="">
Hi Karl,<br class="">
<br class="">
<blockquote type="cite" class="">I realize you're reporting a separate bug, that the value gets<br class="">
misinterpreted<br class="">
</blockquote>
<br class="">
<blockquote type="cite" class="">
<blockquote type="cite" class="">\pdfglyphtounicode{Z}{D835DC81}<br class="">
<br class="">
<5A> <36E537DC81><br class="">
</blockquote>
</blockquote>
<br class="">
I confirmed that Ross's<br class="">
\pdfglyphtounicode{Z}{D835 DC81}<br class="">
with a space works ok.<br class="">
<br class="">
In the case of<br class="">
\pdfglyphtounicode{Z}{D835DC81}<br class="">
I encountered an assertion error because<br class="">
long code = 0XD835DC81 < 0 in my case, where<br class="">
sizeof(long) = 4.<br class="">
<br class="">
Ross obtained erroneously vh = 0X36E537, vl = 0XDC81<br class="">
because long code = 0XD835DC81 > 0, if sizeof(long) = 8.<br class="">
<br class="">
Is assert(code >= 0 && code <= 0X10FFFF) OK or not OK?<br class="">
</blockquote>
<div class=""><br class="">
</div>
<div class="">I'm thinking this is OK, *provided* spaces are used to separate the codes,</div>
<div class="">when multiple glyphs are required.</div>
<div class=""><br class="">
</div>
<div class="">Otherwise there should be just a single Unicode point, and the</div>
<div class="">allowable range for this is    <= 0X10FFFF  .</div>
<div class="">Indeed the top end of this  ( 0X100000 upwards ) is for “Private Use” only.</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">My understanding of these pieces of code:</div>
<div class=""><br class="">
</div>
<div class="">    for (i = 0; i < l; i++) {<br class="">
        if (p[i] == ' ')<br class="">
            valid_unistr = 2;   /* if a space occurs we treat this entry as a string */<br class="">
<br class="">
</div>
<div class=""><br class="">
</div>
<div class="">    if (valid_unistr == 2) {    /* a string with space(s) */<br class="">
        /* copy p to buf2, ignoring spaces */<br class="">
        for (q = buf2; *p != 0; p++)<br class="">
            if (*p != ' ')<br class="">
                *q++ = *p;<br class="">
        *q = 0;<br class="">
        gu->code = UNI_STRING;<br class="">
        gu->unicode_seq = xstrdup(buf2);<br class="">
<br class="">
</div>
<div class="">  … is that blocks of 4-6 hex digits are just copied verbatim, without calling   check_unicode_value  </div>
<div class="">so that  assert  is never actually encountered.</div>
<div class=""><br class="">
</div>
<div class="">Do you agree with this interpretation?</div>
<br class="">
<blockquote type="cite" class=""><br class="">
<br class="">
(from tounicode.c)<br class="">
static char *utf16be_str(long code)<br class="">
{<br class="">
  static char buf[SMALL_BUF_SIZE];<br class="">
  long v;<br class="">
  unsigned vh, vl;<br class="">
<br class="">
  assert(code >= 0);<br class="">
<br class="">
  if (code <= 0xFFFF)<br class="">
      sprintf(buf, "%04lX", code);<br class="">
  else {<br class="">
      v = code - 0x10000;<br class="">
      vh = v / 0x400 + 0xD800;<br class="">
      vl = v % 0x400 + 0xDC00;<br class="">
      sprintf(buf, "%04X%04X", vh, vl);<br class="">
  }<br class="">
  return buf;<br class="">
}<br class="">
<br class="">
Best,<br class="">
Akira<br class="">
</blockquote>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
Cheers,</div>
<div class=""><br class="">
</div>
<div class=""><span class="Apple-tab-span" style="white-space:pre"></span>Ross<br class="">
<br class="">
<div class=""><br class="">
Dr Ross Moore<br class="">
Mathematics Dept | 12 Wally’s Walk, 734<br class="">
Macquarie University, NSW 2109, Australia<br class="">
T: +61 2 9850 8955  |  F: +61 2 9850 8114<br class="">
M:+61 407 288 255  |  E: <a href="mailto:ross.moore@mq.edu.au" class="">ross.moore@mq.edu.au</a><br class="">
<br class="">
http://www.maths.mq.edu.au<br class="">
<br class="">
<span style="font-size: 12px; line-height: normal;"><a href="http://mq.edu.au/" target="_blank" style="font-size: 12px; line-height: normal;" class=""><span><br class="Apple-interchange-newline">
<span><img height="58" width="260" apple-inline="yes" id="1699404D-1486-4FB6-8668-69D69F8500D3" apple-width="yes" apple-height="yes" src="cid:image001.png@01D030BE.D37A46F0" class=""></span></span></a></span><br class="">
<br class="">
<br class="">
CRICOS Provider Number 00002J. Think before you print. <br class="">
Please consider the environment before printing this email.<br class="">
<br class="">
This message is intended for the addressee named and may <br class="">
contain confidential information. If you are not the intended <br class="">
recipient, please delete it and notify the sender. Views expressed <br class="">
in this message are those of the individual sender, and are not <br class="">
necessarily the views of Macquarie University.<br class="">
</div>
<br class="">
</div>
</body>
</html>