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 |