afmint.h - enscript - GNU Enscript
 (HTM) git clone git://thinkerwim.org/enscript.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       afmint.h (5362B)
       ---
            1 /*
            2  * Internal header for the AFM library.
            3  * Copyright (c) 1995-1999 Markku Rossi.
            4  *
            5  * Author: Markku Rossi <mtr@iki.fi>
            6  */
            7 
            8 /*
            9  * Enscript is free software: you can redistribute it and/or modify
           10  * it under the terms of the GNU General Public License as published by
           11  * the Free Software Foundation, either version 3 of the License, or
           12  * (at your option) any later version.
           13  *
           14  * Enscript is distributed in the hope that it will be useful,
           15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
           16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
           17  * GNU General Public License for more details.
           18  *
           19  * You should have received a copy of the GNU General Public License
           20  * along with Enscript.  If not, see <http://www.gnu.org/licenses/>.
           21  */
           22 
           23 #ifndef AFMINT_H
           24 #define AFMINT_H
           25 
           26 /*
           27  * Config stuffs.
           28  */
           29 
           30 #ifdef HAVE_CONFIG_H
           31 #include <config.h>
           32 #endif
           33 
           34 #include <stdio.h>
           35 
           36 #ifndef ___P
           37 #if PROTOTYPES
           38 #define ___P(protos) protos
           39 #else /* no PROTOTYPES */
           40 #define ___P(protos) ()
           41 #endif /* no PROTOTYPES */
           42 #endif
           43 
           44 #if STDC_HEADERS
           45 
           46 #include <stdlib.h>
           47 #include <string.h>
           48 
           49 #else /* no STDC_HEADERS */
           50 
           51 #if HAVE_STDLIB_H
           52 #include <stdlib.h>
           53 #endif
           54 
           55 #if HAVE_STRING_H
           56 #include <string.h>
           57 #endif
           58 
           59 #ifndef HAVE_STRCHR
           60 #define strchr index
           61 #define strrchr rindex
           62 #endif
           63 char *strchr ();
           64 char *strrchr ();
           65 
           66 #ifndef HAVE_MEMCPY
           67 #define memcpy(d, s, n) bcopy((s), (d), (n))
           68 #endif
           69 
           70 #ifndef HAVE_STRERROR
           71 extern char *strerror ___P ((int));
           72 #endif
           73 
           74 #endif /* no STDC_HEADERS */
           75 
           76 #if HAVE_UNISTD_H
           77 #include <unistd.h>
           78 #endif
           79 
           80 #include <setjmp.h>
           81 #include <assert.h>
           82 #include <errno.h>
           83 
           84 #include <sys/types.h>
           85 #include <sys/stat.h>
           86 
           87 #include "afm.h"
           88 #include "strhash.h"
           89 
           90 
           91 /*
           92  * Types and definitions.
           93  */
           94 
           95 /* Error codes. */
           96 #define AFM_ERROR                        1
           97 #define AFM_ERROR_MEMORY                2
           98 #define AFM_ERROR_ARGUMENT                3
           99 #define AFM_ERROR_UNKNOWN_FONT                4
          100 #define AFM_ERROR_SYNTAX                5
          101 #define AFM_ERROR_UNSUPPORTED_FORMAT        6
          102 #define AFM_ERROR_FILE_IO                7
          103 #define AFM_ERROR_NOT_AFM_FILE                8
          104 #define NUM_ERRORS                        9
          105 
          106 /* Pack error and global errno. */
          107 #define SYSERROR(code) (errno << 16 | (code))
          108 
          109 
          110 /* Keys. */
          111 
          112 typedef enum
          113 {
          114   kComment,
          115 
          116   /* File structure. */
          117   kStartFontMetrics,
          118   kEndFontMetrics,
          119   kStartCompFontMetrics,
          120   kEndCompFontMetrics,
          121   kStartDescendent,
          122   kEndDescendent,
          123   kStartMasterFontMetrics,
          124   kEndMasterFontMetrics,
          125 
          126   /* Control information. */
          127   kMetricsSets,
          128   kDescendents,
          129   kMasters,
          130   kAxes,
          131 
          132   /* Global font information. */
          133   kFontName,
          134   kFullName,
          135   kFamilyName,
          136   kWeight,
          137   kFontBBox,
          138   kVersion,
          139   kNotice,
          140   kEncodingScheme,
          141   kMappingScheme,
          142   kEscChar,
          143   kCharacterSet,
          144   kCharacters,
          145   kIsBaseFont,
          146   kVVector,
          147   kIsFixedV,
          148   kCapHeight,
          149   kXHeight,
          150   kAscender,
          151   kDescender,
          152   kWeightVector,
          153   kBlendDesignPositions,
          154   kBlendDesignMap,
          155   kBlendAxisTypes,
          156 
          157   /* Writing direction information. */
          158   kStartDirection,
          159   kEndDirection,
          160   kUnderlinePosition,
          161   kUnderlineThickness,
          162   kItalicAngle,
          163   kCharWidth,
          164   kIsFixedPitch,
          165 
          166   /* Individual character metrics. */
          167   kStartCharMetrics,
          168   kEndCharMetrics,
          169   kC,
          170   kCH,
          171   kWX,
          172   kW0X,
          173   kW1X,
          174   kWY,
          175   kW0Y,
          176   kW1Y,
          177   kW,
          178   kW0,
          179   kW1,
          180   kVV,
          181   kN,
          182   kB,
          183   kL,
          184 
          185   /* Kerning data. */
          186   kStartKernData,
          187   kEndKernData,
          188   kStartTrackKern,
          189   kEndTrackKern,
          190   kTrackKern,
          191   kStartKernPairs,
          192   kEndKernPairs,
          193   kKP,
          194   kKPH,
          195   kKPX,
          196   kKPY,
          197 
          198   /* Composite character data. */
          199   kStartComposites,
          200   kEndComposites,
          201   kCC,
          202   kPCC,
          203 
          204   /* Axis information. */
          205   kStartAxis,
          206   kEndAxis,
          207   kAxisType,
          208   kAxisLabel,
          209 
          210   /* Master Design Information */
          211   kStartMaster,
          212   kEndMaster
          213 
          214 } AFMKey;
          215 
          216 
          217 struct afm_handle_st
          218 {
          219   unsigned int verbose;                /* verbose level */
          220   StringHashPtr font_map;        /* fontname -> AFM filename mapping */
          221 
          222   /* Parse support. */
          223   jmp_buf jmpbuf;
          224   AFMError parse_error;                /* Error that caused longjmp(). */
          225 };
          226 
          227 
          228 /* Store library's private font data to this structure. */
          229 struct afm_font_private_data_st
          230 {
          231   /* Character that is used for undefined codes (' '). */
          232   AFMIndividualCharacterMetrics *undef;
          233 
          234   StringHashPtr fontnames;        /* fontname -> character info mapping */
          235   StringHashPtr compositenames;        /* composite -> AFMComposite mapping */
          236 };
          237 
          238 
          239 /*
          240  * Encoding tables.
          241  */
          242 
          243 struct encoding_table_st
          244 {
          245   int code;
          246   char *character;
          247 };
          248 
          249 typedef struct encoding_table_st AFMEncodingTable;
          250 
          251 extern AFMEncodingTable afm_88591_encoding[];
          252 extern AFMEncodingTable afm_88592_encoding[];
          253 extern AFMEncodingTable afm_88593_encoding[];
          254 extern AFMEncodingTable afm_88594_encoding[];
          255 extern AFMEncodingTable afm_88595_encoding[];
          256 extern AFMEncodingTable afm_88597_encoding[];
          257 extern AFMEncodingTable afm_88599_encoding[];
          258 extern AFMEncodingTable afm_885910_encoding[];
          259 extern AFMEncodingTable afm_ibmpc_encoding[];
          260 extern AFMEncodingTable afm_mac_encoding[];
          261 extern AFMEncodingTable afm_vms_encoding[];
          262 extern AFMEncodingTable afm_hp8_encoding[];
          263 extern AFMEncodingTable afm_koi8_encoding[];
          264 
          265 
          266 /*
          267  * Global help functions.
          268  */
          269 
          270 /* Print message if <level> is larger than library's verbose level. */
          271 void afm_message ___P ((AFMHandle handle, unsigned int level, char *message));
          272 
          273 /* Print error message to stderr. */
          274 void afm_error ___P ((AFMHandle handle, char *message));
          275 
          276 
          277 /*
          278  * AFM file parsing
          279  */
          280 
          281 /* Parse AFM file <filename> and fill up font <font>. */
          282 void afm_parse_file ___P ((AFMHandle handle, const char *filename,
          283                            AFMFont font));
          284 
          285 #endif /* not AFMINT_H */