Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

bidi.h

00001 /* 00002 ****************************************************************************** 00003 * 00004 * Copyright (C) 1999-2001, International Business Machines 00005 * Corporation and others. All Rights Reserved. 00006 * 00007 ****************************************************************************** 00008 * file name: ubidi.h 00009 * encoding: US-ASCII 00010 * tab size: 8 (not used) 00011 * indentation:4 00012 * 00013 * created on: 1999sep15 00014 * created by: Markus W. Scherer 00015 */ 00016 00017 #ifndef BIDI_H 00018 #define BIDI_H 00019 00020 #include "unicode/utypes.h" 00021 #include "unicode/ubidi.h" 00022 00023 #ifndef XP_CPLUSPLUS 00024 # error This is a C++ header file. 00025 #endif 00026 00027 U_NAMESPACE_BEGIN 00043 class U_COMMON_API BiDi { 00044 public: 00048 BiDi(); 00049 00053 BiDi(UErrorCode &rErrorCode); 00054 00058 BiDi(int32_t maxLength, int32_t maxRunCount, UErrorCode &rErrorCode); 00059 00063 ~BiDi(); 00064 00076 void 00077 setInverse(UBool isInverse); 00078 00085 UBool 00086 isInverse(); 00087 00091 BiDi & 00092 setPara(const UChar *text, int32_t length, 00093 UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, 00094 UErrorCode &rErrorCode); 00095 00096 00100 BiDi & 00101 setLine(const BiDi &rParaBiDi, 00102 int32_t start, int32_t limit, 00103 UErrorCode &rErrorCode); 00104 00108 UBiDiDirection 00109 getDirection() const; 00110 00114 const UChar * 00115 getText() const; 00116 00120 int32_t 00121 getLength() const; 00122 00126 UBiDiLevel 00127 getParaLevel() const; 00128 00132 UBiDiLevel 00133 getLevelAt(int32_t charIndex) const; 00134 00138 const UBiDiLevel * 00139 getLevels(UErrorCode &rErrorCode); 00140 00144 void 00145 getLogicalRun(int32_t logicalStart, 00146 int32_t &rLogicalLimit, UBiDiLevel &rLevel) const; 00147 00151 int32_t 00152 countRuns(UErrorCode &rErrorCode); 00153 00159 UBiDiDirection 00160 getVisualRun(int32_t runIndex, int32_t &rLogicalStart, int32_t &rLength); 00161 00165 int32_t 00166 getVisualIndex(int32_t logicalIndex, UErrorCode &rErrorCode); 00167 00171 int32_t 00172 getLogicalIndex(int32_t visualIndex, UErrorCode &rErrorCode); 00173 00179 void 00180 getLogicalMap(int32_t *indexMap, UErrorCode &rErrorCode); 00181 00187 void 00188 getVisualMap(int32_t *indexMap, UErrorCode &rErrorCode); 00189 00193 static void 00194 reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); 00195 00199 static void 00200 reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); 00201 00205 static void 00206 invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); 00207 00217 int32_t 00218 writeReordered(UChar *dest, int32_t destSize, 00219 uint16_t options, 00220 UErrorCode &rErrorCode); 00221 00228 static int32_t 00229 writeReverse(const UChar *src, int32_t srcLength, 00230 UChar *dest, int32_t destSize, 00231 uint16_t options, 00232 UErrorCode &rErrorCode); 00233 00234 protected: 00235 UBiDi *pBiDi; 00236 }; 00237 00238 /* Inline implementations. -------------------------------------------------- */ 00239 00240 inline BiDi::BiDi() { 00241 pBiDi=ubidi_open(); 00242 } 00243 00244 inline BiDi::BiDi(UErrorCode &rErrorCode) { 00245 if(U_SUCCESS(rErrorCode)) { 00246 pBiDi=ubidi_open(); 00247 if(pBiDi==0) { 00248 rErrorCode=U_MEMORY_ALLOCATION_ERROR; 00249 } 00250 } else { 00251 pBiDi=0; 00252 } 00253 } 00254 00255 inline BiDi::BiDi(int32_t maxLength, int32_t maxRunCount, UErrorCode &rErrorCode) { 00256 pBiDi=ubidi_openSized(maxLength, maxRunCount, &rErrorCode); 00257 } 00258 00259 inline BiDi::~BiDi() { 00260 ubidi_close(pBiDi); 00261 pBiDi=0; 00262 } 00263 00264 inline void 00265 BiDi::setInverse(UBool isInverse) { 00266 ubidi_setInverse(pBiDi, isInverse); 00267 } 00268 00269 inline UBool 00270 BiDi::isInverse() { 00271 return ubidi_isInverse(pBiDi); 00272 } 00273 00274 inline BiDi & 00275 BiDi::setPara(const UChar *text, int32_t length, 00276 UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, 00277 UErrorCode &rErrorCode) { 00278 ubidi_setPara(pBiDi, text, length, paraLevel, embeddingLevels, &rErrorCode); 00279 return *this; 00280 } 00281 00282 00283 inline BiDi & 00284 BiDi::setLine(const BiDi &rParaBiDi, 00285 int32_t start, int32_t limit, 00286 UErrorCode &rErrorCode) { 00287 ubidi_setLine(rParaBiDi.pBiDi, start, limit, pBiDi, &rErrorCode); 00288 return *this; 00289 } 00290 00291 inline UBiDiDirection 00292 BiDi::getDirection() const { 00293 return ubidi_getDirection(pBiDi); 00294 } 00295 00296 inline const UChar * 00297 BiDi::getText() const { 00298 return ubidi_getText(pBiDi); 00299 } 00300 00301 inline int32_t 00302 BiDi::getLength() const { 00303 return ubidi_getLength(pBiDi); 00304 } 00305 00306 inline UBiDiLevel 00307 BiDi::getParaLevel() const { 00308 return ubidi_getParaLevel(pBiDi); 00309 } 00310 00311 inline UBiDiLevel 00312 BiDi::getLevelAt(int32_t charIndex) const { 00313 return ubidi_getLevelAt(pBiDi, charIndex); 00314 } 00315 00316 inline const UBiDiLevel * 00317 BiDi::getLevels(UErrorCode &rErrorCode) { 00318 return ubidi_getLevels(pBiDi, &rErrorCode); 00319 } 00320 00321 inline void 00322 BiDi::getLogicalRun(int32_t logicalStart, 00323 int32_t &rLogicalLimit, UBiDiLevel &rLevel) const { 00324 ubidi_getLogicalRun(pBiDi, logicalStart, &rLogicalLimit, &rLevel); 00325 } 00326 00327 inline int32_t 00328 BiDi::countRuns(UErrorCode &rErrorCode) { 00329 return ubidi_countRuns(pBiDi, &rErrorCode); 00330 } 00331 00332 inline UBiDiDirection 00333 BiDi::getVisualRun(int32_t runIndex, int32_t &rLogicalStart, int32_t &rLength) { 00334 return ubidi_getVisualRun(pBiDi, runIndex, &rLogicalStart, &rLength); 00335 } 00336 00337 inline int32_t 00338 BiDi::getVisualIndex(int32_t logicalIndex, UErrorCode &rErrorCode) { 00339 return ubidi_getVisualIndex(pBiDi, logicalIndex, &rErrorCode); 00340 } 00341 00342 inline int32_t 00343 BiDi::getLogicalIndex(int32_t visualIndex, UErrorCode &rErrorCode) { 00344 return ubidi_getLogicalIndex(pBiDi, visualIndex, &rErrorCode); 00345 } 00346 00347 inline void 00348 BiDi::getLogicalMap(int32_t *indexMap, UErrorCode &rErrorCode) { 00349 ubidi_getLogicalMap(pBiDi, indexMap, &rErrorCode); 00350 } 00351 00352 inline void 00353 BiDi::getVisualMap(int32_t *indexMap, UErrorCode &rErrorCode) { 00354 ubidi_getVisualMap(pBiDi, indexMap, &rErrorCode); 00355 } 00356 00357 inline void 00358 BiDi::reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { 00359 ubidi_reorderLogical(levels, length, indexMap); 00360 } 00361 00362 inline void 00363 BiDi::reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { 00364 ubidi_reorderVisual(levels, length, indexMap); 00365 } 00366 00367 inline void 00368 BiDi::invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) { 00369 ubidi_invertMap(srcMap, destMap, length); 00370 } 00371 00372 inline int32_t 00373 BiDi::writeReordered(UChar *dest, int32_t destSize, 00374 uint16_t options, 00375 UErrorCode &rErrorCode) { 00376 return ubidi_writeReordered(pBiDi, dest, destSize, options, &rErrorCode); 00377 } 00378 00379 inline int32_t 00380 BiDi::writeReverse(const UChar *src, int32_t srcLength, 00381 UChar *dest, int32_t destSize, 00382 uint16_t options, 00383 UErrorCode &rErrorCode) { 00384 return ubidi_writeReverse(src, srcLength, dest, destSize, options, &rErrorCode); 00385 } 00386 00387 U_NAMESPACE_END 00388 00389 #endif

Generated on Wed Jul 28 05:45:12 2004 for ICU 2.1 by doxygen 1.3.7