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