/* Copyright (C) 2000-2012 by George Williams */ /* * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "fontforge.h" #include "psfont.h" const char *AdobeStandardEncoding[] = { /* 0000 */ ".notdef", /* 0001 */ ".notdef", /* 0002 */ ".notdef", /* 0003 */ ".notdef", /* 0004 */ ".notdef", /* 0005 */ ".notdef", /* 0006 */ ".notdef", /* 0007 */ ".notdef", /* 0008 */ ".notdef", /* 0009 */ ".notdef", /* 000a */ ".notdef", /* 000b */ ".notdef", /* 000c */ ".notdef", /* 000d */ ".notdef", /* 000e */ ".notdef", /* 000f */ ".notdef", /* 0010 */ ".notdef", /* 0011 */ ".notdef", /* 0012 */ ".notdef", /* 0013 */ ".notdef", /* 0014 */ ".notdef", /* 0015 */ ".notdef", /* 0016 */ ".notdef", /* 0017 */ ".notdef", /* 0018 */ ".notdef", /* 0019 */ ".notdef", /* 001a */ ".notdef", /* 001b */ ".notdef", /* 001c */ ".notdef", /* 001d */ ".notdef", /* 001e */ ".notdef", /* 001f */ ".notdef", /* 0020 */ "space", /* 0021 */ "exclam", /* 0022 */ "quotedbl", /* 0023 */ "numbersign", /* 0024 */ "dollar", /* 0025 */ "percent", /* 0026 */ "ampersand", /* 0027 */ "quoteright", /* 0028 */ "parenleft", /* 0029 */ "parenright", /* 002a */ "asterisk", /* 002b */ "plus", /* 002c */ "comma", /* 002d */ "hyphen", /* 002e */ "period", /* 002f */ "slash", /* 0030 */ "zero", /* 0031 */ "one", /* 0032 */ "two", /* 0033 */ "three", /* 0034 */ "four", /* 0035 */ "five", /* 0036 */ "six", /* 0037 */ "seven", /* 0038 */ "eight", /* 0039 */ "nine", /* 003a */ "colon", /* 003b */ "semicolon", /* 003c */ "less", /* 003d */ "equal", /* 003e */ "greater", /* 003f */ "question", /* 0040 */ "at", /* 0041 */ "A", /* 0042 */ "B", /* 0043 */ "C", /* 0044 */ "D", /* 0045 */ "E", /* 0046 */ "F", /* 0047 */ "G", /* 0048 */ "H", /* 0049 */ "I", /* 004a */ "J", /* 004b */ "K", /* 004c */ "L", /* 004d */ "M", /* 004e */ "N", /* 004f */ "O", /* 0050 */ "P", /* 0051 */ "Q", /* 0052 */ "R", /* 0053 */ "S", /* 0054 */ "T", /* 0055 */ "U", /* 0056 */ "V", /* 0057 */ "W", /* 0058 */ "X", /* 0059 */ "Y", /* 005a */ "Z", /* 005b */ "bracketleft", /* 005c */ "backslash", /* 005d */ "bracketright", /* 005e */ "asciicircum", /* 005f */ "underscore", /* 0060 */ "quoteleft", /* 0061 */ "a", /* 0062 */ "b", /* 0063 */ "c", /* 0064 */ "d", /* 0065 */ "e", /* 0066 */ "f", /* 0067 */ "g", /* 0068 */ "h", /* 0069 */ "i", /* 006a */ "j", /* 006b */ "k", /* 006c */ "l", /* 006d */ "m", /* 006e */ "n", /* 006f */ "o", /* 0070 */ "p", /* 0071 */ "q", /* 0072 */ "r", /* 0073 */ "s", /* 0074 */ "t", /* 0075 */ "u", /* 0076 */ "v", /* 0077 */ "w", /* 0078 */ "x", /* 0079 */ "y", /* 007a */ "z", /* 007b */ "braceleft", /* 007c */ "bar", /* 007d */ "braceright", /* 007e */ "asciitilde", /* 007f */ ".notdef", /* 0080 */ ".notdef", /* 0081 */ ".notdef", /* 0082 */ ".notdef", /* 0083 */ ".notdef", /* 0084 */ ".notdef", /* 0085 */ ".notdef", /* 0086 */ ".notdef", /* 0087 */ ".notdef", /* 0088 */ ".notdef", /* 0089 */ ".notdef", /* 008a */ ".notdef", /* 008b */ ".notdef", /* 008c */ ".notdef", /* 008d */ ".notdef", /* 008e */ ".notdef", /* 008f */ ".notdef", /* 0090 */ ".notdef", /* 0091 */ ".notdef", /* 0092 */ ".notdef", /* 0093 */ ".notdef", /* 0094 */ ".notdef", /* 0095 */ ".notdef", /* 0096 */ ".notdef", /* 0097 */ ".notdef", /* 0098 */ ".notdef", /* 0099 */ ".notdef", /* 009a */ ".notdef", /* 009b */ ".notdef", /* 009c */ ".notdef", /* 009d */ ".notdef", /* 009e */ ".notdef", /* 009f */ ".notdef", /* 00a0 */ ".notdef", /* 00a1 */ "exclamdown", /* 00a2 */ "cent", /* 00a3 */ "sterling", /* 00a4 */ "fraction", /* 00a5 */ "yen", /* 00a6 */ "florin", /* 00a7 */ "section", /* 00a8 */ "currency", /* 00a9 */ "quotesingle", /* 00aa */ "quotedblleft", /* 00ab */ "guillemotleft", /* 00ac */ "guilsinglleft", /* 00ad */ "guilsinglright", /* 00ae */ "fi", /* 00af */ "fl", /* 00b0 */ ".notdef", /* 00b1 */ "endash", /* 00b2 */ "dagger", /* 00b3 */ "daggerdbl", /* 00b4 */ "periodcentered", /* 00b5 */ ".notdef", /* 00b6 */ "paragraph", /* 00b7 */ "bullet", /* 00b8 */ "quotesinglbase", /* 00b9 */ "quotedblbase", /* 00ba */ "quotedblright", /* 00bb */ "guillemotright", /* 00bc */ "ellipsis", /* 00bd */ "perthousand", /* 00be */ ".notdef", /* 00bf */ "questiondown", /* 00c0 */ ".notdef", /* 00c1 */ "grave", /* 00c2 */ "acute", /* 00c3 */ "circumflex", /* 00c4 */ "tilde", /* 00c5 */ "macron", /* 00c6 */ "breve", /* 00c7 */ "dotaccent", /* 00c8 */ "dieresis", /* 00c9 */ ".notdef", /* 00ca */ "ring", /* 00cb */ "cedilla", /* 00cc */ ".notdef", /* 00cd */ "hungarumlaut", /* 00ce */ "ogonek", /* 00cf */ "caron", /* 00d0 */ "emdash", /* 00d1 */ ".notdef", /* 00d2 */ ".notdef", /* 00d3 */ ".notdef", /* 00d4 */ ".notdef", /* 00d5 */ ".notdef", /* 00d6 */ ".notdef", /* 00d7 */ ".notdef", /* 00d8 */ ".notdef", /* 00d9 */ ".notdef", /* 00da */ ".notdef", /* 00db */ ".notdef", /* 00dc */ ".notdef", /* 00dd */ ".notdef", /* 00de */ ".notdef", /* 00df */ ".notdef", /* 00e0 */ ".notdef", /* 00e1 */ "AE", /* 00e2 */ ".notdef", /* 00e3 */ "ordfeminine", /* 00e4 */ ".notdef", /* 00e5 */ ".notdef", /* 00e6 */ ".notdef", /* 00e7 */ ".notdef", /* 00e8 */ "Lslash", /* 00e9 */ "Oslash", /* 00ea */ "OE", /* 00eb */ "ordmasculine", /* 00ec */ ".notdef", /* 00ed */ ".notdef", /* 00ee */ ".notdef", /* 00ef */ ".notdef", /* 00f0 */ ".notdef", /* 00f1 */ "ae", /* 00f2 */ ".notdef", /* 00f3 */ ".notdef", /* 00f4 */ ".notdef", /* 00f5 */ "dotlessi", /* 00f6 */ ".notdef", /* 00f7 */ ".notdef", /* 00f8 */ "lslash", /* 00f9 */ "oslash", /* 00fa */ "oe", /* 00fb */ "germandbls", /* 00fc */ ".notdef", /* 00fd */ ".notdef", /* 00fe */ ".notdef", /* 00ff */ ".notdef" }; const char *AdobeExpertEncoding[] = { /* 0000 */ ".notdef", /* 0001 */ ".notdef", /* 0002 */ ".notdef", /* 0003 */ ".notdef", /* 0004 */ ".notdef", /* 0005 */ ".notdef", /* 0006 */ ".notdef", /* 0007 */ ".notdef", /* 0008 */ ".notdef", /* 0009 */ ".notdef", /* 000a */ ".notdef", /* 000b */ ".notdef", /* 000c */ ".notdef", /* 000d */ ".notdef", /* 000e */ ".notdef", /* 000f */ ".notdef", /* 0010 */ ".notdef", /* 0011 */ ".notdef", /* 0012 */ ".notdef", /* 0013 */ ".notdef", /* 0014 */ ".notdef", /* 0015 */ ".notdef", /* 0016 */ ".notdef", /* 0017 */ ".notdef", /* 0018 */ ".notdef", /* 0019 */ ".notdef", /* 001a */ ".notdef", /* 001b */ ".notdef", /* 001c */ ".notdef", /* 001d */ ".notdef", /* 001e */ ".notdef", /* 001f */ ".notdef", /* 0020 */ "space", /* 0021 */ "exclamsmall", /* 0022 */ "Hungarumlautsmal", /* 0023 */ ".notdef", /* 0024 */ "dollaroldstyle", /* 0025 */ "dollarsuperior", /* 0026 */ "ampersandsmall", /* 0027 */ "Acutesmall", /* 0028 */ "parenleftsuperior", /* 0029 */ "parenrightsuperior", /* 002a */ "twodotenleader", /* 002b */ "onedotenleader", /* 002c */ "comma", /* 002d */ "hyphen", /* 002e */ "period", /* 002f */ "fraction", /* 0030 */ "zerooldstyle", /* 0031 */ "oneoldstyle", /* 0032 */ "twooldstyle", /* 0033 */ "threeoldstyle", /* 0034 */ "fouroldstyle", /* 0035 */ "fiveoldstyle", /* 0036 */ "sixoldstyle", /* 0037 */ "sevenoldstyle", /* 0038 */ "eightoldstyle", /* 0039 */ "nineoldstyle", /* 003a */ "colon", /* 003b */ "semicolon", /* 003c */ "commasuperior", /* 003d */ "threequartersemdash", /* 003e */ "periodsuperior", /* 003f */ "questionsmall", /* 0040 */ ".notdef", /* 0041 */ "asuperior", /* 0042 */ "bsuperior", /* 0043 */ "centsuperior", /* 0044 */ "dsuperior", /* 0045 */ "esuperior", /* 0046 */ ".notdef", /* 0047 */ ".notdef", /* 0048 */ ".notdef", /* 0049 */ "isuperior", /* 004a */ ".notdef", /* 004b */ ".notdef", /* 004c */ "lsuperior", /* 004d */ "msuperior", /* 004e */ "nsuperior", /* 004f */ "osuperior", /* 0050 */ ".notdef", /* 0051 */ ".notdef", /* 0052 */ "rsuperior", /* 0053 */ "ssuperior", /* 0054 */ "tsuperior", /* 0055 */ ".notdef", /* 0056 */ "ff", /* 0057 */ "fi", /* 0058 */ "fl", /* 0059 */ "ffi", /* 005a */ "ffl", /* 005b */ "parenleftinferior", /* 005c */ ".notdef", /* 005d */ "parenrightinferior", /* 005e */ "Circumflexsmall", /* 005f */ "hyphensuperior", /* 0060 */ "Gravesmall", /* 0061 */ "Asmall", /* 0062 */ "Bsmall", /* 0063 */ "Csmall", /* 0064 */ "Dsmall", /* 0065 */ "Esmall", /* 0066 */ "Fsmall", /* 0067 */ "Gsmall", /* 0068 */ "Hsmall", /* 0069 */ "Ismall", /* 006a */ "Jsmall", /* 006b */ "Ksmall", /* 006c */ "Lsmall", /* 006d */ "Msmall", /* 006e */ "Nsmall", /* 006f */ "Osmall", /* 0070 */ "Psmall", /* 0071 */ "Qsmall", /* 0072 */ "Rsmall", /* 0073 */ "Ssmall", /* 0074 */ "Tsmall", /* 0075 */ "Usmall", /* 0076 */ "Vsmall", /* 0077 */ "Wsmall", /* 0078 */ "Xsmall", /* 0079 */ "Ysmall", /* 007a */ "Zsmall", /* 007b */ "colonmonetary", /* 007c */ "onefitted", /* 007d */ "rupiah", /* 007e */ "Tildesmall", /* 007f */ ".notdef", /* 0080 */ ".notdef", /* 0081 */ ".notdef", /* 0082 */ ".notdef", /* 0083 */ ".notdef", /* 0084 */ ".notdef", /* 0085 */ ".notdef", /* 0086 */ ".notdef", /* 0087 */ ".notdef", /* 0088 */ ".notdef", /* 0089 */ ".notdef", /* 008a */ ".notdef", /* 008b */ ".notdef", /* 008c */ ".notdef", /* 008d */ ".notdef", /* 008e */ ".notdef", /* 008f */ ".notdef", /* 0090 */ ".notdef", /* 0091 */ ".notdef", /* 0092 */ ".notdef", /* 0093 */ ".notdef", /* 0094 */ ".notdef", /* 0095 */ ".notdef", /* 0096 */ ".notdef", /* 0097 */ ".notdef", /* 0098 */ ".notdef", /* 0099 */ ".notdef", /* 009a */ ".notdef", /* 009b */ ".notdef", /* 009c */ ".notdef", /* 009d */ ".notdef", /* 009e */ ".notdef", /* 009f */ ".notdef", /* 00a0 */ ".notdef", /* 00a1 */ "exclamdownsmall", /* 00a2 */ "centoldstyle", /* 00a3 */ "Lslashsmall", /* 00a4 */ ".notdef", /* 00a5 */ ".notdef", /* 00a6 */ "Scaronsmall", /* 00a7 */ "Zcaronsmall", /* 00a8 */ "Dieresissmall", /* 00a9 */ "Brevesmall", /* 00aa */ "Caronsmall", /* 00ab */ ".notdef", /* 00ac */ "Dotaccentsmall", /* 00ad */ ".notdef", /* 00ae */ ".notdef", /* 00af */ "Macronsmall", /* 00b0 */ ".notdef", /* 00b1 */ ".notdef", /* 00b2 */ "figuredash", /* 00b3 */ "hypheninferior", /* 00b4 */ ".notdef", /* 00b5 */ ".notdef", /* 00b6 */ "Ogoneksmall", /* 00b7 */ "Ringsmall", /* 00b8 */ "Cedillasmall", /* 00b9 */ ".notdef", /* 00ba */ ".notdef", /* 00bb */ ".notdef", /* 00bc */ "onequarter", /* 00bd */ "onehalf", /* 00be */ "threequarters", /* 00bf */ "questiondownsmall", /* 00c0 */ "oneeighth", /* 00c1 */ "threeeighths", /* 00c2 */ "fiveeighths", /* 00c3 */ "seveneighths", /* 00c4 */ "onethird", /* 00c5 */ "twothirds", /* 00c6 */ ".notdef", /* 00c7 */ ".notdef", /* 00c8 */ "zerosuperior", /* 00c9 */ "onesuperior", /* 00ca */ "twosuperior", /* 00cb */ "threesuperior", /* 00cc */ "foursuperior", /* 00cd */ "fivesuperior", /* 00ce */ "sixsuperior", /* 00cf */ "sevensuperior", /* 00d0 */ "eightsuperior", /* 00d1 */ "ninesuperior", /* 00d2 */ "zeroinferior", /* 00d3 */ "oneinferior", /* 00d4 */ "twoinferior", /* 00d5 */ "threeinferior", /* 00d6 */ "fourinferior", /* 00d7 */ "fiveinferior", /* 00d8 */ "sixinferior", /* 00d9 */ "seveninferior", /* 00da */ "eightinferior", /* 00db */ "nineinferior", /* 00dc */ "centinferior", /* 00dd */ "dollarinferior", /* 00de */ "periodinferior", /* 00df */ "commainferior", /* 00e0 */ "Agravesmall", /* 00e1 */ "Aacutesmall", /* 00e2 */ "Acircumflexsmall", /* 00e3 */ "Atildesmall", /* 00e4 */ "Adieresissmall", /* 00e5 */ "Aringsmall", /* 00e6 */ "AEsmall", /* 00e7 */ "Ccedillasmall", /* 00e8 */ "Egravesmall", /* 00e9 */ "Eacutesmall", /* 00ea */ "Ecircumflexsmall", /* 00eb */ "Edieresissmall", /* 00ec */ "Igravesmall", /* 00ed */ "Iacutesmall", /* 00ee */ "Icircumflexsmall", /* 00ef */ "Idieresissmall", /* 00f0 */ "Ethsmall", /* 00f1 */ "Ntildesmall", /* 00f2 */ "Ogravesmall", /* 00f3 */ "Oacutesmall", /* 00f4 */ "Ocircumflexsmall", /* 00f5 */ "Otildesmall", /* 00f6 */ "Odieresissmall", /* 00f7 */ "OEsmall", /* 00f8 */ "Oslashsmall", /* 00f9 */ "Ugravesmall", /* 00fa */ "Uacutesmall", /* 00fb */ "Ucircumflexsmall", /* 00fc */ "Udieresissmall", /* 00fd */ "Yacutesmall", /* 00fe */ "Thornsmall", /* 00ff */ "Ydieresissmall" }; unsigned short r; #define c1 52845 #define c2 22719 #define EODMARKLEN 16 #define bgetc(extra,in) (*(extra)=='\0' ? getc(in) : (unsigned char ) *(extra)++ ) void PSCharsFree(struct pschars *chrs) { int i; if ( chrs==NULL ) return; for ( i=0; inext; ++i ) { if ( chrs->keys!=NULL ) free(chrs->keys[i]); free(chrs->values[i]); } free(chrs->lens); free(chrs->keys); free(chrs->values); free(chrs); } void PSDictFree(struct psdict *dict) { int i; if ( dict==NULL ) return; for ( i=0; inext; ++i ) { if ( dict->keys!=NULL ) free(dict->keys[i]); free(dict->values[i]); } free(dict->keys); free(dict->values); free(dict); }