#ifndef XETEX_LAYOUT_INTERFACE_H
#define XETEX_LAYOUT_INTERFACE_H 1
#include "xetex-core.h"
BEGIN_EXTERN_C
extern char gPrefEngine;
int getCachedGlyphBBox(uint16_t fontID, uint16_t glyphID, GlyphBBox* bbox);
void cacheGlyphBBox(uint16_t fontID, uint16_t glyphID, const GlyphBBox* bbox);
void terminate_font_manager(void);
void destroy_font_manager(void);
XeTeXFont createFont(PlatformFontRef fontRef, Fixed pointSize);
XeTeXFont createFontFromFile(const char* filename, int index, Fixed pointSize);
void setFontLayoutDir(XeTeXFont font, int vertical);
PlatformFontRef findFontByName(const char* name, char* var, double size);
char getReqEngine(void);
void setReqEngine(char reqEngine);
const char* getFullName(PlatformFontRef fontRef);
char* getFontFilename(XeTeXLayoutEngine engine, uint32_t* index);
double getDesignSize(XeTeXFont font);
void deleteFont(XeTeXFont font);
void* getFontTablePtr(XeTeXFont font, uint32_t tableTag);
Fixed getSlant(XeTeXFont font);
unsigned int countScripts(XeTeXFont font);
unsigned int countLanguages(XeTeXFont font, hb_tag_t script);
unsigned int countFeatures(XeTeXFont font, hb_tag_t script, hb_tag_t language);
unsigned int countGlyphs(XeTeXFont font);
hb_tag_t getIndScript(XeTeXFont font, unsigned int index);
hb_tag_t getIndLanguage(XeTeXFont font, hb_tag_t script, unsigned int index);
hb_tag_t getIndFeature(XeTeXFont font, hb_tag_t script, hb_tag_t language, unsigned int index);
float getGlyphWidth(XeTeXFont font, uint32_t gid);
XeTeXLayoutEngine createLayoutEngine(PlatformFontRef fontRef, XeTeXFont font, hb_tag_t script, char *language,
hb_feature_t* features, int nFeatures, char **shapers, uint32_t rgbValue,
float extend, float slant, float embolden);
void deleteLayoutEngine(XeTeXLayoutEngine engine);
XeTeXFont getFont(XeTeXLayoutEngine engine);
PlatformFontRef getFontRef(XeTeXLayoutEngine engine);
float getExtendFactor(XeTeXLayoutEngine engine);
float getSlantFactor(XeTeXLayoutEngine engine);
float getEmboldenFactor(XeTeXLayoutEngine engine);
int layoutChars(XeTeXLayoutEngine engine, uint16_t* chars, int32_t offset, int32_t count, int32_t max,
bool rightToLeft);
void getGlyphs(XeTeXLayoutEngine engine, uint32_t* glyphs);
void getGlyphAdvances(XeTeXLayoutEngine engine, float *advances);
void getGlyphPositions(XeTeXLayoutEngine engine, FloatPoint* positions);
float getPointSize(XeTeXLayoutEngine engine);
void getAscentAndDescent(XeTeXLayoutEngine engine, float* ascent, float* descent);
void getCapAndXHeight(XeTeXLayoutEngine engine, float* capheight, float* xheight);
int getDefaultDirection(XeTeXLayoutEngine engine);
uint32_t getRgbValue(XeTeXLayoutEngine engine);
void getGlyphBounds(XeTeXLayoutEngine engine, uint32_t glyphID, GlyphBBox* bbox);
float getGlyphWidthFromEngine(XeTeXLayoutEngine engine, uint32_t glyphID);
void getGlyphHeightDepth(XeTeXLayoutEngine engine, uint32_t glyphID, float* height, float* depth);
void getGlyphSidebearings(XeTeXLayoutEngine engine, uint32_t glyphID, float* lsb, float* rsb);
float getGlyphItalCorr(XeTeXLayoutEngine engine, uint32_t glyphID);
uint32_t mapCharToGlyph(XeTeXLayoutEngine engine, uint32_t charCode);
int mapGlyphToIndex(XeTeXLayoutEngine engine, const char* glyphName);
const char* getGlyphName(XeTeXFont font, uint16_t gid, int* len);
int getFontCharRange(XeTeXLayoutEngine engine, int reqFirst);
bool initGraphiteBreaking(XeTeXLayoutEngine engine, const uint16_t* txtPtr, int txtLen);
int findNextGraphiteBreak(void);
bool usingOpenType(XeTeXLayoutEngine engine);
bool usingGraphite(XeTeXLayoutEngine engine);
bool isOpenTypeMathFont(XeTeXLayoutEngine engine);
bool findGraphiteFeature(XeTeXLayoutEngine engine, const char* s, const char* e, hb_tag_t* f, int* v);
uint32_t countGraphiteFeatures(XeTeXLayoutEngine engine);
uint32_t getGraphiteFeatureCode(XeTeXLayoutEngine engine, uint32_t index);
uint32_t countGraphiteFeatureSettings(XeTeXLayoutEngine engine, uint32_t feature);
uint32_t getGraphiteFeatureSettingCode(XeTeXLayoutEngine engine, uint32_t feature, uint32_t index);
uint32_t getGraphiteFeatureDefaultSetting(XeTeXLayoutEngine engine, uint32_t feature);
char* getGraphiteFeatureLabel(XeTeXLayoutEngine engine, uint32_t feature);
char* getGraphiteFeatureSettingLabel(XeTeXLayoutEngine engine, uint32_t feature, uint32_t setting);
long findGraphiteFeatureNamed(XeTeXLayoutEngine engine, const char* name, int namelength);
long findGraphiteFeatureSettingNamed(XeTeXLayoutEngine engine, uint32_t feature, const char* name, int namelength);
END_EXTERN_C
#endif