-/***************************************************************************/\r
-/* */\r
-/* gxvmort4.c */\r
-/* */\r
-/* TrueTypeGX/AAT mort table validation */\r
-/* body for type4 (Non-Contextual Glyph Substitution) subtable. */\r
-/* */\r
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */\r
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */\r
-/* */\r
-/* This file is part of the FreeType project, and may only be used, */\r
-/* modified, and distributed under the terms of the FreeType project */\r
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */\r
-/* this file you indicate that you have read the license and */\r
-/* understand and accept it fully. */\r
-/* */\r
-/***************************************************************************/\r
-\r
-/***************************************************************************/\r
-/* */\r
-/* gxvalid is derived from both gxlayout module and otvalid module. */\r
-/* Development of gxlayout is supported by the Information-technology */\r
-/* Promotion Agency(IPA), Japan. */\r
-/* */\r
-/***************************************************************************/\r
-\r
-\r
-#include "gxvmort.h"\r
-\r
-\r
- /*************************************************************************/\r
- /* */\r
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */\r
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */\r
- /* messages during execution. */\r
- /* */\r
-#undef FT_COMPONENT\r
-#define FT_COMPONENT trace_gxvmort\r
-\r
-\r
- static void\r
- gxv_mort_subtable_type4_lookupval_validate( FT_UShort glyph,\r
- GXV_LookupValueDesc value,\r
- GXV_Validator valid )\r
- {\r
- FT_UNUSED( glyph );\r
-\r
- gxv_glyphid_validate( value.u, valid );\r
- }\r
-\r
- /*\r
- +===============+ --------+\r
- | lookup header | |\r
- +===============+ |\r
- | BinSrchHeader | |\r
- +===============+ |\r
- | lastGlyph[0] | |\r
- +---------------+ |\r
- | firstGlyph[0] | | head of lookup table\r
- +---------------+ | +\r
- | offset[0] | -> | offset [byte]\r
- +===============+ | +\r
- | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]\r
- +---------------+ |\r
- | firstGlyph[1] | |\r
- +---------------+ |\r
- | offset[1] | |\r
- +===============+ |\r
- |\r
- .... |\r
- |\r
- 16bit value array |\r
- +===============+ |\r
- | value | <-------+\r
- ....\r
- */\r
-\r
- static GXV_LookupValueDesc\r
- gxv_mort_subtable_type4_lookupfmt4_transit(\r
- FT_UShort relative_gindex,\r
- GXV_LookupValueDesc base_value,\r
- FT_Bytes lookuptbl_limit,\r
- GXV_Validator valid )\r
- {\r
- FT_Bytes p;\r
- FT_Bytes limit;\r
- FT_UShort offset;\r
- GXV_LookupValueDesc value;\r
-\r
- /* XXX: check range? */\r
- offset = (FT_UShort)( base_value.u +\r
- relative_gindex * sizeof ( FT_UShort ) );\r
-\r
- p = valid->lookuptbl_head + offset;\r
- limit = lookuptbl_limit;\r
-\r
- GXV_LIMIT_CHECK( 2 );\r
- value.u = FT_NEXT_USHORT( p );\r
-\r
- return value;\r
- }\r
-\r
-\r
- FT_LOCAL_DEF( void )\r
- gxv_mort_subtable_type4_validate( FT_Bytes table,\r
- FT_Bytes limit,\r
- GXV_Validator valid )\r
- {\r
- FT_Bytes p = table;\r
-\r
-\r
- GXV_NAME_ENTER( "mort chain subtable type4 "\r
- "(Non-Contextual Glyph Substitution)" );\r
-\r
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;\r
- valid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate;\r
- valid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit;\r
-\r
- gxv_LookupTable_validate( p, limit, valid );\r
-\r
- GXV_EXIT;\r
- }\r
-\r
-\r
-/* END */\r
+/***************************************************************************/
+/* */
+/* gxvmort4.c */
+/* */
+/* TrueTypeGX/AAT mort table validation */
+/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
+/* */
+/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+/***************************************************************************/
+/* */
+/* gxvalid is derived from both gxlayout module and otvalid module. */
+/* Development of gxlayout is supported by the Information-technology */
+/* Promotion Agency(IPA), Japan. */
+/* */
+/***************************************************************************/
+
+
+#include "gxvmort.h"
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_gxvmort
+
+
+ static void
+ gxv_mort_subtable_type4_lookupval_validate( FT_UShort glyph,
+ GXV_LookupValueDesc value,
+ GXV_Validator valid )
+ {
+ FT_UNUSED( glyph );
+
+ gxv_glyphid_validate( value.u, valid );
+ }
+
+ /*
+ +===============+ --------+
+ | lookup header | |
+ +===============+ |
+ | BinSrchHeader | |
+ +===============+ |
+ | lastGlyph[0] | |
+ +---------------+ |
+ | firstGlyph[0] | | head of lookup table
+ +---------------+ | +
+ | offset[0] | -> | offset [byte]
+ +===============+ | +
+ | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
+ +---------------+ |
+ | firstGlyph[1] | |
+ +---------------+ |
+ | offset[1] | |
+ +===============+ |
+ |
+ .... |
+ |
+ 16bit value array |
+ +===============+ |
+ | value | <-------+
+ ....
+ */
+
+ static GXV_LookupValueDesc
+ gxv_mort_subtable_type4_lookupfmt4_transit(
+ FT_UShort relative_gindex,
+ GXV_LookupValueDesc base_value,
+ FT_Bytes lookuptbl_limit,
+ GXV_Validator valid )
+ {
+ FT_Bytes p;
+ FT_Bytes limit;
+ FT_UShort offset;
+ GXV_LookupValueDesc value;
+
+ /* XXX: check range? */
+ offset = (FT_UShort)( base_value.u +
+ relative_gindex * sizeof ( FT_UShort ) );
+
+ p = valid->lookuptbl_head + offset;
+ limit = lookuptbl_limit;
+
+ GXV_LIMIT_CHECK( 2 );
+ value.u = FT_NEXT_USHORT( p );
+
+ return value;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ gxv_mort_subtable_type4_validate( FT_Bytes table,
+ FT_Bytes limit,
+ GXV_Validator valid )
+ {
+ FT_Bytes p = table;
+
+
+ GXV_NAME_ENTER( "mort chain subtable type4 "
+ "(Non-Contextual Glyph Substitution)" );
+
+ valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
+ valid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate;
+ valid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit;
+
+ gxv_LookupTable_validate( p, limit, valid );
+
+ GXV_EXIT;
+ }
+
+
+/* END */