% Copyright (C) 2000 artofcode LLC. 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,v 1.9 2005/04/29 16:58:04 ray Exp $ % 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 % GenerateCIDMap { 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 /load_sfnts % load_sfnts { % Read the True Type file from the path /Path, and buld /sfnts, % skipping glyf and loca. dup /Path get % (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 % file file 3 1 roll % file file 1 index /SubfontID .knownget not { 0 } if % file file SubfontID .load_tt_font_stripped exch copy % file QUIET not { (Done.) = } if dup 3 1 roll % file exch /File exch put % dup dup /CIDSystemInfo get /Ordering get (.) % () () 2 index /Decoding get =string cvs % () () () concatstrings concatstrings cvn /Decoding exch put % //ChooseDecoding exec % //GenerateCIDMap exec % } bind def %-----------TrueType-specific methods for category redefinition : ----------- /RefinePath % RefinePath { 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 % complete_FAPI_Font { 1 index /CIDFontType 2 put % Other types are not emulated yet. //super.complete_instance exec //RefinePath exec //load_sfnts exec } bind def /IsMyRecord % -> bool { dup type /dicttype eq { dup /FileType .knownget { /TrueType eq } { false } ifelse } { false } ifelse } bind def /IsActive % IsActive { pop true } bind def /CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin /GetCSI //TranslateCSI def /IsActive //IsActive def /MakeInstance % MakeInstance { //CIDFontOptions //complete_instance exec 2 copy //GetSize exec } bind def currentdict end def % Redefine the /CIDFont category : 4 dict begin /CategoryName /CIDFont def /IsMapFileOptional true def /VerifyMap { pop } bind def /PreprocessRecord % PreprocessRecord { //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