LibreOffice Module vcl (master) 1
scrptrun.h
Go to the documentation of this file.
1/*
2 *******************************************************************************
3 *
4 * Copyright (c) 1995-2013 International Business Machines Corporation and others
5 *
6 * All rights reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy of
9 * this software and associated documentation files (the "Software"), to deal in
10 * the Software without restriction, including without limitation the rights to
11 * use, copy, modify, merge, publish, distribute, and/or sell copies of the
12 * Software, and to permit persons to whom the Software is furnished to do so,
13 * provided that the above copyright notice(s) and this permission notice appear
14 * in all copies of the Software and that both the above copyright notice(s) and
15 * this permission notice appear in supporting documentation.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
20 * NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
21 * LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
22 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
23 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
24 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25 *
26 * Except as contained in this notice, the name of a copyright holder shall not be
27 * used in advertising or otherwise to promote the sale, use or other dealings in
28 * this Software without prior written authorization of the copyright holder.
29 *
30 *******************************************************************************
31 * file name: scrptrun.h
32 *
33 * created on: 10/17/2001
34 * created by: Eric R. Mader
35 */
36
37#ifndef INCLUDED_VCL_INC_SCRPTRUN_H
38#define INCLUDED_VCL_INC_SCRPTRUN_H
39
40#include <sal/config.h>
41
42#include <vcl/dllapi.h>
43
44#include <unicode/uobject.h>
45#include <unicode/uscript.h>
46#include <vector>
47
48namespace vcl
49{
51{
52 int32_t pairIndex;
53 UScriptCode scriptCode;
55 : pairIndex(0)
56 , scriptCode(USCRIPT_INVALID_CODE)
57 {
58 }
59};
60
61class VCL_DLLPUBLIC ScriptRun final : public icu::UObject
62{
63public:
64 ScriptRun(const UChar chars[], int32_t length);
65
66 void reset();
67
68 void reset(int32_t start, int32_t count);
69
70 void reset(const UChar chars[], int32_t start, int32_t length);
71
72 int32_t getScriptStart() const;
73
74 int32_t getScriptEnd() const;
75
76 UScriptCode getScriptCode() const;
77
78 UBool next();
79
85 virtual UClassID getDynamicClassID() const override { return getStaticClassID(); }
86
92 static UClassID getStaticClassID()
93 {
94 return static_cast<UClassID>(const_cast<char*>(&fgClassID));
95 }
96
97private:
98 int32_t charStart;
99 int32_t charLimit;
100 const UChar* charArray;
101
102 int32_t scriptStart;
103 int32_t scriptEnd;
104 UScriptCode scriptCode;
105
106 std::vector<ParenStackEntry> parenStack;
107 int32_t parenSP;
108
113 static const char fgClassID;
114};
115
116inline ScriptRun::ScriptRun(const UChar chars[], int32_t length)
117{
118 parenStack.reserve(128);
119 reset(chars, 0, length);
120}
121
122inline int32_t ScriptRun::getScriptStart() const { return scriptStart; }
123
124inline int32_t ScriptRun::getScriptEnd() const { return scriptEnd; }
125
126inline UScriptCode ScriptRun::getScriptCode() const { return scriptCode; }
127
128inline void ScriptRun::reset()
129{
132 scriptCode = USCRIPT_INVALID_CODE;
133 parenSP = -1;
134 parenStack.clear();
135}
136
137inline void ScriptRun::reset(int32_t start, int32_t length)
138{
141
142 reset();
143}
144
145inline void ScriptRun::reset(const UChar chars[], int32_t start, int32_t length)
146{
147 charArray = chars;
148
150}
151}
152
153#endif
UScriptCode scriptCode
Definition: scrptrun.h:104
const UChar * charArray
Definition: scrptrun.h:100
ScriptRun(const UChar chars[], int32_t length)
Definition: scrptrun.h:116
int32_t scriptEnd
Definition: scrptrun.h:103
static const char fgClassID
The address of this static class variable serves as this class's ID for ICU "poor man's RTTI".
Definition: scrptrun.h:113
virtual UClassID getDynamicClassID() const override
s * ICU "poor man's RTTI", returns a UClassID for the actual class.
Definition: scrptrun.h:85
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
Definition: scrptrun.h:92
std::vector< ParenStackEntry > parenStack
Definition: scrptrun.h:106
int32_t charLimit
Definition: scrptrun.h:99
int32_t getScriptStart() const
Definition: scrptrun.h:122
UScriptCode getScriptCode() const
Definition: scrptrun.h:126
int32_t scriptStart
Definition: scrptrun.h:102
int32_t parenSP
Definition: scrptrun.h:107
void reset()
Definition: scrptrun.h:128
int32_t getScriptEnd() const
Definition: scrptrun.h:124
int32_t charStart
Definition: scrptrun.h:98
#define VCL_DLLPUBLIC
Definition: dllapi.h:29
UScriptCode scriptCode
Definition: scrptrun.h:53