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_INCLUDE_CPDF_TEXTPAGE_H_ | 7 #ifndef CORE_FPDFTEXT_INCLUDE_CPDF_TEXTPAGE_H_ |
8 #define CORE_FPDFTEXT_INCLUDE_CPDF_TEXTPAGE_H_ | 8 #define CORE_FPDFTEXT_INCLUDE_CPDF_TEXTPAGE_H_ |
9 | 9 |
10 #include <deque> | 10 #include <deque> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 FX_FLOAT& top, | 92 FX_FLOAT& top, |
93 FX_FLOAT& right, | 93 FX_FLOAT& right, |
94 FX_FLOAT& bottom) const; | 94 FX_FLOAT& bottom) const; |
95 int CountBoundedSegments(FX_FLOAT left, | 95 int CountBoundedSegments(FX_FLOAT left, |
96 FX_FLOAT top, | 96 FX_FLOAT top, |
97 FX_FLOAT right, | 97 FX_FLOAT right, |
98 FX_FLOAT bottom, | 98 FX_FLOAT bottom, |
99 FX_BOOL bContains = FALSE); | 99 FX_BOOL bContains = FALSE); |
100 | 100 |
101 private: | 101 private: |
| 102 enum class TextOrientation { |
| 103 Unknown, |
| 104 Horizontal, |
| 105 Vertical, |
| 106 }; |
| 107 |
| 108 enum class GenerateCharacter { |
| 109 None, |
| 110 Space, |
| 111 LineBreak, |
| 112 Hyphen, |
| 113 }; |
| 114 |
102 FX_BOOL IsHyphen(FX_WCHAR curChar); | 115 FX_BOOL IsHyphen(FX_WCHAR curChar); |
103 bool IsControlChar(const PAGECHAR_INFO& charInfo); | 116 bool IsControlChar(const PAGECHAR_INFO& charInfo); |
104 void ProcessObject(); | 117 void ProcessObject(); |
105 void ProcessFormObject(CPDF_FormObject* pFormObj, | 118 void ProcessFormObject(CPDF_FormObject* pFormObj, |
106 const CFX_Matrix& formMatrix); | 119 const CFX_Matrix& formMatrix); |
107 void ProcessTextObject(PDFTEXT_Obj pObj); | 120 void ProcessTextObject(PDFTEXT_Obj pObj); |
108 void ProcessTextObject(CPDF_TextObject* pTextObj, | 121 void ProcessTextObject(CPDF_TextObject* pTextObj, |
109 const CFX_Matrix& formMatrix, | 122 const CFX_Matrix& formMatrix, |
110 const CPDF_PageObjectList* pObjList, | 123 const CPDF_PageObjectList* pObjList, |
111 CPDF_PageObjectList::const_iterator ObjPos); | 124 CPDF_PageObjectList::const_iterator ObjPos); |
112 int ProcessInsertObject(const CPDF_TextObject* pObj, | 125 GenerateCharacter ProcessInsertObject(const CPDF_TextObject* pObj, |
113 const CFX_Matrix& formMatrix); | 126 const CFX_Matrix& formMatrix); |
114 FX_BOOL GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info); | 127 FX_BOOL GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info); |
115 FX_BOOL IsSameAsPreTextObject(CPDF_TextObject* pTextObj, | 128 FX_BOOL IsSameAsPreTextObject(CPDF_TextObject* pTextObj, |
116 const CPDF_PageObjectList* pObjList, | 129 const CPDF_PageObjectList* pObjList, |
117 CPDF_PageObjectList::const_iterator ObjPos); | 130 CPDF_PageObjectList::const_iterator ObjPos); |
118 FX_BOOL IsSameTextObject(CPDF_TextObject* pTextObj1, | 131 FX_BOOL IsSameTextObject(CPDF_TextObject* pTextObj1, |
119 CPDF_TextObject* pTextObj2); | 132 CPDF_TextObject* pTextObj2); |
120 int GetCharWidth(uint32_t charCode, CPDF_Font* pFont) const; | 133 int GetCharWidth(uint32_t charCode, CPDF_Font* pFont) const; |
121 void CloseTempLine(); | 134 void CloseTempLine(); |
122 FPDFText_MarkedContent PreMarkedContent(PDFTEXT_Obj pObj); | 135 FPDFText_MarkedContent PreMarkedContent(PDFTEXT_Obj pObj); |
123 void ProcessMarkedContent(PDFTEXT_Obj pObj); | 136 void ProcessMarkedContent(PDFTEXT_Obj pObj); |
124 void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const; | 137 void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const; |
125 void FindPreviousTextObject(void); | 138 void FindPreviousTextObject(); |
126 void AddCharInfoByLRDirection(FX_WCHAR wChar, PAGECHAR_INFO info); | 139 void AddCharInfoByLRDirection(FX_WCHAR wChar, PAGECHAR_INFO info); |
127 void AddCharInfoByRLDirection(FX_WCHAR wChar, PAGECHAR_INFO info); | 140 void AddCharInfoByRLDirection(FX_WCHAR wChar, PAGECHAR_INFO info); |
128 int32_t GetTextObjectWritingMode(const CPDF_TextObject* pTextObj); | 141 TextOrientation GetTextObjectWritingMode( |
129 int32_t FindTextlineFlowDirection(); | 142 const CPDF_TextObject* pTextObj) const; |
| 143 TextOrientation FindTextlineFlowOrientation() const; |
| 144 void AppendGeneratedCharacter(FX_WCHAR unicode, const CFX_Matrix& formMatrix); |
130 | 145 |
131 void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend); | 146 void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend); |
132 FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj, | 147 FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj, |
133 const CPDF_Font* pFont, | 148 const CPDF_Font* pFont, |
134 int nItems) const; | 149 int nItems) const; |
135 | 150 |
136 const CPDF_Page* const m_pPage; | 151 const CPDF_Page* const m_pPage; |
137 std::vector<uint16_t> m_CharIndex; | 152 std::vector<uint16_t> m_CharIndex; |
138 std::deque<PAGECHAR_INFO> m_CharList; | 153 std::deque<PAGECHAR_INFO> m_CharList; |
139 std::deque<PAGECHAR_INFO> m_TempCharList; | 154 std::deque<PAGECHAR_INFO> m_TempCharList; |
140 CFX_WideTextBuf m_TextBuf; | 155 CFX_WideTextBuf m_TextBuf; |
141 CFX_WideTextBuf m_TempTextBuf; | 156 CFX_WideTextBuf m_TempTextBuf; |
142 const FPDFText_Direction m_parserflag; | 157 const FPDFText_Direction m_parserflag; |
143 CPDF_TextObject* m_pPreTextObj; | 158 CPDF_TextObject* m_pPreTextObj; |
144 CFX_Matrix m_perMatrix; | 159 CFX_Matrix m_perMatrix; |
145 bool m_bIsParsed; | 160 bool m_bIsParsed; |
146 CFX_Matrix m_DisplayMatrix; | 161 CFX_Matrix m_DisplayMatrix; |
147 CFX_ArrayTemplate<FPDF_SEGMENT> m_Segments; | 162 CFX_ArrayTemplate<FPDF_SEGMENT> m_Segments; |
148 std::vector<CFX_FloatRect> m_SelRects; | 163 std::vector<CFX_FloatRect> m_SelRects; |
149 CFX_ArrayTemplate<PDFTEXT_Obj> m_LineObj; | 164 CFX_ArrayTemplate<PDFTEXT_Obj> m_LineObj; |
150 int32_t m_TextlineDir; | 165 TextOrientation m_TextlineDir; |
151 CFX_FloatRect m_CurlineRect; | 166 CFX_FloatRect m_CurlineRect; |
152 }; | 167 }; |
153 | 168 |
154 #endif // CORE_FPDFTEXT_INCLUDE_CPDF_TEXTPAGE_H_ | 169 #endif // CORE_FPDFTEXT_INCLUDE_CPDF_TEXTPAGE_H_ |
OLD | NEW |