diff options
Diffstat (limited to 'core/src/reflow/layoutprovider_taggedpdf.cpp')
-rw-r--r-- | core/src/reflow/layoutprovider_taggedpdf.cpp | 769 |
1 files changed, 0 insertions, 769 deletions
diff --git a/core/src/reflow/layoutprovider_taggedpdf.cpp b/core/src/reflow/layoutprovider_taggedpdf.cpp deleted file mode 100644 index 37eb2ad3cc..0000000000 --- a/core/src/reflow/layoutprovider_taggedpdf.cpp +++ /dev/null @@ -1,769 +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 - -#include "layoutprovider_taggedpdf.h" -CPDF_LayoutElement::CPDF_LayoutElement() -{ - m_pTaggedElement = NULL; - m_pParentElement = NULL; -} -CPDF_LayoutElement::~CPDF_LayoutElement() -{ - m_ObjArray.RemoveAll(); - int size = m_ChildArray.GetSize(); - for(int i = 0; i < size; i++) { - CPDF_LayoutElement* pChild = (CPDF_LayoutElement*)m_ChildArray.GetAt(i); - delete pChild; - pChild = NULL; - } - m_ChildArray.RemoveAll(); -} -LayoutType CPDF_LayoutElement::ConvertLayoutType(const CFX_ByteStringC& name) -{ - if(name == (const char*)("Document")) { - return LayoutDocument; - } else if(name == (const char*)("Part")) { - return LayoutPart; - } else if(name == (const char*)("Art")) { - return LayoutArt; - } else if(name == (const char*)("Sect")) { - return LayoutSect; - } else if(name == (const char*)("Div")) { - return LayoutDiv; - } else if(name == (const char*)("BlockQuote")) { - return LayoutBlockQuote; - } else if(name == (const char*)("Caption")) { - return LayoutCaption; - } else if(name == (const char*)("TOC")) { - return LayoutTOC; - } else if(name == (const char*)("TOCI")) { - return LayoutTOCI; - } else if(name == (const char*)("Index")) { - return LayoutIndex; - } else if(name == (const char*)("NonStruct")) { - return LayoutNonStruct; - } else if(name == (const char*)("Private")) { - return LayoutPrivate; - } else if(name == (const char*)("P")) { - return LayoutParagraph; - } else if(name == (const char*)("H")) { - return LayoutHeading; - } else if(name == (const char*)("H1")) { - return LayoutHeading1; - } else if(name == (const char*)("H2")) { - return LayoutHeading2; - } else if(name == (const char*)("H3")) { - return LayoutHeading3; - } else if(name == (const char*)("H4")) { - return LayoutHeading4; - } else if(name == (const char*)("H5")) { - return LayoutHeading5; - } else if(name == (const char*)("H6")) { - return LayoutHeading6; - } else if(name == (const char*)("L")) { - return LayoutList; - } else if(name == (const char*)("LI")) { - return LayoutListItem; - } else if(name == (const char*)("Lbl")) { - return LayoutListLabel; - } else if(name == (const char*)("LBody")) { - return LayoutListBody; - } else if(name == (const char*)("Table")) { - return LayoutTable; - } else if(name == (const char*)("TR")) { - return LayoutTableRow; - } else if(name == (const char*)("TH")) { - return LayoutTableHeaderCell; - } else if(name == (const char*)("TD")) { - return LayoutTableDataCell; - } else if(name == (const char*)("THead")) { - return LayoutTableHeaderGroup; - } else if(name == (const char*)("TBody")) { - return LayoutTableBodyGroup; - } else if(name == (const char*)("TFoot")) { - return LayoutTableFootGroup; - } else if(name == (const char*)("Span")) { - return LayoutSpan; - } else if(name == (const char*)("Quote")) { - return LayoutQuote; - } else if(name == (const char*)("Note")) { - return LayoutNote; - } else if(name == (const char*)("Reference")) { - return LayoutReference; - } else if(name == (const char*)("BibEntry")) { - return LayoutBibEntry; - } else if(name == (const char*)("Code")) { - return LayoutCode; - } else if(name == (const char*)("Link")) { - return LayoutLink; - } else if(name == (const char*)("Annot")) { - return LayoutAnnot; - } else if(name == (const char*)("Ruby")) { - return LayoutRuby; - } else if(name == (const char*)("RB")) { - return LayoutRubyBase; - } else if(name == (const char*)("RT")) { - return LayoutRubyAnnot; - } else if(name == (const char*)("RP")) { - return LayoutRubyPunc; - } else if(name == (const char*)("Warichu")) { - return LayoutWarichu; - } else if(name == (const char*)("WT")) { - return LayoutWarichuText; - } else if(name == (const char*)("WP")) { - return LayoutWarichuPunc; - } else if(name == (const char*)("Figure")) { - return LayoutFigure; - } else if(name == (const char*)("Formula")) { - return LayoutFormula; - } else if(name == (const char*)("Form")) { - return LayoutForm; - } else { - return LayoutUnknown; - } -} -CFX_ByteStringC CPDF_LayoutElement::ConvertLayoutType(LayoutType type) -{ - const CFX_ByteStringC& name = ""; - if(type == LayoutArifact) { - return "Arifact"; - } else if( type == LayoutDocument) { - return "Document"; - } else if( type == LayoutPart) { - return "Part"; - } else if( type == LayoutArt) { - return "Art"; - } else if( type == LayoutSect) { - return "Sect"; - } else if( type == LayoutDiv) { - return "Div"; - } else if( type == LayoutBlockQuote) { - return "BlockQuote"; - } else if( type == LayoutCaption) { - return "Caption"; - } else if( type == LayoutTOC) { - return "TOC"; - } else if( type == LayoutTOCI) { - return "TOCI"; - } else if( type == LayoutIndex) { - return "Index"; - } else if( type == LayoutNonStruct) { - return "NonStruct"; - } else if( type == LayoutPrivate) { - return "Private"; - } else if( type == LayoutParagraph) { - return "P"; - } else if( type == LayoutHeading) { - return "H"; - } else if( type == LayoutHeading1) { - return "H1"; - } else if( type == LayoutHeading2) { - return "H2"; - } else if( type == LayoutHeading3) { - return "H3"; - } else if( type == LayoutHeading4) { - return "H4"; - } else if( type == LayoutHeading5) { - return "H5"; - } else if( type == LayoutHeading6) { - return "H6"; - } else if( type == LayoutList) { - return "L"; - } else if( type == LayoutListItem) { - return "LI"; - } else if( type == LayoutListLabel) { - return "Lbl"; - } else if( type == LayoutListBody) { - return "LBody"; - } else if( type == LayoutTable) { - return "Table"; - } else if( type == LayoutTableRow) { - return "TR"; - } else if( type == LayoutTableHeaderCell) { - return "TH"; - } else if( type == LayoutTableDataCell) { - return "TD"; - } else if( type == LayoutTableHeaderGroup) { - return "THead"; - } else if( type == LayoutTableBodyGroup) { - return "TBody"; - } else if( type == LayoutTableFootGroup) { - return "TFoot"; - } else if( type == LayoutSpan) { - return "Span"; - } else if( type == LayoutQuote) { - return "Quote"; - } else if( type == LayoutNote) { - return "Note"; - } else if( type == LayoutReference) { - return "Reference"; - } else if( type == LayoutBibEntry) { - return "BibEntry"; - } else if( type == LayoutCode) { - return "Code"; - } else if( type == LayoutLink) { - return "Link"; - } else if( type == LayoutAnnot) { - return "Annot"; - } else if( type == LayoutRuby) { - return "Ruby"; - } else if( type == LayoutRubyBase) { - return "RB"; - } else if( type == LayoutRubyAnnot) { - return "RT"; - } else if( type == LayoutRubyPunc) { - return "RP"; - } else if( type == LayoutWarichu) { - return "Warichu"; - } else if( type == LayoutWarichuText) { - return "WT"; - } else if( type == LayoutWarichuPunc) { - return "WP"; - } else if( type == LayoutFigure) { - return "Figure"; - } else if( type == LayoutFormula) { - return "Formula"; - } else if( type == LayoutForm) { - return "Form"; - } - return name; -} -CFX_ByteStringC CPDF_LayoutElement::ConvertLayoutAttr(LayoutAttr attr) -{ - switch(attr) { - case LayoutArtifactType: - return "Type"; - case LayoutArtifactAttached: - return "Attached"; - case LayoutArtifactSubType: - return "Subtype"; - case LayoutPlacement: - return "Placement"; - case LayoutWritingMode: - return "WritingMode"; - case LayoutBackgroundColor: - return "BackgroundColor"; - case LayoutBorderColor: - return "BorderColor"; - case LayoutBorderStyle: - return "BorderStyle"; - case LayoutBorderThickness: - return "BorderThickness"; - case LayoutPadding: - return "Padding"; - case LayoutColor: - return "Color"; - case LayoutSpaceBefore: - return "SpaceBefore"; - case LayoutSpaceAfter: - return "SpaceAfter"; - case LayoutStartIndent: - return "StartIndent"; - case LayoutEndIndent: - return "EndIndent"; - case LayoutTextIndent: - return "TextIndent"; - case LayoutTextAlign: - return "TextAlign"; - case LayoutBBox: - return "BBox"; - case LayoutWidth: - return "Width"; - case LayoutHeight: - return "Height"; - case LayoutBlockAlign: - return "BlockAlign"; - case LayoutInlineAlign: - return "InlineAlign"; - case LayoutTBorderStyle: - return "TBorderStyle"; - case LayoutTPadding: - return "TPadding"; - case LayoutBaselineShift: - return "BaselineShift"; - case LayoutLineHeight: - return "LineHeight"; - case LayoutTextDecorationColor: - return "TextDecorationColor"; - case LayoutTextDecorationThickness: - return "TextDecorationThickness"; - case LayoutTextDecorationType: - return "TextDecorationType"; - case LayoutRubyAlign: - return "RubyAlign"; - case LayoutRubyPosition: - return "RubyPosition"; - case LayoutGlyphOrientationVertical: - return "GlyphOrientationVertical"; - case LayoutColumnCount: - return "ColumnCount"; - case LayoutColumnGap: - return "ColumnGap"; - case LayoutColumnWidths: - return "ColumnWidths"; - case LayoutListNumbering: - return "ListNumbering"; - case LayoutFieldRole: - return "Role"; - case LayoutFieldChecked: - return "checked"; - case LayoutFieldDesc: - return "Desc"; - case LayoutRowSpan: - return "RowSpan"; - case LayoutColSpan: - return "ColSpan"; - case LayoutTableHeaders: - return "Headers"; - case LayoutTableHeaderScope: - return "Scope"; - case LayoutTableSummary: - return "Summary"; - default: - return ""; - } -} -LayoutEnum CPDF_LayoutElement::ConvertLayoutEnum(CFX_ByteStringC Enum) -{ - if(Enum == "Block") { - return LayoutBlock; - } else if (Enum == "Inline") { - return LayoutInline; - } else if (Enum == "Before") { - return LayoutBefore; - } else if (Enum == "Start") { - return LayoutStart; - } else if (Enum == "End") { - return LayoutEnd; - } else if (Enum == "LrTb") { - return LayoutLrTb; - } else if (Enum == "RlTb") { - return LayoutRlTb; - } else if (Enum == "TbRl") { - return LayoutTbRl; - } else if (Enum == "None") { - return LayoutNone; - } else if (Enum == "Hidden") { - return LayoutHidden; - } else if (Enum == "Dotted") { - return LayoutDotted; - } else if (Enum == "Dashed") { - return LayoutDashed; - } else if (Enum == "Solid") { - return LayoutSolid; - } else if (Enum == "Double") { - return LayoutDouble; - } else if (Enum == "Groove") { - return LayoutGroove; - } else if (Enum == "Ridge") { - return LayoutRidge; - } else if (Enum == "Inset") { - return LayoutInset; - } else if (Enum == "Outset") { - return LayoutOutset; - } else if (Enum == "Normal") { - return LayoutNormal; - } else if (Enum == "Auto") { - return LayoutAuto; - } else if (Enum == "Center") { - return LayoutCenter; - } else if (Enum == "Justify") { - return LayoutJustify; - } else if (Enum == "Middle") { - return LayoutMiddle; - } else if (Enum == "Underline") { - return LayoutUnderline; - } else if (Enum == "Overline") { - return LayoutOverline; - } else if (Enum == "LineThrough") { - return LayoutLineThrough; - } else if (Enum == "Distribute") { - return LayoutDistribute; - } else if (Enum == "Disc") { - return LayoutDisc; - } else if (Enum == "Circle") { - return LayoutCircle; - } else if (Enum == "Square") { - return LayoutSquare; - } else if (Enum == "Decimal") { - return LayoutDecimal; - } else if (Enum == "UpperRoman") { - return LayoutUpperRoman; - } else if (Enum == "LowerRoman") { - return LayoutLowerRoman; - } else if (Enum == "UpperAlpha") { - return LayoutUpperAlpha; - } else if (Enum == "LowerAlpha") { - return LayoutLowerAlpha; - } else if (Enum == "rb") { - return LayoutRB; - } else if (Enum == "cb") { - return LayoutCB; - } else if (Enum == "pb") { - return LayoutPB; - } else if (Enum == "tv") { - return LayoutTV; - } else if (Enum == "on") { - return LayoutOn; - } else if (Enum == "off") { - return LayoutOff; - } else if (Enum == "neutral") { - return LayoutNeutral; - } else if (Enum == "Row") { - return LayoutRow; - } else if (Enum == "Column") { - return LayoutColumn; - } else if (Enum == "Both") { - return LayoutBoth; - } else if (Enum == "Left") { - return LayoutLeft; - } else if (Enum == "Top") { - return LayoutTop; - } else if (Enum == "Bottom") { - return LayoutBottom; - } else if (Enum == "Right") { - return LayoutRight; - } else if (Enum == "Pagination") { - return LayoutPagination; - } else if (Enum == "Layout") { - return LayoutLayout; - } else if (Enum == "Page") { - return LayoutPage; - } else if (Enum == "Background") { - return LayoutBackground; - } else if (Enum == "Header") { - return LayoutHeader; - } else if (Enum == "Footer") { - return LayoutFooter; - } else if (Enum == "Watermark") { - return LayoutWatermark; - } else { - return LayoutInvalid; - } -} -LayoutType CPDF_LayoutElement::GetType() -{ - if(!m_pTaggedElement) { - return LayoutUnknown; - } - CFX_ByteString name = m_pTaggedElement->GetType(); - return ConvertLayoutType(name); -} -int CPDF_LayoutElement::CountAttrValues(LayoutAttr attr_type) -{ - if(!m_pTaggedElement) { - return 0; - } - CPDF_Object* pObj = m_pTaggedElement->GetAttr(GetAttrOwner(attr_type), ConvertLayoutAttr(attr_type), IsInheritable(attr_type)); - if(pObj) { - return 1; - } else { - return 0; - } -} -LayoutEnum CPDF_LayoutElement::GetEnumAttr(LayoutAttr attr_type, int index) -{ - if(!m_pTaggedElement) { - return LayoutInvalid; - } - CFX_ByteStringC owner = GetAttrOwner(attr_type); - CFX_ByteStringC default_value = GetDefaultNameValue(attr_type); - CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type); - CFX_ByteString AttrValue = m_pTaggedElement->GetName(owner, AttrName, default_value, IsInheritable(attr_type), index); - return ConvertLayoutEnum(AttrValue); -} -CFX_ByteStringC CPDF_LayoutElement::GetAttrOwner(LayoutAttr attr_type) -{ - switch(attr_type) { - case LayoutListNumbering: - return "List"; - case LayoutFieldRole: - case LayoutFieldChecked : - case LayoutFieldDesc: - return "PrintField"; - case LayoutRowSpan: - case LayoutColSpan: - case LayoutTableHeaders: - case LayoutTableHeaderScope: - case LayoutTableSummary: - return "Table"; - default: - return "Layout"; - } -} -FX_FLOAT CPDF_LayoutElement::GetNumberAttr(LayoutAttr attr_type, int index) -{ - if(!m_pTaggedElement) { - return 0; - } - CFX_ByteStringC owner = GetAttrOwner(attr_type); - FX_FLOAT default_value = GetDefaultFloatValue(attr_type); - CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type); - FX_FLOAT f = m_pTaggedElement->GetNumber(owner, AttrName, default_value, IsInheritable(attr_type), index); - if(attr_type == LayoutWidth && !f) { - f = m_pTaggedElement->GetNumber("Table", AttrName, default_value, IsInheritable(attr_type), index); - } - return f; -} -FX_COLORREF CPDF_LayoutElement::GetColorAttr(LayoutAttr attr_type, int index) -{ - if(!m_pTaggedElement) { - return 0; - } - CFX_ByteStringC owner = GetAttrOwner(attr_type); - FX_COLORREF default_value = GetDefaultColorValue(attr_type); - CFX_ByteStringC AttrName = ConvertLayoutAttr(attr_type); - FX_ARGB f = m_pTaggedElement->GetColor(owner, AttrName, default_value, IsInheritable(attr_type), index); - return f; -} -FX_FLOAT CPDF_LayoutElement::GetDefaultFloatValue(LayoutAttr attr_type) -{ - switch(attr_type) { - case LayoutColumnCount: - return 1; - case LayoutRowSpan: - return 1; - case LayoutColSpan: - return 1; - default: - return 0; - } -} -FX_COLORREF CPDF_LayoutElement::GetDefaultColorValue(LayoutAttr attr_type) -{ - return -1; -} -CFX_ByteStringC CPDF_LayoutElement::GetDefaultNameValue(LayoutAttr attr_type) -{ - switch(attr_type) { - case LayoutPlacement: - return "Inline"; - case LayoutWritingMode: - return "LrTb"; - case LayoutBorderStyle: - return "None"; - case LayoutTextAlign: - return "Start"; - case LayoutBlockAlign: - return "Before"; - case LayoutInlineAlign: - return "Start"; - case LayoutTBorderStyle: - return "None"; - case LayoutTextDecorationType: - return "None"; - case LayoutRubyAlign: - return "Distribute"; - case LayoutRubyPosition: - return "Before"; - case LayoutGlyphOrientationVertical: - return "Auto"; - case LayoutListNumbering: - return "None"; - case LayoutFieldRole: - return "None"; - default: - return ""; - } -} -FX_BOOL CPDF_LayoutElement::IsInheritable(LayoutAttr type) -{ - switch(type) { - case LayoutWritingMode: - case LayoutTextAlign: - case LayoutBlockAlign: - case LayoutInlineAlign: - case LayoutLineHeight: - case LayoutGlyphOrientationVertical: - case LayoutRubyAlign: - case LayoutRubyPosition: - case LayoutBorderThickness: - case LayoutStartIndent: - case LayoutEndIndent: - case LayoutTextIndent: - case LayoutTPadding: - case LayoutTextDecorationThickness: - case LayoutBorderColor: - case LayoutColor: - case LayoutTextDecorationColor: - return TRUE; - default: - return FALSE; - } -} -int CPDF_LayoutElement::CountChildren() -{ - return m_ChildArray.GetSize(); -} -IPDF_LayoutElement* CPDF_LayoutElement::GetChild(int index) -{ - return (IPDF_LayoutElement*)m_ChildArray.GetAt(index); -} -IPDF_LayoutElement* CPDF_LayoutElement::GetParent() -{ - return m_pParentElement; -} -int CPDF_LayoutElement::CountObjects() -{ - if(m_pTaggedElement == NULL) { - return 0; - } - CFX_PtrArray* pObj = &m_ObjArray; - int size = pObj->GetSize(); - return size; -} -CPDF_PageObject* CPDF_LayoutElement::GetObject(int index) -{ - if(m_pTaggedElement == NULL) { - return NULL; - } - CFX_PtrArray *pObj = &m_ObjArray; - int size = pObj->GetSize(); - if(index < size) { - return (CPDF_PageObject*)pObj->GetAt(index); - } - return NULL; -} -FX_BOOL CPDF_LayoutElement::AddObject(CPDF_PageObject* pObj) -{ - return m_ObjArray.Add(pObj); -} -IPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_TaggedPDF(CPDF_PageObjects* pPage) -{ - if(pPage == NULL) { - return NULL; - } - CPDF_LayoutProvider_TaggedPDF* pProvider = new CPDF_LayoutProvider_TaggedPDF; - pProvider->Init(pPage); - return pProvider; -} -CPDF_LayoutProvider_TaggedPDF::CPDF_LayoutProvider_TaggedPDF() -{ - m_pPause = NULL; - m_pRoot = NULL; - m_pPageTree = NULL; - m_pCurTaggedElement = NULL; -} -CPDF_LayoutProvider_TaggedPDF::~CPDF_LayoutProvider_TaggedPDF() -{ - m_pCurTaggedElement = NULL; - m_pPause = NULL; - if(m_pRoot) { - delete m_pRoot; - } - m_pRoot = NULL; - if(m_pPageTree) { - delete m_pPageTree; - } - m_pPageTree = NULL; -} -void CPDF_LayoutProvider_TaggedPDF::ProcessElement(CPDF_LayoutElement*pParent, CPDF_StructElement* pTaggedElement) -{ - if(!pTaggedElement) { - return; - } - if(!pParent) { - m_Status = LayoutError; - return; - } - CPDF_LayoutElement* pElement = new CPDF_LayoutElement; - pElement->m_pParentElement = pParent; - pElement->m_pTaggedElement = pTaggedElement; - pParent->m_ChildArray.Add(pElement); - int count = pTaggedElement->CountKids(); - for(int i = 0; i < count; i++) { - CPDF_StructKid Kid = pTaggedElement->GetKid(i); - switch(Kid.m_Type) { - case CPDF_StructKid::Element: { - ProcessElement(pElement, Kid.m_Element.m_pElement); - if(m_Status != LayoutReady) { - return ; - } - } - break; - case CPDF_StructKid::PageContent: { - int count = m_pPage->CountObjects(); - FX_POSITION pos = m_pPage->GetFirstObjectPosition(); - if(!pos) { - m_Status = LayoutError; - return ; - } - while (pos) { - CPDF_PageObject* pObj = m_pPage->GetNextObject(pos); - int pbjMCID = pObj->m_ContentMark.GetMCID(); - if((FX_DWORD)(pObj->m_ContentMark.GetMCID()) == Kid.m_PageContent.m_ContentId) { - pElement->AddObject(pObj); - } - } - } - break; - case CPDF_StructKid::StreamContent: - case CPDF_StructKid::Object: - default: - break; - } - } -} -LayoutStatus CPDF_LayoutProvider_TaggedPDF::StartLoad(IFX_Pause* pPause) -{ - m_pPause = pPause; - if(m_pPage->m_pDocument && m_pPage->m_pFormDict) { - m_pPageTree = CPDF_StructTree::LoadPage(m_pPage->m_pDocument, m_pPage->m_pFormDict); - } - if(!m_pPageTree) { - m_Status = LayoutError; - return LayoutError; - } - int count = m_pPageTree->CountTopElements(); - if(count == 0) { - m_Status = LayoutError; - return LayoutError; - } - m_pRoot = new CPDF_LayoutElement; - for(int i = 0; i < count; i++) { - CPDF_StructElement* pElement = m_pPageTree->GetTopElement(i); - if(pElement) { - ProcessElement(m_pRoot, pElement); - if(m_Status != LayoutReady) { - return m_Status; - } - } - } - m_pCurTaggedElement = NULL; - m_Status = LayoutFinished; - return LayoutFinished; -} -LayoutStatus CPDF_LayoutProvider_TaggedPDF::Continue() -{ - if(!m_pCurTaggedElement) { - return LayoutError; - } - if(m_Status != LayoutToBeContinued) { - return LayoutError; - } - m_Status = LayoutReady; - int count = m_pPageTree->CountTopElements(); - for(int i = 0; i < count; i++) { - CPDF_StructElement* pElement = m_pPageTree->GetTopElement(i); - if(pElement) { - ProcessElement(m_pRoot, pElement); - if(m_Status != LayoutReady) { - return m_Status; - } - } - } - m_pCurTaggedElement = NULL; - m_Status = LayoutFinished; - return LayoutFinished; -} -int CPDF_LayoutProvider_TaggedPDF::GetPosition() -{ - if(m_TopElementIndex == 0) { - return 0; - } - int count = m_pPageTree->CountTopElements(); - return m_TopElementIndex / count * 100; -} |