Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(538)

Side by Side Diff: experimental/PdfViewer/generate_code.py

Issue 23020003: pdfviewer: debug code for drawText (show magenta background for text, to show text even when we fai… (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « experimental/PdfViewer/SkPdfUtils.h ('k') | experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698