forked from mirrors/gecko-dev
		
	 265e672179
			
		
	
	
		265e672179
		
	
	
	
	
		
			
			# ignore-this-changeset --HG-- extra : amend_source : 4d301d3b0b8711c4692392aa76088ba7fd7d1022
		
			
				
	
	
		
			101 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- 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
 |