PageRenderTime 20ms CodeModel.GetById 8ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/freetype2/src/gxvalid/gxvmort0.c

http://github.com/zpao/v8monkey
C | 137 lines | 79 code | 27 blank | 31 comment | 1 complexity | f5e0b2a1623d35b143de17a3df651817 MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  gxvmort0.c                                                             */
  4/*                                                                         */
  5/*    TrueTypeGX/AAT mort table validation                                 */
  6/*    body for type0 (Indic Script Rearrangement) subtable.                */
  7/*                                                                         */
  8/*  Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,       */
  9/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 10/*                                                                         */
 11/*  This file is part of the FreeType project, and may only be used,       */
 12/*  modified, and distributed under the terms of the FreeType project      */
 13/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 14/*  this file you indicate that you have read the license and              */
 15/*  understand and accept it fully.                                        */
 16/*                                                                         */
 17/***************************************************************************/
 18
 19/***************************************************************************/
 20/*                                                                         */
 21/* gxvalid is derived from both gxlayout module and otvalid module.        */
 22/* Development of gxlayout is supported by the Information-technology      */
 23/* Promotion Agency(IPA), Japan.                                           */
 24/*                                                                         */
 25/***************************************************************************/
 26
 27
 28#include "gxvmort.h"
 29
 30
 31  /*************************************************************************/
 32  /*                                                                       */
 33  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
 34  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
 35  /* messages during execution.                                            */
 36  /*                                                                       */
 37#undef  FT_COMPONENT
 38#define FT_COMPONENT  trace_gxvmort
 39
 40
 41  static const char* GXV_Mort_IndicScript_Msg[] =
 42  {
 43    "no change",
 44    "Ax => xA",
 45    "xD => Dx",
 46    "AxD => DxA",
 47    "ABx => xAB",
 48    "ABx => xBA",
 49    "xCD => CDx",
 50    "xCD => DCx",
 51    "AxCD => CDxA",
 52    "AxCD => DCxA",
 53    "ABxD => DxAB",
 54    "ABxD => DxBA",
 55    "ABxCD => CDxAB",
 56    "ABxCD => CDxBA",
 57    "ABxCD => DCxAB",
 58    "ABxCD => DCxBA",
 59
 60  };
 61
 62
 63  static void
 64  gxv_mort_subtable_type0_entry_validate(
 65    FT_Byte                         state,
 66    FT_UShort                       flags,
 67    GXV_StateTable_GlyphOffsetCPtr  glyphOffset_p,
 68    FT_Bytes                        table,
 69    FT_Bytes                        limit,
 70    GXV_Validator                   valid )
 71  {
 72    FT_UShort  markFirst;
 73    FT_UShort  dontAdvance;
 74    FT_UShort  markLast;
 75    FT_UShort  reserved;
 76    FT_UShort  verb = 0;
 77
 78    FT_UNUSED( state );
 79    FT_UNUSED( table );
 80    FT_UNUSED( limit );
 81
 82    FT_UNUSED( GXV_Mort_IndicScript_Msg[verb] ); /* for the non-debugging */
 83    FT_UNUSED( glyphOffset_p );                  /* case                  */
 84
 85
 86    markFirst   = (FT_UShort)( ( flags >> 15 ) & 1 );
 87    dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
 88    markLast    = (FT_UShort)( ( flags >> 13 ) & 1 );
 89
 90    reserved = (FT_UShort)( flags & 0x1FF0 );
 91    verb     = (FT_UShort)( flags & 0x000F );
 92
 93    GXV_TRACE(( "  IndicScript MorphRule for glyphOffset 0x%04x",
 94                glyphOffset_p->u ));
 95    GXV_TRACE(( " markFirst=%01d", markFirst ));
 96    GXV_TRACE(( " dontAdvance=%01d", dontAdvance ));
 97    GXV_TRACE(( " markLast=%01d", markLast ));
 98    GXV_TRACE(( " %02d", verb ));
 99    GXV_TRACE(( " %s\n", GXV_Mort_IndicScript_Msg[verb] ));
100
101    if ( 0 < reserved )
102    {
103      GXV_TRACE(( " non-zero bits found in reserved range\n" ));
104      FT_INVALID_DATA;
105    }
106    else
107      GXV_TRACE(( "\n" ));
108  }
109
110
111  FT_LOCAL_DEF( void )
112  gxv_mort_subtable_type0_validate( FT_Bytes       table,
113                                    FT_Bytes       limit,
114                                    GXV_Validator  valid )
115  {
116    FT_Bytes  p = table;
117
118
119    GXV_NAME_ENTER(
120      "mort chain subtable type0 (Indic-Script Rearrangement)" );
121
122    GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
123
124    valid->statetable.optdata               = NULL;
125    valid->statetable.optdata_load_func     = NULL;
126    valid->statetable.subtable_setup_func   = NULL;
127    valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
128    valid->statetable.entry_validate_func =
129      gxv_mort_subtable_type0_entry_validate;
130
131    gxv_StateTable_validate( p, limit, valid );
132
133    GXV_EXIT;
134  }
135
136
137/* END */