OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ | 7 #ifndef CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ |
8 #define CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ | 8 #define CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ |
9 | 9 |
10 #include <deque> | 10 #include <deque> |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 FX_FLOAT yTolerance) const; | 100 FX_FLOAT yTolerance) const; |
101 CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const; | 101 CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const; |
102 CFX_WideString GetPageText(int start = 0, int nCount = -1) const; | 102 CFX_WideString GetPageText(int start = 0, int nCount = -1) const; |
103 int CountRects(int start, int nCount); | 103 int CountRects(int start, int nCount); |
104 void GetRect(int rectIndex, | 104 void GetRect(int rectIndex, |
105 FX_FLOAT& left, | 105 FX_FLOAT& left, |
106 FX_FLOAT& top, | 106 FX_FLOAT& top, |
107 FX_FLOAT& right, | 107 FX_FLOAT& right, |
108 FX_FLOAT& bottom) const; | 108 FX_FLOAT& bottom) const; |
109 | 109 |
110 static FX_BOOL IsRectIntersect(const CFX_FloatRect& rect1, | 110 static bool IsRectIntersect(const CFX_FloatRect& rect1, |
111 const CFX_FloatRect& rect2); | 111 const CFX_FloatRect& rect2); |
112 | 112 |
113 private: | 113 private: |
114 enum class TextOrientation { | 114 enum class TextOrientation { |
115 Unknown, | 115 Unknown, |
116 Horizontal, | 116 Horizontal, |
117 Vertical, | 117 Vertical, |
118 }; | 118 }; |
119 | 119 |
120 enum class GenerateCharacter { | 120 enum class GenerateCharacter { |
121 None, | 121 None, |
122 Space, | 122 Space, |
123 LineBreak, | 123 LineBreak, |
124 Hyphen, | 124 Hyphen, |
125 }; | 125 }; |
126 | 126 |
127 FX_BOOL IsHyphen(FX_WCHAR curChar); | 127 bool IsHyphen(FX_WCHAR curChar); |
128 bool IsControlChar(const PAGECHAR_INFO& charInfo); | 128 bool IsControlChar(const PAGECHAR_INFO& charInfo); |
129 void ProcessObject(); | 129 void ProcessObject(); |
130 void ProcessFormObject(CPDF_FormObject* pFormObj, | 130 void ProcessFormObject(CPDF_FormObject* pFormObj, |
131 const CFX_Matrix& formMatrix); | 131 const CFX_Matrix& formMatrix); |
132 void ProcessTextObject(PDFTEXT_Obj pObj); | 132 void ProcessTextObject(PDFTEXT_Obj pObj); |
133 void ProcessTextObject(CPDF_TextObject* pTextObj, | 133 void ProcessTextObject(CPDF_TextObject* pTextObj, |
134 const CFX_Matrix& formMatrix, | 134 const CFX_Matrix& formMatrix, |
135 const CPDF_PageObjectList* pObjList, | 135 const CPDF_PageObjectList* pObjList, |
136 CPDF_PageObjectList::const_iterator ObjPos); | 136 CPDF_PageObjectList::const_iterator ObjPos); |
137 GenerateCharacter ProcessInsertObject(const CPDF_TextObject* pObj, | 137 GenerateCharacter ProcessInsertObject(const CPDF_TextObject* pObj, |
138 const CFX_Matrix& formMatrix); | 138 const CFX_Matrix& formMatrix); |
139 FX_BOOL GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info); | 139 bool GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info); |
140 FX_BOOL IsSameAsPreTextObject(CPDF_TextObject* pTextObj, | 140 bool IsSameAsPreTextObject(CPDF_TextObject* pTextObj, |
141 const CPDF_PageObjectList* pObjList, | 141 const CPDF_PageObjectList* pObjList, |
142 CPDF_PageObjectList::const_iterator ObjPos); | 142 CPDF_PageObjectList::const_iterator ObjPos); |
143 FX_BOOL IsSameTextObject(CPDF_TextObject* pTextObj1, | 143 bool IsSameTextObject(CPDF_TextObject* pTextObj1, CPDF_TextObject* pTextObj2); |
144 CPDF_TextObject* pTextObj2); | |
145 int GetCharWidth(uint32_t charCode, CPDF_Font* pFont) const; | 144 int GetCharWidth(uint32_t charCode, CPDF_Font* pFont) const; |
146 void CloseTempLine(); | 145 void CloseTempLine(); |
147 FPDFText_MarkedContent PreMarkedContent(PDFTEXT_Obj pObj); | 146 FPDFText_MarkedContent PreMarkedContent(PDFTEXT_Obj pObj); |
148 void ProcessMarkedContent(PDFTEXT_Obj pObj); | 147 void ProcessMarkedContent(PDFTEXT_Obj pObj); |
149 void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const; | 148 void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const; |
150 void FindPreviousTextObject(); | 149 void FindPreviousTextObject(); |
151 void AddCharInfoByLRDirection(FX_WCHAR wChar, PAGECHAR_INFO info); | 150 void AddCharInfoByLRDirection(FX_WCHAR wChar, PAGECHAR_INFO info); |
152 void AddCharInfoByRLDirection(FX_WCHAR wChar, PAGECHAR_INFO info); | 151 void AddCharInfoByRLDirection(FX_WCHAR wChar, PAGECHAR_INFO info); |
153 TextOrientation GetTextObjectWritingMode( | 152 TextOrientation GetTextObjectWritingMode( |
154 const CPDF_TextObject* pTextObj) const; | 153 const CPDF_TextObject* pTextObj) const; |
155 TextOrientation FindTextlineFlowOrientation() const; | 154 TextOrientation FindTextlineFlowOrientation() const; |
156 void AppendGeneratedCharacter(FX_WCHAR unicode, const CFX_Matrix& formMatrix); | 155 void AppendGeneratedCharacter(FX_WCHAR unicode, const CFX_Matrix& formMatrix); |
157 | 156 |
158 void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend); | 157 void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend); |
159 FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj, | 158 bool IsRightToLeft(const CPDF_TextObject* pTextObj, |
160 const CPDF_Font* pFont, | 159 const CPDF_Font* pFont, |
161 int nItems) const; | 160 int nItems) const; |
162 | 161 |
163 const CPDF_Page* const m_pPage; | 162 const CPDF_Page* const m_pPage; |
164 std::vector<uint16_t> m_CharIndex; | 163 std::vector<uint16_t> m_CharIndex; |
165 std::deque<PAGECHAR_INFO> m_CharList; | 164 std::deque<PAGECHAR_INFO> m_CharList; |
166 std::deque<PAGECHAR_INFO> m_TempCharList; | 165 std::deque<PAGECHAR_INFO> m_TempCharList; |
167 CFX_WideTextBuf m_TextBuf; | 166 CFX_WideTextBuf m_TextBuf; |
168 CFX_WideTextBuf m_TempTextBuf; | 167 CFX_WideTextBuf m_TempTextBuf; |
169 const FPDFText_Direction m_parserflag; | 168 const FPDFText_Direction m_parserflag; |
170 CPDF_TextObject* m_pPreTextObj; | 169 CPDF_TextObject* m_pPreTextObj; |
171 CFX_Matrix m_perMatrix; | 170 CFX_Matrix m_perMatrix; |
172 bool m_bIsParsed; | 171 bool m_bIsParsed; |
173 CFX_Matrix m_DisplayMatrix; | 172 CFX_Matrix m_DisplayMatrix; |
174 CFX_ArrayTemplate<FPDF_SEGMENT> m_Segments; | 173 CFX_ArrayTemplate<FPDF_SEGMENT> m_Segments; |
175 std::vector<CFX_FloatRect> m_SelRects; | 174 std::vector<CFX_FloatRect> m_SelRects; |
176 CFX_ArrayTemplate<PDFTEXT_Obj> m_LineObj; | 175 CFX_ArrayTemplate<PDFTEXT_Obj> m_LineObj; |
177 TextOrientation m_TextlineDir; | 176 TextOrientation m_TextlineDir; |
178 CFX_FloatRect m_CurlineRect; | 177 CFX_FloatRect m_CurlineRect; |
179 }; | 178 }; |
180 | 179 |
181 #endif // CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ | 180 #endif // CORE_FPDFTEXT_CPDF_TEXTPAGE_H_ |
OLD | NEW |