Index: core/src/reflow/reflowedtextpage.cpp |
diff --git a/core/src/reflow/reflowedtextpage.cpp b/core/src/reflow/reflowedtextpage.cpp |
index a5ad0be948206d69cdf51cfa25c6888e3aee42a4..e374c2f63482167eac82c65f2f90aadaeb09767e 100644 |
--- a/core/src/reflow/reflowedtextpage.cpp |
+++ b/core/src/reflow/reflowedtextpage.cpp |
@@ -1,402 +1,433 @@ |
// 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 "reflowedtextpage.h" |
-IPDF_TextPage* IPDF_TextPage::CreateReflowTextPage(IPDF_ReflowedPage* pRefPage) |
-{ |
- return FX_NEW CRF_TextPage(pRefPage); |
+IPDF_TextPage* IPDF_TextPage::CreateReflowTextPage( |
+ IPDF_ReflowedPage* pRefPage) { |
+ return FX_NEW CRF_TextPage(pRefPage); |
+} |
+CRF_TextPage::CRF_TextPage(IPDF_ReflowedPage* pRefPage) { |
+ m_pRefPage = (CPDF_ReflowedPage*)(pRefPage); |
+ m_pDataList = NULL; |
+ m_CountBSArray = NULL; |
} |
-CRF_TextPage::CRF_TextPage(IPDF_ReflowedPage* pRefPage) |
-{ |
- m_pRefPage = (CPDF_ReflowedPage*)(pRefPage); |
+CRF_TextPage::~CRF_TextPage() { |
+ if (m_pDataList) { |
+ delete m_pDataList; |
m_pDataList = NULL; |
+ } |
+ if (m_CountBSArray) { |
+ delete m_CountBSArray; |
m_CountBSArray = NULL; |
+ } |
} |
-CRF_TextPage::~CRF_TextPage() |
-{ |
- if(m_pDataList) { |
- delete m_pDataList; |
- m_pDataList = NULL; |
- } |
- if(m_CountBSArray) { |
- delete m_CountBSArray; |
- m_CountBSArray = NULL; |
- } |
+FX_BOOL CRF_TextPage::ParseTextPage() { |
+ if (!m_pRefPage) { |
+ return FALSE; |
+ } |
+ int count = m_pRefPage->m_pReflowed->GetSize(); |
+ if (count < 500) { |
+ m_pDataList = FX_NEW CRF_CharDataPtrArray(count); |
+ } else { |
+ m_pDataList = FX_NEW CRF_CharDataPtrArray(500); |
+ } |
+ if (NULL == m_pDataList) { |
+ return FALSE; |
+ } |
+ for (int i = 0; i < count; i++) { |
+ CRF_Data* pData = (*(m_pRefPage->m_pReflowed))[i]; |
+ if (pData->GetType() == CRF_Data::Text) { |
+ m_pDataList->Add((CRF_CharData*)pData); |
+ } |
+ } |
+ m_CountBSArray = FX_NEW CFX_CountBSINT32Array(20); |
+ if (NULL == m_CountBSArray) { |
+ return FALSE; |
+ } |
+ return TRUE; |
} |
-FX_BOOL CRF_TextPage::ParseTextPage() |
-{ |
- if(!m_pRefPage) { |
- return FALSE; |
- } |
- int count = m_pRefPage->m_pReflowed->GetSize(); |
- if(count < 500) { |
- m_pDataList = FX_NEW CRF_CharDataPtrArray(count); |
- } else { |
- m_pDataList = FX_NEW CRF_CharDataPtrArray(500); |
- } |
- if (NULL == m_pDataList) { |
- return FALSE; |
- } |
- for(int i = 0; i < count; i++) { |
- CRF_Data* pData = (*(m_pRefPage->m_pReflowed))[i]; |
- if(pData->GetType() == CRF_Data::Text) { |
- m_pDataList->Add((CRF_CharData*)pData); |
- } |
- } |
- m_CountBSArray = FX_NEW CFX_CountBSINT32Array(20); |
- if(NULL == m_CountBSArray) { |
- return FALSE; |
- } |
+FX_BOOL CRF_TextPage::IsParsered() const { |
+ if (m_pDataList) { |
return TRUE; |
+ } |
+ return FALSE; |
} |
-FX_BOOL CRF_TextPage::IsParsered() const |
-{ |
- if(m_pDataList) { |
- return TRUE; |
- } |
- return FALSE; |
-} |
-int CRF_TextPage::CharIndexFromTextIndex(int TextIndex) const |
-{ |
- return TextIndex; |
+int CRF_TextPage::CharIndexFromTextIndex(int TextIndex) const { |
+ return TextIndex; |
} |
-int CRF_TextPage::TextIndexFromCharIndex(int CharIndex) const |
-{ |
- return CharIndex; |
+int CRF_TextPage::TextIndexFromCharIndex(int CharIndex) const { |
+ return CharIndex; |
} |
-int CRF_TextPage::CountChars() const |
-{ |
- if (NULL == m_pDataList) { |
- return -1; |
- } |
- return m_pDataList->GetSize(); |
+int CRF_TextPage::CountChars() const { |
+ if (NULL == m_pDataList) { |
+ return -1; |
+ } |
+ return m_pDataList->GetSize(); |
} |
-void CRF_TextPage::GetCharInfo(int index, FPDF_CHAR_INFO & info) const |
-{ |
- if(index >= CountChars() || index < 0 || !m_pDataList) { |
- return; |
- } |
- CRF_CharData* pData = (*m_pDataList)[index]; |
- FX_FLOAT ReltiveCorddDs = pData->m_pCharState->m_fDescent; |
- FX_FLOAT ReltiveCorddAs = pData->m_pCharState->m_fAscent; |
- info.m_Flag = CHAR_NORMAL; |
- info.m_pTextObj = pData->m_pCharState->m_pTextObj; |
- info.m_OriginX = pData->m_PosX; |
- info.m_OriginY = pData->m_PosY - ReltiveCorddDs; |
- info.m_FontSize = pData->m_pCharState->m_fFontSize; |
- CFX_FloatRect FloatRectTmp(pData->m_PosX, pData->m_PosY, pData->m_PosX + pData->m_Width, pData->m_PosY + ReltiveCorddAs - ReltiveCorddDs); |
- info.m_CharBox = FloatRectTmp; |
- CFX_WideString str = pData->m_pCharState->m_pFont->UnicodeFromCharCode(pData->m_CharCode); |
- if(!str.IsEmpty()) { |
- info.m_Unicode = str.GetAt(0); |
- } else { |
- info.m_Unicode = -1; |
- } |
- info.m_Charcode = (FX_WCHAR)pData->m_CharCode; |
- info.m_Matrix = CFX_Matrix(1, 0, 0, 1, 0, 0); |
+void CRF_TextPage::GetCharInfo(int index, FPDF_CHAR_INFO& info) const { |
+ if (index >= CountChars() || index < 0 || !m_pDataList) { |
+ return; |
+ } |
+ CRF_CharData* pData = (*m_pDataList)[index]; |
+ FX_FLOAT ReltiveCorddDs = pData->m_pCharState->m_fDescent; |
+ FX_FLOAT ReltiveCorddAs = pData->m_pCharState->m_fAscent; |
+ info.m_Flag = CHAR_NORMAL; |
+ info.m_pTextObj = pData->m_pCharState->m_pTextObj; |
+ info.m_OriginX = pData->m_PosX; |
+ info.m_OriginY = pData->m_PosY - ReltiveCorddDs; |
+ info.m_FontSize = pData->m_pCharState->m_fFontSize; |
+ CFX_FloatRect FloatRectTmp(pData->m_PosX, |
+ pData->m_PosY, |
+ pData->m_PosX + pData->m_Width, |
+ pData->m_PosY + ReltiveCorddAs - ReltiveCorddDs); |
+ info.m_CharBox = FloatRectTmp; |
+ CFX_WideString str = |
+ pData->m_pCharState->m_pFont->UnicodeFromCharCode(pData->m_CharCode); |
+ if (!str.IsEmpty()) { |
+ info.m_Unicode = str.GetAt(0); |
+ } else { |
+ info.m_Unicode = -1; |
+ } |
+ info.m_Charcode = (FX_WCHAR)pData->m_CharCode; |
+ info.m_Matrix = CFX_Matrix(1, 0, 0, 1, 0, 0); |
+} |
+extern FX_BOOL GetIntersection(FX_FLOAT low1, |
+ FX_FLOAT high1, |
+ FX_FLOAT low2, |
+ FX_FLOAT high2, |
+ FX_FLOAT& interlow, |
+ FX_FLOAT& interhigh); |
+inline FX_BOOL _IsInsameline(const CFX_FloatRect& rectA, |
+ const CFX_FloatRect& rectB) { |
+ if ((rectA.top >= rectB.bottom && rectB.top >= rectA.bottom)) { |
+ return TRUE; |
+ } else { |
+ return FALSE; |
+ } |
} |
-extern FX_BOOL GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT high2, FX_FLOAT& interlow, FX_FLOAT& interhigh); |
-inline FX_BOOL _IsInsameline(const CFX_FloatRect& rectA, const CFX_FloatRect& rectB) |
-{ |
- if((rectA.top >= rectB.bottom && rectB.top >= rectA.bottom)) { |
- return TRUE; |
+inline FX_BOOL _IsIntersect(const CFX_FloatRect& rectA, |
+ const CFX_FloatRect& rectB) { |
+ FX_FLOAT interlow = .0f, interhigh = .0f; |
+ if (GetIntersection(rectA.bottom, |
+ rectA.top, |
+ rectB.bottom, |
+ rectB.top, |
+ interlow, |
+ interhigh)) { |
+ if (GetIntersection(rectA.left, |
+ rectA.right, |
+ rectB.left, |
+ rectB.right, |
+ interlow, |
+ interhigh)) { |
+ return TRUE; |
} else { |
- return FALSE; |
+ return FALSE; |
} |
+ } |
+ return FALSE; |
} |
-inline FX_BOOL _IsIntersect(const CFX_FloatRect& rectA, const CFX_FloatRect& rectB) |
-{ |
- FX_FLOAT interlow = .0f, interhigh = .0f; |
- if(GetIntersection(rectA.bottom, rectA.top, rectB.bottom, rectB.top, interlow, interhigh)) { |
- if(GetIntersection(rectA.left, rectA.right, rectB.left, rectB.right, interlow, interhigh)) { |
- return TRUE; |
- } else { |
- return FALSE; |
- } |
+void CRF_TextPage::GetRectArray(int start, |
+ int nCount, |
+ CFX_RectArray& rectArray) const { |
+ int indexlen = start + nCount; |
+ FPDF_CHAR_INFO info; |
+ FX_BOOL bstart = TRUE; |
+ CFX_FloatRect recttmp; |
+ int i; |
+ for (i = start; i < indexlen; i++) { |
+ GetCharInfo(i, info); |
+ if (bstart) { |
+ recttmp = info.m_CharBox; |
+ bstart = FALSE; |
+ } else if (_IsInsameline(recttmp, info.m_CharBox)) { |
+ recttmp.right = info.m_CharBox.right; |
+ if (info.m_CharBox.top > recttmp.top) { |
+ recttmp.top = info.m_CharBox.top; |
+ } |
+ if (info.m_CharBox.bottom < recttmp.bottom) { |
+ recttmp.bottom = info.m_CharBox.bottom; |
+ } |
+ } else { |
+ rectArray.Add(recttmp); |
+ recttmp = info.m_CharBox; |
} |
- return FALSE; |
+ } |
+ rectArray.Add(recttmp); |
} |
-void CRF_TextPage::GetRectArray(int start, int nCount, CFX_RectArray& rectArray) const |
-{ |
- int indexlen = start + nCount; |
- FPDF_CHAR_INFO info; |
- FX_BOOL bstart = TRUE; |
- CFX_FloatRect recttmp; |
- int i; |
- for(i = start; i < indexlen; i++) { |
- GetCharInfo(i, info); |
- if(bstart) { |
- recttmp = info.m_CharBox; |
- bstart = FALSE; |
- } else if(_IsInsameline(recttmp, info.m_CharBox)) { |
- recttmp.right = info.m_CharBox.right; |
- if(info.m_CharBox.top > recttmp.top) { |
- recttmp.top = info.m_CharBox.top; |
- } |
- if(info.m_CharBox.bottom < recttmp.bottom) { |
- recttmp.bottom = info.m_CharBox.bottom; |
- } |
- } else { |
- rectArray.Add(recttmp); |
- recttmp = info.m_CharBox; |
- } |
- } |
- rectArray.Add(recttmp); |
+inline FX_FLOAT _GetDistance(CFX_FloatRect floatRect, CPDF_Point point) { |
+ if (floatRect.right < point.x && floatRect.bottom > point.y) { |
+ return FXSYS_sqrt(FXSYS_pow(point.x - floatRect.right, 2) + |
+ FXSYS_pow(floatRect.bottom - point.y, 2)); |
+ } |
+ if (floatRect.right < point.x && floatRect.top < point.y) { |
+ return FXSYS_sqrt(FXSYS_pow(point.x - floatRect.right, 2) + |
+ FXSYS_pow(point.y - floatRect.top, 2)); |
+ } |
+ if (floatRect.left > point.x && floatRect.bottom > point.y) { |
+ return FXSYS_sqrt(FXSYS_pow(floatRect.bottom - point.y, 2) + |
+ FXSYS_pow(floatRect.left - point.x, 2)); |
+ } |
+ if ((floatRect.right > point.x || |
+ FXSYS_fabs(floatRect.right - point.x) <= 0.0001f) && |
+ (floatRect.left < point.x || |
+ FXSYS_fabs(floatRect.left - point.x) <= 0.0001f) && |
+ floatRect.bottom > point.y) { |
+ return FXSYS_fabs(floatRect.bottom - point.y); |
+ } |
+ if (floatRect.left > point.x && |
+ (floatRect.bottom < point.y || |
+ FXSYS_fabs(floatRect.bottom - point.y) <= 0.0001f) && |
+ (floatRect.top > point.y || |
+ FXSYS_fabs(floatRect.top - point.y) <= 0.0001f)) { |
+ return FXSYS_fabs(floatRect.left - point.x); |
+ } |
+ if (floatRect.left > point.x && floatRect.top < point.y) { |
+ return FXSYS_sqrt(FXSYS_pow(floatRect.left - point.x, 2) + |
+ FXSYS_pow(point.y - floatRect.top, 2)); |
+ } |
+ if ((floatRect.left < point.x || |
+ FXSYS_fabs(floatRect.left - point.x) <= 0.0001f) && |
+ (floatRect.right > point.x || |
+ FXSYS_fabs(floatRect.right - point.x) <= 0.0001f) && |
+ floatRect.top < point.y) { |
+ return FXSYS_fabs(point.y - floatRect.top); |
+ } |
+ if (floatRect.right < point.x && |
+ (floatRect.top > point.y || |
+ FXSYS_fabs(floatRect.top - point.y) <= 0.0001f) && |
+ (floatRect.bottom < point.y || |
+ FXSYS_fabs(floatRect.bottom - point.y) <= 0.0001f)) { |
+ return point.x - floatRect.right; |
+ } |
+ return .0f; |
} |
-inline FX_FLOAT _GetDistance(CFX_FloatRect floatRect, CPDF_Point point) |
-{ |
- if(floatRect.right < point.x && floatRect.bottom > point.y) { |
- return FXSYS_sqrt(FXSYS_pow(point.x - floatRect.right, 2) + FXSYS_pow(floatRect.bottom - point.y, 2)); |
- } |
- if (floatRect.right < point.x && floatRect.top < point.y) { |
- return FXSYS_sqrt(FXSYS_pow(point.x - floatRect.right, 2) + FXSYS_pow(point.y - floatRect.top, 2)); |
- } |
- if(floatRect.left > point.x && floatRect.bottom > point.y) { |
- return FXSYS_sqrt(FXSYS_pow(floatRect.bottom - point.y, 2) + FXSYS_pow(floatRect.left - point.x, 2)); |
- } |
- if((floatRect.right > point.x || FXSYS_fabs(floatRect.right - point.x) <= 0.0001f) && |
- (floatRect.left < point.x || FXSYS_fabs(floatRect.left - point.x) <= 0.0001f) && floatRect.bottom > point.y) { |
- return FXSYS_fabs(floatRect.bottom - point.y); |
- } |
- if(floatRect.left > point.x && (floatRect.bottom < point.y || FXSYS_fabs(floatRect.bottom - point.y) <= 0.0001f) && |
- (floatRect.top > point.y || FXSYS_fabs(floatRect.top - point.y) <= 0.0001f)) { |
- return FXSYS_fabs(floatRect.left - point.x); |
- } |
- if(floatRect.left > point.x && floatRect.top < point.y) { |
- return FXSYS_sqrt(FXSYS_pow(floatRect.left - point.x, 2) + FXSYS_pow(point.y - floatRect.top, 2)); |
- } |
- if ((floatRect.left < point.x || FXSYS_fabs(floatRect.left - point.x) <= 0.0001f) && |
- (floatRect.right > point.x || FXSYS_fabs(floatRect.right - point.x) <= 0.0001f) && floatRect.top < point.y) { |
- return FXSYS_fabs(point.y - floatRect.top); |
- } |
- if(floatRect.right < point.x && (floatRect.top > point.y || FXSYS_fabs(floatRect.top - point.y) <= 0.0001f) && |
- (floatRect.bottom < point.y || FXSYS_fabs(floatRect.bottom - point.y) <= 0.0001f)) { |
- return point.x - floatRect.right; |
- } |
- return .0f; |
+int CRF_TextPage::GetIndexAtPos(CPDF_Point point, |
+ FX_FLOAT xTorelance, |
+ FX_FLOAT yTorelance) const { |
+ int index = -1, i = 0, j = 0; |
+ FPDF_CHAR_INFO info; |
+ CFX_FloatRect rectTmp; |
+ FX_FLOAT MinDistance = 1000, DistanceTmp = 0; |
+ FX_FLOAT rect_bottom = point.x - xTorelance; |
+ CFX_FloatRect TorelanceRect(rect_bottom <= 0 ? 0 : rect_bottom, |
+ point.y - yTorelance, |
+ point.x + xTorelance, |
+ point.y + yTorelance); |
+ int count = CountChars(); |
+ for (i = 0; i < count; i++) { |
+ GetCharInfo(i, info); |
+ rectTmp = info.m_CharBox; |
+ if (rectTmp.Contains(point.x, point.y)) { |
+ index = i; |
+ break; |
+ } else if (_IsIntersect(rectTmp, TorelanceRect)) { |
+ DistanceTmp = _GetDistance(rectTmp, point); |
+ if (DistanceTmp < MinDistance) { |
+ MinDistance = DistanceTmp; |
+ index = i; |
+ } |
+ } |
+ } |
+ return index; |
} |
-int CRF_TextPage::GetIndexAtPos(CPDF_Point point, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const |
-{ |
- int index = -1, i = 0, j = 0; |
- FPDF_CHAR_INFO info; |
- CFX_FloatRect rectTmp; |
- FX_FLOAT MinDistance = 1000, DistanceTmp = 0; |
- FX_FLOAT rect_bottom = point.x - xTorelance; |
- CFX_FloatRect TorelanceRect(rect_bottom <= 0 ? 0 : rect_bottom, point.y - yTorelance, point.x + xTorelance, point.y + yTorelance); |
- int count = CountChars(); |
- for(i = 0; i < count; i++) { |
- GetCharInfo(i, info); |
- rectTmp = info.m_CharBox; |
- if(rectTmp.Contains(point.x, point.y)) { |
- index = i; |
- break; |
- } else if(_IsIntersect(rectTmp, TorelanceRect)) { |
- DistanceTmp = _GetDistance(rectTmp, point); |
- if(DistanceTmp < MinDistance) { |
- MinDistance = DistanceTmp; |
- index = i; |
- } |
- } |
- } |
+int CRF_TextPage::GetIndexAtPos(FX_FLOAT x, |
+ FX_FLOAT y, |
+ FX_FLOAT xTorelance, |
+ FX_FLOAT yTorelance) const { |
+ int index = 0; |
+ CPDF_Point point(x, y); |
+ if ((index = GetIndexAtPos(point, xTorelance, yTorelance)) < 0) { |
+ return -1; |
+ } else { |
return index; |
+ } |
} |
-int CRF_TextPage::GetIndexAtPos(FX_FLOAT x, FX_FLOAT y, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const |
-{ |
- int index = 0; |
- CPDF_Point point(x, y); |
- if((index = GetIndexAtPos(point, xTorelance, yTorelance)) < 0) { |
- return -1; |
- } else { |
- return index; |
- } |
+int CRF_TextPage::GetOrderByDirection(int index, int direction) const { |
+ return -1; |
} |
-int CRF_TextPage::GetOrderByDirection(int index, int direction) const |
-{ |
- return -1; |
+CFX_WideString CRF_TextPage::GetTextByRect(CFX_FloatRect rect) const { |
+ int count; |
+ FPDF_CHAR_INFO info; |
+ CFX_WideString str; |
+ CFX_FloatRect Recttmp; |
+ FX_BOOL bstart = TRUE; |
+ count = CountChars(); |
+ if (rect.IsEmpty()) { |
+ return L""; |
+ } |
+ for (int i = 0; i < count; i++) { |
+ GetCharInfo(i, info); |
+ if (_IsIntersect(rect, info.m_CharBox)) { |
+ if (bstart) { |
+ Recttmp = info.m_CharBox; |
+ str += info.m_Unicode; |
+ bstart = FALSE; |
+ } else if (_IsInsameline(Recttmp, info.m_CharBox)) { |
+ str += info.m_Unicode; |
+ } else { |
+ str += L"\r\n"; |
+ Recttmp = info.m_CharBox; |
+ str += info.m_Unicode; |
+ } |
+ } |
+ } |
+ if (str.IsEmpty()) { |
+ return L""; |
+ } else { |
+ return str; |
+ } |
} |
-CFX_WideString CRF_TextPage::GetTextByRect(CFX_FloatRect rect) const |
-{ |
- int count; |
- FPDF_CHAR_INFO info; |
- CFX_WideString str; |
- CFX_FloatRect Recttmp; |
- FX_BOOL bstart = TRUE; |
- count = CountChars(); |
- if(rect.IsEmpty()) { |
- return L""; |
- } |
- for(int i = 0; i < count; i++) { |
- GetCharInfo(i, info); |
- if(_IsIntersect(rect, info.m_CharBox)) { |
- if(bstart) { |
- Recttmp = info.m_CharBox; |
- str += info.m_Unicode; |
- bstart = FALSE; |
- } else if(_IsInsameline(Recttmp, info.m_CharBox)) { |
- str += info.m_Unicode; |
- } else { |
- str += L"\r\n"; |
- Recttmp = info.m_CharBox; |
- str += info.m_Unicode; |
- } |
+void CRF_TextPage::GetRectsArrayByRect(CFX_FloatRect rect, |
+ CFX_RectArray& resRectArray) const { |
+ int count, i; |
+ FX_BOOL bstart = TRUE; |
+ FPDF_CHAR_INFO info; |
+ CFX_FloatRect recttmp; |
+ count = CountChars(); |
+ for (i = 0; i < count; i++) { |
+ GetCharInfo(i, info); |
+ if (_IsIntersect(rect, info.m_CharBox)) { |
+ if (bstart) { |
+ recttmp = info.m_CharBox; |
+ bstart = FALSE; |
+ } else if (_IsInsameline(recttmp, info.m_CharBox)) { |
+ recttmp.right = info.m_CharBox.right; |
+ if (info.m_CharBox.top > recttmp.top) { |
+ recttmp.top = info.m_CharBox.top; |
} |
- } |
- if(str.IsEmpty()) { |
- return L""; |
- } else { |
- return str; |
- } |
-} |
-void CRF_TextPage::GetRectsArrayByRect(CFX_FloatRect rect, CFX_RectArray& resRectArray) const |
-{ |
- int count, i; |
- FX_BOOL bstart = TRUE; |
- FPDF_CHAR_INFO info; |
- CFX_FloatRect recttmp; |
- count = CountChars(); |
- for(i = 0; i < count; i++) { |
- GetCharInfo(i, info); |
- if(_IsIntersect(rect, info.m_CharBox)) { |
- if(bstart) { |
- recttmp = info.m_CharBox; |
- bstart = FALSE; |
- } else if(_IsInsameline(recttmp, info.m_CharBox)) { |
- recttmp.right = info.m_CharBox.right; |
- if(info.m_CharBox.top > recttmp.top) { |
- recttmp.top = info.m_CharBox.top; |
- } |
- if(info.m_CharBox.bottom < recttmp.bottom) { |
- recttmp.bottom = info.m_CharBox.bottom; |
- } |
- } else { |
- resRectArray.Add(recttmp); |
- recttmp = info.m_CharBox; |
- } |
+ if (info.m_CharBox.bottom < recttmp.bottom) { |
+ recttmp.bottom = info.m_CharBox.bottom; |
} |
+ } else { |
+ resRectArray.Add(recttmp); |
+ recttmp = info.m_CharBox; |
+ } |
} |
- resRectArray.Add(recttmp); |
+ } |
+ resRectArray.Add(recttmp); |
} |
-int CRF_TextPage::CountRects(int start, int nCount) |
-{ |
- m_rectArray.RemoveAll(); |
- GetRectArray(start, nCount, m_rectArray); |
- return m_rectArray.GetSize(); |
+int CRF_TextPage::CountRects(int start, int nCount) { |
+ m_rectArray.RemoveAll(); |
+ GetRectArray(start, nCount, m_rectArray); |
+ return m_rectArray.GetSize(); |
} |
-void CRF_TextPage::GetRect(int rectIndex, FX_FLOAT& left, FX_FLOAT& top, FX_FLOAT& right, FX_FLOAT &bottom) const |
-{ |
- if(m_rectArray.GetSize() <= rectIndex) { |
- return; |
- } |
- left = m_rectArray[rectIndex].left; |
- top = m_rectArray[rectIndex].top; |
- right = m_rectArray[rectIndex].right; |
- bottom = m_rectArray[rectIndex].bottom; |
+void CRF_TextPage::GetRect(int rectIndex, |
+ FX_FLOAT& left, |
+ FX_FLOAT& top, |
+ FX_FLOAT& right, |
+ FX_FLOAT& bottom) const { |
+ if (m_rectArray.GetSize() <= rectIndex) { |
+ return; |
+ } |
+ left = m_rectArray[rectIndex].left; |
+ top = m_rectArray[rectIndex].top; |
+ right = m_rectArray[rectIndex].right; |
+ bottom = m_rectArray[rectIndex].bottom; |
} |
-FX_BOOL CRF_TextPage::GetBaselineRotate(int rectIndex, int& Rotate) |
-{ |
- Rotate = 0; |
- return TRUE; |
+FX_BOOL CRF_TextPage::GetBaselineRotate(int rectIndex, int& Rotate) { |
+ Rotate = 0; |
+ return TRUE; |
} |
-FX_BOOL CRF_TextPage::GetBaselineRotate(CFX_FloatRect rect, int& Rotate) |
-{ |
- Rotate = 0; |
- return TRUE; |
+FX_BOOL CRF_TextPage::GetBaselineRotate(CFX_FloatRect rect, int& Rotate) { |
+ Rotate = 0; |
+ return TRUE; |
} |
-int CRF_TextPage::CountBoundedSegments(FX_FLOAT left, FX_FLOAT top, FX_FLOAT right, FX_FLOAT bottom, FX_BOOL bContains) |
-{ |
- if (!m_CountBSArray) { |
- return -1; |
- } |
- m_CountBSArray->RemoveAll(); |
- CFX_FloatRect floatrect(left, bottom, right, top); |
- int totalcount, i, j = 0, counttmp = 0; |
- FX_BOOL bstart = TRUE; |
- FPDF_CHAR_INFO info; |
- CFX_FloatRect recttmp; |
- totalcount = CountChars(); |
- for(i = 0; i < totalcount; i++) { |
- GetCharInfo(i, info); |
- if(_IsIntersect(floatrect, info.m_CharBox)) { |
- if(bstart) { |
- m_CountBSArray->Add(i); |
- counttmp = 1; |
- recttmp = info.m_CharBox; |
- bstart = FALSE; |
- } else if(_IsInsameline(recttmp, info.m_CharBox)) { |
- recttmp.right = info.m_CharBox.right; |
- if(info.m_CharBox.top > recttmp.top) { |
- recttmp.top = info.m_CharBox.top; |
- } |
- if(info.m_CharBox.bottom < recttmp.bottom) { |
- recttmp.bottom = info.m_CharBox.bottom; |
- } |
- counttmp ++; |
- } else { |
- m_CountBSArray->Add(counttmp); |
- m_CountBSArray->Add(i); |
- counttmp = 1; |
- j++; |
- recttmp = info.m_CharBox; |
- } |
+int CRF_TextPage::CountBoundedSegments(FX_FLOAT left, |
+ FX_FLOAT top, |
+ FX_FLOAT right, |
+ FX_FLOAT bottom, |
+ FX_BOOL bContains) { |
+ if (!m_CountBSArray) { |
+ return -1; |
+ } |
+ m_CountBSArray->RemoveAll(); |
+ CFX_FloatRect floatrect(left, bottom, right, top); |
+ int totalcount, i, j = 0, counttmp = 0; |
+ FX_BOOL bstart = TRUE; |
+ FPDF_CHAR_INFO info; |
+ CFX_FloatRect recttmp; |
+ totalcount = CountChars(); |
+ for (i = 0; i < totalcount; i++) { |
+ GetCharInfo(i, info); |
+ if (_IsIntersect(floatrect, info.m_CharBox)) { |
+ if (bstart) { |
+ m_CountBSArray->Add(i); |
+ counttmp = 1; |
+ recttmp = info.m_CharBox; |
+ bstart = FALSE; |
+ } else if (_IsInsameline(recttmp, info.m_CharBox)) { |
+ recttmp.right = info.m_CharBox.right; |
+ if (info.m_CharBox.top > recttmp.top) { |
+ recttmp.top = info.m_CharBox.top; |
} |
- } |
- m_CountBSArray->Add(counttmp); |
- j++; |
- return j; |
+ if (info.m_CharBox.bottom < recttmp.bottom) { |
+ recttmp.bottom = info.m_CharBox.bottom; |
+ } |
+ counttmp++; |
+ } else { |
+ m_CountBSArray->Add(counttmp); |
+ m_CountBSArray->Add(i); |
+ counttmp = 1; |
+ j++; |
+ recttmp = info.m_CharBox; |
+ } |
+ } |
+ } |
+ m_CountBSArray->Add(counttmp); |
+ j++; |
+ return j; |
} |
-void CRF_TextPage::GetBoundedSegment(int index, int& start, int& count) const |
-{ |
- if (!m_CountBSArray) { |
- return; |
- } |
- if(m_CountBSArray->GetSize() <= index * 2) { |
- start = 0; |
- count = 0; |
- return; |
- } |
- start = *(int *)m_CountBSArray->GetAt(index * 2); |
- count = *(int *)m_CountBSArray->GetAt(index * 2 + 1); |
+void CRF_TextPage::GetBoundedSegment(int index, int& start, int& count) const { |
+ if (!m_CountBSArray) { |
+ return; |
+ } |
+ if (m_CountBSArray->GetSize() <= index * 2) { |
+ start = 0; |
+ count = 0; |
+ return; |
+ } |
+ start = *(int*)m_CountBSArray->GetAt(index * 2); |
+ count = *(int*)m_CountBSArray->GetAt(index * 2 + 1); |
} |
-int CRF_TextPage::GetWordBreak(int index, int direction) const |
-{ |
- return -1; |
+int CRF_TextPage::GetWordBreak(int index, int direction) const { |
+ return -1; |
} |
-CFX_WideString CRF_TextPage::GetPageText(int start, int nCount ) const |
-{ |
- if(nCount == -1) { |
- nCount = CountChars(); |
- start = 0; |
- } else if(nCount < 1) { |
- return L""; |
- } else if(start >= CountChars()) { |
- return L""; |
- } |
- int i, index = start + nCount; |
- FPDF_CHAR_INFO info; |
- CFX_WideString str; |
- CFX_FloatRect recttmp; |
- FX_BOOL bstart = TRUE; |
- for(i = start; i < index; i++) { |
- GetCharInfo(i, info); |
- if(bstart) { |
- recttmp = info.m_CharBox; |
- str += info.m_Unicode; |
- bstart = FALSE; |
- } else if (_IsInsameline(recttmp, info.m_CharBox)) { |
- str += info.m_Unicode; |
- } else { |
- str += L"\r\n"; |
- recttmp = info.m_CharBox; |
- str += info.m_Unicode; |
- } |
- } |
- if(str.IsEmpty()) { |
- return L""; |
- } |
- return str; |
+CFX_WideString CRF_TextPage::GetPageText(int start, int nCount) const { |
+ if (nCount == -1) { |
+ nCount = CountChars(); |
+ start = 0; |
+ } else if (nCount < 1) { |
+ return L""; |
+ } else if (start >= CountChars()) { |
+ return L""; |
+ } |
+ int i, index = start + nCount; |
+ FPDF_CHAR_INFO info; |
+ CFX_WideString str; |
+ CFX_FloatRect recttmp; |
+ FX_BOOL bstart = TRUE; |
+ for (i = start; i < index; i++) { |
+ GetCharInfo(i, info); |
+ if (bstart) { |
+ recttmp = info.m_CharBox; |
+ str += info.m_Unicode; |
+ bstart = FALSE; |
+ } else if (_IsInsameline(recttmp, info.m_CharBox)) { |
+ str += info.m_Unicode; |
+ } else { |
+ str += L"\r\n"; |
+ recttmp = info.m_CharBox; |
+ str += info.m_Unicode; |
+ } |
+ } |
+ if (str.IsEmpty()) { |
+ return L""; |
+ } |
+ return str; |
} |