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