1 /* 2 * 3 * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved 4 * 5 */ 6 7 #include "LETypes.h" 8 #include "loengine.h" 9 #include "LayoutEngine.h" 10 11 /** 12 * \file 13 * \brief C API for complex text layout. 14 */ 15 16 U_NAMESPACE_USE 17 18 U_CAPI le_engine * U_EXPORT2 19 le_create(const le_font *font, 20 le_int32 scriptCode, 21 le_int32 languageCode, 22 le_int32 typo_flags, 23 LEErrorCode *success) 24 { 25 LEFontInstance *fontInstance = (LEFontInstance *) font; 26 27 return (le_engine *) LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, typo_flags, *success); 28 } 29 30 U_CAPI void U_EXPORT2 31 le_close(le_engine *engine) 32 { 33 LayoutEngine *le = (LayoutEngine *) engine; 34 35 delete le; 36 } 37 38 U_CAPI le_int32 U_EXPORT2 39 le_layoutChars(le_engine *engine, 40 const LEUnicode chars[], 41 le_int32 offset, 42 le_int32 count, 43 le_int32 max, 44 le_bool rightToLeft, 45 float x, 46 float y, 47 LEErrorCode *success) 48 { 49 LayoutEngine *le = (LayoutEngine *) engine; 50 51 if (le == NULL) { 52 *success = LE_ILLEGAL_ARGUMENT_ERROR; 53 return -1; 54 } 55 56 return le->layoutChars(chars, offset, count, max, rightToLeft, x, y, *success); 57 } 58 59 U_CAPI le_int32 U_EXPORT2 60 le_getGlyphCount(le_engine *engine, 61 LEErrorCode *success) 62 { 63 LayoutEngine *le = (LayoutEngine *) engine; 64 65 if (le == NULL) { 66 *success = LE_ILLEGAL_ARGUMENT_ERROR; 67 return -1; 68 } 69 70 return le->getGlyphCount(); 71 } 72 73 U_CAPI void U_EXPORT2 74 le_getGlyphs(le_engine *engine, 75 LEGlyphID glyphs[], 76 LEErrorCode *success) 77 { 78 LayoutEngine *le = (LayoutEngine *) engine; 79 80 if (le == NULL) { 81 *success = LE_ILLEGAL_ARGUMENT_ERROR; 82 return; 83 } 84 85 le->getGlyphs(glyphs, *success); 86 } 87 88 U_CAPI void U_EXPORT2 89 le_getCharIndices(le_engine *engine, 90 le_int32 charIndices[], 91 LEErrorCode *success) 92 { 93 LayoutEngine *le = (LayoutEngine *) engine; 94 95 if (le == NULL) { 96 *success = LE_ILLEGAL_ARGUMENT_ERROR; 97 return; 98 } 99 100 le->getCharIndices(charIndices, *success); 101 } 102 103 U_CAPI void U_EXPORT2 104 le_getCharIndicesWithBase(le_engine *engine, 105 le_int32 charIndices[], 106 le_int32 indexBase, 107 LEErrorCode *success) 108 { 109 LayoutEngine *le = (LayoutEngine *) engine; 110 111 if (le == NULL) { 112 *success = LE_ILLEGAL_ARGUMENT_ERROR; 113 return; 114 } 115 116 le->getCharIndices(charIndices, indexBase, *success); 117 } 118 119 U_CAPI void U_EXPORT2 120 le_getGlyphPositions(le_engine *engine, 121 float positions[], 122 LEErrorCode *success) 123 { 124 LayoutEngine *le = (LayoutEngine *) engine; 125 126 if (le == NULL) { 127 *success = LE_ILLEGAL_ARGUMENT_ERROR; 128 return; 129 } 130 131 le->getGlyphPositions(positions, *success); 132 } 133 134 U_CAPI void U_EXPORT2 135 le_getGlyphPosition(le_engine *engine, 136 le_int32 glyphIndex, 137 float *x, 138 float *y, 139 LEErrorCode *success) 140 { 141 LayoutEngine *le = (LayoutEngine *) engine; 142 143 if (le == NULL) { 144 *success = LE_ILLEGAL_ARGUMENT_ERROR; 145 return; 146 } 147 148 le->getGlyphPosition(glyphIndex, *x, *y, *success); 149 } 150 151 U_CAPI void U_EXPORT2 152 le_reset(le_engine *engine, 153 LEErrorCode *success) 154 { 155 LayoutEngine *le = (LayoutEngine *) engine; 156 157 if (le == NULL) { 158 *success = LE_ILLEGAL_ARGUMENT_ERROR; 159 return; 160 } 161 162 le->reset(); 163 } 164