[PATCH 1/6] usp10: Introduce an enumeration for GPOS lookup types.

Aric Stewart aric at codeweavers.com
Tue Feb 21 07:02:26 CST 2017


Signed-off-by: Aric Stewart <aric at codeweavers.com>

On 2/19/17 12:02 PM, Henri Verbeet wrote:
> As opposed to using magic numbers.
> 
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
> This supersedes patch 130419.
> ---
>  dlls/usp10/opentype.c | 57 ++++++++++++++++++++++++++++++++++++---------------
>  1 file changed, 40 insertions(+), 17 deletions(-)
> 
> diff --git a/dlls/usp10/opentype.c b/dlls/usp10/opentype.c
> index a9aa4f4..a67bba7 100644
> --- a/dlls/usp10/opentype.c
> +++ b/dlls/usp10/opentype.c
> @@ -48,6 +48,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(uniscribe);
>  /* These are all structures needed for the cmap format 12 table */
>  #define CMAP_TAG MS_MAKE_TAG('c', 'm', 'a', 'p')
>  
> +enum gpos_lookup_type
> +{
> +    GPOS_LOOKUP_ADJUST_SINGLE = 0x1,
> +    GPOS_LOOKUP_ADJUST_PAIR = 0x2,
> +    GPOS_LOOKUP_ATTACH_CURSIVE = 0x3,
> +    GPOS_LOOKUP_ATTACH_MARK_TO_BASE = 0x4,
> +    GPOS_LOOKUP_ATTACH_MARK_TO_LIGATURE = 0x5,
> +    GPOS_LOOKUP_ATTACH_MARK_TO_MARK = 0x6,
> +    GPOS_LOOKUP_POSITION_CONTEXT = 0x7,
> +    GPOS_LOOKUP_POSITION_CONTEXT_CHAINED = 0x8,
> +    GPOS_LOOKUP_POSITION_EXTENSION = 0x9,
> +};
> +
>  typedef struct {
>      WORD platformID;
>      WORD encodingID;
> @@ -1587,7 +1600,7 @@ static const BYTE *GPOS_get_subtable(const OT_LookupTable *look, int index)
>  {
>      int offset = GET_BE_WORD(look->SubTable[index]);
>  
> -    if (GET_BE_WORD(look->LookupType) == 9)
> +    if (GET_BE_WORD(look->LookupType) == GPOS_LOOKUP_POSITION_EXTENSION)
>      {
>          const GPOS_ExtensionPosFormat1 *ext = (const GPOS_ExtensionPosFormat1 *)((const BYTE *)look + offset);
>          if (GET_BE_WORD(ext->PosFormat) == 1)
> @@ -2250,13 +2263,15 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>      int offset;
>      const OT_LookupTable *look;
>      int ppem = lpotm->otmTextMetrics.tmAscent + lpotm->otmTextMetrics.tmDescent - lpotm->otmTextMetrics.tmInternalLeading;
> -    WORD type;
> +    enum gpos_lookup_type type;
>  
>      offset = GET_BE_WORD(lookup->Lookup[lookup_index]);
>      look = (const OT_LookupTable*)((const BYTE*)lookup + offset);
>      type = GET_BE_WORD(look->LookupType);
> -    TRACE("type %i, flag %x, subtables %i\n",type,GET_BE_WORD(look->LookupFlag),GET_BE_WORD(look->SubTableCount));
> -    if (type == 9)
> +    TRACE("type %#x, flag %#x, subtables %u.\n", type,
> +            GET_BE_WORD(look->LookupFlag), GET_BE_WORD(look->SubTableCount));
> +
> +    if (type == GPOS_LOOKUP_POSITION_EXTENSION)
>      {
>          if (GET_BE_WORD(look->SubTableCount))
>          {
> @@ -2278,7 +2293,7 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>      }
>      switch (type)
>      {
> -        case 1:
> +        case GPOS_LOOKUP_ADJUST_SINGLE:
>          {
>              double devX, devY;
>              POINT adjust = {0,0};
> @@ -2299,7 +2314,8 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              break;
>          }
> -        case 2:
> +
> +        case GPOS_LOOKUP_ADJUST_PAIR:
>          {
>              POINT advance[2]= {{0,0},{0,0}};
>              POINT adjust[2]= {{0,0},{0,0}};
> @@ -2333,7 +2349,8 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              return index;
>          }
> -        case 3:
> +
> +        case GPOS_LOOKUP_ATTACH_CURSIVE:
>          {
>              POINT desU = {0,0};
>              double devX, devY;
> @@ -2348,7 +2365,8 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              break;
>          }
> -        case 4:
> +
> +        case GPOS_LOOKUP_ATTACH_MARK_TO_BASE:
>          {
>              double devX, devY;
>              POINT desU = {0,0};
> @@ -2366,7 +2384,8 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              break;
>          }
> -        case 5:
> +
> +        case GPOS_LOOKUP_ATTACH_MARK_TO_LIGATURE:
>          {
>              double devX, devY;
>              POINT desU = {0,0};
> @@ -2379,7 +2398,8 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              break;
>          }
> -        case 6:
> +
> +        case GPOS_LOOKUP_ATTACH_MARK_TO_MARK:
>          {
>              double devX, devY;
>              POINT desU = {0,0};
> @@ -2393,14 +2413,17 @@ static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOG
>              }
>              break;
>          }
> -        case 7:
> -            return GPOS_apply_ContextPos(psc, lpotm, lplogfont, analysis, piAdvance, lookup, look, glyphs, glyph_index, glyph_count, ppem, pGoffset);
> -        case 8:
> -        {
> -            return GPOS_apply_ChainContextPos(psc, lpotm, lplogfont, analysis, piAdvance, lookup, look, glyphs, glyph_index, glyph_count, ppem, pGoffset);
> -        }
> +
> +        case GPOS_LOOKUP_POSITION_CONTEXT:
> +            return GPOS_apply_ContextPos(psc, lpotm, lplogfont, analysis, piAdvance,
> +                    lookup, look, glyphs, glyph_index, glyph_count, ppem, pGoffset);
> +
> +        case GPOS_LOOKUP_POSITION_CONTEXT_CHAINED:
> +            return GPOS_apply_ChainContextPos(psc, lpotm, lplogfont, analysis, piAdvance,
> +                    lookup, look, glyphs, glyph_index, glyph_count, ppem, pGoffset);
> +
>          default:
> -            FIXME("We do not handle SubType %i\n",type);
> +            FIXME("Unhandled GPOS lookup type %#x.\n", type);
>      }
>      return glyph_index+1;
>  }
> 



More information about the wine-devel mailing list