summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps')
-rw-r--r--Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps186
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