OLD | NEW |
1 | 1 |
2 | 2 |
3 import sys | 3 import sys |
4 | 4 |
5 import datatypes | 5 import datatypes |
6 from autogen.pdfspec_autogen import * | 6 from autogen.pdfspec_autogen import * |
7 | 7 |
8 knowTypes = { | 8 knowTypes = { |
9 '(any)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true'], | 9 '(any)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true'], |
10 '(undefined)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'tr
ue'], | 10 '(undefined)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'tr
ue'], |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 # cls = self.fClasses[cls.fBase] | 226 # cls = self.fClasses[cls.fBase] |
227 # # TODO(edisonn): bad perf | 227 # # TODO(edisonn): bad perf |
228 # for subField in cls.fFields: | 228 # for subField in cls.fFields: |
229 # if subField.fProp.fName == field.fProp.fName: | 229 # if subField.fProp.fName == field.fProp.fName: |
230 # mustBe = mustBe + subField.fProp.fMustBe | 230 # mustBe = mustBe + subField.fProp.fMustBe |
231 | 231 |
232 return mustBe | 232 return mustBe |
233 | 233 |
234 def write(self): | 234 def write(self): |
235 global fileHeaders | 235 global fileHeaders |
| 236 global fileHeadersCpp |
236 global knowTypes | 237 global knowTypes |
237 | 238 |
238 # generate enum | 239 # generate enum |
239 enumsRoot = [] | 240 enumsRoot = [] |
240 | 241 |
241 enumToCls = {} | 242 enumToCls = {} |
242 | 243 |
243 for name in self.fClasses: | 244 for name in self.fClasses: |
244 cls = self.fClasses[name] | 245 cls = self.fClasses[name] |
245 cls.fEnum = 'k' + name + '_SkPdfObjectType' | 246 cls.fEnum = 'k' + name + '_SkPdfObjectType' |
246 cls.fEnumEnd = 'k' + name + '__End_SkPdfObjectType' | 247 cls.fEnumEnd = 'k' + name + '__End_SkPdfObjectType' |
247 | 248 |
248 fileHeaders.write('#include "SkPdf' + cls.fName + '_autogen.h"\n') | 249 fileHeaders.write('#include "SkPdf' + cls.fName + '_autogen.h"\n') |
| 250 fileHeadersCpp.write('#include "SkPdf' + cls.fName + '_autogen.cpp"\n') |
249 | 251 |
250 if cls.fBase != '': | 252 if cls.fBase != '': |
251 self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum) | 253 self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum) |
252 | 254 |
253 if cls.fBase == '': | 255 if cls.fBase == '': |
254 enumsRoot.append(cls.fEnum) | 256 enumsRoot.append(cls.fEnum) |
255 | 257 |
256 enumToCls[cls.fEnum] = cls | 258 enumToCls[cls.fEnum] = cls |
257 | 259 |
258 enumsRoot.sort() | 260 enumsRoot.sort() |
(...skipping 20 matching lines...) Expand all Loading... |
279 fileEnums.write('\n') | 281 fileEnums.write('\n') |
280 | 282 |
281 fileEnums.write('#endif // __DEFINED__SkPdfEnums\n') | 283 fileEnums.write('#endif // __DEFINED__SkPdfEnums\n') |
282 fileEnums.close() | 284 fileEnums.close() |
283 | 285 |
284 for name in self.fClassesNamesInOrder: | 286 for name in self.fClassesNamesInOrder: |
285 cls = self.fClasses[name] | 287 cls = self.fClasses[name] |
286 enum = cls.fEnum | 288 enum = cls.fEnum |
287 | 289 |
288 fileClass = open('SkPdf' + cls.fName + '_autogen.h', 'w') | 290 fileClass = open('SkPdf' + cls.fName + '_autogen.h', 'w') |
| 291 fileClassCpp = open('SkPdf' + cls.fName + '_autogen.cpp', 'w') |
289 fileClass.write('#ifndef __DEFINED__SkPdf' + cls.fName + '\n') | 292 fileClass.write('#ifndef __DEFINED__SkPdf' + cls.fName + '\n') |
290 fileClass.write('#define __DEFINED__SkPdf' + cls.fName + '\n') | 293 fileClass.write('#define __DEFINED__SkPdf' + cls.fName + '\n') |
291 fileClass.write('\n') | 294 fileClass.write('\n') |
292 | 295 |
| 296 fileClassCpp.write('#include "SkPdf' + cls.fName + '_autogen.h"\n\n') |
293 fileClass.write('#include "SkPdfUtils.h"\n') | 297 fileClass.write('#include "SkPdfUtils.h"\n') |
294 fileClass.write('#include "SkPdfEnums_autogen.h"\n') | 298 fileClass.write('#include "SkPdfEnums_autogen.h"\n') |
295 fileClass.write('#include "SkPdfArray_autogen.h"\n') | 299 fileClass.write('#include "SkPdfArray_autogen.h"\n') |
296 if cls.fBase != '': | 300 if cls.fBase != '': |
297 fileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n') | 301 fileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n') |
298 fileClass.write('\n') | 302 fileClass.write('\n') |
299 | 303 |
300 if cls.fComment != '': | 304 if cls.fComment != '': |
301 fileClass.write('// ' + cls.fComment + '\n') | 305 fileClass.write('// ' + cls.fComment + '\n') |
302 | 306 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 | 360 |
357 lines = prop.fComment.split('\n') | 361 lines = prop.fComment.split('\n') |
358 if prop.fComment != '' and len(lines) > 0: | 362 if prop.fComment != '' and len(lines) > 0: |
359 fileClass.write('/** ' + lines[0] + '\n') | 363 fileClass.write('/** ' + lines[0] + '\n') |
360 for line in lines[1:]: | 364 for line in lines[1:]: |
361 fileClass.write(' * ' + line + '\n') | 365 fileClass.write(' * ' + line + '\n') |
362 fileClass.write('**/\n') | 366 fileClass.write('**/\n') |
363 | 367 |
364 if prop.fCppName[0] == '[': | 368 if prop.fCppName[0] == '[': |
365 fileClass.write('/*\n') # comment code of the atributes that can ha
ve any name | 369 fileClass.write('/*\n') # comment code of the atributes that can ha
ve any name |
| 370 fileClassCpp.write('/*\n') # comment code of the atributes that can
have any name |
366 | 371 |
367 # TODO(edisonn): has_foo(); | 372 # TODO(edisonn): has_foo(); |
368 fileClass.write(' bool has_' + prop.fCppName + '() const {\n') | 373 fileClass.write(' bool has_' + prop.fCppName + '() const {\n') |
369 fileClass.write(' return (ObjectFromDictionary(fPodofoDoc, fPodofoO
bj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", NULL));\n') | 374 fileClass.write(' return (ObjectFromDictionary(fPodofoDoc, fPodofoO
bj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", NULL));\n') |
370 fileClass.write(' }\n') | 375 fileClass.write(' }\n') |
371 fileClass.write('\n') | 376 fileClass.write('\n') |
372 | 377 |
373 if len(prop.fTypes.split()) == 1: | 378 if len(prop.fTypes.split()) == 1: |
374 t = prop.fTypes.strip() | 379 t = prop.fTypes.strip() |
375 fileClass.write(' ' + knowTypes[t][0] + ' ' + prop.fCppName + '() c
onst {\n') | 380 fileClass.write(' ' + knowTypes[t][0] + ' ' + prop.fCppName + '() c
onst;\n') |
376 fileClass.write(' ' + knowTypes[t][0] + ' ret;\n') | 381 fileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName + '::
' + prop.fCppName + '() const {\n') |
377 fileClass.write(' if (' + knowTypes[t][1] + '(fPodofoDoc, fPodofo
Obj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) retu
rn ret;\n') | 382 fileClassCpp.write(' ' + knowTypes[t][0] + ' ret;\n') |
| 383 fileClassCpp.write(' if (' + knowTypes[t][1] + '(fPodofoDoc, fPodof
oObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) ret
urn ret;\n') |
378 if field.fRequired == False and prop.fDefault != '': | 384 if field.fRequired == False and prop.fDefault != '': |
379 fileClass.write(' return ' + prop.fDefault.toCpp() + ';\n'); | 385 fileClassCpp.write(' return ' + prop.fDefault.toCpp() + ';\n'); |
380 else: | 386 else: |
381 fileClass.write(' // TODO(edisonn): warn about missing required
field, assert for known good pdfs\n') | 387 fileClassCpp.write(' // TODO(edisonn): warn about missing require
d field, assert for known good pdfs\n') |
382 fileClass.write(' return ' + knowTypes[t][2].toCpp() + ';\n'); | 388 fileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + ';\n'); |
383 fileClass.write(' }\n') | 389 fileClassCpp.write('}\n') |
384 fileClass.write('\n') | 390 fileClassCpp.write('\n') |
385 else: | 391 else: |
386 for type in prop.fTypes.split(): | 392 for type in prop.fTypes.split(): |
387 t = type.strip() | 393 t = type.strip() |
388 fileClass.write(' bool is' + prop.fCppName + 'A' + t.title() + '(
) const {\n') | 394 fileClass.write(' bool is' + prop.fCppName + 'A' + t.title() + '(
) const {\n') |
389 fileClass.write(' SkPdfObject* ret = NULL;\n') | 395 fileClass.write(' SkPdfObject* ret = NULL;\n') |
390 fileClass.write(' if (!ObjectFromDictionary(fPodofoDoc, fPodofo
Obj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) retu
rn false;\n') | 396 fileClass.write(' if (!ObjectFromDictionary(fPodofoDoc, fPodofo
Obj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) retu
rn false;\n') |
391 fileClass.write(' return ' + knowTypes[t][3] + ';\n') | 397 fileClass.write(' return ' + knowTypes[t][3] + ';\n') |
392 fileClass.write(' }\n') | 398 fileClass.write(' }\n') |
393 fileClass.write('\n') | 399 fileClass.write('\n') |
394 | 400 |
395 fileClass.write(' ' + knowTypes[t][0] + ' get' + prop.fCppName +
'As' + t.title() + '() const {\n') | 401 fileClass.write(' ' + knowTypes[t][0] + ' get' + prop.fCppName +
'As' + t.title() + '() const;\n') |
396 fileClass.write(' ' + knowTypes[t][0] + ' ret = ' + knowTypes[t
][2].toCpp() + ';\n') | 402 fileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName + '
::get' + prop.fCppName + 'As' + t.title() + '() const {\n') |
397 fileClass.write(' if (' + knowTypes[t][1] + '(fPodofoDoc, fPodo
foObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) re
turn ret;\n') | 403 fileClassCpp.write(' ' + knowTypes[t][0] + ' ret = ' + knowTypes[
t][2].toCpp() + ';\n') |
398 fileClass.write(' // TODO(edisonn): warn about missing required
field, assert for known good pdfs\n') | 404 fileClassCpp.write(' if (' + knowTypes[t][1] + '(fPodofoDoc, fPod
ofoObj->GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr + '\", &ret)) r
eturn ret;\n') |
399 fileClass.write(' return ' + knowTypes[t][2].toCpp() + ';\n') | 405 fileClassCpp.write(' // TODO(edisonn): warn about missing require
d field, assert for known good pdfs\n') |
400 fileClass.write(' }\n') | 406 fileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + ';\n') |
401 fileClass.write('\n') | 407 fileClassCpp.write('}\n') |
| 408 fileClassCpp.write('\n') |
402 | 409 |
403 | 410 |
404 if prop.fCppName[0] == '[': | 411 if prop.fCppName[0] == '[': |
405 fileClass.write('*/\n') # comment code of the atributes that can ha
ve any name | 412 fileClass.write('*/\n') # comment code of the atributes that can ha
ve any name |
| 413 fileClassCpp.write('*/\n') # comment code of the atributes that can
have any name |
406 | 414 |
407 | 415 |
408 fileClass.write('};\n') | 416 fileClass.write('};\n') |
409 fileClass.write('\n') | 417 fileClass.write('\n') |
410 | 418 |
411 fileClass.write('#endif // __DEFINED__SkPdf' + cls.fName + '\n') | 419 fileClass.write('#endif // __DEFINED__SkPdf' + cls.fName + '\n') |
412 fileClass.close() | 420 fileClass.close() |
| 421 fileClassCpp.close() |
413 | 422 |
414 | 423 |
415 | 424 |
416 # generate constructor when knowing the type | 425 # generate constructor when knowing the type |
417 # later, p2, generate constructor when not knowing the type - very similar
with parsing? | 426 # later, p2, generate constructor when not knowing the type - very similar
with parsing? |
418 | 427 |
419 # generate parser | 428 # generate parser |
420 # TODO(edisonn): fast recognition based on must attributes. | 429 # TODO(edisonn): fast recognition based on must attributes. |
421 fileMapper = open('SkPdfPodofoMapper_autogen.h', 'w') | 430 fileMapper = open('SkPdfPodofoMapper_autogen.h', 'w') |
| 431 fileMapperCpp = open('SkPdfPodofoMapper_autogen.cpp', 'w') |
422 fileMapper.write('#ifndef __DEFINED__SkPdfPodofoMapper\n') | 432 fileMapper.write('#ifndef __DEFINED__SkPdfPodofoMapper\n') |
423 fileMapper.write('#define __DEFINED__SkPdfPodofoMapper\n') | 433 fileMapper.write('#define __DEFINED__SkPdfPodofoMapper\n') |
424 fileMapper.write('\n') | 434 fileMapper.write('\n') |
425 | 435 |
426 fileMapper.write('#include "SkPdfHeaders_autogen.h"\n') | 436 fileMapper.write('#include "SkPdfHeaders_autogen.h"\n') |
427 fileMapper.write('class PodofoMapper {\n') | 437 fileMapperCpp.write('#include "SkPdfPodofoMapper_autogen.h"\n') |
428 fileMapper.write('public:\n') | 438 # fileMapper.write('class PodofoMapper {\n') |
| 439 # fileMapper.write('public:\n') |
429 for name in self.fClassesNamesInOrder: | 440 for name in self.fClassesNamesInOrder: |
430 cls = self.fClasses[name] | 441 cls = self.fClasses[name] |
431 | 442 |
432 | 443 |
433 fileMapper.write(' static bool map(const SkPdfObject& in, SkPdf' + name +
'** out) {\n') | 444 fileMapper.write('bool map' + name + '(const SkPdfObject& in, SkPdf' + nam
e + '** out);\n') |
434 fileMapper.write(' return map(*in.doc(), *in.podofo(), out);\n') | |
435 fileMapper.write(' }\n') | |
436 fileMapper.write('\n') | |
437 | 445 |
438 fileMapper.write(' static bool map(const PdfMemDocument& podofoDoc, const
PdfObject& podofoObj, SkPdf' + name + '** out) {\n') | 446 fileMapperCpp.write('bool map' + name + '(const SkPdfObject& in, SkPdf' +
name + '** out) {\n') |
439 fileMapper.write(' if (!is' + name + '(podofoDoc, podofoObj)) return fa
lse;\n') | 447 fileMapperCpp.write(' return map' + name + '(*in.doc(), *in.podofo(), out
);\n') |
440 fileMapper.write('\n') | 448 fileMapperCpp.write('}\n') |
| 449 fileMapperCpp.write('\n') |
| 450 |
| 451 fileMapper.write('bool map' + name + '(const PdfMemDocument& podofoDoc, co
nst PdfObject& podofoObj, SkPdf' + name + '** out);\n') |
| 452 fileMapperCpp.write('bool map' + name + '(const PdfMemDocument& podofoDoc,
const PdfObject& podofoObj, SkPdf' + name + '** out) {\n') |
| 453 fileMapperCpp.write(' if (!is' + name + '(podofoDoc, podofoObj)) return f
alse;\n') |
| 454 fileMapperCpp.write('\n') |
441 | 455 |
442 # stream must be last one | 456 # stream must be last one |
443 hasStream = False | 457 hasStream = False |
444 for sub in cls.fEnumSubclasses: | 458 for sub in cls.fEnumSubclasses: |
445 if cls.fName == 'Object' and enumToCls[sub].fName == 'Stream': | 459 if cls.fName == 'Object' and enumToCls[sub].fName == 'Stream': |
446 hasStream = True | 460 hasStream = True |
447 else: | 461 else: |
448 fileMapper.write(' if (map(podofoDoc, podofoObj, (SkPdf' + enumToCl
s[sub].fName + '**)out)) return true;\n') | 462 fileMapperCpp.write(' if (map' + enumToCls[sub].fName + '(podofoDoc,
podofoObj, (SkPdf' + enumToCls[sub].fName + '**)out)) return true;\n') |
449 | 463 |
450 if hasStream: | 464 if hasStream: |
451 fileMapper.write(' if (map(podofoDoc, podofoObj, (SkPdfStream**)out))
return true;\n') | 465 fileMapperCpp.write(' if (mapStream(podofoDoc, podofoObj, (SkPdfStream*
*)out)) return true;\n') |
452 | 466 |
453 | 467 |
454 fileMapper.write('\n') | 468 fileMapperCpp.write('\n') |
455 | 469 |
456 fileMapper.write(' *out = new SkPdf' + name + '(&podofoDoc, &podofoObj)
;\n') | 470 fileMapperCpp.write(' *out = new SkPdf' + name + '(&podofoDoc, &podofoObj
);\n') |
457 fileMapper.write(' return true;\n') | 471 fileMapperCpp.write(' return true;\n') |
458 fileMapper.write(' }\n') | 472 fileMapperCpp.write('}\n') |
459 fileMapper.write('\n') | 473 fileMapperCpp.write('\n') |
460 | 474 |
461 for name in self.fClassesNamesInOrder: | 475 for name in self.fClassesNamesInOrder: |
462 cls = self.fClasses[name] | 476 cls = self.fClasses[name] |
463 | 477 |
464 fileMapper.write(' static bool is' + name + '(const PdfMemDocument& podof
oDoc, const PdfObject& podofoObj) {\n') | 478 fileMapper.write('bool is' + name + '(const PdfMemDocument& podofoDoc, con
st PdfObject& podofoObj);\n') |
| 479 fileMapperCpp.write('bool is' + name + '(const PdfMemDocument& podofoDoc,
const PdfObject& podofoObj) {\n') |
465 | 480 |
466 if cls.fCheck != '': | 481 if cls.fCheck != '': |
467 fileMapper.write(' return ' + cls.fCheck + ';\n') | 482 fileMapperCpp.write(' return ' + cls.fCheck + ';\n') |
468 else: | 483 else: |
469 cntMust = 0 | 484 cntMust = 0 |
470 for field in cls.fFields: | 485 for field in cls.fFields: |
471 prop = field.fProp | 486 prop = field.fProp |
472 if prop.fHasMust: | 487 if prop.fHasMust: |
473 cntMust = cntMust + 1 | 488 cntMust = cntMust + 1 |
474 fileMapper.write(' ' + knowTypes[prop.fTypes.strip()][0] + ' ' +
prop.fCppName + ';\n') | 489 fileMapperCpp.write(' ' + knowTypes[prop.fTypes.strip()][0] + ' ' +
prop.fCppName + ';\n') |
475 fileMapper.write(' if (!' + knowTypes[prop.fTypes.strip()][1] + '
(&podofoDoc, podofoObj.GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr
+ '\", &' + prop.fCppName + ')) return false;\n') | 490 fileMapperCpp.write(' if (!' + knowTypes[prop.fTypes.strip()][1] +
'(&podofoDoc, podofoObj.GetDictionary(), \"' + prop.fName + '\", \"' + prop.fAbr
+ '\", &' + prop.fCppName + ')) return false;\n') |
476 | 491 |
477 eval = ''; | 492 eval = ''; |
478 # TODO(edisonn): this could get out of hand, and could have poor per
formance if continued on this path | 493 # TODO(edisonn): this could get out of hand, and could have poor per
formance if continued on this path |
479 # but if we would write our parser, then best thing would be to crea
te a map of (key, value) -> to bits | 494 # but if we would write our parser, then best thing would be to crea
te a map of (key, value) -> to bits |
480 # and at each (key, value) we do an and with the bits existent, then
we check what bits are left, which would tell the posible types of this diction
ary | 495 # and at each (key, value) we do an and with the bits existent, then
we check what bits are left, which would tell the posible types of this diction
ary |
481 # and for non unique posinilities (if any) based on context, or the
requester of dictionry we can determine fast the dictionary type | 496 # and for non unique posinilities (if any) based on context, or the
requester of dictionry we can determine fast the dictionary type |
482 mustBe = self.determineAllMustBe(cls, field, enumToCls) | 497 mustBe = self.determineAllMustBe(cls, field, enumToCls) |
483 if len(mustBe) > 0: | 498 if len(mustBe) > 0: |
484 for cnd in mustBe: | 499 for cnd in mustBe: |
485 if eval == '': | 500 if eval == '': |
486 eval = '(' + prop.fCppName + ' != ' + cnd.toCpp() + ')' | 501 eval = '(' + prop.fCppName + ' != ' + cnd.toCpp() + ')' |
487 else: | 502 else: |
488 eval = eval + ' && ' + '(' + prop.fCppName + ' != ' + cnd.toCp
p() + ')' | 503 eval = eval + ' && ' + '(' + prop.fCppName + ' != ' + cnd.toCp
p() + ')' |
489 fileMapper.write(' if (' + eval + ') return false;\n') | 504 fileMapperCpp.write(' if (' + eval + ') return false;\n') |
490 fileMapper.write('\n') | 505 fileMapperCpp.write('\n') |
491 | 506 |
492 fileMapper.write(' return true;\n') | 507 fileMapperCpp.write(' return true;\n') |
493 | 508 |
494 fileMapper.write(' }\n') | 509 fileMapperCpp.write('}\n') |
495 fileMapper.write('\n') | 510 fileMapperCpp.write('\n') |
496 | 511 |
497 fileMapper.write('};\n') | 512 fileMapper.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pd
fDoc, const PdfDictionary& dict, const char* key, SkPdf' + name + '** data);\n') |
| 513 fileMapperCpp.write('bool ' + name + 'FromDictionary(const PdfMemDocument*
pdfDoc, const PdfDictionary& dict, const char* key, SkPdf' + name + '** data) {
\n') |
| 514 fileMapperCpp.write(' const PdfObject* value = resolveReferenceObject(pdf
Doc, dict.GetKey(PdfName(key)), true);\n') |
| 515 fileMapperCpp.write(' if (value == NULL) { return false; }\n') |
| 516 fileMapperCpp.write(' if (data == NULL) { return true; }\n') |
| 517 fileMapperCpp.write(' return map' + name + '(*pdfDoc, *value, (SkPdf' + n
ame + '**)data);\n') |
| 518 fileMapperCpp.write('}\n') |
| 519 fileMapperCpp.write('\n') |
| 520 |
| 521 fileMapper.write('bool ' + name + 'FromDictionary(const PdfMemDocument* pd
fDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdf' + name
+ '** data);\n') |
| 522 fileMapperCpp.write('bool ' + name + 'FromDictionary(const PdfMemDocument*
pdfDoc, const PdfDictionary& dict, const char* key, const char* abr, SkPdf' + n
ame + '** data) {\n') |
| 523 fileMapperCpp.write(' if (' + name + 'FromDictionary(pdfDoc, dict, key, d
ata)) return true;\n') |
| 524 fileMapperCpp.write(' if (abr == NULL || *abr == \'\\0\') return false;\n
') |
| 525 fileMapperCpp.write(' return ' + name + 'FromDictionary(pdfDoc, dict, abr
, data);\n') |
| 526 fileMapperCpp.write('}\n') |
| 527 fileMapperCpp.write('\n') |
| 528 |
| 529 #fileMapper.write('};\n') |
498 fileMapper.write('\n') | 530 fileMapper.write('\n') |
499 | 531 |
500 fileMapper.write('#endif // __DEFINED__SkPdfPodofoMapper\n') | 532 fileMapper.write('#endif // __DEFINED__SkPdfPodofoMapper\n') |
501 fileMapper.close() | 533 fileMapper.close() |
502 | 534 |
503 return | 535 return |
504 | 536 |
505 def generateCode(): | 537 def generateCode(): |
506 global fileHeaders | 538 global fileHeaders |
| 539 global fileHeadersCpp |
507 global knowTypes | 540 global knowTypes |
508 | 541 |
509 fileHeaders = open('SkPdfHeaders_autogen.h', 'w') | 542 fileHeaders = open('SkPdfHeaders_autogen.h', 'w') |
| 543 fileHeadersCpp = open('SkPdfHeaders_autogen.cpp', 'w') |
510 fileHeaders.write('#ifndef __DEFINED__SkPdfHeaders\n') | 544 fileHeaders.write('#ifndef __DEFINED__SkPdfHeaders\n') |
511 fileHeaders.write('#define __DEFINED__SkPdfHeaders\n') | 545 fileHeaders.write('#define __DEFINED__SkPdfHeaders\n') |
512 fileHeaders.write('\n') | 546 fileHeaders.write('\n') |
513 | 547 |
514 fileHeaders.write('#include "SkPdfEnums_autogen.h"\n') | 548 fileHeaders.write('#include "SkPdfEnums_autogen.h"\n') |
515 | 549 |
| 550 fileHeadersCpp.write('#include "SkPdfHeaders_autogen.h"\n') |
| 551 |
516 manager = PdfClassManager() | 552 manager = PdfClassManager() |
517 | 553 |
518 manager.addClass('Object') | 554 manager.addClass('Object') |
519 | 555 |
520 manager.addClass('Null').check('podofoObj.GetDataType() == ePdfDataType_Null') | 556 manager.addClass('Null').check('podofoObj.GetDataType() == ePdfDataType_Null') |
521 manager.addClass('Boolean').check('podofoObj.GetDataType() == ePdfDataType_Boo
l')\ | 557 manager.addClass('Boolean').check('podofoObj.GetDataType() == ePdfDataType_Boo
l')\ |
522 .carbonCopyPublic('bool value() const {return fPodo
foObj->GetBool();}') | 558 .carbonCopyPublic('bool value() const {return fPodo
foObj->GetBool();}') |
523 | 559 |
524 manager.addClass('Integer').check('podofoObj.GetDataType() == ePdfDataType_Num
ber || podofoObj.GetDataType() == ePdfDataType_Real')\ | 560 manager.addClass('Integer').check('podofoObj.GetDataType() == ePdfDataType_Num
ber || podofoObj.GetDataType() == ePdfDataType_Real')\ |
525 .carbonCopyPublic('long value() const {return fPodo
foObj->GetNumber();}') | 561 .carbonCopyPublic('long value() const {return fPodo
foObj->GetNumber();}') |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 .type('name')\ | 610 .type('name')\ |
575 .comment('')\ | 611 .comment('')\ |
576 .must([datatypes.PdfName('MMType1')])\ | 612 .must([datatypes.PdfName('MMType1')])\ |
577 .done().done()\ | 613 .done().done()\ |
578 | 614 |
579 | 615 |
580 manager.write() | 616 manager.write() |
581 | 617 |
582 fileHeaders.write('#endif // __DEFINED__SkPdfHeaders\n') | 618 fileHeaders.write('#endif // __DEFINED__SkPdfHeaders\n') |
583 fileHeaders.close() | 619 fileHeaders.close() |
| 620 fileHeadersCpp.close() |
584 | 621 |
585 return 1 | 622 return 1 |
586 | 623 |
587 if '__main__' == __name__: | 624 if '__main__' == __name__: |
588 sys.exit(generateCode()) | 625 sys.exit(generateCode()) |
589 | 626 |
OLD | NEW |