diff options
Diffstat (limited to 'sys/lib/ghostscript/mkcidfm.ps')
| -rwxr-xr-x | sys/lib/ghostscript/mkcidfm.ps | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/mkcidfm.ps b/sys/lib/ghostscript/mkcidfm.ps new file mode 100755 index 000000000..ae2d5025b --- /dev/null +++ b/sys/lib/ghostscript/mkcidfm.ps @@ -0,0 +1,359 @@ +% Copyright (C) 2004 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: mkcidfm.ps,v 1.1 2004/11/18 06:48:41 ghostgum Exp $ + +% Generate a cidfmap file for substituting CID fonts with TrueType +% fonts, based on fonts found in the directory FONTDIR. +% +% The directory FONTDIR is searched for fonts whose filename +% matches a Path in the cidsubs dictionary. +% Any matches are written out as a CID font substitution. +% +% For each fontname and alias in the fontaliases dictionary, +% write out each alias that matches a substituted font. +% Where multiple aliases are possible, use the first match. +% +% Note that the substitutions and aliases in this file were created +% by someone who doesn't understand Chinese, Japanese or Korean. +% The initial list contains only font files found in Windows XP. +% Please submit corrections and additions. +% +% Font filenames must match case. +% All font filenames are currently lower case. +% +% Usage: gswin32c -q -dBATCH -sFONTDIR=c:/windows/fonts +% -sCIDFMAP=c:/gs/cidfmap mkcidfm.ps + + +systemdict /FONTDIR known not { /FONTDIR (c:/windows/fonts) def } if + +systemdict /CIDFMAP known { CIDFMAP } { (%stdout) } ifelse +/cidfmap exch (w) file def + +% Directory separator as used by filenameforall +/dirsep (/) def + +% This dictionary contains a list of font substitutions. +% The first matching substitution in the array will be used. +/fontaliases +<< + % Traditional Chinese + /MSung-Light [ /MingLiU ] + /MSung-Medium [ /MingLiU ] + /MHei-Medium [ /MingLiU ] + /MKai-Medium [ /Arial-Unicode-MS /MingLiU ] + + % Simplified Chinese + /STSong-Light [ /SimSun ] + /STFangsong-Light [ /SimSun ] + /STHeiti-Regular [ /SimHei ] + /STKaiti-Regular [ /SimHei ] + + % Japanese + /Ryumin-Light [ /MS-Mincho ] + /Ryumin-Medium [ /MS-Mincho ] + /GothicBBB-Medium [ /MS-Gothic ] + /HeiseiMin-W3 [ /MS-Mincho ] + /HeiseiKakuGo-W5 [ /MS-Gothic ] + + % Korean + /HYSMyeongJo-Medium [ /Batang ] + /HYRGoThic-Medium [ /Gulim ] + /HYGoThic-Medium [ /Dotum ] +>> +def + + +% This dictionary contains a list of CID substitutions +/cidsubs +<< + % Simplified Chinese + /SimHei + << + /FileType /TrueType + /Path (simhei.ttf) + /SubfontID 0 + /CSI [(GB1) 2] + >> + + /SimSun + << + /FileType /TrueType + /Path (simsun.ttc) + /SubfontID 0 + /CSI [(GB1) 2] + >> + + /NSimSun + << + /FileType /TrueType + /Path (simsun.ttc) + /SubfontID 1 + /CSI [(GB1) 2] + >> + + % Traditional Chinese + /MingLiU + << + /FileType /TrueType + /Path (mingliu.ttc) + /SubfontID 0 + /CSI [(CNS1) 2] + >> + + /PMingLiU + << + /FileType /TrueType + /Path (mingliu.ttc) + /SubfontID 1 + /CSI [(CNS1) 2] + >> + + /Arial-Unicode-MS + << + /FileType /TrueType + /Path (arialuni.ttc) + /SubfontID 0 + /CSI [(CNS1) 2] + >> + + % Japanese + /MS-Gothic + << + /FileType /TrueType + /Path (msgothic.ttc) + /SubfontID 0 + /CSI [(Japan1) 3] + >> + + /MS-PGothic + << + /FileType /TrueType + /Path (msgothic.ttc) + /SubfontID 1 + /CSI [(Japan1) 3] + >> + + /MS-UI-Gothic + << + /FileType /TrueType + /Path (msgothic.ttc) + /SubfontID 2 + /CSI [(Japan1) 3] + >> + + /MS-Mincho + << + /FileType /TrueType + /Path (msmincho.ttc) + /SubfontID 0 + /CSI [(Japan1) 3] + >> + + /MS-PMincho + << + /FileType /TrueType + /Path (msmincho.ttc) + /SubfontID 1 + /CSI [(Japan1) 3] + >> + + % Korean + /Batang + << + /FileType /TrueType + /Path (batang.ttc) + /SubfontID 0 + /CSI [(Korea1) 3] + >> + + /BatangChe + << + /FileType /TrueType + /Path (batang.ttc) + /SubfontID 1 + /CSI [(Korea1) 3] + >> + + /Gungsuh + << + /FileType /TrueType + /Path (batang.ttc) + /SubfontID 2 + /CSI [(Korea1) 3] + >> + + /GungsuhChe + << + /FileType /TrueType + /Path (batang.ttc) + /SubfontID 3 + /CSI [(Korea1) 3] + >> + + /Gulim + << + /FileType /TrueType + /Path (gulim.ttc) + /SubfontID 0 + /CSI [(Korea1) 3] + >> + + /GulimChe + << + /FileType /TrueType + /Path (gulim.ttc) + /SubfontID 1 + /CSI [(Korea1) 3] + >> + + /Dotum + << + /FileType /TrueType + /Path (gulim.ttc) + /SubfontID 2 + /CSI [(Korea1) 3] + >> + + /DotumChe + << + /FileType /TrueType + /Path (gulim.ttc) + /SubfontID 3 + /CSI [(Korea1) 3] + >> + +>> +def + + +% A dictionary for storing the names and paths of found fonts +/foundfonts 50 dict def + +% Get the basename of a path +% For example, (c:/windows/fonts/msmincho.ps) --> (msmincho.ps) +/basename { % path -- subpath + { dirsep search + {pop pop} + {exit} + ifelse + } loop +} def + + +% Check if a font basename matches one of the possible cid substitutions. +% If it does, add the font and full path to the foundfonts dictionary +/checkfont { + dup basename + cidsubs + { + /Path get + 2 index eq % Match case only + { + foundfonts exch + 3 index dup length string copy put + } + { + pop + } + ifelse + } + forall + pop pop +} def + +% Add all matching fonts to foundfonts dictionary +/findfonts { % path -- + dup length 2 add string dup 3 1 roll copy pop + dup dup length 2 sub dirsep 0 get put + dup dup length 1 sub (*) 0 get put + /checkfont load 256 string filenameforall +} def + + +% Write out a cid substition, using the full font path +% name is the font name, e.g. /MS-Mincho +% path is the full path to the font file, e.g. (c:\windows\fonts\msmincho.ps) +% subs is the dictionary for CID font substition, from cidsubs +/emitsubs { % name path subs -- + 3 -1 roll cidfmap exch write==only % name + cidfmap ( << ) writestring + % path subs + { + 1 index /Path eq {pop 1 index} if % use full path, not basename + exch cidfmap exch write==only cidfmap ( ) writestring + cidfmap exch write==only cidfmap ( ) writestring + } forall + cidfmap (>> ;\n) writestring + pop +} def + +% Write out all known cid substitutions. +/writesubs { % --- + cidfmap (% Substitutions\n) writestring + foundfonts + { + 1 index cidsubs exch known + { + 1 index cidsubs exch get % name path subs + emitsubs + } + { + pop pop + } + ifelse + } + forall +} def + +% Write out aliases for which the cid substituted font exists. +/writealiases { % -- + cidfmap (\n% Aliases\n) writestring + fontaliases + { + % name aliasarray + { + % name alias + foundfonts 1 index known + { + 1 index cidfmap exch write==only cidfmap ( ) writestring + cidfmap exch write==only cidfmap ( ;\n) writestring + exit % after first match + } + { + pop % didn't find this name + } + ifelse + } forall + % name + pop + } + forall +} def + + +% Write out a new cidfmap file to stdout +/writecidfmap { % path -- + cidfmap (%!\n% cidfmap generated automatically by mkcidfm.ps from fonts found in\n) writestring + cidfmap (% ) writestring + dup cidfmap exch writestring cidfmap (\n\n) writestring + findfonts + writesubs + writealiases +} def + + +FONTDIR writecidfmap |
