| Index: core/fpdftext/fpdf_text_int.cpp
|
| diff --git a/core/fpdftext/fpdf_text_int.cpp b/core/fpdftext/fpdf_text_int.cpp
|
| index b3558ff2a847f886c9f0002df26f0259608995f6..8e5e75853eae51bf9079825699526adba4f9e569 100644
|
| --- a/core/fpdftext/fpdf_text_int.cpp
|
| +++ b/core/fpdftext/fpdf_text_int.cpp
|
| @@ -28,10 +28,6 @@
|
| #include "core/fxcrt/include/fx_ucd.h"
|
| #include "third_party/base/stl_util.h"
|
|
|
| -#define FPDFTEXT_RLTB 1
|
| -#define FPDFTEXT_LEFT -1
|
| -#define FPDFTEXT_RIGHT 1
|
| -
|
| #define FPDFTEXT_MATCHCASE 0x00000001
|
| #define FPDFTEXT_MATCHWHOLEWORD 0x00000002
|
| #define FPDFTEXT_CONSECUTIVE 0x00000004
|
| @@ -42,9 +38,15 @@
|
| #define FPDFTEXT_CHAR_UNUNICODE 2
|
| #define FPDFTEXT_CHAR_HYPHEN 3
|
| #define FPDFTEXT_CHAR_PIECE 4
|
| -#define FPDFTEXT_MC_PASS 0
|
| -#define FPDFTEXT_MC_DONE 1
|
| -#define FPDFTEXT_MC_DELAY 2
|
| +
|
| +#define TEXT_BLANK_CHAR L' '
|
| +#define TEXT_LINEFEED_CHAR L'\n'
|
| +#define TEXT_RETURN_CHAR L'\r'
|
| +#define TEXT_EMPTY L""
|
| +#define TEXT_BLANK L" "
|
| +#define TEXT_RETURN_LINEFEED L"\r\n"
|
| +#define TEXT_LINEFEED L"\n"
|
| +#define TEXT_CHARRATIO_GAPDELTA 0.070
|
|
|
| namespace {
|
|
|
| @@ -143,16 +145,7 @@ FX_STRSIZE Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst) {
|
|
|
| } // namespace
|
|
|
| -#define TEXT_BLANK_CHAR L' '
|
| -#define TEXT_LINEFEED_CHAR L'\n'
|
| -#define TEXT_RETURN_CHAR L'\r'
|
| -#define TEXT_EMPTY L""
|
| -#define TEXT_BLANK L" "
|
| -#define TEXT_RETURN_LINEFEED L"\r\n"
|
| -#define TEXT_LINEFEED L"\n"
|
| -#define TEXT_CHARRATIO_GAPDELTA 0.070
|
| -
|
| -CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, int flags)
|
| +CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, FPDFText_Direction flags)
|
| : m_pPage(pPage),
|
| m_parserflag(flags),
|
| m_pPreTextObj(nullptr),
|
| @@ -613,42 +606,6 @@ void CPDF_TextPage::GetRect(int rectIndex,
|
| bottom = m_SelRects[rectIndex].bottom;
|
| }
|
|
|
| -FX_BOOL CPDF_TextPage::GetBaselineRotate(int start, int end, int& Rotate) {
|
| - if (end == start) {
|
| - return FALSE;
|
| - }
|
| - FPDF_CHAR_INFO info_start;
|
| - FPDF_CHAR_INFO info_end;
|
| - GetCharInfo(start, &info_start);
|
| - GetCharInfo(end, &info_end);
|
| - while (info_end.m_CharBox.Width() == 0 || info_end.m_CharBox.Height() == 0) {
|
| - if (--end <= start)
|
| - return FALSE;
|
| -
|
| - GetCharInfo(end, &info_end);
|
| - }
|
| - FX_FLOAT dx = (info_end.m_OriginX - info_start.m_OriginX);
|
| - FX_FLOAT dy = (info_end.m_OriginY - info_start.m_OriginY);
|
| - if (dx == 0) {
|
| - if (dy > 0) {
|
| - Rotate = 90;
|
| - } else if (dy < 0) {
|
| - Rotate = 270;
|
| - } else {
|
| - Rotate = 0;
|
| - }
|
| - } else {
|
| - float a = FXSYS_atan2(dy, dx);
|
| - Rotate = (int)(a * 180 / FX_PI + 0.5);
|
| - }
|
| - if (Rotate < 0) {
|
| - Rotate = -Rotate;
|
| - } else if (Rotate > 0) {
|
| - Rotate = 360 - Rotate;
|
| - }
|
| - return TRUE;
|
| -}
|
| -
|
| int CPDF_TextPage::CountBoundedSegments(FX_FLOAT left,
|
| FX_FLOAT top,
|
| FX_FLOAT right,
|
| @@ -727,38 +684,6 @@ int CPDF_TextPage::CountBoundedSegments(FX_FLOAT left,
|
| return m_Segments.GetSize();
|
| }
|
|
|
| -int CPDF_TextPage::GetWordBreak(int index, int direction) const {
|
| - if (!m_bIsParsed)
|
| - return -1;
|
| -
|
| - if (direction != FPDFTEXT_LEFT && direction != FPDFTEXT_RIGHT)
|
| - return -1;
|
| -
|
| - if (index < 0 || index >= pdfium::CollectionSize<int>(m_CharList))
|
| - return -1;
|
| -
|
| - const PAGECHAR_INFO& charinfo = m_CharList[index];
|
| - if (charinfo.m_Index == -1 || charinfo.m_Flag == FPDFTEXT_CHAR_GENERATED) {
|
| - return index;
|
| - }
|
| - if (!IsLetter(charinfo.m_Unicode)) {
|
| - return index;
|
| - }
|
| - int breakPos = index;
|
| - if (direction == FPDFTEXT_LEFT) {
|
| - while (--breakPos > 0) {
|
| - if (!IsLetter(m_CharList[breakPos].m_Unicode))
|
| - break;
|
| - }
|
| - } else if (direction == FPDFTEXT_RIGHT) {
|
| - while (++breakPos < pdfium::CollectionSize<int>(m_CharList)) {
|
| - if (!IsLetter(m_CharList[breakPos].m_Unicode))
|
| - break;
|
| - }
|
| - }
|
| - return breakPos;
|
| -}
|
| -
|
| int32_t CPDF_TextPage::FindTextlineFlowDirection() {
|
| const int32_t nPageWidth = static_cast<int32_t>(m_pPage->GetPageWidth());
|
| const int32_t nPageHeight = static_cast<int32_t>(m_pPage->GetPageHeight());
|
| @@ -905,21 +830,6 @@ int CPDF_TextPage::GetCharWidth(uint32_t charCode, CPDF_Font* pFont) const {
|
| return pFont->GetCharBBox(charCode).Width();
|
| }
|
|
|
| -void CPDF_TextPage::OnPiece(CFX_BidiChar* pBidi, CFX_WideString& str) {
|
| - CFX_BidiChar::Segment seg = pBidi->GetSegmentInfo();
|
| - if (seg.direction == CFX_BidiChar::RIGHT) {
|
| - for (int i = seg.start + seg.count; i > seg.start; i--) {
|
| - m_TextBuf.AppendChar(str.GetAt(i - 1));
|
| - m_CharList.push_back(m_TempCharList[i - 1]);
|
| - }
|
| - } else {
|
| - for (int i = seg.start; i < seg.start + seg.count; i++) {
|
| - m_TextBuf.AppendChar(str.GetAt(i));
|
| - m_CharList.push_back(m_TempCharList[i]);
|
| - }
|
| - }
|
| -}
|
| -
|
| void CPDF_TextPage::AddCharInfoByLRDirection(FX_WCHAR wChar,
|
| PAGECHAR_INFO info) {
|
| if (!IsControlChar(info)) {
|
| @@ -996,7 +906,7 @@ void CPDF_TextPage::CloseTempLine() {
|
| bPrevSpace = TRUE;
|
| }
|
| CFX_BidiString bidi(str);
|
| - if (m_parserflag == FPDFTEXT_RLTB)
|
| + if (m_parserflag == FPDFText_Direction::Right)
|
| bidi.SetOverallDirectionRight();
|
| CFX_BidiChar::Direction eCurrentDirection = bidi.OverallDirection();
|
| for (const auto& segment : bidi) {
|
| @@ -1098,16 +1008,17 @@ void CPDF_TextPage::ProcessTextObject(
|
| }
|
| }
|
|
|
| -int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| +FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| CPDF_TextObject* pTextObj = Obj.m_pTextObj;
|
| CPDF_ContentMarkData* pMarkData =
|
| (CPDF_ContentMarkData*)pTextObj->m_ContentMark.GetObject();
|
| if (!pMarkData)
|
| - return FPDFTEXT_MC_PASS;
|
| + return FPDFText_MarkedContent::Pass;
|
|
|
| int nContentMark = pMarkData->CountItems();
|
| if (nContentMark < 1)
|
| - return FPDFTEXT_MC_PASS;
|
| + return FPDFText_MarkedContent::Pass;
|
| +
|
| CFX_WideString actText;
|
| FX_BOOL bExist = FALSE;
|
| CPDF_Dictionary* pDict = NULL;
|
| @@ -1125,19 +1036,19 @@ int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| }
|
| }
|
| if (!bExist)
|
| - return FPDFTEXT_MC_PASS;
|
| + return FPDFText_MarkedContent::Pass;
|
|
|
| if (m_pPreTextObj) {
|
| CPDF_ContentMarkData* pPreMarkData =
|
| (CPDF_ContentMarkData*)m_pPreTextObj->m_ContentMark.GetObject();
|
| if (pPreMarkData && pPreMarkData->CountItems() == n &&
|
| pDict == pPreMarkData->GetItem(n - 1).GetParam()) {
|
| - return FPDFTEXT_MC_DONE;
|
| + return FPDFText_MarkedContent::Done;
|
| }
|
| }
|
| FX_STRSIZE nItems = actText.GetLength();
|
| if (nItems < 1)
|
| - return FPDFTEXT_MC_PASS;
|
| + return FPDFText_MarkedContent::Pass;
|
|
|
| CPDF_Font* pFont = pTextObj->GetFont();
|
| bExist = FALSE;
|
| @@ -1149,7 +1060,7 @@ int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| }
|
| }
|
| if (!bExist)
|
| - return FPDFTEXT_MC_PASS;
|
| + return FPDFText_MarkedContent::Pass;
|
|
|
| bExist = FALSE;
|
| for (FX_STRSIZE i = 0; i < nItems; i++) {
|
| @@ -1160,9 +1071,9 @@ int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| }
|
| }
|
| if (!bExist)
|
| - return FPDFTEXT_MC_DONE;
|
| + return FPDFText_MarkedContent::Done;
|
|
|
| - return FPDFTEXT_MC_DELAY;
|
| + return FPDFText_MarkedContent::Delay;
|
| }
|
|
|
| void CPDF_TextPage::ProcessMarkedContent(PDFTEXT_Obj Obj) {
|
| @@ -1285,8 +1196,8 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| CFX_Matrix matrix;
|
| pTextObj->GetTextMatrix(&matrix);
|
| matrix.Concat(formMatrix);
|
| - int32_t bPreMKC = PreMarkedContent(Obj);
|
| - if (FPDFTEXT_MC_DONE == bPreMKC) {
|
| + FPDFText_MarkedContent ePreMKC = PreMarkedContent(Obj);
|
| + if (ePreMKC == FPDFText_MarkedContent::Done) {
|
| m_pPreTextObj = pTextObj;
|
| m_perMatrix.Copy(formMatrix);
|
| return;
|
| @@ -1362,7 +1273,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
|
| Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
|
| }
|
| - if (FPDFTEXT_MC_DELAY == bPreMKC) {
|
| + if (ePreMKC == FPDFText_MarkedContent::Delay) {
|
| ProcessMarkedContent(Obj);
|
| m_pPreTextObj = pTextObj;
|
| m_perMatrix.Copy(formMatrix);
|
| @@ -1879,19 +1790,6 @@ FX_BOOL CPDF_TextPage::IsRectIntersect(const CFX_FloatRect& rect1,
|
| return !rect.IsEmpty();
|
| }
|
|
|
| -FX_BOOL CPDF_TextPage::IsLetter(FX_WCHAR unicode) {
|
| - if (unicode < L'A') {
|
| - return FALSE;
|
| - }
|
| - if (unicode > L'Z' && unicode < L'a') {
|
| - return FALSE;
|
| - }
|
| - if (unicode > L'z') {
|
| - return FALSE;
|
| - }
|
| - return TRUE;
|
| -}
|
| -
|
| CPDF_TextPageFind::CPDF_TextPageFind(const CPDF_TextPage* pTextPage)
|
| : m_pTextPage(pTextPage),
|
| m_flags(0),
|
|
|