/***************************************************************************/
/*                                                                         */
/*  gxaccess.h                                                             */
/*                                                                         */
/*    AAT/TrueTypeGX private data accessor (specification only).           */
/*                                                                         */
/*  Copyright 2003 by                                                      */
/*  Masatake YAMATO and Redhat K.K.                                        */
/*                                                                         */
/*  This file 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.                                        */
/*                                                                         */
/***************************************************************************/

/***************************************************************************/
/* Development of the code in this file is support of                      */
/* Information-technology Promotion Agency, Japan.                         */
/***************************************************************************/

#ifndef __GXACCESS_H__
#define __GXACCESS_H__ 

#include <ft2build.h>
#include FT_TYPES_H

#include "gxltypes.h"
#include "gxtypes.h"

FT_BEGIN_HEADER

/* feat */
  FT_LOCAL ( FT_Bool )  
  gx_feat_has_feature_type ( GX_Feat feat, 
			     FT_UShort feature_type );

/* prop */
  FT_LOCAL ( FT_UShort ) 
  gx_prop_get( GX_Prop   prop, 
	       FT_Long   glyph );

/* lcar */
  FT_LOCAL( GX_LigCaretClassEntry ) 
  gx_lcar_get ( GX_Lcar lcar, 
		FT_UShort glyphID );

/* mort */
  typedef FT_Error (* GX_Mort_Feature_Func)( GX_MetamorphosisFeatureTable feat_Subtbl, 
					     FT_Pointer user );
  FT_LOCAL( FT_Error )  gx_mort_foreach_feature ( GX_Mort mort, 
						  GX_Mort_Feature_Func func, 
						  FT_Pointer user );
  FT_LOCAL( FT_UShort ) 
  gx_mort_count_feat_not_in_feat ( GX_Mort mort, 
				   GX_Feat feat );
  FT_LOCAL( FT_Error ) 
  gx_mort_substitute_glyph ( GX_Mort mort,
			     GXL_FeaturesRequest request,
			     FTL_Glyphs_Array in,
			     FTL_Glyphs_Array out );

/* morx */
  typedef FT_Error (* GX_Morx_Feature_Func)( GX_XMetamorphosisFeatureTable feat_Subtbl, 
					     FT_Pointer user );
  FT_LOCAL( FT_Error )
  gx_morx_foreach_feature ( GX_Morx morx, 
			    GX_Morx_Feature_Func func, 
			    FT_Pointer user );

  FT_LOCAL( FT_UShort )
  gx_morx_count_feat_not_in_feat ( GX_Morx morx, 
				   GX_Feat feat );
  FT_LOCAL( FT_Error )
  gx_morx_substitute_glyph ( GX_Morx morx,
			     GXL_FeaturesRequest request,
			     FTL_Glyphs_Array in,
			     FTL_Glyphs_Array out );

/* kern */
  FT_LOCAL( FT_Error ) gx_kern_get_pair_kerning ( GX_Kern kern, 
						  FT_UShort     left_glyph, 
						  FT_UShort     right_glyph,
						  FTL_Direction dir,
						  FT_Vector*  kerning );

  FT_LOCAL( FT_Error ) gx_kern_get_contextual_kerning( GX_Kern kern,
						       FTL_Glyphs_Array garray,
						       FTL_Direction dir,
						       GXL_Initial_State initial_state,
						       FT_Vector * kerning );

/* trak */
  FT_LOCAL( FT_Error ) gx_trak_get( GX_Trak   trak,
				    FT_Fixed  track,
				    FT_Fixed  size,
				    FTL_Direction dir,
				    FT_FWord* value );

  FT_LOCAL( FT_UShort ) gx_trak_count_name_index( GX_Trak trak );
  FT_LOCAL( FT_Error )  gx_trak_get_name ( GX_Trak trak,
					   FT_UShort index,
					   FT_UShort     * name_index,
					   FTL_Direction * dir,
					   FT_Fixed      * track );
FT_END_HEADER

#endif /* Not def: __GXACCESS_H__ */


/* END */
