| /* |
| * |
| * (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(); |
| } |