summaryrefslogtreecommitdiff
path: root/core/fpdftext
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdftext')
-rw-r--r--core/fpdftext/fpdf_text_int.cpp19
-rw-r--r--core/fpdftext/include/ipdf_linkextract.h26
-rw-r--r--core/fpdftext/include/ipdf_textpage.h69
-rw-r--r--core/fpdftext/include/ipdf_textpagefind.h29
-rw-r--r--core/fpdftext/text_int.h4
5 files changed, 142 insertions, 5 deletions
diff --git a/core/fpdftext/fpdf_text_int.cpp b/core/fpdftext/fpdf_text_int.cpp
index d16ccb8dde..1bd544c444 100644
--- a/core/fpdftext/fpdf_text_int.cpp
+++ b/core/fpdftext/fpdf_text_int.cpp
@@ -13,18 +13,28 @@
#include <utility>
#include <vector>
+#include "core/fpdftext/include/ipdf_linkextract.h"
+#include "core/fpdftext/include/ipdf_textpage.h"
+#include "core/fpdftext/include/ipdf_textpagefind.h"
#include "core/include/fpdfapi/cpdf_dictionary.h"
#include "core/include/fpdfapi/cpdf_string.h"
#include "core/include/fpdfapi/fpdf_module.h"
#include "core/include/fpdfapi/fpdf_page.h"
#include "core/include/fpdfapi/fpdf_pageobj.h"
#include "core/include/fpdfapi/fpdf_resource.h"
-#include "core/include/fpdftext/fpdf_text.h"
#include "core/include/fxcrt/fx_bidi.h"
#include "core/include/fxcrt/fx_ext.h"
#include "core/include/fxcrt/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
+
namespace {
FX_BOOL _IsIgnoreSpaceCharacter(FX_WCHAR curChar) {
@@ -1899,7 +1909,8 @@ CPDF_TextPageFind::CPDF_TextPageFind(const IPDF_TextPage* pTextPage)
FPDF_CHAR_INFO info;
pTextPage->GetCharInfo(i, &info);
int indexSize = pdfium::CollectionSize<int>(m_CharIndex);
- if (info.m_Flag == CHAR_NORMAL || info.m_Flag == CHAR_GENERATED) {
+ if (info.m_Flag == FPDFTEXT_CHAR_NORMAL ||
+ info.m_Flag == FPDFTEXT_CHAR_GENERATED) {
if (indexSize % 2) {
m_CharIndex.push_back(1);
} else {
@@ -2325,8 +2336,8 @@ void CPDF_LinkExtract::ParseLink() {
while (pos < TotalChar) {
FPDF_CHAR_INFO pageChar;
m_pTextPage->GetCharInfo(pos, &pageChar);
- if (pageChar.m_Flag == CHAR_GENERATED || pageChar.m_Unicode == 0x20 ||
- pos == TotalChar - 1) {
+ if (pageChar.m_Flag == FPDFTEXT_CHAR_GENERATED ||
+ pageChar.m_Unicode == 0x20 || pos == TotalChar - 1) {
int nCount = pos - start;
if (pos == TotalChar - 1) {
nCount++;
diff --git a/core/fpdftext/include/ipdf_linkextract.h b/core/fpdftext/include/ipdf_linkextract.h
new file mode 100644
index 0000000000..2d7fe02127
--- /dev/null
+++ b/core/fpdftext/include/ipdf_linkextract.h
@@ -0,0 +1,26 @@
+// Copyright 2016 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
+
+#ifndef CORE_FPDFTEXT_INCLUDE_IPDF_LINKEXTRACT_H_
+#define CORE_FPDFTEXT_INCLUDE_IPDF_LINKEXTRACT_H_
+
+#include "core/include/fxcrt/fx_coordinates.h"
+#include "core/include/fxcrt/fx_system.h"
+#include "core/fpdftext/include/ipdf_textpage.h"
+
+class IPDF_LinkExtract {
+ public:
+ static IPDF_LinkExtract* CreateLinkExtract();
+ virtual ~IPDF_LinkExtract() {}
+
+ virtual FX_BOOL ExtractLinks(const IPDF_TextPage* pTextPage) = 0;
+ virtual int CountLinks() const = 0;
+ virtual CFX_WideString GetURL(int index) const = 0;
+ virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
+ virtual void GetRects(int index, CFX_RectArray& rects) const = 0;
+};
+
+#endif // CORE_FPDFTEXT_INCLUDE_IPDF_LINKEXTRACT_H_
diff --git a/core/fpdftext/include/ipdf_textpage.h b/core/fpdftext/include/ipdf_textpage.h
new file mode 100644
index 0000000000..1698e9ab28
--- /dev/null
+++ b/core/fpdftext/include/ipdf_textpage.h
@@ -0,0 +1,69 @@
+// Copyright 2016 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
+
+#ifndef CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGE_H_
+#define CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGE_H_
+
+#include "core/include/fpdfapi/fpdf_page.h"
+#include "core/include/fpdfapi/fpdf_pageobj.h"
+#include "core/include/fxcrt/fx_coordinates.h"
+#include "core/include/fxcrt/fx_system.h"
+
+struct FPDF_CHAR_INFO {
+ FX_WCHAR m_Unicode;
+ FX_WCHAR m_Charcode;
+ int32_t m_Flag;
+ FX_FLOAT m_FontSize;
+ FX_FLOAT m_OriginX;
+ FX_FLOAT m_OriginY;
+ CFX_FloatRect m_CharBox;
+ CPDF_TextObject* m_pTextObj;
+ CFX_Matrix m_Matrix;
+};
+
+class IPDF_TextPage {
+ public:
+ static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, int flags = 0);
+ virtual ~IPDF_TextPage() {}
+
+ virtual void ParseTextPage() = 0;
+ virtual bool IsParsed() const = 0;
+ virtual int CharIndexFromTextIndex(int TextIndex) const = 0;
+ virtual int TextIndexFromCharIndex(int CharIndex) const = 0;
+ virtual int CountChars() const = 0;
+ virtual void GetCharInfo(int index, FPDF_CHAR_INFO* info) const = 0;
+ virtual void GetRectArray(int start,
+ int nCount,
+ CFX_RectArray& rectArray) const = 0;
+ virtual int GetIndexAtPos(CFX_FloatPoint point,
+ FX_FLOAT xTolerance,
+ FX_FLOAT yTolerance) const = 0;
+ virtual int GetIndexAtPos(FX_FLOAT x,
+ FX_FLOAT y,
+ FX_FLOAT xTolerance,
+ FX_FLOAT yTolerance) const = 0;
+ virtual CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const = 0;
+ virtual void GetRectsArrayByRect(const CFX_FloatRect& rect,
+ CFX_RectArray& resRectArray) const = 0;
+ virtual int CountRects(int start, int nCount) = 0;
+ virtual void GetRect(int rectIndex,
+ FX_FLOAT& left,
+ FX_FLOAT& top,
+ FX_FLOAT& right,
+ FX_FLOAT& bottom) const = 0;
+ virtual FX_BOOL GetBaselineRotate(int rectIndex, int& Rotate) = 0;
+ virtual FX_BOOL GetBaselineRotate(const CFX_FloatRect& rect, int& Rotate) = 0;
+ virtual int CountBoundedSegments(FX_FLOAT left,
+ FX_FLOAT top,
+ FX_FLOAT right,
+ FX_FLOAT bottom,
+ FX_BOOL bContains = FALSE) = 0;
+ virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
+ virtual int GetWordBreak(int index, int direction) const = 0;
+ virtual CFX_WideString GetPageText(int start = 0, int nCount = -1) const = 0;
+};
+
+#endif // CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGE_H_
diff --git a/core/fpdftext/include/ipdf_textpagefind.h b/core/fpdftext/include/ipdf_textpagefind.h
new file mode 100644
index 0000000000..88774b6061
--- /dev/null
+++ b/core/fpdftext/include/ipdf_textpagefind.h
@@ -0,0 +1,29 @@
+// Copyright 2016 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
+
+#ifndef CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGEFIND_H_
+#define CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGEFIND_H_
+
+#include "core/fpdftext/include/ipdf_textpage.h"
+#include "core/include/fxcrt/fx_coordinates.h"
+#include "core/include/fxcrt/fx_string.h"
+
+class IPDF_TextPageFind {
+ public:
+ static IPDF_TextPageFind* CreatePageFind(const IPDF_TextPage* pTextPage);
+ virtual ~IPDF_TextPageFind() {}
+
+ virtual FX_BOOL FindFirst(const CFX_WideString& findwhat,
+ int flags,
+ int startPos = 0) = 0;
+ virtual FX_BOOL FindNext() = 0;
+ virtual FX_BOOL FindPrev() = 0;
+ virtual void GetRectArray(CFX_RectArray& rects) const = 0;
+ virtual int GetCurOrder() const = 0;
+ virtual int GetMatchedCount() const = 0;
+};
+
+#endif // CORE_FPDFTEXT_INCLUDE_IPDF_TEXTPAGEFIND_H_
diff --git a/core/fpdftext/text_int.h b/core/fpdftext/text_int.h
index bc110c719b..42e254ee63 100644
--- a/core/fpdftext/text_int.h
+++ b/core/fpdftext/text_int.h
@@ -10,8 +10,10 @@
#include <deque>
#include <vector>
+#include "core/fpdftext/include/ipdf_linkextract.h"
+#include "core/fpdftext/include/ipdf_textpage.h"
+#include "core/fpdftext/include/ipdf_textpagefind.h"
#include "core/include/fpdfapi/fpdf_page.h"
-#include "core/include/fpdftext/fpdf_text.h"
#include "core/include/fxcrt/fx_basic.h"
class CFX_BidiChar;