| Index: xfa/src/fxfa/app/xfa_textlayout.h
|
| diff --git a/xfa/src/fxfa/app/xfa_textlayout.h b/xfa/src/fxfa/app/xfa_textlayout.h
|
| deleted file mode 100644
|
| index 2d8d1bf15e8b5e4606ceba0f2385b467ca30e2f0..0000000000000000000000000000000000000000
|
| --- a/xfa/src/fxfa/app/xfa_textlayout.h
|
| +++ /dev/null
|
| @@ -1,425 +0,0 @@
|
| -// Copyright 2014 PDFium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
| -
|
| -#ifndef XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_
|
| -#define XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_
|
| -
|
| -#include "xfa/src/fde/css/fde_css.h"
|
| -#include "xfa/src/fde/fde_brush.h"
|
| -#include "xfa/src/fde/fde_renderdevice.h"
|
| -#include "xfa/src/fgas/layout/fgas_rtfbreak.h"
|
| -#include "xfa/src/fxfa/app/xfa_ffdoc.h"
|
| -#include "xfa/src/fxfa/parser/xfa_object.h"
|
| -
|
| -#define XFA_LOADERCNTXTFLG_FILTERSPACE 0x001
|
| -
|
| -class CXFA_Para;
|
| -class CXFA_Font;
|
| -class CXFA_TextTabstopsContext;
|
| -
|
| -class IXFA_TextProvider {
|
| - public:
|
| - virtual ~IXFA_TextProvider() {}
|
| - virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText) = 0;
|
| - virtual CXFA_Para GetParaNode() = 0;
|
| - virtual CXFA_Font GetFontNode() = 0;
|
| - virtual FX_BOOL IsCheckButtonAndAutoWidth() = 0;
|
| - virtual CXFA_FFDoc* GetDocNode() = 0;
|
| - virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI,
|
| - FX_BOOL bRaw,
|
| - const CFX_WideString& wsAttr,
|
| - CFX_WideString& wsValue) = 0;
|
| -};
|
| -
|
| -class CXFA_CSSTagProvider : public IFDE_CSSTagProvider {
|
| - public:
|
| - CXFA_CSSTagProvider() : m_bTagAviliable(FALSE), m_bContent(FALSE) {}
|
| - virtual ~CXFA_CSSTagProvider();
|
| - virtual CFX_WideStringC GetTagName() { return m_wsTagName; }
|
| - virtual FX_POSITION GetFirstAttribute() {
|
| - return m_Attributes.GetStartPosition();
|
| - }
|
| - virtual void GetNextAttribute(FX_POSITION& pos,
|
| - CFX_WideStringC& wsAttr,
|
| - CFX_WideStringC& wsValue);
|
| - void SetTagNameObj(const CFX_WideString& wsName) { m_wsTagName = wsName; }
|
| - void SetAttribute(const CFX_WideString& wsAttr,
|
| - const CFX_WideString& wsValue);
|
| - FX_BOOL m_bTagAviliable;
|
| - FX_BOOL m_bContent;
|
| -
|
| - protected:
|
| - CFX_WideString m_wsTagName;
|
| - CFX_MapPtrToPtr m_Attributes;
|
| -};
|
| -
|
| -class CXFA_TextParseContext : public CFX_Target {
|
| - public:
|
| - CXFA_TextParseContext()
|
| - : m_pParentStyle(nullptr),
|
| - m_ppMatchedDecls(nullptr),
|
| - m_dwMatchedDecls(0),
|
| - m_eDisplay(FDE_CSSDISPLAY_None) {}
|
| - ~CXFA_TextParseContext() {
|
| - if (m_pParentStyle)
|
| - m_pParentStyle->Release();
|
| - FX_Free(m_ppMatchedDecls);
|
| - }
|
| - void SetDisplay(FDE_CSSDISPLAY eDisplay) { m_eDisplay = eDisplay; }
|
| - FDE_CSSDISPLAY GetDisplay() const { return m_eDisplay; }
|
| - void SetDecls(const IFDE_CSSDeclaration** ppDeclArray, int32_t iDeclCount);
|
| - const IFDE_CSSDeclaration** GetDecls() {
|
| - return (const IFDE_CSSDeclaration**)m_ppMatchedDecls;
|
| - }
|
| - FX_DWORD CountDecls() const { return m_dwMatchedDecls; }
|
| - IFDE_CSSComputedStyle* m_pParentStyle;
|
| -
|
| - protected:
|
| - IFDE_CSSDeclaration** m_ppMatchedDecls;
|
| - FX_DWORD m_dwMatchedDecls;
|
| - FDE_CSSDISPLAY m_eDisplay;
|
| -};
|
| -
|
| -class CXFA_TextParser {
|
| - public:
|
| - CXFA_TextParser() : m_pAllocator(NULL), m_pSelector(NULL), m_pUASheet(NULL) {}
|
| - virtual ~CXFA_TextParser();
|
| - void Reset();
|
| - void DoParse(IFDE_XMLNode* pXMLContainer, IXFA_TextProvider* pTextProvider);
|
| - IFDE_CSSComputedStyle* CreateRootStyle(IXFA_TextProvider* pTextProvider);
|
| - IFDE_CSSComputedStyle* ComputeStyle(IFDE_XMLNode* pXMLNode,
|
| - IFDE_CSSComputedStyle* pParentStyle);
|
| - FX_BOOL IsParsed() const { return m_pAllocator != NULL; }
|
| -
|
| - int32_t GetVAlgin(IXFA_TextProvider* pTextProvider) const;
|
| - FX_FLOAT GetTabInterval(IFDE_CSSComputedStyle* pStyle) const;
|
| - int32_t CountTabs(IFDE_CSSComputedStyle* pStyle) const;
|
| - FX_BOOL IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const;
|
| - FX_BOOL GetTabstops(IFDE_CSSComputedStyle* pStyle,
|
| - CXFA_TextTabstopsContext* pTabstopContext);
|
| - IFX_Font* GetFont(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle) const;
|
| - FX_FLOAT GetFontSize(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle) const;
|
| - int32_t GetHorScale(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle,
|
| - IFDE_XMLNode* pXMLNode) const;
|
| - int32_t GetVerScale(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle) const;
|
| - void GetUnderline(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle,
|
| - int32_t& iUnderline,
|
| - int32_t& iPeriod) const;
|
| - void GetLinethrough(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle,
|
| - int32_t& iLinethrough) const;
|
| - FX_ARGB GetColor(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle) const;
|
| - FX_FLOAT GetBaseline(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle) const;
|
| - FX_FLOAT GetLineHeight(IXFA_TextProvider* pTextProvider,
|
| - IFDE_CSSComputedStyle* pStyle,
|
| - FX_BOOL bFirst,
|
| - FX_FLOAT fVerScale) const;
|
| - FX_BOOL GetEmbbedObj(IXFA_TextProvider* pTextProvider,
|
| - IFDE_XMLNode* pXMLNode,
|
| - CFX_WideString& wsValue);
|
| - CXFA_TextParseContext* GetParseContextFromMap(IFDE_XMLNode* pXMLNode);
|
| -
|
| - private:
|
| - void InitCSSData(IXFA_TextProvider* pTextProvider);
|
| - void ParseRichText(IFDE_XMLNode* pXMLNode,
|
| - IFDE_CSSComputedStyle* pParentStyle);
|
| - void ParseTagInfo(IFDE_XMLNode* pXMLNode, CXFA_CSSTagProvider& tagProvider);
|
| - IFDE_CSSStyleSheet* LoadDefaultSheetStyle();
|
| - IFDE_CSSComputedStyle* CreateStyle(IFDE_CSSComputedStyle* pParentStyle);
|
| - IFX_MEMAllocator* m_pAllocator;
|
| - IFDE_CSSStyleSelector* m_pSelector;
|
| - IFDE_CSSStyleSheet* m_pUASheet;
|
| - CFX_MapPtrTemplate<IFDE_XMLNode*, CXFA_TextParseContext*>
|
| - m_mapXMLNodeToParseContext;
|
| -};
|
| -
|
| -class CXFA_LoaderContext {
|
| - public:
|
| - CXFA_LoaderContext()
|
| - : m_bSaveLineHeight(FALSE),
|
| - m_fWidth(0),
|
| - m_fHeight(0),
|
| - m_fLastPos(0),
|
| - m_fStartLineOffset(0),
|
| - m_iChar(0),
|
| - m_iTotalLines(-1),
|
| - m_pXMLNode(NULL),
|
| - m_pNode(NULL),
|
| - m_pParentStyle(NULL),
|
| - m_dwFlags(0) {}
|
| - FX_BOOL m_bSaveLineHeight;
|
| - FX_FLOAT m_fWidth;
|
| - FX_FLOAT m_fHeight;
|
| - FX_FLOAT m_fLastPos;
|
| - FX_FLOAT m_fStartLineOffset;
|
| - int32_t m_iChar;
|
| - int32_t m_iLines;
|
| - int32_t m_iTotalLines;
|
| - IFDE_XMLNode* m_pXMLNode;
|
| - CXFA_Node* m_pNode;
|
| - IFDE_CSSComputedStyle* m_pParentStyle;
|
| - CFX_ArrayTemplate<FX_FLOAT> m_lineHeights;
|
| - FX_DWORD m_dwFlags;
|
| - CFX_FloatArray m_BlocksHeight;
|
| -};
|
| -
|
| -class CXFA_LinkUserData : public IFX_Unknown, public CFX_Target {
|
| - public:
|
| - CXFA_LinkUserData(IFX_MEMAllocator* pAllocator, FX_WCHAR* pszText)
|
| - : m_pAllocator(pAllocator), m_dwRefCount(1) {
|
| - m_pszURLContent = pszText;
|
| - }
|
| - ~CXFA_LinkUserData() {}
|
| - virtual FX_DWORD Release() {
|
| - FX_DWORD dwRefCount = --m_dwRefCount;
|
| - if (dwRefCount <= 0) {
|
| - FXTARGET_DeleteWith(CXFA_LinkUserData, m_pAllocator, this);
|
| - }
|
| - return dwRefCount;
|
| - }
|
| - virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
|
| -
|
| - public:
|
| - const FX_WCHAR* GetLinkURL() { return m_pszURLContent; }
|
| -
|
| - protected:
|
| - IFX_MEMAllocator* m_pAllocator;
|
| - FX_DWORD m_dwRefCount;
|
| - CFX_WideString m_pszURLContent;
|
| -};
|
| -
|
| -class CXFA_TextUserData : public IFX_Unknown, public CFX_Target {
|
| - public:
|
| - CXFA_TextUserData(IFX_MEMAllocator* pAllocator, IFDE_CSSComputedStyle* pStyle)
|
| - : m_pStyle(pStyle),
|
| - m_pLinkData(nullptr),
|
| - m_pAllocator(pAllocator),
|
| - m_dwRefCount(0) {
|
| - FXSYS_assert(m_pAllocator);
|
| - if (m_pStyle)
|
| - m_pStyle->AddRef();
|
| - }
|
| - CXFA_TextUserData(IFX_MEMAllocator* pAllocator,
|
| - IFDE_CSSComputedStyle* pStyle,
|
| - CXFA_LinkUserData* pLinkData)
|
| - : m_pStyle(pStyle),
|
| - m_pLinkData(pLinkData),
|
| - m_pAllocator(pAllocator),
|
| - m_dwRefCount(0) {
|
| - FXSYS_assert(m_pAllocator);
|
| - if (m_pStyle)
|
| - m_pStyle->AddRef();
|
| - }
|
| - ~CXFA_TextUserData() {
|
| - if (m_pStyle)
|
| - m_pStyle->Release();
|
| - if (m_pLinkData)
|
| - m_pLinkData->Release();
|
| - }
|
| - virtual FX_DWORD Release() {
|
| - FX_DWORD dwRefCount = --m_dwRefCount;
|
| - if (dwRefCount == 0) {
|
| - FXTARGET_DeleteWith(CXFA_TextUserData, m_pAllocator, this);
|
| - }
|
| - return dwRefCount;
|
| - }
|
| - virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
|
| -
|
| - IFDE_CSSComputedStyle* m_pStyle;
|
| - CXFA_LinkUserData* m_pLinkData;
|
| -
|
| - protected:
|
| - IFX_MEMAllocator* m_pAllocator;
|
| - FX_DWORD m_dwRefCount;
|
| -};
|
| -
|
| -class XFA_TextPiece : public CFX_Target {
|
| - public:
|
| - XFA_TextPiece() : pszText(nullptr), pFont(nullptr), pLinkData(nullptr) {}
|
| - ~XFA_TextPiece() {
|
| - if (pLinkData)
|
| - pLinkData->Release();
|
| - }
|
| -
|
| - FX_WCHAR* pszText;
|
| - int32_t iChars;
|
| - int32_t* pWidths;
|
| - int32_t iHorScale;
|
| - int32_t iVerScale;
|
| - int32_t iBidiLevel;
|
| - int32_t iUnderline;
|
| - int32_t iPeriod;
|
| - int32_t iLineThrough;
|
| - IFX_Font* pFont;
|
| - FX_ARGB dwColor;
|
| - FX_FLOAT fFontSize;
|
| - CFX_RectF rtPiece;
|
| - CXFA_LinkUserData* pLinkData;
|
| -};
|
| -typedef CFX_ArrayTemplate<XFA_TextPiece*> CXFA_PieceArray;
|
| -
|
| -class CXFA_PieceLine : public CFX_Target {
|
| - public:
|
| - CXFA_PieceLine() {}
|
| - CXFA_PieceArray m_textPieces;
|
| - CFX_Int32Array m_charCounts;
|
| -};
|
| -typedef CFX_ArrayTemplate<CXFA_PieceLine*> CXFA_PieceLineArray;
|
| -
|
| -struct XFA_TABSTOPS {
|
| - FX_DWORD dwAlign;
|
| - FX_FLOAT fTabstops;
|
| -};
|
| -
|
| -class CXFA_TextTabstopsContext {
|
| - public:
|
| - CXFA_TextTabstopsContext()
|
| - : m_iTabCount(0),
|
| - m_iTabIndex(-1),
|
| - m_bTabstops(FALSE),
|
| - m_fTabWidth(0),
|
| - m_fLeft(0) {}
|
| - void Append(FX_DWORD dwAlign, FX_FLOAT fTabstops) {
|
| - int32_t i = 0;
|
| - for (i = 0; i < m_iTabCount; i++) {
|
| - XFA_TABSTOPS* pTabstop = m_tabstops.GetDataPtr(i);
|
| - if (fTabstops < pTabstop->fTabstops) {
|
| - break;
|
| - }
|
| - }
|
| - m_tabstops.InsertSpaceAt(i, 1);
|
| - XFA_TABSTOPS tabstop;
|
| - tabstop.dwAlign = dwAlign;
|
| - tabstop.fTabstops = fTabstops;
|
| - m_tabstops.SetAt(i, tabstop);
|
| - m_iTabCount++;
|
| - }
|
| - void RemoveAll() {
|
| - m_tabstops.RemoveAll();
|
| - m_iTabCount = 0;
|
| - }
|
| - void Reset() {
|
| - m_iTabIndex = -1;
|
| - m_bTabstops = FALSE;
|
| - m_fTabWidth = 0;
|
| - m_fLeft = 0;
|
| - }
|
| - CFX_ArrayTemplate<XFA_TABSTOPS> m_tabstops;
|
| - int32_t m_iTabCount;
|
| - int32_t m_iTabIndex;
|
| - FX_BOOL m_bTabstops;
|
| - FX_FLOAT m_fTabWidth;
|
| - FX_FLOAT m_fLeft;
|
| -};
|
| -
|
| -class CXFA_TextLayout {
|
| - public:
|
| - CXFA_TextLayout(IXFA_TextProvider* pTextProvider);
|
| - virtual ~CXFA_TextLayout();
|
| - int32_t GetText(CFX_WideString& wsText);
|
| - FX_FLOAT GetLayoutHeight();
|
| - FX_FLOAT StartLayout(FX_FLOAT fWidth = -1);
|
| - FX_BOOL DoLayout(int32_t iBlockIndex,
|
| - FX_FLOAT& fCalcHeight,
|
| - FX_FLOAT fContentAreaHeight = -1,
|
| - FX_FLOAT fTextHeight = -1);
|
| -
|
| - FX_BOOL CalcSize(const CFX_SizeF& minSize,
|
| - const CFX_SizeF& maxSize,
|
| - CFX_SizeF& defaultSize);
|
| - FX_BOOL Layout(const CFX_SizeF& size, FX_FLOAT* fHeight = NULL);
|
| - void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex);
|
| - FX_BOOL DrawString(CFX_RenderDevice* pFxDevice,
|
| - const CFX_Matrix& tmDoc2Device,
|
| - const CFX_RectF& rtClip,
|
| - int32_t iBlock = 0);
|
| - FX_BOOL IsLoaded() const { return m_pieceLines.GetSize() > 0; }
|
| - void Unload();
|
| - const CXFA_PieceLineArray* GetPieceLines();
|
| -
|
| - FX_BOOL m_bHasBlock;
|
| - CFX_Int32Array m_Blocks;
|
| -
|
| - private:
|
| - void GetTextDataNode();
|
| - IFDE_XMLNode* GetXMLContainerNode();
|
| - IFX_RTFBreak* CreateBreak(FX_BOOL bDefault);
|
| - void InitBreak(FX_FLOAT fLineWidth);
|
| - void InitBreak(IFDE_CSSComputedStyle* pStyle,
|
| - FDE_CSSDISPLAY eDisplay,
|
| - FX_FLOAT fLineWidth,
|
| - IFDE_XMLNode* pXMLNode,
|
| - IFDE_CSSComputedStyle* pParentStyle = NULL);
|
| - FX_BOOL Loader(const CFX_SizeF& szText,
|
| - FX_FLOAT& fLinePos,
|
| - FX_BOOL bSavePieces = TRUE);
|
| - void LoadText(CXFA_Node* pNode,
|
| - const CFX_SizeF& szText,
|
| - FX_FLOAT& fLinePos,
|
| - FX_BOOL bSavePieces);
|
| - FX_BOOL LoadRichText(IFDE_XMLNode* pXMLNode,
|
| - const CFX_SizeF& szText,
|
| - FX_FLOAT& fLinePos,
|
| - IFDE_CSSComputedStyle* pParentStyle,
|
| - FX_BOOL bSavePieces,
|
| - CXFA_LinkUserData* pLinkData = NULL,
|
| - FX_BOOL bEndBreak = TRUE,
|
| - FX_BOOL bIsOl = FALSE,
|
| - int32_t iLiCount = 0);
|
| - FX_BOOL AppendChar(const CFX_WideString& wsText,
|
| - FX_FLOAT& fLinePos,
|
| - FX_FLOAT fSpaceAbove,
|
| - FX_BOOL bSavePieces);
|
| - void AppendTextLine(FX_DWORD dwStatus,
|
| - FX_FLOAT& fLinePos,
|
| - FX_BOOL bSavePieces,
|
| - FX_BOOL bEndBreak = FALSE);
|
| - void EndBreak(FX_DWORD dwStatus, FX_FLOAT& fLinePos, FX_BOOL bDefault);
|
| - FX_BOOL IsEnd(FX_BOOL bSavePieces);
|
| - void ProcessText(CFX_WideString& wsText);
|
| - void UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom);
|
| - void RenderString(IFDE_RenderDevice* pDevice,
|
| - IFDE_SolidBrush* pBrush,
|
| - CXFA_PieceLine* pPieceLine,
|
| - int32_t iPiece,
|
| - FXTEXT_CHARPOS* pCharPos,
|
| - const CFX_Matrix& tmDoc2Device);
|
| - void RenderPath(IFDE_RenderDevice* pDevice,
|
| - IFDE_Pen* pPen,
|
| - CXFA_PieceLine* pPieceLine,
|
| - int32_t iPiece,
|
| - FXTEXT_CHARPOS* pCharPos,
|
| - const CFX_Matrix& tmDoc2Device);
|
| - int32_t GetDisplayPos(const XFA_TextPiece* pPiece,
|
| - FXTEXT_CHARPOS* pCharPos,
|
| - FX_BOOL bCharCode = FALSE);
|
| - FX_BOOL ToRun(const XFA_TextPiece* pPiece, FX_RTFTEXTOBJ& tr);
|
| - void DoTabstops(IFDE_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine);
|
| - FX_BOOL Layout(int32_t iBlock);
|
| - int32_t CountBlocks() const;
|
| -
|
| - IXFA_TextProvider* m_pTextProvider;
|
| - CXFA_Node* m_pTextDataNode;
|
| - FX_BOOL m_bRichText;
|
| - IFX_MEMAllocator* m_pAllocator;
|
| - IFX_RTFBreak* m_pBreak;
|
| - CXFA_LoaderContext* m_pLoader;
|
| - int32_t m_iLines;
|
| - FX_FLOAT m_fMaxWidth;
|
| - CXFA_TextParser m_textParser;
|
| - CXFA_PieceLineArray m_pieceLines;
|
| - CXFA_TextTabstopsContext* m_pTabstopContext;
|
| - FX_BOOL m_bBlockContinue;
|
| -};
|
| -
|
| -#endif // XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_
|
|
|