Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpvt_variabletext.h
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
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 CORE_FPDFDOC_CPVT_VARIABLETEXT_H_
8#define CORE_FPDFDOC_CPVT_VARIABLETEXT_H_
9
10#include <stdint.h>
11
12#include <memory>
13#include <vector>
14
15#include "core/fpdfdoc/cpvt_floatrect.h"
16#include "core/fpdfdoc/cpvt_line.h"
17#include "core/fpdfdoc/cpvt_lineinfo.h"
18#include "core/fpdfdoc/cpvt_wordplace.h"
19#include "core/fpdfdoc/cpvt_wordrange.h"
20#include "core/fxcrt/fx_codepage_forward.h"
21#include "core/fxcrt/fx_coordinates.h"
22#include "core/fxcrt/unowned_ptr.h"
23#include "core/fxcrt/widestring.h"
24
25class CPVT_Section;
26class CPVT_Word;
27class IPVT_FontMap;
28struct CPVT_WordInfo;
29
31 public:
32 class Iterator {
33 public:
34 explicit Iterator(CPVT_VariableText* pVT);
36
37 bool NextWord();
38 bool NextLine();
39 bool GetWord(CPVT_Word& word) const;
40 bool GetLine(CPVT_Line& line) const;
41 void SetAt(int32_t nWordIndex);
42 void SetAt(const CPVT_WordPlace& place);
43 const CPVT_WordPlace& GetWordPlace() const { return m_CurPos; }
44
45 private:
46 CPVT_WordPlace m_CurPos;
47 UnownedPtr<const CPVT_VariableText> const m_pVT;
48 };
49
50 class Provider {
51 public:
52 explicit Provider(IPVT_FontMap* pFontMap);
53 virtual ~Provider();
54
55 virtual int GetCharWidth(int32_t nFontIndex, uint16_t word);
56 virtual int32_t GetTypeAscent(int32_t nFontIndex);
57 virtual int32_t GetTypeDescent(int32_t nFontIndex);
58 virtual int32_t GetWordFontIndex(uint16_t word,
59 FX_Charset charset,
60 int32_t nFontIndex);
61 virtual int32_t GetDefaultFontIndex();
62
63 IPVT_FontMap* GetFontMap() { return m_pFontMap; }
64
65 private:
66 UnownedPtr<IPVT_FontMap> const m_pFontMap;
67 };
68
69 explicit CPVT_VariableText(Provider* Provider);
71
72 void SetProvider(Provider* pProvider);
74
76 void SetPlateRect(const CFX_FloatRect& rect);
77 const CFX_FloatRect& GetPlateRect() const;
78
79 void SetAlignment(int32_t nFormat) { m_nAlignment = nFormat; }
80 void SetPasswordChar(uint16_t wSubWord) { m_wSubWord = wSubWord; }
81 void SetLimitChar(int32_t nLimitChar) { m_nLimitChar = nLimitChar; }
82 void SetMultiLine(bool bMultiLine) { m_bMultiLine = bMultiLine; }
83 void SetAutoReturn(bool bAuto) { m_bLimitWidth = bAuto; }
84 void SetFontSize(float fFontSize) { m_fFontSize = fFontSize; }
85 void SetCharArray(int32_t nCharArray) { m_nCharArray = nCharArray; }
86 void SetAutoFontSize(bool bAuto) { m_bAutoFontSize = bAuto; }
87 void Initialize();
88
89 bool IsValid() const { return m_bInitialized; }
90
91 void RearrangeAll();
92 void RearrangePart(const CPVT_WordRange& PlaceRange);
93 void SetText(const WideString& text);
95 uint16_t word,
96 FX_Charset charset);
98 CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange);
101
102 int32_t GetTotalWords() const;
103 float GetFontSize() const { return m_fFontSize; }
104 int32_t GetAlignment() const { return m_nAlignment; }
105 uint16_t GetPasswordChar() const { return GetSubWord(); }
106 int32_t GetCharArray() const { return m_nCharArray; }
107 int32_t GetLimitChar() const { return m_nLimitChar; }
108 bool IsMultiLine() const { return m_bMultiLine; }
109 bool IsAutoReturn() const { return m_bLimitWidth; }
110
115 CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const;
117 const CFX_PointF& point) const;
119 const CFX_PointF& point) const;
124 void UpdateWordPlace(CPVT_WordPlace& place) const;
127 int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
128 CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
129
130 uint16_t GetSubWord() const { return m_wSubWord; }
131
132 float GetPlateWidth() const { return m_rcPlate.right - m_rcPlate.left; }
133 float GetPlateHeight() const { return m_rcPlate.top - m_rcPlate.bottom; }
134 CFX_PointF GetBTPoint() const;
135 CFX_PointF GetETPoint() const;
136
137 CFX_PointF InToOut(const CFX_PointF& point) const;
138 CFX_PointF OutToIn(const CFX_PointF& point) const;
139 CFX_FloatRect InToOut(const CPVT_FloatRect& rect) const;
140
141 float GetFontAscent(int32_t nFontIndex, float fFontSize) const;
142 float GetFontDescent(int32_t nFontIndex, float fFontSize) const;
143 int32_t GetDefaultFontIndex();
144 float GetLineLeading();
145 float GetWordWidth(const CPVT_WordInfo& WordInfo) const;
146 float GetWordWidth(int32_t nFontIndex,
147 uint16_t Word,
148 uint16_t SubWord,
149 float fFontSize,
150 float fWordTail) const;
151 float GetWordAscent(const CPVT_WordInfo& WordInfo) const;
152 float GetWordDescent(const CPVT_WordInfo& WordInfo) const;
153 float GetWordAscent(const CPVT_WordInfo& WordInfo, float fFontSize) const;
154 float GetWordDescent(const CPVT_WordInfo& WordInfo, float fFontSize) const;
155 float GetLineAscent();
156 float GetLineDescent();
157 float GetLineIndent();
158
159 private:
160 int GetCharWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord) const;
161 int32_t GetWordFontIndex(uint16_t word,
162 FX_Charset charset,
163 int32_t nFontIndex);
164
165 CPVT_WordPlace AddSection(const CPVT_WordPlace& place);
166 CPVT_WordPlace AddLine(const CPVT_WordPlace& place,
167 const CPVT_LineInfo& lineinfo);
168 CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
169 const CPVT_WordInfo& wordinfo);
170 float GetWordFontSize() const;
171
172 void ClearSectionRightWords(const CPVT_WordPlace& place);
173
174 bool ClearEmptySection(const CPVT_WordPlace& place);
175 void ClearEmptySections(const CPVT_WordRange& PlaceRange);
176 void LinkLatterSection(const CPVT_WordPlace& place);
177 void ClearWords(const CPVT_WordRange& PlaceRange);
178 CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace& place);
179 CPVT_WordPlace ClearRightWord(const CPVT_WordPlace& place);
180
181 void Rearrange(const CPVT_WordRange& PlaceRange);
182 float GetAutoFontSize();
183 bool IsBigger(float fFontSize) const;
184 CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange);
185
186 bool m_bInitialized = false;
187 bool m_bMultiLine = false;
188 bool m_bLimitWidth = false;
189 bool m_bAutoFontSize = false;
190 uint16_t m_wSubWord = 0;
191 int32_t m_nLimitChar = 0;
192 int32_t m_nCharArray = 0;
193 int32_t m_nAlignment = 0;
194 float m_fLineLeading = 0.0f;
195 float m_fFontSize = 0.0f;
196 std::vector<std::unique_ptr<CPVT_Section>> m_SectionArray;
197 UnownedPtr<Provider> m_pVTProvider;
198 std::unique_ptr<Iterator> m_pVTIterator;
199 CFX_FloatRect m_rcPlate;
200 CPVT_FloatRect m_rcContent;
201};
202
203#endif // CORE_FPDFDOC_CPVT_VARIABLETEXT_H_
BorderStyle
constexpr CFX_FloatRect(float l, float b, float r, float t)
float Width() const
bool IsEmpty() const
void Inflate(float x, float y)
CFX_FloatRect & operator=(const CFX_FloatRect &that)=default
void Deflate(float x, float y)
float Height() const
static const char kDefaultAnsiFontName[]
Definition cfx_font.h:58
CFX_Matrix & operator=(const CFX_Matrix &other)=default
CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
CFX_Matrix()=default
static CFX_FloatRect BoundingRectFromQuadPoints(const CPDF_Dictionary *pAnnotDict)
CPDF_DefaultAppearance(const ByteString &csDA)
bool KeyExist(const ByteString &key) const
float GetFloatFor(const ByteString &key) const
WideString GetUnicodeTextFor(const ByteString &key) const
void SetRectFor(const ByteString &key, const CFX_FloatRect &rect)
RetainPtr< const CPDF_Array > GetArrayFor(const ByteString &key) const
CFX_FloatRect GetRectFor(const ByteString &key) const
static CPDF_DocPageData * FromDocument(const CPDF_Document *pDoc)
static constexpr uint32_t kInvalidCharCode
Definition cpdf_font.h:63
static bool GenerateAnnotAP(CPDF_Document *pDoc, CPDF_Dictionary *pAnnotDict, CPDF_Annot::Subtype subtype)
static void GenerateEmptyAP(CPDF_Document *pDoc, CPDF_Dictionary *pAnnotDict)
static void GenerateFormAP(CPDF_Document *pDoc, CPDF_Dictionary *pAnnotDict, FormType type)
ByteString GetPDFFontAlias(int32_t nFontIndex) override
RetainPtr< CPDF_Font > GetPDFFont(int32_t nFontIndex) override
int32_t CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) override
CPVT_FontMap(CPDF_Document *pDoc, RetainPtr< CPDF_Dictionary > pResDict, RetainPtr< CPDF_Font > pDefFont, const ByteString &sDefFontAlias)
int32_t GetWordFontIndex(uint16_t word, FX_Charset charset, int32_t nFontIndex) override
FX_Charset CharSetFromUnicode(uint16_t word, FX_Charset nOldCharset) override
~CPVT_FontMap() override
void SetAt(int32_t nWordIndex)
bool GetWord(CPVT_Word &word) const
bool GetLine(CPVT_Line &line) const
Iterator(CPVT_VariableText *pVT)
const CPVT_WordPlace & GetWordPlace() const
void SetAt(const CPVT_WordPlace &place)
virtual int32_t GetTypeDescent(int32_t nFontIndex)
virtual int GetCharWidth(int32_t nFontIndex, uint16_t word)
virtual int32_t GetWordFontIndex(uint16_t word, FX_Charset charset, int32_t nFontIndex)
Provider(IPVT_FontMap *pFontMap)
virtual int32_t GetTypeAscent(int32_t nFontIndex)
virtual int32_t GetDefaultFontIndex()
float GetPlateHeight() const
void SetPlateRect(const CFX_FloatRect &rect)
CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace &place) const
CPVT_WordPlace NextLineHeaderPlace(const CPVT_WordPlace &place) const
CPVT_WordPlace PrevLineHeaderPlace(const CPVT_WordPlace &place) const
CFX_PointF GetBTPoint() const
int32_t GetLimitChar() const
CPVT_WordPlace GetBeginWordPlace() const
CPVT_WordPlace GetEndWordPlace() const
CPVT_WordPlace InsertSection(const CPVT_WordPlace &place)
int32_t WordPlaceToWordIndex(const CPVT_WordPlace &place) const
CFX_PointF GetETPoint() const
CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace &place) const
float GetFontAscent(int32_t nFontIndex, float fFontSize) const
int32_t GetAlignment() const
uint16_t GetPasswordChar() const
float GetWordWidth(const CPVT_WordInfo &WordInfo) const
float GetWordWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord, float fFontSize, float fWordTail) const
float GetWordDescent(const CPVT_WordInfo &WordInfo) const
void SetLimitChar(int32_t nLimitChar)
CFX_FloatRect GetContentRect() const
float GetFontDescent(int32_t nFontIndex, float fFontSize) const
CPVT_WordPlace InsertWord(const CPVT_WordPlace &place, uint16_t word, FX_Charset charset)
CFX_PointF OutToIn(const CFX_PointF &point) const
CPVT_VariableText(Provider *Provider)
CFX_PointF InToOut(const CFX_PointF &point) const
void SetText(const WideString &text)
int32_t GetCharArray() const
void SetProvider(Provider *pProvider)
float GetWordAscent(const CPVT_WordInfo &WordInfo, float fFontSize) const
CPVT_VariableText::Iterator * GetIterator()
const CFX_FloatRect & GetPlateRect() const
void SetCharArray(int32_t nCharArray)
float GetPlateWidth() const
CPVT_WordPlace WordIndexToWordPlace(int32_t index) const
CPVT_WordPlace DeleteWords(const CPVT_WordRange &PlaceRange)
CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace &place, const CFX_PointF &point) const
CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace &place) const
CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace &place) const
CPVT_WordPlace SearchWordPlace(const CFX_PointF &point) const
CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace &place) const
CFX_FloatRect InToOut(const CPVT_FloatRect &rect) const
CPVT_WordPlace DeleteWord(const CPVT_WordPlace &place)
bool IsAutoReturn() const
float GetWordDescent(const CPVT_WordInfo &WordInfo, float fFontSize) const
void UpdateWordPlace(CPVT_WordPlace &place) const
void SetAlignment(int32_t nFormat)
void SetMultiLine(bool bMultiLine)
void RearrangePart(const CPVT_WordRange &PlaceRange)
float GetFontSize() const
CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace &place)
float GetWordAscent(const CPVT_WordInfo &WordInfo) const
void SetAutoFontSize(bool bAuto)
int32_t GetTotalWords() const
uint16_t GetSubWord() const
void SetFontSize(float fFontSize)
CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace &place, const CFX_PointF &point) const
CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace &place) const
void SetAutoReturn(bool bAuto)
void SetPasswordChar(uint16_t wSubWord)
uint16_t Word
Definition cpvt_word.h:19
int32_t nFontIndex
Definition cpvt_word.h:26
float fFontSize
Definition cpvt_word.h:27
virtual ByteString GetPDFFontAlias(int32_t nFontIndex)=0
static ByteString Format(const char *pFormat,...)
ByteString & operator+=(const ByteString &str)
ByteString & operator=(ByteString &&that) noexcept
bool IsEmpty() const
Definition bytestring.h:119
WideString & operator+=(const WideString &str)
WideString & operator+=(wchar_t ch)
FX_Charset
Definition fx_codepage.h:70
#define FXSYS_IsFloatBigger(fa, fb)
Definition fx_system.h:36
#define FXSYS_IsFloatZero(f)
Definition fx_system.h:35
#define FXSYS_IsFloatSmaller(fa, fb)
Definition fx_system.h:38
CFX_Color CFXColorFromArray(const CPDF_Array &array)
CFX_Color CFXColorFromString(const ByteString &str)
const char kBG[]
const char kR[]
float fColor4
Definition cfx_color.h:58
float fColor3
Definition cfx_color.h:57
Type nColorType
Definition cfx_color.h:54
CFX_Color & operator=(const CFX_Color &that)=default
constexpr CFX_Color(Type type=CFX_Color::Type::kTransparent, float color1=0.0f, float color2=0.0f, float color3=0.0f, float color4=0.0f)
Definition cfx_color.h:27
float fColor2
Definition cfx_color.h:56
float fColor1
Definition cfx_color.h:55
int32_t LineCmp(const CPVT_WordPlace &wp) const