123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- % Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
- %
- % This software is provided AS-IS with no warranty, either express or
- % implied.
- %
- % This software is distributed under license and may not be copied,
- % modified or distributed except as expressly authorized under the terms
- % of the license contained in the file LICENSE in this distribution.
- %
- % For more information about licensing, please refer to
- % http://www.ghostscript.com/licensing/. For information on
- % commercial licensing, go to http://www.artifex.com/licensing/ or
- % contact Artifex Software, Inc., 101 Lucas Valley Road #110,
- % San Rafael, CA 94903, U.S.A., +1(415)492-9861.
-
- % $Id: gs_cidtt.ps 9834 2009-07-03 09:27:02Z ken $
- % Redefine CIDFont category with an emulation with True Type fonts.
-
- languagelevel 2 .setlanguagelevel
-
- 15 dict begin % a temporary dictionary for local binding.
-
- %------------------Copy the FontEmulationProcs here : -------------------
-
- /FontEmulationProcs /ProcSet findresource {
- def
- } forall
-
- currentdict /super.complete_instance currentdict /complete_instance get put
-
- %-------Auxiliary procedures for building CIDFontType 2 from TT file -----------
-
- /GenerateCIDMap % <font> GenerateCIDMap <font>
- { begin
- % Obtain the maximal CID :
- % This implementation doesn't check whether glyphs really present.
- Decoding /CIDCount get /CIDCount exch def
- % Prepare the CIDMap structure :
- /CIDMap [
- CIDCount 22000 le {
- CIDCount 2 mul string
- } {
- 44000 string
- CIDCount 44000 gt {
- % need three strings
- 44000 string % 22000 2 mul string
- CIDCount 44000 sub 2 mul string
- } {
- CIDCount 22000 sub 2 mul string
- } ifelse
- } ifelse
- ] def
- % Now fill it :
- Decoding TT_cmap SubstNWP GDBytes CIDMap .fillCIDMap
- currentdict end
- } bind def
-
- /GenerateIdentityCIDMap % <font> GenerateCIDMap <font>
- { begin
- /CIDMap [ 44000 string 44000 string 44000 string] def
- CIDMap .fillIdentityCIDMap
- currentdict end
- } bind def
-
- /load_sfnts % <FontDict> load_sfnts <FontDict>
- { % Read the True Type file from the path /Path, and buld /sfnts,
- % skipping glyf and loca.
- dup /Path get % <font> (path)
- QUIET not {
- (Loading a TT font from ) print dup print
- ( to emulate a CID font ) print 1 index /CIDFontName get =only ( ... ) print
- } if
- (r) file dup % <font> file file
- 3 1 roll % file <font> file
- 1 index /SubfontID .knownget not { 0 } if % file <font> file SubfontID
- .load_tt_font_stripped exch copy % file <font>
- QUIET not {
- (Done.) =
- } if
- dup 3 1 roll % <font> file <font>
- exch /File exch put % <font>
- dup dup /CIDSystemInfo get /Ordering get (.) % <font> () ()
- 2 index /Decoding get =string cvs % <font> () () ()
- concatstrings concatstrings cvn /Decoding exch put % <font>
- dup dup /CIDSystemInfo get /Ordering get (-WMode) % <font> <font> () ()
- concatstrings cvn /SubstCID
- 2 copy resourcestatus {
- pop pop
- findresource /subst_CID_on_WMode exch put % <font>
- } {
- pop pop pop
- } ifelse
- dup /Decoding get /Identity.Unicode eq {
- //ChooseDecoding exec % <font>
- //GenerateIdentityCIDMap exec % <font>
- } {
- //ChooseDecoding exec % <font>
- //GenerateCIDMap exec % <font>
- } ifelse
- } bind def
-
- %-----------TrueType-specific methods for category redefinition : -----------
-
- /RefinePath % <FontDict> RefinePath <FontDict>
- { dup begin
- Path .libfile {
- dup .filename {
- currentdict exch /Path exch put
- } if
- closefile
- } {
- (Can't find the font file ) print =
- /findfont cvx /undefinedfilename signalerror
- } ifelse
- end
- } bind def
-
- /complete_instance % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
- { 1 index /CIDFontType 2 put % Other types are not emulated yet.
- //super.complete_instance exec
- //RefinePath exec
- //load_sfnts exec
- } bind def
-
- /IsMyRecord % <raw_record> -> <raw_record> bool
- { dup type /dicttype eq { dup /FileType .knownget { /TrueType eq } { false } ifelse } { false } ifelse
- } bind def
-
- /IsActive % <record> IsActive <bool>
- { pop true
- } bind def
-
- /CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin
- /GetCSI //TranslateCSI def
- /IsActive //IsActive def
- /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
- { currentglobal 3 1 roll true setglobal
- //CIDFontOptions //complete_instance exec
- 2 copy //GetSize exec
- 4 3 roll setglobal
- } bind def
- currentdict end def
-
- % Redefine the /CIDFont category :
- 4 dict begin
- /CategoryName /CIDFont def
- /IsMapFileOptional true def
- /VerifyMap { pop } bind def
- /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
- { //IsMyRecord exec dup {
- pop dup /RecordVirtualMethods //CIDFontRecordVirtualMethods put
- true
- } if
- } bind def
- currentdict end
-
- /MappedCategoryRedefiner /ProcSet findresource /Redefine get exec
-
- end % the temporary dictionary for local binding.
-
- .setlanguagelevel
|