| Index: core/fpdfdoc/include/cpdf_variabletext.h
|
| diff --git a/core/fpdfdoc/include/cpdf_variabletext.h b/core/fpdfdoc/include/cpdf_variabletext.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b73d3df8c1da63ebee9912008cab1dc6010cd182
|
| --- /dev/null
|
| +++ b/core/fpdfdoc/include/cpdf_variabletext.h
|
| @@ -0,0 +1,253 @@
|
| +// Copyright 2016 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 CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
|
| +#define CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
|
| +
|
| +#include "core/fpdfdoc/cpvt_floatrect.h"
|
| +#include "core/fpdfdoc/cpvt_lineinfo.h"
|
| +#include "core/fpdfdoc/include/cpvt_line.h"
|
| +#include "core/fpdfdoc/include/cpvt_wordplace.h"
|
| +#include "core/fpdfdoc/include/cpvt_wordrange.h"
|
| +#include "core/fpdfdoc/pdf_vt.h"
|
| +#include "core/fxcrt/include/fx_coordinates.h"
|
| +#include "core/fxcrt/include/fx_string.h"
|
| +#include "core/fxcrt/include/fx_system.h"
|
| +
|
| +class CSection;
|
| +class IPVT_FontMap;
|
| +
|
| +struct CPVT_SecProps;
|
| +struct CPVT_Section;
|
| +struct CPVT_SectionInfo;
|
| +struct CPVT_Word;
|
| +struct CPVT_WordProps;
|
| +struct CPVT_WordInfo;
|
| +
|
| +#define VARIABLETEXT_HALF 0.5f
|
| +
|
| +class CPDF_VariableText : private CPDF_EditContainer {
|
| + public:
|
| + enum class ScriptType { Normal, Super, Sub };
|
| +
|
| + class Iterator {
|
| + public:
|
| + explicit Iterator(CPDF_VariableText* pVT);
|
| + ~Iterator();
|
| +
|
| + FX_BOOL NextWord();
|
| + FX_BOOL PrevWord();
|
| + FX_BOOL NextLine();
|
| + FX_BOOL PrevLine();
|
| + FX_BOOL NextSection();
|
| + FX_BOOL PrevSection();
|
| + FX_BOOL SetWord(const CPVT_Word& word);
|
| + FX_BOOL GetWord(CPVT_Word& word) const;
|
| + FX_BOOL GetLine(CPVT_Line& line) const;
|
| + FX_BOOL GetSection(CPVT_Section& section) const;
|
| + FX_BOOL SetSection(const CPVT_Section& section);
|
| + void SetAt(int32_t nWordIndex);
|
| + void SetAt(const CPVT_WordPlace& place);
|
| + const CPVT_WordPlace& GetAt() const { return m_CurPos; }
|
| +
|
| + private:
|
| + CPVT_WordPlace m_CurPos;
|
| + CPDF_VariableText* const m_pVT;
|
| + };
|
| +
|
| + class Provider {
|
| + public:
|
| + Provider(IPVT_FontMap* pFontMap);
|
| + virtual ~Provider();
|
| +
|
| + virtual int32_t GetCharWidth(int32_t nFontIndex,
|
| + uint16_t word,
|
| + int32_t nWordStyle);
|
| + virtual int32_t GetTypeAscent(int32_t nFontIndex);
|
| + virtual int32_t GetTypeDescent(int32_t nFontIndex);
|
| + virtual int32_t GetWordFontIndex(uint16_t word,
|
| + int32_t charset,
|
| + int32_t nFontIndex);
|
| + virtual FX_BOOL IsLatinWord(uint16_t word);
|
| + virtual int32_t GetDefaultFontIndex();
|
| +
|
| + private:
|
| + IPVT_FontMap* m_pFontMap;
|
| + };
|
| +
|
| + CPDF_VariableText();
|
| + virtual ~CPDF_VariableText();
|
| +
|
| + CPDF_VariableText::Provider* SetProvider(
|
| + CPDF_VariableText::Provider* pProvider);
|
| + CPDF_VariableText::Iterator* GetIterator();
|
| +
|
| + // CPDF_EditContainer.
|
| + void SetPlateRect(const CFX_FloatRect& rect) override {
|
| + CPDF_EditContainer::SetPlateRect(rect);
|
| + }
|
| + CFX_FloatRect GetContentRect() const override;
|
| + const CFX_FloatRect& GetPlateRect() const override {
|
| + return CPDF_EditContainer::GetPlateRect();
|
| + }
|
| +
|
| + void SetAlignment(int32_t nFormat = 0) { m_nAlignment = nFormat; }
|
| + void SetPasswordChar(uint16_t wSubWord = '*') { m_wSubWord = wSubWord; }
|
| + void SetLimitChar(int32_t nLimitChar = 0) { m_nLimitChar = nLimitChar; }
|
| + void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) { m_fCharSpace = fCharSpace; }
|
| + void SetHorzScale(int32_t nHorzScale = 100) { m_nHorzScale = nHorzScale; }
|
| + void SetMultiLine(FX_BOOL bMultiLine = TRUE) { m_bMultiLine = bMultiLine; }
|
| + void SetAutoReturn(FX_BOOL bAuto = TRUE) { m_bLimitWidth = bAuto; }
|
| + void SetFontSize(FX_FLOAT fFontSize) { m_fFontSize = fFontSize; }
|
| + void SetCharArray(int32_t nCharArray = 0) { m_nCharArray = nCharArray; }
|
| + void SetAutoFontSize(FX_BOOL bAuto = TRUE) { m_bAutoFontSize = bAuto; }
|
| + void SetRichText(FX_BOOL bRichText) { m_bRichText = bRichText; }
|
| + void SetLineLeading(FX_FLOAT fLineLeading) { m_fLineLeading = fLineLeading; }
|
| + void Initialize();
|
| + FX_BOOL IsValid() const { return m_bInitial; }
|
| + FX_BOOL IsRichText() const { return m_bRichText; }
|
| + void RearrangeAll();
|
| + void RearrangePart(const CPVT_WordRange& PlaceRange);
|
| + void ResetAll();
|
| + void SetText(const FX_WCHAR* text,
|
| + int32_t charset = 1,
|
| + const CPVT_SecProps* pSecProps = NULL,
|
| + const CPVT_WordProps* pWordProps = NULL);
|
| + CPVT_WordPlace InsertWord(const CPVT_WordPlace& place,
|
| + uint16_t word,
|
| + int32_t charset = 1,
|
| + const CPVT_WordProps* pWordProps = NULL);
|
| + CPVT_WordPlace InsertSection(const CPVT_WordPlace& place,
|
| + const CPVT_SecProps* pSecProps = NULL,
|
| + const CPVT_WordProps* pWordProps = NULL);
|
| + CPVT_WordPlace InsertText(const CPVT_WordPlace& place,
|
| + const FX_WCHAR* text,
|
| + int32_t charset = 1,
|
| + const CPVT_SecProps* pSecProps = NULL,
|
| + const CPVT_WordProps* pWordProps = NULL);
|
| + CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange);
|
| + CPVT_WordPlace DeleteWord(const CPVT_WordPlace& place);
|
| + CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace& place);
|
| +
|
| + int32_t GetTotalWords() const;
|
| + FX_FLOAT GetFontSize() const { return m_fFontSize; }
|
| + int32_t GetAlignment() const { return m_nAlignment; }
|
| + uint16_t GetPasswordChar() const { return GetSubWord(); }
|
| + int32_t GetCharArray() const { return m_nCharArray; }
|
| + int32_t GetLimitChar() const { return m_nLimitChar; }
|
| + FX_BOOL IsMultiLine() const { return m_bMultiLine; }
|
| + int32_t GetHorzScale() const { return m_nHorzScale; }
|
| + FX_FLOAT GetCharSpace() const { return m_fCharSpace; }
|
| + CPVT_WordPlace GetBeginWordPlace() const;
|
| + CPVT_WordPlace GetEndWordPlace() const;
|
| + CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace SearchWordPlace(const CFX_FloatPoint& point) const;
|
| + CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace& place,
|
| + const CFX_FloatPoint& point) const;
|
| + CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace& place,
|
| + const CFX_FloatPoint& point) const;
|
| + CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const;
|
| + void UpdateWordPlace(CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace AdjustLineHeader(const CPVT_WordPlace& place,
|
| + FX_BOOL bPrevOrNext) const;
|
| + int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
|
| + CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
|
| +
|
| + uint16_t GetSubWord() const { return m_wSubWord; }
|
| +
|
| + private:
|
| + friend class CTypeset;
|
| + friend class CSection;
|
| +
|
| + int32_t GetCharWidth(int32_t nFontIndex,
|
| + uint16_t Word,
|
| + uint16_t SubWord,
|
| + int32_t nWordStyle);
|
| + int32_t GetTypeAscent(int32_t nFontIndex);
|
| + int32_t GetTypeDescent(int32_t nFontIndex);
|
| + int32_t GetWordFontIndex(uint16_t word, int32_t charset, int32_t nFontIndex);
|
| + int32_t GetDefaultFontIndex();
|
| + FX_BOOL IsLatinWord(uint16_t word);
|
| +
|
| + CPVT_WordPlace AddSection(const CPVT_WordPlace& place,
|
| + const CPVT_SectionInfo& secinfo);
|
| + CPVT_WordPlace AddLine(const CPVT_WordPlace& place,
|
| + const CPVT_LineInfo& lineinfo);
|
| + CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
|
| + const CPVT_WordInfo& wordinfo);
|
| + FX_BOOL GetWordInfo(const CPVT_WordPlace& place, CPVT_WordInfo& wordinfo);
|
| + FX_BOOL SetWordInfo(const CPVT_WordPlace& place,
|
| + const CPVT_WordInfo& wordinfo);
|
| + FX_BOOL GetLineInfo(const CPVT_WordPlace& place, CPVT_LineInfo& lineinfo);
|
| + FX_BOOL GetSectionInfo(const CPVT_WordPlace& place,
|
| + CPVT_SectionInfo& secinfo);
|
| + FX_FLOAT GetWordFontSize(const CPVT_WordInfo& WordInfo,
|
| + FX_BOOL bFactFontSize = FALSE);
|
| + FX_FLOAT GetWordWidth(int32_t nFontIndex,
|
| + uint16_t Word,
|
| + uint16_t SubWord,
|
| + FX_FLOAT fCharSpace,
|
| + int32_t nHorzScale,
|
| + FX_FLOAT fFontSize,
|
| + FX_FLOAT fWordTail,
|
| + int32_t nWordStyle);
|
| + FX_FLOAT GetWordWidth(const CPVT_WordInfo& WordInfo);
|
| + FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
|
| + FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
|
| + FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo,
|
| + FX_BOOL bFactFontSize = FALSE);
|
| + FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo,
|
| + FX_BOOL bFactFontSize = FALSE);
|
| + FX_FLOAT GetLineAscent(const CPVT_SectionInfo& SecInfo);
|
| + FX_FLOAT GetLineDescent(const CPVT_SectionInfo& SecInfo);
|
| + FX_FLOAT GetFontAscent(int32_t nFontIndex, FX_FLOAT fFontSize);
|
| + FX_FLOAT GetFontDescent(int32_t nFontIndex, FX_FLOAT fFontSize);
|
| + int32_t GetWordFontIndex(const CPVT_WordInfo& WordInfo);
|
| + FX_FLOAT GetCharSpace(const CPVT_WordInfo& WordInfo);
|
| + int32_t GetHorzScale(const CPVT_WordInfo& WordInfo);
|
| + FX_FLOAT GetLineLeading(const CPVT_SectionInfo& SecInfo);
|
| + FX_FLOAT GetLineIndent(const CPVT_SectionInfo& SecInfo);
|
| + int32_t GetAlignment(const CPVT_SectionInfo& SecInfo);
|
| +
|
| + void ClearSectionRightWords(const CPVT_WordPlace& place);
|
| +
|
| + FX_BOOL ClearEmptySection(const CPVT_WordPlace& place);
|
| + void ClearEmptySections(const CPVT_WordRange& PlaceRange);
|
| + void LinkLatterSection(const CPVT_WordPlace& place);
|
| + void ClearWords(const CPVT_WordRange& PlaceRange);
|
| + CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace& place);
|
| + CPVT_WordPlace ClearRightWord(const CPVT_WordPlace& place);
|
| +
|
| + CPVT_FloatRect Rearrange(const CPVT_WordRange& PlaceRange);
|
| + FX_FLOAT GetAutoFontSize();
|
| + FX_BOOL IsBigger(FX_FLOAT fFontSize);
|
| + CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange);
|
| +
|
| + void ResetSectionArray();
|
| +
|
| + CPVT_ArrayTemplate<CSection*> m_SectionArray;
|
| + int32_t m_nLimitChar;
|
| + int32_t m_nCharArray;
|
| + FX_BOOL m_bMultiLine;
|
| + FX_BOOL m_bLimitWidth;
|
| + FX_BOOL m_bAutoFontSize;
|
| + int32_t m_nAlignment;
|
| + FX_FLOAT m_fLineLeading;
|
| + FX_FLOAT m_fCharSpace;
|
| + int32_t m_nHorzScale;
|
| + uint16_t m_wSubWord;
|
| + FX_FLOAT m_fFontSize;
|
| + FX_BOOL m_bInitial;
|
| + FX_BOOL m_bRichText;
|
| + CPDF_VariableText::Provider* m_pVTProvider;
|
| + CPDF_VariableText::Iterator* m_pVTIterator;
|
| +};
|
| +
|
| +#endif // CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
|
|
|