Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

bidi.h

Go to the documentation of this file.
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/uobject.h"
00022 #include "unicode/ubidi.h"
00023 
00024 #ifndef XP_CPLUSPLUS
00025 #   error This is a C++ header file.
00026 #endif
00027 
00028 U_NAMESPACE_BEGIN
00044 class U_COMMON_API BiDi : public UObject {
00045 public:
00049     BiDi();
00050 
00054     BiDi(UErrorCode &rErrorCode);
00055 
00059     BiDi(int32_t maxLength, int32_t maxRunCount, UErrorCode &rErrorCode);
00060 
00064     ~BiDi();
00065 
00077     void
00078     setInverse(UBool isInverse);
00079 
00086     UBool
00087     isInverse();
00088 
00092     BiDi &
00093     setPara(const UChar *text, int32_t length,
00094             UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
00095             UErrorCode &rErrorCode);
00096 
00097 
00101     BiDi &
00102     setLine(const BiDi &rParaBiDi,
00103             int32_t start, int32_t limit,
00104             UErrorCode &rErrorCode);
00105 
00109     UBiDiDirection
00110     getDirection() const;
00111 
00115     const UChar *
00116     getText() const;
00117 
00121     int32_t
00122     getLength() const;
00123 
00127     UBiDiLevel
00128     getParaLevel() const;
00129 
00133     UBiDiLevel
00134     getLevelAt(int32_t charIndex) const;
00135 
00139     const UBiDiLevel *
00140     getLevels(UErrorCode &rErrorCode);
00141 
00145     void
00146     getLogicalRun(int32_t logicalStart,
00147                   int32_t &rLogicalLimit, UBiDiLevel &rLevel) const;
00148 
00152     int32_t
00153     countRuns(UErrorCode &rErrorCode);
00154 
00160     UBiDiDirection
00161     getVisualRun(int32_t runIndex, int32_t &rLogicalStart, int32_t &rLength);
00162 
00166     int32_t
00167     getVisualIndex(int32_t logicalIndex, UErrorCode &rErrorCode);
00168 
00172     int32_t
00173     getLogicalIndex(int32_t visualIndex, UErrorCode &rErrorCode);
00174 
00180     void
00181     getLogicalMap(int32_t *indexMap, UErrorCode &rErrorCode);
00182 
00188     void
00189     getVisualMap(int32_t *indexMap, UErrorCode &rErrorCode);
00190 
00194     static void
00195     reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
00196 
00200     static void
00201     reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
00202 
00206     static void
00207     invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
00208 
00218     int32_t
00219     writeReordered(UChar *dest, int32_t destSize,
00220                    uint16_t options,
00221                    UErrorCode &rErrorCode);
00222 
00229     static int32_t
00230     writeReverse(const UChar *src, int32_t srcLength,
00231                  UChar *dest, int32_t destSize,
00232                  uint16_t options,
00233                  UErrorCode &rErrorCode);
00234 
00240     virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
00241 
00247     static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
00248 
00249 protected:
00250     UBiDi *pBiDi;
00251 
00252 private:
00253 
00258     static const char fgClassID;
00259 };
00260 
00261 /* Inline implementations. -------------------------------------------------- */
00262 
00263 inline BiDi::BiDi() {
00264     pBiDi=ubidi_open();
00265 }
00266 
00267 inline BiDi::BiDi(UErrorCode &rErrorCode) {
00268     if(U_SUCCESS(rErrorCode)) {
00269         pBiDi=ubidi_open();
00270         if(pBiDi==0) {
00271             rErrorCode=U_MEMORY_ALLOCATION_ERROR;
00272         }
00273     } else {
00274         pBiDi=0;
00275     }
00276 }
00277 
00278 inline BiDi::BiDi(int32_t maxLength, int32_t maxRunCount, UErrorCode &rErrorCode) {
00279     pBiDi=ubidi_openSized(maxLength, maxRunCount, &rErrorCode);
00280 }
00281 
00282 inline BiDi::~BiDi() {
00283     ubidi_close(pBiDi);
00284     pBiDi=0;
00285 }
00286 
00287 inline void
00288 BiDi::setInverse(UBool isInverse) {
00289     ubidi_setInverse(pBiDi, isInverse);
00290 }
00291 
00292 inline UBool
00293 BiDi::isInverse() {
00294     return ubidi_isInverse(pBiDi);
00295 }
00296 
00297 inline BiDi &
00298 BiDi::setPara(const UChar *text, int32_t length,
00299         UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
00300         UErrorCode &rErrorCode) {
00301     ubidi_setPara(pBiDi, text, length, paraLevel, embeddingLevels, &rErrorCode);
00302     return *this;
00303 }
00304 
00305 
00306 inline BiDi &
00307 BiDi::setLine(const BiDi &rParaBiDi,
00308         int32_t start, int32_t limit,
00309         UErrorCode &rErrorCode) {
00310     ubidi_setLine(rParaBiDi.pBiDi, start, limit, pBiDi, &rErrorCode);
00311     return *this;
00312 }
00313 
00314 inline UBiDiDirection
00315 BiDi::getDirection() const {
00316     return ubidi_getDirection(pBiDi);
00317 }
00318 
00319 inline const UChar *
00320 BiDi::getText() const {
00321     return ubidi_getText(pBiDi);
00322 }
00323 
00324 inline int32_t
00325 BiDi::getLength() const {
00326     return ubidi_getLength(pBiDi);
00327 }
00328 
00329 inline UBiDiLevel
00330 BiDi::getParaLevel() const {
00331     return ubidi_getParaLevel(pBiDi);
00332 }
00333 
00334 inline UBiDiLevel
00335 BiDi::getLevelAt(int32_t charIndex) const {
00336     return ubidi_getLevelAt(pBiDi, charIndex);
00337 }
00338 
00339 inline const UBiDiLevel *
00340 BiDi::getLevels(UErrorCode &rErrorCode) {
00341     return ubidi_getLevels(pBiDi, &rErrorCode);
00342 }
00343 
00344 inline void
00345 BiDi::getLogicalRun(int32_t logicalStart,
00346               int32_t &rLogicalLimit, UBiDiLevel &rLevel) const {
00347     ubidi_getLogicalRun(pBiDi, logicalStart, &rLogicalLimit, &rLevel);
00348 }
00349 
00350 inline int32_t
00351 BiDi::countRuns(UErrorCode &rErrorCode) {
00352     return ubidi_countRuns(pBiDi, &rErrorCode);
00353 }
00354 
00355 inline UBiDiDirection
00356 BiDi::getVisualRun(int32_t runIndex, int32_t &rLogicalStart, int32_t &rLength) {
00357     return ubidi_getVisualRun(pBiDi, runIndex, &rLogicalStart, &rLength);
00358 }
00359 
00360 inline int32_t
00361 BiDi::getVisualIndex(int32_t logicalIndex, UErrorCode &rErrorCode) {
00362     return ubidi_getVisualIndex(pBiDi, logicalIndex, &rErrorCode);
00363 }
00364 
00365 inline int32_t
00366 BiDi::getLogicalIndex(int32_t visualIndex, UErrorCode &rErrorCode) {
00367     return ubidi_getLogicalIndex(pBiDi, visualIndex, &rErrorCode);
00368 }
00369 
00370 inline void
00371 BiDi::getLogicalMap(int32_t *indexMap, UErrorCode &rErrorCode) {
00372     ubidi_getLogicalMap(pBiDi, indexMap, &rErrorCode);
00373 }
00374 
00375 inline void
00376 BiDi::getVisualMap(int32_t *indexMap, UErrorCode &rErrorCode) {
00377     ubidi_getVisualMap(pBiDi, indexMap, &rErrorCode);
00378 }
00379 
00380 inline void
00381 BiDi::reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) {
00382     ubidi_reorderLogical(levels, length, indexMap);
00383 }
00384 
00385 inline void
00386 BiDi::reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) {
00387     ubidi_reorderVisual(levels, length, indexMap);
00388 }
00389 
00390 inline void
00391 BiDi::invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) {
00392     ubidi_invertMap(srcMap, destMap, length);
00393 }
00394 
00395 inline int32_t
00396 BiDi::writeReordered(UChar *dest, int32_t destSize,
00397                      uint16_t options,
00398                      UErrorCode &rErrorCode) {
00399     return ubidi_writeReordered(pBiDi, dest, destSize, options, &rErrorCode);
00400 }
00401 
00402 inline int32_t
00403 BiDi::writeReverse(const UChar *src, int32_t srcLength,
00404                    UChar *dest, int32_t destSize,
00405                    uint16_t options,
00406                    UErrorCode &rErrorCode) {
00407     return ubidi_writeReverse(src, srcLength, dest, destSize, options, &rErrorCode);
00408 }
00409 
00410 U_NAMESPACE_END
00411 
00412 #endif

Generated on Thu Aug 15 14:13:23 2002 for ICU 2.2 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001