[XeTeX] r34804 fails to typeset a vertical Japanese, for which r34711 works fine

Akira Kakuto kakuto at fuk.kindai.ac.jp
Mon Aug 4 02:18:38 CEST 2014


Hi Jiang,

> Anyone feel like trying out the following patches?
> 
> https://gist.github.com/jjgod/0d4b6339d761a5423f82
> 
> Patch 1 will fix the ToUnicode generation for all non-subst glyphs in
> a non-XeTeX generated dvi. In our case, non-subst glyphs are the
> glyphs that are *NOT* changed by applying OpenType vertical layout
> features. To fix this I merely applied the same strategy I used to fix
> XeTeX generated PDF documents. It's a small change and should be safe
> to commit.
> 
> In patch 2 I tried out a more interesting approach and it supersedes
> the efforts in patch 1: this patch utilize the cmap we provided in the
> map file to do CID -> Unicode lookup. In your test case the cmap is
> UniSourceHanSansJP-UTF16-V.
> 
> To do this reverse lookup I have to extend CMap structure a little bit
> to store reverse mapping information, with that it's quite easy to
> simply generate ToUnicode stream with all used cids. The commit
> message has more details.
> 
> Since these patches are relatively experimental I'm hesitate to commit
> them right away, would be nice if any of you can try it out or review
> them. With my limited testing it doesn't show any problem and we can
> produce perfectly copyable PDF from the sample.dvi in this test case.

Hi Jiang,

Please commit both of patch1 and patch2!! I think that is great.
Users of W32TeX know that it is always experimental.

BTW, there is late declaration of a variable in c99
around line 1123 in tt_cmap.c:

      for (j = 0; j < 8; j++) {
        unsigned int cid;
        gid = 8 * i + j;

        if (!is_used_char2(used_glyphs, gid))
          continue;

        cid = cff_charsets_lookup_inverse(cffont, gid);
        int ch = CMap_reverse_decode(cmap_loaded, cid);

--->

      for (j = 0; j < 8; j++) {
        unsigned int cid;
        int ch;
        gid = 8 * i + j;

        if (!is_used_char2(used_glyphs, gid))
          continue;

        cid = cff_charsets_lookup_inverse(cffont, gid);
        ch = CMap_reverse_decode(cmap_loaded, cid);

Thanks,
Akira




More information about the XeTeX mailing list