You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
3.2 KiB
160 lines
3.2 KiB
// © 2016 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
/*
|
|
*******************************************************************************
|
|
*
|
|
* Copyright (C) 1999-2003, International Business Machines
|
|
* Corporation and others. All Rights Reserved.
|
|
*
|
|
*******************************************************************************
|
|
* file name: scrptrun.h
|
|
*
|
|
* created on: 10/17/2001
|
|
* created by: Eric R. Mader
|
|
*/
|
|
|
|
#ifndef __SCRPTRUN_H
|
|
#define __SCRPTRUN_H
|
|
|
|
#include "unicode/utypes.h"
|
|
#include "unicode/uobject.h"
|
|
#include "unicode/uscript.h"
|
|
|
|
U_NAMESPACE_BEGIN
|
|
|
|
struct ScriptRecord
|
|
{
|
|
UChar32 startChar;
|
|
UChar32 endChar;
|
|
UScriptCode scriptCode;
|
|
};
|
|
|
|
struct ParenStackEntry
|
|
{
|
|
int32_t pairIndex;
|
|
UScriptCode scriptCode;
|
|
};
|
|
|
|
class ScriptRun : public UObject {
|
|
public:
|
|
ScriptRun();
|
|
|
|
ScriptRun(const UChar chars[], int32_t length);
|
|
|
|
ScriptRun(const UChar chars[], int32_t start, int32_t length);
|
|
|
|
void reset();
|
|
|
|
void reset(int32_t start, int32_t count);
|
|
|
|
void reset(const UChar chars[], int32_t start, int32_t length);
|
|
|
|
int32_t getScriptStart();
|
|
|
|
int32_t getScriptEnd();
|
|
|
|
UScriptCode getScriptCode();
|
|
|
|
UBool next();
|
|
|
|
/**
|
|
* ICU "poor man's RTTI", returns a UClassID for the actual class.
|
|
*
|
|
* @stable ICU 2.2
|
|
*/
|
|
virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
|
|
|
|
/**
|
|
* ICU "poor man's RTTI", returns a UClassID for this class.
|
|
*
|
|
* @stable ICU 2.2
|
|
*/
|
|
static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
|
|
|
|
private:
|
|
|
|
static UBool sameScript(int32_t scriptOne, int32_t scriptTwo);
|
|
|
|
int32_t charStart;
|
|
int32_t charLimit;
|
|
const UChar *charArray;
|
|
|
|
int32_t scriptStart;
|
|
int32_t scriptEnd;
|
|
UScriptCode scriptCode;
|
|
|
|
ParenStackEntry parenStack[128];
|
|
int32_t parenSP;
|
|
|
|
static int8_t highBit(int32_t value);
|
|
static int32_t getPairIndex(UChar32 ch);
|
|
|
|
static UChar32 pairedChars[];
|
|
static const int32_t pairedCharCount;
|
|
static const int32_t pairedCharPower;
|
|
static const int32_t pairedCharExtra;
|
|
|
|
/**
|
|
* The address of this static class variable serves as this class's ID
|
|
* for ICU "poor man's RTTI".
|
|
*/
|
|
static const char fgClassID;
|
|
};
|
|
|
|
inline ScriptRun::ScriptRun()
|
|
{
|
|
reset(NULL, 0, 0);
|
|
}
|
|
|
|
inline ScriptRun::ScriptRun(const UChar chars[], int32_t length)
|
|
{
|
|
reset(chars, 0, length);
|
|
}
|
|
|
|
inline ScriptRun::ScriptRun(const UChar chars[], int32_t start, int32_t length)
|
|
{
|
|
reset(chars, start, length);
|
|
}
|
|
|
|
inline int32_t ScriptRun::getScriptStart()
|
|
{
|
|
return scriptStart;
|
|
}
|
|
|
|
inline int32_t ScriptRun::getScriptEnd()
|
|
{
|
|
return scriptEnd;
|
|
}
|
|
|
|
inline UScriptCode ScriptRun::getScriptCode()
|
|
{
|
|
return scriptCode;
|
|
}
|
|
|
|
inline void ScriptRun::reset()
|
|
{
|
|
scriptStart = charStart;
|
|
scriptEnd = charStart;
|
|
scriptCode = USCRIPT_INVALID_CODE;
|
|
parenSP = -1;
|
|
}
|
|
|
|
inline void ScriptRun::reset(int32_t start, int32_t length)
|
|
{
|
|
charStart = start;
|
|
charLimit = start + length;
|
|
|
|
reset();
|
|
}
|
|
|
|
inline void ScriptRun::reset(const UChar chars[], int32_t start, int32_t length)
|
|
{
|
|
charArray = chars;
|
|
|
|
reset(start, length);
|
|
}
|
|
|
|
U_NAMESPACE_END
|
|
|
|
#endif
|