IrishCasing.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. #ifndef IrishCasing_h_
  6. #define IrishCasing_h_
  7. #include <stdint.h>
  8. #include "mozilla/Attributes.h"
  9. namespace mozilla {
  10. class IrishCasing {
  11. private:
  12. enum IrishStates {
  13. kState_Start,
  14. kState_InWord,
  15. kState_b,
  16. kState_bh,
  17. kState_d,
  18. kState_g,
  19. kState_h,
  20. kState_m,
  21. kState_n,
  22. kState_nt_,
  23. kState_t,
  24. kState_ts,
  25. kNumStates
  26. };
  27. enum IrishClasses {
  28. kClass_b,
  29. kClass_B,
  30. kClass_cC,
  31. kClass_d,
  32. kClass_DG,
  33. kClass_fF,
  34. kClass_g,
  35. kClass_h,
  36. kClass_lLNrR,
  37. kClass_m,
  38. kClass_n,
  39. kClass_pP,
  40. kClass_sS,
  41. kClass_t,
  42. kClass_T,
  43. kClass_vowel,
  44. kClass_Vowel,
  45. kClass_hyph,
  46. kClass_letter,
  47. kClass_other,
  48. kNumClasses
  49. };
  50. public:
  51. class State {
  52. friend class IrishCasing;
  53. public:
  54. State()
  55. : mState(kState_Start)
  56. {
  57. }
  58. MOZ_IMPLICIT State(const IrishStates& aState)
  59. : mState(aState)
  60. {
  61. }
  62. void Reset()
  63. {
  64. mState = kState_Start;
  65. }
  66. operator IrishStates() const
  67. {
  68. return mState;
  69. }
  70. private:
  71. explicit State(uint8_t aState)
  72. : mState(IrishStates(aState))
  73. {
  74. }
  75. uint8_t GetClass(uint32_t aCh);
  76. IrishStates mState;
  77. };
  78. enum {
  79. kMarkPositionFlag = 0x80,
  80. kActionMask = 0x30,
  81. kActionShift = 4,
  82. kNextStateMask = 0x0f
  83. };
  84. static const uint8_t sUppercaseStateTable[kNumClasses][kNumStates];
  85. static const uint8_t sLcClasses[26];
  86. static const uint8_t sUcClasses[26];
  87. static uint32_t UpperCase(uint32_t aCh, State& aState,
  88. bool& aMarkPos, uint8_t& aAction);
  89. static bool IsUpperVowel(uint32_t aCh)
  90. {
  91. return GetClass(aCh) == kClass_Vowel;
  92. }
  93. private:
  94. static uint8_t GetClass(uint32_t aCh);
  95. };
  96. } // namespace mozilla
  97. #endif