summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fpdfapi/page/cpdf_textobject.cpp28
-rw-r--r--core/fpdfapi/page/cpdf_textobject.h13
-rw-r--r--core/fpdftext/cpdf_textpage.cpp51
-rw-r--r--core/fpdftext/cpdf_textpage.h2
4 files changed, 54 insertions, 40 deletions
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index 4baf61dd72..ac90eb1e50 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -21,13 +21,14 @@ CPDF_TextObject::CPDF_TextObject() {}
CPDF_TextObject::~CPDF_TextObject() {}
-int CPDF_TextObject::CountItems() const {
- return pdfium::CollectionSize<int>(m_CharCodes);
+size_t CPDF_TextObject::CountItems() const {
+ return m_CharCodes.size();
}
-void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const {
+void CPDF_TextObject::GetItemInfo(size_t index,
+ CPDF_TextObjectItem* pInfo) const {
pInfo->m_CharCode = m_CharCodes[index];
- pInfo->m_Origin = CFX_PointF(index ? m_CharPos[index - 1] : 0, 0);
+ pInfo->m_Origin = CFX_PointF(index > 0 ? m_CharPos[index - 1] : 0, 0);
if (pInfo->m_CharCode == CPDF_Font::kInvalidCharCode)
return;
@@ -49,19 +50,19 @@ void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const {
pInfo->m_Origin.y -= fontsize * vy / 1000;
}
-int CPDF_TextObject::CountChars() const {
- int count = 0;
+size_t CPDF_TextObject::CountChars() const {
+ size_t count = 0;
for (uint32_t charcode : m_CharCodes) {
if (charcode != CPDF_Font::kInvalidCharCode)
- count++;
+ ++count;
}
return count;
}
-void CPDF_TextObject::GetCharInfo(int index,
+void CPDF_TextObject::GetCharInfo(size_t index,
uint32_t* charcode,
float* kerning) const {
- int count = 0;
+ size_t count = 0;
for (size_t i = 0; i < m_CharCodes.size(); ++i) {
if (m_CharCodes[i] == CPDF_Font::kInvalidCharCode)
continue;
@@ -78,9 +79,10 @@ void CPDF_TextObject::GetCharInfo(int index,
}
}
-void CPDF_TextObject::GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const {
- int count = 0;
- for (int i = 0; i < pdfium::CollectionSize<int>(m_CharCodes); ++i) {
+void CPDF_TextObject::GetCharInfo(size_t index,
+ CPDF_TextObjectItem* pInfo) const {
+ size_t count = 0;
+ for (size_t i = 0; i < m_CharCodes.size(); ++i) {
uint32_t charcode = m_CharCodes[i];
if (charcode == CPDF_Font::kInvalidCharCode)
continue;
@@ -203,7 +205,7 @@ CFX_PointF CPDF_TextObject::CalcPositionData(float horz_scale) {
bVertWriting = pCIDFont->IsVertWriting();
float fontsize = m_TextState.GetFontSize();
- for (int i = 0; i < pdfium::CollectionSize<int>(m_CharCodes); ++i) {
+ for (size_t i = 0; i < m_CharCodes.size(); ++i) {
uint32_t charcode = m_CharCodes[i];
if (i > 0) {
if (charcode == CPDF_Font::kInvalidCharCode) {
diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h
index 02653dc2aa..a6fc62369c 100644
--- a/core/fpdfapi/page/cpdf_textobject.h
+++ b/core/fpdfapi/page/cpdf_textobject.h
@@ -36,12 +36,15 @@ class CPDF_TextObject : public CPDF_PageObject {
const CPDF_TextObject* AsText() const override;
std::unique_ptr<CPDF_TextObject> Clone() const;
- int CountItems() const;
- void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;
- int CountChars() const;
- void GetCharInfo(int index, uint32_t* charcode, float* kerning) const;
- void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;
+
+ size_t CountItems() const;
+ void GetItemInfo(size_t index, CPDF_TextObjectItem* pInfo) const;
+
+ size_t CountChars() const;
+ void GetCharInfo(size_t index, uint32_t* charcode, float* kerning) const;
+ void GetCharInfo(size_t index, CPDF_TextObjectItem* pInfo) const;
float GetCharWidth(uint32_t charcode) const;
+
CFX_PointF GetPos() const { return m_Pos; }
CFX_Matrix GetTextMatrix() const;
CPDF_Font* GetFont() const;
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index edd5456c1a..7ea2061c26 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -44,13 +44,13 @@ float NormalizeThreshold(float threshold) {
float CalculateBaseSpace(const CPDF_TextObject* pTextObj,
const CFX_Matrix& matrix) {
float baseSpace = 0.0;
- const int nItems = pTextObj->CountItems();
+ const size_t nItems = pTextObj->CountItems();
if (pTextObj->m_TextState.GetCharSpace() && nItems >= 3) {
bool bAllChar = true;
float spacing =
matrix.TransformDistance(pTextObj->m_TextState.GetCharSpace());
baseSpace = spacing;
- for (int i = 0; i < nItems; i++) {
+ for (size_t i = 0; i < nItems; ++i) {
CPDF_TextObjectItem item;
pTextObj->GetItemInfo(i, &item);
if (item.m_CharCode == static_cast<uint32_t>(-1)) {
@@ -758,8 +758,11 @@ void CPDF_TextPage::ProcessTextObject(
return;
PDFTEXT_Obj prev_Obj = m_LineObj[count - 1];
+ size_t nItem = prev_Obj.m_pTextObj->CountItems();
+ if (nItem == 0)
+ return;
+
CPDF_TextObjectItem item;
- int nItem = prev_Obj.m_pTextObj->CountItems();
prev_Obj.m_pTextObj->GetItemInfo(nItem - 1, &item);
float prev_width =
GetCharWidth(item.m_CharCode, prev_Obj.m_pTextObj->GetFont()) *
@@ -811,7 +814,7 @@ FPDFText_MarkedContent CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
return FPDFText_MarkedContent::Pass;
size_t nContentMark = pTextObj->m_ContentMark.CountItems();
- if (nContentMark < 1)
+ if (nContentMark == 0)
return FPDFText_MarkedContent::Pass;
WideString actText;
@@ -939,9 +942,9 @@ void CPDF_TextPage::SwapTempTextBuf(int32_t iCharListStartAppend,
bool CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
const CPDF_Font* pFont,
- int nItems) const {
+ size_t nItems) const {
WideString str;
- for (int32_t i = 0; i < nItems; i++) {
+ for (size_t i = 0; i < nItems; ++i) {
CPDF_TextObjectItem item;
pTextObj->GetItemInfo(i, &item);
if (item.m_CharCode == static_cast<uint32_t>(-1))
@@ -1036,7 +1039,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
}
m_pPreTextObj = pTextObj;
m_perMatrix = formMatrix;
- int nItems = pTextObj->CountItems();
+ size_t nItems = pTextObj->CountItems();
float baseSpace = CalculateBaseSpace(pTextObj, matrix);
const bool bR2L = IsRightToLeft(pTextObj, pFont, nItems);
@@ -1047,7 +1050,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
pdfium::CollectionSize<int32_t>(m_TempCharList);
float spacing = 0;
- for (int i = 0; i < nItems; i++) {
+ for (size_t i = 0; i < nItems; ++i) {
CPDF_TextObjectItem item;
PAGECHAR_INFO charinfo;
pTextObj->GetItemInfo(i, &item);
@@ -1190,8 +1193,8 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
CPDF_TextPage::TextOrientation CPDF_TextPage::GetTextObjectWritingMode(
const CPDF_TextObject* pTextObj) const {
- int32_t nChars = pTextObj->CountChars();
- if (nChars == 1)
+ size_t nChars = pTextObj->CountChars();
+ if (nChars <= 1)
return m_TextlineDir;
CPDF_TextObjectItem first, last;
@@ -1260,13 +1263,19 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
if (WritingMode == TextOrientation::Unknown)
WritingMode = GetTextObjectWritingMode(m_pPreTextObj.Get());
- CFX_FloatRect this_rect = pObj->GetRect();
- CFX_FloatRect prev_rect = m_pPreTextObj->GetRect();
+ size_t nItem = m_pPreTextObj->CountItems();
+ if (nItem == 0)
+ return GenerateCharacter::None;
+
CPDF_TextObjectItem PrevItem;
- CPDF_TextObjectItem item;
- int nItem = m_pPreTextObj->CountItems();
m_pPreTextObj->GetItemInfo(nItem - 1, &PrevItem);
+
+ CPDF_TextObjectItem item;
pObj->GetItemInfo(0, &item);
+
+ CFX_FloatRect this_rect = pObj->GetRect();
+ CFX_FloatRect prev_rect = m_pPreTextObj->GetRect();
+
WideString wstrItem = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
if (wstrItem.IsEmpty())
wstrItem += static_cast<wchar_t>(item.m_CharCode);
@@ -1350,8 +1359,7 @@ CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
: GenerateCharacter::LineBreak;
}
- int32_t nChars = pObj->CountChars();
- if (nChars == 1 && (0x2D == curChar || 0xAD == curChar) &&
+ if (pObj->CountChars() == 1 && (0x2D == curChar || 0xAD == curChar) &&
IsHyphen(curChar)) {
return GenerateCharacter::Hyphen;
}
@@ -1424,17 +1432,18 @@ bool CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1,
if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize())
return false;
}
- int nPreCount = pTextObj2->CountItems();
- int nCurCount = pTextObj1->CountItems();
- if (nPreCount != nCurCount)
+
+ size_t nPreCount = pTextObj2->CountItems();
+ if (nPreCount != pTextObj1->CountItems())
return false;
+
// If both objects have no items, consider them same.
- if (!nPreCount)
+ if (nPreCount == 0)
return true;
CPDF_TextObjectItem itemPer;
CPDF_TextObjectItem itemCur;
- for (int i = 0; i < nPreCount; i++) {
+ for (size_t i = 0; i < nPreCount; ++i) {
pTextObj2->GetItemInfo(i, &itemPer);
pTextObj1->GetItemInfo(i, &itemCur);
if (itemCur.m_CharCode != itemPer.m_CharCode)
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index 4275d82a18..e8ab82ac2c 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -161,7 +161,7 @@ class CPDF_TextPage {
void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend);
bool IsRightToLeft(const CPDF_TextObject* pTextObj,
const CPDF_Font* pFont,
- int nItems) const;
+ size_t nItems) const;
UnownedPtr<const CPDF_Page> const m_pPage;
std::vector<uint16_t> m_CharIndex;