| OLD | NEW |
| 1 | 1 |
| 2 | 2 |
| 3 import os | 3 import os |
| 4 import sys | 4 import sys |
| 5 | 5 |
| 6 import datatypes | 6 import datatypes |
| 7 from pdfspec_autogen import * | 7 from pdfspec_autogen import * |
| 8 | 8 |
| 9 # TODO(edisonn): date and some other types are in fact strings, with a custom fo
rmat!!! | 9 # TODO(edisonn): date and some other types are in fact strings, with a custom fo
rmat!!! |
| 10 # TODO(edisonn): refer to page 99 (PDF data types) | 10 # TODO(edisonn): refer to page 99 (PDF data types) |
| 11 knowTypes = { | 11 knowTypes = { |
| 12 '(any)': ['SkPdfObject*', 'ret', datatypes.CppNull(), 'true', 'use a mapper'], | 12 '(any)': ['SkPdfNativeObject*', 'ret', datatypes.CppNull(), 'true', 'use a mappe
r'], |
| 13 # TODO(edisonn): return constant for undefined | 13 # TODO(edisonn): return constant for undefined |
| 14 '(undefined)': ['SkPdfObject*', 'ret', datatypes.CppNull(), 'true', 'use a mappe
r'], | 14 '(undefined)': ['SkPdfNativeObject*', 'ret', datatypes.CppNull(), 'true', 'use a
mapper'], |
| 15 '(various)': ['SkPdfObject*', 'ret', datatypes.CppNull(), 'true', 'use a mapper'
], | 15 '(various)': ['SkPdfNativeObject*', 'ret', datatypes.CppNull(), 'true', 'use a m
apper'], |
| 16 'array': ['SkPdfArray*', '(SkPdfArray*)ret', datatypes.CppNull(), 'ret->isArray(
)'], | 16 'array': ['SkPdfArray*', '(SkPdfArray*)ret', datatypes.CppNull(), 'ret->isArray(
)'], |
| 17 'boolean': ['bool', 'ret->boolValue()', datatypes.PdfBoolean('false'), 'ret->isB
oolean()'], | 17 'boolean': ['bool', 'ret->boolValue()', datatypes.PdfBoolean('false'), 'ret->isB
oolean()'], |
| 18 #date is a string, with special formating, add here the | 18 #date is a string, with special formating, add here the |
| 19 'date': ['SkPdfDate', 'ret->dateValue()', datatypes.PdfDateNever(), 'ret->isDate
()'], | 19 'date': ['SkPdfDate', 'ret->dateValue()', datatypes.PdfDateNever(), 'ret->isDate
()'], |
| 20 'dictionary': ['SkPdfDictionary*', '(SkPdfDictionary*)ret', datatypes.CppNull(),
'ret->isDictionary()', 'use a mapper'], | 20 'dictionary': ['SkPdfDictionary*', '(SkPdfDictionary*)ret', datatypes.CppNull(),
'ret->isDictionary()', 'use a mapper'], |
| 21 'function': ['SkPdfFunction', 'ret->functionValue()', datatypes.PdfFunctionNone(
), 'ret->isFunction()'], | 21 'function': ['SkPdfFunction', 'ret->functionValue()', datatypes.PdfFunctionNone(
), 'ret->isFunction()'], |
| 22 'integer': ['int64_t', 'ret->intValue()', datatypes.PdfInteger(0), 'ret->isInteg
er()'], | 22 'integer': ['int64_t', 'ret->intValue()', datatypes.PdfInteger(0), 'ret->isInteg
er()'], |
| 23 'file_specification': ['SkPdfFileSpec', 'ret->fileSpecValue()', datatypes.FileSp
ecNone(), 'false'], | 23 'file_specification': ['SkPdfFileSpec', 'ret->fileSpecValue()', datatypes.FileSp
ecNone(), 'false'], |
| 24 'name': ['std::string', 'ret->nameValue2()', datatypes.PdfString('""'), 'ret->is
Name()'], | 24 'name': ['std::string', 'ret->nameValue2()', datatypes.PdfString('""'), 'ret->is
Name()'], |
| 25 #should assert, references should never be allowed here, should be resolved way
earlier | 25 #should assert, references should never be allowed here, should be resolved way
earlier |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 global fileHeadersNativeCpp | 247 global fileHeadersNativeCpp |
| 248 global knowTypes | 248 global knowTypes |
| 249 | 249 |
| 250 # generate enum | 250 # generate enum |
| 251 enumsRoot = [] | 251 enumsRoot = [] |
| 252 | 252 |
| 253 enumToCls = {} | 253 enumToCls = {} |
| 254 | 254 |
| 255 for name in self.fClasses: | 255 for name in self.fClasses: |
| 256 cls = self.fClasses[name] | 256 cls = self.fClasses[name] |
| 257 cls.fEnum = 'k' + name + '_SkPdfObjectType' | 257 cls.fEnum = 'k' + name + '_SkPdfNativeObjectType' |
| 258 cls.fEnumEnd = 'k' + name + '__End_SkPdfObjectType' | 258 cls.fEnumEnd = 'k' + name + '__End_SkPdfNativeObjectType' |
| 259 | 259 |
| 260 fileHeadersNative.write('#include "SkPdf' + cls.fName + '_autogen.h"\n') | 260 fileHeadersNative.write('#include "SkPdf' + cls.fName + '_autogen.h"\n') |
| 261 fileHeadersNativeCpp.write('#include "SkPdf' + cls.fName + '_autogen.cpp"\
n') | 261 fileHeadersNativeCpp.write('#include "SkPdf' + cls.fName + '_autogen.cpp"\
n') |
| 262 | 262 |
| 263 if cls.fBase != '': | 263 if cls.fBase != '': |
| 264 self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum) | 264 self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum) |
| 265 | 265 |
| 266 if cls.fBase == '': | 266 if cls.fBase == '': |
| 267 enumsRoot.append(cls.fEnum) | 267 enumsRoot.append(cls.fEnum) |
| 268 | 268 |
| 269 enumToCls[cls.fEnum] = cls | 269 enumToCls[cls.fEnum] = cls |
| 270 | 270 |
| 271 enumsRoot.sort() | 271 enumsRoot.sort() |
| 272 | 272 |
| 273 | 273 |
| 274 # TODO(edisonn): move each .h in it's own file | 274 # TODO(edisonn): move each .h in it's own file |
| 275 # write imports | 275 # write imports |
| 276 | 276 |
| 277 # write enums | 277 # write enums |
| 278 fileEnums = open(os.path.join(sys.argv[1], 'native', 'autogen', 'SkPdfEnums_
autogen.h'), 'w') | 278 fileEnums = open(os.path.join(sys.argv[1], 'native', 'autogen', 'SkPdfEnums_
autogen.h'), 'w') |
| 279 fileEnums.write('#ifndef __DEFINED__SkPdfEnums\n') | 279 fileEnums.write('#ifndef __DEFINED__SkPdfEnums\n') |
| 280 fileEnums.write('#define __DEFINED__SkPdfEnums\n') | 280 fileEnums.write('#define __DEFINED__SkPdfEnums\n') |
| 281 fileEnums.write('\n') | 281 fileEnums.write('\n') |
| 282 | 282 |
| 283 fileEnums.write('enum SkPdfObjectType {\n') | 283 fileEnums.write('enum SkPdfNativeObjectType {\n') |
| 284 fileEnums.write(' kNone_SkPdfObjectType = 0,\n') | 284 fileEnums.write(' kNone_SkPdfNativeObjectType = 0,\n') |
| 285 for enum in enumsRoot: | 285 for enum in enumsRoot: |
| 286 self.writeEnum(fileEnums, enum, enumToCls) | 286 self.writeEnum(fileEnums, enum, enumToCls) |
| 287 fileEnums.write('};\n') | 287 fileEnums.write('};\n') |
| 288 fileEnums.write('\n') | 288 fileEnums.write('\n') |
| 289 | 289 |
| 290 # write forward class declaration | 290 # write forward class declaration |
| 291 for name in self.fClassesNamesInOrder: | 291 for name in self.fClassesNamesInOrder: |
| 292 fileEnums.write('class SkPdf' + name + ';\n') | 292 fileEnums.write('class SkPdf' + name + ';\n') |
| 293 fileEnums.write('\n') | 293 fileEnums.write('\n') |
| 294 | 294 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 308 | 308 |
| 309 nativeFileClassCpp.write('#include "SkPdf' + cls.fName + '_autogen.h"\n\n'
) | 309 nativeFileClassCpp.write('#include "SkPdf' + cls.fName + '_autogen.h"\n\n'
) |
| 310 nativeFileClassCpp.write('\n') | 310 nativeFileClassCpp.write('\n') |
| 311 | 311 |
| 312 | 312 |
| 313 if cls.fBase == '': | 313 if cls.fBase == '': |
| 314 nativeFileClass.write('#include "stddef.h"\n') | 314 nativeFileClass.write('#include "stddef.h"\n') |
| 315 nativeFileClass.write('#include <string>\n') | 315 nativeFileClass.write('#include <string>\n') |
| 316 nativeFileClass.write('#include "SkPdfEnums_autogen.h"\n') | 316 nativeFileClass.write('#include "SkPdfEnums_autogen.h"\n') |
| 317 nativeFileClass.write('#include "SkPdfNYI.h"\n') | 317 nativeFileClass.write('#include "SkPdfNYI.h"\n') |
| 318 nativeFileClass.write('#include "SkPdfObject.h"\n') | 318 nativeFileClass.write('#include "SkPdfNativeObject.h"\n') |
| 319 nativeFileClass.write('class SkNativeParsedPDF;\n') | 319 nativeFileClass.write('class SkPdfNativeDoc;\n') |
| 320 | 320 |
| 321 if cls.fBase != '': | 321 if cls.fBase != '': |
| 322 nativeFileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n') | 322 nativeFileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n') |
| 323 | 323 |
| 324 nativeFileClassCpp.write('#include "SkNativeParsedPDF.h"\n') | 324 nativeFileClassCpp.write('#include "SkPdfNativeDoc.h"\n') |
| 325 | 325 |
| 326 | 326 |
| 327 nativeFileClass.write('\n') | 327 nativeFileClass.write('\n') |
| 328 | 328 |
| 329 if cls.fComment != '': | 329 if cls.fComment != '': |
| 330 nativeFileClass.write('// ' + cls.fComment + '\n') | 330 nativeFileClass.write('// ' + cls.fComment + '\n') |
| 331 | 331 |
| 332 if cls.fBase == '': | 332 if cls.fBase == '': |
| 333 nativeFileClass.write('class SkPdf' + cls.fName + ' : public SkPdfObject
{\n') | 333 nativeFileClass.write('class SkPdf' + cls.fName + ' : public SkPdfNative
Object {\n') |
| 334 else: | 334 else: |
| 335 nativeFileClass.write('class SkPdf' + cls.fName + ' : public SkPdf' + cl
s.fBase + ' {\n') | 335 nativeFileClass.write('class SkPdf' + cls.fName + ' : public SkPdf' + cl
s.fBase + ' {\n') |
| 336 | 336 |
| 337 self.writeAsFoo(nativeFileClass, cls, enumToCls) | 337 self.writeAsFoo(nativeFileClass, cls, enumToCls) |
| 338 | 338 |
| 339 nativeFileClass.write('public:\n') | 339 nativeFileClass.write('public:\n') |
| 340 | 340 |
| 341 for cc in cls.fCCPublicNative: | 341 for cc in cls.fCCPublicNative: |
| 342 nativeFileClass.write(' ' + cc + '\n') | 342 nativeFileClass.write(' ' + cc + '\n') |
| 343 | 343 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 368 nativeFileClass.write('**/\n') | 368 nativeFileClass.write('**/\n') |
| 369 | 369 |
| 370 if prop.fCppName[0] == '[': | 370 if prop.fCppName[0] == '[': |
| 371 nativeFileClass.write('/*\n') # comment code of the atributes that
can have any name | 371 nativeFileClass.write('/*\n') # comment code of the atributes that
can have any name |
| 372 nativeFileClassCpp.write('/*\n') # comment code of the atributes th
at can have any name | 372 nativeFileClassCpp.write('/*\n') # comment code of the atributes th
at can have any name |
| 373 | 373 |
| 374 | 374 |
| 375 if len(prop.fTypes.split()) == 1: | 375 if len(prop.fTypes.split()) == 1: |
| 376 t = prop.fTypes.strip() | 376 t = prop.fTypes.strip() |
| 377 | 377 |
| 378 nativeFileClass.write(' ' + knowTypes[t][0] + ' ' + prop.fCppName +
'(SkNativeParsedPDF* doc);\n') | 378 nativeFileClass.write(' ' + knowTypes[t][0] + ' ' + prop.fCppName +
'(SkPdfNativeDoc* doc);\n') |
| 379 nativeFileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName
+ '::' + prop.fCppName + '(SkNativeParsedPDF* doc) {\n') | 379 nativeFileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fName
+ '::' + prop.fCppName + '(SkPdfNativeDoc* doc) {\n') |
| 380 nativeFileClassCpp.write(' SkPdfObject* ret = get(\"' + prop.fName
+ '\", \"' + prop.fAbr + '\");\n') | 380 nativeFileClassCpp.write(' SkPdfNativeObject* ret = get(\"' + prop.
fName + '\", \"' + prop.fAbr + '\");\n') |
| 381 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(re
t);}\n') | 381 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(re
t);}\n') |
| 382 nativeFileClassCpp.write(' if ((ret != NULL && ' + knowTypes[t][3]
+ ') || (doc == NULL && ret != NULL && ret->isReference())) return ' + knowTypes
[t][1] + ';\n') | 382 nativeFileClassCpp.write(' if ((ret != NULL && ' + knowTypes[t][3]
+ ') || (doc == NULL && ret != NULL && ret->isReference())) return ' + knowTypes
[t][1] + ';\n') |
| 383 | 383 |
| 384 if field.fRequired: | 384 if field.fRequired: |
| 385 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing r
equired field, assert for known good pdfs\n') | 385 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing r
equired field, assert for known good pdfs\n') |
| 386 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + '
;\n'); | 386 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + '
;\n'); |
| 387 elif prop.fDefault != '': | 387 elif prop.fDefault != '': |
| 388 nativeFileClassCpp.write(' return ' + prop.fDefault.toCpp() + ';\
n'); | 388 nativeFileClassCpp.write(' return ' + prop.fDefault.toCpp() + ';\
n'); |
| 389 else: | 389 else: |
| 390 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing d
efault value for optional fields\n') | 390 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing d
efault value for optional fields\n') |
| 391 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + '
;\n'); | 391 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() + '
;\n'); |
| 392 | 392 |
| 393 nativeFileClassCpp.write('}\n') | 393 nativeFileClassCpp.write('}\n') |
| 394 nativeFileClassCpp.write('\n') | 394 nativeFileClassCpp.write('\n') |
| 395 else: | 395 else: |
| 396 for type in prop.fTypes.split(): | 396 for type in prop.fTypes.split(): |
| 397 t = type.strip() | 397 t = type.strip() |
| 398 | 398 |
| 399 nativeFileClass.write(' bool is' + prop.fCppName + 'A' + t.title(
) + '(SkNativeParsedPDF* doc);\n') | 399 nativeFileClass.write(' bool is' + prop.fCppName + 'A' + t.title(
) + '(SkPdfNativeDoc* doc);\n') |
| 400 | 400 |
| 401 nativeFileClassCpp.write('bool SkPdf' + cls.fName + '::is' + prop.
fCppName + 'A' + t.title() + '(SkNativeParsedPDF* doc) {\n') | 401 nativeFileClassCpp.write('bool SkPdf' + cls.fName + '::is' + prop.
fCppName + 'A' + t.title() + '(SkPdfNativeDoc* doc) {\n') |
| 402 nativeFileClassCpp.write(' SkPdfObject* ret = get(\"' + prop.fNam
e + '\", \"' + prop.fAbr + '\");\n') | 402 nativeFileClassCpp.write(' SkPdfNativeObject* ret = get(\"' + pro
p.fName + '\", \"' + prop.fAbr + '\");\n') |
| 403 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(
ret);}\n') | 403 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(
ret);}\n') |
| 404 nativeFileClassCpp.write(' return ret != NULL && ' + knowTypes[t]
[3] + ';\n') | 404 nativeFileClassCpp.write(' return ret != NULL && ' + knowTypes[t]
[3] + ';\n') |
| 405 nativeFileClassCpp.write('}\n') | 405 nativeFileClassCpp.write('}\n') |
| 406 nativeFileClassCpp.write('\n') | 406 nativeFileClassCpp.write('\n') |
| 407 | 407 |
| 408 nativeFileClass.write(' ' + knowTypes[t][0] + ' get' + prop.fCppN
ame + 'As' + t.title() + '(SkNativeParsedPDF* doc);\n') | 408 nativeFileClass.write(' ' + knowTypes[t][0] + ' get' + prop.fCppN
ame + 'As' + t.title() + '(SkPdfNativeDoc* doc);\n') |
| 409 nativeFileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fNa
me + '::get' + prop.fCppName + 'As' + t.title() + '(SkNativeParsedPDF* doc) {\n'
) | 409 nativeFileClassCpp.write('' + knowTypes[t][0] + ' SkPdf' + cls.fNa
me + '::get' + prop.fCppName + 'As' + t.title() + '(SkPdfNativeDoc* doc) {\n') |
| 410 | 410 |
| 411 nativeFileClassCpp.write(' SkPdfObject* ret = get(\"' + prop.fNam
e + '\", \"' + prop.fAbr + '\");\n') | 411 nativeFileClassCpp.write(' SkPdfNativeObject* ret = get(\"' + pro
p.fName + '\", \"' + prop.fAbr + '\");\n') |
| 412 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(
ret);}\n') | 412 nativeFileClassCpp.write(' if (doc) {ret = doc->resolveReference(
ret);}\n') |
| 413 nativeFileClassCpp.write(' if ((ret != NULL && ' + knowTypes[t][3
] + ') || (doc == NULL && ret != NULL && ret->isReference())) return ' + knowTyp
es[t][1] + ';\n') | 413 nativeFileClassCpp.write(' if ((ret != NULL && ' + knowTypes[t][3
] + ') || (doc == NULL && ret != NULL && ret->isReference())) return ' + knowTyp
es[t][1] + ';\n') |
| 414 | 414 |
| 415 | 415 |
| 416 if field.fRequired: | 416 if field.fRequired: |
| 417 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing
required field, assert for known good pdfs\n') | 417 nativeFileClassCpp.write(' // TODO(edisonn): warn about missing
required field, assert for known good pdfs\n') |
| 418 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() +
';\n'); | 418 nativeFileClassCpp.write(' return ' + knowTypes[t][2].toCpp() +
';\n'); |
| 419 elif prop.fDefault != '': | 419 elif prop.fDefault != '': |
| 420 nativeFileClassCpp.write(' return ' + prop.fDefault.toCpp() + '
;\n'); | 420 nativeFileClassCpp.write(' return ' + prop.fDefault.toCpp() + '
;\n'); |
| 421 else: | 421 else: |
| (...skipping 29 matching lines...) Expand all Loading... |
| 451 # generate parser | 451 # generate parser |
| 452 # TODO(edisonn): fast recognition based on must attributes. | 452 # TODO(edisonn): fast recognition based on must attributes. |
| 453 fileMapperNative = open(os.path.join(sys.argv[1], 'native', 'autogen', 'SkPd
fMapper_autogen.h'), 'w') | 453 fileMapperNative = open(os.path.join(sys.argv[1], 'native', 'autogen', 'SkPd
fMapper_autogen.h'), 'w') |
| 454 fileMapperNativeCpp = open(os.path.join(sys.argv[1], 'native', 'autogen', 'S
kPdfMapper_autogen.cpp'), 'w') | 454 fileMapperNativeCpp = open(os.path.join(sys.argv[1], 'native', 'autogen', 'S
kPdfMapper_autogen.cpp'), 'w') |
| 455 | 455 |
| 456 fileMapperNative.write('#ifndef __DEFINED__SkPdfMapper\n') | 456 fileMapperNative.write('#ifndef __DEFINED__SkPdfMapper\n') |
| 457 fileMapperNative.write('#define __DEFINED__SkPdfMapper\n') | 457 fileMapperNative.write('#define __DEFINED__SkPdfMapper\n') |
| 458 fileMapperNative.write('\n') | 458 fileMapperNative.write('\n') |
| 459 | 459 |
| 460 fileMapperNative.write('#include "SkPdfHeaders_autogen.h"\n') | 460 fileMapperNative.write('#include "SkPdfHeaders_autogen.h"\n') |
| 461 fileMapperNative.write('#include "SkNativeParsedPDF.h"\n') | 461 fileMapperNative.write('#include "SkPdfNativeDoc.h"\n') |
| 462 fileMapperNative.write('#include "SkPdfObject.h"\n') | 462 fileMapperNative.write('#include "SkPdfNativeObject.h"\n') |
| 463 | 463 |
| 464 | 464 |
| 465 fileMapperNativeCpp.write('#include "SkPdfMapper_autogen.h"\n') | 465 fileMapperNativeCpp.write('#include "SkPdfMapper_autogen.h"\n') |
| 466 fileMapperNativeCpp.write('#include "SkPdfUtils.h"\n') | 466 fileMapperNativeCpp.write('#include "SkPdfUtils.h"\n') |
| 467 fileMapperNativeCpp.write('#include "SkPdfObject.h"\n') | 467 fileMapperNativeCpp.write('#include "SkPdfNativeObject.h"\n') |
| 468 fileMapperNativeCpp.write('\n') | 468 fileMapperNativeCpp.write('\n') |
| 469 | 469 |
| 470 fileMapperNative.write('class SkPdfMapper {\n') | 470 fileMapperNative.write('class SkPdfMapper {\n') |
| 471 | 471 |
| 472 fileMapperNative.write(' SkNativeParsedPDF* fParsedDoc;\n') | 472 fileMapperNative.write(' SkPdfNativeDoc* fParsedDoc;\n') |
| 473 | 473 |
| 474 fileMapperNative.write('public:\n') | 474 fileMapperNative.write('public:\n') |
| 475 | 475 |
| 476 fileMapperNative.write(' SkPdfMapper(SkNativeParsedPDF* doc) : fParsedDoc(d
oc) {}\n') | 476 fileMapperNative.write(' SkPdfMapper(SkPdfNativeDoc* doc) : fParsedDoc(doc)
{}\n') |
| 477 fileMapperNative.write('\n') | 477 fileMapperNative.write('\n') |
| 478 | 478 |
| 479 for name in self.fClassesNamesInOrder: | 479 for name in self.fClassesNamesInOrder: |
| 480 cls = self.fClasses[name] | 480 cls = self.fClasses[name] |
| 481 | 481 |
| 482 fileMapperNative.write(' SkPdfObjectType map' + name + '(const SkPdfObjec
t* in) const;\n') | 482 fileMapperNative.write(' SkPdfNativeObjectType map' + name + '(const SkPd
fNativeObject* in) const;\n') |
| 483 | 483 |
| 484 fileMapperNativeCpp.write('SkPdfObjectType SkPdfMapper::map' + name + '(co
nst SkPdfObject* in) const {\n') | 484 fileMapperNativeCpp.write('SkPdfNativeObjectType SkPdfMapper::map' + name
+ '(const SkPdfNativeObject* in) const {\n') |
| 485 fileMapperNativeCpp.write(' if (in == NULL || !is' + name + '(in)) return
kNone_SkPdfObjectType;\n') | 485 fileMapperNativeCpp.write(' if (in == NULL || !is' + name + '(in)) return
kNone_SkPdfNativeObjectType;\n') |
| 486 fileMapperNativeCpp.write('\n') | 486 fileMapperNativeCpp.write('\n') |
| 487 if len(cls.fEnumSubclasses) > 0: | 487 if len(cls.fEnumSubclasses) > 0: |
| 488 fileMapperNativeCpp.write(' SkPdfObjectType ret;\n') | 488 fileMapperNativeCpp.write(' SkPdfNativeObjectType ret;\n') |
| 489 | 489 |
| 490 # stream must be last one | 490 # stream must be last one |
| 491 hasStream = False | 491 hasStream = False |
| 492 for sub in cls.fEnumSubclasses: | 492 for sub in cls.fEnumSubclasses: |
| 493 fileMapperNativeCpp.write(' if (kNone_SkPdfObjectType != (ret = map' +
enumToCls[sub].fName + '(in))) return ret;\n') | 493 fileMapperNativeCpp.write(' if (kNone_SkPdfNativeObjectType != (ret = m
ap' + enumToCls[sub].fName + '(in))) return ret;\n') |
| 494 | 494 |
| 495 fileMapperNativeCpp.write('\n') | 495 fileMapperNativeCpp.write('\n') |
| 496 | 496 |
| 497 fileMapperNativeCpp.write(' return k' + name + '_SkPdfObjectType;\n')
| 497 fileMapperNativeCpp.write(' return k' + name + '_SkPdfNativeObjectType;\n
') |
| 498 fileMapperNativeCpp.write('}\n') | 498 fileMapperNativeCpp.write('}\n') |
| 499 fileMapperNativeCpp.write('\n') | 499 fileMapperNativeCpp.write('\n') |
| 500 | 500 |
| 501 for name in self.fClassesNamesInOrder: | 501 for name in self.fClassesNamesInOrder: |
| 502 cls = self.fClasses[name] | 502 cls = self.fClasses[name] |
| 503 | 503 |
| 504 fileMapperNative.write(' bool is' + name + '(const SkPdfObject* nativeObj
) const ;\n') | 504 fileMapperNative.write(' bool is' + name + '(const SkPdfNativeObject* nat
iveObj) const ;\n') |
| 505 fileMapperNativeCpp.write('bool SkPdfMapper::is' + name + '(const SkPdfObj
ect* nativeObj) const {\n') | 505 fileMapperNativeCpp.write('bool SkPdfMapper::is' + name + '(const SkPdfNat
iveObject* nativeObj) const {\n') |
| 506 | 506 |
| 507 if cls.fCheck != '': | 507 if cls.fCheck != '': |
| 508 fileMapperNativeCpp.write(' return ' + cls.fCheck + ';\n') | 508 fileMapperNativeCpp.write(' return ' + cls.fCheck + ';\n') |
| 509 else: | 509 else: |
| 510 cntMust = 0 | 510 cntMust = 0 |
| 511 emitedRet = False | 511 emitedRet = False |
| 512 for field in cls.fFields: | 512 for field in cls.fFields: |
| 513 prop = field.fProp | 513 prop = field.fProp |
| 514 if prop.fHasMust: | 514 if prop.fHasMust: |
| 515 if emitedRet == False: | 515 if emitedRet == False: |
| 516 fileMapperNativeCpp.write(' const SkPdfObject* ret = NULL;\n') | 516 fileMapperNativeCpp.write(' const SkPdfNativeObject* ret = NULL;\
n') |
| 517 emitedRet = True | 517 emitedRet = True |
| 518 cntMust = cntMust + 1 | 518 cntMust = cntMust + 1 |
| 519 fileMapperNativeCpp.write(' if (!nativeObj->isDictionary()) return
false;\n') | 519 fileMapperNativeCpp.write(' if (!nativeObj->isDictionary()) return
false;\n') |
| 520 fileMapperNativeCpp.write(' ret = nativeObj->get(\"' + prop.fName +
'\", \"' + prop.fAbr + '\");\n') | 520 fileMapperNativeCpp.write(' ret = nativeObj->get(\"' + prop.fName +
'\", \"' + prop.fAbr + '\");\n') |
| 521 fileMapperNativeCpp.write(' if (ret == NULL || !' + knowTypes[prop.
fTypes.strip()][3] + ') return false;\n') | 521 fileMapperNativeCpp.write(' if (ret == NULL || !' + knowTypes[prop.
fTypes.strip()][3] + ') return false;\n') |
| 522 | 522 |
| 523 eval = ''; | 523 eval = ''; |
| 524 # TODO(edisonn): this could get out of hand, and could have poor per
formance if continued on this path | 524 # TODO(edisonn): this could get out of hand, and could have poor per
formance if continued on this path |
| 525 # but if we would write our parser, then best thing would be to crea
te a map of (key, value) -> to bits | 525 # but if we would write our parser, then best thing would be to crea
te a map of (key, value) -> to bits |
| 526 # 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 | 526 # 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 |
| 527 # and for non unique posinilities (if any) based on context, or the
requester of dictionry we can determine fast the dictionary type | 527 # and for non unique posinilities (if any) based on context, or the
requester of dictionry we can determine fast the dictionary type |
| 528 mustBe = self.determineAllMustBe(cls, field, enumToCls) | 528 mustBe = self.determineAllMustBe(cls, field, enumToCls) |
| 529 if len(mustBe) > 0: | 529 if len(mustBe) > 0: |
| 530 for cnd in mustBe: | 530 for cnd in mustBe: |
| 531 if eval == '': | 531 if eval == '': |
| 532 eval = '(' + knowTypes[prop.fTypes.strip()][1] + ' != ' + cnd
.toCpp() + ')' | 532 eval = '(' + knowTypes[prop.fTypes.strip()][1] + ' != ' + cnd
.toCpp() + ')' |
| 533 else: | 533 else: |
| 534 eval = eval + ' && ' + '(' + knowTypes[prop.fTypes.strip()][1]
+ ' != ' + cnd.toCpp() + ')' | 534 eval = eval + ' && ' + '(' + knowTypes[prop.fTypes.strip()][1]
+ ' != ' + cnd.toCpp() + ')' |
| 535 fileMapperNativeCpp.write(' if (' + eval + ') return false;\n') | 535 fileMapperNativeCpp.write(' if (' + eval + ') return false;\n') |
| 536 fileMapperNativeCpp.write('\n') | 536 fileMapperNativeCpp.write('\n') |
| 537 | 537 |
| 538 fileMapperNativeCpp.write(' return true;\n') | 538 fileMapperNativeCpp.write(' return true;\n') |
| 539 | 539 |
| 540 fileMapperNativeCpp.write('}\n') | 540 fileMapperNativeCpp.write('}\n') |
| 541 fileMapperNativeCpp.write('\n') | 541 fileMapperNativeCpp.write('\n') |
| 542 | 542 |
| 543 # TODO(edisonn): dict should be a SkPdfDictionary ? | 543 # TODO(edisonn): dict should be a SkPdfDictionary ? |
| 544 fileMapperNative.write(' bool SkPdf' + name + 'FromDictionary(const SkPdf
Object* dict, const char* key, SkPdf' + name + '** data) const ;\n') | 544 fileMapperNative.write(' bool SkPdf' + name + 'FromDictionary(const SkPdf
NativeObject* dict, const char* key, SkPdf' + name + '** data) const ;\n') |
| 545 fileMapperNativeCpp.write('bool SkPdfMapper::SkPdf' + name + 'FromDictiona
ry(const SkPdfObject* dict, const char* key, SkPdf' + name + '** data) const {\n
') | 545 fileMapperNativeCpp.write('bool SkPdfMapper::SkPdf' + name + 'FromDictiona
ry(const SkPdfNativeObject* dict, const char* key, SkPdf' + name + '** data) con
st {\n') |
| 546 fileMapperNativeCpp.write(' const SkPdfObject* value = dict->get(key);\n'
) | 546 fileMapperNativeCpp.write(' const SkPdfNativeObject* value = dict->get(ke
y);\n') |
| 547 fileMapperNativeCpp.write(' if (value == NULL) { return false; }\n') | 547 fileMapperNativeCpp.write(' if (value == NULL) { return false; }\n') |
| 548 fileMapperNativeCpp.write(' if (data == NULL) { return true; }\n') | 548 fileMapperNativeCpp.write(' if (data == NULL) { return true; }\n') |
| 549 fileMapperNativeCpp.write(' if (kNone_SkPdfObjectType == map' + name + '(
value)) return false;\n') | 549 fileMapperNativeCpp.write(' if (kNone_SkPdfNativeObjectType == map' + nam
e + '(value)) return false;\n') |
| 550 fileMapperNativeCpp.write(' *data = (SkPdf' + name + '*)value;\n') | 550 fileMapperNativeCpp.write(' *data = (SkPdf' + name + '*)value;\n') |
| 551 fileMapperNativeCpp.write(' return true;\n'); | 551 fileMapperNativeCpp.write(' return true;\n'); |
| 552 fileMapperNativeCpp.write('}\n') | 552 fileMapperNativeCpp.write('}\n') |
| 553 fileMapperNativeCpp.write('\n') | 553 fileMapperNativeCpp.write('\n') |
| 554 | 554 |
| 555 fileMapperNative.write(' bool SkPdf' + name + 'FromDictionary(const SkPdf
Object* dict, const char* key, const char* abr, SkPdf' + name + '** data) const
;\n') | 555 fileMapperNative.write(' bool SkPdf' + name + 'FromDictionary(const SkPdf
NativeObject* dict, const char* key, const char* abr, SkPdf' + name + '** data)
const ;\n') |
| 556 fileMapperNativeCpp.write('bool SkPdfMapper::SkPdf' + name + 'FromDictiona
ry(const SkPdfObject* dict, const char* key, const char* abr, SkPdf' + name + '*
* data) const {\n') | 556 fileMapperNativeCpp.write('bool SkPdfMapper::SkPdf' + name + 'FromDictiona
ry(const SkPdfNativeObject* dict, const char* key, const char* abr, SkPdf' + nam
e + '** data) const {\n') |
| 557 fileMapperNativeCpp.write(' if (SkPdf' + name + 'FromDictionary(dict, key
, data)) return true;\n') | 557 fileMapperNativeCpp.write(' if (SkPdf' + name + 'FromDictionary(dict, key
, data)) return true;\n') |
| 558 fileMapperNativeCpp.write(' if (abr == NULL || *abr == \'\\0\') return fa
lse;\n') | 558 fileMapperNativeCpp.write(' if (abr == NULL || *abr == \'\\0\') return fa
lse;\n') |
| 559 fileMapperNativeCpp.write(' return SkPdf' + name + 'FromDictionary(dict,
abr, data);\n') | 559 fileMapperNativeCpp.write(' return SkPdf' + name + 'FromDictionary(dict,
abr, data);\n') |
| 560 fileMapperNativeCpp.write('}\n') | 560 fileMapperNativeCpp.write('}\n') |
| 561 fileMapperNativeCpp.write('\n') | 561 fileMapperNativeCpp.write('\n') |
| 562 | 562 |
| 563 fileMapperNative.write('};\n') | 563 fileMapperNative.write('};\n') |
| 564 fileMapperNative.write('\n') | 564 fileMapperNative.write('\n') |
| 565 | 565 |
| 566 fileMapperNative.write('#endif // __DEFINED__SkPdfMapper\n') | 566 fileMapperNative.write('#endif // __DEFINED__SkPdfMapper\n') |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 | 622 |
| 623 fileHeadersNative.write('#endif // __DEFINED__SkPdfHeaders\n') | 623 fileHeadersNative.write('#endif // __DEFINED__SkPdfHeaders\n') |
| 624 | 624 |
| 625 fileHeadersNative.close() | 625 fileHeadersNative.close() |
| 626 fileHeadersNativeCpp.close() | 626 fileHeadersNativeCpp.close() |
| 627 | 627 |
| 628 if '__main__' == __name__: | 628 if '__main__' == __name__: |
| 629 #print sys.argv | 629 #print sys.argv |
| 630 sys.exit(generateCode()) | 630 sys.exit(generateCode()) |
| 631 | 631 |
| OLD | NEW |