| Index: experimental/PdfViewer/generate_code.py
|
| ===================================================================
|
| --- experimental/PdfViewer/generate_code.py (revision 0)
|
| +++ experimental/PdfViewer/generate_code.py (revision 0)
|
| @@ -0,0 +1,158 @@
|
| +import sys
|
| +
|
| +class PdfName:
|
| + def __init__(self, name, abr=''):
|
| + self.fName = name
|
| + self.fAbr = abr
|
| +
|
| +class PdfInteger:
|
| + def __init__(self, value):
|
| + self.fValue = value
|
| +
|
| +class PdfReal:
|
| + def __init__(self, value):
|
| + self.fValue = value
|
| +
|
| +class PdfString:
|
| + def __init__(self, value):
|
| + self.fValue = value
|
| +
|
| +class PdfBoolean:
|
| + def __init__(self, value):
|
| + self.fValue = value
|
| +
|
| +class PdfField:
|
| + def __init__(self, parent, name, abr):
|
| + self.fParent = parent
|
| + self.fName = name
|
| + self.fAbr = abr
|
| +
|
| + self.fDefault = ''
|
| + self.fType = ''
|
| +
|
| + def must(self, value):
|
| + return self.fParent
|
| +
|
| + def default(self, value):
|
| + self.fDefault = value
|
| + return self
|
| +
|
| + def number(self):
|
| + self.fType = 'number'
|
| + return self
|
| +
|
| + def integer(self):
|
| + self.fType = 'integer'
|
| + return self
|
| +
|
| + def real(self):
|
| + self.fType = 'real'
|
| + return self
|
| +
|
| + def name(self):
|
| + self.fType = 'name'
|
| + return self
|
| +
|
| + def string(self):
|
| + self.fType = 'string'
|
| + return self
|
| +
|
| + def multiple(self, options):
|
| + self.fType = 'multiple'
|
| + self.fOptions = options
|
| + return self
|
| +
|
| + def done(self):
|
| + return self.fParent
|
| +
|
| +
|
| +class PdfClassField:
|
| + def __init__(self, parent, required):
|
| + self.fFields = []
|
| + self.fIncludes = []
|
| + self.fCC = []
|
| + self.fParent = parent
|
| + self.fRequired = required
|
| +
|
| + def hasField(self, name, abr=''):
|
| + return PdfField(self, name, abr)
|
| +
|
| + def done(self):
|
| + return self.fParent
|
| +
|
| +class PdfClass:
|
| + def __init__(self, name, base):
|
| + self.fFields = []
|
| + self.fIncludes = []
|
| + self.fCC = []
|
| + self.fName = name
|
| + self.fBase = base
|
| +
|
| + def required(self):
|
| + field = PdfClassField(self, True)
|
| + self.fFields.append(field)
|
| + return field
|
| +
|
| + def optional(self):
|
| + field = PdfClassField(self, False)
|
| + self.fFields.append(field)
|
| + return field
|
| +
|
| + def include(self, path):
|
| + self.fIncludes.append(path)
|
| + return self
|
| +
|
| + def carbonCopy(self, cc):
|
| + self.fCC.append(cc)
|
| + return self
|
| +
|
| +class PdfClassManager:
|
| + def __init__(self):
|
| + self.fClasses = []
|
| +
|
| + def addClass(self, name, base=''):
|
| + cls = PdfClass(name, base)
|
| + self.fClasses.append(cls)
|
| + return cls
|
| +
|
| + def write(self):
|
| + return
|
| +
|
| +def generateCode():
|
| + all = PdfClassManager()
|
| +
|
| + all.addClass('Object')
|
| + all.addClass('Null')
|
| + all.addClass('Boolean')
|
| + all.addClass('Integer')
|
| + all.addClass('Real')
|
| + all.addClass('Name')
|
| + all.addClass('Stream')
|
| + all.addClass('Reference')
|
| + all.addClass('Array')
|
| + all.addClass('Dictionary')
|
| +
|
| + all.addClass('XObject', 'Dictionary').required().hasField('/Type').must('/XObject')
|
| +
|
| + all.addClass('Image', 'XObject').required().hasField('/Type').must('/XObject').done()\
|
| + .required().hasField('/Subtype').must('/Image').done()\
|
| + .required().hasField('/Width', '/W').integer().done().done()\
|
| + .required().hasField('/Height', '/H').integer().done().done()\
|
| + .required().hasField('/ColorSpace').multiple([PdfName('/DeviceRGB', '/RGB'), PdfName('/DeviceGray', '/Gray')])\
|
| + .done()\
|
| + .done()\
|
| + .optional().hasField('/BitsPerComponent', '/BPC').multiple([PdfInteger(1), PdfInteger(2), PdfInteger(4), PdfInteger(8)])\
|
| + .default(PdfInteger(1))\
|
| + .done().done()\
|
| + .carbonCopy('SkBitmap bitmap;')
|
| +
|
| + all.addClass('Form', 'XObject').required().hasField('/Type').must('/XObject').done()\
|
| + .required().hasField('/Subtype').must('/Form').done()
|
| +
|
| +
|
| + all.write()
|
| +
|
| + return 1
|
| +
|
| +if '__main__' == __name__:
|
| + sys.exit(generateCode())
|
|
|