OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "core/include/fpdfapi/fpdf_parser.h" | 7 #include "core/include/fpdfapi/fpdf_parser.h" |
8 | 8 |
9 #include "core/include/fxcrt/fx_ext.h" | 9 #include "core/include/fxcrt/fx_ext.h" |
10 | 10 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) { | 63 CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) { |
64 m_pData = pData; | 64 m_pData = pData; |
65 m_dwSize = dwSize; | 65 m_dwSize = dwSize; |
66 m_dwCurPos = 0; | 66 m_dwCurPos = 0; |
67 } | 67 } |
68 CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str) { | 68 CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str) { |
69 m_pData = str.GetPtr(); | 69 m_pData = str.GetPtr(); |
70 m_dwSize = str.GetLength(); | 70 m_dwSize = str.GetLength(); |
71 m_dwCurPos = 0; | 71 m_dwCurPos = 0; |
72 } | 72 } |
73 void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, | 73 void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize) { |
74 FX_DWORD& dwSize, | |
75 int& type) { | |
76 pStart = NULL; | 74 pStart = NULL; |
77 dwSize = 0; | 75 dwSize = 0; |
78 type = PDFWORD_EOF; | |
79 uint8_t ch; | 76 uint8_t ch; |
80 while (1) { | 77 while (1) { |
81 if (m_dwSize <= m_dwCurPos) | 78 if (m_dwSize <= m_dwCurPos) |
82 return; | 79 return; |
83 ch = m_pData[m_dwCurPos++]; | 80 ch = m_pData[m_dwCurPos++]; |
84 while (PDFCharIsWhitespace(ch)) { | 81 while (PDFCharIsWhitespace(ch)) { |
85 if (m_dwSize <= m_dwCurPos) | 82 if (m_dwSize <= m_dwCurPos) |
86 return; | 83 return; |
87 ch = m_pData[m_dwCurPos++]; | 84 ch = m_pData[m_dwCurPos++]; |
88 } | 85 } |
(...skipping 14 matching lines...) Expand all Loading... |
103 pStart = m_pData + start_pos; | 100 pStart = m_pData + start_pos; |
104 if (PDFCharIsDelimiter(ch)) { | 101 if (PDFCharIsDelimiter(ch)) { |
105 if (ch == '/') { | 102 if (ch == '/') { |
106 while (1) { | 103 while (1) { |
107 if (m_dwSize <= m_dwCurPos) | 104 if (m_dwSize <= m_dwCurPos) |
108 return; | 105 return; |
109 ch = m_pData[m_dwCurPos++]; | 106 ch = m_pData[m_dwCurPos++]; |
110 if (!PDFCharIsOther(ch) && !PDFCharIsNumeric(ch)) { | 107 if (!PDFCharIsOther(ch) && !PDFCharIsNumeric(ch)) { |
111 m_dwCurPos--; | 108 m_dwCurPos--; |
112 dwSize = m_dwCurPos - start_pos; | 109 dwSize = m_dwCurPos - start_pos; |
113 type = PDFWORD_NAME; | |
114 return; | 110 return; |
115 } | 111 } |
116 } | 112 } |
117 } else { | 113 } else { |
118 type = PDFWORD_DELIMITER; | |
119 dwSize = 1; | 114 dwSize = 1; |
120 if (ch == '<') { | 115 if (ch == '<') { |
121 if (m_dwSize <= m_dwCurPos) | 116 if (m_dwSize <= m_dwCurPos) |
122 return; | 117 return; |
123 ch = m_pData[m_dwCurPos++]; | 118 ch = m_pData[m_dwCurPos++]; |
124 if (ch == '<') | 119 if (ch == '<') |
125 dwSize = 2; | 120 dwSize = 2; |
126 else | 121 else |
127 m_dwCurPos--; | 122 m_dwCurPos--; |
128 } else if (ch == '>') { | 123 } else if (ch == '>') { |
129 if (m_dwSize <= m_dwCurPos) | 124 if (m_dwSize <= m_dwCurPos) |
130 return; | 125 return; |
131 ch = m_pData[m_dwCurPos++]; | 126 ch = m_pData[m_dwCurPos++]; |
132 if (ch == '>') | 127 if (ch == '>') |
133 dwSize = 2; | 128 dwSize = 2; |
134 else | 129 else |
135 m_dwCurPos--; | 130 m_dwCurPos--; |
136 } | 131 } |
137 } | 132 } |
138 return; | 133 return; |
139 } | 134 } |
140 | 135 |
141 type = PDFWORD_NUMBER; | |
142 dwSize = 1; | 136 dwSize = 1; |
143 while (1) { | 137 while (1) { |
144 if (!PDFCharIsNumeric(ch)) | |
145 type = PDFWORD_TEXT; | |
146 if (m_dwSize <= m_dwCurPos) | 138 if (m_dwSize <= m_dwCurPos) |
147 return; | 139 return; |
148 ch = m_pData[m_dwCurPos++]; | 140 ch = m_pData[m_dwCurPos++]; |
149 | 141 |
150 if (PDFCharIsDelimiter(ch) || PDFCharIsWhitespace(ch)) { | 142 if (PDFCharIsDelimiter(ch) || PDFCharIsWhitespace(ch)) { |
151 m_dwCurPos--; | 143 m_dwCurPos--; |
152 break; | 144 break; |
153 } | 145 } |
154 dwSize++; | 146 dwSize++; |
155 } | 147 } |
156 } | 148 } |
157 CFX_ByteStringC CPDF_SimpleParser::GetWord() { | 149 CFX_ByteStringC CPDF_SimpleParser::GetWord() { |
158 const uint8_t* pStart; | 150 const uint8_t* pStart; |
159 FX_DWORD dwSize; | 151 FX_DWORD dwSize; |
160 int type; | 152 ParseWord(pStart, dwSize); |
161 ParseWord(pStart, dwSize, type); | |
162 if (dwSize == 1 && pStart[0] == '<') { | 153 if (dwSize == 1 && pStart[0] == '<') { |
163 while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') { | 154 while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') { |
164 m_dwCurPos++; | 155 m_dwCurPos++; |
165 } | 156 } |
166 if (m_dwCurPos < m_dwSize) { | 157 if (m_dwCurPos < m_dwSize) { |
167 m_dwCurPos++; | 158 m_dwCurPos++; |
168 } | 159 } |
169 return CFX_ByteStringC(pStart, | 160 return CFX_ByteStringC(pStart, |
170 (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData))); | 161 (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData))); |
171 } | 162 } |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 CPDF_Object* pFound = SearchNumberNode(pKid, num); | 443 CPDF_Object* pFound = SearchNumberNode(pKid, num); |
453 if (pFound) { | 444 if (pFound) { |
454 return pFound; | 445 return pFound; |
455 } | 446 } |
456 } | 447 } |
457 return NULL; | 448 return NULL; |
458 } | 449 } |
459 CPDF_Object* CPDF_NumberTree::LookupValue(int num) { | 450 CPDF_Object* CPDF_NumberTree::LookupValue(int num) { |
460 return SearchNumberNode(m_pRoot, num); | 451 return SearchNumberNode(m_pRoot, num); |
461 } | 452 } |
OLD | NEW |