Home | History | Annotate | Download | only in autofit
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  afblue.h                                                               */
      4 /*                                                                         */
      5 /*    Auto-fitter data for blue strings (specification).                   */
      6 /*                                                                         */
      7 /*  Copyright 2013-2015 by                                                 */
      8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19 #ifndef __AFBLUE_H__
     20 #define __AFBLUE_H__
     21 
     22 
     23 FT_BEGIN_HEADER
     24 
     25 
     26   /* an auxiliary macro to decode a UTF-8 character -- since we only use */
     27   /* hard-coded, self-converted data, no error checking is performed     */
     28 #define GET_UTF8_CHAR( ch, p )                    \
     29           ch = (unsigned char)*p++;               \
     30           if ( ch >= 0x80 )                       \
     31           {                                       \
     32             FT_UInt  len;                         \
     33                                                   \
     34                                                   \
     35             if ( ch < 0xE0 )                      \
     36             {                                     \
     37               len = 1;                            \
     38               ch &= 0x1F;                         \
     39             }                                     \
     40             else if ( ch < 0xF0 )                 \
     41             {                                     \
     42               len = 2;                            \
     43               ch &= 0x0F;                         \
     44             }                                     \
     45             else                                  \
     46             {                                     \
     47               len = 3;                            \
     48               ch &= 0x07;                         \
     49             }                                     \
     50                                                   \
     51             for ( ; len > 0; len-- )              \
     52               ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
     53           }
     54 
     55 
     56   /*************************************************************************/
     57   /*************************************************************************/
     58   /*****                                                               *****/
     59   /*****                    B L U E   S T R I N G S                    *****/
     60   /*****                                                               *****/
     61   /*************************************************************************/
     62   /*************************************************************************/
     63 
     64   /* At the bottommost level, we define strings for finding blue zones. */
     65 
     66 
     67 #define AF_BLUE_STRING_MAX_LEN  @AF_BLUE_STRING_MAX_LEN@
     68 
     69   /* The AF_Blue_String enumeration values are offsets into the */
     70   /* `af_blue_strings' array.                                   */
     71 
     72   typedef enum  AF_Blue_String_
     73   {
     74 @AF_BLUE_STRING_ENUM@
     75 
     76     AF_BLUE_STRING_MAX   /* do not remove */
     77 
     78   } AF_Blue_String;
     79 
     80 
     81   FT_LOCAL_ARRAY( char )
     82   af_blue_strings[];
     83 
     84 
     85   /*************************************************************************/
     86   /*************************************************************************/
     87   /*****                                                               *****/
     88   /*****                 B L U E   S T R I N G S E T S                 *****/
     89   /*****                                                               *****/
     90   /*************************************************************************/
     91   /*************************************************************************/
     92 
     93   /* The next level is to group blue strings into style-specific sets. */
     94 
     95 
     96   /* Properties are specific to a writing system.  We assume that a given  */
     97   /* blue string can't be used in more than a single writing system, which */
     98   /* is a safe bet.                                                        */
     99 #define AF_BLUE_PROPERTY_LATIN_TOP       ( 1U << 0 )  /* must have value 1 */
    100 #define AF_BLUE_PROPERTY_LATIN_NEUTRAL   ( 1U << 1 )
    101 #define AF_BLUE_PROPERTY_LATIN_X_HEIGHT  ( 1U << 2 )
    102 #define AF_BLUE_PROPERTY_LATIN_LONG      ( 1U << 3 )
    103 
    104 #define AF_BLUE_PROPERTY_CJK_TOP    ( 1U << 0 )       /* must have value 1 */
    105 #define AF_BLUE_PROPERTY_CJK_HORIZ  ( 1U << 1 )       /* must have value 2 */
    106 #define AF_BLUE_PROPERTY_CJK_RIGHT  AF_BLUE_PROPERTY_CJK_TOP
    107 
    108 
    109 #define AF_BLUE_STRINGSET_MAX_LEN  @AF_BLUE_STRINGSET_MAX_LEN@
    110 
    111   /* The AF_Blue_Stringset enumeration values are offsets into the */
    112   /* `af_blue_stringsets' array.                                   */
    113 
    114   typedef enum  AF_Blue_Stringset_
    115   {
    116 @AF_BLUE_STRINGSET_ENUM@
    117 
    118     AF_BLUE_STRINGSET_MAX   /* do not remove */
    119 
    120   } AF_Blue_Stringset;
    121 
    122 
    123   typedef struct  AF_Blue_StringRec_
    124   {
    125     AF_Blue_String  string;
    126     FT_UShort       properties;
    127 
    128   } AF_Blue_StringRec;
    129 
    130 
    131   FT_LOCAL_ARRAY( AF_Blue_StringRec )
    132   af_blue_stringsets[];
    133 
    134 /* */
    135 
    136 FT_END_HEADER
    137 
    138 
    139 #endif /* __AFBLUE_H__ */
    140 
    141 
    142 /* END */
    143