| 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 |