diff options
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps')
-rw-r--r-- | Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps b/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps new file mode 100644 index 00000000000..7e83cfdc6d3 --- /dev/null +++ b/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps @@ -0,0 +1,186 @@ +% Copyright (C) 2001-2012 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. +% +% Refer to licensing information at http://www.artifex.com or contact +% Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, +% CA 94903, U.S.A., +1(415)492-9861, for further information. +% + +% 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 + 2 index /FileType .knownget + {/WOFF eq} + {//false} ifelse + % It's not (currently) viable to load WOFF fonts "stripped", so we don't try + {.load_woff_for_cid exch copy exch pop} + { + .load_tt_font_stripped exch + copy % file <font> + QUIET not { + (Done.) = + } if + dup 3 1 roll % <font> file <font> + exch /File exch put % <font> + } ifelse + 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 + } { + (r) { file } .internalstopped + { + (Can't find the font file ) print = + /findfont cvx /undefinedfilename signalerror + } + { + dup .filename { + currentdict exch /Path exch put + } if + closefile + } ifelse + } 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 + +/ValidFileTypes +<< + /TrueType 0 + /WOFF 0 +>> def + +/IsMyRecord % <raw_record> -> <raw_record> bool +{ + dup type /dicttype eq { dup /FileType .knownget { //ValidFileTypes exch known } { //false } ifelse } { //false } ifelse +} bind def + +currentdict /ValidFileTypes undef + +/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 |