OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkPdfNativeObject_DEFINED | 8 #ifndef SkPdfNativeObject_DEFINED |
9 #define SkPdfNativeObject_DEFINED | 9 #define SkPdfNativeObject_DEFINED |
10 | 10 |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 static SkPdfFileSpec nyi; | 250 static SkPdfFileSpec nyi; |
251 return nyi; | 251 return nyi; |
252 } | 252 } |
253 | 253 |
254 // TODO(edisonn): NYI | 254 // TODO(edisonn): NYI |
255 SkPdfTree& treeValue() const { | 255 SkPdfTree& treeValue() const { |
256 static SkPdfTree nyi; | 256 static SkPdfTree nyi; |
257 return nyi; | 257 return nyi; |
258 } | 258 } |
259 | 259 |
260 static void makeBoolean(bool value, SkPdfNativeObject* obj GET_TRACK_PARAMET
ERS) { | 260 // TODO(edisonn) impl store |
261 STORE_TRACK_PARAMETERS(obj); | 261 //STORE_TRACK_PARAMETERS(obj); |
| 262 |
| 263 static void makeBoolean(bool value, SkPdfNativeObject* obj) { |
262 | 264 |
263 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 265 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
264 | 266 |
265 obj->fObjectType = kBoolean_PdfObjectType; | 267 obj->fObjectType = kBoolean_PdfObjectType; |
266 obj->fBooleanValue = value; | 268 obj->fBooleanValue = value; |
267 } | 269 } |
268 | 270 |
269 static SkPdfNativeObject makeBoolean(bool value GET_TRACK_PARAMETERS) { | 271 static SkPdfNativeObject makeBoolean(bool value) { |
270 SkPdfNativeObject obj; | 272 SkPdfNativeObject obj; |
271 | 273 |
272 STORE_TRACK_PARAMETERS(&obj); | |
273 | |
274 obj.fObjectType = kBoolean_PdfObjectType; | 274 obj.fObjectType = kBoolean_PdfObjectType; |
275 obj.fBooleanValue = value; | 275 obj.fBooleanValue = value; |
276 return obj; | 276 return obj; |
277 } | 277 } |
278 | 278 |
279 static void makeInteger(int64_t value, SkPdfNativeObject* obj GET_TRACK_PARA
METERS) { | 279 static void makeInteger(int64_t value, SkPdfNativeObject* obj) { |
280 STORE_TRACK_PARAMETERS(obj); | |
281 | |
282 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 280 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
283 | 281 |
284 obj->fObjectType = kInteger_PdfObjectType; | 282 obj->fObjectType = kInteger_PdfObjectType; |
285 obj->fIntegerValue = value; | 283 obj->fIntegerValue = value; |
286 } | 284 } |
287 | 285 |
288 static void makeReal(double value, SkPdfNativeObject* obj GET_TRACK_PARAMETE
RS) { | 286 static void makeReal(double value, SkPdfNativeObject* obj) { |
289 STORE_TRACK_PARAMETERS(obj); | |
290 | |
291 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 287 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
292 | 288 |
293 obj->fObjectType = kReal_PdfObjectType; | 289 obj->fObjectType = kReal_PdfObjectType; |
294 obj->fRealValue = value; | 290 obj->fRealValue = value; |
295 } | 291 } |
296 | 292 |
297 static void makeNull(SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 293 static void makeNull(SkPdfNativeObject* obj) { |
298 STORE_TRACK_PARAMETERS(obj); | |
299 | |
300 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 294 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
301 | 295 |
302 obj->fObjectType = kNull_PdfObjectType; | 296 obj->fObjectType = kNull_PdfObjectType; |
303 } | 297 } |
304 | 298 |
305 static SkPdfNativeObject makeNull(GET_TRACK_PARAMETERS0) { | 299 static SkPdfNativeObject makeNull() { |
306 SkPdfNativeObject obj; | 300 SkPdfNativeObject obj; |
307 | 301 |
308 STORE_TRACK_PARAMETERS(&obj); | |
309 | |
310 obj.fObjectType = kNull_PdfObjectType; | 302 obj.fObjectType = kNull_PdfObjectType; |
311 return obj; | 303 return obj; |
312 } | 304 } |
313 | 305 |
314 static SkPdfNativeObject kNull; | 306 static SkPdfNativeObject kNull; |
315 | 307 |
316 static void makeNumeric(const unsigned char* start, const unsigned char* end
, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 308 static void makeNumeric(const unsigned char* start, const unsigned char* end
, SkPdfNativeObject* obj) { |
317 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 309 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
318 | 310 |
319 // TODO(edisonn): NYI properly | 311 // TODO(edisonn): NYI properly |
320 // if has dot (impl), or exceeds max int, is real, otherwise is int | 312 // if has dot (impl), or exceeds max int, is real, otherwise is int |
321 bool isInt = true; | 313 bool isInt = true; |
322 for (const unsigned char* current = start; current < end; current++) { | 314 for (const unsigned char* current = start; current < end; current++) { |
323 if (*current == '.') { | 315 if (*current == '.') { |
324 isInt = false; | 316 isInt = false; |
325 break; | 317 break; |
326 } | 318 } |
327 // TODO(edisonn): report parse issue with numbers like "24asdasd123" | 319 // TODO(edisonn): report parse issue with numbers like "24asdasd123" |
328 } | 320 } |
329 if (isInt) { | 321 if (isInt) { |
330 makeInteger(atol((const char*)start), obj PUT_TRACK_PARAMETERS); | 322 makeInteger(atol((const char*)start), obj); |
331 } else { | 323 } else { |
332 makeReal(atof((const char*)start), obj PUT_TRACK_PARAMETERS); | 324 makeReal(atof((const char*)start), obj); |
333 } | 325 } |
334 } | 326 } |
335 | 327 |
336 static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObje
ct* obj GET_TRACK_PARAMETERS) { | 328 static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObje
ct* obj) { |
337 STORE_TRACK_PARAMETERS(obj); | |
338 | |
339 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 329 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
340 | 330 |
341 obj->fObjectType = kReference_PdfObjectType; | 331 obj->fObjectType = kReference_PdfObjectType; |
342 obj->fRef.fId = id; | 332 obj->fRef.fId = id; |
343 obj->fRef.fGen = gen; | 333 obj->fRef.fGen = gen; |
344 } | 334 } |
345 | 335 |
346 static void resetAndMakeReference(unsigned int id, unsigned int gen, SkPdfNa
tiveObject* obj GET_TRACK_PARAMETERS) { | 336 static void resetAndMakeReference(unsigned int id, unsigned int gen, SkPdfNa
tiveObject* obj) { |
347 obj->reset(); | 337 obj->reset(); |
348 makeReference(id, gen, obj PUT_TRACK_PARAMETERS); | 338 makeReference(id, gen, obj); |
349 } | 339 } |
350 | 340 |
351 | 341 |
352 static void makeString(const unsigned char* start, SkPdfNativeObject* obj GE
T_TRACK_PARAMETERS) { | 342 static void makeString(const unsigned char* start, SkPdfNativeObject* obj) { |
353 makeStringCore(start, strlen((const char*)start), obj, kString_PdfObject
Type PUT_TRACK_PARAMETERS); | 343 makeStringCore(start, strlen((const char*)start), obj, kString_PdfObject
Type); |
354 } | 344 } |
355 | 345 |
356 static void makeString(const unsigned char* start, const unsigned char* end,
SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 346 static void makeString(const unsigned char* start, const unsigned char* end,
SkPdfNativeObject* obj) { |
357 makeStringCore(start, end - start, obj, kString_PdfObjectType PUT_TRACK_
PARAMETERS); | 347 makeStringCore(start, end - start, obj, kString_PdfObjectType); |
358 } | 348 } |
359 | 349 |
360 static void makeString(const unsigned char* start, size_t bytes, SkPdfNative
Object* obj GET_TRACK_PARAMETERS) { | 350 static void makeString(const unsigned char* start, size_t bytes, SkPdfNative
Object* obj) { |
361 makeStringCore(start, bytes, obj, kString_PdfObjectType PUT_TRACK_PARAME
TERS); | 351 makeStringCore(start, bytes, obj, kString_PdfObjectType); |
362 } | 352 } |
363 | 353 |
364 | 354 |
365 static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj
GET_TRACK_PARAMETERS) { | 355 static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj
) { |
366 makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObj
ectType PUT_TRACK_PARAMETERS); | 356 makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObj
ectType); |
367 } | 357 } |
368 | 358 |
369 static void makeHexString(const unsigned char* start, const unsigned char* e
nd, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 359 static void makeHexString(const unsigned char* start, const unsigned char* e
nd, SkPdfNativeObject* obj) { |
370 makeStringCore(start, end - start, obj, kHexString_PdfObjectType PUT_TRA
CK_PARAMETERS); | 360 makeStringCore(start, end - start, obj, kHexString_PdfObjectType); |
371 } | 361 } |
372 | 362 |
373 static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNat
iveObject* obj GET_TRACK_PARAMETERS) { | 363 static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNat
iveObject* obj) { |
374 makeStringCore(start, bytes, obj, kHexString_PdfObjectType PUT_TRACK_PAR
AMETERS); | 364 makeStringCore(start, bytes, obj, kHexString_PdfObjectType); |
375 } | 365 } |
376 | 366 |
377 | 367 |
378 static void makeName(const unsigned char* start, SkPdfNativeObject* obj GET_
TRACK_PARAMETERS) { | 368 static void makeName(const unsigned char* start, SkPdfNativeObject* obj) { |
379 makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectTy
pe PUT_TRACK_PARAMETERS); | 369 makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectTy
pe); |
380 } | 370 } |
381 | 371 |
382 static void makeName(const unsigned char* start, const unsigned char* end, S
kPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 372 static void makeName(const unsigned char* start, const unsigned char* end, S
kPdfNativeObject* obj) { |
383 makeStringCore(start, end - start, obj, kName_PdfObjectType PUT_TRACK_PA
RAMETERS); | 373 makeStringCore(start, end - start, obj, kName_PdfObjectType); |
384 } | 374 } |
385 | 375 |
386 static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeOb
ject* obj GET_TRACK_PARAMETERS) { | 376 static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeOb
ject* obj) { |
387 makeStringCore(start, bytes, obj, kName_PdfObjectType PUT_TRACK_PARAMETE
RS); | 377 makeStringCore(start, bytes, obj, kName_PdfObjectType); |
388 } | 378 } |
389 | 379 |
390 | 380 |
391 static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj G
ET_TRACK_PARAMETERS) { | 381 static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj)
{ |
392 makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjec
tType PUT_TRACK_PARAMETERS); | 382 makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjec
tType); |
393 } | 383 } |
394 | 384 |
395 static void makeKeyword(const unsigned char* start, const unsigned char* end
, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 385 static void makeKeyword(const unsigned char* start, const unsigned char* end
, SkPdfNativeObject* obj) { |
396 makeStringCore(start, end - start, obj, kKeyword_PdfObjectType PUT_TRACK
_PARAMETERS); | 386 makeStringCore(start, end - start, obj, kKeyword_PdfObjectType); |
397 } | 387 } |
398 | 388 |
399 static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativ
eObject* obj GET_TRACK_PARAMETERS) { | 389 static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativ
eObject* obj) { |
400 makeStringCore(start, bytes, obj, kKeyword_PdfObjectType PUT_TRACK_PARAM
ETERS); | 390 makeStringCore(start, bytes, obj, kKeyword_PdfObjectType); |
401 } | 391 } |
402 | 392 |
403 | 393 |
404 | 394 |
405 // TODO(edisonn): make the functions to return SkPdfArray, move these functi
ons in SkPdfArray | 395 // TODO(edisonn): make the functions to return SkPdfArray, move these functi
ons in SkPdfArray |
406 static void makeEmptyArray(SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { | 396 static void makeEmptyArray(SkPdfNativeObject* obj) { |
407 STORE_TRACK_PARAMETERS(obj); | |
408 | |
409 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 397 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
410 | 398 |
411 obj->fObjectType = kArray_PdfObjectType; | 399 obj->fObjectType = kArray_PdfObjectType; |
412 obj->fArray = new SkTDArray<SkPdfNativeObject*>(); | 400 obj->fArray = new SkTDArray<SkPdfNativeObject*>(); |
413 // return (SkPdfArray*)obj; | 401 // return (SkPdfArray*)obj; |
414 } | 402 } |
415 | 403 |
416 bool appendInArray(SkPdfNativeObject* obj) { | 404 bool appendInArray(SkPdfNativeObject* obj) { |
417 SkASSERT(fObjectType == kArray_PdfObjectType); | 405 SkASSERT(fObjectType == kArray_PdfObjectType); |
418 if (fObjectType != kArray_PdfObjectType) { | 406 if (fObjectType != kArray_PdfObjectType) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 const SkPdfNativeObject* operator[](int i) const { | 457 const SkPdfNativeObject* operator[](int i) const { |
470 SkPdfMarkObjectUsed(); | 458 SkPdfMarkObjectUsed(); |
471 | 459 |
472 SkASSERT(fObjectType == kArray_PdfObjectType); | 460 SkASSERT(fObjectType == kArray_PdfObjectType); |
473 | 461 |
474 return (*fArray)[i]; | 462 return (*fArray)[i]; |
475 } | 463 } |
476 | 464 |
477 | 465 |
478 // TODO(edisonn): make the functions to return SkPdfDictionary, move these f
unctions in SkPdfDictionary | 466 // TODO(edisonn): make the functions to return SkPdfDictionary, move these f
unctions in SkPdfDictionary |
479 static void makeEmptyDictionary(SkPdfNativeObject* obj GET_TRACK_PARAMETERS)
{ | 467 static void makeEmptyDictionary(SkPdfNativeObject* obj) { |
480 STORE_TRACK_PARAMETERS(obj); | |
481 | |
482 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 468 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
483 | 469 |
484 obj->fObjectType = kDictionary_PdfObjectType; | 470 obj->fObjectType = kDictionary_PdfObjectType; |
485 obj->fMap = new SkTDict<SkPdfNativeObject*>(1); | 471 obj->fMap = new SkTDict<SkPdfNativeObject*>(1); |
486 obj->fStr.fBuffer = NULL; | 472 obj->fStr.fBuffer = NULL; |
487 obj->fStr.fBytes = 0; | 473 obj->fStr.fBytes = 0; |
488 } | 474 } |
489 | 475 |
490 // TODO(edisonn): get all the possible names from spec, and compute a hash f
unction | 476 // TODO(edisonn): get all the possible names from spec, and compute a hash f
unction |
491 // that would create no overlaps in the same dictionary | 477 // that would create no overlaps in the same dictionary |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 | 1174 |
1189 default: | 1175 default: |
1190 str = "Error"; | 1176 str = "Error"; |
1191 break; | 1177 break; |
1192 } | 1178 } |
1193 | 1179 |
1194 return str; | 1180 return str; |
1195 } | 1181 } |
1196 | 1182 |
1197 private: | 1183 private: |
1198 static void makeStringCore(const unsigned char* start, SkPdfNativeObject* ob
j, ObjectType type GET_TRACK_PARAMETERS) { | 1184 static void makeStringCore(const unsigned char* start, SkPdfNativeObject* ob
j, ObjectType type) { |
1199 makeStringCore(start, strlen((const char*)start), obj, type PUT_TRACK_PA
RAMETERS); | 1185 makeStringCore(start, strlen((const char*)start), obj, type); |
1200 } | 1186 } |
1201 | 1187 |
1202 static void makeStringCore(const unsigned char* start, const unsigned char*
end, SkPdfNativeObject* obj, ObjectType type GET_TRACK_PARAMETERS) { | 1188 static void makeStringCore(const unsigned char* start, const unsigned char*
end, SkPdfNativeObject* obj, ObjectType type) { |
1203 makeStringCore(start, end - start, obj, type PUT_TRACK_PARAMETERS); | 1189 makeStringCore(start, end - start, obj, type); |
1204 } | 1190 } |
1205 | 1191 |
1206 static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNa
tiveObject* obj, ObjectType type GET_TRACK_PARAMETERS) { | 1192 static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNa
tiveObject* obj, ObjectType type) { |
1207 STORE_TRACK_PARAMETERS(obj); | |
1208 | 1193 |
1209 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); | 1194 SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); |
1210 | 1195 |
1211 obj->fObjectType = type; | 1196 obj->fObjectType = type; |
1212 obj->fStr.fBuffer = start; | 1197 obj->fStr.fBuffer = start; |
1213 obj->fStr.fBytes = bytes; | 1198 obj->fStr.fBytes = bytes; |
1214 } | 1199 } |
1215 | 1200 |
1216 bool applyFilter(const char* name); | 1201 bool applyFilter(const char* name); |
1217 bool applyFlateDecodeFilter(); | 1202 bool applyFlateDecodeFilter(); |
1218 bool applyDCTDecodeFilter(); | 1203 bool applyDCTDecodeFilter(); |
1219 }; | 1204 }; |
1220 | 1205 |
1221 class SkPdfStream : public SkPdfNativeObject {}; | 1206 class SkPdfStream : public SkPdfNativeObject {}; |
1222 class SkPdfArray : public SkPdfNativeObject {}; | 1207 class SkPdfArray : public SkPdfNativeObject {}; |
1223 class SkPdfString : public SkPdfNativeObject {}; | 1208 class SkPdfString : public SkPdfNativeObject {}; |
1224 class SkPdfHexString : public SkPdfNativeObject {}; | 1209 class SkPdfHexString : public SkPdfNativeObject {}; |
1225 class SkPdfInteger : public SkPdfNativeObject {}; | 1210 class SkPdfInteger : public SkPdfNativeObject {}; |
1226 class SkPdfReal : public SkPdfNativeObject {}; | 1211 class SkPdfReal : public SkPdfNativeObject {}; |
1227 class SkPdfNumber : public SkPdfNativeObject {}; | 1212 class SkPdfNumber : public SkPdfNativeObject {}; |
1228 | 1213 |
1229 class SkPdfName : public SkPdfNativeObject { | 1214 class SkPdfName : public SkPdfNativeObject { |
1230 SkPdfName() : SkPdfNativeObject() { | 1215 SkPdfName() : SkPdfNativeObject() { |
1231 SkPdfNativeObject::makeName((const unsigned char*)"", this PUT_TRACK_PAR
AMETERS_SRC); | 1216 SkPdfNativeObject::makeName((const unsigned char*)"", this); |
1232 } | 1217 } |
1233 public: | 1218 public: |
1234 SkPdfName(char* name) : SkPdfNativeObject() { | 1219 SkPdfName(char* name) : SkPdfNativeObject() { |
1235 this->makeName((const unsigned char*)name, this PUT_TRACK_PARAMETERS_SRC
); | 1220 this->makeName((const unsigned char*)name, this); |
1236 } | 1221 } |
1237 }; | 1222 }; |
1238 | 1223 |
1239 #endif // SkPdfNativeObject | 1224 #endif // SkPdfNativeObject |
OLD | NEW |