PageRenderTime 21ms CodeModel.GetById 11ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/src/freetype/src/gxvalid/gxvmorx0.c

https://bitbucket.org/cabalistic/ogredeps/
C | 111 lines | 58 code | 22 blank | 31 comment | 1 complexity | bcb0e7238f4d53d70ca6903e412af094 MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  gxvmorx0.c                                                             */
  4/*                                                                         */
  5/*    TrueTypeGX/AAT morx 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 "gxvmorx.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_gxvmorx
 39
 40
 41  static void
 42  gxv_morx_subtable_type0_entry_validate(
 43    FT_UShort                        state,
 44    FT_UShort                        flags,
 45    GXV_XStateTable_GlyphOffsetCPtr  glyphOffset_p,
 46    FT_Bytes                         table,
 47    FT_Bytes                         limit,
 48    GXV_Validator                    valid )
 49  {
 50#ifdef GXV_LOAD_UNUSED_VARS
 51    FT_UShort  markFirst;
 52    FT_UShort  dontAdvance;
 53    FT_UShort  markLast;
 54#endif
 55    FT_UShort  reserved;
 56#ifdef GXV_LOAD_UNUSED_VARS
 57    FT_UShort  verb;
 58#endif
 59
 60    FT_UNUSED( state );
 61    FT_UNUSED( glyphOffset_p );
 62    FT_UNUSED( table );
 63    FT_UNUSED( limit );
 64
 65
 66#ifdef GXV_LOAD_UNUSED_VARS
 67    markFirst   = (FT_UShort)( ( flags >> 15 ) & 1 );
 68    dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
 69    markLast    = (FT_UShort)( ( flags >> 13 ) & 1 );
 70#endif
 71
 72    reserved = (FT_UShort)( flags & 0x1FF0 );
 73#ifdef GXV_LOAD_UNUSED_VARS
 74    verb     = (FT_UShort)( flags & 0x000F );
 75#endif
 76
 77    if ( 0 < reserved )
 78    {
 79      GXV_TRACE(( " non-zero bits found in reserved range\n" ));
 80      FT_INVALID_DATA;
 81    }
 82  }
 83
 84
 85  FT_LOCAL_DEF( void )
 86  gxv_morx_subtable_type0_validate( FT_Bytes       table,
 87                                    FT_Bytes       limit,
 88                                    GXV_Validator  valid )
 89  {
 90    FT_Bytes  p = table;
 91
 92
 93    GXV_NAME_ENTER(
 94      "morx chain subtable type0 (Indic-Script Rearrangement)" );
 95
 96    GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
 97
 98    valid->xstatetable.optdata               = NULL;
 99    valid->xstatetable.optdata_load_func     = NULL;
100    valid->xstatetable.subtable_setup_func   = NULL;
101    valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
102    valid->xstatetable.entry_validate_func =
103      gxv_morx_subtable_type0_entry_validate;
104
105    gxv_XStateTable_validate( p, limit, valid );
106
107    GXV_EXIT;
108  }
109
110
111/* END */