123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- % 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
|