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

Generated on Wed Dec 18 16:49:27 2002 for ICU 2.4 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001