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

bidi.h

Go to the documentation of this file.
00001 /*
00002 *******************************************************************************
00003 *
00004 *   Copyright (C) 1999-2000, 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 
00036 class U_COMMON_API BiDi {
00037 public:
00041     BiDi();
00042 
00046     BiDi(UErrorCode &rErrorCode);
00047 
00051     BiDi(UTextOffset maxLength, UTextOffset maxRunCount, UErrorCode &rErrorCode);
00052 
00056     ~BiDi();
00057 
00069     void
00070     setInverse(UBool isInverse);
00071 
00078     UBool
00079     isInverse();
00080 
00084     BiDi &
00085     setPara(const UChar *text, UTextOffset length,
00086             UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
00087             UErrorCode &rErrorCode);
00088 
00089 
00093     BiDi &
00094     setLine(const BiDi &rParaBiDi,
00095             UTextOffset start, UTextOffset limit,
00096             UErrorCode &rErrorCode);
00097 
00101     UBiDiDirection
00102     getDirection() const;
00103 
00107     const UChar *
00108     getText() const;
00109 
00113     UTextOffset
00114     getLength() const;
00115 
00119     UBiDiLevel
00120     getParaLevel() const;
00121 
00125     UBiDiLevel
00126     getLevelAt(UTextOffset charIndex) const;
00127 
00131     const UBiDiLevel *
00132     getLevels(UErrorCode &rErrorCode);
00133 
00137     void
00138     getLogicalRun(UTextOffset logicalStart,
00139                   UTextOffset &rLogicalLimit, UBiDiLevel &rLevel) const;
00140 
00144     UTextOffset
00145     countRuns(UErrorCode &rErrorCode);
00146 
00152     UBiDiDirection
00153     getVisualRun(UTextOffset runIndex, UTextOffset &rLogicalStart, UTextOffset &rLength);
00154 
00158     UTextOffset
00159     getVisualIndex(UTextOffset logicalIndex, UErrorCode &rErrorCode);
00160 
00164     UTextOffset
00165     getLogicalIndex(UTextOffset visualIndex, UErrorCode &rErrorCode);
00166 
00172     void
00173     getLogicalMap(UTextOffset *indexMap, UErrorCode &rErrorCode);
00174 
00180     void
00181     getVisualMap(UTextOffset *indexMap, UErrorCode &rErrorCode);
00182 
00186     static void
00187     reorderLogical(const UBiDiLevel *levels, UTextOffset length, UTextOffset *indexMap);
00188 
00192     static void
00193     reorderVisual(const UBiDiLevel *levels, UTextOffset length, UTextOffset *indexMap);
00194 
00198     static void
00199     invertMap(const UTextOffset *srcMap, UTextOffset *destMap, UTextOffset length);
00200 
00210     UTextOffset
00211     writeReordered(UChar *dest, int32_t destSize,
00212                    uint16_t options,
00213                    UErrorCode &rErrorCode);
00214 
00221     static UTextOffset
00222     writeReverse(const UChar *src, int32_t srcLength,
00223                  UChar *dest, int32_t destSize,
00224                  uint16_t options,
00225                  UErrorCode &rErrorCode);
00226 
00227 protected:
00228     UBiDi *pBiDi;
00229 };
00230 
00231 /* Inline implementations. -------------------------------------------------- */
00232 
00233 inline BiDi::BiDi() {
00234     pBiDi=ubidi_open();
00235 }
00236 
00237 inline BiDi::BiDi(UErrorCode &rErrorCode) {
00238     if(U_SUCCESS(rErrorCode)) {
00239         pBiDi=ubidi_open();
00240         if(pBiDi==0) {
00241             rErrorCode=U_MEMORY_ALLOCATION_ERROR;
00242         }
00243     } else {
00244         pBiDi=0;
00245     }
00246 }
00247 
00248 inline BiDi::BiDi(UTextOffset maxLength, UTextOffset maxRunCount, UErrorCode &rErrorCode) {
00249     pBiDi=ubidi_openSized(maxLength, maxRunCount, &rErrorCode);
00250 }
00251 
00252 inline BiDi::~BiDi() {
00253     ubidi_close(pBiDi);
00254     pBiDi=0;
00255 }
00256 
00257 inline void
00258 BiDi::setInverse(UBool isInverse) {
00259     ubidi_setInverse(pBiDi, isInverse);
00260 }
00261 
00262 inline UBool
00263 BiDi::isInverse() {
00264     return ubidi_isInverse(pBiDi);
00265 }
00266 
00267 inline BiDi &
00268 BiDi::setPara(const UChar *text, UTextOffset length,
00269         UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
00270         UErrorCode &rErrorCode) {
00271     ubidi_setPara(pBiDi, text, length, paraLevel, embeddingLevels, &rErrorCode);
00272     return *this;
00273 }
00274 
00275 
00276 inline BiDi &
00277 BiDi::setLine(const BiDi &rParaBiDi,
00278         UTextOffset start, UTextOffset limit,
00279         UErrorCode &rErrorCode) {
00280     ubidi_setLine(rParaBiDi.pBiDi, start, limit, pBiDi, &rErrorCode);
00281     return *this;
00282 }
00283 
00284 inline UBiDiDirection
00285 BiDi::getDirection() const {
00286     return ubidi_getDirection(pBiDi);
00287 }
00288 
00289 inline const UChar *
00290 BiDi::getText() const {
00291     return ubidi_getText(pBiDi);
00292 }
00293 
00294 inline UTextOffset
00295 BiDi::getLength() const {
00296     return ubidi_getLength(pBiDi);
00297 }
00298 
00299 inline UBiDiLevel
00300 BiDi::getParaLevel() const {
00301     return ubidi_getParaLevel(pBiDi);
00302 }
00303 
00304 inline UBiDiLevel
00305 BiDi::getLevelAt(UTextOffset charIndex) const {
00306     return ubidi_getLevelAt(pBiDi, charIndex);
00307 }
00308 
00309 inline const UBiDiLevel *
00310 BiDi::getLevels(UErrorCode &rErrorCode) {
00311     return ubidi_getLevels(pBiDi, &rErrorCode);
00312 }
00313 
00314 inline void
00315 BiDi::getLogicalRun(UTextOffset logicalStart,
00316               UTextOffset &rLogicalLimit, UBiDiLevel &rLevel) const {
00317     ubidi_getLogicalRun(pBiDi, logicalStart, &rLogicalLimit, &rLevel);
00318 }
00319 
00320 inline UTextOffset
00321 BiDi::countRuns(UErrorCode &rErrorCode) {
00322     return ubidi_countRuns(pBiDi, &rErrorCode);
00323 }
00324 
00325 inline UBiDiDirection
00326 BiDi::getVisualRun(UTextOffset runIndex, UTextOffset &rLogicalStart, UTextOffset &rLength) {
00327     return ubidi_getVisualRun(pBiDi, runIndex, &rLogicalStart, &rLength);
00328 }
00329 
00330 inline UTextOffset
00331 BiDi::getVisualIndex(UTextOffset logicalIndex, UErrorCode &rErrorCode) {
00332     return ubidi_getVisualIndex(pBiDi, logicalIndex, &rErrorCode);
00333 }
00334 
00335 inline UTextOffset
00336 BiDi::getLogicalIndex(UTextOffset visualIndex, UErrorCode &rErrorCode) {
00337     return ubidi_getLogicalIndex(pBiDi, visualIndex, &rErrorCode);
00338 }
00339 
00340 inline void
00341 BiDi::getLogicalMap(UTextOffset *indexMap, UErrorCode &rErrorCode) {
00342     ubidi_getLogicalMap(pBiDi, indexMap, &rErrorCode);
00343 }
00344 
00345 inline void
00346 BiDi::getVisualMap(UTextOffset *indexMap, UErrorCode &rErrorCode) {
00347     ubidi_getVisualMap(pBiDi, indexMap, &rErrorCode);
00348 }
00349 
00350 inline void
00351 BiDi::reorderLogical(const UBiDiLevel *levels, UTextOffset length, UTextOffset *indexMap) {
00352     ubidi_reorderLogical(levels, length, indexMap);
00353 }
00354 
00355 inline void
00356 BiDi::reorderVisual(const UBiDiLevel *levels, UTextOffset length, UTextOffset *indexMap) {
00357     ubidi_reorderVisual(levels, length, indexMap);
00358 }
00359 
00360 inline void
00361 BiDi::invertMap(const UTextOffset *srcMap, UTextOffset *destMap, UTextOffset length) {
00362     ubidi_invertMap(srcMap, destMap, length);
00363 }
00364 
00365 inline UTextOffset
00366 BiDi::writeReordered(UChar *dest, int32_t destSize,
00367                      uint16_t options,
00368                      UErrorCode &rErrorCode) {
00369     return ubidi_writeReordered(pBiDi, dest, destSize, options, &rErrorCode);
00370 }
00371 
00372 inline UTextOffset
00373 BiDi::writeReverse(const UChar *src, int32_t srcLength,
00374                    UChar *dest, int32_t destSize,
00375                    uint16_t options,
00376                    UErrorCode &rErrorCode) {
00377     return ubidi_writeReverse(src, srcLength, dest, destSize, options, &rErrorCode);
00378 }
00379 
00380 #endif

Generated at Fri Dec 15 12:12:30 2000 for ICU 1.7 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000