summaryrefslogtreecommitdiffstats
path: root/intl/unicharutil/util/IrishCasing.h
diff options
context:
space:
mode:
Diffstat (limited to 'intl/unicharutil/util/IrishCasing.h')
-rw-r--r--intl/unicharutil/util/IrishCasing.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/intl/unicharutil/util/IrishCasing.h b/intl/unicharutil/util/IrishCasing.h
new file mode 100644
index 0000000000..f5a6582a06
--- /dev/null
+++ b/intl/unicharutil/util/IrishCasing.h
@@ -0,0 +1,101 @@
+/* -*- 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