1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef _FX_WORDBREAK_IMPL_H 8 #define _FX_WORDBREAK_IMPL_H 9 extern const FX_WORD gs_FX_WordBreak_Table[16]; 10 extern const uint8_t gs_FX_WordBreak_CodePointProperties[(0xFFFF - 1) / 2 + 1]; 11 enum FX_WordBreakProp { 12 FX_WordBreakProp_None = 0, 13 FX_WordBreakProp_CR, 14 FX_WordBreakProp_LF, 15 FX_WordBreakProp_NewLine, 16 FX_WordBreakProp_Extend, 17 FX_WordBreakProp_Format, 18 FX_WordBreakProp_KataKana, 19 FX_WordBreakProp_ALetter, 20 FX_WordBreakProp_MidLetter, 21 FX_WordBreakProp_MidNum, 22 FX_WordBreakProp_MidNumLet, 23 FX_WordBreakProp_Numberic, 24 FX_WordBreakProp_ExtendNumLet, 25 }; 26 FX_WordBreakProp FX_GetWordBreakProperty(FX_WCHAR wcCodePoint); 27 class CFX_CharIter : public IFX_CharIter { 28 public: 29 CFX_CharIter(const CFX_WideString& wsText); 30 virtual void Release(); 31 virtual FX_BOOL Next(FX_BOOL bPrev = FALSE); 32 virtual FX_WCHAR GetChar(); 33 virtual void SetAt(int32_t nIndex); 34 virtual int32_t GetAt() const; 35 virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const; 36 virtual IFX_CharIter* Clone(); 37 38 protected: 39 ~CFX_CharIter(); 40 41 private: 42 const CFX_WideString& m_wsText; 43 int32_t m_nIndex; 44 }; 45 class CFX_WordBreak : public IFX_WordBreak { 46 public: 47 CFX_WordBreak(); 48 virtual void Release(); 49 virtual void Attach(IFX_CharIter* pIter); 50 virtual void Attach(const CFX_WideString& wsText); 51 virtual FX_BOOL Next(FX_BOOL bPrev); 52 virtual void SetAt(int32_t nIndex); 53 virtual int32_t GetWordPos() const; 54 virtual int32_t GetWordLength() const; 55 virtual void GetWord(CFX_WideString& wsWord) const; 56 virtual FX_BOOL IsEOF(FX_BOOL bTail) const; 57 58 protected: 59 ~CFX_WordBreak(); 60 FX_BOOL FindNextBreakPos(IFX_CharIter* pIter, 61 FX_BOOL bPrev, 62 FX_BOOL bFromNext = TRUE); 63 64 private: 65 IFX_CharIter* m_pPreIter; 66 IFX_CharIter* m_pCurIter; 67 }; 68 #endif 69