/* This is a utility for making Links fonts from postscript files and * Ghostscript fonts. */ #include #include #include /* Here switch on which encoding the Ghostscript font is in. */ /* #define LATIN */ /* #define CYRILLIC */ /* #define HEBREW */ /* #define HIRAGANA */ /* #define KATAKANA */ /* #define DINGBATS */ /* #define GREEK */ /* #define ARABIC */ /* #define ARABIC2 */ /* #define GEORGIAN_MKHEDRULI */ # define STANDARD_SYMBOL #ifdef STANDARD_SYMBOL /* (s050000l.pfb) */ int copy[]={ 34,0x2200, 36,0x2203, 39,0x220d, 64,0x2245, 68,0x2206, 92,0x2234, 94,0x22a5, 163,0x2264, 165,0x221e, 164,0x2215, 177,0x00b1, 179,0x2265, 180,0x2062, 181,0x221d, 182,0x2202, 183,0x2981, 184,0x00f7, 185,0x2260, 186,0x2261, 187,0x2248, 188,0x20e8, 189,0x2223, 196,0x2297, 197,0x2295, 198,0x2205, 198,0x2300, 199,0x22c2, 200,0x22c3, 201,0x2283, 202,0x2287, 203,0x2284, 204,0x2282, 205,0x2286, 206,0x220a, 207,0x2209, 208,0x2220, 208,0x299f, 209,0x2207, 210,0x00ae, 211,0x00a9, 212,0x2122, 213,0x220f, 214,0x221a, 215,0x2219, 216,0x00ac, 217,0x2227, 217,0x22c0, 218,0x22c1, 218,0x2228, 219,0x27fa, 220,0x27f8, 221,0x21d1, 222,0x21d2, 223,0x21d3, 225,0x2329, 229,0x2211, 230,0x239b, 231,0x239c, 232,0x239d, 233,0x23a1, 234,0x23a2, 235,0x23a3, 236,0x23a7, 237,0x23a8, 238,0x23a9, 239,0x23aa, 241,0x232a, 241,0x27e9, 242,0x222b, 246,0x239e, 247,0x239f, 248,0x23a0, 249,0x23a4, 250,0x23a5, 251,0x23a6, 252,0x23ab, 253,0x23ac, 254,0x23ad, 242,0x222b }; int merge[]={}; #endif /* #ifdef STANDARD_SYMBOL */ #ifdef GEORGIAN_MKHEDRULI /* mkhedruli.pfb */ int copy[]={ 35,0x10d0, 36,0x10d1, 37,0x10d2, 38,0x10d3, 39,0x10d4, 40,0x10d5, 41,0x10d6, 42,0x10f1, 43,0x10d7, 44,0x10d8, 45,0x10d9, 46,0x10da, 47,0x10db, 48,0x10dc, 49,0x10f2, 50,0x10dd, 51,0x10de, 52,0x10df, 53,0x10e0, 54,0x10e1, 55,0x10e2, 56,0x10e3, 57,0x10f3, 58,0x10e4, 59,0x10e5, 60,0x10e6, 61,0x10e7, 62,0x10e8, 63,0x10e9, 64,0x10ea, 65,0x10eb, 66,0x10ec, 67,0x10ed, 68,0x10ee, 69,0x10f4, 70,0x10ef, 71,0x10f0, 72,0x10f5, 73,0x10f6, }; int merge[]={}; #endif /* #ifdef GEORGIAN_MKHEDRULI */ #ifdef ARABIC2 /* irnafnt5.pfb */ int copy[]={ 48,0x06f0, 49,0x06f1, 50,0x06f2, 51,0x06f3, 52,0x06f4, 53,0x06f5, 54,0x06f6, 55,0x06f7, 56,0x06f8, 57,0x06f9, 76,0x0686, 86,0x0698, 111,0x06af, 125,0x06cc, 158,0x0640, }; int merge[]={}; #endif #ifdef ARABIC /* ArabicNaskh.pfb */ int copy[]={ 37,0x066a, 44,0x060c, 48,0x0660, 49,0x0661, 50,0x0662, 51,0x0663, 52,0x0664, 53,0x0665, 54,0x0666, 55,0x0667, 56,0x0668, 57,0x0669, 59,0x061b, 63,0x061f, 64,0x0604, 65,0x0627, 67,0x0623, 69,0x0622, 71,0x0625, 76,0x0628, 80,0x062a, 84,0x062b, 88,0x062c, 94,0x066c, 95,0x0671, 96,0x062d, 100,0x062e, 101,0x062f, 103,0x0630, 105,0x0631, 107,0x0632, 112,0x0633, 116,0x0634, 120,0x0635, 123,0x0670, 126,0x0636, 162,0x0637, 166,0x0638, 167,0x0621, 167,0x06f6, 170,0x0639, 174,0x063a, 178,0x0641, 182,0x0642, 183,0x06a9, 186,0x0643, 190,0x0644, 194,0x0645, 198,0x0646, 199,0x0647, 199,0x06be, 202,0x06d5, 203,0x0648, 205,0x068d, 208,0x064a, 212,0x0649, 213,0x0674, 215,0x06c2, 217,0x0626, 218,0x0624, 220,0x06d9, 228,0x064e, 231,0x064b, 232,0x064c, 234,0x0650, 235,0x064d, 233,0x0651, 230,0x0652, 229,0x064f, 42,0x066d, 78,0x06c3, }; int merge[]={}; #endif #ifdef HEBREW /* elronm.pfb - monospaced, hebrewmm.pfb - proportional */ int copy[]={ /* iso 8859-8 */ 0xE0,0x05D0, 0xE1,0x05D1, 0xE2,0x05D2, 0xE3,0x05D3, 0xE4,0x05D4, 0xE5,0x05D5, 0xE6,0x05D6, 0xE7,0x05D7, 0xE8,0x05D8, 0xE9,0x05D9, 0xEA,0x05DA, 0xEB,0x05DB, 0xEC,0x05DC, 0xED,0x05DD, 0xEE,0x05DE, 0xEF,0x05DF, 0xF0,0x05E0, 0xF1,0x05E1, 0xF2,0x05E2, 0xF3,0x05E3, 0xF4,0x05E4, 0xF5,0x05E5, 0xF6,0x05E6, 0xF7,0x05E7, 0xF8,0x05E8, 0xF9,0x05E9, 0xFA,0x05EA, }; int merge[]={}; #endif #ifdef KATAKANA int copy[]={ 33,0x30ac, 35,0x30f7, 36,0x30b2, 37,0x30b4, 38,0x30d3, 39,0x30ef, 40,0x30d9, 41,0x30dc, 42,0x30d6, 43,0x30c3, 44,0x30e4, 45,0x30e9, 46,0x30e6, 47,0x30e8, 48,0x30ce, 49,0x30de, 50,0x30a4, 51,0x30a6, 52,0x30a8, 53,0x30aa, 54,0x30ca, 55,0x30cb, 56,0x30cc, 57,0x30cd, 58,0x30dd, 59,0x30e2, 60,0x30e3, 61,0x30ea, 62,0x30e5, 63,0x30e7, 64,0x30f8, 65,0x30b6, 66,0x30c9, 67,0x30c5, 68,0x30ba, 70,0x30bc, 71,0x30be, 72,0x30d1, 74,0x30d4, 75,0x30d7, 76,0x30da, 77,0x30a3, 78,0x30a9, 83,0x30b8, 85,0x30a7, 86,0x30c7, 88,0x30c2, 89,0x30a1, 90,0x30c0, 91,0x30eb, 92,0x30ed, 93,0x30ec, 94,0x30d0, 95,0x30fc, 97,0x30b5, 98,0x30c8, 99,0x30c4, 100,0x30b9, 101,0x30af, 102,0x30bb, 103,0x30bd, 104,0x30de, 105,0x30d5, 106,0x30df, 107,0x30e0, 108,0x30e1, 109,0x30f3, 110,0x30f2, 111,0x30d8, 112,0x30db, 113,0x30f5, 114,0x30f6, 115,0x30c4, 116,0x30b3, 117,0x30d2, 118,0x30c6, 119,0x30f0, 120,0x30c1, 121,0x30cf, 122,0x30bf, 124,0x30a5, }; int merge[]={}; #endif #ifdef HIRAGANA int copy[]={ 33,0x304c, 35,0x3050, 36,0x3052, 37,0x3054, 38,0x3073, 39,0x308f, 40,0x3079, 41,0x307c, 42,0x3076, 43,0x3063, 44,0x3084, 45,0x3089, 46,0x3086, 47,0x3088, 48,0x306e, 49,0x3042, 50,0x3044, 51,0x3046, 52,0x3048, 53,0x304a, 54,0x306a, 55,0x306b, 56,0x306c, 57,0x306d, 58,0x307d, 59,0x3082, 60,0x3083, 62,0x3085, 63,0x3087, 64,0x304e, 65,0x3056, 66,0x3069, 67,0x3065, 68,0x305a, 70,0x305c, 71,0x305e, 72,0x3071, 74,0x3074, 75,0x3077, 76,0x307a, 77,0x3043, 78,0x3049, 79,0x309c, 83,0x3058, 85,0x3047, 86,0x3067, 88,0x3062, 89,0x3041, 90,0x3060, 91,0x308b, 92,0x308d, 93,0x308c, 94,0x3070, 97,0x3055, 98,0x3068, 99,0x3064, 100,0x3059, 101,0x304f, 102,0x305b, 103,0x305d, 104,0x307e, 105,0x3075, 106,0x307f, 107,0x3080, 108,0x3081, 109,0x3093, 110,0x3092, 111,0x3078, 112,0x307b, 113,0x304b, 114,0x3051, 115,0x3057, 116,0x3053, 117,0x3072, 118,0x3066, 119,0x304d, 120,0x3061, 121,0x306f, 122,0x305f, 124,0x3045 }; int merge[]={}; #endif #ifdef LATIN /* 0xc2: acute */ int copy[]={ 161,0xa1, 162,0xa2, 163,0xa3, 165,0xa5, 167,0xa7, 171,0xab, 172,0x2039, 173,0x203a, 174,0xfb01, 175,0xfb02, 177,0x2013, 178,0x2020, 179,0x2021, 182,0xb6, 183,0x2022, 187,0xbb, 188,0x2026, 189,0x2030, 191,0xbf, 196,0x2dc, 208,0x2014, 225,0xc6, 232,0x141, 233,0xd8, 234,0x152, 235,0x2116, 241,0xe6, 248,0x142, 249,0xf8, 250,0x153, 251,0xdf, 193,0x300, #define GRA 193 /* ` */ 194,0xb4, #define ACU 194 /* ' */ 195,0x2c6, #define CIR 195 /* ^ */ 196,0x2dc, #define TIL 196 /* ~ */ 197,0xaf, #define MAC 197 /* - above */ 198,0x306, #define LSC 198 /* lower semicircle above */ 199,0x2d9, 199,0xb7, #define DOT 199 /* . above */ 200,0xa8, #define UML 200 /* .. above */ 202,0x2da, 202,0xb0, #define RIN 202 /* o above */ 203,0xb8, #define CED 203 /* (5 without the top stroke) under */ 205,0x30b, #define DAC 205 /* " */ 206,0x2db, #define OGO 206 /* left-right mirrored J under (ogonek) */ 207,0x2c7, #define CAR 207 /* v above */ }; int merge[]={ '+','-',0xb1, 'A',GRA,0xc0, 'A',ACU,0xc1, 'A',CIR,0xc2, 'A',TIL,0xc3, 'A',UML,0xc4, 'A',RIN,0xc5, 'C',CED,0xc7, 'E',GRA,0xc8, 'E',ACU,0xc9, 'E',CIR,0xca, 'E',UML,0xcb, 'I',GRA,0xcc, 'I',ACU,0xcd, 'I',CIR,0xce, 'I',UML,0xcf, 'D','-',0xd0, 'N',TIL,0xd1, 'O',GRA,0xd2, 'O',ACU,0xd3, 'O',CIR,0xd4, 'O',TIL,0xd5, 'O',UML,0xd6, 'U',GRA,0xd9, 'U',ACU,0xda, 'U',CIR,0xdb, 'U',UML,0xdc, 'Y',ACU,0xdd, 'a',GRA,0xe0, 'a',ACU,0xe1, 'a',CIR,0xe2, 'a',TIL,0xe3, 'a',UML,0xe4, 'a',RIN,0xe5, 'c',CED,0xe7, 'e',GRA,0xe8, 'e',ACU,0xe9, 'e',CIR,0xea, 'e',UML,0xeb, 'i',GRA,0xec, 'i',ACU,0xed, 'i',CIR,0xee, 'i',UML,0xef, 'n',TIL,0xf1, 'o',GRA,0xf2, 'o',ACU,0xf3, 'o',CIR,0xf4, 'o',TIL,0xf5, 'o',UML,0xf6, 'u',GRA,0xf9, 'u',ACU,0xfa, 'u',CIR,0xfb, 'u',UML,0xfc, 'y',ACU,0xfd, 'y',UML,0xff, 'A',MAC,0x100, 'a',MAC,0x101, 'A',LSC,0x102, 'a',LSC,0x103, 'A',OGO,0x104, 'a',OGO,0x105, 'C',ACU,0x106, 'c',ACU,0x107, 'C',CIR,0x108, 'c',CIR,0x109, 'C',DOT,0x10a, 'c',DOT,0x10b, 'C',CAR,0x10c, 'c',CAR,0x10d, 'D',CAR,0x10e, 'd',0x27,0x10f, 'D','-',0x110, 'd','-',0x111, 'E',MAC,0x112, 'e',MAC,0x113, 'E',LSC,0x114, 'e',LSC,0x115, 'E',DOT,0x116, 'e',DOT,0x117, 'E',OGO,0x118, 'e',OGO,0x119, 'E',CAR,0x11a, 'e',CAR,0x11b, 'G',CIR,0x11c, 'g',CIR,0x11d, 'G',LSC,0x11e, 'g',LSC,0x11f, 'G',DOT,0x120, 'g',DOT,0x121, 'H',CIR,0x124, 'h',CIR,0x125, 'H','-',0x126, 'h','-',0x127, 'I',TIL,0x128, 'i',TIL,0x129, 'I',MAC,0x12a, 'i',MAC,0x12b, 'I',LSC,0x12c, 'i',LSC,0x12d, 'I',OGO,0x12e, 'i',OGO,0x12f, 'I',DOT,0x130, 'I','J',0x132, 'i','j',0x133, 'J',CIR,0x134, 'j',CIR,0x135, 'L',ACU,0x139, 'l',ACU,0x13a, 'L',0x27,0x13d, 'l',0x27,0x13e, 'N',ACU,0x143, 'n',ACU,0x144, 'N',CAR,0x147, 'n',CAR,0x148, 'O',MAC,0x14c, 'o',MAC,0x14d, 'O',LSC,0x14e, 'o',LSC,0x14f, 'O',DAC,0x150, 'o',DAC,0x151, 'R',ACU,0x154, 'r',ACU,0x155, 'R',CAR,0x158, 'r',CAR,0x159, 'S',ACU,0x15a, 's',ACU,0x15b, 'S',CIR,0x15c, 's',CIR,0x15d, 'S',CED,0x15e, 's',CED,0x15f, 'S',CAR,0x160, 's',CAR,0x161, 'T',CED,0x162, 't',CED,0x163, 'T',CAR,0x164, 't',0x27,0x165, 'T','-',0x166, 't','-',0x167, 'U',TIL,0x168, 'u',TIL,0x169, 'U',MAC,0x16a, 'u',MAC,0x16b, 'U',LSC,0x16c, 'u',LSC,0x16d, 'U',RIN,0x16e, 'u',RIN,0x16f, 'U',DAC,0x170, 'u',DAC,0x171, 'U',OGO,0x172, 'u',OGO,0x173, 'W',CIR,0x174, 'w',CIR,0x175, 'Y',CIR,0x176, 'y',CIR,0x177, 'Y',UML,0x178, 'Z',ACU,0x179, 'z',ACU,0x17a, 'Z',DOT,0x17b, 'z',DOT,0x17c, 'Z',CAR,0x17d, 'z',CAR,0x17e, 'A',CAR,0x1cd, 'a',CAR,0x1ce, 'I',CAR,0x1cf, 'i',CAR,0x1d0, 'O',CAR,0x1d1, 'o',CAR,0x1d2, 'U',CAR,0x1d3, 'u',CAR,0x1d4, 'G',CAR,0x1e6, 'g',CAR,0x1e7, 'K',CAR,0x1e8, 'k',CAR,0x1e9, 'O',OGO,0x1ea, 'o',OGO,0x1eb, 'j',CAR,0x1f0, 'G',ACU,0x1f4, 'g',ACU,0x1f5, 'N',GRA,0x1f8, 'n',GRA,0x1f9, }; #endif /* LATIN */ #ifdef DINGBATS int merge[]={}; int copy[]={ 43,0x261e, }; #endif /* DINGBATS */ #ifdef CYRILLIC int merge[]={}; int copy[]={ 45,0x044d, 65,0x0410, 66,0x0411, 67,0x0426, 68,0x0414, 69,0x0415, 70,0x0424, 71,0x0413, 72,0x0425, 73,0x0418, 74,0x0416, 75,0x041a, 76,0x041b, 77,0x041c, 78,0x041d, 79,0x041e, 80,0x041f, 81,0x0427, 82,0x0420, 83,0x0421, 84,0x0422, 85,0x0423, 86,0x0412, 87,0x0428, 88,0x0429, 89,0x0419, 90,0x0417, 91,0x044b, 93,0x044e, 95,0x042d, 97,0x0430, 98,0x0431, 99,0x0446, 100,0x0434, 101,0x0435, 102,0x0444, 103,0x0433, 104,0x0445, 105,0x0438, 106,0x0436, 107,0x043a, 108,0x043b, 109,0x043c, 110,0x043d, 111,0x043e, 112,0x043f, 113,0x0447, 114,0x0440, 115,0x0441, 116,0x0442, 117,0x0443, 118,0x0432, 119,0x0448, 120,0x0449, 121,0x0439, 122,0x0437, 123,0x042b, 125,0x042e, 161,0x044c, 164,0x042c, 168,0x042a, 233,0x0401, 249,0x0451 }; #endif /* CYRILLIC */ #ifdef GREEK int copy[]={ 65,0x0391, 66,0x0392, 67,0x0393, 68,0x0394, 69,0x0395, 70,0x0396, 71,0x0397, 72,0x0398, 73,0x0399, 74,0x039a, 75,0x039b, 76,0x039c, 77,0x039d, 78,0x039e, 79,0x039f, 80,0x03a0, 81,0x03a1, 82,0x03a3, 83,0x03a4, 84,0x03d2, 85,0x03a6, 86,0x03a7, 87,0x03a8, 88,0x03a9, 97,0x03b1, 98,0x03b2, 99,0x03b3, 100,0x03b4, 101,0x03b5, 102,0x03b6, 103,0x03b7, 104,0x03d1, 105,0x03b8, 106,0x03ba, 107,0x03bb, 108,0x03bc, 109,0x03bd, 110,0x03be, 111,0x03bf, 112,0x03c0, 113,0x03c1, 114,0x03c3, 115,0x03c4, 116,0x03c5, 117,0x03c6, 118,0x03c7, 119,0x03c8, 120,0x03c9, }; int merge[]={}; #endif /* #ifdef GREEK */ unsigned char string[256]; void cp(int src, int dest) { sprintf(string,"cp font/new/orig_%04x.png font/new/%04x.png" "\n",src,dest); fputs(string,stderr); system(string); } void mrg(int letter, int accent, int dest) { sprintf(string,"convert +append font/new/orig_%04x.png spacer.png" " font/new/orig_%04x.png font/new/%04x.png\n", letter,accent,dest); fputs(string,stderr); system(string); } int main(int argc, char **argv) { int a,top_margin,bottom_margin; float dpi; unsigned char *txt; FILE *f; if (!(txt=getenv("hundred_dpi"))){ fprintf(stderr,"Can't find environment variable \"hundred_dpi\".\n"); exit(1); } dpi=atof(txt)/100; if (!(txt=getenv("top_promile"))){ fprintf(stderr,"Can't find environment variable \"top_promile\".\n"); exit(1); } top_margin=atol(txt)*842*dpi/72000; if (!(txt=getenv("bottom_promile"))){ fprintf(stderr,"Can't find environment variable \"bottom_promile\".\n"); exit(1); } bottom_margin=atol(txt)*842*dpi/72000; f=fopen("clip_improcess_program","w"); if (!f){ fprintf(stderr,"Can't open \"clip_improcess_program\" file for" " writing.\n"); perror(argv[0]); exit(1); } fprintf(f,"detract %d\n",bottom_margin); fprintf(f,"mirror\nflip\nmirror\nflip\n"); fprintf(f,"detract %d\n",top_margin); fprintf(f,"mirror\nflip\nmirror\nflip\n"); fclose(f); fprintf(stderr,"mkdir -p font/new\n"); system("mkdir -p font/new"); fprintf(stderr,"rm font/new/*\n"); system("rm font/new/*"); for (a=0;a<256;a++) { sprintf(string,"convert -crop 0x0 letters%d.png letters%d.png\n",a,a); fputs(string,stderr); system(string); sprintf(string,"improcess letters%d.png clip_improcess_program" " font/new/orig_%04x.png\n",a,a); fputs(string,stderr); system(string); } sprintf(string,"rm letters*.png\n"); fputs(string,stderr); system(string); #ifdef LATIN for (a=32;a<127;a++){ cp(a,a); } #endif /* LATIN */ for (a=0;a