1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_INCLUDE_FPDFDOC_FPDF_VT_H_ 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_INCLUDE_FPDFDOC_FPDF_VT_H_ 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../fpdfapi/fpdf_parser.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../fxcrt/fx_basic.h" 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../fxge/fx_dib.h" 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText; 15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText_Iterator; 16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText_Provider; 17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Line; 18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Section; 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Word; 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_WordPlace; 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_WordRange; 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_WordPlace { 24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace() : nSecIndex(-1), nLineIndex(-1), nWordIndex(-1) 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace(FX_INT32 nSecIndex, FX_INT32 nLineIndex, FX_INT32 nWordIndex) 30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->nSecIndex = nSecIndex; 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->nLineIndex = nLineIndex; 33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->nWordIndex = nWordIndex; 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void Default() 37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nSecIndex = nLineIndex = nWordIndex = -1; 39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL operator == (const CPVT_WordPlace & wp) const 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return wp.nSecIndex == this->nSecIndex && wp.nLineIndex == this->nLineIndex && wp.nWordIndex == this->nWordIndex; 44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL operator != (const CPVT_WordPlace & wp) const 47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return wp.nSecIndex != this->nSecIndex || wp.nLineIndex != this->nLineIndex || wp.nWordIndex != this->nWordIndex; 49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov inline FX_INT32 WordCmp(const CPVT_WordPlace & wp) const 52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex > wp.nSecIndex) { 54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex < wp.nSecIndex) { 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nLineIndex > wp.nLineIndex) { 60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nLineIndex < wp.nLineIndex) { 63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nWordIndex > wp.nWordIndex) { 66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nWordIndex < wp.nWordIndex) { 69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov inline FX_INT32 LineCmp(const CPVT_WordPlace & wp) const 75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex > wp.nSecIndex) { 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex < wp.nSecIndex) { 80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nLineIndex > wp.nLineIndex) { 83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nLineIndex < wp.nLineIndex) { 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov inline FX_INT32 SecCmp(const CPVT_WordPlace & wp) const 92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex > wp.nSecIndex) { 94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->nSecIndex < wp.nSecIndex) { 97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nSecIndex; 103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nLineIndex; 105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nWordIndex; 107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_WordRange { 109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange() 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange(const CPVT_WordPlace & begin, const CPVT_WordPlace & end) 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Set(begin, end); 117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void Default() 120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov BeginPos.Default(); 122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov EndPos.Default(); 123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void Set(const CPVT_WordPlace & begin, const CPVT_WordPlace & end) 126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->BeginPos = begin; 128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->EndPos = end; 129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SwapWordPlace(); 130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetBeginPos(const CPVT_WordPlace & begin) 133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->BeginPos = begin; 135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SwapWordPlace(); 136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetEndPos(const CPVT_WordPlace & end) 139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->EndPos = end; 141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SwapWordPlace(); 142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL IsExist() const 145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return this->BeginPos != this->EndPos; 147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL operator != (const CPVT_WordRange & wr) const 150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return wr.BeginPos != this->BeginPos || wr.EndPos != this->EndPos; 152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SwapWordPlace() 155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (BeginPos.WordCmp(EndPos) > 0) { 157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace place = EndPos; 158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov EndPos = BeginPos; 159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov BeginPos = place; 160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace BeginPos; 164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace EndPos; 166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_SecProps { 168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_SecProps() : fLineLeading(0.0f), fLineIndent(0.0f), nAlignment(0) 170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_SecProps(FX_FLOAT lineLeading, FX_FLOAT lineIndent, FX_INT32 alignment) : 174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fLineLeading(lineLeading), fLineIndent(lineIndent), nAlignment(alignment) 175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_SecProps(const CPVT_SecProps & other) : 179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fLineLeading(other.fLineLeading), fLineIndent(other.fLineIndent), nAlignment(other.nAlignment) 180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fLineLeading; 184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fLineIndent; 186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nAlignment; 188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_WordProps { 190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordProps() : nFontIndex(-1), fFontSize(0.0f), dwWordColor(0), nScriptType(0), nWordStyle(0), 192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fCharSpace(0.0f), nHorzScale(0) 193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordProps(FX_INT32 fontIndex, FX_FLOAT fontSize, FX_COLORREF wordColor = 0, FX_INT32 scriptType = 0, FX_INT32 wordStyle = 0, 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT charSpace = 0, FX_INT32 horzScale = 100) : 198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nFontIndex(fontIndex), fFontSize(fontSize), dwWordColor(wordColor), nScriptType(scriptType), 199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nWordStyle(wordStyle), fCharSpace(charSpace), nHorzScale(horzScale) 200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordProps(const CPVT_WordProps & other) : 204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nFontIndex(other.nFontIndex), fFontSize(other.fFontSize), dwWordColor(other.dwWordColor), 205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nScriptType(other.nScriptType), nWordStyle(other.nWordStyle), fCharSpace(other.fCharSpace), 206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nHorzScale(other.nHorzScale) 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nFontIndex; 211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fFontSize; 213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_COLORREF dwWordColor; 215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nScriptType; 217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nWordStyle; 219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fCharSpace; 221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nHorzScale; 223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Word { 225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Word() : Word(0), nCharset(0), ptWord(0, 0), fAscent(0.0f), fDescent(0.0f), fWidth(0.0f), 227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFontSize(0), WordProps() 228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_WORD Word; 232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nCharset; 234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace WordPlace; 236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point ptWord; 238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fAscent; 240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fDescent; 242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fWidth; 244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nFontIndex; 246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fFontSize; 248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordProps WordProps; 250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Line { 252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Line() : ptLine(0, 0), fLineWidth(0.0f), fLineAscent(0.0f), fLineDescent(0.0f) 254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace lineplace; 258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace lineEnd; 260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point ptLine; 262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fLineWidth; 264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fLineAscent; 266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fLineDescent; 268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPVT_Section { 270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace secplace; 272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcSection; 274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_SecProps SecProps; 276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordProps WordProps; 278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText_Provider 280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual ~IPDF_VariableText_Provider() { } 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle) = 0; 285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetTypeAscent(FX_INT32 nFontIndex) = 0; 287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetTypeDescent(FX_INT32 nFontIndex) = 0; 289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex) = 0; 291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL IsLatinWord(FX_WORD word) = 0; 293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetDefaultFontIndex() = 0; 295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText_Iterator 297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual ~IPDF_VariableText_Iterator() { } 300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL NextWord() = 0; 302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL PrevWord() = 0; 304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL NextLine() = 0; 306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL PrevLine() = 0; 308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL NextSection() = 0; 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL PrevSection() = 0; 312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL GetWord(CPVT_Word & word) const = 0; 314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL SetWord(const CPVT_Word & word) = 0; 316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL GetLine(CPVT_Line & line) const = 0; 318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL GetSection(CPVT_Section & section) const = 0; 320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL SetSection(const CPVT_Section & section) = 0; 322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetAt(FX_INT32 nWordIndex) = 0; 324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetAt(const CPVT_WordPlace & place) = 0; 326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual const CPVT_WordPlace & GetAt() const = 0; 328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPDF_VariableText 330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov static IPDF_VariableText* NewVariableText(); 333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov static void DelVariableText(IPDF_VariableText* pVT); 335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual IPDF_VariableText_Provider* SetProvider(IPDF_VariableText_Provider * pProvider) = 0; 337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual IPDF_VariableText_Iterator* GetIterator() = 0; 339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetPlateRect(const CPDF_Rect & rect) = 0; 341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetAlignment(FX_INT32 nFormat = 0) = 0; 343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetPasswordChar(FX_WORD wSubWord = '*') = 0; 345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetLimitChar(FX_INT32 nLimitChar = 0) = 0; 347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetCharArray(FX_INT32 nCharArray = 0) = 0; 349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) = 0; 351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetHorzScale(FX_INT32 nHorzScale = 100) = 0; 353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE) = 0; 355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetAutoReturn(FX_BOOL bAuto = TRUE) = 0; 357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE) = 0; 359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetFontSize(FX_FLOAT fFontSize) = 0; 361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetLineLeading(FX_FLOAT fLineLeading) = 0; 363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetRichText(FX_BOOL bRichText) = 0; 365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void Initialize() = 0; 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL IsValid() const = 0; 369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL IsRichText() const = 0; 371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void RearrangeAll() = 0; 373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void RearrangePart(const CPVT_WordRange & PlaceRange) = 0; 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void ResetAll() = 0; 377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetText(FX_LPCWSTR text, FX_INT32 charset = 1, const CPVT_SecProps * pSecProps = NULL, 379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPVT_WordProps * pWordProps = NULL) = 0; 380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace InsertWord(const CPVT_WordPlace & place, FX_WORD word, FX_INT32 charset = 1, 382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPVT_WordProps * pWordProps = NULL) = 0; 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace InsertSection(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps = NULL, 385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPVT_WordProps * pWordProps = NULL) = 0; 386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace InsertText(const CPVT_WordPlace & place, FX_LPCWSTR text, FX_INT32 charset = 1, 388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPVT_SecProps * pSecProps = NULL, const CPVT_WordProps * pWordProps = NULL) = 0; 389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace DeleteWords(const CPVT_WordRange & PlaceRange) = 0; 391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace DeleteWord(const CPVT_WordPlace & place) = 0; 393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace & place) = 0; 395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual const CPDF_Rect & GetPlateRect() const = 0; 397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPDF_Rect GetContentRect() const = 0; 399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetTotalWords() const = 0; 401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_FLOAT GetFontSize() const = 0; 403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetAlignment() const = 0; 405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_WORD GetPasswordChar() const = 0; 407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetCharArray() const = 0; 409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetLimitChar() const = 0; 411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL IsMultiLine() const = 0; 413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 GetHorzScale() const = 0; 415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_FLOAT GetCharSpace() const = 0; 417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetBeginWordPlace() const = 0; 419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetEndWordPlace() const = 0; 421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const = 0; 423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const = 0; 425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point & point) const = 0; 427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0; 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0; 431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const = 0; 433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const = 0; 435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0; 437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const = 0; 439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void UpdateWordPlace(CPVT_WordPlace & place) const = 0; 441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const = 0; 443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_INT32 WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0; 445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPVT_WordPlace WordIndexToWordPlace(FX_INT32 index) const = 0; 447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected: 449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ~IPDF_VariableText() { } 450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif // CORE_INCLUDE_FPDFDOC_FPDF_VT_H_ 453