diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
commit | e463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (patch) | |
tree | d5e9f57c28f026cb21de3bd77cc10cd7f64aaa85 /sys/lib/ghostscript/gs_typ32.ps | |
parent | b41b9034225ab3e49980d9de55c141011b6383b0 (diff) |
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/gs_typ32.ps')
-rwxr-xr-x | sys/lib/ghostscript/gs_typ32.ps | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/gs_typ32.ps b/sys/lib/ghostscript/gs_typ32.ps new file mode 100755 index 000000000..e57a8d2c5 --- /dev/null +++ b/sys/lib/ghostscript/gs_typ32.ps @@ -0,0 +1,127 @@ +% Copyright (C) 1997 Aladdin Enterprises. 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_typ32.ps,v 1.6 2002/06/02 12:03:28 mpsuzuki 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 |