generate enums for pdf types
Review URL: https://codereview.chromium.org/16706007
git-svn-id: http://skia.googlecode.com/svn/trunk@9521 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/generate_code.py b/experimental/PdfViewer/generate_code.py
index 53316ea..d453cd2 100644
--- a/experimental/PdfViewer/generate_code.py
+++ b/experimental/PdfViewer/generate_code.py
@@ -88,6 +88,11 @@
self.fName = name
self.fBase = base
+ self.fEnumSubclasses = []
+
+ self.fEnum = '!UNDEFINED'
+ self.fEnumEnd = '!UNDEFINED'
+
def required(self):
field = PdfClassField(self, True)
self.fFields.append(field)
@@ -108,14 +113,66 @@
class PdfClassManager:
def __init__(self):
- self.fClasses = []
+ self.fClasses = {}
def addClass(self, name, base=''):
cls = PdfClass(name, base)
- self.fClasses.append(cls)
+ self.fClasses[name] = cls
return cls
+ def longName(self, name):
+ ret = ''
+ while name != '':
+ cls = self.fClasses[name]
+ ret = name + ret
+ name = cls.fBase
+
+ return ret
+
+
+ def writeEnum(self, enum, enumToCls):
+ print(' ' + enum + ',')
+ cls = enumToCls[enum]
+ cls.fEnumSubclasses.sort()
+
+ cnt = 0
+ for sub in cls.fEnumSubclasses:
+ self.writeEnum(cls.fEnumSubclasses[cnt], enumToCls)
+ cnt = cnt + 1
+
+ if cnt != 0:
+ print(' ' + cls.fEnumEnd + ',')
+
def write(self):
+ # generate enum
+ enumsRoot = []
+
+ enumToCls = {}
+
+ for name in self.fClasses:
+ cls = self.fClasses[name]
+ enum = self.longName(name)
+ cls.fEnum = 'k' + enum + '_PdfObjectType'
+ cls.fEnumEnd = 'k' + enum + '__End_PdfObjectType'
+
+ if cls.fBase != '':
+ self.fClasses[cls.fBase].fEnumSubclasses.append(cls.fEnum)
+
+ if cls.fBase == '':
+ enumsRoot.append(cls.fEnum)
+
+ enumToCls[cls.fEnum] = cls
+
+ enumsRoot.sort()
+
+ # write enums
+ print('enum PdfObjectType {')
+ for enum in enumsRoot:
+ self.writeEnum(enum, enumToCls)
+ print('};')
+
+ # generate each class
+ # generate parser
return
def generateCode():