diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /intl/unicharutil/util/IrishCasing.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'intl/unicharutil/util/IrishCasing.h')
-rw-r--r-- | intl/unicharutil/util/IrishCasing.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/intl/unicharutil/util/IrishCasing.h b/intl/unicharutil/util/IrishCasing.h new file mode 100644 index 000000000..f5cb888dc --- /dev/null +++ b/intl/unicharutil/util/IrishCasing.h @@ -0,0 +1,117 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef IrishCasing_h_ +#define IrishCasing_h_ + +#include <stdint.h> +#include "mozilla/Attributes.h" + +namespace mozilla { + +class IrishCasing { +private: + enum IrishStates { + kState_Start, + kState_InWord, + kState_b, + kState_bh, + kState_d, + kState_g, + kState_h, + kState_m, + kState_n, + kState_nt_, + kState_t, + kState_ts, + kNumStates + }; + + enum IrishClasses { + kClass_b, + kClass_B, + kClass_cC, + kClass_d, + kClass_DG, + kClass_fF, + kClass_g, + kClass_h, + kClass_lLNrR, + kClass_m, + kClass_n, + kClass_pP, + kClass_sS, + kClass_t, + kClass_T, + kClass_vowel, + kClass_Vowel, + kClass_hyph, + kClass_letter, + kClass_other, + kNumClasses + }; + +public: + class State { + friend class IrishCasing; + + public: + State() + : mState(kState_Start) + { + } + + MOZ_IMPLICIT State(const IrishStates& aState) + : mState(aState) + { + } + + void Reset() + { + mState = kState_Start; + } + + operator IrishStates() const + { + return mState; + } + + private: + explicit State(uint8_t aState) + : mState(IrishStates(aState)) + { + } + + uint8_t GetClass(uint32_t aCh); + + IrishStates mState; + }; + + enum { + kMarkPositionFlag = 0x80, + kActionMask = 0x30, + kActionShift = 4, + kNextStateMask = 0x0f + }; + + static const uint8_t sUppercaseStateTable[kNumClasses][kNumStates]; + static const uint8_t sLcClasses[26]; + static const uint8_t sUcClasses[26]; + + static uint32_t UpperCase(uint32_t aCh, State& aState, + bool& aMarkPos, uint8_t& aAction); + + static bool IsUpperVowel(uint32_t aCh) + { + return GetClass(aCh) == kClass_Vowel; + } + +private: + static uint8_t GetClass(uint32_t aCh); +}; + +} // namespace mozilla + +#endif |