Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: core/src/reflow/autoreflow.cpp

Issue 453133004: clang-format all code (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: core/src/reflow/autoreflow.cpp
diff --git a/core/src/reflow/autoreflow.cpp b/core/src/reflow/autoreflow.cpp
index 8c37960932668bf73b534ae90dcbdb3022679c5a..951a620f904df216c770bc164099e100c72237eb 100644
--- a/core/src/reflow/autoreflow.cpp
+++ b/core/src/reflow/autoreflow.cpp
@@ -1,781 +1,813 @@
// 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 "autoreflow.h"
-#define approachto(a,b,c) (FXSYS_fabs((float)((a)-(b)))>(c) ? 0 : 1)
-int FPDF_ProcessInterObj(const CPDF_PageObject* pPrevObj, const CPDF_PageObject* pObj)
-{
- CFX_AffineMatrix matrix;
- FX_RECT PreRect = pPrevObj->GetBBox(&matrix);
- FX_RECT rect = pObj->GetBBox(&matrix);
- int flag = 0;
- if(PreRect.top > rect.bottom) {
- flag = 0;
- } else if(rect.top > PreRect.bottom) {
- flag = 1;
- } else if(PreRect.right < rect.left) {
- flag = 0;
- } else if(PreRect.left > rect.right) {
- flag = 1;
- } else if(pObj->m_Type != PDFPAGE_TEXT) {
+#define approachto(a, b, c) (FXSYS_fabs((float)((a) - (b))) > (c) ? 0 : 1)
+int FPDF_ProcessInterObj(const CPDF_PageObject* pPrevObj,
+ const CPDF_PageObject* pObj) {
+ CFX_AffineMatrix matrix;
+ FX_RECT PreRect = pPrevObj->GetBBox(&matrix);
+ FX_RECT rect = pObj->GetBBox(&matrix);
+ int flag = 0;
+ if (PreRect.top > rect.bottom) {
+ flag = 0;
+ } else if (rect.top > PreRect.bottom) {
+ flag = 1;
+ } else if (PreRect.right < rect.left) {
+ flag = 0;
+ } else if (PreRect.left > rect.right) {
+ flag = 1;
+ } else if (pObj->m_Type != PDFPAGE_TEXT) {
+ flag = 1;
+ } else if (pPrevObj->m_Type != PDFPAGE_TEXT) {
+ flag = 0;
+ } else {
+ if ((PreRect.top < rect.top && PreRect.bottom > rect.bottom) ||
+ (PreRect.top > rect.top && PreRect.bottom < rect.bottom)) {
+ if (PreRect.left > rect.left) {
flag = 1;
- } else if(pPrevObj->m_Type != PDFPAGE_TEXT) {
+ } else {
flag = 0;
+ }
} else {
- if((PreRect.top < rect.top && PreRect.bottom > rect.bottom) ||
- (PreRect.top > rect.top && PreRect.bottom < rect.bottom)) {
- if(PreRect.left > rect.left) {
- flag = 1;
- } else {
- flag = 0;
- }
- } else {
- CPDF_TextObject* pPrevTextObj = (CPDF_TextObject* )pPrevObj;
- CPDF_TextObject* pTextObj = (CPDF_TextObject* )pObj;
- CPDF_TextObjectItem item, prevItem;
- pPrevTextObj->GetItemInfo(0, &prevItem);
- pTextObj->GetItemInfo(0, &item);
- CFX_AffineMatrix TextMatrix;
- pTextObj->GetTextMatrix(&TextMatrix);
- FX_FLOAT originX, originY, prevOriginX, preOriginY;
- TextMatrix.Transform(item.m_OriginX, item.m_OriginY, originX, originY);
- pPrevTextObj->GetTextMatrix(&TextMatrix);
- TextMatrix.Transform(prevItem.m_OriginX, prevItem.m_OriginY, prevOriginX, preOriginY);
- if(preOriginY > originY) {
- flag = 0;
- } else {
- flag = 1;
- }
- }
- }
- return flag;
-}
-void CPDF_AutoReflowLayoutProvider::Conver2AppreceOrder(const CPDF_PageObjects* pStreamOrderObjs, CPDF_PageObjects* pAppraceOrderObjs)
-{
- FX_POSITION pos = pStreamOrderObjs->GetFirstObjectPosition();
+ CPDF_TextObject* pPrevTextObj = (CPDF_TextObject*)pPrevObj;
+ CPDF_TextObject* pTextObj = (CPDF_TextObject*)pObj;
+ CPDF_TextObjectItem item, prevItem;
+ pPrevTextObj->GetItemInfo(0, &prevItem);
+ pTextObj->GetItemInfo(0, &item);
+ CFX_AffineMatrix TextMatrix;
+ pTextObj->GetTextMatrix(&TextMatrix);
+ FX_FLOAT originX, originY, prevOriginX, preOriginY;
+ TextMatrix.Transform(item.m_OriginX, item.m_OriginY, originX, originY);
+ pPrevTextObj->GetTextMatrix(&TextMatrix);
+ TextMatrix.Transform(
+ prevItem.m_OriginX, prevItem.m_OriginY, prevOriginX, preOriginY);
+ if (preOriginY > originY) {
+ flag = 0;
+ } else {
+ flag = 1;
+ }
+ }
+ }
+ return flag;
+}
+void CPDF_AutoReflowLayoutProvider::Conver2AppreceOrder(
+ const CPDF_PageObjects* pStreamOrderObjs,
+ CPDF_PageObjects* pAppraceOrderObjs) {
+ FX_POSITION pos = pStreamOrderObjs->GetFirstObjectPosition();
+ CFX_AffineMatrix matrix;
+ while (pos) {
+ CPDF_PageObject* pObj = pStreamOrderObjs->GetNextObject(pos);
CFX_AffineMatrix matrix;
- while(pos) {
- CPDF_PageObject* pObj = pStreamOrderObjs->GetNextObject(pos);
- CFX_AffineMatrix matrix;
- if(pObj->m_Type != PDFPAGE_TEXT) {
- continue;
- }
- FX_POSITION pos1 = pAppraceOrderObjs->GetLastObjectPosition();
- while(pos1) {
- CPDF_PageObject* pTempObj = pAppraceOrderObjs->GetPrevObject(pos1);
- if(FPDF_ProcessInterObj(pObj, pTempObj) == 1) {
- if(!pos1) {
- pos1 = pAppraceOrderObjs->GetFirstObjectPosition();
- } else {
- pAppraceOrderObjs->GetNextObject(pos1);
- }
- break;
- }
- }
- pAppraceOrderObjs->InsertObject(pos1, pObj);
- }
- pos = pStreamOrderObjs->GetFirstObjectPosition();
- while(pos) {
- CPDF_PageObject* pObj = pStreamOrderObjs->GetNextObject(pos);
- if(pObj->m_Type != PDFPAGE_IMAGE) {
- continue;
- }
- FX_POSITION pos1 = pAppraceOrderObjs->GetLastObjectPosition();
- while(pos1) {
- CPDF_PageObject* pTempObj = pAppraceOrderObjs->GetPrevObject(pos1);
- if(FPDF_ProcessInterObj(pObj, pTempObj) == 1) {
- if(!pos1) {
- pos1 = pAppraceOrderObjs->GetFirstObjectPosition();
- } else {
- pAppraceOrderObjs->GetNextObject(pos1);
- }
- break;
- }
- }
- pAppraceOrderObjs->InsertObject(pos1, pObj);
- }
-}
-IPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_AutoReflow(CPDF_PageObjects* pPage, FX_BOOL bReadOrder)
-{
- return FX_NEW CPDF_AutoReflowLayoutProvider(pPage, bReadOrder);
-}
-CPDF_AutoReflowElement::CPDF_AutoReflowElement(LayoutType layoutType , CPDF_AutoReflowElement* pParent)
-{
- m_ElmType = layoutType;
- m_pParentElm = pParent;
- if(pParent) {
- pParent->m_ChildArray.Add(this);
- }
- m_SpaceBefore = 0;
-}
-CPDF_AutoReflowElement::~CPDF_AutoReflowElement()
-{
- m_ChildArray.RemoveAll();
- m_ObjArray.RemoveAll();
-}
-int CPDF_AutoReflowElement::CountAttrValues(LayoutAttr attr_type)
-{
- return 1;
-}
-LayoutEnum CPDF_AutoReflowElement::GetEnumAttr(LayoutAttr attr_type, int index )
-{
- return LayoutInvalid;
-}
-FX_FLOAT CPDF_AutoReflowElement::GetNumberAttr(LayoutAttr attr_type, int index )
-{
- switch (attr_type) {
- case LayoutSpaceBefore:
- return m_SpaceBefore;
- default:
- return 0;
- }
-}
-FX_COLORREF CPDF_AutoReflowElement::GetColorAttr(LayoutAttr attr_type, int index )
-{
- return 0;
-}
-#define WritingMode_UNKNOW 0
-#define WritingMode_LRTB 1
-#define WritingMode_RLTB 2
-#define WritingMode_TBRL 3
-CPDF_AutoReflowLayoutProvider::CPDF_AutoReflowLayoutProvider(CPDF_PageObjects* pPage, FX_BOOL bReadOrder)
-{
- m_pPDFPage = (CPDF_Page*)pPage;
- FX_FLOAT width = m_pPDFPage->GetPageWidth();
- FX_FLOAT height = m_pPDFPage->GetPageHeight();
- m_pPDFPage->GetDisplayMatrix(m_PDFDisplayMatrix, 0, 0, (int)(m_pPDFPage->GetPageWidth()), (int)(m_pPDFPage->GetPageHeight()), 0);
- m_bReadOrder = bReadOrder;
- m_Status = LayoutReady;
- m_pRoot = NULL;
- m_pCurrElm = NULL;
- m_pPreObj = NULL;
- m_Step = 0;
- m_WritingMode = WritingMode_UNKNOW;
-}
-CPDF_AutoReflowLayoutProvider::~CPDF_AutoReflowLayoutProvider()
-{
- m_pPDFPage = NULL;
- ReleaseElm(m_pRoot);
-}
-void CPDF_AutoReflowLayoutProvider::ReleaseElm(CPDF_AutoReflowElement*& pElm, FX_BOOL bReleaseChildren)
-{
- if(bReleaseChildren) {
- int count = pElm->CountChildren();
- for(int i = 0; i < count; i++) {
- CPDF_AutoReflowElement* pChild = (CPDF_AutoReflowElement*)pElm->GetChild(i);
- ReleaseElm(pChild);
- }
- }
- delete pElm;
- pElm = NULL;
-}
-void CPDF_AutoReflowLayoutProvider::AddObjectArray(CPDF_AutoReflowElement* pElm, CFX_PtrList& ObjList)
-{
- if(!pElm) {
- return;
- }
- FX_POSITION pos = ObjList.GetHeadPosition();
- while (pos) {
- pElm->m_ObjArray.Add((CPDF_PageObject*)ObjList.GetNext(pos));
- }
-}
-void CPDF_AutoReflowLayoutProvider::GenerateStructTree()
-{
- if (m_Step < AUTOREFLOW_STEP_GENERATELINE) {
- GenerateLine(m_cellArray);
- if(m_cellArray.GetSize() == 0) {
- m_Status = LayoutError;
- return;
- }
- if(m_pPause && m_pPause->NeedToPauseNow()) {
- m_Step = AUTOREFLOW_STEP_GENERATELINE;
- m_Status = LayoutToBeContinued;
- return;
- }
- }
- if (m_Step < AUTOREFLOW_STEP_GENERATEParagraph) {
- GenerateParagraph(m_cellArray);
- if(m_pPause && m_pPause->NeedToPauseNow()) {
- m_Step = AUTOREFLOW_STEP_GENERATEParagraph;
- m_Status = LayoutToBeContinued;
- return;
- }
- }
- if (m_Step < AUTOREFLOW_STEP_CREATEELEMENT) {
- CreateElement();
- if(m_pPause && m_pPause->NeedToPauseNow()) {
- m_Step = AUTOREFLOW_STEP_CREATEELEMENT;
- m_Status = LayoutToBeContinued;
- return;
- }
- }
- if (m_Step < AUTOREFLOW_STEP_REMOVEDATA) {
- int count = m_cellArray.GetSize();
- for(int i = 0; i < count; i++) {
- CRF_CELL* pCell = (CRF_CELL*)m_cellArray.GetAt(i);
- if(pCell) {
- pCell->m_ObjList.RemoveAll();
- delete pCell;
- }
- }
- m_cellArray.RemoveAll();
- if(m_pPause && m_pPause->NeedToPauseNow()) {
- m_Step = AUTOREFLOW_STEP_REMOVEDATA;
- m_Status = LayoutToBeContinued;
- return;
- }
- }
- m_Step = AUTOREFLOW_STEP_REMOVEDATA;
- m_Status = LayoutFinished;
+ if (pObj->m_Type != PDFPAGE_TEXT) {
+ continue;
+ }
+ FX_POSITION pos1 = pAppraceOrderObjs->GetLastObjectPosition();
+ while (pos1) {
+ CPDF_PageObject* pTempObj = pAppraceOrderObjs->GetPrevObject(pos1);
+ if (FPDF_ProcessInterObj(pObj, pTempObj) == 1) {
+ if (!pos1) {
+ pos1 = pAppraceOrderObjs->GetFirstObjectPosition();
+ } else {
+ pAppraceOrderObjs->GetNextObject(pos1);
+ }
+ break;
+ }
+ }
+ pAppraceOrderObjs->InsertObject(pos1, pObj);
+ }
+ pos = pStreamOrderObjs->GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pObj = pStreamOrderObjs->GetNextObject(pos);
+ if (pObj->m_Type != PDFPAGE_IMAGE) {
+ continue;
+ }
+ FX_POSITION pos1 = pAppraceOrderObjs->GetLastObjectPosition();
+ while (pos1) {
+ CPDF_PageObject* pTempObj = pAppraceOrderObjs->GetPrevObject(pos1);
+ if (FPDF_ProcessInterObj(pObj, pTempObj) == 1) {
+ if (!pos1) {
+ pos1 = pAppraceOrderObjs->GetFirstObjectPosition();
+ } else {
+ pAppraceOrderObjs->GetNextObject(pos1);
+ }
+ break;
+ }
+ }
+ pAppraceOrderObjs->InsertObject(pos1, pObj);
+ }
+}
+IPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_AutoReflow(
+ CPDF_PageObjects* pPage,
+ FX_BOOL bReadOrder) {
+ return FX_NEW CPDF_AutoReflowLayoutProvider(pPage, bReadOrder);
+}
+CPDF_AutoReflowElement::CPDF_AutoReflowElement(
+ LayoutType layoutType,
+ CPDF_AutoReflowElement* pParent) {
+ m_ElmType = layoutType;
+ m_pParentElm = pParent;
+ if (pParent) {
+ pParent->m_ChildArray.Add(this);
+ }
+ m_SpaceBefore = 0;
+}
+CPDF_AutoReflowElement::~CPDF_AutoReflowElement() {
+ m_ChildArray.RemoveAll();
+ m_ObjArray.RemoveAll();
+}
+int CPDF_AutoReflowElement::CountAttrValues(LayoutAttr attr_type) {
+ return 1;
+}
+LayoutEnum CPDF_AutoReflowElement::GetEnumAttr(LayoutAttr attr_type,
+ int index) {
+ return LayoutInvalid;
+}
+FX_FLOAT CPDF_AutoReflowElement::GetNumberAttr(LayoutAttr attr_type,
+ int index) {
+ switch (attr_type) {
+ case LayoutSpaceBefore:
+ return m_SpaceBefore;
+ default:
+ return 0;
+ }
+}
+FX_COLORREF CPDF_AutoReflowElement::GetColorAttr(LayoutAttr attr_type,
+ int index) {
+ return 0;
+}
+#define WritingMode_UNKNOW 0
+#define WritingMode_LRTB 1
+#define WritingMode_RLTB 2
+#define WritingMode_TBRL 3
+CPDF_AutoReflowLayoutProvider::CPDF_AutoReflowLayoutProvider(
+ CPDF_PageObjects* pPage,
+ FX_BOOL bReadOrder) {
+ m_pPDFPage = (CPDF_Page*)pPage;
+ FX_FLOAT width = m_pPDFPage->GetPageWidth();
+ FX_FLOAT height = m_pPDFPage->GetPageHeight();
+ m_pPDFPage->GetDisplayMatrix(m_PDFDisplayMatrix,
+ 0,
+ 0,
+ (int)(m_pPDFPage->GetPageWidth()),
+ (int)(m_pPDFPage->GetPageHeight()),
+ 0);
+ m_bReadOrder = bReadOrder;
+ m_Status = LayoutReady;
+ m_pRoot = NULL;
+ m_pCurrElm = NULL;
+ m_pPreObj = NULL;
+ m_Step = 0;
+ m_WritingMode = WritingMode_UNKNOW;
+}
+CPDF_AutoReflowLayoutProvider::~CPDF_AutoReflowLayoutProvider() {
+ m_pPDFPage = NULL;
+ ReleaseElm(m_pRoot);
+}
+void CPDF_AutoReflowLayoutProvider::ReleaseElm(CPDF_AutoReflowElement*& pElm,
+ FX_BOOL bReleaseChildren) {
+ if (bReleaseChildren) {
+ int count = pElm->CountChildren();
+ for (int i = 0; i < count; i++) {
+ CPDF_AutoReflowElement* pChild =
+ (CPDF_AutoReflowElement*)pElm->GetChild(i);
+ ReleaseElm(pChild);
+ }
+ }
+ delete pElm;
+ pElm = NULL;
+}
+void CPDF_AutoReflowLayoutProvider::AddObjectArray(CPDF_AutoReflowElement* pElm,
+ CFX_PtrList& ObjList) {
+ if (!pElm) {
return;
-}
-void CPDF_AutoReflowLayoutProvider::CreateElement()
-{
+ }
+ FX_POSITION pos = ObjList.GetHeadPosition();
+ while (pos) {
+ pElm->m_ObjArray.Add((CPDF_PageObject*)ObjList.GetNext(pos));
+ }
+}
+void CPDF_AutoReflowLayoutProvider::GenerateStructTree() {
+ if (m_Step < AUTOREFLOW_STEP_GENERATELINE) {
+ GenerateLine(m_cellArray);
+ if (m_cellArray.GetSize() == 0) {
+ m_Status = LayoutError;
+ return;
+ }
+ if (m_pPause && m_pPause->NeedToPauseNow()) {
+ m_Step = AUTOREFLOW_STEP_GENERATELINE;
+ m_Status = LayoutToBeContinued;
+ return;
+ }
+ }
+ if (m_Step < AUTOREFLOW_STEP_GENERATEParagraph) {
+ GenerateParagraph(m_cellArray);
+ if (m_pPause && m_pPause->NeedToPauseNow()) {
+ m_Step = AUTOREFLOW_STEP_GENERATEParagraph;
+ m_Status = LayoutToBeContinued;
+ return;
+ }
+ }
+ if (m_Step < AUTOREFLOW_STEP_CREATEELEMENT) {
+ CreateElement();
+ if (m_pPause && m_pPause->NeedToPauseNow()) {
+ m_Step = AUTOREFLOW_STEP_CREATEELEMENT;
+ m_Status = LayoutToBeContinued;
+ return;
+ }
+ }
+ if (m_Step < AUTOREFLOW_STEP_REMOVEDATA) {
int count = m_cellArray.GetSize();
- CRF_CELL* plastCell = NULL;
- CRF_CELL* pCell = NULL;
- CRF_CELL* pNextCell = NULL;
- CPDF_AutoReflowElement* pParent = m_pRoot;
- CPDF_AutoReflowElement* pCurrElm = NULL;
- int i;
- for(i = 0; i < count; i++) {
- pCell = (CRF_CELL*)m_cellArray.GetAt(i);
- if(!pCell) {
- continue;
- }
- if(i < count - 1) {
- pNextCell = (CRF_CELL*)m_cellArray.GetAt(i + 1);
- } else {
- pNextCell = NULL;
- }
- pCurrElm = NULL;
- pCurrElm = FX_NEW CPDF_AutoReflowElement(LayoutParagraph, pParent);
- if(pCurrElm->GetType() == LayoutParagraph && plastCell) {
- int SpaceBefore = 0;
- if(pCell->m_CellWritingMode != plastCell->m_CellWritingMode ) {
- SpaceBefore = 20;
- } else if(pCell->m_CellWritingMode == WritingMode_LRTB) {
- SpaceBefore = plastCell->m_BBox.bottom - pCell->m_BBox.top;
- } else if(pCell->m_CellWritingMode == WritingMode_TBRL) {
- SpaceBefore = plastCell->m_BBox.left - pCell->m_BBox.right;
- }
- if(SpaceBefore > 0) {
- pCurrElm->m_SpaceBefore = SpaceBefore > 50 ? 50.0f : SpaceBefore;
- }
- }
- AddObjectArray(pCurrElm, pCell->m_ObjList);
- plastCell = pCell;
- }
-}
-void CPDF_AutoReflowLayoutProvider::GenerateParagraph(CFX_PtrArray& cellArray)
-{
- int count = cellArray.GetSize();
- if(count <= 1) {
- return;
- }
- CRF_CELL* plastCell = (CRF_CELL*)cellArray.GetAt(0);
- if(plastCell->m_BBox.Height() > plastCell->m_BBox.Width()) {
- m_WritingMode = WritingMode_TBRL;
+ for (int i = 0; i < count; i++) {
+ CRF_CELL* pCell = (CRF_CELL*)m_cellArray.GetAt(i);
+ if (pCell) {
+ pCell->m_ObjList.RemoveAll();
+ delete pCell;
+ }
+ }
+ m_cellArray.RemoveAll();
+ if (m_pPause && m_pPause->NeedToPauseNow()) {
+ m_Step = AUTOREFLOW_STEP_REMOVEDATA;
+ m_Status = LayoutToBeContinued;
+ return;
+ }
+ }
+ m_Step = AUTOREFLOW_STEP_REMOVEDATA;
+ m_Status = LayoutFinished;
+ return;
+}
+void CPDF_AutoReflowLayoutProvider::CreateElement() {
+ int count = m_cellArray.GetSize();
+ CRF_CELL* plastCell = NULL;
+ CRF_CELL* pCell = NULL;
+ CRF_CELL* pNextCell = NULL;
+ CPDF_AutoReflowElement* pParent = m_pRoot;
+ CPDF_AutoReflowElement* pCurrElm = NULL;
+ int i;
+ for (i = 0; i < count; i++) {
+ pCell = (CRF_CELL*)m_cellArray.GetAt(i);
+ if (!pCell) {
+ continue;
+ }
+ if (i < count - 1) {
+ pNextCell = (CRF_CELL*)m_cellArray.GetAt(i + 1);
} else {
- m_WritingMode = WritingMode_LRTB;
- }
- FX_BOOL bEnforce = FALSE;
- int i = 0;
- for(i = 1; i < count; i++) {
- CRF_CELL* pCell = (CRF_CELL*)cellArray.GetAt(i);
- if(!pCell) {
+ pNextCell = NULL;
+ }
+ pCurrElm = NULL;
+ pCurrElm = FX_NEW CPDF_AutoReflowElement(LayoutParagraph, pParent);
+ if (pCurrElm->GetType() == LayoutParagraph && plastCell) {
+ int SpaceBefore = 0;
+ if (pCell->m_CellWritingMode != plastCell->m_CellWritingMode) {
+ SpaceBefore = 20;
+ } else if (pCell->m_CellWritingMode == WritingMode_LRTB) {
+ SpaceBefore = plastCell->m_BBox.bottom - pCell->m_BBox.top;
+ } else if (pCell->m_CellWritingMode == WritingMode_TBRL) {
+ SpaceBefore = plastCell->m_BBox.left - pCell->m_BBox.right;
+ }
+ if (SpaceBefore > 0) {
+ pCurrElm->m_SpaceBefore = SpaceBefore > 50 ? 50.0f : SpaceBefore;
+ }
+ }
+ AddObjectArray(pCurrElm, pCell->m_ObjList);
+ plastCell = pCell;
+ }
+}
+void CPDF_AutoReflowLayoutProvider::GenerateParagraph(CFX_PtrArray& cellArray) {
+ int count = cellArray.GetSize();
+ if (count <= 1) {
+ return;
+ }
+ CRF_CELL* plastCell = (CRF_CELL*)cellArray.GetAt(0);
+ if (plastCell->m_BBox.Height() > plastCell->m_BBox.Width()) {
+ m_WritingMode = WritingMode_TBRL;
+ } else {
+ m_WritingMode = WritingMode_LRTB;
+ }
+ FX_BOOL bEnforce = FALSE;
+ int i = 0;
+ for (i = 1; i < count; i++) {
+ CRF_CELL* pCell = (CRF_CELL*)cellArray.GetAt(i);
+ if (!pCell) {
+ continue;
+ }
+ int c = pCell->m_ObjList.GetCount();
+ FX_BOOL bMerge = FALSE;
+ FX_POSITION pos1 = plastCell->m_ObjList.GetTailPosition();
+ CPDF_PageObject* pLastObj =
+ (CPDF_PageObject*)plastCell->m_ObjList.GetPrev(pos1);
+ pos1 = pCell->m_ObjList.GetHeadPosition();
+ CPDF_PageObject* pCurObj = (CPDF_PageObject*)pCell->m_ObjList.GetNext(pos1);
+ int WritingMode = GetRectEnd(pCell->m_BBox);
+ if (pCell->m_CellWritingMode == WritingMode_UNKNOW) {
+ if (pCell->m_BBox.Height() > pCell->m_BBox.Width()) {
+ pCell->m_CellWritingMode = WritingMode_TBRL;
+ } else {
+ pCell->m_CellWritingMode = WritingMode_LRTB;
+ }
+ }
+ WritingMode = pCell->m_CellWritingMode;
+ if (WritingMode == WritingMode_LRTB &&
+ (m_Style.m_Language & LP_Lang_ChinesePRC ||
+ m_Style.m_Language & LP_Lang_ChineseTaiwan ||
+ m_Style.m_Language & LP_Lang_Japanese ||
+ m_Style.m_Language & LP_Lang_Korean)) {
+ if (pCurObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pText;
+ pText = (CPDF_TextObject*)pCurObj;
+ if (pText->CountItems()) {
+ CPDF_TextObjectItem item;
+ pText->GetItemInfo(0, &item);
+ CFX_WideString str =
+ pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ FX_WCHAR unicode = str.GetAt(0);
+ if (unicode == 32) {
+ plastCell = pCell;
+ bMerge = FALSE;
+ bEnforce = FALSE;
continue;
- }
- int c = pCell->m_ObjList.GetCount();
- FX_BOOL bMerge = FALSE;
- FX_POSITION pos1 = plastCell->m_ObjList.GetTailPosition();
- CPDF_PageObject* pLastObj = (CPDF_PageObject*)plastCell->m_ObjList.GetPrev(pos1);
- pos1 = pCell->m_ObjList.GetHeadPosition();
- CPDF_PageObject* pCurObj = (CPDF_PageObject*)pCell->m_ObjList.GetNext(pos1);
- int WritingMode = GetRectEnd(pCell->m_BBox);
- if(pCell->m_CellWritingMode == WritingMode_UNKNOW) {
- if(pCell->m_BBox.Height() > pCell->m_BBox.Width()) {
- pCell->m_CellWritingMode = WritingMode_TBRL;
- } else {
- pCell->m_CellWritingMode = WritingMode_LRTB;
+ }
+ }
+ }
+ }
+ if (m_WritingMode == WritingMode) {
+ if (bEnforce) {
+ bMerge = FALSE;
+ bEnforce = FALSE;
+ if (pCurObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pText;
+ pText = (CPDF_TextObject*)pCurObj;
+ if (pText->CountItems()) {
+ CPDF_TextObjectItem item;
+ pText->GetItemInfo(0, &item);
+ CFX_WideString str =
+ pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ FX_WCHAR unicode = str.GetAt(0);
+ if (unicode > 96 && unicode < 123) {
+ bMerge = TRUE;
}
- }
- WritingMode = pCell->m_CellWritingMode;
- if(WritingMode == WritingMode_LRTB && (m_Style.m_Language & LP_Lang_ChinesePRC || m_Style.m_Language & LP_Lang_ChineseTaiwan
- || m_Style.m_Language & LP_Lang_Japanese || m_Style.m_Language & LP_Lang_Korean)) {
- if(pCurObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* pText;
+ }
+ } else {
+ CPDF_ImageObject* pImage = (CPDF_ImageObject*)pCurObj;
+ FX_RECT imageBBox = pImage->GetBBox(&m_PDFDisplayMatrix);
+ if (GetRectEnd(plastCell->m_BBox) - GetRectEnd(pCell->m_BBox) <
+ GetRectWidth(imageBBox)) {
+ bMerge = TRUE;
+ }
+ }
+ } else {
+ if (!approachto(GetRectStart(pCell->m_BBox),
+ GetRectStart(plastCell->m_BBox),
+ GetRectHeight(pCell->m_BBox) / 4)) {
+ if (approachto(GetRectStart(plastCell->m_BBox),
+ GetRectStart(pCell->m_BBox),
+ GetRectHeight(pCell->m_BBox) * 2.3) &&
+ GetRectStart(plastCell->m_BBox) - GetRectStart(pCell->m_BBox) >
+ 0) {
+ if (pCurObj->m_Type == PDFPAGE_TEXT ||
+ pLastObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pText;
+ if (pCurObj->m_Type == PDFPAGE_TEXT) {
pText = (CPDF_TextObject*)pCurObj;
- if(pText->CountItems()) {
- CPDF_TextObjectItem item;
- pText->GetItemInfo(0, &item);
- CFX_WideString str = pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- FX_WCHAR unicode = str.GetAt(0);
- if(unicode == 32) {
- plastCell = pCell;
- bMerge = FALSE;
- bEnforce = FALSE;
- continue;
- }
- }
+ } else {
+ pText = (CPDF_TextObject*)pLastObj;
+ }
+ CPDF_TextObjectItem item;
+ pText->GetItemInfo(0, &item);
+ CFX_WideString str =
+ pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ FX_WCHAR unicode = str.GetAt(0);
+ if (unicode > 255) {
+ bMerge = TRUE;
+ }
}
- }
- if(m_WritingMode == WritingMode) {
- if(bEnforce) {
- bMerge = FALSE;
- bEnforce = FALSE;
- if(pCurObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* pText;
- pText = (CPDF_TextObject*)pCurObj;
- if(pText->CountItems()) {
- CPDF_TextObjectItem item;
- pText->GetItemInfo(0, &item);
- CFX_WideString str = pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- FX_WCHAR unicode = str.GetAt(0);
- if(unicode > 96 && unicode < 123) {
- bMerge = TRUE;
- }
- }
- } else {
- CPDF_ImageObject* pImage = (CPDF_ImageObject*)pCurObj;
- FX_RECT imageBBox = pImage->GetBBox(&m_PDFDisplayMatrix);
- if(GetRectEnd(plastCell->m_BBox) - GetRectEnd(pCell->m_BBox) < GetRectWidth(imageBBox)) {
- bMerge = TRUE;
- }
- }
- } else {
- if(!approachto(GetRectStart(pCell->m_BBox), GetRectStart(plastCell->m_BBox), GetRectHeight(pCell->m_BBox) / 4)) {
- if(approachto(GetRectStart(plastCell->m_BBox), GetRectStart(pCell->m_BBox), GetRectHeight(pCell->m_BBox) * 2.3) &&
- GetRectStart(plastCell->m_BBox) - GetRectStart(pCell->m_BBox) > 0) {
- if(pCurObj->m_Type == PDFPAGE_TEXT || pLastObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* pText;
- if(pCurObj->m_Type == PDFPAGE_TEXT) {
- pText = (CPDF_TextObject*)pCurObj;
- } else {
- pText = (CPDF_TextObject*)pLastObj;
- }
- CPDF_TextObjectItem item;
- pText->GetItemInfo(0, &item);
- CFX_WideString str = pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- FX_WCHAR unicode = str.GetAt(0);
- if(unicode > 255) {
- bMerge = TRUE;
- }
- }
- }
- } else if(!approachto(GetRectEnd(pCell->m_BBox), GetRectEnd(plastCell->m_BBox), GetRectHeight(pCell->m_BBox) * 3)) {
- FX_RECT rect = pLastObj->GetBBox(&m_PDFDisplayMatrix);
- if(approachto(GetRectStart(pCell->m_BBox), GetRectStart(plastCell->m_BBox), GetRectHeight(pCell->m_BBox) / 4)) {
- if(GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) > 0) {
- bMerge = TRUE;
- bEnforce = TRUE;
- } else if(GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) <= 0 &&
- GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) > GetRectHeight(pCell->m_BBox) * -3) {
- if(pCurObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* pText = (CPDF_TextObject*)pCurObj;
- CPDF_TextObjectItem item;
- pText->GetItemInfo(0, &item);
- CFX_WideString str = pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- FX_WCHAR unicode = str.GetAt(0);
- if(unicode > 96 && unicode < 123) {
- bMerge = TRUE;
- }
- }
- }
- }
- } else {
- bMerge = TRUE;
+ }
+ } else if (!approachto(GetRectEnd(pCell->m_BBox),
+ GetRectEnd(plastCell->m_BBox),
+ GetRectHeight(pCell->m_BBox) * 3)) {
+ FX_RECT rect = pLastObj->GetBBox(&m_PDFDisplayMatrix);
+ if (approachto(GetRectStart(pCell->m_BBox),
+ GetRectStart(plastCell->m_BBox),
+ GetRectHeight(pCell->m_BBox) / 4)) {
+ if (GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) > 0) {
+ bMerge = TRUE;
+ bEnforce = TRUE;
+ } else if (GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) <= 0 &&
+ GetRectEnd(rect) - GetRectEnd(pCell->m_BBox) >
+ GetRectHeight(pCell->m_BBox) * -3) {
+ if (pCurObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pText = (CPDF_TextObject*)pCurObj;
+ CPDF_TextObjectItem item;
+ pText->GetItemInfo(0, &item);
+ CFX_WideString str =
+ pText->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ FX_WCHAR unicode = str.GetAt(0);
+ if (unicode > 96 && unicode < 123) {
+ bMerge = TRUE;
}
+ }
}
+ }
} else {
- m_WritingMode = WritingMode;
- bEnforce = FALSE;
- }
- if(bMerge) {
- if(GetRectEnd(plastCell->m_BBox) - GetRectEnd(pCell->m_BBox) > 30) {
- bEnforce = TRUE;
- }
- FX_POSITION pos = pCell->m_ObjList.GetHeadPosition();
- while(pos) {
- plastCell->m_ObjList.AddTail(pCell->m_ObjList.GetNext(pos));
- }
- plastCell->m_BBox.Union(pCell->m_BBox);
- pCell->m_ObjList.RemoveAll();
- delete pCell;
- cellArray.RemoveAt(i);
- i--;
- count--;
- } else {
- plastCell = pCell;
+ bMerge = TRUE;
}
+ }
+ } else {
+ m_WritingMode = WritingMode;
+ bEnforce = FALSE;
+ }
+ if (bMerge) {
+ if (GetRectEnd(plastCell->m_BBox) - GetRectEnd(pCell->m_BBox) > 30) {
+ bEnforce = TRUE;
+ }
+ FX_POSITION pos = pCell->m_ObjList.GetHeadPosition();
+ while (pos) {
+ plastCell->m_ObjList.AddTail(pCell->m_ObjList.GetNext(pos));
+ }
+ plastCell->m_BBox.Union(pCell->m_BBox);
+ pCell->m_ObjList.RemoveAll();
+ delete pCell;
+ cellArray.RemoveAt(i);
+ i--;
+ count--;
+ } else {
+ plastCell = pCell;
}
+ }
}
-void CPDF_AutoReflowLayoutProvider::ProcessObj(CFX_PtrArray& cellArray, CPDF_PageObject* pObj, CFX_AffineMatrix matrix)
-{
+void CPDF_AutoReflowLayoutProvider::ProcessObj(CFX_PtrArray& cellArray,
+ CPDF_PageObject* pObj,
+ CFX_AffineMatrix matrix) {
}
-FX_INT32 CPDF_AutoReflowLayoutProvider::LogicPreObj(CPDF_PageObject* pObj)
-{
- CPDF_PageObject* pPreObj = m_pPreObj;
- m_pPreObj = pObj;
- if(!pPreObj) {
- return 0;
- }
- if(pPreObj->m_Type != pObj->m_Type) {
- return 0;
- }
- CFX_FloatRect rcCurObj(pObj->m_Left, pObj->m_Bottom, pObj->m_Right, pObj->m_Top);
- CFX_FloatRect rcPreObj(pPreObj->m_Left, pPreObj->m_Bottom, pPreObj->m_Right, pPreObj->m_Top);
- if(pObj->m_Type == PDFPAGE_IMAGE) {
- if(rcPreObj.Contains(rcCurObj)) {
- return 2;
- }
- if(rcCurObj.Contains(rcPreObj)) {
- return 2;
- }
- return 0;
- }
- if(pObj->m_Type == PDFPAGE_TEXT) {
- if(!((rcPreObj.bottom > rcCurObj.top) || (rcPreObj.top < rcCurObj.bottom))) {
- FX_FLOAT height = FX_MIN(rcPreObj.Height(), rcCurObj.Height());
- if((rcCurObj.left - rcPreObj.right) > height / 3) {
- return 3;
- }
- }
- if(FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) >= 2 || FXSYS_fabs(rcPreObj.Height() - rcCurObj.Height()) >= 2 ) {
- return 0;
- }
- CPDF_TextObject* pPreTextObj = (CPDF_TextObject*)pPreObj;
- CPDF_TextObject* pCurTextObj = (CPDF_TextObject*)pObj;
- int nPreCount = pPreTextObj->CountItems();
- int nCurCount = pCurTextObj->CountItems();
- if (nPreCount != nCurCount) {
- return 0;
- }
- FX_BOOL bSame = TRUE;
- for (int i = 0; i < nPreCount; i++) {
- CPDF_TextObjectItem itemPer, itemCur;
- pPreTextObj->GetItemInfo(i, &itemPer);
- pCurTextObj->GetItemInfo(i, &itemCur);
- if (itemCur.m_CharCode != itemPer.m_CharCode) {
- return 0;
- }
- if (itemCur.m_OriginX != itemPer.m_OriginX) {
- bSame = FALSE;
- }
- if (itemCur.m_OriginY != itemPer.m_OriginY) {
- bSame = FALSE;
- }
- }
- if(rcPreObj.left == rcCurObj.left && rcPreObj.top == rcCurObj.top) {
- return 1;
- }
- if(FXSYS_fabs(rcPreObj.left - rcCurObj.left) < rcPreObj.Width() / 3
- && FXSYS_fabs(rcPreObj.top - rcCurObj.top) < rcPreObj.Height() / 3) {
- return 2;
- }
+FX_INT32 CPDF_AutoReflowLayoutProvider::LogicPreObj(CPDF_PageObject* pObj) {
+ CPDF_PageObject* pPreObj = m_pPreObj;
+ m_pPreObj = pObj;
+ if (!pPreObj) {
+ return 0;
+ }
+ if (pPreObj->m_Type != pObj->m_Type) {
+ return 0;
+ }
+ CFX_FloatRect rcCurObj(
+ pObj->m_Left, pObj->m_Bottom, pObj->m_Right, pObj->m_Top);
+ CFX_FloatRect rcPreObj(
+ pPreObj->m_Left, pPreObj->m_Bottom, pPreObj->m_Right, pPreObj->m_Top);
+ if (pObj->m_Type == PDFPAGE_IMAGE) {
+ if (rcPreObj.Contains(rcCurObj)) {
+ return 2;
+ }
+ if (rcCurObj.Contains(rcPreObj)) {
+ return 2;
}
return 0;
-}
-void CPDF_AutoReflowLayoutProvider::GenerateLine(CFX_PtrArray& cellArray)
-{
- CRF_CELL* pCell = NULL;
- CFX_AffineMatrix matrix;
- FX_POSITION pos = m_pPDFPage->GetFirstObjectPosition();
- if(!pos) {
- return;
- }
- FX_FLOAT PDFWidth = m_pPDFPage->GetPageWidth();
- FX_FLOAT PDFHeight = m_pPDFPage->GetPageHeight();
- m_pPDFPage->GetDisplayMatrix(m_PDFDisplayMatrix, 0, 0, (int)PDFWidth, (int)PDFHeight, 0);
- CPDF_PageObject* pPerObj = NULL;
- int a = 0;
- CFX_FloatRect pageBBox = m_pPDFPage->m_BBox;
- FX_FLOAT PrevX = 0 , PrevY = 0, PosX, PosY;
- while(pos) {
- CPDF_PageObject* pObj = m_pPDFPage->GetNextObject(pos);
- if(!pObj || pObj->m_Type == PDFPAGE_PATH) {
- continue;
- }
- int logic = LogicPreObj(pObj);
- if(logic == 2) {
- if(pCell) {
- pCell->m_ObjList.SetAt(pCell->m_ObjList.GetTailPosition(), pObj);
- }
- continue;
- }
- if (pObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* pTextObj = (CPDF_TextObject*)pObj;
- int textmode = pTextObj->m_TextState.GetObject()->m_TextMode;
- if(m_Style.m_bIgnoreInvisibleText && pTextObj->m_TextState.GetObject()->m_TextMode == 3) {
- continue;
- }
- PosX = pTextObj->GetPosX();
- PosY = pTextObj->GetPosY();
- m_PDFDisplayMatrix.Transform(PosX, PosY);
- } else {
- PosX = 0;
- PosY = 0;
- }
- FX_BOOL bNewLine = TRUE;
- FX_RECT ObjBBox = pObj->GetBBox(&m_PDFDisplayMatrix);
- if(ObjBBox.left > PDFWidth || ObjBBox.right < 0 ||
- ObjBBox.bottom < 0 || ObjBBox.top > PDFHeight) {
- continue;
- }
- if(ObjBBox.IsEmpty()) {
- continue;
- }
- a++;
- if(!pCell) {
- bNewLine = TRUE;
- m_WritingMode = GetWritingMode(NULL, pObj);
+ }
+ if (pObj->m_Type == PDFPAGE_TEXT) {
+ if (!((rcPreObj.bottom > rcCurObj.top) ||
+ (rcPreObj.top < rcCurObj.bottom))) {
+ FX_FLOAT height = FX_MIN(rcPreObj.Height(), rcCurObj.Height());
+ if ((rcCurObj.left - rcPreObj.right) > height / 3) {
+ return 3;
+ }
+ }
+ if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) >= 2 ||
+ FXSYS_fabs(rcPreObj.Height() - rcCurObj.Height()) >= 2) {
+ return 0;
+ }
+ CPDF_TextObject* pPreTextObj = (CPDF_TextObject*)pPreObj;
+ CPDF_TextObject* pCurTextObj = (CPDF_TextObject*)pObj;
+ int nPreCount = pPreTextObj->CountItems();
+ int nCurCount = pCurTextObj->CountItems();
+ if (nPreCount != nCurCount) {
+ return 0;
+ }
+ FX_BOOL bSame = TRUE;
+ for (int i = 0; i < nPreCount; i++) {
+ CPDF_TextObjectItem itemPer, itemCur;
+ pPreTextObj->GetItemInfo(i, &itemPer);
+ pCurTextObj->GetItemInfo(i, &itemCur);
+ if (itemCur.m_CharCode != itemPer.m_CharCode) {
+ return 0;
+ }
+ if (itemCur.m_OriginX != itemPer.m_OriginX) {
+ bSame = FALSE;
+ }
+ if (itemCur.m_OriginY != itemPer.m_OriginY) {
+ bSame = FALSE;
+ }
+ }
+ if (rcPreObj.left == rcCurObj.left && rcPreObj.top == rcCurObj.top) {
+ return 1;
+ }
+ if (FXSYS_fabs(rcPreObj.left - rcCurObj.left) < rcPreObj.Width() / 3 &&
+ FXSYS_fabs(rcPreObj.top - rcCurObj.top) < rcPreObj.Height() / 3) {
+ return 2;
+ }
+ }
+ return 0;
+}
+void CPDF_AutoReflowLayoutProvider::GenerateLine(CFX_PtrArray& cellArray) {
+ CRF_CELL* pCell = NULL;
+ CFX_AffineMatrix matrix;
+ FX_POSITION pos = m_pPDFPage->GetFirstObjectPosition();
+ if (!pos) {
+ return;
+ }
+ FX_FLOAT PDFWidth = m_pPDFPage->GetPageWidth();
+ FX_FLOAT PDFHeight = m_pPDFPage->GetPageHeight();
+ m_pPDFPage->GetDisplayMatrix(
+ m_PDFDisplayMatrix, 0, 0, (int)PDFWidth, (int)PDFHeight, 0);
+ CPDF_PageObject* pPerObj = NULL;
+ int a = 0;
+ CFX_FloatRect pageBBox = m_pPDFPage->m_BBox;
+ FX_FLOAT PrevX = 0, PrevY = 0, PosX, PosY;
+ while (pos) {
+ CPDF_PageObject* pObj = m_pPDFPage->GetNextObject(pos);
+ if (!pObj || pObj->m_Type == PDFPAGE_PATH) {
+ continue;
+ }
+ int logic = LogicPreObj(pObj);
+ if (logic == 2) {
+ if (pCell) {
+ pCell->m_ObjList.SetAt(pCell->m_ObjList.GetTailPosition(), pObj);
+ }
+ continue;
+ }
+ if (pObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pTextObj = (CPDF_TextObject*)pObj;
+ int textmode = pTextObj->m_TextState.GetObject()->m_TextMode;
+ if (m_Style.m_bIgnoreInvisibleText &&
+ pTextObj->m_TextState.GetObject()->m_TextMode == 3) {
+ continue;
+ }
+ PosX = pTextObj->GetPosX();
+ PosY = pTextObj->GetPosY();
+ m_PDFDisplayMatrix.Transform(PosX, PosY);
+ } else {
+ PosX = 0;
+ PosY = 0;
+ }
+ FX_BOOL bNewLine = TRUE;
+ FX_RECT ObjBBox = pObj->GetBBox(&m_PDFDisplayMatrix);
+ if (ObjBBox.left > PDFWidth || ObjBBox.right < 0 || ObjBBox.bottom < 0 ||
+ ObjBBox.top > PDFHeight) {
+ continue;
+ }
+ if (ObjBBox.IsEmpty()) {
+ continue;
+ }
+ a++;
+ if (!pCell) {
+ bNewLine = TRUE;
+ m_WritingMode = GetWritingMode(NULL, pObj);
+ } else {
+ int WritingMode = GetWritingMode(pPerObj, pObj);
+ if (m_WritingMode == WritingMode || m_WritingMode == WritingMode_UNKNOW ||
+ WritingMode == WritingMode_UNKNOW) {
+ if (WritingMode != WritingMode_UNKNOW) {
+ m_WritingMode = WritingMode;
+ }
+ if (m_WritingMode == WritingMode_TBRL) {
+ if (!(GetRectBottom(ObjBBox) > GetRectTop(pCell->m_BBox) ||
+ GetRectTop(ObjBBox) < GetRectBottom(pCell->m_BBox))) {
+ bNewLine = FALSE;
+ }
} else {
- int WritingMode = GetWritingMode(pPerObj, pObj);
- if(m_WritingMode == WritingMode || m_WritingMode == WritingMode_UNKNOW || WritingMode == WritingMode_UNKNOW) {
- if(WritingMode != WritingMode_UNKNOW) {
- m_WritingMode = WritingMode;
- }
- if(m_WritingMode == WritingMode_TBRL) {
- if(!(GetRectBottom(ObjBBox) > GetRectTop(pCell->m_BBox) ||
- GetRectTop(ObjBBox) < GetRectBottom(pCell->m_BBox))) {
- bNewLine = FALSE;
- }
- } else {
- if(!(GetRectBottom(ObjBBox) < GetRectTop(pCell->m_BBox) ||
- GetRectTop(ObjBBox) > GetRectBottom(pCell->m_BBox))) {
- bNewLine = FALSE;
- }
- if (pObj->m_Type == PDFPAGE_TEXT) {
- if(FXSYS_fabs(PrevY - PosY) < 1 ) {
- bNewLine = FALSE;
- }
- }
- }
- } else {
- m_WritingMode = WritingMode;
- }
- }
- pPerObj = pObj;
- if(bNewLine) {
- int c = pCell ? pCell->m_ObjList.GetCount() : 0;
- pCell = FX_NEW CRF_CELL;
- pCell->m_CellWritingMode = m_WritingMode;
- pCell->m_BBox = ObjBBox;
- if(pObj->m_Type == PDFPAGE_TEXT) {
- FX_FLOAT x = ((CPDF_TextObject*)pObj)->GetPosX(), y = ((CPDF_TextObject*)pObj)->GetPosY();
- m_PDFDisplayMatrix.Transform(x, y);
- if(x < ObjBBox.left) {
- pCell->m_BBox.left = (int)x;
- }
+ if (!(GetRectBottom(ObjBBox) < GetRectTop(pCell->m_BBox) ||
+ GetRectTop(ObjBBox) > GetRectBottom(pCell->m_BBox))) {
+ bNewLine = FALSE;
+ }
+ if (pObj->m_Type == PDFPAGE_TEXT) {
+ if (FXSYS_fabs(PrevY - PosY) < 1) {
+ bNewLine = FALSE;
}
- pCell->m_ObjList.AddTail(pObj);
- cellArray.Add(pCell);
- } else {
- pCell->m_ObjList.AddTail(pObj);
- pCell->m_BBox.Union(ObjBBox);
- }
- PrevX = PosX;
- PrevY = PosY;
- }
-}
-FX_FLOAT CPDF_AutoReflowLayoutProvider::GetLayoutOrderHeight(CPDF_PageObject* pCurObj)
-{
- CFX_FloatRect rcCurObj(pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
- if (m_WritingMode == WritingMode_TBRL) {
- return rcCurObj.Width();
- }
- return rcCurObj.Height();
-}
-FX_FLOAT CPDF_AutoReflowLayoutProvider::GetLayoutOrderWidth(CPDF_PageObject* pCurObj)
-{
- CFX_FloatRect rcCurObj(pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
- if (m_WritingMode == WritingMode_TBRL) {
- return rcCurObj.Height();
- }
+ }
+ }
+ } else {
+ m_WritingMode = WritingMode;
+ }
+ }
+ pPerObj = pObj;
+ if (bNewLine) {
+ int c = pCell ? pCell->m_ObjList.GetCount() : 0;
+ pCell = FX_NEW CRF_CELL;
+ pCell->m_CellWritingMode = m_WritingMode;
+ pCell->m_BBox = ObjBBox;
+ if (pObj->m_Type == PDFPAGE_TEXT) {
+ FX_FLOAT x = ((CPDF_TextObject*)pObj)->GetPosX(),
+ y = ((CPDF_TextObject*)pObj)->GetPosY();
+ m_PDFDisplayMatrix.Transform(x, y);
+ if (x < ObjBBox.left) {
+ pCell->m_BBox.left = (int)x;
+ }
+ }
+ pCell->m_ObjList.AddTail(pObj);
+ cellArray.Add(pCell);
+ } else {
+ pCell->m_ObjList.AddTail(pObj);
+ pCell->m_BBox.Union(ObjBBox);
+ }
+ PrevX = PosX;
+ PrevY = PosY;
+ }
+}
+FX_FLOAT CPDF_AutoReflowLayoutProvider::GetLayoutOrderHeight(
+ CPDF_PageObject* pCurObj) {
+ CFX_FloatRect rcCurObj(
+ pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
+ if (m_WritingMode == WritingMode_TBRL) {
return rcCurObj.Width();
+ }
+ return rcCurObj.Height();
+}
+FX_FLOAT CPDF_AutoReflowLayoutProvider::GetLayoutOrderWidth(
+ CPDF_PageObject* pCurObj) {
+ CFX_FloatRect rcCurObj(
+ pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
+ if (m_WritingMode == WritingMode_TBRL) {
+ return rcCurObj.Height();
+ }
+ return rcCurObj.Width();
}
-int CPDF_AutoReflowLayoutProvider:: GetRectWidth(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.Height();
- }
- return rect.Width();
-}
-int CPDF_AutoReflowLayoutProvider:: GetRectHeight(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.Width();
- }
+int CPDF_AutoReflowLayoutProvider::GetRectWidth(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
return rect.Height();
+ }
+ return rect.Width();
}
-int CPDF_AutoReflowLayoutProvider:: GetRectStart(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.top;
- }
- return rect.left;
-}
-int CPDF_AutoReflowLayoutProvider:: GetRectEnd(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.bottom;
- }
- return rect.right;
+int CPDF_AutoReflowLayoutProvider::GetRectHeight(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
+ return rect.Width();
+ }
+ return rect.Height();
}
-int CPDF_AutoReflowLayoutProvider:: GetRectTop(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.right;
- }
+int CPDF_AutoReflowLayoutProvider::GetRectStart(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
return rect.top;
+ }
+ return rect.left;
}
-int CPDF_AutoReflowLayoutProvider:: GetRectBottom(FX_RECT rect)
-{
- if(m_WritingMode == WritingMode_TBRL) {
- return rect.left;
- }
+int CPDF_AutoReflowLayoutProvider::GetRectEnd(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
return rect.bottom;
+ }
+ return rect.right;
}
-int CPDF_AutoReflowLayoutProvider::GetWritingMode(CPDF_PageObject* pPreObj, CPDF_PageObject* pCurObj)
-{
- CFX_FloatRect rcCurObj(pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
- if(pCurObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* ptextObj = (CPDF_TextObject* )pCurObj;
- int count = ptextObj->CountItems();
- if(count > 1) {
- CPDF_TextObjectItem Item1, Item2;
- ptextObj->GetItemInfo(0, &Item1);
- ptextObj->GetItemInfo(count - 1, &Item2);
- if(Item2.m_CharCode == -1 && count > 2) {
- ptextObj->GetItemInfo(2, &Item2);
- }
- CFX_AffineMatrix textMatrix;
- ptextObj->GetTextMatrix(&textMatrix);
- textMatrix.Transform(Item1.m_OriginX, Item1.m_OriginY);
- textMatrix.Transform(Item2.m_OriginX, Item2.m_OriginY);
- FX_FLOAT dx = FXSYS_fabs(Item1.m_OriginX - Item2.m_OriginX);
- FX_FLOAT dy = FXSYS_fabs(Item1.m_OriginY - Item2.m_OriginY);
- return dx >= dy ? WritingMode_LRTB : WritingMode_TBRL;
- } else {
- if(m_WritingMode != WritingMode_UNKNOW) {
- return m_WritingMode;
- }
- }
- }
- if(pPreObj) {
- FX_FLOAT threshold = rcCurObj.Width() / 4;
- if(m_WritingMode == WritingMode_LRTB) {
- if(FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) < threshold * 2
- && FXSYS_fabs(pPreObj->m_Top - pCurObj->m_Top) < threshold * 2) {
- return m_WritingMode;
- }
- FX_FLOAT mid = (pCurObj->m_Bottom + pCurObj->m_Top) / 2;
- if(mid > pPreObj->m_Bottom && mid < pPreObj->m_Top && pCurObj->m_Right > pPreObj->m_Right) {
- return m_WritingMode;
- }
- } else if(m_WritingMode == WritingMode_TBRL) {
- if(FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) < threshold * 2
- && FXSYS_fabs(pPreObj->m_Right - pCurObj->m_Right) < threshold * 2) {
- return m_WritingMode;
- }
- FX_FLOAT mid = (pCurObj->m_Right + pCurObj->m_Left) / 2;
- if(mid > pPreObj->m_Left && mid < pPreObj->m_Right && pCurObj->m_Bottom < pPreObj->m_Bottom) {
- return m_WritingMode;
- }
- }
- if(FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) < threshold &&
- FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) > threshold * 2) {
- return WritingMode_TBRL;
- }
- if(FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) > threshold &&
- FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) < threshold * 2) {
- return WritingMode_LRTB;
- }
- int count = 0;
- if(pPreObj->m_Type == PDFPAGE_TEXT) {
- CPDF_TextObject* ptextObj = (CPDF_TextObject* )pCurObj;
- count = ptextObj->CountItems();
- }
- if(pPreObj->m_Type != PDFPAGE_TEXT || count == 1) {
- if(pCurObj->m_Left > pPreObj->m_Right) {
- FX_FLOAT mid = (pCurObj->m_Top + pCurObj->m_Bottom) / 2;
- if(mid < pPreObj->m_Top && mid > pPreObj->m_Bottom) {
- return WritingMode_LRTB;
- }
- }
- if(pCurObj->m_Top < pPreObj->m_Bottom) {
- FX_FLOAT mid = (pCurObj->m_Left + pCurObj->m_Right) / 2;
- if(mid < pPreObj->m_Right && mid > pPreObj->m_Left) {
- return WritingMode_TBRL;
- }
- }
- }
- }
- return WritingMode_UNKNOW;
-}
-LayoutStatus CPDF_AutoReflowLayoutProvider::StartLoad(IFX_Pause* pPause)
-{
- m_pPause = pPause;
- m_pRoot = FX_NEW CPDF_AutoReflowElement(LayoutDocument);
- if(!m_pRoot) {
- return LayoutError;
- }
- m_Step = 0;
- return Continue();
-}
-LayoutStatus CPDF_AutoReflowLayoutProvider::Continue()
-{
- GenerateStructTree();
- return m_Status;
+int CPDF_AutoReflowLayoutProvider::GetRectTop(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
+ return rect.right;
+ }
+ return rect.top;
}
-int CPDF_AutoReflowLayoutProvider::GetPosition()
-{
- if(m_Step == 0) {
- return 0;
+int CPDF_AutoReflowLayoutProvider::GetRectBottom(FX_RECT rect) {
+ if (m_WritingMode == WritingMode_TBRL) {
+ return rect.left;
+ }
+ return rect.bottom;
+}
+int CPDF_AutoReflowLayoutProvider::GetWritingMode(CPDF_PageObject* pPreObj,
+ CPDF_PageObject* pCurObj) {
+ CFX_FloatRect rcCurObj(
+ pCurObj->m_Left, pCurObj->m_Bottom, pCurObj->m_Right, pCurObj->m_Top);
+ if (pCurObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* ptextObj = (CPDF_TextObject*)pCurObj;
+ int count = ptextObj->CountItems();
+ if (count > 1) {
+ CPDF_TextObjectItem Item1, Item2;
+ ptextObj->GetItemInfo(0, &Item1);
+ ptextObj->GetItemInfo(count - 1, &Item2);
+ if (Item2.m_CharCode == -1 && count > 2) {
+ ptextObj->GetItemInfo(2, &Item2);
+ }
+ CFX_AffineMatrix textMatrix;
+ ptextObj->GetTextMatrix(&textMatrix);
+ textMatrix.Transform(Item1.m_OriginX, Item1.m_OriginY);
+ textMatrix.Transform(Item2.m_OriginX, Item2.m_OriginY);
+ FX_FLOAT dx = FXSYS_fabs(Item1.m_OriginX - Item2.m_OriginX);
+ FX_FLOAT dy = FXSYS_fabs(Item1.m_OriginY - Item2.m_OriginY);
+ return dx >= dy ? WritingMode_LRTB : WritingMode_TBRL;
} else {
- return m_Step * 100 / AUTOREFLOW_STEP_REMOVEDATA;
- }
+ if (m_WritingMode != WritingMode_UNKNOW) {
+ return m_WritingMode;
+ }
+ }
+ }
+ if (pPreObj) {
+ FX_FLOAT threshold = rcCurObj.Width() / 4;
+ if (m_WritingMode == WritingMode_LRTB) {
+ if (FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) < threshold * 2 &&
+ FXSYS_fabs(pPreObj->m_Top - pCurObj->m_Top) < threshold * 2) {
+ return m_WritingMode;
+ }
+ FX_FLOAT mid = (pCurObj->m_Bottom + pCurObj->m_Top) / 2;
+ if (mid > pPreObj->m_Bottom && mid < pPreObj->m_Top &&
+ pCurObj->m_Right > pPreObj->m_Right) {
+ return m_WritingMode;
+ }
+ } else if (m_WritingMode == WritingMode_TBRL) {
+ if (FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) < threshold * 2 &&
+ FXSYS_fabs(pPreObj->m_Right - pCurObj->m_Right) < threshold * 2) {
+ return m_WritingMode;
+ }
+ FX_FLOAT mid = (pCurObj->m_Right + pCurObj->m_Left) / 2;
+ if (mid > pPreObj->m_Left && mid < pPreObj->m_Right &&
+ pCurObj->m_Bottom < pPreObj->m_Bottom) {
+ return m_WritingMode;
+ }
+ }
+ if (FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) < threshold &&
+ FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) > threshold * 2) {
+ return WritingMode_TBRL;
+ }
+ if (FXSYS_fabs(pPreObj->m_Left - pCurObj->m_Left) > threshold &&
+ FXSYS_fabs(pPreObj->m_Bottom - pCurObj->m_Bottom) < threshold * 2) {
+ return WritingMode_LRTB;
+ }
+ int count = 0;
+ if (pPreObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* ptextObj = (CPDF_TextObject*)pCurObj;
+ count = ptextObj->CountItems();
+ }
+ if (pPreObj->m_Type != PDFPAGE_TEXT || count == 1) {
+ if (pCurObj->m_Left > pPreObj->m_Right) {
+ FX_FLOAT mid = (pCurObj->m_Top + pCurObj->m_Bottom) / 2;
+ if (mid < pPreObj->m_Top && mid > pPreObj->m_Bottom) {
+ return WritingMode_LRTB;
+ }
+ }
+ if (pCurObj->m_Top < pPreObj->m_Bottom) {
+ FX_FLOAT mid = (pCurObj->m_Left + pCurObj->m_Right) / 2;
+ if (mid < pPreObj->m_Right && mid > pPreObj->m_Left) {
+ return WritingMode_TBRL;
+ }
+ }
+ }
+ }
+ return WritingMode_UNKNOW;
+}
+LayoutStatus CPDF_AutoReflowLayoutProvider::StartLoad(IFX_Pause* pPause) {
+ m_pPause = pPause;
+ m_pRoot = FX_NEW CPDF_AutoReflowElement(LayoutDocument);
+ if (!m_pRoot) {
+ return LayoutError;
+ }
+ m_Step = 0;
+ return Continue();
+}
+LayoutStatus CPDF_AutoReflowLayoutProvider::Continue() {
+ GenerateStructTree();
+ return m_Status;
+}
+int CPDF_AutoReflowLayoutProvider::GetPosition() {
+ if (m_Step == 0) {
+ return 0;
+ } else {
+ return m_Step * 100 / AUTOREFLOW_STEP_REMOVEDATA;
+ }
}
-FX_FLOAT CPDF_AutoReflowLayoutProvider::GetObjMinCell(CPDF_PageObject* pObj)
-{
- if(!pObj) {
- return 0;
- }
- if(pObj->m_Type != PDFPAGE_TEXT) {
+FX_FLOAT CPDF_AutoReflowLayoutProvider::GetObjMinCell(CPDF_PageObject* pObj) {
+ if (!pObj) {
+ return 0;
+ }
+ if (pObj->m_Type != PDFPAGE_TEXT) {
+ CFX_AffineMatrix matrix;
+ FX_RECT rect = pObj->GetBBox(&matrix);
+ return (FX_FLOAT)(rect.Width());
+ }
+ CPDF_TextObject* pTextObj = (CPDF_TextObject*)pObj;
+ int count = pTextObj->CountItems();
+ for (int i = 0; i < count; i++) {
+ CPDF_TextObjectItem Item;
+ pTextObj->GetItemInfo(i, &Item);
+ if (Item.m_CharCode == -1) {
+ continue;
+ }
+ if ((Item.m_CharCode > 47 && Item.m_CharCode < 58) ||
+ (Item.m_CharCode > 64 && Item.m_CharCode < 91) ||
+ (Item.m_CharCode > 96 && Item.m_CharCode < 123)) {
+ continue;
+ }
+ if (Item.m_CharCode > 127 ||
+ (Item.m_CharCode > 32 && Item.m_CharCode < 35) ||
+ Item.m_CharCode == 37 ||
+ (Item.m_CharCode > 38 && Item.m_CharCode < 42) ||
+ Item.m_CharCode == 44 || Item.m_CharCode == 46 ||
+ Item.m_CharCode == 58 || Item.m_CharCode == 59 ||
+ Item.m_CharCode == 63 || Item.m_CharCode == 93) {
+ if (i == count - 1) {
CFX_AffineMatrix matrix;
FX_RECT rect = pObj->GetBBox(&matrix);
return (FX_FLOAT)(rect.Width());
- }
- CPDF_TextObject* pTextObj = (CPDF_TextObject* )pObj;
- int count = pTextObj->CountItems();
- for(int i = 0; i < count; i++) {
- CPDF_TextObjectItem Item;
- pTextObj->GetItemInfo(i, &Item);
- if(Item.m_CharCode == -1) {
- continue;
- }
- if((Item.m_CharCode > 47 && Item.m_CharCode < 58) || (Item.m_CharCode > 64 && Item.m_CharCode < 91)
- || (Item.m_CharCode > 96 && Item.m_CharCode < 123)) {
- continue;
- }
- if(Item.m_CharCode > 127 || (Item.m_CharCode > 32 && Item.m_CharCode < 35) || Item.m_CharCode == 37 ||
- (Item.m_CharCode > 38 && Item.m_CharCode < 42) || Item.m_CharCode == 44 || Item.m_CharCode == 46 ||
- Item.m_CharCode == 58 || Item.m_CharCode == 59 || Item.m_CharCode == 63 || Item.m_CharCode == 93) {
- if(i == count - 1) {
- CFX_AffineMatrix matrix;
- FX_RECT rect = pObj->GetBBox(&matrix);
- return (FX_FLOAT)(rect.Width());
- } else {
- pTextObj->GetItemInfo(i + 1, &Item);
- return Item.m_OriginX;
- }
- }
+ } else {
+ pTextObj->GetItemInfo(i + 1, &Item);
return Item.m_OriginX;
+ }
}
- CFX_AffineMatrix matrix;
- FX_RECT rect = pObj->GetBBox(&matrix);
- return (FX_FLOAT)(rect.Width());
+ return Item.m_OriginX;
+ }
+ CFX_AffineMatrix matrix;
+ FX_RECT rect = pObj->GetBBox(&matrix);
+ return (FX_FLOAT)(rect.Width());
}

Powered by Google App Engine
This is Rietveld 408576698