1/* 2 ******************************************************************************* 3 * 4 * Copyright (C) 1999-2003, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ******************************************************************************* 8 * file name: scrptrun.h 9 * 10 * created on: 10/17/2001 11 * created by: Eric R. Mader 12 */ 13 14#ifndef __SCRPTRUN_H 15#define __SCRPTRUN_H 16 17#include "unicode/utypes.h" 18#include "unicode/uobject.h" 19#include "unicode/uscript.h" 20 21struct ScriptRecord 22{ 23 UChar32 startChar; 24 UChar32 endChar; 25 UScriptCode scriptCode; 26}; 27 28struct ParenStackEntry 29{ 30 int32_t pairIndex; 31 UScriptCode scriptCode; 32}; 33 34class ScriptRun : public UObject { 35public: 36 ScriptRun(); 37 38 ScriptRun(const UChar chars[], int32_t length); 39 40 ScriptRun(const UChar chars[], int32_t start, int32_t length); 41 42 void reset(); 43 44 void reset(int32_t start, int32_t count); 45 46 void reset(const UChar chars[], int32_t start, int32_t length); 47 48 int32_t getScriptStart(); 49 50 int32_t getScriptEnd(); 51 52 UScriptCode getScriptCode(); 53 54 UBool next(); 55 56 /** 57 * ICU "poor man's RTTI", returns a UClassID for the actual class. 58 * 59 * @stable ICU 2.2 60 */ 61 virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } 62 63 /** 64 * ICU "poor man's RTTI", returns a UClassID for this class. 65 * 66 * @stable ICU 2.2 67 */ 68 static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } 69 70private: 71 72 static UBool sameScript(int32_t scriptOne, int32_t scriptTwo); 73 74 int32_t charStart; 75 int32_t charLimit; 76 const UChar *charArray; 77 78 int32_t scriptStart; 79 int32_t scriptEnd; 80 UScriptCode scriptCode; 81 82 ParenStackEntry parenStack[128]; 83 int32_t parenSP; 84 85 static int8_t highBit(int32_t value); 86 static int32_t getPairIndex(UChar32 ch); 87 88 static UChar32 pairedChars[]; 89 static const int32_t pairedCharCount; 90 static const int32_t pairedCharPower; 91 static const int32_t pairedCharExtra; 92 93 /** 94 * The address of this static class variable serves as this class's ID 95 * for ICU "poor man's RTTI". 96 */ 97 static const char fgClassID; 98}; 99 100inline ScriptRun::ScriptRun() 101{ 102 reset(NULL, 0, 0); 103} 104 105inline ScriptRun::ScriptRun(const UChar chars[], int32_t length) 106{ 107 reset(chars, 0, length); 108} 109 110inline ScriptRun::ScriptRun(const UChar chars[], int32_t start, int32_t length) 111{ 112 reset(chars, start, length); 113} 114 115inline int32_t ScriptRun::getScriptStart() 116{ 117 return scriptStart; 118} 119 120inline int32_t ScriptRun::getScriptEnd() 121{ 122 return scriptEnd; 123} 124 125inline UScriptCode ScriptRun::getScriptCode() 126{ 127 return scriptCode; 128} 129 130inline void ScriptRun::reset() 131{ 132 scriptStart = charStart; 133 scriptEnd = charStart; 134 scriptCode = USCRIPT_INVALID_CODE; 135 parenSP = -1; 136} 137 138inline void ScriptRun::reset(int32_t start, int32_t length) 139{ 140 charStart = start; 141 charLimit = start + length; 142 143 reset(); 144} 145 146inline void ScriptRun::reset(const UChar chars[], int32_t start, int32_t length) 147{ 148 charArray = chars; 149 150 reset(start, length); 151} 152 153 154#endif 155