/*************************************************************************** * ELSEPAN.H - Base definitions for ElseWare PANOSE(tm) 1.0 Font Mapper. * * $keywords: elsepan.h 1.10 19-Jul-93 11:11:34 AM$ * * Copyright (C) 1991-93 ElseWare Corporation. All rights reserved. ***************************************************************************/ #ifndef __ELSEPAN_H__ #define __ELSEPAN_H__ /*************************************************************************** * ELSEUSER * * Rather than modify elsepan.h, put flags and additions in elseuser.h, or * disable inclusion of elseuser.h by placing "#define NOELSEUSER" ahead of * the #include for elsepan.h. ***************************************************************************/ #ifdef NOELSEUSER #define __ELSEUSER_H__ #endif #ifndef __ELSEUSER_H__ #include "elseuser.h" #endif /*************************************************************************** * ELSETYPE * * Basic ElseWare types. ***************************************************************************/ #ifndef __ELSETYPE_H__ #include "elsetype.h" #endif /*************************************************************************** * C++ SUPPORT * * If we are compiling with a C++ compiler, make these C-callable functions. ***************************************************************************/ #ifdef __cplusplus extern "C" { #endif /*************************************************************************** * COMPILER FLAG OVERRIDES * * If we are compiling one of the core ElseWare Font Mapper source files, * then override some flags. ***************************************************************************/ #ifdef ELSE_MAPPER_CORE #undef NOELSEPANCONST #define ELSEPENALTYDB #endif /*************************************************************************** * PANOSE 1.0 PENALTIES DATABASE * * By default, this is declared as a static data object that stores * all the penalty tables in a variable called 's_panDB.' This is in * PAN1PTBL.H, which is generated by a stand-alone program in PAN1PTBL.C. * * Two sets of macros 'allocate' and 'lock' the database, which really * just return the pointer to the statically defined 's_panDB.' * * To override, the user should '#define NOELSEPANDATA' in ELSEUSER.H * and provide replacements for the allocate and lock routines. The file * PAN1PTBL.H should be used to generate the user-provided penalty database. ***************************************************************************/ #ifdef ELSE_MAPPER_CORE #ifdef NOELSEPANDATA #define __PAN1PTBL_H__ #endif #ifndef __PAN1PTBL_H__ #include "pan1ptbl.h" #define M_lAllocPAN1DATA() (1L) /* returns data handle */ #define M_bFreePAN1DATA(hData) (TRUE) /* returns TRUE/FALSE */ #define M_lLockPAN1DATA(hData) ((EW_LPPDICT_MEM)s_panDB) /* returns ptr */ #define M_bUnlockPAN1DATA(hData) (TRUE) /* returns TRUE/FALSE */ #endif #endif /*************************************************************************** * COMPILATION FLAGS * * These flags control various aspects of compiling the font mapper. You * turn these flags on by #defining them in elseuser.h. ***************************************************************************/ /* ELSEARGS macro * * Disable argument lists on prototypes by #defining NOELSEARGS. */ #ifdef ELSEARGS #undef ELSEARGS #endif #ifndef NOELSEARGS #define ELSEARGS(args) args #else #define ELSEARGS(args) () #endif /* PAN_MATCH_ERROR * * This constant marks an error. */ #ifndef PAN_MATCH_ERROR #define PAN_MATCH_ERROR 0xFFFF #endif /* ELSEMAXSHORT * * Maximum legal value for a SHORT. */ #ifndef ELSEMAXSHORT #define ELSEMAXSHORT 0x7FFF #endif /* ELSEDEFTHRESHOLD * * Default value for the mapper threshold. */ #ifndef ELSEDEFTHRESHOLD #define ELSEDEFTHRESHOLD 30 #endif /* M_ELSELMUL * * a * b long math operation. */ #ifndef M_ELSELMUL #define M_ELSELMUL(a, b) ((long)((long)(a) * (long)(b))) #endif /* M_ELSELDIV * * a / b long math operation. */ #ifndef M_ELSELDIV #define M_ELSELDIV(a, b) ((long)((long)(a) / (long)(b))) #endif /* M_ELSEMULDIV * * (a * b) / c math operation. */ #ifndef M_ELSEMULDIV #define M_ELSEMULDIV(a, b, c) \ ((int)(M_ELSELDIV((M_ELSELMUL((a), (b)) + M_ELSELDIV((c), 2)), (c)))) #endif /* M_ELSEMEMCPY * * memcpy(dst, src, len) operation. * * Defined in elsepan.c. Override it by defining a macro * for M_ELSEMEMCPY(dst, src, len). */ /*************************************************************************** * PANOSE CONSTANTS * * These constants represent the individual values of the PANOSE digits. ***************************************************************************/ #define PANOSE_ANY 0 #define PANOSE_NOFIT 1 #define NUM_PAN_DIGITS 10 #define MAX_PAN1_FAMILY 127 #define MAX_PAN1_DIGIT 31 #define MAX_CUSTOM_WEIGHTS 8 #define SIZE_PAN1_NUM (sizeof(EW_BYTE) * NUM_PAN_DIGITS) #ifndef NOELSEPANCONST /* Latin Text PANOSE values. */ #define FAMILY_LATTEXT 2 #define FAMILY_LATSCRIPT 3 #define FAMILY_LATDECORATIVE 4 #define FAMILY_LATPICTORIAL 5 #define FAMILY_KANJI3TEXTANDSCRIPT 6 #define FAMILY_KANJI3DECORATIVE 7 #define FAMILY_KANJI3SYMBOLS 8 #define FAMILY__LAST 8 #define SERIF_COVE 2 #define SERIF_OBTUSECOVE 3 #define SERIF_SQUARECOVE 4 #define SERIF_OBTSQUARECOVE 5 #define SERIF_SQUARE 6 #define SERIF_THIN 7 #define SERIF_BONE 8 #define SERIF_EXAGGERATED 9 #define SERIF_TRIANGLE 10 #define SERIF_NORMALSANS 11 #define SERIF_OBTUSESANS 12 #define SERIF_PERPSANS 13 #define SERIF_FLARED 14 #define SERIF_ROUNDED 15 #define SERIF__LAST 15 #define WEIGHT_VERYLIGHT 2 #define WEIGHT_LIGHT 3 #define WEIGHT_THIN 4 #define WEIGHT_BOOK 5 #define WEIGHT_MEDIUM 6 #define WEIGHT_DEMI 7 #define WEIGHT_BOLD 8 #define WEIGHT_HEAVY 9 #define WEIGHT_BLACK 10 #define WEIGHT_NORD 11 #define WEIGHT__LAST 11 #define PROPORTION_OLDSTYLE 2 #define PROPORTION_MODERN 3 #define PROPORTION_EVENWIDTH 4 #define PROPORTION_EXPANDED 5 #define PROPORTION_CONDENSED 6 #define PROPORTION_VERYEXP 7 #define PROPORTION_VERYCOND 8 #define PROPORTION_MONOSPACE 9 #define PROPORTION__LAST 9 #define CONTRAST_NONE 2 #define CONTRAST_VERYLOW 3 #define CONTRAST_LOW 4 #define CONTRAST_MEDIUMLOW 5 #define CONTRAST_MEDIUM 6 #define CONTRAST_MEDIUMHIGH 7 #define CONTRAST_HIGH 8 #define CONTRAST_VERYHIGH 9 #define CONTRAST__LAST 9 #define STROKE_NOVARIATION 2 #define STROKE_GRADDIAG 3 #define STROKE_GRADTRANS 4 #define STROKE_GRADVERT 5 #define STROKE_GRADHORZ 6 #define STROKE_RAPIDVERT 7 #define STROKE_RAPIDHORZ 8 #define STROKE_INSTANTVERT 9 #define STROKE__LAST 9 #define ARM_STRAIGHTHORZ 2 #define ARM_STRAIGHTWEDGE 3 #define ARM_STRAIGHTVERT 4 #define ARM_STRAIGHTSGLSERIF 5 #define ARM_STRAIGHTDBLSERIF 6 #define ARM_NONSTRTHORZ 7 #define ARM_NONSTRTWEDGE 8 #define ARM_NONSTRTVERT 9 #define ARM_NONSTRTSGLSERIF 10 #define ARM_NONSTRTDBLSERIF 11 #define ARM__LAST 11 #define LTRFORM_NORMCONTACT 2 #define LTRFORM_NORMWEIGHTED 3 #define LTRFORM_NORMBOXED 4 #define LTRFORM_NORMFLATTENED 5 #define LTRFORM_NORMROUNDED 6 #define LTRFORM_NORMOFFCENTER 7 #define LTRFORM_NORMSQUARE 8 #define LTRFORM_OBLQCONTACT 9 #define LTRFORM_OBLQWEIGHTED 10 #define LTRFORM_OBLQBOXED 11 #define LTRFORM_OBLQFLATTENED 12 #define LTRFORM_OBLQROUNDED 13 #define LTRFORM_OBLQOFFCENTER 14 #define LTRFORM_OBLQSQUARE 15 #define LTRFORM__LAST 15 #define MIDLINE_STDTRIMMED 2 #define MIDLINE_STDPOINTED 3 #define MIDLINE_STDSERIFED 4 #define MIDLINE_HIGHTRIMMED 5 #define MIDLINE_HIGHPOINTED 6 #define MIDLINE_HIGHSERIFED 7 #define MIDLINE_CONSTTRIMMED 8 #define MIDLINE_CONSTPOINTED 9 #define MIDLINE_CONSTSERIFED 10 #define MIDLINE_LOWTRIMMED 11 #define MIDLINE_LOWPOINTED 12 #define MIDLINE_LOWSERIFED 13 #define MIDLINE__LAST 13 #define XHEIGHT_CONSTSMALL 2 #define XHEIGHT_CONSTSTD 3 #define XHEIGHT_CONSTLARGE 4 #define XHEIGHT_DUCKSMALL 5 #define XHEIGHT_DUCKSTD 6 #define XHEIGHT_DUCKLARGE 7 #define XHEIGHT__LAST 7 /* Latin Script PANOSE values. */ #ifndef NOELSEPANSCRIPT #define STOOL_FLATNIB 2 #define STOOL_PRESSUREPT 3 #define STOOL_ENGRAVED 4 #define STOOL_BALL 5 #define STOOL_BRUSH 6 #define STOOL_ROUGH 7 #define STOOL_FELTPEN 8 #define STOOL_WILDBRUSH 9 #define STOOL__LAST 9 #define STOP_ROMDISCONNECT 2 #define STOP_ROMTRAIL 3 #define STOP_ROMCONNNECT 4 #define STOP_CURDISCONNECT 5 #define STOP_CURTRAIL 6 #define STOP_CURCONNECT 7 #define STOP_BLACKDISCONNECT 8 #define STOP_BLACKTRAIL 9 #define STOP_BLACKCONNECT 10 #define STOP__LAST 10 #define SFORM_UPNOWRAP 2 #define SFORM_UPSOMEWRAP 3 #define SFORM_UPMOREWRAP 4 #define SFORM_UPEXCESSWRAP 5 #define SFORM_OBNOWRAP 6 #define SFORM_OBSOMEWRAP 7 #define SFORM_OBMOREWRAP 8 #define SFORM_OBEXCESSWRAP 9 #define SFORM_EXNOWRAP 10 #define SFORM_EXSOMEWRAP 11 #define SFORM_EXMOREWRAP 12 #define SFORM_EXEXCESSWRAP 13 #define SFORM__LAST 13 #define SFINIAL_NONENOLOOP 2 #define SFINIAL_NONECLOSELOOP 3 #define SFINIAL_NONEOPENLOOP 4 #define SFINIAL_SHARPNOLOOP 5 #define SFINIAL_SHARPCLOSELOOP 6 #define SFINIAL_SHARPOPENLOOP 7 #define SFINIAL_TAPERNOLOOP 8 #define SFINIAL_TAPERCLOSELOOP 9 #define SFINIAL_TAPEROPENLOOP 10 #define SFINIAL_ROUNDNOLOOP 11 #define SFINIAL_ROUNDCLOSELOOP 12 #define SFINIAL_ROUNDOPENLOOP 13 #define SFINIAL__LAST 13 #define SXASCENT_VERYLOWDIF 2 #define SXASCENT_LOWDIF 3 #define SXASCENT_MEDIUMDIF 4 #define SXASCENT_HIGHDIF 5 #define SXASCENT_VERYHIGHDIF 6 #define SXASCENT__LAST 6 #endif /* ifndef NOELSEPANSCRIPT */ /* Kanji PANOSE values. */ #ifndef NOELSEPANKANJI #define KSTROKE_TRADBRUSH 2 #define KSTROKE_VIGBRUSH 3 #define KSTROKE_DRYBRUSH 4 #define KSTROKE_FLATNIBPEN 5 #define KSTROKE_SQUARE 6 #define KSTROKE_OBTSQUARE 7 #define KSTROKE_ROUND 8 #define KSTROKE_TAPERED 9 #define KSTROKE_MECHBRUSH 10 #define KSTROKE_STACCATO 11 #define KSTROKE_VOLATE 12 #define KSTROKE__LAST 12 #define KCELL_NORMNOSLANT 2 #define KCELL_NORMSLANTED 3 #define KCELL_WIDENOSLANT 4 #define KCELL_WIDESLANTED 5 #define KCELL_TALLNOSLANT 6 #define KCELL_TALLSLANTED 7 #define KCELL_XTRAWIDENOSLANT 8 #define KCELL_XTRAWIDESLANTED 9 #define KCELL_XTRATALLNOSLANT 10 #define KCELL_XTRATALLSLANTED 11 #define KCELL__LAST 11 #define KSSTROKE_ZOT 2 #define KSSTROKE_LONGZOT 3 #define KSSTROKE_FATZOT 4 #define KSSTROKE_HOOKEDZOT 5 #define KSSTROKE_SHORTRECT 6 #define KSSTROKE_LONGRECT 7 #define KSSTROKE_TAPEREDRECT 8 #define KSSTROKE_SPIKE 9 #define KSSTROKE_ROUNDED 10 #define KSSTROKE_EXAGGERATED 11 #define KSSTROKE_ROUGH 12 #define KSSTROKE__LAST 12 #define KTOP_STDNOSQUARE 2 #define KTOP_MODNOSQUARE 3 #define KTOP_STRONGNOSQUARE 4 #define KTOP_WILDNOSQUARE 5 #define KTOP_STDSQUARE 6 #define KTOP_MODSQUARE 7 #define KTOP_STRONGSQUARE 8 #define KTOP_WILDSQUARE 9 #define KTOP__LAST 9 #define KSTYLESIM_FULL 2 #define KSTYLESIM_COMPLEMENT 3 #define KSTYLESIM_SIMILAR 4 #define KSTYLESIM_DIFFERENT 5 #define KSTYLESIM_DISPARATE 6 #define KSTYLESIM__LAST 6 #define KSTROKEVAR_FULL 2 #define KSTROKEVAR_MODERATE 3 #define KSTROKEVAR_LOW 4 #define KSTROKEVAR_NONE 5 #define KSTROKEVAR__LAST 5 #endif /* ifndef NOELSEPANKANJI */ #endif /* ifndef NOELSEPANCONST */ /*************************************************************************** * LATIN TEXT PANOSE INDICES * * Indices into an array containing the standard 10-digit PANOSE number. ***************************************************************************/ #define PAN_IND_FAMILY 0 #define PAN_IND_SERIF 1 #define PAN_IND_WEIGHT 2 #define PAN_IND_PROPORTION 3 #define PAN_IND_CONTRAST 4 #define PAN_IND_STROKE 5 #define PAN_IND_ARMSTYLE 6 #define PAN_IND_LTRFORM 7 #define PAN_IND_MIDLINE 8 #define PAN_IND_XHEIGHT 9 #define PAN_IND__LAST 9 /*************************************************************************** * LATIN SCRIPT PANOSE INDICES * * Indices into an array containing the Latin Script 10-digit PANOSE number. ***************************************************************************/ #ifndef NOELSEPANSCRIPT /* define PAN_IND_FAMILY 0 */ #define SPAN_IND_STOOL 1 #define SPAN_IND_WEIGHT 2 #define SPAN_IND_MONOSPC 3 #define SPAN_IND_ASPECT 4 #define SPAN_IND_CONTRAST 5 #define SPAN_IND_STOP 6 #define SPAN_IND_SFORM 7 #define SPAN_IND_SFINIAL 8 #define SPAN_IND_SXASCENT 9 #define SPAN_IND__LAST 9 #endif /* ifndef NOELSEPANSCRIPT */ /*************************************************************************** * KANJI PANOSE INDICES * * Indices into an array containing the Kanji 10-digit PANOSE number. ***************************************************************************/ #ifndef NOELSEPANKANJI /* define PAN_IND_FAMILY 0 */ #define KPAN_IND_KSTROKE 1 #define KPAN_IND_WEIGHT 2 #define KPAN_IND_KCELL 3 #define KPAN_IND_MONOSPC 4 #define KPAN_IND_CONTRAST 5 #define KPAN_IND_KSSTROKE 6 #define KPAN_IND_KTOP 7 #define KPAN_IND_KSTYLESIM 8 #define KPAN_IND_KSTROKEVAR 9 #define KPAN_IND__LAST 9 #endif /* ifndef NOELSEPANKANJI */ /*************************************************************************** * KANJI-TO-LATIN WEIGHT INDICES * * Indices into the weights array for the Kanji-to-Latin cross-class * penalty database. ***************************************************************************/ #ifndef NOELSEPANKANJI /* define PAN_IND_FAMILY 0 */ #define PAN_IND_WT_KLSTROKETOSERIF 1 #define PAN_IND_WT_KLWEIGHT 2 #define PAN_IND_WT_KLCELLTOPROP 3 #define PAN_IND_WT_KLCELLTOLTRFORM 4 #define PAN_IND_WT_KLMONOTOPROP 5 #define PAN_IND_WT_KLCONTRAST 6 #define PAN_IND_WT_KLTOPTOLTRFORM 7 #endif /* ifndef NOELSEPANKANJI */ /*************************************************************************** * PANOSE_PENALTY_VERS * * Database format version number. * * 0x0100 - Original implementation. * 0x0101 - Modified the compression formats in which the tables are stored, * and added a flat table format (zero compression). * 0x0110 - PANOSE version 1.0 penalties, previous versions were * "Expanded PANOSE" penalties. Added C3 compression. * 0x0111 - Added byte ordering check, and C4 compression. Also the penalty * table builder will make identical ptbls point to the same data * to further compress the database. ***************************************************************************/ #define PANOSE_PENALTY_VERS 0x0111 /*************************************************************************** * PANOSE PENALTY TABLE data structures * * The following structures are fused together into one big block. See * the sample code in PAN1PTBL.C (provided with the ElseWare Font Mapper * source code) for an example of how to build this structure. ***************************************************************************/ #ifdef ELSEPENALTYDB #define PAN_COMPRESS_C0 0 #define PAN_COMPRESS_C1 1 #define PAN_COMPRESS_C2 2 #define PAN_COMPRESS_C3 3 #define PAN_COMPRESS_C4 4 #define PAN_COMPRESS__LAST 4 /* Byte ordering test: the unByteOrder field of the header is * tested to make sure it matches this value -- if the bytes * are swapped, the test will fail. */ #define PTBL_BYTE_ORDER 0x1234 /* C0 compression == full table provided. The first two bytes * of the table contain its dimensions. When the need exists * to specify the whole table it is usually because it is a * non-square, non-symmetrical table. */ typedef struct _tagEW_PTBL_C0_MEM { EW_BYTE jARangeLast; /* highest possible A value (table width) */ EW_BYTE jBRangeLast; /* highest possible B value (table depth) */ EW_BYTE jReserved; /* reserved, should be zero */ EW_BYTE jPenalties[1]; /* penalty table */ } EW_PTBL_C0_MEM, EW_FAR *EW_LPPTBL_C0_MEM; /* C1 compression == smooth penalty range symetrical about the * diagonal where closest to diagonal == 1 and each increment * away from the diagonal == increment penalty by one. NO table * is provided, and the any, no-fit, and match penalties take * on the defaults listed in the index entry for the dictionary. * The variables ulOffsTbl and unTblSize in the range record * should be zero. */ /* C2 penalties symmetrical around the diagonal but without * a smooth range, lower left half specified. There is no special * record needed: it is an array of bytes where any, no-fit, and * match penalties are taken from the header. */ /* C3 penalties are identical to C2 except the very first byte * is the no-fit penalty value: any and match penalties are taken * from the header. */ /* C4 penalties are similar to C1: symmetric around the diagonal, * increasing in uniform increments the further from the diagonal. * The difference is it doesn't start at 1 and/or doesn't increment * by 1. The start and increment values are provided. */ typedef struct _tagEW_PTBL_C4_MEM { EW_BYTE jStart; /* lowest value in table */ EW_BYTE jIncrement; /* increment away from the diagonal */ } EW_PTBL_C4_MEM, EW_FAR *EW_LPPTBL_C4_MEM; /* Penalty table record, which describes the format of the penalty * table and contains its offset and size. There is an array of * 9 of these at the offset unOffsPTbl stored in the index record * (there is no penalty table for the family digit). In the case of * cross-family mapping, there are unNumAtoB records (instead of 9). */ typedef struct _tagEW_PTBL_MEM { EW_BYTE jRangeLast; /* highest possible PANOSE digit value */ EW_BYTE jCompress; /* type of compression */ EW_USHORT unOffsTbl; /* byte offset to penalty table */ EW_USHORT unTblSize; /* # bytes in penalty table */ } EW_PTBL_MEM, EW_FAR *EW_LPPTBL_MEM; /* The A to B array maps PANOSE digits from one classification to * those in another (this happens when the two Family digits are * not equal). */ typedef struct _tagEW_ATOB_ITEM_MEM { EW_BYTE jAttrA; /* PANOSE number index from family A */ EW_BYTE jAttrB; /* related PANOSE number ind from family B */ } EW_ATOB_ITEM_MEM, EW_FAR *EW_LPATOB_ITEM_MEM; typedef struct _tagEW_ATOB_MEM { EW_USHORT unNumAtoB; /* count of array items */ EW_ATOB_ITEM_MEM AtoBItem[1]; /* remapping array (variable length) */ } EW_ATOB_MEM, EW_FAR *EW_LPATOB_MEM; /* Mapper weights are stored in an array of 10 1-byte values. * We include a weight for the family digit even though it is * ignored by the mapper (it is included so the weights array * is parrallel to the PANOSE digits array, allowing the same * constants to be used to access both arrays). In cross-family * mappings there are still 10 weights, and the unused ones are * set to zero. */ /* Penalty index record. Each record contains information for a * penalty database, which contains all the penalty tables for one * given family pair. */ typedef struct _tagEW_PIND_MEM { EW_BYTE jFamilyA; /* family pair for which penalties apply */ EW_BYTE jFamilyB; /* ditto */ EW_BYTE jDefAnyPenalty; /* default penalty value for 'any' match */ EW_BYTE jDefNoFitPenalty; /* default penalty value for 'no fit' match */ EW_BYTE jDefMatchPenalty; /* default penalty value for exact match */ EW_BYTE jReserved; /* to keep the record word-aligned */ EW_USHORT unOffsWts; /* byte offs to mapper weights */ EW_USHORT unOffsAtoB; /* byte offs to array relates family A to B */ EW_USHORT unOffsPTbl; /* byte offs to penalty tables */ } EW_PIND_MEM, EW_FAR *EW_LPPIND_MEM; /* Penalty dictionary header. This is the header to the entire * structure. Its last item is a variable length array of index * records. Each index record points to a penalty database. */ typedef struct _tagEW_PDICT_MEM { EW_USHORT unVersion; /* version # of this structure */ EW_USHORT unByteOrder; /* byte ordering flag */ EW_USHORT unNumDicts; /* number of entries in PANOSE_PINDEX array */ EW_USHORT unSizeDB; /* count in bytes of the whole database */ EW_PIND_MEM pind[1]; /* array of EW_PIND recs (variable len) */ } EW_PDICT_MEM, EW_FAR *EW_LPPDICT_MEM; #endif /* ifdef ELSEPENALTYDB */ /*************************************************************************** * MAP STATE structure * * This data structure stores the state variables used by the mapper. * It is passed into almost all the mapper routines. ***************************************************************************/ typedef struct _tagEW_MAPSTATE { EW_ULONG ulSanity; EW_USHORT unThreshold; EW_USHORT unRelaxThresholdCount; EW_ULONG ulhPan1Data; EW_BOOL bUseDef; EW_BYTE ajPanDef[NUM_PAN_DIGITS]; #ifndef NOELSEWEIGHTS EW_BYTE ajWtRefA[MAX_CUSTOM_WEIGHTS]; EW_BYTE ajWtRefB[MAX_CUSTOM_WEIGHTS]; EW_BYTE ajCustomWt[SIZE_PAN1_NUM * MAX_CUSTOM_WEIGHTS]; #endif } EW_MAPSTATE, EW_FAR *EW_LPMAPSTATE; /*************************************************************************** * ELSEPAN.C: Core PANOSE 1.0 font mapping routines. ***************************************************************************/ GLOBAL EW_SHORT EW_FAR EW_PASCAL nPANMapInit ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_USHORT unSizeMapState )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANMapClose ELSEARGS (( EW_LPMAPSTATE lpMapState )); GLOBAL EW_USHORT EW_FAR EW_PASCAL unPANMatchFonts ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_LPBYTE lpPanWant, EW_ULONG ulSizeWant, EW_LPBYTE lpPanThis, EW_ULONG ulSizeThis, EW_BYTE jMapToFamily )); GLOBAL EW_VOID EW_FAR EW_PASCAL vPANMakeDummy ELSEARGS (( EW_LPBYTE lpPanThis, EW_USHORT unSize )); #ifndef NOELSEPICKFONTS GLOBAL EW_SHORT EW_FAR EW_PASCAL nPANGetMapDefault ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_LPBYTE lpPanDef, EW_USHORT unSizePanDef )); GLOBAL EW_SHORT EW_FAR EW_PASCAL nPANSetMapDefault ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_LPBYTE lpPanDef, EW_USHORT unSizePanDef )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANEnableMapDefault ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_BOOL bEnable )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANIsDefaultEnabled ELSEARGS (( EW_LPMAPSTATE lpMapState )); GLOBAL EW_USHORT EW_FAR EW_PASCAL unPANPickFonts ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_LPUSHORT lpIndsBest, EW_LPUSHORT lpMatchValues, EW_LPBYTE lpPanWant, EW_USHORT unNumInds, EW_LPBYTE lpPanFirst, EW_USHORT unNumAvail, EW_SHORT nRecSize, EW_BYTE jMapToFamily )); #endif /* ifndef NOELSEPICKFONTS */ #ifndef NOELSETHRESHOLD GLOBAL EW_USHORT EW_FAR EW_PASCAL unPANGetMapThreshold ELSEARGS (( EW_LPMAPSTATE lpMapState )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANSetMapThreshold ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_USHORT unThreshold )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANIsThresholdRelaxed ELSEARGS (( EW_LPMAPSTATE lpMapState )); GLOBAL EW_VOID EW_FAR EW_PASCAL vPANRelaxThreshold ELSEARGS (( EW_LPMAPSTATE lpMapState )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANRestoreThreshold ELSEARGS (( EW_LPMAPSTATE lpMapState )); #endif /* ifndef NOELSETHRESHOLD */ #ifndef NOELSEWEIGHTS GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANGetMapWeights ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_BYTE jFamilyA, EW_BYTE jFamilyB, EW_LPBYTE lpjWts, EW_LPBOOL lpbIsCustom )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANSetMapWeights ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_BYTE jFamilyA, EW_BYTE jFamilyB, EW_LPBYTE lpjWts )); GLOBAL EW_BOOL EW_FAR EW_PASCAL bPANClearMapWeights ELSEARGS (( EW_LPMAPSTATE lpMapState, EW_BYTE jFamilyA, EW_BYTE jFamilyB )); #endif /* ifndef NOELSEWEIGHTS */ #ifdef __cplusplus } #endif #endif /* ifndef __ELSEPAN_H__ */ /*************************************************************************** * Revision log: ***************************************************************************/ /* * $lgb$ * 1.0 31-Jan-93 msd PANOSE 1.0 mapper: 10-digit PANOSE. * 1.1 2-Feb-93 msd Removed huge pointer stuff. * 1.2 2-Feb-93 msd * 1.3 3-Feb-93 msd Removed ctrl-Z at EOF. * 1.4 3-Feb-93 msd Fixed bug caused by vcs check-in. * 1.5 6-Feb-93 msd Word-aligned C0 penalty header. * 1.6 15-Feb-93 msd For extra security, bumped the sanity value from word to a long. * 1.7 18-Feb-93 msd Added support for C++ compilers. * 1.8 18-Feb-93 msd Added penalty table byte-ordering check, and C4 ptbl compression (new version of ptbl). Use EW_FAR. * 1.9 27-Apr-93 msd Added MAX_PAN1_DIGIT. * 1.10 19-Jul-93 msd Added compilation flags to selectively disable mapper routines. * $lge$ */