/* * * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved * */ #include "LETypes.h" #include "loengine.h" #include "LayoutEngine.h" /** * \file * \brief C API for complex text layout. */ U_NAMESPACE_USE U_CAPI le_engine * U_EXPORT2 le_create(const le_font *font, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode *success) { LEFontInstance *fontInstance = (LEFontInstance *) font; return (le_engine *) LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, typo_flags, *success); } U_CAPI void U_EXPORT2 le_close(le_engine *engine) { LayoutEngine *le = (LayoutEngine *) engine; delete le; } U_CAPI le_int32 U_EXPORT2 le_layoutChars(le_engine *engine, const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, float x, float y, LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return -1; } return le->layoutChars(chars, offset, count, max, rightToLeft, x, y, *success); } U_CAPI le_int32 U_EXPORT2 le_getGlyphCount(le_engine *engine, LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return -1; } return le->getGlyphCount(); } U_CAPI void U_EXPORT2 le_getGlyphs(le_engine *engine, LEGlyphID glyphs[], LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->getGlyphs(glyphs, *success); } U_CAPI void U_EXPORT2 le_getCharIndices(le_engine *engine, le_int32 charIndices[], LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->getCharIndices(charIndices, *success); } U_CAPI void U_EXPORT2 le_getCharIndicesWithBase(le_engine *engine, le_int32 charIndices[], le_int32 indexBase, LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->getCharIndices(charIndices, indexBase, *success); } U_CAPI void U_EXPORT2 le_getGlyphPositions(le_engine *engine, float positions[], LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->getGlyphPositions(positions, *success); } U_CAPI void U_EXPORT2 le_getGlyphPosition(le_engine *engine, le_int32 glyphIndex, float *x, float *y, LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->getGlyphPosition(glyphIndex, *x, *y, *success); } U_CAPI void U_EXPORT2 le_reset(le_engine *engine, LEErrorCode *success) { LayoutEngine *le = (LayoutEngine *) engine; if (le == NULL) { *success = LE_ILLEGAL_ARGUMENT_ERROR; return; } le->reset(); }