Index: core/src/fpdftext/fpdf_text_search.cpp |
diff --git a/core/src/fpdftext/fpdf_text_search.cpp b/core/src/fpdftext/fpdf_text_search.cpp |
index 21a2564ae6cd7dd2f2de6a692d73dd51a3adaae0..95839b54fbcc450f99db5518bba16f5b8b823fc2 100644 |
--- a/core/src/fpdftext/fpdf_text_search.cpp |
+++ b/core/src/fpdftext/fpdf_text_search.cpp |
@@ -6,315 +6,330 @@ |
#include "../../include/fpdfapi/fpdf_pageobj.h" |
#include "../../include/fpdfapi/fpdf_page.h" |
-class CPDF_TextStream |
-{ |
-public: |
- CPDF_TextStream(CFX_WideTextBuf& buffer, FX_BOOL bUseLF, CFX_PtrArray* pObjArray); |
- ~CPDF_TextStream() {} |
- FX_BOOL ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine); |
- CFX_WideTextBuf& m_Buffer; |
- FX_BOOL m_bUseLF; |
- CFX_PtrArray* m_pObjArray; |
- const CPDF_TextObject* m_pLastObj; |
+class CPDF_TextStream { |
+ public: |
+ CPDF_TextStream(CFX_WideTextBuf& buffer, |
+ FX_BOOL bUseLF, |
+ CFX_PtrArray* pObjArray); |
+ ~CPDF_TextStream() {} |
+ FX_BOOL ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine); |
+ CFX_WideTextBuf& m_Buffer; |
+ FX_BOOL m_bUseLF; |
+ CFX_PtrArray* m_pObjArray; |
+ const CPDF_TextObject* m_pLastObj; |
}; |
-CPDF_TextStream::CPDF_TextStream(CFX_WideTextBuf& buffer, FX_BOOL bUseLF, CFX_PtrArray* pObjArray) : m_Buffer(buffer) |
-{ |
- m_pLastObj = NULL; |
- m_bUseLF = bUseLF; |
- m_pObjArray = pObjArray; |
+CPDF_TextStream::CPDF_TextStream(CFX_WideTextBuf& buffer, |
+ FX_BOOL bUseLF, |
+ CFX_PtrArray* pObjArray) |
+ : m_Buffer(buffer) { |
+ m_pLastObj = NULL; |
+ m_bUseLF = bUseLF; |
+ m_pObjArray = pObjArray; |
} |
-FX_BOOL FPDFText_IsSameTextObject(const CPDF_TextObject* pTextObj1, const CPDF_TextObject* pTextObj2) |
-{ |
- if (!pTextObj1 || !pTextObj2) { |
- return FALSE; |
+FX_BOOL FPDFText_IsSameTextObject(const CPDF_TextObject* pTextObj1, |
+ const CPDF_TextObject* 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, |
+ pTextObj1->m_Right, pTextObj1->m_Top); |
+ if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty()) { |
+ return TRUE; |
+ } |
+ if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) { |
+ rcPreObj.Intersect(rcCurObj); |
+ if (rcPreObj.IsEmpty()) { |
+ 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, pTextObj1->m_Right, pTextObj1->m_Top); |
- if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty()) { |
- return TRUE; |
+ if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) > |
+ rcCurObj.Width() / 2) { |
+ return FALSE; |
} |
- if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) { |
- rcPreObj.Intersect(rcCurObj); |
- if (rcPreObj.IsEmpty()) { |
- return FALSE; |
- } |
- if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) > rcCurObj.Width() / 2) { |
- return FALSE; |
- } |
- if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) { |
- return FALSE; |
- } |
- } |
- int nPreCount = pTextObj2->CountItems(); |
- int nCurCount = pTextObj1->CountItems(); |
- if (nPreCount != nCurCount) { |
- return FALSE; |
+ if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) { |
+ return FALSE; |
} |
- for (int i = 0; i < nPreCount; i++) { |
- CPDF_TextObjectItem itemPer, itemCur; |
- pTextObj2->GetItemInfo(i, &itemPer); |
- pTextObj1->GetItemInfo(i, &itemCur); |
- if (itemCur.m_CharCode != itemPer.m_CharCode) { |
- return FALSE; |
- } |
+ } |
+ int nPreCount = pTextObj2->CountItems(); |
+ int nCurCount = pTextObj1->CountItems(); |
+ if (nPreCount != nCurCount) { |
+ return FALSE; |
+ } |
+ for (int i = 0; i < nPreCount; i++) { |
+ CPDF_TextObjectItem itemPer, itemCur; |
+ pTextObj2->GetItemInfo(i, &itemPer); |
+ pTextObj1->GetItemInfo(i, &itemCur); |
+ if (itemCur.m_CharCode != itemPer.m_CharCode) { |
+ return FALSE; |
} |
- return TRUE; |
+ } |
+ return TRUE; |
} |
-int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) |
-{ |
- if(charCode == -1) { |
- return 0; |
- } |
- int w = pFont->GetCharWidthF(charCode); |
- if(w == 0) { |
- CFX_ByteString str; |
- pFont->AppendChar(str, charCode); |
- w = pFont->GetStringWidth(str, 1); |
- if(w == 0) { |
- FX_RECT BBox; |
- pFont->GetCharBBox(charCode, BBox); |
- w = BBox.right - BBox.left; |
- } |
+int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) { |
+ if (charCode == -1) { |
+ return 0; |
+ } |
+ int w = pFont->GetCharWidthF(charCode); |
+ if (w == 0) { |
+ CFX_ByteString str; |
+ pFont->AppendChar(str, charCode); |
+ w = pFont->GetStringWidth(str, 1); |
+ if (w == 0) { |
+ FX_RECT BBox; |
+ pFont->GetCharBBox(charCode, BBox); |
+ w = BBox.right - BBox.left; |
} |
- return w; |
+ } |
+ return w; |
} |
-int FPDFText_ProcessInterObj(const CPDF_TextObject* pPrevObj, const CPDF_TextObject* pObj) |
-{ |
- if(FPDFText_IsSameTextObject(pPrevObj, pObj)) { |
- return -1; |
+int FPDFText_ProcessInterObj(const CPDF_TextObject* pPrevObj, |
+ const CPDF_TextObject* pObj) { |
+ if (FPDFText_IsSameTextObject(pPrevObj, pObj)) { |
+ return -1; |
+ } |
+ CPDF_TextObjectItem item; |
+ int nItem = pPrevObj->CountItems(); |
+ pPrevObj->GetItemInfo(nItem - 1, &item); |
+ FX_WCHAR preChar = 0, curChar = 0; |
+ CFX_WideString wstr = |
+ pPrevObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); |
+ if (wstr.GetLength()) { |
+ preChar = wstr.GetAt(0); |
+ } |
+ FX_FLOAT last_pos = item.m_OriginX; |
+ int nLastWidth = GetCharWidth(item.m_CharCode, pPrevObj->GetFont()); |
+ FX_FLOAT last_width = nLastWidth * pPrevObj->GetFontSize() / 1000; |
+ last_width = FXSYS_fabs(last_width); |
+ pObj->GetItemInfo(0, &item); |
+ wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); |
+ if (wstr.GetLength()) { |
+ curChar = wstr.GetAt(0); |
+ } |
+ int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont()); |
+ FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000; |
+ this_width = FXSYS_fabs(this_width); |
+ FX_FLOAT threshold = |
+ last_width > this_width ? last_width / 4 : this_width / 4; |
+ CFX_AffineMatrix prev_matrix, prev_reverse; |
+ pPrevObj->GetTextMatrix(&prev_matrix); |
+ prev_reverse.SetReverse(prev_matrix); |
+ FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY(); |
+ prev_reverse.Transform(x, y); |
+ if (FXSYS_fabs(y) > threshold * 2) { |
+ return 2; |
+ } |
+ threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth); |
+ threshold = threshold > 400 |
+ ? (threshold < 700 ? threshold / 4 : threshold / 5) |
+ : (threshold / 2); |
+ threshold *= nLastWidth > nThisWidth ? FXSYS_fabs(pPrevObj->GetFontSize()) |
+ : FXSYS_fabs(pObj->GetFontSize()); |
+ threshold /= 1000; |
+ if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' && |
+ preChar != L' ') |
+ if (curChar != L' ' && preChar != L' ') { |
+ if ((x - last_pos - last_width) > threshold || |
+ (last_pos - x - last_width) > threshold) { |
+ return 1; |
+ } |
+ if (x < 0 && (last_pos - x - last_width) > threshold) { |
+ return 1; |
+ } |
+ if ((x - last_pos - last_width) > this_width || |
+ (x - last_pos - this_width) > last_width) { |
+ return 1; |
+ } |
} |
- CPDF_TextObjectItem item; |
- int nItem = pPrevObj->CountItems(); |
- pPrevObj->GetItemInfo(nItem - 1, &item); |
- FX_WCHAR preChar = 0, curChar = 0; |
- CFX_WideString wstr = pPrevObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); |
- if(wstr.GetLength()) { |
- preChar = wstr.GetAt(0); |
- } |
- FX_FLOAT last_pos = item.m_OriginX; |
- int nLastWidth = GetCharWidth(item.m_CharCode, pPrevObj->GetFont()); |
- FX_FLOAT last_width = nLastWidth * pPrevObj->GetFontSize() / 1000; |
- last_width = FXSYS_fabs(last_width); |
- pObj->GetItemInfo(0, &item); |
- wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode); |
- if(wstr.GetLength()) { |
- curChar = wstr.GetAt(0); |
- } |
- int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont()); |
- FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000; |
- this_width = FXSYS_fabs(this_width); |
- FX_FLOAT threshold = last_width > this_width ? last_width / 4 : this_width / 4; |
- CFX_AffineMatrix prev_matrix, prev_reverse; |
- pPrevObj->GetTextMatrix(&prev_matrix); |
- prev_reverse.SetReverse(prev_matrix); |
- FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY(); |
- prev_reverse.Transform(x, y); |
- if (FXSYS_fabs(y) > threshold * 2) { |
- return 2; |
- } |
- threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth); |
- threshold = threshold > 400 ? (threshold < 700 ? threshold / 4 : threshold / 5) : (threshold / 2); |
- threshold *= nLastWidth > nThisWidth ? FXSYS_fabs(pPrevObj->GetFontSize()) : FXSYS_fabs(pObj->GetFontSize()); |
- threshold /= 1000; |
- if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' && preChar != L' ') |
- if(curChar != L' ' && preChar != L' ') { |
- if((x - last_pos - last_width) > threshold || (last_pos - x - last_width) > threshold) { |
- return 1; |
- } |
- if(x < 0 && (last_pos - x - last_width) > threshold) { |
- return 1; |
- } |
- if((x - last_pos - last_width) > this_width || (x - last_pos - this_width) > last_width ) { |
- return 1; |
- } |
- } |
- if(last_pos + last_width > x + this_width && curChar == L' ') { |
- return 3; |
- } |
- return 0; |
+ if (last_pos + last_width > x + this_width && curChar == L' ') { |
+ return 3; |
+ } |
+ return 0; |
} |
-FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine) |
-{ |
- CPDF_Font* pFont = pObj->GetFont(); |
- CFX_AffineMatrix matrix; |
- pObj->GetTextMatrix(&matrix); |
- int item_index = 0; |
- if (m_pLastObj) { |
- int result = FPDFText_ProcessInterObj(m_pLastObj, pObj); |
- if (result == 2) { |
- int len = m_Buffer.GetLength(); |
- if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') { |
- m_Buffer.Delete(len - 1, 1); |
- if (m_pObjArray) { |
- m_pObjArray->RemoveAt((len - 1) * 2, 2); |
- } |
- } else { |
- if (bFirstLine) { |
- return TRUE; |
- } |
- if (m_bUseLF) { |
- m_Buffer.AppendChar(L'\r'); |
- m_Buffer.AppendChar(L'\n'); |
- if (m_pObjArray) { |
- for (int i = 0; i < 4; i ++) { |
- m_pObjArray->Add(NULL); |
- } |
- } |
- } else { |
- m_Buffer.AppendChar(' '); |
- if (m_pObjArray) { |
- m_pObjArray->Add(NULL); |
- m_pObjArray->Add(NULL); |
- } |
- } |
- } |
- } else if (result == 1) { |
- m_Buffer.AppendChar(L' '); |
- if (m_pObjArray) { |
- m_pObjArray->Add(NULL); |
- m_pObjArray->Add(NULL); |
- } |
- } else if (result == -1) { |
- m_pLastObj = pObj; |
- return FALSE; |
- } else if (result == 3) { |
- item_index = 1; |
+FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj, |
+ FX_BOOL bFirstLine) { |
+ CPDF_Font* pFont = pObj->GetFont(); |
+ CFX_AffineMatrix matrix; |
+ pObj->GetTextMatrix(&matrix); |
+ int item_index = 0; |
+ if (m_pLastObj) { |
+ int result = FPDFText_ProcessInterObj(m_pLastObj, pObj); |
+ if (result == 2) { |
+ int len = m_Buffer.GetLength(); |
+ if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') { |
+ m_Buffer.Delete(len - 1, 1); |
+ if (m_pObjArray) { |
+ m_pObjArray->RemoveAt((len - 1) * 2, 2); |
} |
- } |
- m_pLastObj = pObj; |
- int nItems = pObj->CountItems(); |
- FX_FLOAT Ignorekerning = 0; |
- for(int i = 1; i < nItems - 1; i += 2) { |
- CPDF_TextObjectItem item; |
- pObj->GetItemInfo(i, &item); |
- if (item.m_CharCode == (FX_DWORD) - 1) { |
- if(i == 1) { |
- Ignorekerning = item.m_OriginX; |
- } else if(Ignorekerning > item.m_OriginX) { |
- Ignorekerning = item.m_OriginX; |
+ } else { |
+ if (bFirstLine) { |
+ return TRUE; |
+ } |
+ if (m_bUseLF) { |
+ m_Buffer.AppendChar(L'\r'); |
+ m_Buffer.AppendChar(L'\n'); |
+ if (m_pObjArray) { |
+ for (int i = 0; i < 4; i++) { |
+ m_pObjArray->Add(NULL); |
} |
+ } |
} else { |
- Ignorekerning = 0; |
- break; |
+ m_Buffer.AppendChar(' '); |
+ if (m_pObjArray) { |
+ m_pObjArray->Add(NULL); |
+ m_pObjArray->Add(NULL); |
+ } |
} |
+ } |
+ } else if (result == 1) { |
+ m_Buffer.AppendChar(L' '); |
+ if (m_pObjArray) { |
+ m_pObjArray->Add(NULL); |
+ m_pObjArray->Add(NULL); |
+ } |
+ } else if (result == -1) { |
+ m_pLastObj = pObj; |
+ return FALSE; |
+ } else if (result == 3) { |
+ item_index = 1; |
} |
- FX_FLOAT spacing = 0; |
- for (; item_index < nItems; item_index ++) { |
- CPDF_TextObjectItem item; |
- pObj->GetItemInfo(item_index, &item); |
- if (item.m_CharCode == (FX_DWORD) - 1) { |
- CFX_WideString wstr = m_Buffer.GetWideString(); |
- if (wstr.IsEmpty() || wstr.GetAt(wstr.GetLength() - 1) == L' ') { |
- continue; |
- } |
- FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH(); |
- spacing = -fontsize_h * (item.m_OriginX - Ignorekerning) / 1000; |
- continue; |
+ } |
+ m_pLastObj = pObj; |
+ int nItems = pObj->CountItems(); |
+ FX_FLOAT Ignorekerning = 0; |
+ for (int i = 1; i < nItems - 1; i += 2) { |
+ CPDF_TextObjectItem item; |
+ pObj->GetItemInfo(i, &item); |
+ if (item.m_CharCode == (FX_DWORD)-1) { |
+ if (i == 1) { |
+ Ignorekerning = item.m_OriginX; |
+ } else if (Ignorekerning > item.m_OriginX) { |
+ Ignorekerning = item.m_OriginX; |
+ } |
+ } else { |
+ Ignorekerning = 0; |
+ break; |
+ } |
+ } |
+ FX_FLOAT spacing = 0; |
+ for (; item_index < nItems; item_index++) { |
+ CPDF_TextObjectItem item; |
+ pObj->GetItemInfo(item_index, &item); |
+ if (item.m_CharCode == (FX_DWORD)-1) { |
+ CFX_WideString wstr = m_Buffer.GetWideString(); |
+ if (wstr.IsEmpty() || wstr.GetAt(wstr.GetLength() - 1) == L' ') { |
+ continue; |
+ } |
+ FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH(); |
+ spacing = -fontsize_h * (item.m_OriginX - Ignorekerning) / 1000; |
+ continue; |
+ } |
+ FX_FLOAT charSpace = pObj->m_TextState.GetObject()->m_CharSpace; |
+ if (nItems > 3 && !spacing) { |
+ charSpace = 0; |
+ } |
+ if ((spacing || charSpace) && item_index > 0) { |
+ int last_width = 0; |
+ FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH(); |
+ FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' '); |
+ FX_FLOAT threshold = 0; |
+ if (space_charcode != -1) { |
+ threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000; |
+ } |
+ if (threshold > fontsize_h / 3) { |
+ threshold = 0; |
+ } else { |
+ threshold /= 2; |
+ } |
+ if (threshold == 0) { |
+ threshold = fontsize_h; |
+ int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont)); |
+ threshold = this_width > last_width ? (FX_FLOAT)this_width |
+ : (FX_FLOAT)last_width; |
+ int nDivide = 6; |
+ if (threshold < 300) { |
+ nDivide = 2; |
+ } else if (threshold < 500) { |
+ nDivide = 4; |
+ } else if (threshold < 700) { |
+ nDivide = 5; |
} |
- FX_FLOAT charSpace = pObj->m_TextState.GetObject()->m_CharSpace; |
- if(nItems > 3 && !spacing) { |
- charSpace = 0; |
+ threshold = threshold / nDivide; |
+ threshold = fontsize_h * threshold / 1000; |
+ } |
+ if (charSpace > 0.001) { |
+ spacing += matrix.TransformDistance(charSpace); |
+ } else if (charSpace < -0.001) { |
+ spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace)); |
+ } |
+ if (threshold && (spacing && spacing >= threshold)) { |
+ m_Buffer.AppendChar(L' '); |
+ if (m_pObjArray) { |
+ m_pObjArray->Add(NULL); |
+ m_pObjArray->Add(NULL); |
} |
- if((spacing || charSpace) && item_index > 0) { |
- int last_width = 0; |
- FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH(); |
- FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' '); |
- FX_FLOAT threshold = 0; |
- if (space_charcode != -1) { |
- threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000 ; |
- } |
- if(threshold > fontsize_h / 3) { |
- threshold = 0; |
- } else { |
- threshold /= 2; |
- } |
- if (threshold == 0) { |
- threshold = fontsize_h; |
- int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont)); |
- threshold = this_width > last_width ? (FX_FLOAT)this_width : (FX_FLOAT)last_width; |
- int nDivide = 6; |
- if (threshold < 300) { |
- nDivide = 2; |
- } else if (threshold < 500) { |
- nDivide = 4; |
- } else if (threshold < 700) { |
- nDivide = 5; |
- } |
- threshold = threshold / nDivide; |
- threshold = fontsize_h * threshold / 1000; |
- } |
- if(charSpace > 0.001) { |
- spacing += matrix.TransformDistance(charSpace); |
- } else if(charSpace < -0.001) { |
- spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace)); |
- } |
- if (threshold && (spacing && spacing >= threshold) ) { |
- m_Buffer.AppendChar(L' '); |
- if (m_pObjArray) { |
- m_pObjArray->Add(NULL); |
- m_pObjArray->Add(NULL); |
- } |
- } |
- if (item.m_CharCode == (FX_DWORD) - 1) { |
- continue; |
- } |
- spacing = 0; |
- } |
- CFX_WideString unicode_str = pFont->UnicodeFromCharCode(item.m_CharCode); |
- if (unicode_str.IsEmpty()) { |
- m_Buffer.AppendChar((FX_WCHAR)item.m_CharCode); |
- if (m_pObjArray) { |
- m_pObjArray->Add((void*)pObj); |
- m_pObjArray->Add((void*)(intptr_t)item_index); |
- } |
- } else { |
- m_Buffer << unicode_str; |
- if (m_pObjArray) { |
- for (int i = 0; i < unicode_str.GetLength(); i ++) { |
- m_pObjArray->Add((void*)pObj); |
- m_pObjArray->Add((void*)(intptr_t)item_index); |
- } |
- } |
+ } |
+ if (item.m_CharCode == (FX_DWORD)-1) { |
+ continue; |
+ } |
+ spacing = 0; |
+ } |
+ CFX_WideString unicode_str = pFont->UnicodeFromCharCode(item.m_CharCode); |
+ if (unicode_str.IsEmpty()) { |
+ m_Buffer.AppendChar((FX_WCHAR)item.m_CharCode); |
+ if (m_pObjArray) { |
+ m_pObjArray->Add((void*)pObj); |
+ m_pObjArray->Add((void*)(intptr_t)item_index); |
+ } |
+ } else { |
+ m_Buffer << unicode_str; |
+ if (m_pObjArray) { |
+ for (int i = 0; i < unicode_str.GetLength(); i++) { |
+ m_pObjArray->Add((void*)pObj); |
+ m_pObjArray->Add((void*)(intptr_t)item_index); |
} |
+ } |
} |
- return FALSE; |
+ } |
+ return FALSE; |
} |
-void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_PageObjects* pPage, FX_BOOL bUseLF, |
- CFX_PtrArray* pObjArray) |
-{ |
- CPDF_TextStream textstream(buffer, bUseLF, pObjArray); |
- FX_POSITION pos = pPage->GetFirstObjectPosition(); |
- while (pos) { |
- CPDF_PageObject* pObject = pPage->GetNextObject(pos); |
- if (pObject == NULL) { |
- continue; |
- } |
- if (pObject->m_Type != PDFPAGE_TEXT) { |
- continue; |
- } |
- textstream.ProcessObject((CPDF_TextObject*)pObject, FALSE); |
+void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, |
+ CPDF_PageObjects* pPage, |
+ FX_BOOL bUseLF, |
+ CFX_PtrArray* pObjArray) { |
+ CPDF_TextStream textstream(buffer, bUseLF, pObjArray); |
+ FX_POSITION pos = pPage->GetFirstObjectPosition(); |
+ while (pos) { |
+ CPDF_PageObject* pObject = pPage->GetNextObject(pos); |
+ if (pObject == NULL) { |
+ continue; |
+ } |
+ if (pObject->m_Type != PDFPAGE_TEXT) { |
+ continue; |
} |
+ textstream.ProcessObject((CPDF_TextObject*)pObject, FALSE); |
+ } |
} |
-CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc, CPDF_Dictionary* pPage) |
-{ |
- CFX_WideTextBuf buffer; |
- buffer.EstimateSize(0, 1024); |
- CPDF_Page page; |
- page.Load(pDoc, pPage); |
- CPDF_ParseOptions options; |
- options.m_bTextOnly = TRUE; |
- options.m_bSeparateForm = FALSE; |
- page.ParseContent(&options); |
- CPDF_TextStream textstream(buffer, FALSE, NULL); |
- FX_POSITION pos = page.GetFirstObjectPosition(); |
- while (pos) { |
- CPDF_PageObject* pObject = page.GetNextObject(pos); |
- if (pObject->m_Type != PDFPAGE_TEXT) { |
- continue; |
- } |
- if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) { |
- break; |
- } |
+CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc, |
+ CPDF_Dictionary* pPage) { |
+ CFX_WideTextBuf buffer; |
+ buffer.EstimateSize(0, 1024); |
+ CPDF_Page page; |
+ page.Load(pDoc, pPage); |
+ CPDF_ParseOptions options; |
+ options.m_bTextOnly = TRUE; |
+ options.m_bSeparateForm = FALSE; |
+ page.ParseContent(&options); |
+ CPDF_TextStream textstream(buffer, FALSE, NULL); |
+ FX_POSITION pos = page.GetFirstObjectPosition(); |
+ while (pos) { |
+ CPDF_PageObject* pObject = page.GetNextObject(pos); |
+ if (pObject->m_Type != PDFPAGE_TEXT) { |
+ continue; |
+ } |
+ if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) { |
+ break; |
} |
- return buffer.GetWideString(); |
+ } |
+ return buffer.GetWideString(); |
} |