| 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/src/fpdfapi/fpdf_page/pageint.h" | 7 #include "core/src/fpdfapi/fpdf_page/pageint.h" |
| 8 | 8 |
| 9 #include "core/include/fpdfapi/fpdf_module.h" | 9 #include "core/include/fpdfapi/fpdf_module.h" |
| 10 #include "core/include/fpdfapi/fpdf_page.h" | 10 #include "core/include/fpdfapi/fpdf_page.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 m_pLastCloneImageDict->Release(); | 181 m_pLastCloneImageDict->Release(); |
| 182 } | 182 } |
| 183 } | 183 } |
| 184 | 184 |
| 185 int CPDF_StreamContentParser::GetNextParamPos() { | 185 int CPDF_StreamContentParser::GetNextParamPos() { |
| 186 if (m_ParamCount == PARAM_BUF_SIZE) { | 186 if (m_ParamCount == PARAM_BUF_SIZE) { |
| 187 m_ParamStartPos++; | 187 m_ParamStartPos++; |
| 188 if (m_ParamStartPos == PARAM_BUF_SIZE) { | 188 if (m_ParamStartPos == PARAM_BUF_SIZE) { |
| 189 m_ParamStartPos = 0; | 189 m_ParamStartPos = 0; |
| 190 } | 190 } |
| 191 if (m_ParamBuf1[m_ParamStartPos].m_Type == 0) { | 191 if (m_ParamBuf[m_ParamStartPos].m_Type == 0) { |
| 192 if (CPDF_Object* pObject = m_ParamBuf1[m_ParamStartPos].m_pObject) | 192 if (CPDF_Object* pObject = m_ParamBuf[m_ParamStartPos].m_pObject) |
| 193 pObject->Release(); | 193 pObject->Release(); |
| 194 } | 194 } |
| 195 return m_ParamStartPos; | 195 return m_ParamStartPos; |
| 196 } | 196 } |
| 197 int index = m_ParamStartPos + m_ParamCount; | 197 int index = m_ParamStartPos + m_ParamCount; |
| 198 if (index >= PARAM_BUF_SIZE) { | 198 if (index >= PARAM_BUF_SIZE) { |
| 199 index -= PARAM_BUF_SIZE; | 199 index -= PARAM_BUF_SIZE; |
| 200 } | 200 } |
| 201 m_ParamCount++; | 201 m_ParamCount++; |
| 202 return index; | 202 return index; |
| 203 } | 203 } |
| 204 | 204 |
| 205 void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) { | 205 void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) { |
| 206 int index = GetNextParamPos(); | 206 int index = GetNextParamPos(); |
| 207 if (len > 32) { | 207 if (len > 32) { |
| 208 m_ParamBuf1[index].m_Type = 0; | 208 m_ParamBuf[index].m_Type = ContentParam::OBJECT; |
| 209 m_ParamBuf1[index].m_pObject = | 209 m_ParamBuf[index].m_pObject = |
| 210 new CPDF_Name(PDF_NameDecode(CFX_ByteStringC(name, len))); | 210 new CPDF_Name(PDF_NameDecode(CFX_ByteStringC(name, len))); |
| 211 } else { | 211 } else { |
| 212 m_ParamBuf1[index].m_Type = CPDF_Object::NAME; | 212 m_ParamBuf[index].m_Type = ContentParam::NAME; |
| 213 if (!FXSYS_memchr(name, '#', len)) { | 213 if (!FXSYS_memchr(name, '#', len)) { |
| 214 FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, name, len); | 214 FXSYS_memcpy(m_ParamBuf[index].m_Name.m_Buffer, name, len); |
| 215 m_ParamBuf1[index].m_Name.m_Len = len; | 215 m_ParamBuf[index].m_Name.m_Len = len; |
| 216 } else { | 216 } else { |
| 217 CFX_ByteString str = PDF_NameDecode(CFX_ByteStringC(name, len)); | 217 CFX_ByteString str = PDF_NameDecode(CFX_ByteStringC(name, len)); |
| 218 FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, str.c_str(), | 218 FXSYS_memcpy(m_ParamBuf[index].m_Name.m_Buffer, str.c_str(), |
| 219 str.GetLength()); | 219 str.GetLength()); |
| 220 m_ParamBuf1[index].m_Name.m_Len = str.GetLength(); | 220 m_ParamBuf[index].m_Name.m_Len = str.GetLength(); |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 } | 223 } |
| 224 | 224 |
| 225 void CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len) { | 225 void CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len) { |
| 226 int index = GetNextParamPos(); | 226 int index = GetNextParamPos(); |
| 227 m_ParamBuf1[index].m_Type = CPDF_Object::NUMBER; | 227 m_ParamBuf[index].m_Type = ContentParam::NUMBER; |
| 228 FX_atonum(CFX_ByteStringC(str, len), m_ParamBuf1[index].m_Number.m_bInteger, | 228 FX_atonum(CFX_ByteStringC(str, len), m_ParamBuf[index].m_Number.m_bInteger, |
| 229 &m_ParamBuf1[index].m_Number.m_Integer); | 229 &m_ParamBuf[index].m_Number.m_Integer); |
| 230 } | 230 } |
| 231 void CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj) { | 231 void CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj) { |
| 232 int index = GetNextParamPos(); | 232 int index = GetNextParamPos(); |
| 233 m_ParamBuf1[index].m_Type = 0; | 233 m_ParamBuf[index].m_Type = ContentParam::OBJECT; |
| 234 m_ParamBuf1[index].m_pObject = pObj; | 234 m_ParamBuf[index].m_pObject = pObj; |
| 235 } | 235 } |
| 236 void CPDF_StreamContentParser::ClearAllParams() { | 236 void CPDF_StreamContentParser::ClearAllParams() { |
| 237 FX_DWORD index = m_ParamStartPos; | 237 FX_DWORD index = m_ParamStartPos; |
| 238 for (FX_DWORD i = 0; i < m_ParamCount; i++) { | 238 for (FX_DWORD i = 0; i < m_ParamCount; i++) { |
| 239 if (m_ParamBuf1[index].m_Type == 0) { | 239 if (m_ParamBuf[index].m_Type == 0) { |
| 240 if (CPDF_Object* pObject = m_ParamBuf1[index].m_pObject) | 240 if (CPDF_Object* pObject = m_ParamBuf[index].m_pObject) |
| 241 pObject->Release(); | 241 pObject->Release(); |
| 242 } | 242 } |
| 243 index++; | 243 index++; |
| 244 if (index == PARAM_BUF_SIZE) { | 244 if (index == PARAM_BUF_SIZE) { |
| 245 index = 0; | 245 index = 0; |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 m_ParamStartPos = 0; | 248 m_ParamStartPos = 0; |
| 249 m_ParamCount = 0; | 249 m_ParamCount = 0; |
| 250 } | 250 } |
| 251 | 251 |
| 252 CPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index) { | 252 CPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index) { |
| 253 if (index >= m_ParamCount) { | 253 if (index >= m_ParamCount) { |
| 254 return NULL; | 254 return NULL; |
| 255 } | 255 } |
| 256 int real_index = m_ParamStartPos + m_ParamCount - index - 1; | 256 int real_index = m_ParamStartPos + m_ParamCount - index - 1; |
| 257 if (real_index >= PARAM_BUF_SIZE) { | 257 if (real_index >= PARAM_BUF_SIZE) { |
| 258 real_index -= PARAM_BUF_SIZE; | 258 real_index -= PARAM_BUF_SIZE; |
| 259 } | 259 } |
| 260 ContentParam& param = m_ParamBuf1[real_index]; | 260 ContentParam& param = m_ParamBuf[real_index]; |
| 261 if (param.m_Type == CPDF_Object::NUMBER) { | 261 if (param.m_Type == ContentParam::NUMBER) { |
| 262 CPDF_Number* pNumber = param.m_Number.m_bInteger | 262 CPDF_Number* pNumber = param.m_Number.m_bInteger |
| 263 ? new CPDF_Number(param.m_Number.m_Integer) | 263 ? new CPDF_Number(param.m_Number.m_Integer) |
| 264 : new CPDF_Number(param.m_Number.m_Float); | 264 : new CPDF_Number(param.m_Number.m_Float); |
| 265 | 265 |
| 266 param.m_Type = 0; | 266 param.m_Type = ContentParam::OBJECT; |
| 267 param.m_pObject = pNumber; | 267 param.m_pObject = pNumber; |
| 268 return pNumber; | 268 return pNumber; |
| 269 } | 269 } |
| 270 if (param.m_Type == CPDF_Object::NAME) { | 270 if (param.m_Type == ContentParam::NAME) { |
| 271 CPDF_Name* pName = new CPDF_Name( | 271 CPDF_Name* pName = new CPDF_Name( |
| 272 CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)); | 272 CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)); |
| 273 param.m_Type = 0; | 273 param.m_Type = ContentParam::OBJECT; |
| 274 param.m_pObject = pName; | 274 param.m_pObject = pName; |
| 275 return pName; | 275 return pName; |
| 276 } | 276 } |
| 277 if (param.m_Type == 0) { | 277 if (param.m_Type == ContentParam::OBJECT) { |
| 278 return param.m_pObject; | 278 return param.m_pObject; |
| 279 } | 279 } |
| 280 ASSERT(FALSE); | 280 ASSERT(FALSE); |
| 281 return NULL; | 281 return NULL; |
| 282 } | 282 } |
| 283 | 283 |
| 284 CFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index) { | 284 CFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index) { |
| 285 if (index >= m_ParamCount) { | 285 if (index >= m_ParamCount) { |
| 286 return CFX_ByteString(); | 286 return CFX_ByteString(); |
| 287 } | 287 } |
| 288 int real_index = m_ParamStartPos + m_ParamCount - index - 1; | 288 int real_index = m_ParamStartPos + m_ParamCount - index - 1; |
| 289 if (real_index >= PARAM_BUF_SIZE) { | 289 if (real_index >= PARAM_BUF_SIZE) { |
| 290 real_index -= PARAM_BUF_SIZE; | 290 real_index -= PARAM_BUF_SIZE; |
| 291 } | 291 } |
| 292 ContentParam& param = m_ParamBuf1[real_index]; | 292 ContentParam& param = m_ParamBuf[real_index]; |
| 293 if (param.m_Type == CPDF_Object::NAME) { | 293 if (param.m_Type == ContentParam::NAME) { |
| 294 return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len); | 294 return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len); |
| 295 } | 295 } |
| 296 if (param.m_Type == 0 && param.m_pObject) { | 296 if (param.m_Type == 0 && param.m_pObject) { |
| 297 return param.m_pObject->GetString(); | 297 return param.m_pObject->GetString(); |
| 298 } | 298 } |
| 299 return CFX_ByteString(); | 299 return CFX_ByteString(); |
| 300 } | 300 } |
| 301 | 301 |
| 302 FX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index) { | 302 FX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index) { |
| 303 if (index >= m_ParamCount) { | 303 if (index >= m_ParamCount) { |
| 304 return 0; | 304 return 0; |
| 305 } | 305 } |
| 306 int real_index = m_ParamStartPos + m_ParamCount - index - 1; | 306 int real_index = m_ParamStartPos + m_ParamCount - index - 1; |
| 307 if (real_index >= PARAM_BUF_SIZE) { | 307 if (real_index >= PARAM_BUF_SIZE) { |
| 308 real_index -= PARAM_BUF_SIZE; | 308 real_index -= PARAM_BUF_SIZE; |
| 309 } | 309 } |
| 310 ContentParam& param = m_ParamBuf1[real_index]; | 310 ContentParam& param = m_ParamBuf[real_index]; |
| 311 if (param.m_Type == CPDF_Object::NUMBER) { | 311 if (param.m_Type == ContentParam::NUMBER) { |
| 312 return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer | 312 return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer |
| 313 : param.m_Number.m_Float; | 313 : param.m_Number.m_Float; |
| 314 } | 314 } |
| 315 if (param.m_Type == 0 && param.m_pObject) { | 315 if (param.m_Type == 0 && param.m_pObject) { |
| 316 return param.m_pObject->GetNumber(); | 316 return param.m_pObject->GetNumber(); |
| 317 } | 317 } |
| 318 return 0; | 318 return 0; |
| 319 } | 319 } |
| 320 | 320 |
| 321 FX_FLOAT CPDF_StreamContentParser::GetNumber16(FX_DWORD index) { | 321 FX_FLOAT CPDF_StreamContentParser::GetNumber16(FX_DWORD index) { |
| (...skipping 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1813 } else { | 1813 } else { |
| 1814 PDF_ReplaceAbbr(pElement); | 1814 PDF_ReplaceAbbr(pElement); |
| 1815 } | 1815 } |
| 1816 } | 1816 } |
| 1817 break; | 1817 break; |
| 1818 } | 1818 } |
| 1819 default: | 1819 default: |
| 1820 break; | 1820 break; |
| 1821 } | 1821 } |
| 1822 } | 1822 } |
| OLD | NEW |