| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #define _PDF_VT_H_ | 7 #define _PDF_VT_H_ |
| 8 class CPVT_Size; | 8 class CPVT_Size; |
| 9 class CPVT_FloatRect; | 9 class CPVT_FloatRect; |
| 10 struct CPVT_SectionInfo; | 10 struct CPVT_SectionInfo; |
| 11 struct CPVT_LineInfo; | 11 struct CPVT_LineInfo; |
| 12 struct CPVT_WordInfo; | 12 struct CPVT_WordInfo; |
| 13 class CLine; | 13 class CLine; |
| 14 class CLines; | 14 class CLines; |
| 15 class CSection; | 15 class CSection; |
| 16 class CTypeset; | 16 class CTypeset; |
| 17 class CPDF_EditContainer; | 17 class CPDF_EditContainer; |
| 18 class CPDF_VariableText; | 18 class CPDF_VariableText; |
| 19 class CPDF_VariableText_Iterator; | 19 class CPDF_VariableText_Iterator; |
| 20 #define IsFloatZero(f)» » » » » » ((f) < 0.0001 &&
(f) > -0.0001) | 20 #define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) |
| 21 #define IsFloatBigger(fa,fb)» » » » ((fa) > (fb) && !IsFloat
Zero((fa) - (fb))) | 21 #define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) |
| 22 #define IsFloatSmaller(fa,fb)» » » » ((fa) < (fb) && !IsFloat
Zero((fa) - (fb))) | 22 #define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) |
| 23 template<class T> T FPDF_MIN (const T & i, const T & j) | 23 template <class T> |
| 24 { | 24 T FPDF_MIN(const T& i, const T& j) { |
| 25 return ((i < j) ? i : j); | 25 return ((i < j) ? i : j); |
| 26 } | 26 } |
| 27 template<class T> T FPDF_MAX (const T & i, const T & j) | 27 template <class T> |
| 28 { | 28 T FPDF_MAX(const T& i, const T& j) { |
| 29 return ((i > j) ? i : j); | 29 return ((i > j) ? i : j); |
| 30 } | 30 } |
| 31 class CPVT_Size | 31 class CPVT_Size { |
| 32 { | 32 public: |
| 33 public: | 33 CPVT_Size() : x(0.0f), y(0.0f) {} |
| 34 CPVT_Size() : x(0.0f), y(0.0f) | 34 CPVT_Size(FX_FLOAT x, FX_FLOAT y) { |
| 35 { | 35 this->x = x; |
| 36 } | 36 this->y = y; |
| 37 CPVT_Size(FX_FLOAT x, FX_FLOAT y) | 37 } |
| 38 { | 38 FX_FLOAT x, y; |
| 39 this->x = x; | 39 }; |
| 40 this->y = y; | 40 class CPVT_FloatRect : public CFX_FloatRect { |
| 41 } | 41 public: |
| 42 FX_FLOAT x, y; | 42 CPVT_FloatRect() { left = top = right = bottom = 0.0f; } |
| 43 }; | 43 CPVT_FloatRect(FX_FLOAT left, FX_FLOAT top, FX_FLOAT right, FX_FLOAT bottom) { |
| 44 class CPVT_FloatRect : public CFX_FloatRect | 44 this->left = left; |
| 45 { | 45 this->top = top; |
| 46 public: | 46 this->right = right; |
| 47 CPVT_FloatRect() | 47 this->bottom = bottom; |
| 48 { | 48 } |
| 49 left = top = right = bottom = 0.0f; | 49 CPVT_FloatRect(const CPDF_Rect& rect) { |
| 50 } | 50 this->left = rect.left; |
| 51 CPVT_FloatRect(FX_FLOAT left, FX_FLOAT top, | 51 this->top = rect.top; |
| 52 FX_FLOAT right, FX_FLOAT bottom) | 52 this->right = rect.right; |
| 53 { | 53 this->bottom = rect.bottom; |
| 54 this->left = left; | 54 } |
| 55 this->top = top; | 55 void Default() { left = top = right = bottom = 0.0f; } |
| 56 this->right = right; | 56 FX_FLOAT Height() const { |
| 57 this->bottom = bottom; | 57 if (this->top > this->bottom) { |
| 58 } | 58 return this->top - this->bottom; |
| 59 CPVT_FloatRect(const CPDF_Rect & rect) | 59 } else { |
| 60 { | 60 return this->bottom - this->top; |
| 61 this->left = rect.left; | 61 } |
| 62 this->top = rect.top; | 62 } |
| 63 this->right = rect.right; | |
| 64 this->bottom = rect.bottom; | |
| 65 } | |
| 66 void Default() | |
| 67 { | |
| 68 left = top = right = bottom = 0.0f; | |
| 69 } | |
| 70 FX_FLOAT Height() const | |
| 71 { | |
| 72 if(this->top > this->bottom) { | |
| 73 return this->top - this->bottom; | |
| 74 } else { | |
| 75 return this->bottom - this->top; | |
| 76 } | |
| 77 } | |
| 78 }; | 63 }; |
| 79 struct CPVT_SectionInfo { | 64 struct CPVT_SectionInfo { |
| 80 CPVT_SectionInfo() : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps
(NULL) | 65 CPVT_SectionInfo() |
| 81 { | 66 : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL) {} |
| 82 } | 67 virtual ~CPVT_SectionInfo() { |
| 83 virtual ~CPVT_SectionInfo() | 68 if (pSecProps) { |
| 84 { | 69 delete pSecProps; |
| 85 if (pSecProps) { | 70 } |
| 86 delete pSecProps; | 71 if (pWordProps) { |
| 87 } | 72 delete pWordProps; |
| 88 if (pWordProps) { | 73 } |
| 89 delete pWordProps; | 74 } |
| 90 } | 75 CPVT_SectionInfo(const CPVT_SectionInfo& other) |
| 91 } | 76 : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL) { |
| 92 CPVT_SectionInfo(const CPVT_SectionInfo & other): rcSection(), nTotalLine(0)
, pSecProps(NULL), pWordProps(NULL) | 77 operator=(other); |
| 93 { | 78 } |
| 94 operator = (other); | 79 void operator=(const CPVT_SectionInfo& other) { |
| 95 } | 80 if (this == &other) { |
| 96 void operator = (const CPVT_SectionInfo & other) | 81 return; |
| 97 { | 82 } |
| 98 if (this == &other) { | 83 this->rcSection = other.rcSection; |
| 99 return; | 84 this->nTotalLine = other.nTotalLine; |
| 100 } | 85 if (other.pSecProps) { |
| 101 this->rcSection = other.rcSection; | 86 if (pSecProps) { |
| 102 this->nTotalLine = other.nTotalLine; | 87 *pSecProps = *other.pSecProps; |
| 103 if (other.pSecProps) { | 88 } else { |
| 104 if (pSecProps) { | 89 pSecProps = FX_NEW CPVT_SecProps(*other.pSecProps); |
| 105 *pSecProps = *other.pSecProps; | 90 } |
| 106 } else { | 91 } |
| 107 pSecProps = FX_NEW CPVT_SecProps(*other.pSecProps); | 92 if (other.pWordProps) { |
| 108 } | 93 if (pWordProps) { |
| 109 } | 94 *pWordProps = *other.pWordProps; |
| 110 if (other.pWordProps) { | 95 } else { |
| 111 if (pWordProps) { | 96 pWordProps = FX_NEW CPVT_WordProps(*other.pWordProps); |
| 112 *pWordProps = *other.pWordProps; | 97 } |
| 113 } else { | 98 } |
| 114 pWordProps = FX_NEW CPVT_WordProps(*other.pWordProps); | 99 } |
| 115 } | 100 CPVT_FloatRect rcSection; |
| 116 } | 101 FX_INT32 nTotalLine; |
| 117 } | 102 CPVT_SecProps* pSecProps; |
| 118 CPVT_FloatRect» » » » rcSection; | 103 CPVT_WordProps* pWordProps; |
| 119 FX_INT32» » » » » nTotalLine; | |
| 120 CPVT_SecProps*» » » » pSecProps; | |
| 121 CPVT_WordProps*» » » » pWordProps; | |
| 122 }; | 104 }; |
| 123 struct CPVT_LineInfo { | 105 struct CPVT_LineInfo { |
| 124 CPVT_LineInfo() : nTotalWord(0), nBeginWordIndex(-1), nEndWordIndex(-1), | 106 CPVT_LineInfo() |
| 125 fLineX(0.0f), fLineY(0.0f), fLineWidth(0.0f), fLineAscent(0.0f), fLineDe
scent(0.0f) | 107 : nTotalWord(0), |
| 126 { | 108 nBeginWordIndex(-1), |
| 127 } | 109 nEndWordIndex(-1), |
| 128 FX_INT32» » » » » nTotalWord; | 110 fLineX(0.0f), |
| 129 FX_INT32» » » » » nBeginWordIndex; | 111 fLineY(0.0f), |
| 130 FX_INT32» » » » » nEndWordIndex; | 112 fLineWidth(0.0f), |
| 131 FX_FLOAT» » » » » fLineX; | 113 fLineAscent(0.0f), |
| 132 FX_FLOAT» » » » » fLineY; | 114 fLineDescent(0.0f) {} |
| 133 FX_FLOAT» » » » » fLineWidth; | 115 FX_INT32 nTotalWord; |
| 134 FX_FLOAT» » » » » fLineAscent; | 116 FX_INT32 nBeginWordIndex; |
| 135 FX_FLOAT» » » » » fLineDescent; | 117 FX_INT32 nEndWordIndex; |
| 118 FX_FLOAT fLineX; |
| 119 FX_FLOAT fLineY; |
| 120 FX_FLOAT fLineWidth; |
| 121 FX_FLOAT fLineAscent; |
| 122 FX_FLOAT fLineDescent; |
| 136 }; | 123 }; |
| 137 struct CPVT_WordInfo : public CFX_Object { | 124 struct CPVT_WordInfo : public CFX_Object { |
| 138 CPVT_WordInfo() : Word(0), nCharset(0), | 125 CPVT_WordInfo() |
| 139 fWordX(0.0f), fWordY(0.0f), fWordTail(0.0f), nFontIndex(-1), pWordProps(
NULL) | 126 : Word(0), |
| 140 { | 127 nCharset(0), |
| 141 } | 128 fWordX(0.0f), |
| 142 CPVT_WordInfo(FX_WORD word, FX_INT32 charset, FX_INT32 fontIndex, CPVT_WordP
rops * pProps): | 129 fWordY(0.0f), |
| 143 Word(word), nCharset(charset), fWordX(0.0f), fWordY(0.0f), fWordTail(0.0
f), | 130 fWordTail(0.0f), |
| 144 nFontIndex(fontIndex), pWordProps(pProps) | 131 nFontIndex(-1), |
| 145 { | 132 pWordProps(NULL) {} |
| 146 } | 133 CPVT_WordInfo(FX_WORD word, |
| 147 virtual ~CPVT_WordInfo() | 134 FX_INT32 charset, |
| 148 { | 135 FX_INT32 fontIndex, |
| 149 if (pWordProps) { | 136 CPVT_WordProps* pProps) |
| 150 delete pWordProps; | 137 : Word(word), |
| 151 } | 138 nCharset(charset), |
| 152 } | 139 fWordX(0.0f), |
| 153 CPVT_WordInfo(const CPVT_WordInfo & word): Word(0), nCharset(0), | 140 fWordY(0.0f), |
| 154 fWordX(0.0f), fWordY(0.0f), fWordTail(0.0f), nFontIndex(-1), pWordProps(
NULL) | 141 fWordTail(0.0f), |
| 155 { | 142 nFontIndex(fontIndex), |
| 156 operator = (word); | 143 pWordProps(pProps) {} |
| 157 } | 144 virtual ~CPVT_WordInfo() { |
| 158 void operator = (const CPVT_WordInfo & word) | 145 if (pWordProps) { |
| 159 { | 146 delete pWordProps; |
| 160 if (this == &word) { | 147 } |
| 161 return; | 148 } |
| 162 } | 149 CPVT_WordInfo(const CPVT_WordInfo& word) |
| 163 this->Word = word.Word; | 150 : Word(0), |
| 164 this->nCharset = word.nCharset; | 151 nCharset(0), |
| 165 this->nFontIndex = word.nFontIndex; | 152 fWordX(0.0f), |
| 166 if (word.pWordProps) { | 153 fWordY(0.0f), |
| 167 if (pWordProps) { | 154 fWordTail(0.0f), |
| 168 *pWordProps = *word.pWordProps; | 155 nFontIndex(-1), |
| 169 } else { | 156 pWordProps(NULL) { |
| 170 pWordProps = FX_NEW CPVT_WordProps(*word.pWordProps); | 157 operator=(word); |
| 171 } | 158 } |
| 172 } | 159 void operator=(const CPVT_WordInfo& word) { |
| 173 } | 160 if (this == &word) { |
| 174 FX_WORD» » » » » » Word; | 161 return; |
| 175 FX_INT32» » » » » nCharset; | 162 } |
| 176 FX_FLOAT» » » » » fWordX; | 163 this->Word = word.Word; |
| 177 FX_FLOAT» » » » » fWordY; | 164 this->nCharset = word.nCharset; |
| 178 FX_FLOAT» » » » » fWordTail; | 165 this->nFontIndex = word.nFontIndex; |
| 179 FX_INT32» » » » » nFontIndex; | 166 if (word.pWordProps) { |
| 180 CPVT_WordProps*» » » » pWordProps; | 167 if (pWordProps) { |
| 168 *pWordProps = *word.pWordProps; |
| 169 } else { |
| 170 pWordProps = FX_NEW CPVT_WordProps(*word.pWordProps); |
| 171 } |
| 172 } |
| 173 } |
| 174 FX_WORD Word; |
| 175 FX_INT32 nCharset; |
| 176 FX_FLOAT fWordX; |
| 177 FX_FLOAT fWordY; |
| 178 FX_FLOAT fWordTail; |
| 179 FX_INT32 nFontIndex; |
| 180 CPVT_WordProps* pWordProps; |
| 181 }; | 181 }; |
| 182 struct CPVT_FloatRange { | 182 struct CPVT_FloatRange { |
| 183 CPVT_FloatRange() : fMin(0.0f), fMax(0.0f) | 183 CPVT_FloatRange() : fMin(0.0f), fMax(0.0f) {} |
| 184 { | 184 CPVT_FloatRange(FX_FLOAT min, FX_FLOAT max) : fMin(min), fMax(max) {} |
| 185 } | 185 FX_FLOAT Range() const { return fMax - fMin; } |
| 186 CPVT_FloatRange(FX_FLOAT min, FX_FLOAT max) : fMin(min), fMax(max) | 186 FX_FLOAT fMin, fMax; |
| 187 { | 187 }; |
| 188 } | 188 template <class TYPE> |
| 189 FX_FLOAT Range() const | 189 class CPVT_ArrayTemplate : public CFX_ArrayTemplate<TYPE> { |
| 190 { | 190 public: |
| 191 return fMax - fMin; | 191 FX_BOOL IsEmpty() { return CFX_ArrayTemplate<TYPE>::GetSize() <= 0; } |
| 192 } | 192 TYPE GetAt(int nIndex) const { |
| 193 FX_FLOAT fMin, fMax; | 193 if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) { |
| 194 }; | 194 return CFX_ArrayTemplate<TYPE>::GetAt(nIndex); |
| 195 template<class TYPE> class CPVT_ArrayTemplate : public CFX_ArrayTemplate<TYPE> | 195 } |
| 196 { | 196 return NULL; |
| 197 public: | 197 } |
| 198 FX_BOOL IsEmpty() | 198 void RemoveAt(int nIndex) { |
| 199 { | 199 if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) { |
| 200 return CFX_ArrayTemplate<TYPE>::GetSize() <= 0; | 200 CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex); |
| 201 } | 201 } |
| 202 TYPE GetAt(int nIndex) const | 202 } |
| 203 { | 203 }; |
| 204 if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) { | 204 class CLine : public CFX_Object { |
| 205 return CFX_ArrayTemplate<TYPE>::GetAt(nIndex); | 205 public: |
| 206 } | 206 CLine(); |
| 207 return NULL; | 207 virtual ~CLine(); |
| 208 } | 208 CPVT_WordPlace GetBeginWordPlace() const; |
| 209 void RemoveAt(int nIndex) | 209 CPVT_WordPlace GetEndWordPlace() const; |
| 210 { | 210 CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const; |
| 211 if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) { | 211 CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const; |
| 212 CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex); | 212 CPVT_WordPlace LinePlace; |
| 213 } | 213 CPVT_LineInfo m_LineInfo; |
| 214 } | 214 }; |
| 215 }; | 215 class CLines { |
| 216 class CLine : public CFX_Object | 216 public: |
| 217 { | 217 CLines() : m_nTotal(0) {} |
| 218 public: | 218 virtual ~CLines() { RemoveAll(); } |
| 219 CLine(); | 219 FX_INT32 GetSize() const { return m_Lines.GetSize(); } |
| 220 virtual ~CLine(); | 220 CLine* GetAt(FX_INT32 nIndex) const { return m_Lines.GetAt(nIndex); } |
| 221 CPVT_WordPlace GetBegin
WordPlace() const; | 221 void Empty() { m_nTotal = 0; } |
| 222 CPVT_WordPlace GetEndWo
rdPlace() const; | 222 void RemoveAll() { |
| 223 CPVT_WordPlace GetPrevW
ordPlace(const CPVT_WordPlace & place) const; | 223 for (FX_INT32 i = 0, sz = GetSize(); i < sz; i++) { |
| 224 CPVT_WordPlace GetNextW
ordPlace(const CPVT_WordPlace & place) const; | 224 delete GetAt(i); |
| 225 CPVT_WordPlace LinePlac
e; | 225 } |
| 226 CPVT_LineInfo m_LineIn
fo; | 226 m_Lines.RemoveAll(); |
| 227 }; | 227 m_nTotal = 0; |
| 228 class CLines | 228 } |
| 229 { | 229 FX_INT32 Add(const CPVT_LineInfo& lineinfo) { |
| 230 public: | 230 if (m_nTotal >= GetSize()) { |
| 231 CLines() : m_nTotal(0) {} | 231 if (CLine* pLine = FX_NEW CLine) { |
| 232 virtual ~CLines() | 232 pLine->m_LineInfo = lineinfo; |
| 233 { | 233 m_Lines.Add(pLine); |
| 234 RemoveAll(); | 234 return m_nTotal++; |
| 235 } | 235 } |
| 236 FX_INT32 GetSize(
) const | 236 return m_nTotal; |
| 237 { | 237 } else { |
| 238 return m_Lines.GetSize(); | 238 if (CLine* pLine = GetAt(m_nTotal)) { |
| 239 } | 239 pLine->m_LineInfo = lineinfo; |
| 240 CLine *
GetAt(FX_INT32 nIndex) const | 240 } |
| 241 { | 241 return m_nTotal++; |
| 242 return m_Lines.GetAt(nIndex); | 242 } |
| 243 } | 243 } |
| 244 void
Empty() | 244 void Clear() { |
| 245 { | 245 for (FX_INT32 i = GetSize() - 1; i >= m_nTotal; i--) { |
| 246 m_nTotal = 0; | 246 delete GetAt(i); |
| 247 } | 247 m_Lines.RemoveAt(i); |
| 248 void
RemoveAll() | 248 } |
| 249 { | 249 } |
| 250 for (FX_INT32 i = 0, sz = GetSize(); i < sz; i++) { | 250 |
| 251 delete GetAt(i); | 251 private: |
| 252 } | 252 CPVT_ArrayTemplate<CLine*> m_Lines; |
| 253 m_Lines.RemoveAll(); | 253 FX_INT32 m_nTotal; |
| 254 m_nTotal = 0; | 254 }; |
| 255 } | 255 class CSection : public CFX_Object { |
| 256 FX_INT32 Add(cons
t CPVT_LineInfo & lineinfo) | 256 friend class CTypeset; |
| 257 { | 257 |
| 258 if (m_nTotal >= GetSize()) { | 258 public: |
| 259 if (CLine * pLine = FX_NEW CLine) { | 259 CSection(CPDF_VariableText* pVT); |
| 260 pLine->m_LineInfo = lineinfo; | 260 virtual ~CSection(); |
| 261 m_Lines.Add(pLine); | 261 void ResetAll(); |
| 262 return m_nTotal++; | 262 void ResetLineArray(); |
| 263 } | 263 void ResetWordArray(); |
| 264 return m_nTotal; | 264 void ResetLinePlace(); |
| 265 } else { | 265 CPVT_WordPlace AddWord(const CPVT_WordPlace& place, |
| 266 if (CLine * pLine = GetAt(m_nTotal)) { | 266 const CPVT_WordInfo& wordinfo); |
| 267 pLine->m_LineInfo = lineinfo; | 267 CPVT_WordPlace AddLine(const CPVT_LineInfo& lineinfo); |
| 268 } | 268 void ClearWords(const CPVT_WordRange& PlaceRange); |
| 269 return m_nTotal++; | 269 void ClearWord(const CPVT_WordPlace& place); |
| 270 } | 270 CPVT_FloatRect Rearrange(); |
| 271 } | 271 CPVT_Size GetSectionSize(FX_FLOAT fFontSize); |
| 272 void
Clear() | 272 CPVT_WordPlace GetBeginWordPlace() const; |
| 273 { | 273 CPVT_WordPlace GetEndWordPlace() const; |
| 274 for (FX_INT32 i = GetSize() - 1; i >= m_nTotal; i--) { | 274 CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const; |
| 275 delete GetAt(i); | 275 CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const; |
| 276 m_Lines.RemoveAt(i); | 276 void UpdateWordPlace(CPVT_WordPlace& place) const; |
| 277 } | 277 CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const; |
| 278 } | 278 CPVT_WordPlace SearchWordPlace(FX_FLOAT fx, |
| 279 private: | 279 const CPVT_WordPlace& lineplace) const; |
| 280 CPVT_ArrayTemplate<CLine*> m_Lines; | 280 CPVT_WordPlace SearchWordPlace(FX_FLOAT fx, |
| 281 FX_INT32 m_nTotal
; | 281 const CPVT_WordRange& range) const; |
| 282 }; | 282 |
| 283 class CSection : public CFX_Object | 283 public: |
| 284 { | 284 CPVT_WordPlace SecPlace; |
| 285 friend class CTypeset; | 285 CPVT_SectionInfo m_SecInfo; |
| 286 public: | 286 CLines m_LineArray; |
| 287 CSection(CPDF_VariableText * pVT); | 287 CPVT_ArrayTemplate<CPVT_WordInfo*> m_WordArray; |
| 288 virtual ~CSection(); | 288 |
| 289 void
ResetAll(); | 289 private: |
| 290 void
ResetLineArray(); | 290 void ClearLeftWords(FX_INT32 nWordIndex); |
| 291 void
ResetWordArray(); | 291 void ClearRightWords(FX_INT32 nWordIndex); |
| 292 void
ResetLinePlace(); | 292 void ClearMidWords(FX_INT32 nBeginIndex, FX_INT32 nEndIndex); |
| 293 CPVT_WordPlace AddWord(
const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo); | 293 |
| 294 CPVT_WordPlace AddLine(
const CPVT_LineInfo & lineinfo); | 294 CPDF_VariableText* m_pVT; |
| 295 void
ClearWords(const CPVT_WordRange & PlaceRange); | 295 }; |
| 296 void
ClearWord(const CPVT_WordPlace & place); | 296 class CTypeset { |
| 297 CPVT_FloatRect Rearrang
e(); | 297 public: |
| 298 CPVT_Size GetSecti
onSize(FX_FLOAT fFontSize); | 298 CTypeset(CSection* pSection); |
| 299 CPVT_WordPlace GetBegin
WordPlace() const; | 299 virtual ~CTypeset(); |
| 300 CPVT_WordPlace GetEndWo
rdPlace() const; | 300 CPVT_Size GetEditSize(FX_FLOAT fFontSize); |
| 301 CPVT_WordPlace GetPrevW
ordPlace(const CPVT_WordPlace & place) const; | 301 CPVT_FloatRect Typeset(); |
| 302 CPVT_WordPlace GetNextW
ordPlace(const CPVT_WordPlace & place) const; | 302 CPVT_FloatRect CharArray(); |
| 303 void
UpdateWordPlace(CPVT_WordPlace & place) const; | 303 |
| 304 CPVT_WordPlace SearchWo
rdPlace(const CPDF_Point & point) const; | 304 private: |
| 305 CPVT_WordPlace SearchWo
rdPlace(FX_FLOAT fx, const CPVT_WordPlace & lineplace) const; | 305 void SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize); |
| 306 CPVT_WordPlace SearchWo
rdPlace(FX_FLOAT fx, const CPVT_WordRange & range) const; | 306 void OutputLines(); |
| 307 public: | 307 |
| 308 CPVT_WordPlace SecPlace
; | 308 CPVT_FloatRect m_rcRet; |
| 309 CPVT_SectionInfo m_SecInfo; | 309 CPDF_VariableText* m_pVT; |
| 310 CLines
m_LineArray; | 310 CSection* m_pSection; |
| 311 CPVT_ArrayTemplate<CPVT_WordInfo*> m_WordArray; | 311 }; |
| 312 private: | 312 class CPDF_EditContainer { |
| 313 void
ClearLeftWords(FX_INT32 nWordIndex); | 313 public: |
| 314 void
ClearRightWords(FX_INT32 nWordIndex); | 314 CPDF_EditContainer() : m_rcPlate(0, 0, 0, 0), m_rcContent(0, 0, 0, 0){}; |
| 315 void
ClearMidWords(FX_INT32 nBeginIndex, FX_INT32 nEndIndex); | 315 virtual ~CPDF_EditContainer(){}; |
| 316 | 316 virtual void SetPlateRect(const CPDF_Rect& rect) { m_rcPlate = rect; }; |
| 317 CPDF_VariableText *m_pVT; | 317 virtual const CPDF_Rect& GetPlateRect() const { return m_rcPlate; }; |
| 318 }; | 318 virtual void SetContentRect(const CPVT_FloatRect& rect) { |
| 319 class CTypeset | 319 m_rcContent = rect; |
| 320 { | 320 }; |
| 321 public: | 321 virtual CPDF_Rect GetContentRect() const { return m_rcContent; }; |
| 322 CTypeset(CSection * pSection); | 322 FX_FLOAT GetPlateWidth() const { return m_rcPlate.right - m_rcPlate.left; }; |
| 323 virtual ~CTypeset(); | 323 FX_FLOAT GetPlateHeight() const { return m_rcPlate.top - m_rcPlate.bottom; }; |
| 324 CPVT_Size GetEditS
ize(FX_FLOAT fFontSize); | 324 CPVT_Size GetPlateSize() const { |
| 325 CPVT_FloatRect Typeset(
); | 325 return CPVT_Size(GetPlateWidth(), GetPlateHeight()); |
| 326 CPVT_FloatRect CharArra
y(); | 326 }; |
| 327 private: | 327 CPDF_Point GetBTPoint() const { |
| 328 void
SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize); | 328 return CPDF_Point(m_rcPlate.left, m_rcPlate.top); |
| 329 void
OutputLines(); | 329 }; |
| 330 | 330 CPDF_Point GetETPoint() const { |
| 331 CPVT_FloatRect m_rcRet; | 331 return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom); |
| 332 CPDF_VariableText * m_pVT; | 332 }; |
| 333 CSection * m_pSec
tion; | 333 inline CPDF_Point InToOut(const CPDF_Point& point) const { |
| 334 }; | 334 return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y); |
| 335 class CPDF_EditContainer | 335 }; |
| 336 { | 336 inline CPDF_Point OutToIn(const CPDF_Point& point) const { |
| 337 public: | 337 return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y); |
| 338 CPDF_EditContainer(): m_rcPlate(0, 0, 0, 0), m_rcContent(0, 0, 0, 0) {}; | 338 }; |
| 339 virtual ~CPDF_EditContainer() {}; | 339 inline CPDF_Rect InToOut(const CPVT_FloatRect& rect) const { |
| 340 virtual void SetPlate
Rect(const CPDF_Rect & rect) | 340 CPDF_Point ptLeftTop = InToOut(CPDF_Point(rect.left, rect.top)); |
| 341 { | 341 CPDF_Point ptRightBottom = InToOut(CPDF_Point(rect.right, rect.bottom)); |
| 342 m_rcPlate = rect; | 342 return CPDF_Rect( |
| 343 }; | 343 ptLeftTop.x, ptRightBottom.y, ptRightBottom.x, ptLeftTop.y); |
| 344 virtual const CPDF_Rect & GetPlateRect() const | 344 }; |
| 345 { | 345 inline CPVT_FloatRect OutToIn(const CPDF_Rect& rect) const { |
| 346 return m_rcPlate; | 346 CPDF_Point ptLeftTop = OutToIn(CPDF_Point(rect.left, rect.top)); |
| 347 }; | 347 CPDF_Point ptRightBottom = OutToIn(CPDF_Point(rect.right, rect.bottom)); |
| 348 virtual void SetConte
ntRect(const CPVT_FloatRect & rect) | 348 return CPVT_FloatRect( |
| 349 { | 349 ptLeftTop.x, ptLeftTop.y, ptRightBottom.x, ptRightBottom.y); |
| 350 m_rcContent = rect; | 350 }; |
| 351 }; | 351 |
| 352 virtual CPDF_Rect GetContentRect()
const | 352 private: |
| 353 { | 353 CPDF_Rect m_rcPlate; |
| 354 return m_rcContent; | 354 CPVT_FloatRect m_rcContent; |
| 355 }; | 355 }; |
| 356 FX_FLOAT GetPlate
Width() const | 356 class CPDF_VariableText : public IPDF_VariableText, |
| 357 { | 357 public CFX_Object, |
| 358 return m_rcPlate.right - m_rcPlate.left; | 358 private CPDF_EditContainer { |
| 359 }; | 359 friend class CTypeset; |
| 360 FX_FLOAT GetPlate
Height() const | 360 friend class CSection; |
| 361 { | 361 friend class CPDF_VariableText_Iterator; |
| 362 return m_rcPlate.top - m_rcPlate.bottom; | 362 |
| 363 }; | 363 public: |
| 364 CPVT_Size GetPlate
Size() const | 364 CPDF_VariableText(); |
| 365 { | 365 virtual ~CPDF_VariableText(); |
| 366 return CPVT_Size(GetPlateWidth(), GetPlateHeight()); | 366 IPDF_VariableText_Provider* SetProvider( |
| 367 }; | 367 IPDF_VariableText_Provider* pProvider); |
| 368 CPDF_Point GetBTPoi
nt() const | 368 IPDF_VariableText_Iterator* GetIterator(); |
| 369 { | 369 void SetPlateRect(const CPDF_Rect& rect) { |
| 370 return CPDF_Point(m_rcPlate.left, m_rcPlate.top); | 370 CPDF_EditContainer::SetPlateRect(rect); |
| 371 }; | 371 } |
| 372 CPDF_Point GetETPoi
nt() const | 372 void SetAlignment(FX_INT32 nFormat = 0) { m_nAlignment = nFormat; } |
| 373 { | 373 void SetPasswordChar(FX_WORD wSubWord = '*') { m_wSubWord = wSubWord; } |
| 374 return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom); | 374 void SetLimitChar(FX_INT32 nLimitChar = 0) { m_nLimitChar = nLimitChar; } |
| 375 }; | 375 void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) { m_fCharSpace = fCharSpace; } |
| 376 inline CPDF_Point InToOut(const CP
DF_Point & point) const | 376 void SetHorzScale(FX_INT32 nHorzScale = 100) { m_nHorzScale = nHorzScale; } |
| 377 { | 377 void SetMultiLine(FX_BOOL bMultiLine = TRUE) { m_bMultiLine = bMultiLine; } |
| 378 return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y); | 378 void SetAutoReturn(FX_BOOL bAuto = TRUE) { m_bLimitWidth = bAuto; } |
| 379 }; | 379 void SetFontSize(FX_FLOAT fFontSize) { m_fFontSize = fFontSize; } |
| 380 inline CPDF_Point OutToIn(const CP
DF_Point & point) const | 380 void SetCharArray(FX_INT32 nCharArray = 0) { m_nCharArray = nCharArray; } |
| 381 { | 381 void SetAutoFontSize(FX_BOOL bAuto = TRUE) { m_bAutoFontSize = bAuto; } |
| 382 return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y); | 382 void SetRichText(FX_BOOL bRichText) { m_bRichText = bRichText; } |
| 383 }; | 383 void SetLineLeading(FX_FLOAT fLineLeading) { m_fLineLeading = fLineLeading; } |
| 384 inline CPDF_Rect InToOut(const CP
VT_FloatRect & rect) const | 384 void Initialize(); |
| 385 { | 385 FX_BOOL IsValid() const { return m_bInitial; } |
| 386 CPDF_Point ptLeftTop = InToOut(CPDF_Point(rect.left, rect.top)); | 386 FX_BOOL IsRichText() const { return m_bRichText; } |
| 387 CPDF_Point ptRightBottom = InToOut(CPDF_Point(rect.right, rect.bottom)); | 387 void RearrangeAll(); |
| 388 return CPDF_Rect(ptLeftTop.x, ptRightBottom.y, ptRightBottom.x, ptLeftTo
p.y); | 388 void RearrangePart(const CPVT_WordRange& PlaceRange); |
| 389 }; | 389 void ResetAll(); |
| 390 inline CPVT_FloatRect OutToIn(const CP
DF_Rect & rect) const | 390 void SetText(FX_LPCWSTR text, |
| 391 { | 391 FX_INT32 charset = 1, |
| 392 CPDF_Point ptLeftTop = OutToIn(CPDF_Point(rect.left, rect.top)); | 392 const CPVT_SecProps* pSecProps = NULL, |
| 393 CPDF_Point ptRightBottom = OutToIn(CPDF_Point(rect.right, rect.bottom)); | 393 const CPVT_WordProps* pWordProps = NULL); |
| 394 return CPVT_FloatRect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x, ptRight
Bottom.y); | 394 CPVT_WordPlace InsertWord(const CPVT_WordPlace& place, |
| 395 }; | 395 FX_WORD word, |
| 396 | 396 FX_INT32 charset = 1, |
| 397 private: | 397 const CPVT_WordProps* pWordProps = NULL); |
| 398 CPDF_Rect m_rcPlat
e; | 398 CPVT_WordPlace InsertSection(const CPVT_WordPlace& place, |
| 399 CPVT_FloatRect m_rcCont
ent; | 399 const CPVT_SecProps* pSecProps = NULL, |
| 400 }; | 400 const CPVT_WordProps* pWordProps = NULL); |
| 401 class CPDF_VariableText : public IPDF_VariableText, public CFX_Object, private C
PDF_EditContainer | 401 CPVT_WordPlace InsertText(const CPVT_WordPlace& place, |
| 402 { | 402 FX_LPCWSTR text, |
| 403 friend class CTypeset; | 403 FX_INT32 charset = 1, |
| 404 friend class CSection; | 404 const CPVT_SecProps* pSecProps = NULL, |
| 405 friend class CPDF_VariableText_Iterator; | 405 const CPVT_WordProps* pWordProps = NULL); |
| 406 public: | 406 CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange); |
| 407 CPDF_VariableText(); | 407 CPVT_WordPlace DeleteWord(const CPVT_WordPlace& place); |
| 408 virtual ~CPDF_VariableText(); | 408 CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace& place); |
| 409 IPDF_VariableText_Provider* SetProvider(IPDF_Variabl
eText_Provider * pProvider); | 409 const CPDF_Rect& GetPlateRect() const { |
| 410 IPDF_VariableText_Iterator* GetIterator(); | 410 return CPDF_EditContainer::GetPlateRect(); |
| 411 void
SetPlateRect(const CPDF_Rect & rect) | 411 } |
| 412 { | 412 CPDF_Rect GetContentRect() const; |
| 413 CPDF_EditContainer::SetPlateRect(rect); | 413 FX_INT32 GetTotalWords() const; |
| 414 } | 414 FX_FLOAT GetFontSize() const { return m_fFontSize; } |
| 415 void
SetAlignment(FX_INT32 nFormat = 0) | 415 FX_INT32 GetAlignment() const { return m_nAlignment; } |
| 416 { | 416 FX_INT32 GetCharArray() const { return m_nCharArray; } |
| 417 m_nAlignment = nFormat; | 417 FX_INT32 GetLimitChar() const { return m_nLimitChar; } |
| 418 } | 418 FX_BOOL IsMultiLine() const { return m_bMultiLine; } |
| 419 void
SetPasswordChar(FX_WORD wSubWord = '*') | 419 FX_INT32 GetHorzScale() const { return m_nHorzScale; } |
| 420 { | 420 FX_FLOAT GetCharSpace() const { return m_fCharSpace; } |
| 421 m_wSubWord = wSubWord; | 421 |
| 422 } | 422 CPVT_WordPlace GetBeginWordPlace() const; |
| 423 void
SetLimitChar(FX_INT32 nLimitChar = 0) | 423 CPVT_WordPlace GetEndWordPlace() const; |
| 424 { | 424 CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const; |
| 425 m_nLimitChar = nLimitChar; | 425 CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const; |
| 426 } | 426 CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const; |
| 427 void
SetCharSpace(FX_FLOAT fCharSpace = 0.0f) | 427 CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace& place, |
| 428 { | 428 const CPDF_Point& point) const; |
| 429 m_fCharSpace = fCharSpace; | 429 CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace& place, |
| 430 } | 430 const CPDF_Point& point) const; |
| 431 void
SetHorzScale(FX_INT32 nHorzScale = 100) | 431 CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const; |
| 432 { | 432 CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const; |
| 433 m_nHorzScale = nHorzScale; | 433 CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const; |
| 434 } | 434 CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const; |
| 435 void
SetMultiLine(FX_BOOL bMultiLine = TRUE) | 435 void UpdateWordPlace(CPVT_WordPlace& place) const; |
| 436 { | 436 FX_INT32 WordPlaceToWordIndex(const CPVT_WordPlace& place) const; |
| 437 m_bMultiLine = bMultiLine; | 437 CPVT_WordPlace WordIndexToWordPlace(FX_INT32 index) const; |
| 438 } | 438 FX_WORD GetPasswordChar() const { return GetSubWord(); } |
| 439 void
SetAutoReturn(FX_BOOL bAuto = TRUE) | 439 FX_WORD GetSubWord() const { return m_wSubWord; } |
| 440 { | 440 |
| 441 m_bLimitWidth = bAuto; | 441 private: |
| 442 } | 442 FX_INT32 GetCharWidth(FX_INT32 nFontIndex, |
| 443 void
SetFontSize(FX_FLOAT fFontSize) | 443 FX_WORD Word, |
| 444 { | 444 FX_WORD SubWord, |
| 445 m_fFontSize = fFontSize; | 445 FX_INT32 nWordStyle); |
| 446 } | 446 FX_INT32 GetTypeAscent(FX_INT32 nFontIndex); |
| 447 void
SetCharArray(FX_INT32 nCharArray = 0) | 447 FX_INT32 GetTypeDescent(FX_INT32 nFontIndex); |
| 448 { | 448 FX_INT32 GetWordFontIndex(FX_WORD word, |
| 449 m_nCharArray = nCharArray; | 449 FX_INT32 charset, |
| 450 } | 450 FX_INT32 nFontIndex); |
| 451 void
SetAutoFontSize(FX_BOOL bAuto = TRUE) | 451 FX_INT32 GetDefaultFontIndex(); |
| 452 { | 452 FX_BOOL IsLatinWord(FX_WORD word); |
| 453 m_bAutoFontSize = bAuto; | 453 |
| 454 } | 454 private: |
| 455 void
SetRichText(FX_BOOL bRichText) | 455 CPVT_WordPlace AddSection(const CPVT_WordPlace& place, |
| 456 { | 456 const CPVT_SectionInfo& secinfo); |
| 457 m_bRichText = bRichText; | 457 CPVT_WordPlace AddLine(const CPVT_WordPlace& place, |
| 458 } | 458 const CPVT_LineInfo& lineinfo); |
| 459 void
SetLineLeading(FX_FLOAT fLineLeading) | 459 CPVT_WordPlace AddWord(const CPVT_WordPlace& place, |
| 460 { | 460 const CPVT_WordInfo& wordinfo); |
| 461 m_fLineLeading = fLineLeading; | 461 FX_BOOL GetWordInfo(const CPVT_WordPlace& place, CPVT_WordInfo& wordinfo); |
| 462 } | 462 FX_BOOL SetWordInfo(const CPVT_WordPlace& place, |
| 463 void
Initialize(); | 463 const CPVT_WordInfo& wordinfo); |
| 464 FX_BOOL
IsValid() const | 464 FX_BOOL GetLineInfo(const CPVT_WordPlace& place, CPVT_LineInfo& lineinfo); |
| 465 { | 465 FX_BOOL GetSectionInfo(const CPVT_WordPlace& place, |
| 466 return m_bInitial; | 466 CPVT_SectionInfo& secinfo); |
| 467 } | 467 FX_FLOAT GetWordFontSize(const CPVT_WordInfo& WordInfo, |
| 468 FX_BOOL
IsRichText() const | 468 FX_BOOL bFactFontSize = FALSE); |
| 469 { | 469 FX_FLOAT GetWordWidth(FX_INT32 nFontIndex, |
| 470 return m_bRichText; | 470 FX_WORD Word, |
| 471 } | 471 FX_WORD SubWord, |
| 472 void
RearrangeAll(); | 472 FX_FLOAT fCharSpace, |
| 473 void
RearrangePart(const CPVT_WordRange & PlaceRange); | 473 FX_INT32 nHorzScale, |
| 474 void
ResetAll(); | 474 FX_FLOAT fFontSize, |
| 475 void
SetText(FX_LPCWSTR text, FX_INT32 charset = 1, const CPVT_SecProps * pSecProps =
NULL, | 475 FX_FLOAT fWordTail, |
| 476 const CPVT_WordProps * pWordProps = NULL); | 476 FX_INT32 nWordStyle); |
| 477 CPVT_WordPlace InsertWo
rd(const CPVT_WordPlace & place, FX_WORD word, FX_INT32 charset = 1, | 477 FX_FLOAT GetWordWidth(const CPVT_WordInfo& WordInfo); |
| 478 const CPVT_WordProps * pWordProps = NULL); | 478 FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize); |
| 479 CPVT_WordPlace InsertSe
ction(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps = NULL, | 479 FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize); |
| 480 const CPVT_WordProps * pWordProps = NULL); | 480 FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo, |
| 481 CPVT_WordPlace InsertTe
xt(const CPVT_WordPlace & place, FX_LPCWSTR text, FX_INT32 charset = 1, | 481 FX_BOOL bFactFontSize = FALSE); |
| 482 const CPVT_SecProps * pSecProps = NULL, const CPVT_WordProps * p
WordProps = NULL); | 482 FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo, |
| 483 CPVT_WordPlace DeleteWo
rds(const CPVT_WordRange & PlaceRange); | 483 FX_BOOL bFactFontSize = FALSE); |
| 484 CPVT_WordPlace DeleteWo
rd(const CPVT_WordPlace & place); | 484 FX_FLOAT GetLineAscent(const CPVT_SectionInfo& SecInfo); |
| 485 CPVT_WordPlace BackSpac
eWord(const CPVT_WordPlace & place); | 485 FX_FLOAT GetLineDescent(const CPVT_SectionInfo& SecInfo); |
| 486 const CPDF_Rect & GetPlateRect() c
onst | 486 FX_FLOAT GetFontAscent(FX_INT32 nFontIndex, FX_FLOAT fFontSize); |
| 487 { | 487 FX_FLOAT GetFontDescent(FX_INT32 nFontIndex, FX_FLOAT fFontSize); |
| 488 return CPDF_EditContainer::GetPlateRect(); | 488 FX_INT32 GetWordFontIndex(const CPVT_WordInfo& WordInfo); |
| 489 } | 489 FX_FLOAT GetCharSpace(const CPVT_WordInfo& WordInfo); |
| 490 CPDF_Rect GetConte
ntRect() const; | 490 FX_INT32 GetHorzScale(const CPVT_WordInfo& WordInfo); |
| 491 FX_INT32 GetTotal
Words() const; | 491 FX_FLOAT GetLineLeading(const CPVT_SectionInfo& SecInfo); |
| 492 FX_FLOAT GetFontS
ize() const | 492 FX_FLOAT GetLineIndent(const CPVT_SectionInfo& SecInfo); |
| 493 { | 493 FX_INT32 GetAlignment(const CPVT_SectionInfo& SecInfo); |
| 494 return m_fFontSize; | 494 |
| 495 } | 495 void ClearSectionRightWords(const CPVT_WordPlace& place); |
| 496 FX_INT32 GetAlign
ment() const | 496 CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace& place, |
| 497 { | 497 FX_BOOL bPrevOrNext) const; |
| 498 return m_nAlignment; | 498 FX_BOOL ClearEmptySection(const CPVT_WordPlace& place); |
| 499 } | 499 void ClearEmptySections(const CPVT_WordRange& PlaceRange); |
| 500 FX_INT32 GetCharA
rray() const | 500 void LinkLatterSection(const CPVT_WordPlace& place); |
| 501 { | 501 void ClearWords(const CPVT_WordRange& PlaceRange); |
| 502 return m_nCharArray; | 502 CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace& place); |
| 503 } | 503 CPVT_WordPlace ClearRightWord(const CPVT_WordPlace& place); |
| 504 FX_INT32 GetLimit
Char() const | 504 |
| 505 { | 505 private: |
| 506 return m_nLimitChar; | 506 CPVT_FloatRect Rearrange(const CPVT_WordRange& PlaceRange); |
| 507 } | 507 FX_FLOAT GetAutoFontSize(); |
| 508 FX_BOOL
IsMultiLine() const | 508 FX_BOOL IsBigger(FX_FLOAT fFontSize); |
| 509 { | 509 CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange); |
| 510 return m_bMultiLine; | 510 |
| 511 } | 511 private: |
| 512 FX_INT32 GetHorzS
cale() const | 512 void ResetSectionArray(); |
| 513 { | 513 |
| 514 return m_nHorzScale; | 514 private: |
| 515 } | 515 CPVT_ArrayTemplate<CSection*> m_SectionArray; |
| 516 FX_FLOAT GetCharS
pace() const | 516 FX_INT32 m_nLimitChar; |
| 517 { | 517 FX_INT32 m_nCharArray; |
| 518 return m_fCharSpace; | 518 FX_BOOL m_bMultiLine; |
| 519 } | 519 FX_BOOL m_bLimitWidth; |
| 520 | 520 FX_BOOL m_bAutoFontSize; |
| 521 CPVT_WordPlace GetBegin
WordPlace() const; | 521 FX_INT32 m_nAlignment; |
| 522 CPVT_WordPlace GetEndWo
rdPlace() const; | 522 FX_FLOAT m_fLineLeading; |
| 523 CPVT_WordPlace GetPrevW
ordPlace(const CPVT_WordPlace & place) const; | 523 FX_FLOAT m_fCharSpace; |
| 524 CPVT_WordPlace GetNextW
ordPlace(const CPVT_WordPlace & place) const; | 524 FX_INT32 m_nHorzScale; |
| 525 CPVT_WordPlace SearchWo
rdPlace(const CPDF_Point & point) const; | 525 FX_WORD m_wSubWord; |
| 526 CPVT_WordPlace GetUpWor
dPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const; | 526 FX_FLOAT m_fFontSize; |
| 527 CPVT_WordPlace GetDownW
ordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const; | 527 |
| 528 CPVT_WordPlace GetLineB
eginPlace(const CPVT_WordPlace & place) const; | 528 private: |
| 529 CPVT_WordPlace GetLineE
ndPlace(const CPVT_WordPlace & place) const; | 529 FX_BOOL m_bInitial; |
| 530 CPVT_WordPlace GetSecti
onBeginPlace(const CPVT_WordPlace & place) const; | 530 FX_BOOL m_bRichText; |
| 531 CPVT_WordPlace GetSecti
onEndPlace(const CPVT_WordPlace & place) const; | 531 IPDF_VariableText_Provider* m_pVTProvider; |
| 532 void
UpdateWordPlace(CPVT_WordPlace & place) const; | 532 CPDF_VariableText_Iterator* m_pVTIterator; |
| 533 FX_INT32 WordPlac
eToWordIndex(const CPVT_WordPlace & place) const; | 533 }; |
| 534 CPVT_WordPlace WordInde
xToWordPlace(FX_INT32 index) const; | 534 class CPDF_VariableText_Iterator : public IPDF_VariableText_Iterator, |
| 535 FX_WORD
GetPasswordChar() const | 535 public CFX_Object { |
| 536 { | 536 public: |
| 537 return GetSubWord(); | 537 CPDF_VariableText_Iterator(CPDF_VariableText* pVT); |
| 538 } | 538 virtual ~CPDF_VariableText_Iterator(); |
| 539 FX_WORD
GetSubWord() const | 539 FX_BOOL NextWord(); |
| 540 { | 540 FX_BOOL PrevWord(); |
| 541 return m_wSubWord; | 541 FX_BOOL NextLine(); |
| 542 } | 542 FX_BOOL PrevLine(); |
| 543 private: | 543 FX_BOOL NextSection(); |
| 544 FX_INT32 GetCharW
idth(FX_INT32 nFontIndex, FX_WORD Word, FX_WORD SubWord, FX_INT32 nWordStyle); | 544 FX_BOOL PrevSection(); |
| 545 FX_INT32 GetTypeA
scent(FX_INT32 nFontIndex); | 545 FX_BOOL SetWord(const CPVT_Word& word); |
| 546 FX_INT32 GetTypeD
escent(FX_INT32 nFontIndex); | 546 FX_BOOL GetWord(CPVT_Word& word) const; |
| 547 FX_INT32 GetWordF
ontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex); | 547 FX_BOOL GetLine(CPVT_Line& line) const; |
| 548 FX_INT32 GetDefau
ltFontIndex(); | 548 FX_BOOL GetSection(CPVT_Section& section) const; |
| 549 FX_BOOL
IsLatinWord(FX_WORD word); | 549 FX_BOOL SetSection(const CPVT_Section& section); |
| 550 private: | 550 void SetAt(FX_INT32 nWordIndex); |
| 551 | 551 void SetAt(const CPVT_WordPlace& place); |
| 552 CPVT_WordPlace AddSecti
on(const CPVT_WordPlace & place, const CPVT_SectionInfo & secinfo); | 552 const CPVT_WordPlace& GetAt() const { return m_CurPos; }; |
| 553 CPVT_WordPlace AddLine(
const CPVT_WordPlace & place, const CPVT_LineInfo & lineinfo); | 553 |
| 554 CPVT_WordPlace AddWord(
const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo); | 554 private: |
| 555 FX_BOOL
GetWordInfo(const CPVT_WordPlace & place, CPVT_WordInfo & wordinfo); | 555 CPVT_WordPlace m_CurPos; |
| 556 FX_BOOL
SetWordInfo(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo); | 556 CPDF_VariableText* m_pVT; |
| 557 FX_BOOL
GetLineInfo(const CPVT_WordPlace & place, CPVT_LineInfo & lineinfo); | 557 }; |
| 558 FX_BOOL
GetSectionInfo(const CPVT_WordPlace & place, CPVT_SectionInfo & secinfo); | |
| 559 FX_FLOAT GetWordF
ontSize(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE); | |
| 560 FX_FLOAT GetWordW
idth(FX_INT32 nFontIndex, FX_WORD Word, FX_WORD SubWord, | |
| 561 FX_FLOAT fCharSpace, FX_INT32 nHorzScale, | |
| 562 FX_FLOAT fFontSize, FX_FLOAT fWordTail, FX_INT32 nWordStyle); | |
| 563 FX_FLOAT GetWordW
idth(const CPVT_WordInfo & WordInfo); | |
| 564 FX_FLOAT GetWordA
scent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize); | |
| 565 FX_FLOAT GetWordD
escent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize); | |
| 566 FX_FLOAT GetWordA
scent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE); | |
| 567 FX_FLOAT GetWordD
escent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE); | |
| 568 FX_FLOAT GetLineA
scent(const CPVT_SectionInfo & SecInfo); | |
| 569 FX_FLOAT GetLineD
escent(const CPVT_SectionInfo & SecInfo); | |
| 570 FX_FLOAT GetFontA
scent(FX_INT32 nFontIndex, FX_FLOAT fFontSize); | |
| 571 FX_FLOAT GetFontD
escent(FX_INT32 nFontIndex, FX_FLOAT fFontSize); | |
| 572 FX_INT32 GetWordF
ontIndex(const CPVT_WordInfo & WordInfo); | |
| 573 FX_FLOAT GetCharS
pace(const CPVT_WordInfo & WordInfo); | |
| 574 FX_INT32 GetHorzS
cale(const CPVT_WordInfo & WordInfo); | |
| 575 FX_FLOAT GetLineL
eading(const CPVT_SectionInfo & SecInfo); | |
| 576 FX_FLOAT GetLineI
ndent(const CPVT_SectionInfo & SecInfo); | |
| 577 FX_INT32 GetAlign
ment(const CPVT_SectionInfo& SecInfo); | |
| 578 | |
| 579 void
ClearSectionRightWords(const CPVT_WordPlace & place); | |
| 580 CPVT_WordPlace AjustLin
eHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const; | |
| 581 FX_BOOL
ClearEmptySection(const CPVT_WordPlace & place); | |
| 582 void
ClearEmptySections(const CPVT_WordRange & PlaceRange); | |
| 583 void
LinkLatterSection(const CPVT_WordPlace & place); | |
| 584 void
ClearWords(const CPVT_WordRange & PlaceRange); | |
| 585 CPVT_WordPlace ClearLef
tWord(const CPVT_WordPlace & place); | |
| 586 CPVT_WordPlace ClearRig
htWord(const CPVT_WordPlace & place); | |
| 587 private: | |
| 588 CPVT_FloatRect Rearrang
e(const CPVT_WordRange & PlaceRange); | |
| 589 FX_FLOAT GetAutoF
ontSize(); | |
| 590 FX_BOOL
IsBigger(FX_FLOAT fFontSize); | |
| 591 CPVT_FloatRect Rearrang
eSections(const CPVT_WordRange & PlaceRange); | |
| 592 private: | |
| 593 void
ResetSectionArray(); | |
| 594 private: | |
| 595 CPVT_ArrayTemplate<CSection*> m_SectionArray; | |
| 596 FX_INT32 m_nLimit
Char; | |
| 597 FX_INT32 m_nCharA
rray; | |
| 598 FX_BOOL
m_bMultiLine; | |
| 599 FX_BOOL
m_bLimitWidth; | |
| 600 FX_BOOL
m_bAutoFontSize; | |
| 601 FX_INT32 m_nAlign
ment; | |
| 602 FX_FLOAT m_fLineL
eading; | |
| 603 FX_FLOAT m_fCharS
pace; | |
| 604 FX_INT32 m_nHorzS
cale; | |
| 605 FX_WORD
m_wSubWord; | |
| 606 FX_FLOAT m_fFontS
ize; | |
| 607 | |
| 608 private: | |
| 609 FX_BOOL
m_bInitial; | |
| 610 FX_BOOL
m_bRichText; | |
| 611 IPDF_VariableText_Provider * m_pVTProvider; | |
| 612 CPDF_VariableText_Iterator * m_pVTIterator; | |
| 613 }; | |
| 614 class CPDF_VariableText_Iterator : public IPDF_VariableText_Iterator, public CFX
_Object | |
| 615 { | |
| 616 public: | |
| 617 CPDF_VariableText_Iterator(CPDF_VariableText * pVT); | |
| 618 virtual ~CPDF_VariableText_Iterator(); | |
| 619 FX_BOOL
NextWord(); | |
| 620 FX_BOOL
PrevWord(); | |
| 621 FX_BOOL
NextLine(); | |
| 622 FX_BOOL
PrevLine(); | |
| 623 FX_BOOL
NextSection(); | |
| 624 FX_BOOL
PrevSection(); | |
| 625 FX_BOOL
SetWord(const CPVT_Word & word); | |
| 626 FX_BOOL
GetWord(CPVT_Word & word) const; | |
| 627 FX_BOOL
GetLine(CPVT_Line & line) const; | |
| 628 FX_BOOL
GetSection(CPVT_Section & section) const; | |
| 629 FX_BOOL
SetSection(const CPVT_Section & section); | |
| 630 void
SetAt(FX_INT32 nWordIndex); | |
| 631 void
SetAt(const CPVT_WordPlace & place); | |
| 632 const CPVT_WordPlace & GetAt() const | |
| 633 { | |
| 634 return m_CurPos; | |
| 635 }; | |
| 636 private: | |
| 637 CPVT_WordPlace m_CurPos
; | |
| 638 CPDF_VariableText * m_pVT; | |
| 639 }; | |
| OLD | NEW |