133 lines
3.6 KiB
C
133 lines
3.6 KiB
C
|
/*******************************************************************
|
||
|
*
|
||
|
* Copyright 1996-2000 by
|
||
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||
|
*
|
||
|
* Copyright 2006 Behdad Esfahbod
|
||
|
*
|
||
|
* This is part of HarfBuzz, an OpenType Layout engine library.
|
||
|
*
|
||
|
* See the file name COPYING for licensing information.
|
||
|
*
|
||
|
******************************************************************/
|
||
|
#ifndef HARFBUZZ_GSUB_H
|
||
|
#define HARFBUZZ_GSUB_H
|
||
|
|
||
|
#include "harfbuzz-gdef.h"
|
||
|
#include "harfbuzz-buffer.h"
|
||
|
|
||
|
FT_BEGIN_HEADER
|
||
|
|
||
|
#define HB_Err_Invalid_GSUB_SubTable_Format 0x1010
|
||
|
#define HB_Err_Invalid_GSUB_SubTable 0x1011
|
||
|
|
||
|
|
||
|
/* Lookup types for glyph substitution */
|
||
|
|
||
|
#define HB_GSUB_LOOKUP_SINGLE 1
|
||
|
#define HB_GSUB_LOOKUP_MULTIPLE 2
|
||
|
#define HB_GSUB_LOOKUP_ALTERNATE 3
|
||
|
#define HB_GSUB_LOOKUP_LIGATURE 4
|
||
|
#define HB_GSUB_LOOKUP_CONTEXT 5
|
||
|
#define HB_GSUB_LOOKUP_CHAIN 6
|
||
|
#define HB_GSUB_LOOKUP_EXTENSION 7
|
||
|
#define HB_GSUB_LOOKUP_REVERSE_CHAIN 8
|
||
|
|
||
|
|
||
|
/* A pointer to a function which selects the alternate glyph. `pos' is
|
||
|
the position of the glyph with index `glyphID', `num_alternates'
|
||
|
gives the number of alternates in the `alternates' array. `data'
|
||
|
points to the user-defined structure specified during a call to
|
||
|
HB_GSUB_Register_Alternate_Function(). The function must return an
|
||
|
index into the `alternates' array. */
|
||
|
|
||
|
typedef FT_UShort (*HB_AltFunction)(FT_ULong pos,
|
||
|
FT_UShort glyphID,
|
||
|
FT_UShort num_alternates,
|
||
|
FT_UShort* alternates,
|
||
|
void* data );
|
||
|
|
||
|
|
||
|
struct HB_GSUBHeader_
|
||
|
{
|
||
|
FT_Memory memory;
|
||
|
|
||
|
FT_ULong offset;
|
||
|
|
||
|
FT_Fixed Version;
|
||
|
|
||
|
HB_ScriptList ScriptList;
|
||
|
HB_FeatureList FeatureList;
|
||
|
HB_LookupList LookupList;
|
||
|
|
||
|
HB_GDEFHeader* gdef;
|
||
|
|
||
|
/* the next two fields are used for an alternate substitution callback
|
||
|
function to select the proper alternate glyph. */
|
||
|
|
||
|
HB_AltFunction altfunc;
|
||
|
void* data;
|
||
|
};
|
||
|
|
||
|
typedef struct HB_GSUBHeader_ HB_GSUBHeader;
|
||
|
typedef HB_GSUBHeader* HB_GSUB;
|
||
|
|
||
|
|
||
|
FT_Error HB_Load_GSUB_Table( FT_Face face,
|
||
|
HB_GSUBHeader** gsub,
|
||
|
HB_GDEFHeader* gdef );
|
||
|
|
||
|
|
||
|
FT_Error HB_Done_GSUB_Table( HB_GSUBHeader* gsub );
|
||
|
|
||
|
|
||
|
FT_Error HB_GSUB_Select_Script( HB_GSUBHeader* gsub,
|
||
|
FT_ULong script_tag,
|
||
|
FT_UShort* script_index );
|
||
|
|
||
|
FT_Error HB_GSUB_Select_Language( HB_GSUBHeader* gsub,
|
||
|
FT_ULong language_tag,
|
||
|
FT_UShort script_index,
|
||
|
FT_UShort* language_index,
|
||
|
FT_UShort* req_feature_index );
|
||
|
|
||
|
FT_Error HB_GSUB_Select_Feature( HB_GSUBHeader* gsub,
|
||
|
FT_ULong feature_tag,
|
||
|
FT_UShort script_index,
|
||
|
FT_UShort language_index,
|
||
|
FT_UShort* feature_index );
|
||
|
|
||
|
|
||
|
FT_Error HB_GSUB_Query_Scripts( HB_GSUBHeader* gsub,
|
||
|
FT_ULong** script_tag_list );
|
||
|
|
||
|
FT_Error HB_GSUB_Query_Languages( HB_GSUBHeader* gsub,
|
||
|
FT_UShort script_index,
|
||
|
FT_ULong** language_tag_list );
|
||
|
|
||
|
FT_Error HB_GSUB_Query_Features( HB_GSUBHeader* gsub,
|
||
|
FT_UShort script_index,
|
||
|
FT_UShort language_index,
|
||
|
FT_ULong** feature_tag_list );
|
||
|
|
||
|
|
||
|
FT_Error HB_GSUB_Add_Feature( HB_GSUBHeader* gsub,
|
||
|
FT_UShort feature_index,
|
||
|
FT_UInt property );
|
||
|
|
||
|
FT_Error HB_GSUB_Clear_Features( HB_GSUBHeader* gsub );
|
||
|
|
||
|
|
||
|
FT_Error HB_GSUB_Register_Alternate_Function( HB_GSUBHeader* gsub,
|
||
|
HB_AltFunction altfunc,
|
||
|
void* data );
|
||
|
|
||
|
|
||
|
FT_Error HB_GSUB_Apply_String( HB_GSUBHeader* gsub,
|
||
|
HB_Buffer buffer );
|
||
|
|
||
|
|
||
|
FT_END_HEADER
|
||
|
|
||
|
#endif /* HARFBUZZ_GSUB_H */
|