| Index: core/fpdftext/fpdf_text_int.cpp
|
| diff --git a/core/fpdftext/fpdf_text_int.cpp b/core/fpdftext/fpdf_text_int.cpp
|
| index 628f4b0e9e8c49c21d9815741856f0b6f0f9b067..fbd9c9c8c1cfbbc40da724d7632f8145ffc5a350 100644
|
| --- a/core/fpdftext/fpdf_text_int.cpp
|
| +++ b/core/fpdftext/fpdf_text_int.cpp
|
| @@ -56,9 +56,8 @@ const uint16_t* const g_UnicodeData_Normalization_Maps[5] = {
|
| g_UnicodeData_Normalization_Map3, g_UnicodeData_Normalization_Map4};
|
|
|
| FX_BOOL IsIgnoreSpaceCharacter(FX_WCHAR curChar) {
|
| - if (curChar < 255) {
|
| + if (curChar < 255)
|
| return FALSE;
|
| - }
|
| if ((curChar >= 0x0600 && curChar <= 0x06FF) ||
|
| (curChar >= 0xFE70 && curChar <= 0xFEFF) ||
|
| (curChar >= 0xFB50 && curChar <= 0xFDFF) ||
|
| @@ -73,15 +72,12 @@ FX_BOOL IsIgnoreSpaceCharacter(FX_WCHAR curChar) {
|
| }
|
|
|
| FX_FLOAT NormalizeThreshold(FX_FLOAT threshold) {
|
| - if (threshold < 300) {
|
| + if (threshold < 300)
|
| return threshold / 2.0f;
|
| - }
|
| - if (threshold < 500) {
|
| + if (threshold < 500)
|
| return threshold / 4.0f;
|
| - }
|
| - if (threshold < 700) {
|
| + if (threshold < 700)
|
| return threshold / 5.0f;
|
| - }
|
| return threshold / 6.0f;
|
| }
|
|
|
| @@ -90,23 +86,22 @@ FX_FLOAT CalculateBaseSpace(const CPDF_TextObject* pTextObj,
|
| FX_FLOAT baseSpace = 0.0;
|
| const int nItems = pTextObj->CountItems();
|
| if (pTextObj->m_TextState.GetObject()->m_CharSpace && nItems >= 3) {
|
| - FX_BOOL bAllChar = TRUE;
|
| + bool bAllChar = true;
|
| FX_FLOAT spacing = matrix.TransformDistance(
|
| pTextObj->m_TextState.GetObject()->m_CharSpace);
|
| baseSpace = spacing;
|
| for (int i = 0; i < nItems; i++) {
|
| CPDF_TextObjectItem item;
|
| pTextObj->GetItemInfo(i, &item);
|
| - if (item.m_CharCode == (uint32_t)-1) {
|
| + if (item.m_CharCode == static_cast<uint32_t>(-1)) {
|
| FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
|
| FX_FLOAT kerning = -fontsize_h * item.m_OriginX / 1000;
|
| baseSpace = std::min(baseSpace, kerning + spacing);
|
| - bAllChar = FALSE;
|
| + bAllChar = false;
|
| }
|
| }
|
| - if (baseSpace < 0.0 || (nItems == 3 && !bAllChar)) {
|
| + if (baseSpace < 0.0 || (nItems == 3 && !bAllChar))
|
| baseSpace = 0.0;
|
| - }
|
| }
|
| return baseSpace;
|
| }
|
| @@ -115,9 +110,8 @@ FX_STRSIZE Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst) {
|
| wch = wch & 0xFFFF;
|
| FX_WCHAR wFind = g_UnicodeData_Normalization[wch];
|
| if (!wFind) {
|
| - if (pDst) {
|
| + if (pDst)
|
| *pDst = wch;
|
| - }
|
| return 1;
|
| }
|
| if (wFind >= 0x8000) {
|
| @@ -136,9 +130,8 @@ FX_STRSIZE Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst) {
|
| }
|
| if (pDst) {
|
| FX_WCHAR n = wFind;
|
| - while (n--) {
|
| + while (n--)
|
| *pDst++ = *pMap++;
|
| - }
|
| }
|
| return (FX_STRSIZE)wFind;
|
| }
|
| @@ -268,25 +261,23 @@ std::vector<CFX_FloatRect> CPDF_TextPage::GetRectArray(int start,
|
| CPDF_TextObject* pCurObj = nullptr;
|
| CFX_FloatRect rect;
|
| int curPos = start;
|
| - FX_BOOL flagNewRect = TRUE;
|
| + bool bFlagNewRect = true;
|
| while (nCount--) {
|
| PAGECHAR_INFO info_curchar = m_CharList[curPos++];
|
| - if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
|
| + if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED)
|
| continue;
|
| - }
|
| if (info_curchar.m_CharBox.Width() < 0.01 ||
|
| info_curchar.m_CharBox.Height() < 0.01) {
|
| continue;
|
| }
|
| - if (!pCurObj) {
|
| + if (!pCurObj)
|
| pCurObj = info_curchar.m_pTextObj;
|
| - }
|
| if (pCurObj != info_curchar.m_pTextObj) {
|
| rectArray.push_back(rect);
|
| pCurObj = info_curchar.m_pTextObj;
|
| - flagNewRect = TRUE;
|
| + bFlagNewRect = true;
|
| }
|
| - if (flagNewRect) {
|
| + if (bFlagNewRect) {
|
| FX_FLOAT orgX = info_curchar.m_OriginX, orgY = info_curchar.m_OriginY;
|
| CFX_Matrix matrix, matrix_reverse;
|
| info_curchar.m_pTextObj->GetTextMatrix(&matrix);
|
| @@ -316,23 +307,15 @@ std::vector<CFX_FloatRect> CPDF_TextPage::GetRectArray(int start,
|
| } else {
|
| rect.top = info_curchar.m_CharBox.top;
|
| }
|
| - flagNewRect = FALSE;
|
| + bFlagNewRect = false;
|
| rect = info_curchar.m_CharBox;
|
| rect.Normalize();
|
| } else {
|
| info_curchar.m_CharBox.Normalize();
|
| - if (rect.left > info_curchar.m_CharBox.left) {
|
| - rect.left = info_curchar.m_CharBox.left;
|
| - }
|
| - if (rect.right < info_curchar.m_CharBox.right) {
|
| - rect.right = info_curchar.m_CharBox.right;
|
| - }
|
| - if (rect.top < info_curchar.m_CharBox.top) {
|
| - rect.top = info_curchar.m_CharBox.top;
|
| - }
|
| - if (rect.bottom > info_curchar.m_CharBox.bottom) {
|
| - rect.bottom = info_curchar.m_CharBox.bottom;
|
| - }
|
| + rect.left = std::min(rect.left, info_curchar.m_CharBox.left);
|
| + rect.right = std::max(rect.right, info_curchar.m_CharBox.right);
|
| + rect.top = std::max(rect.top, info_curchar.m_CharBox.top);
|
| + rect.bottom = std::min(rect.bottom, info_curchar.m_CharBox.bottom);
|
| }
|
| }
|
| rectArray.push_back(rect);
|
| @@ -352,9 +335,8 @@ int CPDF_TextPage::GetIndexAtPos(CFX_FloatPoint point,
|
| while (pos < pdfium::CollectionSize<int>(m_CharList)) {
|
| PAGECHAR_INFO charinfo = m_CharList[pos];
|
| CFX_FloatRect charrect = charinfo.m_CharBox;
|
| - if (charrect.Contains(point.x, point.y)) {
|
| + if (charrect.Contains(point.x, point.y))
|
| break;
|
| - }
|
| if (xTolerance > 0 || yTolerance > 0) {
|
| CFX_FloatRect charRectExt;
|
| charrect.Normalize();
|
| @@ -397,15 +379,13 @@ CFX_WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
|
| if (FXSYS_fabs(posy - charinfo.m_OriginY) > 0 && !IsContainPreChar &&
|
| IsAddLineFeed) {
|
| posy = charinfo.m_OriginY;
|
| - if (strText.GetLength() > 0) {
|
| + if (!strText.IsEmpty())
|
| strText += L"\r\n";
|
| - }
|
| }
|
| IsContainPreChar = true;
|
| IsAddLineFeed = false;
|
| - if (charinfo.m_Unicode) {
|
| + if (charinfo.m_Unicode)
|
| strText += charinfo.m_Unicode;
|
| - }
|
| } else if (charinfo.m_Unicode == 32) {
|
| if (IsContainPreChar && charinfo.m_Unicode) {
|
| strText += charinfo.m_Unicode;
|
| @@ -420,46 +400,6 @@ CFX_WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
|
| return strText;
|
| }
|
|
|
| -std::vector<CFX_FloatRect> CPDF_TextPage::GetRectsArrayByRect(
|
| - const CFX_FloatRect& rect) const {
|
| - if (!m_bIsParsed)
|
| - return std::vector<CFX_FloatRect>();
|
| -
|
| - CFX_FloatRect curRect;
|
| - std::vector<CFX_FloatRect> result;
|
| - bool flagNewRect = true;
|
| - CPDF_TextObject* pCurObj = nullptr;
|
| - for (auto info_curchar : m_CharList) {
|
| - if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
|
| - continue;
|
| - }
|
| - if (!IsRectIntersect(rect, info_curchar.m_CharBox)) {
|
| - continue;
|
| - }
|
| - if (!pCurObj) {
|
| - pCurObj = info_curchar.m_pTextObj;
|
| - }
|
| - if (pCurObj != info_curchar.m_pTextObj) {
|
| - result.push_back(curRect);
|
| - pCurObj = info_curchar.m_pTextObj;
|
| - flagNewRect = true;
|
| - }
|
| - if (flagNewRect) {
|
| - curRect = info_curchar.m_CharBox;
|
| - curRect.Normalize();
|
| - flagNewRect = false;
|
| - } else {
|
| - info_curchar.m_CharBox.Normalize();
|
| - curRect.left = std::min(curRect.left, info_curchar.m_CharBox.left);
|
| - curRect.bottom = std::min(curRect.bottom, info_curchar.m_CharBox.bottom);
|
| - curRect.right = std::max(curRect.right, info_curchar.m_CharBox.right);
|
| - curRect.top = std::max(curRect.top, info_curchar.m_CharBox.top);
|
| - }
|
| - }
|
| - result.push_back(curRect);
|
| - return result;
|
| -}
|
| -
|
| int CPDF_TextPage::GetIndexAtPos(FX_FLOAT x,
|
| FX_FLOAT y,
|
| FX_FLOAT xTolerance,
|
| @@ -483,11 +423,10 @@ void CPDF_TextPage::GetCharInfo(int index, FPDF_CHAR_INFO* info) const {
|
| info->m_Flag = charinfo.m_Flag;
|
| info->m_CharBox = charinfo.m_CharBox;
|
| info->m_pTextObj = charinfo.m_pTextObj;
|
| - if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont()) {
|
| + if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont())
|
| info->m_FontSize = charinfo.m_pTextObj->GetFontSize();
|
| - } else {
|
| + else
|
| info->m_FontSize = kDefaultFontSize;
|
| - }
|
| info->m_Matrix.Copy(charinfo.m_Matrix);
|
| }
|
|
|
| @@ -505,9 +444,8 @@ void CPDF_TextPage::CheckMarkedContentObject(int32_t& start,
|
| while (FPDFTEXT_CHAR_PIECE == charinfo1.m_Flag &&
|
| charinfo1.m_Index == charinfo.m_Index) {
|
| startIndex--;
|
| - if (startIndex < 0) {
|
| + if (startIndex < 0)
|
| break;
|
| - }
|
| charinfo1 = m_CharList[startIndex];
|
| }
|
| startIndex++;
|
| @@ -519,9 +457,8 @@ void CPDF_TextPage::CheckMarkedContentObject(int32_t& start,
|
| while (FPDFTEXT_CHAR_PIECE == charinfo3.m_Flag &&
|
| charinfo3.m_Index == charinfo2.m_Index) {
|
| endIndex++;
|
| - if (endIndex >= pdfium::CollectionSize<int>(m_CharList)) {
|
| + if (endIndex >= pdfium::CollectionSize<int>(m_CharList))
|
| break;
|
| - }
|
| charinfo3 = m_CharList[endIndex];
|
| }
|
| endIndex--;
|
| @@ -541,15 +478,12 @@ CFX_WideString CPDF_TextPage::GetPageText(int start, int nCount) const {
|
| return CFX_WideString(
|
| m_TextBuf.AsStringC().Mid(start, m_TextBuf.AsStringC().GetLength()));
|
| }
|
| - if (nCount <= 0 || m_CharList.empty()) {
|
| + if (nCount <= 0 || m_CharList.empty())
|
| return L"";
|
| - }
|
| - if (nCount + start > pdfium::CollectionSize<int>(m_CharList) - 1) {
|
| + if (nCount + start > pdfium::CollectionSize<int>(m_CharList) - 1)
|
| nCount = pdfium::CollectionSize<int>(m_CharList) - start;
|
| - }
|
| - if (nCount <= 0) {
|
| + if (nCount <= 0)
|
| return L"";
|
| - }
|
| CheckMarkedContentObject(start, nCount);
|
| int startindex = 0;
|
| PAGECHAR_INFO charinfo = m_CharList[start];
|
| @@ -567,15 +501,13 @@ CFX_WideString CPDF_TextPage::GetPageText(int start, int nCount) const {
|
| int nCountOffset = 0;
|
| while (charinfo.m_Index == -1) {
|
| nCountOffset++;
|
| - if (nCountOffset >= nCount) {
|
| + if (nCountOffset >= nCount)
|
| return L"";
|
| - }
|
| charinfo = m_CharList[start + nCount - nCountOffset - 1];
|
| }
|
| nCount = start + nCount - nCountOffset - startindex;
|
| - if (nCount <= 0) {
|
| + if (nCount <= 0)
|
| return L"";
|
| - }
|
| return CFX_WideString(m_TextBuf.AsStringC().Mid(startindex, nCount));
|
| }
|
|
|
| @@ -608,84 +540,6 @@ void CPDF_TextPage::GetRect(int rectIndex,
|
| bottom = m_SelRects[rectIndex].bottom;
|
| }
|
|
|
| -int CPDF_TextPage::CountBoundedSegments(FX_FLOAT left,
|
| - FX_FLOAT top,
|
| - FX_FLOAT right,
|
| - FX_FLOAT bottom,
|
| - FX_BOOL bContains) {
|
| - m_Segments.RemoveAll();
|
| - if (!m_bIsParsed)
|
| - return -1;
|
| -
|
| - CFX_FloatRect rect(left, bottom, right, top);
|
| - rect.Normalize();
|
| -
|
| - FPDF_SEGMENT segment;
|
| - segment.m_Start = 0;
|
| - segment.m_nCount = 0;
|
| -
|
| - int pos = 0;
|
| - int segmentStatus = 0;
|
| - FX_BOOL IsContainPreChar = FALSE;
|
| - for (const auto& charinfo : m_CharList) {
|
| - if (bContains && rect.Contains(charinfo.m_CharBox)) {
|
| - if (segmentStatus == 0 || segmentStatus == 2) {
|
| - segment.m_Start = pos;
|
| - segment.m_nCount = 1;
|
| - segmentStatus = 1;
|
| - } else if (segmentStatus == 1) {
|
| - segment.m_nCount++;
|
| - }
|
| - IsContainPreChar = TRUE;
|
| - } else if (!bContains &&
|
| - (IsRectIntersect(rect, charinfo.m_CharBox) ||
|
| - rect.Contains(charinfo.m_OriginX, charinfo.m_OriginY))) {
|
| - if (segmentStatus == 0 || segmentStatus == 2) {
|
| - segment.m_Start = pos;
|
| - segment.m_nCount = 1;
|
| - segmentStatus = 1;
|
| - } else if (segmentStatus == 1) {
|
| - segment.m_nCount++;
|
| - }
|
| - IsContainPreChar = TRUE;
|
| - } else if (charinfo.m_Unicode == 32) {
|
| - if (IsContainPreChar == TRUE) {
|
| - if (segmentStatus == 0 || segmentStatus == 2) {
|
| - segment.m_Start = pos;
|
| - segment.m_nCount = 1;
|
| - segmentStatus = 1;
|
| - } else if (segmentStatus == 1) {
|
| - segment.m_nCount++;
|
| - }
|
| - IsContainPreChar = FALSE;
|
| - } else {
|
| - if (segmentStatus == 1) {
|
| - segmentStatus = 2;
|
| - m_Segments.Add(segment);
|
| - segment.m_Start = 0;
|
| - segment.m_nCount = 0;
|
| - }
|
| - }
|
| - } else {
|
| - if (segmentStatus == 1) {
|
| - segmentStatus = 2;
|
| - m_Segments.Add(segment);
|
| - segment.m_Start = 0;
|
| - segment.m_nCount = 0;
|
| - }
|
| - IsContainPreChar = FALSE;
|
| - }
|
| - pos++;
|
| - }
|
| - if (segmentStatus == 1) {
|
| - segmentStatus = 2;
|
| - m_Segments.Add(segment);
|
| - segment.m_Start = 0;
|
| - segment.m_nCount = 0;
|
| - }
|
| - return m_Segments.GetSize();
|
| -}
|
| -
|
| CPDF_TextPage::TextOrientation CPDF_TextPage::FindTextlineFlowOrientation()
|
| const {
|
| if (m_pPage->GetPageObjectList()->empty())
|
| @@ -791,11 +645,10 @@ void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj,
|
|
|
| for (auto it = pObjectList->begin(); it != pObjectList->end(); ++it) {
|
| if (CPDF_PageObject* pPageObj = it->get()) {
|
| - if (pPageObj->IsText()) {
|
| + if (pPageObj->IsText())
|
| ProcessTextObject(pPageObj->AsText(), curFormMatrix, pObjectList, it);
|
| - } else if (pPageObj->IsForm()) {
|
| + else if (pPageObj->IsForm())
|
| ProcessFormObject(pPageObj->AsForm(), curFormMatrix);
|
| - }
|
| }
|
| }
|
| }
|
| @@ -880,10 +733,10 @@ void CPDF_TextPage::CloseTempLine() {
|
| return;
|
|
|
| CFX_WideString str = m_TempTextBuf.MakeString();
|
| - FX_BOOL bPrevSpace = FALSE;
|
| + bool bPrevSpace = false;
|
| for (int i = 0; i < str.GetLength(); i++) {
|
| if (str.GetAt(i) != ' ') {
|
| - bPrevSpace = FALSE;
|
| + bPrevSpace = false;
|
| continue;
|
| }
|
| if (bPrevSpace) {
|
| @@ -892,7 +745,7 @@ void CPDF_TextPage::CloseTempLine() {
|
| str.Delete(i);
|
| i--;
|
| }
|
| - bPrevSpace = TRUE;
|
| + bPrevSpace = true;
|
| }
|
| CFX_BidiString bidi(str);
|
| if (m_parserflag == FPDFText_Direction::Right)
|
| @@ -922,9 +775,8 @@ void CPDF_TextPage::ProcessTextObject(
|
| CPDF_PageObjectList::const_iterator ObjPos) {
|
| CFX_FloatRect re(pTextObj->m_Left, pTextObj->m_Bottom, pTextObj->m_Right,
|
| pTextObj->m_Top);
|
| - if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f) {
|
| + if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f)
|
| return;
|
| - }
|
| int count = m_LineObj.GetSize();
|
| PDFTEXT_Obj Obj;
|
| Obj.m_pTextObj = pTextObj;
|
| @@ -933,9 +785,8 @@ void CPDF_TextPage::ProcessTextObject(
|
| m_LineObj.Add(Obj);
|
| return;
|
| }
|
| - if (IsSameAsPreTextObject(pTextObj, pObjList, ObjPos)) {
|
| + if (IsSameAsPreTextObject(pTextObj, pObjList, ObjPos))
|
| return;
|
| - }
|
| PDFTEXT_Obj prev_Obj = m_LineObj.GetAt(count - 1);
|
| CPDF_TextObjectItem item;
|
| int nItem = prev_Obj.m_pTextObj->CountItems();
|
| @@ -967,9 +818,8 @@ void CPDF_TextPage::ProcessTextObject(
|
| formMatrix.Transform(this_x, this_y);
|
| m_DisplayMatrix.Transform(this_x, this_y);
|
| if (FXSYS_fabs(this_y - prev_y) > threshold * 2) {
|
| - for (int i = 0; i < count; i++) {
|
| + for (int i = 0; i < count; i++)
|
| ProcessTextObject(m_LineObj.GetAt(i));
|
| - }
|
| m_LineObj.RemoveAll();
|
| m_LineObj.Add(Obj);
|
| return;
|
| @@ -989,9 +839,8 @@ void CPDF_TextPage::ProcessTextObject(
|
| break;
|
| }
|
| }
|
| - if (i < 0) {
|
| + if (i < 0)
|
| m_LineObj.InsertAt(0, Obj);
|
| - }
|
| }
|
|
|
| FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| @@ -1005,7 +854,7 @@ FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| return FPDFText_MarkedContent::Pass;
|
|
|
| CFX_WideString actText;
|
| - FX_BOOL bExist = FALSE;
|
| + bool bExist = false;
|
| CPDF_Dictionary* pDict = nullptr;
|
| int n = 0;
|
| for (n = 0; n < nContentMark; n++) {
|
| @@ -1016,7 +865,7 @@ FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| CPDF_String* temp =
|
| ToString(pDict ? pDict->GetObjectBy("ActualText") : nullptr);
|
| if (temp) {
|
| - bExist = TRUE;
|
| + bExist = true;
|
| actText = temp->GetUnicodeText();
|
| }
|
| }
|
| @@ -1036,22 +885,22 @@ FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
|
| return FPDFText_MarkedContent::Pass;
|
|
|
| CPDF_Font* pFont = pTextObj->GetFont();
|
| - bExist = FALSE;
|
| + bExist = false;
|
| for (FX_STRSIZE i = 0; i < nItems; i++) {
|
| if (pFont->CharCodeFromUnicode(actText.GetAt(i)) !=
|
| CPDF_Font::kInvalidCharCode) {
|
| - bExist = TRUE;
|
| + bExist = true;
|
| break;
|
| }
|
| }
|
| if (!bExist)
|
| return FPDFText_MarkedContent::Pass;
|
|
|
| - bExist = FALSE;
|
| + bExist = false;
|
| for (FX_STRSIZE i = 0; i < nItems; i++) {
|
| FX_WCHAR wChar = actText.GetAt(i);
|
| if ((wChar > 0x80 && wChar < 0xFFFD) || (wChar <= 0x80 && isprint(wChar))) {
|
| - bExist = TRUE;
|
| + bExist = true;
|
| break;
|
| }
|
| }
|
| @@ -1099,12 +948,10 @@ void CPDF_TextPage::ProcessMarkedContent(PDFTEXT_Obj Obj) {
|
| charBox.bottom = pTextObj->m_Bottom;
|
| for (FX_STRSIZE k = 0; k < nItems; k++) {
|
| FX_WCHAR wChar = actText.GetAt(k);
|
| - if (wChar <= 0x80 && !isprint(wChar)) {
|
| + if (wChar <= 0x80 && !isprint(wChar))
|
| wChar = 0x20;
|
| - }
|
| - if (wChar >= 0xFFFD) {
|
| + if (wChar >= 0xFFFD)
|
| continue;
|
| - }
|
| PAGECHAR_INFO charinfo;
|
| charinfo.m_OriginX = fPosX;
|
| charinfo.m_OriginY = fPosY;
|
| @@ -1145,9 +992,8 @@ void CPDF_TextPage::SwapTempTextBuf(int32_t iCharListStartAppend,
|
| FX_WCHAR* pTempBuffer = m_TempTextBuf.GetBuffer();
|
| i = iBufStartAppend;
|
| j = m_TempTextBuf.GetLength() - 1;
|
| - for (; i < j; i++, j--) {
|
| + for (; i < j; i++, j--)
|
| std::swap(pTempBuffer[i], pTempBuffer[j]);
|
| - }
|
| }
|
|
|
| FX_BOOL CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
|
| @@ -1157,14 +1003,12 @@ FX_BOOL CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
|
| for (int32_t i = 0; i < nItems; i++) {
|
| CPDF_TextObjectItem item;
|
| pTextObj->GetItemInfo(i, &item);
|
| - if (item.m_CharCode == (uint32_t)-1) {
|
| + if (item.m_CharCode == static_cast<uint32_t>(-1))
|
| continue;
|
| - }
|
| CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
|
| FX_WCHAR wChar = wstrItem.GetAt(0);
|
| - if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
|
| + if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode)
|
| wChar = (FX_WCHAR)item.m_CharCode;
|
| - }
|
| if (wChar)
|
| str += wChar;
|
| }
|
| @@ -1173,9 +1017,8 @@ FX_BOOL CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
|
|
|
| void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| CPDF_TextObject* pTextObj = Obj.m_pTextObj;
|
| - if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f) {
|
| + if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f)
|
| return;
|
| - }
|
| CFX_Matrix formMatrix = Obj.m_formMatrix;
|
| CPDF_Font* pFont = pTextObj->GetFont();
|
| CFX_Matrix matrix;
|
| @@ -1225,9 +1068,8 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| pTextObj->GetCharInfo(0, &item);
|
| CFX_WideString wstrItem =
|
| pTextObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
|
| - if (wstrItem.IsEmpty()) {
|
| + if (wstrItem.IsEmpty())
|
| wstrItem += (FX_WCHAR)item.m_CharCode;
|
| - }
|
| FX_WCHAR curChar = wstrItem.GetAt(0);
|
| if (curChar == 0x2D || curChar == 0xAD)
|
| return;
|
| @@ -1275,11 +1117,10 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| charinfo.m_OriginX = 0;
|
| charinfo.m_OriginY = 0;
|
| pTextObj->GetItemInfo(i, &item);
|
| - if (item.m_CharCode == (uint32_t)-1) {
|
| + if (item.m_CharCode == static_cast<uint32_t>(-1)) {
|
| CFX_WideString str = m_TempTextBuf.MakeString();
|
| - if (str.IsEmpty()) {
|
| + if (str.IsEmpty())
|
| str = m_TextBuf.AsStringC();
|
| - }
|
| if (str.IsEmpty() || str.GetAt(str.GetLength() - 1) == TEXT_SPACE_CHAR)
|
| continue;
|
|
|
| @@ -1288,25 +1129,22 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| continue;
|
| }
|
| FX_FLOAT charSpace = pTextObj->m_TextState.GetObject()->m_CharSpace;
|
| - if (charSpace > 0.001) {
|
| + if (charSpace > 0.001)
|
| spacing += matrix.TransformDistance(charSpace);
|
| - } else if (charSpace < -0.001) {
|
| + else if (charSpace < -0.001)
|
| spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace));
|
| - }
|
| spacing -= baseSpace;
|
| if (spacing && i > 0) {
|
| int last_width = 0;
|
| FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
|
| uint32_t space_charcode = pFont->CharCodeFromUnicode(' ');
|
| FX_FLOAT threshold = 0;
|
| - if (space_charcode != CPDF_Font::kInvalidCharCode) {
|
| + if (space_charcode != CPDF_Font::kInvalidCharCode)
|
| threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000;
|
| - }
|
| - if (threshold > fontsize_h / 3) {
|
| + if (threshold > fontsize_h / 3)
|
| threshold = 0;
|
| - } else {
|
| + else
|
| threshold /= 2;
|
| - }
|
| if (threshold == 0) {
|
| threshold = fontsize_h;
|
| int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont));
|
| @@ -1330,29 +1168,26 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| charinfo.m_OriginX, charinfo.m_OriginY);
|
| m_TempCharList.push_back(charinfo);
|
| }
|
| - if (item.m_CharCode == CPDF_Font::kInvalidCharCode) {
|
| + if (item.m_CharCode == CPDF_Font::kInvalidCharCode)
|
| continue;
|
| - }
|
| }
|
| spacing = 0;
|
| CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
|
| - FX_BOOL bNoUnicode = FALSE;
|
| + bool bNoUnicode = false;
|
| FX_WCHAR wChar = wstrItem.GetAt(0);
|
| if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
|
| - if (wstrItem.IsEmpty()) {
|
| + if (wstrItem.IsEmpty())
|
| wstrItem += (FX_WCHAR)item.m_CharCode;
|
| - } else {
|
| + else
|
| wstrItem.SetAt(0, (FX_WCHAR)item.m_CharCode);
|
| - }
|
| - bNoUnicode = TRUE;
|
| + bNoUnicode = true;
|
| }
|
| charinfo.m_Index = -1;
|
| charinfo.m_CharCode = item.m_CharCode;
|
| - if (bNoUnicode) {
|
| + if (bNoUnicode)
|
| charinfo.m_Flag = FPDFTEXT_CHAR_UNUNICODE;
|
| - } else {
|
| + else
|
| charinfo.m_Flag = FPDFTEXT_CHAR_NORMAL;
|
| - }
|
| charinfo.m_pTextObj = pTextObj;
|
| charinfo.m_OriginX = 0, charinfo.m_OriginY = 0;
|
| matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX,
|
| @@ -1384,7 +1219,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| continue;
|
| } else {
|
| int nTotal = wstrItem.GetLength();
|
| - FX_BOOL bDel = FALSE;
|
| + bool bDel = false;
|
| const int count =
|
| std::min(pdfium::CollectionSize<int>(m_TempCharList), 7);
|
| FX_FLOAT threshold = charinfo.m_Matrix.TransformXDistance(
|
| @@ -1396,7 +1231,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| charinfo1.m_pTextObj->GetFont() == charinfo.m_pTextObj->GetFont() &&
|
| FXSYS_fabs(charinfo1.m_OriginX - charinfo.m_OriginX) < threshold &&
|
| FXSYS_fabs(charinfo1.m_OriginY - charinfo.m_OriginY) < threshold) {
|
| - bDel = TRUE;
|
| + bDel = true;
|
| break;
|
| }
|
| }
|
| @@ -1421,9 +1256,8 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
|
| }
|
| }
|
| }
|
| - if (bIsBidiAndMirrorInverse) {
|
| + if (bIsBidiAndMirrorInverse)
|
| SwapTempTextBuf(iCharListStartAppend, iBufStartAppend);
|
| - }
|
| }
|
|
|
| CPDF_TextPage::TextOrientation CPDF_TextPage::GetTextObjectWritingMode(
|
| @@ -1457,15 +1291,13 @@ CPDF_TextPage::TextOrientation CPDF_TextPage::GetTextObjectWritingMode(
|
|
|
| FX_BOOL CPDF_TextPage::IsHyphen(FX_WCHAR curChar) {
|
| CFX_WideString strCurText = m_TempTextBuf.MakeString();
|
| - if (strCurText.GetLength() == 0) {
|
| + if (strCurText.IsEmpty())
|
| strCurText = m_TextBuf.AsStringC();
|
| - }
|
| FX_STRSIZE nCount = strCurText.GetLength();
|
| int nIndex = nCount - 1;
|
| FX_WCHAR wcTmp = strCurText.GetAt(nIndex);
|
| - while (wcTmp == 0x20 && nIndex <= nCount - 1 && nIndex >= 0) {
|
| + while (wcTmp == 0x20 && nIndex <= nCount - 1 && nIndex >= 0)
|
| wcTmp = strCurText.GetAt(--nIndex);
|
| - }
|
| if (0x2D == wcTmp || 0xAD == wcTmp) {
|
| if (--nIndex > 0) {
|
| FX_WCHAR preChar = strCurText.GetAt((nIndex));
|
| @@ -1477,13 +1309,12 @@ FX_BOOL CPDF_TextPage::IsHyphen(FX_WCHAR curChar) {
|
| }
|
| }
|
| const PAGECHAR_INFO* preInfo;
|
| - if (!m_TempCharList.empty()) {
|
| + if (!m_TempCharList.empty())
|
| preInfo = &m_TempCharList.back();
|
| - } else if (!m_CharList.empty()) {
|
| + else if (!m_CharList.empty())
|
| preInfo = &m_CharList.back();
|
| - } else {
|
| + else
|
| return FALSE;
|
| - }
|
| if (FPDFTEXT_CHAR_PIECE == preInfo->m_Flag &&
|
| (0xAD == preInfo->m_Unicode || 0x2D == preInfo->m_Unicode)) {
|
| return TRUE;
|
| @@ -1510,9 +1341,8 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
|
| pObj->GetItemInfo(0, &item);
|
| CFX_WideString wstrItem =
|
| pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
|
| - if (wstrItem.IsEmpty()) {
|
| - wstrItem += (FX_WCHAR)item.m_CharCode;
|
| - }
|
| + if (wstrItem.IsEmpty())
|
| + wstrItem += static_cast<FX_WCHAR>(item.m_CharCode);
|
| FX_WCHAR curChar = wstrItem.GetAt(0);
|
| if (WritingMode == TextOrientation::Horizontal) {
|
| if (this_rect.Height() > 4.5 && prev_rect.Height() > 4.5) {
|
| @@ -1556,9 +1386,8 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
|
| FX_FLOAT y = pObj->GetPosY();
|
| formMatrix.Transform(x, y);
|
| prev_reverse.Transform(x, y);
|
| - if (last_width < this_width) {
|
| + if (last_width < this_width)
|
| threshold = prev_reverse.TransformDistance(threshold);
|
| - }
|
| bool bNewline = false;
|
| if (WritingMode == TextOrientation::Horizontal) {
|
| CFX_FloatRect rect1(m_pPreTextObj->m_Left, pObj->m_Bottom,
|
| @@ -1636,9 +1465,8 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
|
| (last_pos - x - last_width) > threshold) {
|
| return GenerateCharacter::Space;
|
| }
|
| - if (x < 0 && (last_pos - x - last_width) > threshold) {
|
| + if (x < 0 && (last_pos - x - last_width) > threshold)
|
| return GenerateCharacter::Space;
|
| - }
|
| if ((x - last_pos - last_width) > this_width ||
|
| (x - last_pos - this_width) > last_width) {
|
| return GenerateCharacter::Space;
|
| @@ -1650,9 +1478,8 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
|
|
|
| FX_BOOL CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1,
|
| CPDF_TextObject* pTextObj2) {
|
| - if (!pTextObj1 || !pTextObj2) {
|
| + if (!pTextObj1 || !pTextObj2)
|
| return FALSE;
|
| - }
|
| CFX_FloatRect rcPreObj(pTextObj2->m_Left, pTextObj2->m_Bottom,
|
| pTextObj2->m_Right, pTextObj2->m_Top);
|
| CFX_FloatRect rcCurObj(pTextObj1->m_Left, pTextObj1->m_Bottom,
|
| @@ -1663,29 +1490,25 @@ FX_BOOL CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1,
|
| if (nCount >= 2) {
|
| PAGECHAR_INFO perCharTemp = m_CharList[nCount - 2];
|
| FX_FLOAT dbSpace = perCharTemp.m_CharBox.Width();
|
| - if (dbXdif > dbSpace) {
|
| + if (dbXdif > dbSpace)
|
| return FALSE;
|
| - }
|
| }
|
| }
|
| if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) {
|
| rcPreObj.Intersect(rcCurObj);
|
| - if (rcPreObj.IsEmpty()) {
|
| + if (rcPreObj.IsEmpty())
|
| return FALSE;
|
| - }
|
| if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) >
|
| rcCurObj.Width() / 2) {
|
| return FALSE;
|
| }
|
| - if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) {
|
| + if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize())
|
| return FALSE;
|
| - }
|
| }
|
| int nPreCount = pTextObj2->CountItems();
|
| int nCurCount = pTextObj1->CountItems();
|
| - if (nPreCount != nCurCount) {
|
| + if (nPreCount != nCurCount)
|
| return FALSE;
|
| - }
|
| // If both objects have no items, consider them same.
|
| if (!nPreCount)
|
| return TRUE;
|
| @@ -1695,9 +1518,8 @@ FX_BOOL CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1,
|
| for (int i = 0; i < nPreCount; i++) {
|
| pTextObj2->GetItemInfo(i, &itemPer);
|
| pTextObj1->GetItemInfo(i, &itemCur);
|
| - if (itemCur.m_CharCode != itemPer.m_CharCode) {
|
| + if (itemCur.m_CharCode != itemPer.m_CharCode)
|
| return FALSE;
|
| - }
|
| }
|
| if (FXSYS_fabs(pTextObj1->GetPosX() - pTextObj2->GetPosX()) >
|
| GetCharWidth(itemPer.m_CharCode, pTextObj2->GetFont()) *
|
| @@ -1730,13 +1552,12 @@ FX_BOOL CPDF_TextPage::IsSameAsPreTextObject(
|
|
|
| FX_BOOL CPDF_TextPage::GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info) {
|
| const PAGECHAR_INFO* preChar;
|
| - if (!m_TempCharList.empty()) {
|
| + if (!m_TempCharList.empty())
|
| preChar = &m_TempCharList.back();
|
| - } else if (!m_CharList.empty()) {
|
| + else if (!m_CharList.empty())
|
| preChar = &m_CharList.back();
|
| - } else {
|
| + else
|
| return FALSE;
|
| - }
|
| info.m_Index = m_TextBuf.GetLength();
|
| info.m_Unicode = unicode;
|
| info.m_pTextObj = nullptr;
|
|
|