tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

scrptrun.h (3315B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 *******************************************************************************
      5 *
      6 *   Copyright (C) 1999-2003, International Business Machines
      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 
     23 U_NAMESPACE_BEGIN
     24 
     25 struct ScriptRecord
     26 {
     27    UChar32 startChar;
     28    UChar32 endChar;
     29    UScriptCode scriptCode;
     30 };
     31 
     32 struct ParenStackEntry
     33 {
     34    int32_t pairIndex;
     35    UScriptCode scriptCode;
     36 };
     37 
     38 class ScriptRun : public UObject {
     39 public:
     40    ScriptRun();
     41 
     42    ScriptRun(const char16_t chars[], int32_t length);
     43 
     44    ScriptRun(const char16_t chars[], int32_t start, int32_t length);
     45 
     46    void reset();
     47 
     48    void reset(int32_t start, int32_t count);
     49 
     50    void reset(const char16_t chars[], int32_t start, int32_t length);
     51 
     52    int32_t getScriptStart();
     53 
     54    int32_t getScriptEnd();
     55 
     56    UScriptCode getScriptCode();
     57 
     58    UBool next();
     59 
     60    /**
     61     * ICU "poor man's RTTI", returns a UClassID for the actual class.
     62     *
     63     * @stable ICU 2.2
     64     */
     65    virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); }
     66 
     67    /**
     68     * ICU "poor man's RTTI", returns a UClassID for this class.
     69     *
     70     * @stable ICU 2.2
     71     */
     72    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
     73 
     74 private:
     75 
     76    static UBool sameScript(int32_t scriptOne, int32_t scriptTwo);
     77 
     78    int32_t charStart;
     79    int32_t charLimit;
     80    const char16_t *charArray;
     81 
     82    int32_t scriptStart;
     83    int32_t scriptEnd;
     84    UScriptCode scriptCode;
     85 
     86    ParenStackEntry parenStack[128];
     87    int32_t parenSP;
     88 
     89    static int8_t highBit(int32_t value);
     90    static int32_t getPairIndex(UChar32 ch);
     91 
     92    static UChar32 pairedChars[];
     93    static const int32_t pairedCharCount;
     94    static const int32_t pairedCharPower;
     95    static const int32_t pairedCharExtra;
     96 
     97    /**
     98     * The address of this static class variable serves as this class's ID
     99     * for ICU "poor man's RTTI".
    100     */
    101    static const char fgClassID;
    102 };
    103 
    104 inline ScriptRun::ScriptRun()
    105 {
    106    reset(nullptr, 0, 0);
    107 }
    108 
    109 inline ScriptRun::ScriptRun(const char16_t chars[], int32_t length)
    110 {
    111    reset(chars, 0, length);
    112 }
    113 
    114 inline ScriptRun::ScriptRun(const char16_t chars[], int32_t start, int32_t length)
    115 {
    116    reset(chars, start, length);
    117 }
    118 
    119 inline int32_t ScriptRun::getScriptStart()
    120 {
    121    return scriptStart;
    122 }
    123 
    124 inline int32_t ScriptRun::getScriptEnd()
    125 {
    126    return scriptEnd;
    127 }
    128 
    129 inline UScriptCode ScriptRun::getScriptCode()
    130 {
    131    return scriptCode;
    132 }
    133 
    134 inline void ScriptRun::reset()
    135 {
    136    scriptStart = charStart;
    137    scriptEnd   = charStart;
    138    scriptCode  = USCRIPT_INVALID_CODE;
    139    parenSP     = -1;
    140 }
    141 
    142 inline void ScriptRun::reset(int32_t start, int32_t length)
    143 {
    144    charStart = start;
    145    charLimit = start + length;
    146 
    147    reset();
    148 }
    149 
    150 inline void ScriptRun::reset(const char16_t chars[], int32_t start, int32_t length)
    151 {
    152    charArray = chars;
    153 
    154    reset(start, length);
    155 }
    156 
    157 U_NAMESPACE_END
    158 
    159 #endif