diff options
Diffstat (limited to 'xfa/fee/fde_txtedtbuf.h')
-rw-r--r-- | xfa/fee/fde_txtedtbuf.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/xfa/fee/fde_txtedtbuf.h b/xfa/fee/fde_txtedtbuf.h new file mode 100644 index 0000000000..e0598f5244 --- /dev/null +++ b/xfa/fee/fde_txtedtbuf.h @@ -0,0 +1,92 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef XFA_FEE_FDE_TXTEDTBUF_H_ +#define XFA_FEE_FDE_TXTEDTBUF_H_ + +#include "xfa/fee/ifde_txtedtbuf.h" +#include "xfa/fee/ifde_txtedtengine.h" +#include "xfa/fgas/crt/fgas_memory.h" + +class IFX_CharIter; +class CFDE_TxtEdtBuf; + +class CFDE_TxtEdtBufIter : public IFX_CharIter { + public: + CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf* pBuf, FX_WCHAR wcAlias = 0); + + virtual void Release(); + virtual FX_BOOL Next(FX_BOOL bPrev = FALSE); + virtual FX_WCHAR GetChar(); + virtual void SetAt(int32_t nIndex); + virtual int32_t GetAt() const; + virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const; + virtual IFX_CharIter* Clone(); + + protected: + ~CFDE_TxtEdtBufIter(); + + private: + CFDE_TxtEdtBuf* m_pBuf; + int32_t m_nCurChunk; + int32_t m_nCurIndex; + int32_t m_nIndex; + FX_WCHAR m_Alias; +}; +class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf { + friend class CFDE_TxtEdtBufIter; + struct _FDE_CHUNKHEADER { + int32_t nUsed; + FX_WCHAR wChars[1]; + }; + typedef _FDE_CHUNKHEADER FDE_CHUNKHEADER; + typedef _FDE_CHUNKHEADER* FDE_LPCHUNKHEADER; + struct _FDE_CHUNKPLACE { + int32_t nChunkIndex; + int32_t nCharIndex; + }; + typedef _FDE_CHUNKPLACE FDE_CHUNKPLACE; + typedef _FDE_CHUNKPLACE* FDE_LPCHUNKPLACE; + + public: + CFDE_TxtEdtBuf(int32_t nDefChunkSize = FDE_DEFCHUNKLENGTH); + + virtual void Release(); + virtual FX_BOOL SetChunkSize(int32_t nChunkSize); + virtual int32_t GetChunkSize() const; + virtual int32_t GetTextLength() const; + virtual void SetText(const CFX_WideString& wsText); + virtual void GetText(CFX_WideString& wsText) const; + virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const; + virtual void GetRange(CFX_WideString& wsText, + int32_t nBegine, + int32_t nCount = -1) const; + + virtual void Insert(int32_t nPos, + const FX_WCHAR* lpText, + int32_t nLength = 1); + virtual void Delete(int32_t nIndex, int32_t nLength = 1); + virtual void Clear(FX_BOOL bRelease = TRUE); + + virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); + + protected: + virtual ~CFDE_TxtEdtBuf(); + + private: + void ResetChunkBuffer(int32_t nDefChunkCount, int32_t nChunkSize); + int32_t CP2Index(const FDE_CHUNKPLACE& cp) const; + void Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const; + + int32_t m_nChunkSize; + + int32_t m_nTotal; + FX_BOOL m_bChanged; + CFX_PtrArray m_Chunks; + IFX_MEMAllocator* m_pAllocator; +}; + +#endif // XFA_FEE_FDE_TXTEDTBUF_H_ |