// 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_FDE_CFDE_TXTEDTBUF_H_ #define XFA_FDE_CFDE_TXTEDTBUF_H_ #include #include #include #include "core/fxcrt/fx_basic.h" #include "core/fxcrt/fx_system.h" #include "core/fxcrt/ifx_chariter.h" class CFDE_TxtEdtBuf { public: class Iterator : public IFX_CharIter { public: Iterator(CFDE_TxtEdtBuf* pBuf, wchar_t wcAlias); ~Iterator() override; bool Next(bool bPrev = false) override; wchar_t GetChar() const override; void SetAt(int32_t nIndex) override; int32_t GetAt() const override; bool IsEOF(bool bTail = true) const override; std::unique_ptr Clone() const override; private: CFDE_TxtEdtBuf* m_pBuf; int32_t m_nCurChunk; int32_t m_nCurIndex; int32_t m_nIndex; wchar_t m_Alias; }; CFDE_TxtEdtBuf(); ~CFDE_TxtEdtBuf(); int32_t GetTextLength() const { return m_nTotal; } void SetText(const CFX_WideString& wsText); CFX_WideString GetText() const { return GetRange(0, m_nTotal); } wchar_t GetCharByIndex(int32_t nIndex) const; CFX_WideString GetRange(int32_t nBegin, int32_t nCount) const; void Insert(int32_t nPos, const CFX_WideString& wsText); void Delete(int32_t nIndex, int32_t nLength); void Clear(); void SetChunkSizeForTesting(size_t size); size_t GetChunkCountForTesting() const { return m_chunks.size(); } private: class ChunkHeader { public: explicit ChunkHeader(int32_t chunkSize); ~ChunkHeader(); int32_t nUsed; std::vector wChars; }; std::pair Index2CP(int32_t nIndex) const; int32_t m_chunkSize; int32_t m_nTotal; std::vector> m_chunks; }; #endif // XFA_FDE_CFDE_TXTEDTBUF_H_