diff options
author | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
commit | 30dd9f517c9c093ff3319061647a4555264f7914 (patch) | |
tree | 0d7a349bf99be5a42cc9c5a80a30f3b7136c4ccd /Master/xemtex/gslib/gs_typ32.ps | |
parent | 08ab8dce83f53b0f915cb66a37bbc8478b22c307 (diff) |
trunk
git-svn-id: svn://tug.org/texlive/trunk@9 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/xemtex/gslib/gs_typ32.ps')
-rw-r--r-- | Master/xemtex/gslib/gs_typ32.ps | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/gs_typ32.ps b/Master/xemtex/gslib/gs_typ32.ps new file mode 100644 index 00000000000..b6cba9f5583 --- /dev/null +++ b/Master/xemtex/gslib/gs_typ32.ps @@ -0,0 +1,128 @@ +% Copyright (C) 1997 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: gs_typ32.ps,v 1.3.2.2.2.1 2003/04/12 14:02:38 giles Exp $ +% Initialization file for Type 32 fonts. + +% ------ Type 32 fonts ------ % + +% We need LanguageLevel 2 or higher in order to have defineresource. +languagelevel dup 2 .max .setlanguagelevel + +/BitmapFontInit mark + +/.makeglyph32 systemdict /.makeglyph32 get +systemdict /.makeglyph32 .undef + +/addglyph { % ([wx wy llx lly urx ury] | + % [w0x w0y llx lly urx ury w1x w1y vx vy]) + % <bitmap> <cid> <type32font> addglyph - + 1 index dup 2 index .removeglyphs + 22 string .makeglyph32 + % Stack: metrics bitmap cid font metstr + 3 index () ne { + % Use G4 encoding to compress the bitmap. + % Define a string large enough to hold the metrics, + % an uncompressed bitmap (worst case = 5x expansion), + % and the 2 RTC codes (3 bytes). + dup length 4 index length 5 mul add 10 add string + % Stack: metrics bitmap cid font metstr buffer + dup 0 3 index putinterval + dup 2 index length 1 index length 1 index sub getinterval + % Stack: metrics bitmap cid font metstr buffer bitbuf + mark /Columns 8 index dup 4 get exch 2 get sub + /Rows 10 index dup 5 get exch 3 get sub + /K -1 /EndOfBlock true /BlackIs1 true + .dicttomark /CCITTFaxEncode filter + % Stack: metrics bitmap cid font metstr buffer filter + dup 6 index writestring closefile + % Find the end of the data by scanning backwards for the RTC. + % There are 2 RTCs x 12 bits = 3 bytes to remove. + { + dup dup length 1 sub get 0 ne { exit } if + 0 1 index length 1 sub getinterval + } loop + 0 1 index length 3 sub getinterval + exch pop % metstr + } if + 1 index /CharStrings get 3 index 3 -1 roll put + pop pop pop pop +} obind + +/removeall { % <type32font> removeall - + 0 65535 2 index removeglyphs pop +} obind + +/.removeglyphs systemdict /.removeglyphs get +systemdict /.removeglyphs .undef + +/removeglyphs { % <cid_min> <cid_max> <type32font> .removeglyphs - + 3 copy .removeglyphs + dup /CharStrings get dup { + % Stack: cidmin cidmax font CharStrings cid bitmap + pop dup 5 index ge { dup 4 index le { 2 copy undef } if } if pop + } forall pop pop pop pop +} obind + +.dicttomark /ProcSet defineresource pop + +/.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse +.cidfonttypes begin + +4 % CIDFontType 4 = FontType 32 +{ dup /FontType 32 put + dup /CharStrings 20 dict put + 1 index exch .buildfont32 exch pop +} bind def + +end % .cidfonttypes + +% Define the BuildGlyph procedure. +% Since Type 32 fonts are indexed by CID, there is no BuildChar procedure. +% The name %Type32BuildGlyph is known to the interpreter. +(%Type32BuildGlyph) cvn { % <font> <cid> %Type32BuildGlyph - + 1 index /CharStrings get + % Stack: font cid CharStrings + dup 2 index .knownget + { exch pop } { 0 get } ifelse + % Stack: font cid cstr + dup //.getmetrics32 % use // because of .undef below + dup 14 gt { + 8 index 8 index 13 3 roll setcachedevice2 + } { + 4 index 4 index 9 3 roll setcachedevice + } ifelse + % Stack: font cid cstr w h nmetrics llx lly + 6 -1 roll 4 -1 roll 1 index length 1 index sub getinterval + % Stack: font cid w h llx lly bitstr + dup () eq { + pop pop pop + } { + mark /Columns 6 index /Rows 7 index /K -1 /EndOfBlock false /BlackIs1 true + .dicttomark /CCITTFaxDecode filter 4 index 4 index true + % Stack: font cid w h llx lly filter w h true + [ 1 0 0 1 11 -2 roll exch neg exch neg ] 5 -1 roll imagemask + } ifelse + pop pop pop pop +} bind def + +systemdict /.getmetrics32 .undef + +buildfontdict 32 /.buildfont32 cvx put + +32 dup /FontType defineresource pop + +.setlanguagelevel |