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