#ifndef __OTL_PARSER_H__#define __OTL_PARSER_H__ #include "otlayout.h"#include "otlgdef.h"#include "otlgsub.h"#include "otlgpos.h" OTL_BEGIN_HEADER typedef struct OTL_ParserRec_* OTL_Parser; typedef struct OTL_StringRec_* OTL_String; typedef struct OTL_StringGlyphRec_ { OTL_UInt gindex; OTL_UInt properties; OTL_UInt lig_component; OTL_UInt lig_id; } OTL_StringGlyphRec, *OTL_StringGlyph; typedef struct OTL_StringRec_ { OTL_StringGlyph glyphs; OTL_UInt cursor; OTL_UInt length; OTL_UInt capacity; } OTL_StringRec; typedef struct OTL_ParserRec_ { OTL_Bytes tab_gdef; OTL_Bytes tab_gsub; OTL_Bytes tab_gpos; OTL_Bytes tab_base; OTL_Bytes tab_jstf; OTL_Alternate alternate; /* external alternate handler */ OTL_UInt context_len; OTL_UInt markup_flags; OTL_jmp_buf jump_buffer; OTL_Memory memory; OTL_Error error; OTL_StringRec strings[2]; OTL_String str_in; OTL_String str_out; } OTL_ParserRec; typedef enum { OTL_Err_Parser_Ok = 0, OTL_Err_Parser_InvalidData, OTL_Err_Parser_UncoveredGlyph } OTL_ParseError; OTL_LOCAL( OTL_UInt ) otl_parser_get_gindex( OTL_Parser parser ); OTL_LOCAL( void ) otl_parser_error( OTL_Parser parser, OTL_ParserError error ); #define OTL_PARSER_UNCOVERED(x) \ otl_parser_error( x, OTL_Err_Parser_UncoveredGlyph ) OTL_LOCAL( void ) otl_parser_check_property( OTL_Parser parser, OTL_UInt gindex, OTL_UInt flags, OTL_UInt *aproperty ); /* copy current input glyph to output */ OTL_LOCAL( void ) otl_parser_copy_1( OTL_Parser parser ); /* copy current input glyph to output, replacing its index */ OTL_LOCAL( void ) otl_parser_replace_1( OTL_Parser parser, OTL_UInt gindex ); /* copy current input glyph to output, replacing it by several indices */ /* read directly from the table */ OTL_LOCAL( void ) otl_parser_replace_n( OTL_Parser parser, OTL_UInt count, OTL_Bytes indices ); OTL_END_HEADER #endif /* __OTL_PARSER_H__ */
#ifndef __OTL_PARSER_H__
#define __OTL_PARSER_H__
#include "otlayout.h"
#include "otlgdef.h"
#include "otlgsub.h"
#include "otlgpos.h"
OTL_BEGIN_HEADER
typedef struct OTL_ParserRec_* OTL_Parser;
typedef struct OTL_StringRec_* OTL_String;
typedef struct OTL_StringGlyphRec_
{
OTL_UInt gindex;
OTL_UInt properties;
OTL_UInt lig_component;
OTL_UInt lig_id;
} OTL_StringGlyphRec, *OTL_StringGlyph;
typedef struct OTL_StringRec_
{
OTL_StringGlyph glyphs;
OTL_UInt cursor;
OTL_UInt length;
OTL_UInt capacity;
} OTL_StringRec;
typedef struct OTL_ParserRec_
{
OTL_Bytes tab_gdef;
OTL_Bytes tab_gsub;
OTL_Bytes tab_gpos;
OTL_Bytes tab_base;
OTL_Bytes tab_jstf;
OTL_Alternate alternate; /* external alternate handler */
OTL_UInt context_len;
OTL_UInt markup_flags;
OTL_jmp_buf jump_buffer;
OTL_Memory memory;
OTL_Error error;
OTL_StringRec strings[2];
OTL_String str_in;
OTL_String str_out;
} OTL_ParserRec;
typedef enum
{
OTL_Err_Parser_Ok = 0,
OTL_Err_Parser_InvalidData,
OTL_Err_Parser_UncoveredGlyph
} OTL_ParseError;
OTL_LOCAL( OTL_UInt )
otl_parser_get_gindex( OTL_Parser parser );
OTL_LOCAL( void )
otl_parser_error( OTL_Parser parser, OTL_ParserError error );
#define OTL_PARSER_UNCOVERED(x) \
otl_parser_error( x, OTL_Err_Parser_UncoveredGlyph )
OTL_LOCAL( void )
otl_parser_check_property( OTL_Parser parser,
OTL_UInt gindex,
OTL_UInt flags,
OTL_UInt *aproperty );
/* copy current input glyph to output */
OTL_LOCAL( void )
otl_parser_copy_1( OTL_Parser parser );
/* copy current input glyph to output, replacing its index */
OTL_LOCAL( void )
otl_parser_replace_1( OTL_Parser parser,
OTL_UInt gindex );
/* copy current input glyph to output, replacing it by several indices */
/* read directly from the table */
OTL_LOCAL( void )
otl_parser_replace_n( OTL_Parser parser,
OTL_UInt count,
OTL_Bytes indices );
OTL_END_HEADER
#endif /* __OTL_PARSER_H__ */