1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _FX_TEXTBREAK
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FX_TEXTBREAK
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_ucd.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_Font;
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_Char;
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_TxtAccess;
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_TxtChar;
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_TxtPiece;
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_TxtBreak;
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAKPOLICY_None 0x00
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAKPOLICY_Pagination 0x01
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAKPOLICY_SpaceBreak 0x02
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAKPOLICY_NumberBreak 0x04
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_None 0x00
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_PieceBreak 0x01
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_LineBreak 0x02
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_ParagraphBreak 0x03
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_PageBreak 0x04
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_ControlChar 0x10
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_BreakChar 0x20
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_UnknownChar 0x40
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_RemoveChar 0x80
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_MutipleFormat 0x0001
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_VerticalLayout 0x0002
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_VerticalChars 0x0004
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_ReverseLine 0x0008
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_ArabicContext 0x0010
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_ArabicShapes 0x0020
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_RTLReadingOrder 0x0040
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_ExpandTab 0x0100
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_SingleLine 0x0200
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLAYOUTSTYLE_CombText 0x0400
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_Alignment 0x000F
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_ArabicNumber 0x0010
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_ArabicShadda 0x0020
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_OddBidiLevel 0x0040
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_RTLReadingOrder 0x0080
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_ArabicContext 0x0300
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_ArabicIndic 0x0400
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTCHARSTYLE_ArabicComma 0x0800
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_Left 0
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_Center 1
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_Right 2
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_Justified (1 << 2)
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_Distributed (2 << 2)
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_JustifiedLeft \
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Left | FX_TXTLINEALIGNMENT_Justified)
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_JustifiedCenter \
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Center | FX_TXTLINEALIGNMENT_Justified)
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_JustifiedRight \
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Right | FX_TXTLINEALIGNMENT_Justified)
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_DistributedLeft \
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Left | FX_TXTLINEALIGNMENT_Distributed)
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_DistributedCenter \
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Center | FX_TXTLINEALIGNMENT_Distributed)
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_DistributedRight \
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (FX_TXTLINEALIGNMENT_Right | FX_TXTLINEALIGNMENT_Distributed)
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_LowerMask 0x03
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTLINEALIGNMENT_HigherMask 0x0C
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_TXTBREAK_MinimumTabWidth 160000
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_TxtAccess {
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~IFX_TxtAccess() {}
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetChar(void* pIdentity, int32_t index) const = 0;
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetWidth(void* pIdentity, int32_t index) const = 0;
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_TXTRUN {
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  _FX_TXTRUN() {
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pAccess = NULL;
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pIdentity = NULL;
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pStr = NULL;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pWidths = NULL;
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iLength = 0;
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pFont = NULL;
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fFontSize = 12;
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    dwStyles = 0;
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iHorizontalScale = 100;
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iVerticalScale = 100;
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iCharRotation = 0;
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    dwCharStyles = 0;
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pRect = NULL;
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    wLineBreakChar = L'\n';
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bSkipSpace = TRUE;
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IFX_TxtAccess* pAccess;
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* pIdentity;
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const FX_WCHAR* pStr;
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t* pWidths;
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iLength;
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IFX_Font* pFont;
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fFontSize;
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD dwStyles;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iHorizontalScale;
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iVerticalScale;
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iCharRotation;
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD dwCharStyles;
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_LPCRECTF pRect;
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wLineBreakChar;
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bSkipSpace;
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_TXTRUN, *FX_LPTXTRUN;
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef FX_TXTRUN const* FX_LPCTXTRUN;
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_TxtPiece : public CFX_Target {
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_TxtPiece()
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      : m_dwStatus(FX_TXTBREAK_PieceBreak),
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iStartPos(0),
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iWidth(-1),
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iStartChar(0),
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iChars(0),
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iBidiLevel(0),
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iBidiPos(0),
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iHorizontalScale(100),
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_iVerticalScale(100),
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_dwCharStyles(0),
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pChars(NULL),
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pUserData(NULL) {}
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetEndPos() const {
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth;
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetLength() const { return m_iChars; }
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetEndChar() const { return m_iStartChar + m_iChars; }
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_TxtChar* GetCharPtr(int32_t index) const {
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FXSYS_assert(index > -1 && index < m_iChars && m_pChars != NULL);
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_pChars->GetDataPtr(m_iStartChar + index);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetString(FX_WCHAR* pText) const {
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FXSYS_assert(pText != NULL);
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t iEndChar = m_iStartChar + m_iChars;
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Char* pChar;
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t i = m_iStartChar; i < iEndChar; i++) {
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChar = m_pChars->GetDataPtr(i);
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      *pText++ = (FX_WCHAR)pChar->m_wCharCode;
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetString(CFX_WideString& wsText) const {
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_WCHAR* pText = wsText.GetBuffer(m_iChars);
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetString(pText);
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    wsText.ReleaseBuffer(m_iChars);
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetWidths(int32_t* pWidths) const {
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FXSYS_assert(pWidths != NULL);
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t iEndChar = m_iStartChar + m_iChars;
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Char* pChar;
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t i = m_iStartChar; i < iEndChar; i++) {
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChar = m_pChars->GetDataPtr(i);
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      *pWidths++ = pChar->m_iCharWidth;
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_dwStatus;
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iStartPos;
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iWidth;
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iStartChar;
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iChars;
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iBidiLevel;
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iBidiPos;
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iHorizontalScale;
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t m_iVerticalScale;
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_dwCharStyles;
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_TxtCharArray* m_pChars;
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* m_pUserData;
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef CFX_BaseArrayTemplate<CFX_TxtPiece> CFX_TxtPieceArray;
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_TxtBreak {
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static IFX_TxtBreak* Create(FX_DWORD dwPolicies);
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~IFX_TxtBreak() {}
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Release() = 0;
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetLineWidth(FX_FLOAT fLineWidth) = 0;
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetLinePos(FX_FLOAT fLinePos) = 0;
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD GetLayoutStyles() const = 0;
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetLayoutStyles(FX_DWORD dwLayoutStyles) = 0;
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetFont(IFX_Font* pFont) = 0;
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetFontSize(FX_FLOAT fFontSize) = 0;
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) = 0;
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetDefaultChar(FX_WCHAR wch) = 0;
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetParagraphBreakChar(FX_WCHAR wch) = 0;
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetLineBreakTolerance(FX_FLOAT fTolerance) = 0;
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetHorizontalScale(int32_t iScale) = 0;
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetVerticalScale(int32_t iScale) = 0;
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetCharRotation(int32_t iCharRotation) = 0;
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetCharSpace(FX_FLOAT fCharSpace) = 0;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetAlignment(int32_t iAlignment) = 0;
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD GetContextCharStyles() const = 0;
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetContextCharStyles(FX_DWORD dwCharStyles) = 0;
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetCombWidth(FX_FLOAT fCombWidth) = 0;
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SetUserData(void* pUserData) = 0;
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD AppendChar(FX_WCHAR wch) = 0;
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD EndBreak(FX_DWORD dwStatus = FX_TXTBREAK_PieceBreak) = 0;
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t CountBreakChars() const = 0;
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t CountBreakPieces() const = 0;
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const = 0;
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void ClearBreakPieces() = 0;
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Reset() = 0;
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetDisplayPos(
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_LPCTXTRUN pTxtRun,
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FXTEXT_CHARPOS* pCharPos,
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bCharCode = FALSE,
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString* pWSForms = NULL,
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_AdjustCharDisplayPos pAdjustPos = NULL) const = 0;
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetCharRects(FX_LPCTXTRUN pTxtRun,
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CFX_RectFArray& rtArray,
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               FX_BOOL bCharBBox = FALSE) const = 0;
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
215