ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Arthur Reutenauer <arthur.reutenauer@normalesup.org>
To: Mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Not embedding CID fonts (was: Re: What's the ps_name ...)
Date: Sat, 29 Dec 2007 23:26:12 +0100	[thread overview]
Message-ID: <20071229222611.GF30714@phare.normalesup.org> (raw)
In-Reply-To: <769ba7780712132026t5f4b54adk1b57ddcde338bfc8@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2959 bytes --]

	Hello Zhichu and all,

> Thanks Hans. Do you have any comments about how to now embed the standard
> Adobe CJK fonts?

  I made experiments with pdfTeX in order to produce a file with Chinese
text without embedding the font.  It actually works---with minor
inconvenients---and I attach a small example file which uses
AdobeMingStd-Light.  It should of course be possible to adapt it for the
Adobe font for Simplified Chinese (AdobeSongStd-Light), as well as for
Japanese or Korean.

  Here is how you should use it:

  - Produce the TFM files for the subfonts of AdobeMingStd-Light.  You
    should call them uni-adobe-ming-XX.tfm where XX is the number of the
    Unicode row (the range from U+XX00 to U+XXFF);  I guess you know how
    to do that.

  - Find a way to deactivate mktexpk somehow: the point is that my
    macros emulate the subfonts in PDF directly, but pdfTeX doesn't know
    that and wants to find the glyphs somewhere.  Since they're not
    present anywhere, he calls mktexpk as a last resort, but that fails
    as well and it's only a waste of time.  So you need to simply
    deactivate mktexpk (I hope it's not an inconvenience for you and you
    don't rely on PK generation otherwise).  When running on a shell on
    Unix I can say "export MKTEXPK=echo" (and the call to mktexpk is
    replaced by a simple echo).  There may be options in mktex.cnf or
    mktex.opt which would enable you to set things
    platform-independently, but I couldn't find anything useful.

    On the other hand, if you can't do that, it also works but you waste
    some time in the process.

  The central idea of my macros is to use CIDFont's, a concept
introduced by Adobe for its CJKV fonts, as I'm sure you know.  The point
is that all of the standard Adobe CJKV fonts are CIDFont's and use a
special kind of encoding called CID encoding, which is quite distinct
from encoding based on glyph names as used by Type 1 fonts.  I think
this is why your attempts by using .enc files didn't work; I strongly
suspect it's not possible at all to use .enc files with CIDFont's, and
you have to use the equivalent concept for CID encoding, that is CMap.
This is what I have done here, by embedding the appropriate CMap for
each subfont.  Since it's an example file, I only wrote the CMap's for
the Unicode rows U+51XX, U+66XX and U+67XX, so you would have to enhance
it if you want to use the other Chinese characters.  It's easy to do,
but it's a further inconvenience of this approach, since it means you
have to embed a CMap which weigh 2 to 5 KB for each Unicode row (that
is, up to 256 characters).

  I hope it works for you.  I also attach the output by pdfTeX on my machine.

  Obviously this is somewhat cumbersome in pdfTeX and would be much
easier to do with LuaTeX (where you don't need subfonts at all), but I
didn't look into that.  XeTeX wouldn't work the same way since you can't
write PDF objects directly the way I've done it.

	Arthur

[-- Attachment #2: cidfont.tex --]
[-- Type: text/x-tex, Size: 18969 bytes --]

% engine=pdftex

% Example ConTeXt macros for using Adobe Reader's default Traditional Chinese
% font AdobeMingStd-Light without embedding it in the PDF file.
% © A. Reutenauer, December 2007.  Brest, Paris, Strasbourg, Opio.
% This file is distributed under the terms of the WTF Public License
% (http://sam.zoy.org/wtfpl/)

% It must be used with pdfTeX: the macros very strongly depends on some pdfTeX
% primitives.  They would probably work with LuaTeX which inherits them,
% although it's a complete waste of resources (LuaTeX doesn't need subfonts at
% all, which are used heavily here).  They would, on the other hand, most
% certainly *not* work with XeTeX (and would be just as pointless as with
% LuaTeX).

% The file is UTF-8-encoded!
\enableregime[utf8]

% We use the chi-00 module with slight modifications in one macro, at the very
% end of that file, before the text starts.
\usemodule[chi-00]

% This overrides the default ConTeXt settings and defines the “template” for
% TFM fonts: "uni-adobe-ming-XX" (where XX is the Unicode “row” number).
% We need to first produce the corresponding TFM files somehow.
\definefontsynonym [ChineseRegular]    [uni-adobe-ming-][encoding=cjk-uni]

% Counters for PDF object numbers (this is where the fun begins!)
\newcount\cidfontobj
\newcount\subfontobj
\newcount\fontdescobj
\newcount\cmapobj

% Three \if's: true/false whether the subfont has already been embedded or not.
% For the moment we only support 3 Unicode rows: U+51XX, U+66XX and U+67XX
% 
% Yes, this is completely ad-hoc code :-)  It's only meant as a proof of
% concept.  It doesn't even know about hex digits, by the way: in TeX's mind,
% 51, 66 and 67 are actually decimal number (which is why I used U+51E0 几 in
% the sample text, and not the—in my opinion more correct—character U+5E7E 幾).
%
% But of course, it can be improved an enhanced a lot.
\newif\ifli\lifalse
\newif\iflxvi\lxvifalse
\newif\iflxvii\lxviifalse

% --- The actual font data ---

% -- Global things --

% First we need a CIDFont dictionary for AdobeStdMing-Light.
% It only needs to be written once to the PDF file, and it consists of two PDF
% objects, so here goes:

% First the font descriptor for the CIDFont ...
\immediate\pdfobj {
<<
  /Type /FontDescriptor
  /FontName /AdobeMingStd-Light
  /Flags 12
  /FontBBox [ 0 -120 1000 880 ]
  /ItalicAngle 0
  /Ascent 880
  /Descent 120
  /AvgWidth 1000
  /MaxWidth 1000
  /MissingWidth 1000
>>
}
\fontdescobj\pdflastobj

% ... then the actual CIDFont dictionary.
% \fontdescobj has just been defined, and we set the counter \cidfontobj in
% passing; it will be used by every subfont in the PDF file.
\immediate\pdfobj {
<<
  /Type /Font
  /Subtype /CIDFontType0
  /BaseFont /AdobeMingStd-Light
  /CIDSystemInfo
  <<
    /Registry (Adobe)
    /Ordering (CNS1)
    /Supplement 5
  >>
  /FontDescriptor \the\fontdescobj\space 0 R
>>
}
\cidfontobj\pdflastobj

% -- “Local” things --

% Now, we prepare macros to write the subfont to the file; again, we need two
% PDF objects referring to one another.

% This write a CMap object, then a Font object for each subfont.  The actual
% data is split into three different macros for legibility: again, we only know
% about three different subfonts (for Unicode rows 0x51, 0x66 or 0x67 ... if
% the argument is anything else, the behaviour is “undefined” :-)
%
% Each of these three macros call \writesubfontdict which we define afterwards.
\def\writesubfontobj#1{%
  \ifnum#1=51
    \ifli\else\litrue\writesubfontli\fi
  \else\ifnum#1=66
    \iflxvi\else\lxvitrue\writesubfontlxvi\fi
  \else\ifnum#1=67
    \iflxvii\else\lxviitrue\writesubfontlxvii\fi
  \fi\fi\fi % To close 3 \if's
}

% Now the actual CMap data for Unicode chars U+51XX ...
\def\writesubfontli{%
  \immediate\pdfobj stream
  attr {
    /Type /CMap /CMapName /TeXCNS-51-H
    /CIDSystemInfo << /Registry (Adobe) /Ordering (CNS1) /Supplement 5 >>
    /WMode 0
  }
  {
    /CIDInit /ProcSet findresource begin
    12 dict begin
    begincmap
    /CIDSystemInfo 3 dict dup begin
      /Registry (Adobe) def
      /Ordering (CNS1) def
      /Supplement 3 def
    end def
    /CMapName /TeXCNS-51-H def
    /CMapVersion 0.001 def
    /CMapType 1 def
    /WMode 0 def
    1 begincodespacerange
      <00> <FF>
    endcodespacerange
    10 begincidrange
    <00> <00> 4355
    <01> <01> 16434
    <02> <02> 4359
    <03> <03> 10366
    <04> <04> 4354
    <05> <05> 4362
    <06> <07> 10369
    <08> <09> 4360
    <0a> <0a> 10376
    <0b> <0c> 10373
    endcidrange
    100 begincidrange
    <0d> <0d> 14790
    <0e> <0e> 16436
    <10> <10> 4749
    <11> <11> 11012
    <12> <12> 4746
    <13> <13> 11009
    <14> <14> 4748
    <15> <15> 4750
    <17> <17> 11010
    <18> <18> 4747
    <1a> <1a> 11011
    <1c> <1c> 11008
    <1f> <1f> 5045
    <20> <20> 11582
    <21> <21> 5046
    <22> <22> 11580
    <24> <24> 11581
    <25> <25> 11579
    <26> <26> 11578
    <29> <29> 11583
    <2a> <2a> 5044
    <2b> <2b> 14766
    <2d> <2e> 12047
    <30> <30> 10367
    <31> <31> 12046
    <32> <32> 5047
    <33> <33> 5493
    <34> <35> 12410
    <37> <38> 5736
    <39> <39> 12998
    <3a> <3a> 12997
    <3b> <3b> 5820
    <3c> <3c> 5819
    <3d> <3d> 13326
    <3f> <3f> 604
    <40> <40> 628
    <41> <41> 682
    <43> <43> 681
    <44> <44> 771
    <45> <45> 770
    <46> <46> 906
    <47> <47> 905
    <48> <48> 907
    <49> <49> 904
    <4b> <4b> 1076
    <4c> <4c> 1075
    <4d> <4d> 1077
    <52> <52> 1349
    <54> <54> 1348
    <55> <55> 1350
    <56> <56> 17306
    <57> <57> 1724
    <59> <59> 281
    <5a> <5a> 7218
    <5b> <5b> 282
    <5c> <5c> 2575
    <5d> <5d> 284
    <5e> <5e> 283
    <5f> <5f> 8381
    <60> <60> 16442
    <61> <61> 285
    <62> <62> 3978
    <63> <63> 286
    <65> <65> 605
    <67> <67> 683
    <68> <68> 908
    <69> <69> 1351
    <6a> <6a> 16444
    <6b> <6b> 606
    <6c> <6c> 686
    <6d> <6e> 684
    <71> <71> 909
    <74> <74> 17727
    <75> <75> 1078
    <76> <76> 1353
    <77> <77> 1352
    <78> <78> 1354
    <79> <79> 15054
    <7c> <7c> 2130
    <80> <80> 4751
    <82> <82> 541
    <86> <86> 17311
    <87> <87> 6009
    <88> <88> 14006
    <89> <8a> 772
    <8d> <8d> 910
    <8f> <8f> 6195
    <91> <91> 1726
    <92> <92> 1725
    <93> <93> 7220
    <94> <94> 7219
    <95> <95> 2576
    <96> <96> 542
    <97> <97> 687
    <98> <98> 6016
    <9a> <9a> 16035
    <9c> <9c> 17728
    <9e> <9e> 6416
    <a0> <a0> 1727
    <a2> <a2> 2133
    endcidrange
    58 begincidrange
    <a4> <a5> 2131
    <a7> <a7> 16038
    <a8> <a8> 14810
    <aa> <aa> 4752
    <ab> <ab> 543
    <ac> <ac> 774
    <b0> <b0> 911
    <b1> <b1> 6086
    <b2> <b2> 16456
    <b3> <b3> 16465
    <b4> <b4> 15740
    <b5> <b5> 16402
    <b6> <b7> 1079
    <b8> <b8> 16457
    <b9> <b9> 6196
    <bc> <bc> 6417
    <bd> <bd> 1355
    <be> <be> 6418
    <c3> <c3> 14811
    <c4> <c5> 7222
    <c6> <c6> 2136
    <c7> <c7> 16938
    <c8> <c8> 7224
    <c9> <c9> 16459
    <ca> <ca> 7221
    <cb> <cb> 2137
    <cc> <cc> 2135
    <cd> <cd> 2134
    <ce> <ce> 7225
    <cf> <cf> 16460
    <d0> <d0> 7762
    <d1> <d1> 16461
    <d2> <d2> 15789
    <d3> <d3> 16463
    <d4> <d4> 8382
    <d7> <d7> 9077
    <d8> <d8> 9762
    <db> <db> 17818
    <dc> <dc> 4363
    <dd> <dd> 4753
    <de> <de> 11013
    <df> <df> 16975
    <e0> <e0> 607
    <e1> <e1> 621
    <e2> <e2> 16466
    <e4> <e4> 17729
    <ed> <ed> 16468
    <f0> <f0> 2577
    <f1> <f1> 3057
    <f3> <f3> 3979
    <f4> <f4> 16760
    <f5> <f5> 5998
    <f6> <f6> 688
    <f8> <f8> 777
    <f9> <fa> 775
    <fc> <fc> 17819
    <fd> <fd> 1356
    <fe> <fe> 16138
    endcidrange
    endcmap
    CMapName currentdict /CMap defineresource pop
    end
    end
  }
  \global\cmapobj\pdflastobj
  \writesubfontdict
}

% U+66XX ...
\def\writesubfontlxvi{%
  \immediate\pdfobj stream
  attr {
    /Type /CMap /CMapName /TeXCNS-66-H
    /CIDSystemInfo << /Registry (Adobe) /Ordering (CNS1) /Supplement 5 >>
    /WMode 0
  }
  {
    /CIDInit /ProcSet findresource begin
    12 dict begin
    begincmap
    /CIDSystemInfo 3 dict dup begin
      /Registry (Adobe) def
      /Ordering (CNS1) def
      /Supplement 3 def
    end def
    /CMapName /TeXCNS-66-H def
    /CMapVersion 0.001 def
    /CMapType 1 def
    /WMode 0 def
    1 begincodespacerange
      <00> <FF>
    endcodespacerange
    69 begincidrange
    <00> <00> 1533
    <02> <02> 1531
    <03> <03> 6570
    <04> <04> 6566
    <05> <05> 6573
    <06> <06> 1530
    <07> <07> 1537
    <08> <08> 6568
    <09> <09> 6564
    <0a> <0a> 1536
    <0b> <0b> 6571
    <0c> <0c> 1529
    <0d> <0d> 6572
    <0e> <0e> 1532
    <0f> <0f> 1534
    <10> <10> 6576
    <11> <11> 6575
    <12> <12> 6567
    <13> <13> 1528
    <14> <14> 1527
    <15> <15> 1535
    <18> <18> 16817
    <1c> <1c> 6921
    <1d> <1d> 6927
    <1e> <1e> 14995
    <1f> <1f> 1867
    <20> <20> 1864
    <21> <21> 6918
    <22> <22> 6923
    <23> <23> 17045
    <24> <24> 1870
    <25> <25> 1862
    <26> <26> 6922
    <27> <27> 1865
    <28> <28> 1868
    <2b> <2b> 6925
    <2d> <2d> 1863
    <2e> <2e> 6930
    <2f> <2f> 1866
    <30> <30> 14989
    <31> <31> 1869
    <32> <32> 6919
    <33> <33> 6924
    <34> <34> 6928
    <35> <35> 6920
    <36> <36> 6917
    <39> <39> 6929
    <3a> <3a> 6926
    <41> <41> 2274
    <42> <42> 2267
    <43> <43> 2270
    <44> <44> 16820
    <45> <45> 2273
    <47> <47> 7366
    <48> <48> 15769
    <49> <49> 2268
    <4a> <4a> 7364
    <4b> <4b> 16823
    <4c> <4c> 2272
    <4f> <4f> 2269
    <51> <51> 7367
    <52> <52> 2271
    <53> <53> 17995
    <57> <57> 16539
    <59> <59> 7953
    <5a> <5a> 2761
    <5b> <5b> 7952
    <5c> <5c> 7954
    <5d> <5d> 2760
    endcidrange
    100 begincidrange
    <5e> <5e> 2765
    <5f> <5f> 7365
    <61> <61> 7951
    <62> <62> 7955
    <63> <63> 14992
    <64> <64> 2762
    <65> <65> 7950
    <66> <66> 2764
    <67> <67> 16825
    <68> <68> 2763
    <6a> <6a> 8575
    <6b> <6b> 14987
    <6c> <6c> 8570
    <6e> <6e> 3191
    <6f> <6f> 3195
    <70> <70> 3192
    <71> <71> 8573
    <72> <72> 8576
    <73> <73> 16827
    <74> <74> 3193
    <76> <76> 3194
    <77> <77> 3199
    <78> <78> 9236
    <79> <79> 8574
    <7a> <7a> 3197
    <7b> <7b> 8571
    <7c> <7c> 8569
    <7d> <7d> 18075
    <7e> <7e> 3198
    <80> <80> 8572
    <84> <84> 3635
    <85> <85> 16738
    <86> <86> 9228
    <87> <88> 3632
    <89> <89> 3631
    <8a> <8a> 9233
    <8b> <8b> 9232
    <8c> <8c> 9229
    <8d> <8d> 3637
    <8e> <8e> 14985
    <90> <90> 9231
    <91> <91> 3196
    <92> <92> 17997
    <94> <94> 9235
    <95> <95> 9230
    <96> <96> 3634
    <97> <97> 3630
    <98> <98> 3636
    <99> <99> 9234
    <9a> <9a> 15677
    <9d> <9d> 4077
    <9f> <9f> 9912
    <a0> <a0> 9911
    <a1> <a1> 9910
    <a2> <a2> 4075
    <a4> <a4> 16570
    <a8> <a8> 4076
    <a9> <a9> 10489
    <aa> <aa> 10492
    <ab> <ab> 4466
    <ad> <ad> 18760
    <ae> <ae> 4465
    <af> <af> 10493
    <b0> <b0> 10488
    <b1> <b1> 4468
    <b2> <b2> 10490
    <b3> <b3> 16565
    <b4> <b4> 4467
    <b5> <b5> 10487
    <b6> <b6> 15891
    <b7> <b7> 10491
    <b8> <b8> 4812
    <b9> <b9> 4809
    <ba> <ba> 11109
    <bb> <bb> 11108
    <bd> <bd> 11107
    <be> <be> 11102
    <bf> <bf> 15770
    <c0> <c0> 11103
    <c4> <c4> 4810
    <c6> <c6> 4807
    <c7> <c7> 4811
    <c8> <c8> 11101
    <c9> <c9> 4808
    <ca> <cb> 11104
    <cc> <cc> 11110
    <cd> <cd> 16568
    <ce> <ce> 14967
    <cf> <cf> 11106
    <d2> <d2> 11634
    <d6> <d6> 5092
    <d8> <d8> 12083
    <d9> <d9> 5091
    <da> <db> 12081
    <dc> <dc> 5338
    <dd> <dd> 5509
    <de> <de> 12441
    <e0> <e0> 5508
    <e3> <e4> 12762
    <e6> <e6> 5657
    endcidrange
    15 begincidrange
    <e8> <e8> 12761
    <e9> <e9> 5749
    <eb> <eb> 13341
    <ec> <ec> 5884
    <ed> <ee> 13445
    <f0> <f0> 731
    <f1> <f1> 16004
    <f2> <f3> 988
    <f4> <f4> 1211
    <f6> <f6> 6577
    <f7> <f7> 1871
    <f8> <f8> 2275
    <f9> <f9> 2766
    <fc> <fc> 2591
    <fe> <ff> 3200
    endcidrange
    endcmap
    CMapName currentdict /CMap defineresource pop
    end
    end
  }
  \global\cmapobj\pdflastobj
  \writesubfontdict
}

% And U+67XX !
\def\writesubfontlxvii{%
  \immediate\pdfobj stream
  attr {
    /Type /CMap /CMapName /TeXCNS-67-H
    /CIDSystemInfo << /Registry (Adobe) /Ordering (CNS1) /Supplement 5 >>
    /WMode 0
  }
  {
    /CIDInit /ProcSet findresource begin
    12 dict begin
    begincmap
    /CIDSystemInfo 3 dict dup begin
      /Registry (Adobe) def
      /Ordering (CNS1) def
      /Supplement 3 def
    end def
    /CMapName /TeXCNS-67-H def
    /CMapVersion 0.001 def
    /CMapType 1 def
    /WMode 0 def
    1 begincodespacerange
      <00> <FF>
    endcodespacerange
    85 begincidrange
    <00> <00> 3056
    <01> <01> 8577
    <02> <02> 16836
    <03> <03> 3638
    <04> <04> 9914
    <05> <05> 9913
    <08> <08> 732
    <09> <09> 990
    <0a> <0a> 6578
    <0b> <0b> 1539
    <0c> <0c> 16354
    <0d> <0d> 1538
    <0e> <0e> 15777
    <0f> <10> 6931
    <12> <13> 7368
    <14> <15> 2276
    <16> <16> 17999
    <17> <17> 2278
    <18> <18> 7956
    <1b> <1b> 2768
    <1d> <1d> 3203
    <1e> <1e> 15755
    <1f> <1f> 3202
    <20> <20> 9237
    <21> <21> 9506
    <22> <22> 9915
    <23> <23> 11111
    <25> <25> 14239
    <26> <26> 5339
    <27> <27> 5658
    <28> <28> 733
    <2a> <2b> 842
    <2c> <2c> 841
    <2d> <2d> 844
    <2e> <2e> 840
    <31> <31> 993
    <33> <33> 6144
    <34> <34> 992
    <35> <35> 994
    <36> <36> 15937
    <38> <38> 6139
    <39> <39> 6138
    <3a> <3a> 6141
    <3b> <3b> 6140
    <3c> <3c> 6143
    <3d> <3d> 991
    <3e> <3e> 6137
    <3f> <3f> 6142
    <44> <44> 16411
    <45> <45> 6307
    <46> <46> 1221
    <47> <47> 6308
    <48> <48> 6312
    <49> <49> 1220
    <4b> <4b> 6316
    <4c> <4c> 6311
    <4d> <4d> 6314
    <4e> <51> 1213
    <53> <53> 1223
    <55> <55> 6310
    <56> <56> 1218
    <57> <57> 1224
    <59> <59> 6309
    <5a> <5a> 6315
    <5c> <5c> 1217
    <5d> <5d> 6313
    <5e> <5e> 1219
    <5f> <5f> 1212
    <60> <60> 1222
    <61> <61> 15718
    <62> <62> 16843
    <67> <67> 16842
    <6a> <6a> 1560
    <6c> <6c> 6580
    <6d> <6d> 1540
    <6f> <70> 1550
    <71> <71> 1543
    <72> <72> 1561
    <73> <73> 1545
    <74> <74> 6588
    <75> <75> 1556
    <76> <76> 6583
    <77> <77> 1546
    <78> <79> 6598
    <7a> <7a> 6591
    endcidrange
    100 begincidrange
    <7b> <7b> 6584
    <7c> <7c> 1559
    <7d> <7d> 6596
    <7e> <7e> 1554
    <7f> <7f> 1552
    <81> <81> 6597
    <83> <83> 6595
    <84> <84> 6587
    <85> <85> 6579
    <86> <86> 6586
    <87> <87> 1547
    <89> <89> 1553
    <8b> <8b> 1541
    <8c> <8c> 6590
    <8d> <8d> 6589
    <8e> <8e> 6581
    <8f> <8f> 18113
    <90> <90> 1555
    <91> <91> 6593
    <92> <92> 6582
    <93> <93> 1558
    <94> <94> 6600
    <95> <95> 1542
    <97> <97> 1549
    <98> <98> 6585
    <99> <99> 6594
    <9a> <9a> 1557
    <9c> <9c> 1544
    <9d> <9d> 1548
    <9f> <9f> 6592
    <a0> <a0> 15738
    <a4> <a4> 18001
    <ac> <ac> 16867
    <ae> <ae> 6964
    <af> <af> 1879
    <b0> <b0> 1892
    <b1> <b1> 16884
    <b2> <b2> 6959
    <b3> <b3> 6949
    <b4> <b4> 1885
    <b5> <b5> 6947
    <b6> <b6> 1878
    <b7> <b7> 6942
    <b8> <b8> 1888
    <b9> <b9> 6955
    <ba> <ba> 6936
    <bb> <bb> 6938
    <bf> <bf> 14330
    <c0> <c0> 6941
    <c1> <c1> 6933
    <c2> <c2> 6954
    <c3> <c3> 6970
    <c4> <c4> 1883
    <c5> <c5> 6943
    <c6> <c6> 6961
    <c8> <c8> 6935
    <c9> <ca> 6968
    <cb> <cb> 6972
    <cc> <cc> 6963
    <cd> <cd> 6948
    <ce> <ce> 6956
    <cf> <cf> 1889
    <d0> <d0> 1876
    <d1> <d1> 1884
    <d2> <d2> 1896
    <d3> <d3> 1873
    <d4> <d4> 1875
    <d6> <d6> 15192
    <d7> <d7> 16846
    <d8> <d8> 6940
    <d9> <d9> 1893
    <da> <da> 1886
    <db> <db> 6966
    <dc> <dc> 6937
    <dd> <dd> 1895
    <de> <de> 1890
    <df> <df> 6946
    <e2> <e2> 1894
    <e3> <e3> 6953
    <e4> <e4> 6945
    <e5> <e5> 1887
    <e6> <e6> 6965
    <e7> <e7> 6957
    <e9> <e9> 1881
    <ea> <ea> 6971
    <eb> <eb> 6944
    <ec> <ec> 1877
    <ed> <ed> 6962
    <ee> <ee> 6952
    <ef> <ef> 1882
    <f0> <f0> 6958
    <f1> <f1> 1874
    <f2> <f2> 6934
    <f3> <f3> 1891
    <f4> <f4> 2293
    <f5> <f5> 1880
    <f6> <f6> 6951
    <f7> <f7> 6950
    <f8> <f8> 6939
    <f9> <f9> 14742
    endcidrange
    4 begincidrange
    <fa> <fa> 6967
    <fc> <fc> 6960
    <fe> <fe> 17749
    <ff> <ff> 1872
    endcidrange
    endcmap
    CMapName currentdict /CMap defineresource pop
    end
    end
  }
  \global\cmapobj\pdflastobj
  \writesubfontdict
}

% Finally, this writes a subfont dictionary to the PDF file.  It is a template
% that refers to both the global CIDFont object (\cidfontobj) and the local CMap
% object just defined (\cmapobj).
\def\writesubfontdict{%
  \immediate\pdfobj useobjnum \subfontobj {
    <<
      /Type /Font
      /Subtype /Type0
      /BaseFont /AdobeMingStd-Light
      /Encoding \the\cmapobj\space 0 R
      /DescendantFonts [ \the\cidfontobj\space 0 R ]
    >>
  }
}

% --- End of font data ---

% And now, the macro that actually writes a character to the file.
%
% It's a shameless plug from font-chi.tex, and therefore (very) strongly
% depends on all of the other macros in font-chi.tex.  Only the fore-to-last
% two lines are different: they call \writesubfontobj with an appropriate
% setting of \subfontobj; in that context, the subfont is well defined, and we
% need to output the PDF object corresponding to that subfont if it hasn't
% already been written to the file.
\unexpanded\def\unicodeglyph#1#2%
  {\begingroup
   \getvalue{@@\currentucharmapping\strippedcsname\uchar}{#1}{#2}
   \bodyfontsize\unicodescale\bodyfontsize
   \font\unicodefont=\truefontname{\doifelsefontsynonym{\unicodestyle
     \unicodeone}\empty\truefontname\unicodestyle\unicodeone}
      at \currentfontscale\bodyfontsize
   \unicodestrut
   \unicodefont\unicodecharcommand{\char\unicodetwo\relax}%
   \subfontobj=\pdffontobjnum\unicodefont
   \writesubfontobj\unicodeone
   \endgroup}

% That's all, folks!  Now we can write text from the three Unicode rows we know
% about.  That's not much, admittedly ;-)

\starttext

明月几時有

\stoptext

[-- Attachment #3: cidfont.pdf --]
[-- Type: application/pdf, Size: 24039 bytes --]

[-- Attachment #4: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  parent reply	other threads:[~2007-12-29 22:26 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-10 15:58 What's the ps_name of AdobeMingStd-Light? Zhichu Chen
2007-12-10 16:05 ` Wolfgang Schuster
2007-12-10 16:23   ` Zhichu Chen
2007-12-10 17:19     ` Arthur Reutenauer
2007-12-10 17:46       ` Taco Hoekwater
2007-12-10 17:56         ` Wolfgang Schuster
2007-12-10 18:32           ` Taco Hoekwater
2007-12-10 18:56           ` Hans Hagen
2007-12-11  1:08             ` Zhichu Chen
2007-12-11 12:59             ` Wolfgang Schuster
2007-12-11 13:03               ` Hans Hagen
2007-12-11 14:29               ` Taco Hoekwater
2007-12-11 16:03                 ` Wolfgang Schuster
2007-12-11 16:21                   ` Hans Hagen
2007-12-12 17:32                     ` Wolfgang Schuster
2007-12-12 21:28                       ` Hans Hagen
2007-12-13 10:46                         ` Wolfgang Schuster
2007-12-13 10:50                           ` Hans Hagen
2007-12-13 10:59                             ` Wolfgang Schuster
2007-12-13 11:14                               ` Zhichu Chen
2007-12-13 11:17                                 ` Wolfgang Schuster
2007-12-14  4:24                                   ` Zhichu Chen
2007-12-14  8:10                                     ` Hans Hagen
2007-12-14 10:24                                       ` Wolfgang Schuster
2007-12-17  2:42                                         ` Zhichu Chen
2007-12-17  8:17                                           ` Hans Hagen
2007-12-13 12:25                                 ` Hans Hagen
2007-12-14  4:26                                   ` Zhichu Chen
2007-12-14  8:03                                     ` Hans Hagen
2007-12-17  2:30                                       ` Zhichu Chen
2007-12-17  7:48                                         ` Wolfgang Schuster
2007-12-29 22:26                                     ` Arthur Reutenauer [this message]
2007-12-30 22:46                                       ` Not embedding CID fonts Hans Hagen
2007-12-31 12:50                                       ` Not embedding CID fonts (was: Re: What's the ps_name ...) Martin Schröder
2007-12-31 20:42                                         ` Arthur Reutenauer
2007-12-10 18:04     ` What's the ps_name of AdobeMingStd-Light? Wolfgang Schuster
2007-12-10 18:28       ` Arthur Reutenauer
2007-12-10 16:37 ` Mojca Miklavec
2007-12-10 17:16   ` Zhichu Chen
2007-12-10 18:13   ` Wolfgang Schuster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071229222611.GF30714@phare.normalesup.org \
    --to=arthur.reutenauer@normalesup.org \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).