Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | 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 Sun May 22 18:49:33 2005 for ICU 2.1 by  doxygen 1.4.2