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 _FDE_TXTEDTBUF_H 8 #define _FDE_TXTEDTBUF_H 9 class IFX_CharIter; 10 class CFDE_TxtEdtBufIter; 11 class CFDE_TxtEdtBuf; 12 class CFDE_TxtEdtBufIter : public IFX_CharIter { 13 public: 14 #ifdef FDE_USEFORMATBLOCK 15 CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf* pBuf, FX_BOOL bForDisplay = TRUE); 16 #else 17 CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf* pBuf, FX_WCHAR wcAlias = 0); 18 #endif 19 20 virtual void Release(); 21 virtual FX_BOOL Next(FX_BOOL bPrev = FALSE); 22 virtual FX_WCHAR GetChar(); 23 virtual void SetAt(int32_t nIndex); 24 virtual int32_t GetAt() const; 25 virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const; 26 virtual IFX_CharIter* Clone(); 27 28 protected: 29 ~CFDE_TxtEdtBufIter(); 30 31 private: 32 CFDE_TxtEdtBuf* m_pBuf; 33 int32_t m_nCurChunk; 34 int32_t m_nCurIndex; 35 int32_t m_nIndex; 36 #ifdef FDE_USEFORMATBLOCK 37 FX_BOOL m_bForDisplay; 38 int32_t m_nAliasCount; 39 #endif 40 FX_WCHAR m_Alias; 41 }; 42 class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf { 43 friend class CFDE_TxtEdtBufIter; 44 struct _FDE_CHUNKHEADER { 45 int32_t nUsed; 46 FX_WCHAR wChars[1]; 47 }; 48 typedef _FDE_CHUNKHEADER FDE_CHUNKHEADER; 49 typedef _FDE_CHUNKHEADER* FDE_LPCHUNKHEADER; 50 struct _FDE_CHUNKPLACE { 51 int32_t nChunkIndex; 52 int32_t nCharIndex; 53 }; 54 typedef _FDE_CHUNKPLACE FDE_CHUNKPLACE; 55 typedef _FDE_CHUNKPLACE* FDE_LPCHUNKPLACE; 56 57 public: 58 CFDE_TxtEdtBuf(int32_t nDefChunkSize = FDE_DEFCHUNKLENGTH); 59 60 virtual void Release(); 61 virtual FX_BOOL SetChunkSize(int32_t nChunkSize); 62 virtual int32_t GetChunkSize() const; 63 virtual int32_t GetTextLength() const; 64 virtual void SetText(const CFX_WideString& wsText); 65 virtual void GetText(CFX_WideString& wsText) const; 66 virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const; 67 virtual void GetRange(CFX_WideString& wsText, 68 int32_t nBegine, 69 int32_t nCount = -1) const; 70 71 virtual void Insert(int32_t nPos, 72 const FX_WCHAR* lpText, 73 int32_t nLength = 1); 74 virtual void Delete(int32_t nIndex, int32_t nLength = 1); 75 virtual void Clear(FX_BOOL bRelease = TRUE); 76 77 virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); 78 79 protected: 80 virtual ~CFDE_TxtEdtBuf(); 81 82 private: 83 void ResetChunkBuffer(int32_t nDefChunkCount, int32_t nChunkSize); 84 int32_t CP2Index(const FDE_CHUNKPLACE& cp) const; 85 void Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const; 86 87 int32_t m_nChunkSize; 88 89 int32_t m_nTotal; 90 FX_BOOL m_bChanged; 91 CFX_PtrArray m_Chunks; 92 IFX_MEMAllocator* m_pAllocator; 93 }; 94 #endif 95