Edit

kc3-lang/freetype/src/otlayout/otlayout.h

Branch :

  • Show log

    Commit

  • Author : David Turner
    Date : 2002-11-07 01:36:29
    Hash : e57ca7de
    Message : * src/otlayout/otlayout.h, src/otlyaout/otlconf.h, src/otlayout/otlgsub.c, src/otlayout/otlgsub.h, src/otlayout/otlparse.c, src/otlayout/otlparse.h, src/otlayout/otlutils.h: updating the OpenType Layout code, adding support fot the first GSUB lookups. Nothing that really compiles for now though * src/autohint/ahhint.c: disabled serif stem width quantization. It produces slightly better shapes though this is not distinguishable with many fonts.

  • src/otlayout/otlayout.h
  • #ifndef __OT_LAYOUT_H__
    #define __OT_LAYOUT_H__
    
    
    #include "otlconf.h"
    
    OTL_BEGIN_HEADER
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                       BASE DATA TYPES                        *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
      typedef unsigned char     OTL_Byte;
      typedef const OTL_Byte*   OTL_Bytes;
    
      typedef int               OTL_Error;
    
      typedef void*             OTL_Pointer;
    
      typedef int               OTL_Int;
      typedef unsigned int      OTL_UInt;
    
      typedef long              OTL_Long;
      typedef unsigned long     OTL_ULong;
    
      typedef short             OTL_Int16;
      typedef unsigned short    OTL_UInt16;
    
    
    #if OTL_SIZEOF_INT == 4
    
      typedef int               OTL_Int32;
      typedef unsigned int      OTL_UInt32;
    
    #elif OTL_SIZEOF_LONG == 4
    
      typedef long              OTL_Int32;
      typedef unsigned long     OTL_UInt32;
    
    #else
    #  error "no 32-bits type found"
    #endif
    
      typedef OTL_UInt32        OTL_Tag;
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                       ERROR CODES                            *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
      typedef enum
      {
        OTL_Err_Ok = 0,
        OTL_Err_InvalidArgument,
        OTL_Err_InvalidFormat,
        OTL_Err_InvalidOffset,
    
        OTL_Err_Max
    
      } OTL_Error;
    
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                     MEMORY MANAGEMENT                        *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
      typedef OTL_Pointer  (*OTL_AllocFunc)( OTL_ULong    size,
                                             OTL_Pointer  data );
    
      typedef OTL_Pointer  (*OTL_ReallocFunc)( OTL_Pointer   block,
                                               OTL_ULong     size,
                                               OTL_Pointer   data );
    
      typedef void         (*OTL_FreeFunc)( OTL_Pointer  block,
                                            OTL_Pointer  data );
    
      typedef struct OTL_MemoryRec_
      {
        OTL_Pointer      mem_data;
        OTL_AllocFunc    mem_alloc;
        OTL_ReallocFunc  mem_realloc;
        OTL_FreeFunc     mem_free;
    
      } OTL_MemoryRec, *OTL_Memory;
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                        ENUMERATIONS                          *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
    /* re-define OTL_MAKE_TAG to something different if you're not */
    /* using an ASCII-based character set (Vaxes anyone ?)         */
    #ifndef  OTL_MAKE_TAG
    #define  OTL_MAKE_TAG(c1,c2,c3,c4)         \
               ( ( (OTL_UInt32)(c1) << 24 ) |  \
                   (OTL_UInt32)(c2) << 16 ) |  \
                   (OTL_UInt32)(c3) <<  8 ) |  \
                   (OTL_UInt32)(c4)         )
    #endif
    
      typedef enum OTL_ScriptTag_
      {
        OTL_SCRIPT_NONE = 0,
    
    #define OTL_SCRIPT_TAG(c1,c2,c3,c4,s,n)  OTL_SCRIPT_TAG_ ## n = OTL_MAKE_TAG(c1,c2,c3,c4),
    #include "otltags.h"
    
        OTL_SCRIPT_MAX
    
      } OTL_ScriptTag;
    
    
      typedef enum OTL_LangTag_
      {
        OTL_LANG_DEFAULT = 0,
    
    #define OTL_LANG_TAG(c1,c2,c3,c4,s,n)  OTL_LANG_TAG_ ## n = OTL_MAKE_TAG(c1,c2,c3,c4),
    #include "otltags.h"
    
        OTL_LANG_MAX
    
      } OTL_LangTag;
    
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                       MEMORY READS                           *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
    #define  OTL_PEEK_USHORT(p)  ( ((OTL_UInt)((p)[0]) << 8) |  \
                                   ((OTL_UInt)((p)[1])     ) )
    
    #define  OTL_PEEK_ULONG(p)   ( ((OTL_UInt32)((p)[0]) << 24) |  \
                                   ((OTL_UInt32)((p)[1]) << 16) |  \
                                   ((OTL_UInt32)((p)[2]) <<  8) |  \
                                   ((OTL_UInt32)((p)[3])      ) )
    
    #define  OTL_PEEK_SHORT(p)     ((OTL_Int16)OTL_PEEK_USHORT(p))
    
    #define  OTL_PEEK_LONG(p)      ((OTL_Int32)OTL_PEEK_ULONG(p))
    
    #define  OTL_NEXT_USHORT(p)  ( (p) += 2, OTL_PEEK_USHORT((p)-2) )
    #define  OTL_NEXT_ULONG(p)   ( (p) += 4, OTL_PEEK_ULONG((p)-4) )
    
    #define  OTL_NEXT_SHORT(p)   ((OTL_Int16)OTL_NEXT_USHORT(p))
    #define  OTL_NEXT_LONG(p)    ((OTL_Int32)OTL_NEXT_ULONG(p))
    
     /************************************************************************/
     /************************************************************************/
     /*****                                                              *****/
     /*****                        VALIDATION                            *****/
     /*****                                                              *****/
     /************************************************************************/
     /************************************************************************/
    
      typedef struct OTL_ValidatorRec_*  OTL_Validator;
    
      typedef struct OTL_ValidatorRec_
      {
        OTL_Bytes    limit;
        OTL_Bytes    base;
        OTL_Error    error;
        OTL_jmp_buf  jump_buffer;
    
      } OTL_ValidatorRec;
    
      typedef void  (*OTL_ValidateFunc)( OTL_Bytes  table,
                                         OTL_Valid  valid );
    
      OTL_API( void )
      otl_validator_error( OTL_Validator  validator,
                           OTL_Error      error );
    
    #define  OTL_INVALID(e)  otl_validator_error( valid, e )
    
    #define  OTL_INVALID_TOO_SHORT  OTL_INVALID( OTL_Err_InvalidOffset )
    #define  OTL_INVALID_DATA       OTL_INVALID( OTL_Err_InvalidFormat )
    
    #define  OTL_CHECK(_count)   OTL_BEGIN_STMNT                       \
                                   if ( p + (_count) > valid->limit )  \
                                     OTL_INVALID_TOO_SHORT;            \
                                 OTL_END_STMNT
    
     /* */
    
    OTL_END_HEADER
    
    #endif /* __OPENTYPE_LAYOUT_H__ */