1# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
2# See LICENSE.txt for complete terms.
3
4import sys
5
6from mixbox.binding_utils import *
7from . import cybox_common
8from . import file_object
9
10
11class PDFXRefTableListType(GeneratedsSuper):
12    """The PDFXrefTableListType captures a list of PDF cross-reference
13    tables."""
14
15    subclass = None
16    superclass = None
17    def __init__(self, Cross_Reference_Table=None):
18        if Cross_Reference_Table is None:
19            self.Cross_Reference_Table = []
20        else:
21            self.Cross_Reference_Table = Cross_Reference_Table
22    def factory(*args_, **kwargs_):
23        if PDFXRefTableListType.subclass:
24            return PDFXRefTableListType.subclass(*args_, **kwargs_)
25        else:
26            return PDFXRefTableListType(*args_, **kwargs_)
27    factory = staticmethod(factory)
28    def get_Cross_Reference_Table(self): return self.Cross_Reference_Table
29    def set_Cross_Reference_Table(self, Cross_Reference_Table): self.Cross_Reference_Table = Cross_Reference_Table
30    def add_Cross_Reference_Table(self, value): self.Cross_Reference_Table.append(value)
31    def insert_Cross_Reference_Table(self, index, value): self.Cross_Reference_Table[index] = value
32    def hasContent_(self):
33        if (
34            self.Cross_Reference_Table
35            ):
36            return True
37        else:
38            return False
39    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXRefTableListType', namespacedef_='', pretty_print=True):
40        if pretty_print:
41            eol_ = '\n'
42        else:
43            eol_ = ''
44        showIndent(lwrite, level, pretty_print)
45        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
46        already_processed = set()
47        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXRefTableListType')
48        if self.hasContent_():
49            lwrite('>%s' % (eol_, ))
50            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
51            showIndent(lwrite, level, pretty_print)
52            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
53        else:
54            lwrite('/>%s' % (eol_, ))
55    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXRefTableListType'):
56        pass
57    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXRefTableListType', fromsubclass_=False, pretty_print=True):
58        if pretty_print:
59            eol_ = '\n'
60        else:
61            eol_ = ''
62        for Cross_Reference_Table_ in self.Cross_Reference_Table:
63            Cross_Reference_Table_.export(lwrite, level, 'PDFFileObj:', name_='Cross_Reference_Table', pretty_print=pretty_print)
64    def build(self, node):
65        self.__sourcenode__ = node
66        already_processed = set()
67        self.buildAttributes(node, node.attrib, already_processed)
68        for child in node:
69            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
70            self.buildChildren(child, node, nodeName_)
71    def buildAttributes(self, node, attrs, already_processed):
72        pass
73    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
74        if nodeName_ == 'Cross_Reference_Table':
75            obj_ = PDFXRefTableType.factory()
76            obj_.build(child_)
77            self.Cross_Reference_Table.append(obj_)
78# end class PDFXRefTableListType
79
80class PDFXRefTableType(GeneratedsSuper):
81    """The PDFXRefTableType captures the details of a PDF cross-reference
82    table, which provides a capability for the random access of
83    indirect objects contained in the file."""
84
85    subclass = None
86    superclass = None
87    def __init__(self, Subsections=None, Offset=None, Hashes=None):
88        self.Subsections = Subsections
89        self.Offset = Offset
90        self.Hashes = Hashes
91    def factory(*args_, **kwargs_):
92        if PDFXRefTableType.subclass:
93            return PDFXRefTableType.subclass(*args_, **kwargs_)
94        else:
95            return PDFXRefTableType(*args_, **kwargs_)
96    factory = staticmethod(factory)
97    def get_Subsections(self): return self.Subsections
98    def set_Subsections(self, Subsections): self.Subsections = Subsections
99    def get_Offset(self): return self.Offset
100    def set_Offset(self, Offset): self.Offset = Offset
101    def validate_PositiveIntegerObjectPropertyType(self, value):
102        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
103        pass
104    def get_Hashes(self): return self.Hashes
105    def set_Hashes(self, Hashes): self.Hashes = Hashes
106    def hasContent_(self):
107        if (
108            self.Subsections is not None or
109            self.Offset is not None or
110            self.Hashes is not None
111            ):
112            return True
113        else:
114            return False
115    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXRefTableType', namespacedef_='', pretty_print=True):
116        if pretty_print:
117            eol_ = '\n'
118        else:
119            eol_ = ''
120        showIndent(lwrite, level, pretty_print)
121        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
122        already_processed = set()
123        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXRefTableType')
124        if self.hasContent_():
125            lwrite('>%s' % (eol_, ))
126            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
127            showIndent(lwrite, level, pretty_print)
128            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
129        else:
130            lwrite('/>%s' % (eol_, ))
131    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXRefTableType'):
132        pass
133    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXRefTableType', fromsubclass_=False, pretty_print=True):
134        if pretty_print:
135            eol_ = '\n'
136        else:
137            eol_ = ''
138        if self.Subsections is not None:
139            self.Subsections.export(lwrite, level, 'PDFFileObj:', name_='Subsections', pretty_print=pretty_print)
140        if self.Offset is not None:
141            self.Offset.export(lwrite, level, 'PDFFileObj:', name_='Offset', pretty_print=pretty_print)
142        if self.Hashes is not None:
143            self.Hashes.export(lwrite, level, 'PDFFileObj:', name_='Hashes', pretty_print=pretty_print)
144    def build(self, node):
145        self.__sourcenode__ = node
146        already_processed = set()
147        self.buildAttributes(node, node.attrib, already_processed)
148        for child in node:
149            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
150            self.buildChildren(child, node, nodeName_)
151    def buildAttributes(self, node, attrs, already_processed):
152        pass
153    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
154        if nodeName_ == 'Subsections':
155            obj_ = PDFXrefTableSubsectionListType.factory()
156            obj_.build(child_)
157            self.set_Subsections(obj_)
158        elif nodeName_ == 'Offset':
159            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
160            obj_.build(child_)
161            self.set_Offset(obj_)
162        elif nodeName_ == 'Hashes':
163            obj_ = cybox_common.HashListType.factory()
164            obj_.build(child_)
165            self.set_Hashes(obj_)
166# end class PDFXRefTableType
167
168class PDFXrefTableSubsectionListType(GeneratedsSuper):
169    """The PDFXrefTableSubsectionListType captures a list of cross-
170    reference table subsections."""
171
172    subclass = None
173    superclass = None
174    def __init__(self, Subsection=None):
175        if Subsection is None:
176            self.Subsection = []
177        else:
178            self.Subsection = Subsection
179    def factory(*args_, **kwargs_):
180        if PDFXrefTableSubsectionListType.subclass:
181            return PDFXrefTableSubsectionListType.subclass(*args_, **kwargs_)
182        else:
183            return PDFXrefTableSubsectionListType(*args_, **kwargs_)
184    factory = staticmethod(factory)
185    def get_Subsection(self): return self.Subsection
186    def set_Subsection(self, Subsection): self.Subsection = Subsection
187    def add_Subsection(self, value): self.Subsection.append(value)
188    def insert_Subsection(self, index, value): self.Subsection[index] = value
189    def hasContent_(self):
190        if (
191            self.Subsection
192            ):
193            return True
194        else:
195            return False
196    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionListType', namespacedef_='', pretty_print=True):
197        if pretty_print:
198            eol_ = '\n'
199        else:
200            eol_ = ''
201        showIndent(lwrite, level, pretty_print)
202        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
203        already_processed = set()
204        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXrefTableSubsectionListType')
205        if self.hasContent_():
206            lwrite('>%s' % (eol_, ))
207            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
208            showIndent(lwrite, level, pretty_print)
209            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
210        else:
211            lwrite('/>%s' % (eol_, ))
212    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionListType'):
213        pass
214    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionListType', fromsubclass_=False, pretty_print=True):
215        if pretty_print:
216            eol_ = '\n'
217        else:
218            eol_ = ''
219        for Subsection_ in self.Subsection:
220            Subsection_.export(lwrite, level, 'PDFFileObj:', name_='Subsection', pretty_print=pretty_print)
221    def build(self, node):
222        self.__sourcenode__ = node
223        already_processed = set()
224        self.buildAttributes(node, node.attrib, already_processed)
225        for child in node:
226            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
227            self.buildChildren(child, node, nodeName_)
228    def buildAttributes(self, node, attrs, already_processed):
229        pass
230    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
231        if nodeName_ == 'Subsection':
232            obj_ = PDFXrefTableSubsectionType.factory()
233            obj_.build(child_)
234            self.Subsection.append(obj_)
235# end class PDFXrefTableSubsectionListType
236
237class PDFXrefTableSubsectionType(GeneratedsSuper):
238    """The PDFXrefTableSubsectionType captures details of subsections
239    contained within a PDF cross-reference table."""
240
241    subclass = None
242    superclass = None
243    def __init__(self, First_Object_Number=None, Number_Of_Objects=None, Cross_Reference_Entries=None):
244        self.First_Object_Number = First_Object_Number
245        self.Number_Of_Objects = Number_Of_Objects
246        self.Cross_Reference_Entries = Cross_Reference_Entries
247    def factory(*args_, **kwargs_):
248        if PDFXrefTableSubsectionType.subclass:
249            return PDFXrefTableSubsectionType.subclass(*args_, **kwargs_)
250        else:
251            return PDFXrefTableSubsectionType(*args_, **kwargs_)
252    factory = staticmethod(factory)
253    def get_First_Object_Number(self): return self.First_Object_Number
254    def set_First_Object_Number(self, First_Object_Number): self.First_Object_Number = First_Object_Number
255    def validate_NonNegativeIntegerObjectPropertyType(self, value):
256        # Validate type cybox_common.NonNegativeIntegerObjectPropertyType, a restriction on None.
257        pass
258    def get_Number_Of_Objects(self): return self.Number_Of_Objects
259    def set_Number_Of_Objects(self, Number_Of_Objects): self.Number_Of_Objects = Number_Of_Objects
260    def get_Cross_Reference_Entries(self): return self.Cross_Reference_Entries
261    def set_Cross_Reference_Entries(self, Cross_Reference_Entries): self.Cross_Reference_Entries = Cross_Reference_Entries
262    def hasContent_(self):
263        if (
264            self.First_Object_Number is not None or
265            self.Number_Of_Objects is not None or
266            self.Cross_Reference_Entries is not None
267            ):
268            return True
269        else:
270            return False
271    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionType', namespacedef_='', pretty_print=True):
272        if pretty_print:
273            eol_ = '\n'
274        else:
275            eol_ = ''
276        showIndent(lwrite, level, pretty_print)
277        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
278        already_processed = set()
279        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXrefTableSubsectionType')
280        if self.hasContent_():
281            lwrite('>%s' % (eol_, ))
282            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
283            showIndent(lwrite, level, pretty_print)
284            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
285        else:
286            lwrite('/>%s' % (eol_, ))
287    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionType'):
288        pass
289    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefTableSubsectionType', fromsubclass_=False, pretty_print=True):
290        if pretty_print:
291            eol_ = '\n'
292        else:
293            eol_ = ''
294        if self.First_Object_Number is not None:
295            self.First_Object_Number.export(lwrite, level, 'PDFFileObj:', name_='First_Object_Number', pretty_print=pretty_print)
296        if self.Number_Of_Objects is not None:
297            self.Number_Of_Objects.export(lwrite, level, 'PDFFileObj:', name_='Number_Of_Objects', pretty_print=pretty_print)
298        if self.Cross_Reference_Entries is not None:
299            self.Cross_Reference_Entries.export(lwrite, level, 'PDFFileObj:', name_='Cross_Reference_Entries', pretty_print=pretty_print)
300    def build(self, node):
301        self.__sourcenode__ = node
302        already_processed = set()
303        self.buildAttributes(node, node.attrib, already_processed)
304        for child in node:
305            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
306            self.buildChildren(child, node, nodeName_)
307    def buildAttributes(self, node, attrs, already_processed):
308        pass
309    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
310        if nodeName_ == 'First_Object_Number':
311            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
312            obj_.build(child_)
313            self.set_First_Object_Number(obj_)
314        elif nodeName_ == 'Number_Of_Objects':
315            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
316            obj_.build(child_)
317            self.set_Number_Of_Objects(obj_)
318        elif nodeName_ == 'Cross_Reference_Entries':
319            obj_ = PDFXrefEntryListType.factory()
320            obj_.build(child_)
321            self.set_Cross_Reference_Entries(obj_)
322# end class PDFXrefTableSubsectionType
323
324class PDFTrailerListType(GeneratedsSuper):
325    """The PDFTrailerListType captures a list of PDF trailers."""
326
327    subclass = None
328    superclass = None
329    def __init__(self, Trailer=None):
330        if Trailer is None:
331            self.Trailer = []
332        else:
333            self.Trailer = Trailer
334    def factory(*args_, **kwargs_):
335        if PDFTrailerListType.subclass:
336            return PDFTrailerListType.subclass(*args_, **kwargs_)
337        else:
338            return PDFTrailerListType(*args_, **kwargs_)
339    factory = staticmethod(factory)
340    def get_Trailer(self): return self.Trailer
341    def set_Trailer(self, Trailer): self.Trailer = Trailer
342    def add_Trailer(self, value): self.Trailer.append(value)
343    def insert_Trailer(self, index, value): self.Trailer[index] = value
344    def hasContent_(self):
345        if (
346            self.Trailer
347            ):
348            return True
349        else:
350            return False
351    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFTrailerListType', namespacedef_='', pretty_print=True):
352        if pretty_print:
353            eol_ = '\n'
354        else:
355            eol_ = ''
356        showIndent(lwrite, level, pretty_print)
357        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
358        already_processed = set()
359        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFTrailerListType')
360        if self.hasContent_():
361            lwrite('>%s' % (eol_, ))
362            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
363            showIndent(lwrite, level, pretty_print)
364            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
365        else:
366            lwrite('/>%s' % (eol_, ))
367    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFTrailerListType'):
368        pass
369    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFTrailerListType', fromsubclass_=False, pretty_print=True):
370        if pretty_print:
371            eol_ = '\n'
372        else:
373            eol_ = ''
374        for Trailer_ in self.Trailer:
375            Trailer_.export(lwrite, level, 'PDFFileObj:', name_='Trailer', pretty_print=pretty_print)
376    def build(self, node):
377        self.__sourcenode__ = node
378        already_processed = set()
379        self.buildAttributes(node, node.attrib, already_processed)
380        for child in node:
381            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
382            self.buildChildren(child, node, nodeName_)
383    def buildAttributes(self, node, attrs, already_processed):
384        pass
385    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
386        if nodeName_ == 'Trailer':
387            obj_ = PDFTrailerType.factory()
388            obj_.build(child_)
389            self.Trailer.append(obj_)
390# end class PDFTrailerListType
391
392class PDFTrailerType(GeneratedsSuper):
393    """The PDFTrailerType captures the details of a PDF trailer."""
394
395    subclass = None
396    superclass = None
397    def __init__(self, Size=None, Prev=None, Root=None, Encrypt=None, Info=None, ID=None, Last_Cross_Reference_Offset=None, Offset=None, Hashes=None):
398        self.Size = Size
399        self.Prev = Prev
400        self.Root = Root
401        self.Encrypt = Encrypt
402        self.Info = Info
403        self.ID = ID
404        self.Last_Cross_Reference_Offset = Last_Cross_Reference_Offset
405        self.Offset = Offset
406        self.Hashes = Hashes
407    def factory(*args_, **kwargs_):
408        if PDFTrailerType.subclass:
409            return PDFTrailerType.subclass(*args_, **kwargs_)
410        else:
411            return PDFTrailerType(*args_, **kwargs_)
412    factory = staticmethod(factory)
413    def get_Size(self): return self.Size
414    def set_Size(self, Size): self.Size = Size
415    def validate_PositiveIntegerObjectPropertyType(self, value):
416        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
417        pass
418    def get_Prev(self): return self.Prev
419    def set_Prev(self, Prev): self.Prev = Prev
420    def get_Root(self): return self.Root
421    def set_Root(self, Root): self.Root = Root
422    def get_Encrypt(self): return self.Encrypt
423    def set_Encrypt(self, Encrypt): self.Encrypt = Encrypt
424    def get_Info(self): return self.Info
425    def set_Info(self, Info): self.Info = Info
426    def get_ID(self): return self.ID
427    def set_ID(self, ID): self.ID = ID
428    def get_Last_Cross_Reference_Offset(self): return self.Last_Cross_Reference_Offset
429    def set_Last_Cross_Reference_Offset(self, Last_Cross_Reference_Offset): self.Last_Cross_Reference_Offset = Last_Cross_Reference_Offset
430    def get_Offset(self): return self.Offset
431    def set_Offset(self, Offset): self.Offset = Offset
432    def get_Hashes(self): return self.Hashes
433    def set_Hashes(self, Hashes): self.Hashes = Hashes
434    def hasContent_(self):
435        if (
436            self.Size is not None or
437            self.Prev is not None or
438            self.Root is not None or
439            self.Encrypt is not None or
440            self.Info is not None or
441            self.ID is not None or
442            self.Last_Cross_Reference_Offset is not None or
443            self.Offset is not None or
444            self.Hashes is not None
445            ):
446            return True
447        else:
448            return False
449    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFTrailerType', namespacedef_='', pretty_print=True):
450        if pretty_print:
451            eol_ = '\n'
452        else:
453            eol_ = ''
454        showIndent(lwrite, level, pretty_print)
455        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
456        already_processed = set()
457        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFTrailerType')
458        if self.hasContent_():
459            lwrite('>%s' % (eol_, ))
460            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
461            showIndent(lwrite, level, pretty_print)
462            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
463        else:
464            lwrite('/>%s' % (eol_, ))
465    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFTrailerType'):
466        pass
467    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFTrailerType', fromsubclass_=False, pretty_print=True):
468        if pretty_print:
469            eol_ = '\n'
470        else:
471            eol_ = ''
472        if self.Size is not None:
473            self.Size.export(lwrite, level, 'PDFFileObj:', name_='Size', pretty_print=pretty_print)
474        if self.Prev is not None:
475            self.Prev.export(lwrite, level, 'PDFFileObj:', name_='Prev', pretty_print=pretty_print)
476        if self.Root is not None:
477            self.Root.export(lwrite, level, 'PDFFileObj:', name_='Root', pretty_print=pretty_print)
478        if self.Encrypt is not None:
479            self.Encrypt.export(lwrite, level, 'PDFFileObj:', name_='Encrypt', pretty_print=pretty_print)
480        if self.Info is not None:
481            self.Info.export(lwrite, level, 'PDFFileObj:', name_='Info', pretty_print=pretty_print)
482        if self.ID is not None:
483            self.ID.export(lwrite, level, 'PDFFileObj:', name_='ID', pretty_print=pretty_print)
484        if self.Last_Cross_Reference_Offset is not None:
485            self.Last_Cross_Reference_Offset.export(lwrite, level, 'PDFFileObj:', name_='Last_Cross_Reference_Offset', pretty_print=pretty_print)
486        if self.Offset is not None:
487            self.Offset.export(lwrite, level, 'PDFFileObj:', name_='Offset', pretty_print=pretty_print)
488        if self.Hashes is not None:
489            self.Hashes.export(lwrite, level, 'PDFFileObj:', name_='Hashes', pretty_print=pretty_print)
490    def build(self, node):
491        self.__sourcenode__ = node
492        already_processed = set()
493        self.buildAttributes(node, node.attrib, already_processed)
494        for child in node:
495            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
496            self.buildChildren(child, node, nodeName_)
497    def buildAttributes(self, node, attrs, already_processed):
498        pass
499    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
500        if nodeName_ == 'Size':
501            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
502            obj_.build(child_)
503            self.set_Size(obj_)
504        elif nodeName_ == 'Prev':
505            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
506            obj_.build(child_)
507            self.set_Prev(obj_)
508        elif nodeName_ == 'Root':
509            obj_ = PDFIndirectObjectIDType.factory()
510            obj_.build(child_)
511            self.set_Root(obj_)
512        elif nodeName_ == 'Encrypt':
513            obj_ = PDFDictionaryType.factory()
514            obj_.build(child_)
515            self.set_Encrypt(obj_)
516        elif nodeName_ == 'Info':
517            obj_ = PDFIndirectObjectIDType.factory()
518            obj_.build(child_)
519            self.set_Info(obj_)
520        elif nodeName_ == 'ID':
521            obj_ = PDFFileIDType.factory()
522            obj_.build(child_)
523            self.set_ID(obj_)
524        elif nodeName_ == 'Last_Cross_Reference_Offset':
525            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
526            obj_.build(child_)
527            self.set_Last_Cross_Reference_Offset(obj_)
528        elif nodeName_ == 'Offset':
529            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
530            obj_.build(child_)
531            self.set_Offset(obj_)
532        elif nodeName_ == 'Hashes':
533            obj_ = cybox_common.HashListType.factory()
534            obj_.build(child_)
535            self.set_Hashes(obj_)
536# end class PDFTrailerType
537
538class PDFFileIDType(GeneratedsSuper):
539    """The PDFTrailerIDType captures the details of a PDF ID value stored
540    in a trailer."""
541
542    subclass = None
543    superclass = None
544    def __init__(self, ID_String=None):
545        if ID_String is None:
546            self.ID_String = []
547        else:
548            self.ID_String = ID_String
549    def factory(*args_, **kwargs_):
550        if PDFFileIDType.subclass:
551            return PDFFileIDType.subclass(*args_, **kwargs_)
552        else:
553            return PDFFileIDType(*args_, **kwargs_)
554    factory = staticmethod(factory)
555    def get_ID_String(self): return self.ID_String
556    def set_ID_String(self, ID_String): self.ID_String = ID_String
557    def add_ID_String(self, value): self.ID_String.append(value)
558    def insert_ID_String(self, index, value): self.ID_String[index] = value
559    def validate_StringObjectPropertyType(self, value):
560        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
561        pass
562    def hasContent_(self):
563        if (
564            self.ID_String
565            ):
566            return True
567        else:
568            return False
569    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileIDType', namespacedef_='', pretty_print=True):
570        if pretty_print:
571            eol_ = '\n'
572        else:
573            eol_ = ''
574        showIndent(lwrite, level, pretty_print)
575        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
576        already_processed = set()
577        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFFileIDType')
578        if self.hasContent_():
579            lwrite('>%s' % (eol_, ))
580            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
581            showIndent(lwrite, level, pretty_print)
582            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
583        else:
584            lwrite('/>%s' % (eol_, ))
585    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFFileIDType'):
586        pass
587    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileIDType', fromsubclass_=False, pretty_print=True):
588        if pretty_print:
589            eol_ = '\n'
590        else:
591            eol_ = ''
592        for ID_String_ in self.ID_String:
593            ID_String_.export(lwrite, level, 'PDFFileObj:', name_='ID_String', pretty_print=pretty_print)
594    def build(self, node):
595        self.__sourcenode__ = node
596        already_processed = set()
597        self.buildAttributes(node, node.attrib, already_processed)
598        for child in node:
599            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
600            self.buildChildren(child, node, nodeName_)
601    def buildAttributes(self, node, attrs, already_processed):
602        pass
603    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
604        if nodeName_ == 'ID_String':
605            obj_ = cybox_common.StringObjectPropertyType.factory()
606            obj_.build(child_)
607            self.ID_String.append(obj_)
608# end class PDFFileIDType
609
610class PDFIndirectObjectListType(GeneratedsSuper):
611    """The PDFIndirectObjectListType captures a list of PDF indirect
612    objects."""
613
614    subclass = None
615    superclass = None
616    def __init__(self, Indirect_Object=None):
617        if Indirect_Object is None:
618            self.Indirect_Object = []
619        else:
620            self.Indirect_Object = Indirect_Object
621    def factory(*args_, **kwargs_):
622        if PDFIndirectObjectListType.subclass:
623            return PDFIndirectObjectListType.subclass(*args_, **kwargs_)
624        else:
625            return PDFIndirectObjectListType(*args_, **kwargs_)
626    factory = staticmethod(factory)
627    def get_Indirect_Object(self): return self.Indirect_Object
628    def set_Indirect_Object(self, Indirect_Object): self.Indirect_Object = Indirect_Object
629    def add_Indirect_Object(self, value): self.Indirect_Object.append(value)
630    def insert_Indirect_Object(self, index, value): self.Indirect_Object[index] = value
631    def hasContent_(self):
632        if (
633            self.Indirect_Object
634            ):
635            return True
636        else:
637            return False
638    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectListType', namespacedef_='', pretty_print=True):
639        if pretty_print:
640            eol_ = '\n'
641        else:
642            eol_ = ''
643        showIndent(lwrite, level, pretty_print)
644        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
645        already_processed = set()
646        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFIndirectObjectListType')
647        if self.hasContent_():
648            lwrite('>%s' % (eol_, ))
649            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
650            showIndent(lwrite, level, pretty_print)
651            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
652        else:
653            lwrite('/>%s' % (eol_, ))
654    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFIndirectObjectListType'):
655        pass
656    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectListType', fromsubclass_=False, pretty_print=True):
657        if pretty_print:
658            eol_ = '\n'
659        else:
660            eol_ = ''
661        for Indirect_Object_ in self.Indirect_Object:
662            Indirect_Object_.export(lwrite, level, 'PDFFileObj:', name_='Indirect_Object', pretty_print=pretty_print)
663    def build(self, node):
664        self.__sourcenode__ = node
665        already_processed = set()
666        self.buildAttributes(node, node.attrib, already_processed)
667        for child in node:
668            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
669            self.buildChildren(child, node, nodeName_)
670    def buildAttributes(self, node, attrs, already_processed):
671        pass
672    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
673        if nodeName_ == 'Indirect_Object':
674            obj_ = PDFIndirectObjectType.factory()
675            obj_.build(child_)
676            self.Indirect_Object.append(obj_)
677# end class PDFIndirectObjectListType
678
679class PDFIndirectObjectType(GeneratedsSuper):
680    """The PDFObjectType captures the details of a PDF document indirect
681    object, used in constructing and storing data associated with
682    the PDF document.The type field specifies the basic type of the
683    PDF indirect object."""
684
685    subclass = None
686    superclass = None
687    def __init__(self, type_=None, ID=None, Contents=None, Offset=None, Hashes=None):
688        self.type_ = _cast(None, type_)
689        self.ID = ID
690        self.Contents = Contents
691        self.Offset = Offset
692        self.Hashes = Hashes
693    def factory(*args_, **kwargs_):
694        if PDFIndirectObjectType.subclass:
695            return PDFIndirectObjectType.subclass(*args_, **kwargs_)
696        else:
697            return PDFIndirectObjectType(*args_, **kwargs_)
698    factory = staticmethod(factory)
699    def get_ID(self): return self.ID
700    def set_ID(self, ID): self.ID = ID
701    def get_Contents(self): return self.Contents
702    def set_Contents(self, Contents): self.Contents = Contents
703    def get_Offset(self): return self.Offset
704    def set_Offset(self, Offset): self.Offset = Offset
705    def validate_PositiveIntegerObjectPropertyType(self, value):
706        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
707        pass
708    def get_Hashes(self): return self.Hashes
709    def set_Hashes(self, Hashes): self.Hashes = Hashes
710    def get_type(self): return self.type_
711    def set_type(self, type_): self.type_ = type_
712    def hasContent_(self):
713        if (
714            self.ID is not None or
715            self.Contents is not None or
716            self.Offset is not None or
717            self.Hashes is not None
718            ):
719            return True
720        else:
721            return False
722    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectType', namespacedef_='', pretty_print=True):
723        if pretty_print:
724            eol_ = '\n'
725        else:
726            eol_ = ''
727        showIndent(lwrite, level, pretty_print)
728        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
729        already_processed = set()
730        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFIndirectObjectType')
731        if self.hasContent_():
732            lwrite('>%s' % (eol_, ))
733            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
734            showIndent(lwrite, level, pretty_print)
735            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
736        else:
737            lwrite('/>%s' % (eol_, ))
738    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFIndirectObjectType'):
739        if self.type_ is not None:
740
741            lwrite(' type=%s' % (quote_attrib(self.type_), ))
742    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectType', fromsubclass_=False, pretty_print=True):
743        if pretty_print:
744            eol_ = '\n'
745        else:
746            eol_ = ''
747        if self.ID is not None:
748            self.ID.export(lwrite, level, 'PDFFileObj:', name_='ID', pretty_print=pretty_print)
749        if self.Contents is not None:
750            self.Contents.export(lwrite, level, 'PDFFileObj:', name_='Contents', pretty_print=pretty_print)
751        if self.Offset is not None:
752            self.Offset.export(lwrite, level, 'PDFFileObj:', name_='Offset', pretty_print=pretty_print)
753        if self.Hashes is not None:
754            self.Hashes.export(lwrite, level, 'PDFFileObj:', name_='Hashes', pretty_print=pretty_print)
755    def build(self, node):
756        self.__sourcenode__ = node
757        already_processed = set()
758        self.buildAttributes(node, node.attrib, already_processed)
759        for child in node:
760            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
761            self.buildChildren(child, node, nodeName_)
762    def buildAttributes(self, node, attrs, already_processed):
763        value = find_attr_value_('type', node)
764        if value is not None:
765            self.type_ = value
766    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
767        if nodeName_ == 'ID':
768            obj_ = PDFIndirectObjectIDType.factory()
769            obj_.build(child_)
770            self.set_ID(obj_)
771        elif nodeName_ == 'Contents':
772            obj_ = PDFIndirectObjectContentsType.factory()
773            obj_.build(child_)
774            self.set_Contents(obj_)
775        elif nodeName_ == 'Offset':
776            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
777            obj_.build(child_)
778            self.set_Offset(obj_)
779        elif nodeName_ == 'Hashes':
780            obj_ = cybox_common.HashListType.factory()
781            obj_.build(child_)
782            self.set_Hashes(obj_)
783# end class PDFIndirectObjectType
784
785class PDFIndirectObjectIDType(GeneratedsSuper):
786    """The PDFIndirectObjectIDType captures the details of PDF indirect
787    object IDs."""
788
789    subclass = None
790    superclass = None
791    def __init__(self, Object_Number=None, Generation_Number=None):
792        self.Object_Number = Object_Number
793        self.Generation_Number = Generation_Number
794    def factory(*args_, **kwargs_):
795        if PDFIndirectObjectIDType.subclass:
796            return PDFIndirectObjectIDType.subclass(*args_, **kwargs_)
797        else:
798            return PDFIndirectObjectIDType(*args_, **kwargs_)
799    factory = staticmethod(factory)
800    def get_Object_Number(self): return self.Object_Number
801    def set_Object_Number(self, Object_Number): self.Object_Number = Object_Number
802    def validate_PositiveIntegerObjectPropertyType(self, value):
803        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
804        pass
805    def get_Generation_Number(self): return self.Generation_Number
806    def set_Generation_Number(self, Generation_Number): self.Generation_Number = Generation_Number
807    def validate_NonNegativeIntegerObjectPropertyType(self, value):
808        # Validate type cybox_common.NonNegativeIntegerObjectPropertyType, a restriction on None.
809        pass
810    def hasContent_(self):
811        if (
812            self.Object_Number is not None or
813            self.Generation_Number is not None
814            ):
815            return True
816        else:
817            return False
818    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectIDType', namespacedef_='', pretty_print=True):
819        if pretty_print:
820            eol_ = '\n'
821        else:
822            eol_ = ''
823        showIndent(lwrite, level, pretty_print)
824        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
825        already_processed = set()
826        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFIndirectObjectIDType')
827        if self.hasContent_():
828            lwrite('>%s' % (eol_, ))
829            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
830            showIndent(lwrite, level, pretty_print)
831            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
832        else:
833            lwrite('/>%s' % (eol_, ))
834    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFIndirectObjectIDType'):
835        pass
836    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectIDType', fromsubclass_=False, pretty_print=True):
837        if pretty_print:
838            eol_ = '\n'
839        else:
840            eol_ = ''
841        if self.Object_Number is not None:
842            self.Object_Number.export(lwrite, level, 'PDFFileObj:', name_='Object_Number', pretty_print=pretty_print)
843        if self.Generation_Number is not None:
844            self.Generation_Number.export(lwrite, level, 'PDFFileObj:', name_='Generation_Number', pretty_print=pretty_print)
845    def build(self, node):
846        self.__sourcenode__ = node
847        already_processed = set()
848        self.buildAttributes(node, node.attrib, already_processed)
849        for child in node:
850            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
851            self.buildChildren(child, node, nodeName_)
852    def buildAttributes(self, node, attrs, already_processed):
853        pass
854    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
855        if nodeName_ == 'Object_Number':
856            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
857            obj_.build(child_)
858            self.set_Object_Number(obj_)
859        elif nodeName_ == 'Generation_Number':
860            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
861            obj_.build(child_)
862            self.set_Generation_Number(obj_)
863# end class PDFIndirectObjectIDType
864
865class PDFIndirectObjectContentsType(GeneratedsSuper):
866    """The PDFIndirectObjectContentsType captures the contents of a PDF
867    indirect object, including both stream and non-stream portions."""
868
869    subclass = None
870    superclass = None
871    def __init__(self, Non_Stream_Contents=None, Stream_Contents=None):
872        self.Non_Stream_Contents = Non_Stream_Contents
873        self.Stream_Contents = Stream_Contents
874    def factory(*args_, **kwargs_):
875        if PDFIndirectObjectContentsType.subclass:
876            return PDFIndirectObjectContentsType.subclass(*args_, **kwargs_)
877        else:
878            return PDFIndirectObjectContentsType(*args_, **kwargs_)
879    factory = staticmethod(factory)
880    def get_Non_Stream_Contents(self): return self.Non_Stream_Contents
881    def set_Non_Stream_Contents(self, Non_Stream_Contents): self.Non_Stream_Contents = Non_Stream_Contents
882    def validate_StringObjectPropertyType(self, value):
883        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
884        pass
885    def get_Stream_Contents(self): return self.Stream_Contents
886    def set_Stream_Contents(self, Stream_Contents): self.Stream_Contents = Stream_Contents
887    def hasContent_(self):
888        if (
889            self.Non_Stream_Contents is not None or
890            self.Stream_Contents is not None
891            ):
892            return True
893        else:
894            return False
895    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectContentsType', namespacedef_='', pretty_print=True):
896        if pretty_print:
897            eol_ = '\n'
898        else:
899            eol_ = ''
900        showIndent(lwrite, level, pretty_print)
901        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
902        already_processed = set()
903        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFIndirectObjectContentsType')
904        if self.hasContent_():
905            lwrite('>%s' % (eol_, ))
906            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
907            showIndent(lwrite, level, pretty_print)
908            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
909        else:
910            lwrite('/>%s' % (eol_, ))
911    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFIndirectObjectContentsType'):
912        pass
913    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFIndirectObjectContentsType', fromsubclass_=False, pretty_print=True):
914        if pretty_print:
915            eol_ = '\n'
916        else:
917            eol_ = ''
918        if self.Non_Stream_Contents is not None:
919            if self.Non_Stream_Contents.get_valueOf_() is not None:
920                value = self.Non_Stream_Contents.get_valueOf_()
921                if not value.startswith('<![CDATA['):
922                    value = '<![CDATA[' + value + ']]>'
923                    self.Non_Stream_Contents.set_valueOf_(value)
924            self.Non_Stream_Contents.export(lwrite, level, 'PDFFileObj:', name_='Non_Stream_Contents', pretty_print=pretty_print)
925        if self.Stream_Contents is not None:
926            self.Stream_Contents.export(lwrite, level, 'PDFFileObj:', name_='Stream_Contents', pretty_print=pretty_print)
927    def build(self, node):
928        self.__sourcenode__ = node
929        already_processed = set()
930        self.buildAttributes(node, node.attrib, already_processed)
931        for child in node:
932            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
933            self.buildChildren(child, node, nodeName_)
934    def buildAttributes(self, node, attrs, already_processed):
935        pass
936    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
937        if nodeName_ == 'Non_Stream_Contents':
938            obj_ = cybox_common.StringObjectPropertyType.factory()
939            obj_.build(child_)
940            self.set_Non_Stream_Contents(obj_)
941        elif nodeName_ == 'Stream_Contents':
942            obj_ = PDFStreamType.factory()
943            obj_.build(child_)
944            self.set_Stream_Contents(obj_)
945# end class PDFIndirectObjectContentsType
946
947class PDFStreamType(GeneratedsSuper):
948    """The PDFStreamType element captures details of PDF document stream
949    objects, which represent arbitrary sequences of bytes."""
950
951    subclass = None
952    superclass = None
953    def __init__(self, Raw_Stream=None, Raw_Stream_Hashes=None, Decoded_Stream=None, Decoded_Stream_Hashes=None):
954        self.Raw_Stream = Raw_Stream
955        self.Raw_Stream_Hashes = Raw_Stream_Hashes
956        self.Decoded_Stream = Decoded_Stream
957        self.Decoded_Stream_Hashes = Decoded_Stream_Hashes
958    def factory(*args_, **kwargs_):
959        if PDFStreamType.subclass:
960            return PDFStreamType.subclass(*args_, **kwargs_)
961        else:
962            return PDFStreamType(*args_, **kwargs_)
963    factory = staticmethod(factory)
964    def get_Raw_Stream(self): return self.Raw_Stream
965    def set_Raw_Stream(self, Raw_Stream): self.Raw_Stream = Raw_Stream
966    def validate_StringObjectPropertyType(self, value):
967        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
968        pass
969    def get_Raw_Stream_Hashes(self): return self.Raw_Stream_Hashes
970    def set_Raw_Stream_Hashes(self, Raw_Stream_Hashes): self.Raw_Stream_Hashes = Raw_Stream_Hashes
971    def get_Decoded_Stream(self): return self.Decoded_Stream
972    def set_Decoded_Stream(self, Decoded_Stream): self.Decoded_Stream = Decoded_Stream
973    def validate_HexBinaryObjectPropertyType(self, value):
974        # Validate type cybox_common.HexBinaryObjectPropertyType, a restriction on None.
975        pass
976    def get_Decoded_Stream_Hashes(self): return self.Decoded_Stream_Hashes
977    def set_Decoded_Stream_Hashes(self, Decoded_Stream_Hashes): self.Decoded_Stream_Hashes = Decoded_Stream_Hashes
978    def hasContent_(self):
979        if (
980            self.Raw_Stream is not None or
981            self.Raw_Stream_Hashes is not None or
982            self.Decoded_Stream is not None or
983            self.Decoded_Stream_Hashes is not None
984            ):
985            return True
986        else:
987            return False
988    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFStreamType', namespacedef_='', pretty_print=True):
989        if pretty_print:
990            eol_ = '\n'
991        else:
992            eol_ = ''
993        showIndent(lwrite, level, pretty_print)
994        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
995        already_processed = set()
996        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFStreamType')
997        if self.hasContent_():
998            lwrite('>%s' % (eol_, ))
999            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1000            showIndent(lwrite, level, pretty_print)
1001            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1002        else:
1003            lwrite('/>%s' % (eol_, ))
1004    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFStreamType'):
1005        pass
1006    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFStreamType', fromsubclass_=False, pretty_print=True):
1007        if pretty_print:
1008            eol_ = '\n'
1009        else:
1010            eol_ = ''
1011        if self.Raw_Stream is not None:
1012            self.Raw_Stream.export(lwrite, level, 'PDFFileObj:', name_='Raw_Stream', pretty_print=pretty_print)
1013        if self.Raw_Stream_Hashes is not None:
1014            self.Raw_Stream_Hashes.export(lwrite, level, 'PDFFileObj:', name_='Raw_Stream_Hashes', pretty_print=pretty_print)
1015        if self.Decoded_Stream is not None:
1016            self.Decoded_Stream.export(lwrite, level, 'PDFFileObj:', name_='Decoded_Stream', pretty_print=pretty_print)
1017        if self.Decoded_Stream_Hashes is not None:
1018            self.Decoded_Stream_Hashes.export(lwrite, level, 'PDFFileObj:', name_='Decoded_Stream_Hashes', pretty_print=pretty_print)
1019    def build(self, node):
1020        self.__sourcenode__ = node
1021        already_processed = set()
1022        self.buildAttributes(node, node.attrib, already_processed)
1023        for child in node:
1024            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1025            self.buildChildren(child, node, nodeName_)
1026    def buildAttributes(self, node, attrs, already_processed):
1027        pass
1028    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1029        if nodeName_ == 'Raw_Stream':
1030            obj_ = cybox_common.StringObjectPropertyType.factory()
1031            obj_.build(child_)
1032            self.set_Raw_Stream(obj_)
1033        elif nodeName_ == 'Raw_Stream_Hashes':
1034            obj_ = cybox_common.HashListType.factory()
1035            obj_.build(child_)
1036            self.set_Raw_Stream_Hashes(obj_)
1037        elif nodeName_ == 'Decoded_Stream':
1038            obj_ = cybox_common.HexBinaryObjectPropertyType.factory()
1039            obj_.build(child_)
1040            self.set_Decoded_Stream(obj_)
1041        elif nodeName_ == 'Decoded_Stream_Hashes':
1042            obj_ = cybox_common.HashListType.factory()
1043            obj_.build(child_)
1044            self.set_Decoded_Stream_Hashes(obj_)
1045# end class PDFStreamType
1046
1047class PDFDocumentInformationDictionaryType(GeneratedsSuper):
1048    """The PDFDocumentInformationDictionaryType captures details of the PDF
1049    Document Information Dictionary, used for storing metadata
1050    associated with the PDF document."""
1051
1052    subclass = None
1053    superclass = None
1054    def __init__(self, Title=None, Author=None, Subject=None, Keywords=None, Creator=None, Producer=None, CreationDate=None, ModDate=None, Trapped=None):
1055        self.Title = Title
1056        self.Author = Author
1057        self.Subject = Subject
1058        self.Keywords = Keywords
1059        self.Creator = Creator
1060        self.Producer = Producer
1061        self.CreationDate = CreationDate
1062        self.ModDate = ModDate
1063        self.Trapped = Trapped
1064    def factory(*args_, **kwargs_):
1065        if PDFDocumentInformationDictionaryType.subclass:
1066            return PDFDocumentInformationDictionaryType.subclass(*args_, **kwargs_)
1067        else:
1068            return PDFDocumentInformationDictionaryType(*args_, **kwargs_)
1069    factory = staticmethod(factory)
1070    def get_Title(self): return self.Title
1071    def set_Title(self, Title): self.Title = Title
1072    def validate_StringObjectPropertyType(self, value):
1073        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
1074        pass
1075    def get_Author(self): return self.Author
1076    def set_Author(self, Author): self.Author = Author
1077    def get_Subject(self): return self.Subject
1078    def set_Subject(self, Subject): self.Subject = Subject
1079    def get_Keywords(self): return self.Keywords
1080    def set_Keywords(self, Keywords): self.Keywords = Keywords
1081    def get_Creator(self): return self.Creator
1082    def set_Creator(self, Creator): self.Creator = Creator
1083    def get_Producer(self): return self.Producer
1084    def set_Producer(self, Producer): self.Producer = Producer
1085    def get_CreationDate(self): return self.CreationDate
1086    def set_CreationDate(self, CreationDate): self.CreationDate = CreationDate
1087    def validate_DateTimeObjectPropertyType(self, value):
1088        # Validate type cybox_common.DateTimeObjectPropertyType, a restriction on None.
1089        pass
1090    def get_ModDate(self): return self.ModDate
1091    def set_ModDate(self, ModDate): self.ModDate = ModDate
1092    def get_Trapped(self): return self.Trapped
1093    def set_Trapped(self, Trapped): self.Trapped = Trapped
1094    def hasContent_(self):
1095        if (
1096            self.Title is not None or
1097            self.Author is not None or
1098            self.Subject is not None or
1099            self.Keywords is not None or
1100            self.Creator is not None or
1101            self.Producer is not None or
1102            self.CreationDate is not None or
1103            self.ModDate is not None or
1104            self.Trapped is not None
1105            ):
1106            return True
1107        else:
1108            return False
1109    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFDocumentInformationDictionaryType', namespacedef_='', pretty_print=True):
1110        if pretty_print:
1111            eol_ = '\n'
1112        else:
1113            eol_ = ''
1114        showIndent(lwrite, level, pretty_print)
1115        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1116        already_processed = set()
1117        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFDocumentInformationDictionaryType')
1118        if self.hasContent_():
1119            lwrite('>%s' % (eol_, ))
1120            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1121            showIndent(lwrite, level, pretty_print)
1122            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1123        else:
1124            lwrite('/>%s' % (eol_, ))
1125    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFDocumentInformationDictionaryType'):
1126        pass
1127    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFDocumentInformationDictionaryType', fromsubclass_=False, pretty_print=True):
1128        if pretty_print:
1129            eol_ = '\n'
1130        else:
1131            eol_ = ''
1132        if self.Title is not None:
1133            self.Title.export(lwrite, level, 'PDFFileObj:', name_='Title', pretty_print=pretty_print)
1134        if self.Author is not None:
1135            self.Author.export(lwrite, level, 'PDFFileObj:', name_='Author', pretty_print=pretty_print)
1136        if self.Subject is not None:
1137            self.Subject.export(lwrite, level, 'PDFFileObj:', name_='Subject', pretty_print=pretty_print)
1138        if self.Keywords is not None:
1139            self.Keywords.export(lwrite, level, 'PDFFileObj:', name_='Keywords', pretty_print=pretty_print)
1140        if self.Creator is not None:
1141            self.Creator.export(lwrite, level, 'PDFFileObj:', name_='Creator', pretty_print=pretty_print)
1142        if self.Producer is not None:
1143            self.Producer.export(lwrite, level, 'PDFFileObj:', name_='Producer', pretty_print=pretty_print)
1144        if self.CreationDate is not None:
1145            self.CreationDate.export(lwrite, level, 'PDFFileObj:', name_='CreationDate', pretty_print=pretty_print)
1146        if self.ModDate is not None:
1147            self.ModDate.export(lwrite, level, 'PDFFileObj:', name_='ModDate', pretty_print=pretty_print)
1148        if self.Trapped is not None:
1149            self.Trapped.export(lwrite, level, 'PDFFileObj:', name_='Trapped', pretty_print=pretty_print)
1150    def build(self, node):
1151        self.__sourcenode__ = node
1152        already_processed = set()
1153        self.buildAttributes(node, node.attrib, already_processed)
1154        for child in node:
1155            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1156            self.buildChildren(child, node, nodeName_)
1157    def buildAttributes(self, node, attrs, already_processed):
1158        pass
1159    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1160        if nodeName_ == 'Title':
1161            obj_ = cybox_common.StringObjectPropertyType.factory()
1162            obj_.build(child_)
1163            self.set_Title(obj_)
1164        elif nodeName_ == 'Author':
1165            obj_ = cybox_common.StringObjectPropertyType.factory()
1166            obj_.build(child_)
1167            self.set_Author(obj_)
1168        elif nodeName_ == 'Subject':
1169            obj_ = cybox_common.StringObjectPropertyType.factory()
1170            obj_.build(child_)
1171            self.set_Subject(obj_)
1172        elif nodeName_ == 'Keywords':
1173            obj_ = cybox_common.StringObjectPropertyType.factory()
1174            obj_.build(child_)
1175            self.set_Keywords(obj_)
1176        elif nodeName_ == 'Creator':
1177            obj_ = cybox_common.StringObjectPropertyType.factory()
1178            obj_.build(child_)
1179            self.set_Creator(obj_)
1180        elif nodeName_ == 'Producer':
1181            obj_ = cybox_common.StringObjectPropertyType.factory()
1182            obj_.build(child_)
1183            self.set_Producer(obj_)
1184        elif nodeName_ == 'CreationDate':
1185            obj_ = cybox_common.DateTimeObjectPropertyType.factory()
1186            obj_.build(child_)
1187            self.set_CreationDate(obj_)
1188        elif nodeName_ == 'ModDate':
1189            obj_ = cybox_common.DateTimeObjectPropertyType.factory()
1190            obj_.build(child_)
1191            self.set_ModDate(obj_)
1192        elif nodeName_ == 'Trapped':
1193            obj_ = cybox_common.StringObjectPropertyType.factory()
1194            obj_.build(child_)
1195            self.set_Trapped(obj_)
1196# end class PDFDocumentInformationDictionaryType
1197
1198class PDFXrefEntryListType(GeneratedsSuper):
1199    """The PDFXrefEntryListType captures a list of cross-reference table
1200    subsection entries."""
1201
1202    subclass = None
1203    superclass = None
1204    def __init__(self, Cross_Reference_Entry=None):
1205        if Cross_Reference_Entry is None:
1206            self.Cross_Reference_Entry = []
1207        else:
1208            self.Cross_Reference_Entry = Cross_Reference_Entry
1209    def factory(*args_, **kwargs_):
1210        if PDFXrefEntryListType.subclass:
1211            return PDFXrefEntryListType.subclass(*args_, **kwargs_)
1212        else:
1213            return PDFXrefEntryListType(*args_, **kwargs_)
1214    factory = staticmethod(factory)
1215    def get_Cross_Reference_Entry(self): return self.Cross_Reference_Entry
1216    def set_Cross_Reference_Entry(self, Cross_Reference_Entry): self.Cross_Reference_Entry = Cross_Reference_Entry
1217    def add_Cross_Reference_Entry(self, value): self.Cross_Reference_Entry.append(value)
1218    def insert_Cross_Reference_Entry(self, index, value): self.Cross_Reference_Entry[index] = value
1219    def hasContent_(self):
1220        if (
1221            self.Cross_Reference_Entry
1222            ):
1223            return True
1224        else:
1225            return False
1226    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefEntryListType', namespacedef_='', pretty_print=True):
1227        if pretty_print:
1228            eol_ = '\n'
1229        else:
1230            eol_ = ''
1231        showIndent(lwrite, level, pretty_print)
1232        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1233        already_processed = set()
1234        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXrefEntryListType')
1235        if self.hasContent_():
1236            lwrite('>%s' % (eol_, ))
1237            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1238            showIndent(lwrite, level, pretty_print)
1239            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1240        else:
1241            lwrite('/>%s' % (eol_, ))
1242    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXrefEntryListType'):
1243        pass
1244    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefEntryListType', fromsubclass_=False, pretty_print=True):
1245        if pretty_print:
1246            eol_ = '\n'
1247        else:
1248            eol_ = ''
1249        for Cross_Reference_Entry_ in self.Cross_Reference_Entry:
1250            Cross_Reference_Entry_.export(lwrite, level, 'PDFFileObj:', name_='Cross_Reference_Entry', pretty_print=pretty_print)
1251    def build(self, node):
1252        self.__sourcenode__ = node
1253        already_processed = set()
1254        self.buildAttributes(node, node.attrib, already_processed)
1255        for child in node:
1256            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1257            self.buildChildren(child, node, nodeName_)
1258    def buildAttributes(self, node, attrs, already_processed):
1259        pass
1260    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1261        if nodeName_ == 'Cross_Reference_Entry':
1262            obj_ = PDFXrefEntryType.factory()
1263            obj_.build(child_)
1264            self.Cross_Reference_Entry.append(obj_)
1265# end class PDFXrefEntryListType
1266
1267class PDFXrefEntryType(GeneratedsSuper):
1268    """The PDFXrefEntryType captures details of a cross-reference table
1269    subsection entry.The type field specifies the type of the cross-
1270    reference entry."""
1271
1272    subclass = None
1273    superclass = None
1274    def __init__(self, type_=None, Byte_Offset=None, Object_Number=None, Generation_Number=None):
1275        self.type_ = _cast(None, type_)
1276        self.Byte_Offset = Byte_Offset
1277        self.Object_Number = Object_Number
1278        self.Generation_Number = Generation_Number
1279    def factory(*args_, **kwargs_):
1280        if PDFXrefEntryType.subclass:
1281            return PDFXrefEntryType.subclass(*args_, **kwargs_)
1282        else:
1283            return PDFXrefEntryType(*args_, **kwargs_)
1284    factory = staticmethod(factory)
1285    def get_Byte_Offset(self): return self.Byte_Offset
1286    def set_Byte_Offset(self, Byte_Offset): self.Byte_Offset = Byte_Offset
1287    def validate_IntegerObjectPropertyType(self, value):
1288        # Validate type cybox_common.IntegerObjectPropertyType, a restriction on None.
1289        pass
1290    def get_Object_Number(self): return self.Object_Number
1291    def set_Object_Number(self, Object_Number): self.Object_Number = Object_Number
1292    def validate_NonNegativeIntegerObjectPropertyType(self, value):
1293        # Validate type cybox_common.NonNegativeIntegerObjectPropertyType, a restriction on None.
1294        pass
1295    def get_Generation_Number(self): return self.Generation_Number
1296    def set_Generation_Number(self, Generation_Number): self.Generation_Number = Generation_Number
1297    def get_type(self): return self.type_
1298    def set_type(self, type_): self.type_ = type_
1299    def hasContent_(self):
1300        if (
1301            self.Byte_Offset is not None or
1302            self.Object_Number is not None or
1303            self.Generation_Number is not None
1304            ):
1305            return True
1306        else:
1307            return False
1308    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefEntryType', namespacedef_='', pretty_print=True):
1309        if pretty_print:
1310            eol_ = '\n'
1311        else:
1312            eol_ = ''
1313        showIndent(lwrite, level, pretty_print)
1314        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1315        already_processed = set()
1316        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFXrefEntryType')
1317        if self.hasContent_():
1318            lwrite('>%s' % (eol_, ))
1319            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1320            showIndent(lwrite, level, pretty_print)
1321            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1322        else:
1323            lwrite('/>%s' % (eol_, ))
1324    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFXrefEntryType'):
1325        if self.type_ is not None:
1326
1327            lwrite(' type=%s' % (quote_attrib(self.type_), ))
1328    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFXrefEntryType', fromsubclass_=False, pretty_print=True):
1329        if pretty_print:
1330            eol_ = '\n'
1331        else:
1332            eol_ = ''
1333        if self.Byte_Offset is not None:
1334            self.Byte_Offset.export(lwrite, level, 'PDFFileObj:', name_='Byte_Offset', pretty_print=pretty_print)
1335        if self.Object_Number is not None:
1336            self.Object_Number.export(lwrite, level, 'PDFFileObj:', name_='Object_Number', pretty_print=pretty_print)
1337        if self.Generation_Number is not None:
1338            self.Generation_Number.export(lwrite, level, 'PDFFileObj:', name_='Generation_Number', pretty_print=pretty_print)
1339    def build(self, node):
1340        self.__sourcenode__ = node
1341        already_processed = set()
1342        self.buildAttributes(node, node.attrib, already_processed)
1343        for child in node:
1344            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1345            self.buildChildren(child, node, nodeName_)
1346    def buildAttributes(self, node, attrs, already_processed):
1347        value = find_attr_value_('type', node)
1348        if value is not None:
1349
1350            self.type_ = value
1351    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1352        if nodeName_ == 'Byte_Offset':
1353            obj_ = cybox_common.IntegerObjectPropertyType.factory()
1354            obj_.build(child_)
1355            self.set_Byte_Offset(obj_)
1356        elif nodeName_ == 'Object_Number':
1357            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
1358            obj_.build(child_)
1359            self.set_Object_Number(obj_)
1360        elif nodeName_ == 'Generation_Number':
1361            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
1362            obj_.build(child_)
1363            self.set_Generation_Number(obj_)
1364# end class PDFXrefEntryType
1365
1366class PDFDictionaryType(GeneratedsSuper):
1367    """The PDFDictionaryType captures a PDF dictionary as a set of key
1368    value pairs, or as a reference to an indirect object that
1369    contains."""
1370
1371    subclass = None
1372    superclass = None
1373    def __init__(self, Object_Reference=None, Raw_Contents=None):
1374        self.Object_Reference = Object_Reference
1375        self.Raw_Contents = Raw_Contents
1376    def factory(*args_, **kwargs_):
1377        if PDFDictionaryType.subclass:
1378            return PDFDictionaryType.subclass(*args_, **kwargs_)
1379        else:
1380            return PDFDictionaryType(*args_, **kwargs_)
1381    factory = staticmethod(factory)
1382    def get_Object_Reference(self): return self.Object_Reference
1383    def set_Object_Reference(self, Object_Reference): self.Object_Reference = Object_Reference
1384    def get_Raw_Contents(self): return self.Raw_Contents
1385    def set_Raw_Contents(self, Raw_Contents): self.Raw_Contents = Raw_Contents
1386    def validate_StringObjectPropertyType(self, value):
1387        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
1388        pass
1389    def hasContent_(self):
1390        if (
1391            self.Object_Reference is not None or
1392            self.Raw_Contents is not None
1393            ):
1394            return True
1395        else:
1396            return False
1397    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFDictionaryType', namespacedef_='', pretty_print=True):
1398        if pretty_print:
1399            eol_ = '\n'
1400        else:
1401            eol_ = ''
1402        showIndent(lwrite, level, pretty_print)
1403        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1404        already_processed = set()
1405        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFDictionaryType')
1406        if self.hasContent_():
1407            lwrite('>%s' % (eol_, ))
1408            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1409            showIndent(lwrite, level, pretty_print)
1410            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1411        else:
1412            lwrite('/>%s' % (eol_, ))
1413    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFDictionaryType'):
1414        pass
1415    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFDictionaryType', fromsubclass_=False, pretty_print=True):
1416        if pretty_print:
1417            eol_ = '\n'
1418        else:
1419            eol_ = ''
1420        if self.Object_Reference is not None:
1421            self.Object_Reference.export(lwrite, level, 'PDFFileObj:', name_='Object_Reference', pretty_print=pretty_print)
1422        if self.Raw_Contents is not None:
1423            if self.Raw_Contents.get_valueOf_() is not None:
1424                value = self.Raw_Contents.get_valueOf_()
1425                if not value.startswith('<![CDATA['):
1426                    value = '<![CDATA[' + value + ']]>'
1427                    self.Raw_Contents.set_valueOf_(value)
1428            self.Raw_Contents.export(lwrite, level, 'PDFFileObj:', name_='Raw_Contents', pretty_print=pretty_print)
1429    def build(self, node):
1430        self.__sourcenode__ = node
1431        already_processed = set()
1432        self.buildAttributes(node, node.attrib, already_processed)
1433        for child in node:
1434            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1435            self.buildChildren(child, node, nodeName_)
1436    def buildAttributes(self, node, attrs, already_processed):
1437        pass
1438    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1439        if nodeName_ == 'Object_Reference':
1440            obj_ = PDFIndirectObjectIDType.factory()
1441            obj_.build(child_)
1442            self.set_Object_Reference(obj_)
1443        elif nodeName_ == 'Raw_Contents':
1444            obj_ = cybox_common.StringObjectPropertyType.factory()
1445            obj_.build(child_)
1446            self.set_Raw_Contents(obj_)
1447# end class PDFDictionaryType
1448
1449class PDFFileMetadataType(GeneratedsSuper):
1450    """The PDFFileMetadaType captures some metadata regarding the PDF file
1451    object.The encrypted field specifies whether the PDF file is
1452    encrypted.The optimized field specifies whether the PDF file has
1453    been optimized."""
1454
1455    subclass = None
1456    superclass = None
1457    def __init__(self, encrypted=None, optimized=None, Document_Information_Dictionary=None, Number_Of_Indirect_Objects=None, Number_Of_Trailers=None, Number_Of_Cross_Reference_Tables=None, Keyword_Counts=None):
1458        self.encrypted = _cast(bool, encrypted)
1459        self.optimized = _cast(bool, optimized)
1460        self.Document_Information_Dictionary = Document_Information_Dictionary
1461        self.Number_Of_Indirect_Objects = Number_Of_Indirect_Objects
1462        self.Number_Of_Trailers = Number_Of_Trailers
1463        self.Number_Of_Cross_Reference_Tables = Number_Of_Cross_Reference_Tables
1464        self.Keyword_Counts = Keyword_Counts
1465    def factory(*args_, **kwargs_):
1466        if PDFFileMetadataType.subclass:
1467            return PDFFileMetadataType.subclass(*args_, **kwargs_)
1468        else:
1469            return PDFFileMetadataType(*args_, **kwargs_)
1470    factory = staticmethod(factory)
1471    def get_Document_Information_Dictionary(self): return self.Document_Information_Dictionary
1472    def set_Document_Information_Dictionary(self, Document_Information_Dictionary): self.Document_Information_Dictionary = Document_Information_Dictionary
1473    def get_Number_Of_Indirect_Objects(self): return self.Number_Of_Indirect_Objects
1474    def set_Number_Of_Indirect_Objects(self, Number_Of_Indirect_Objects): self.Number_Of_Indirect_Objects = Number_Of_Indirect_Objects
1475    def validate_PositiveIntegerObjectPropertyType(self, value):
1476        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
1477        pass
1478    def get_Number_Of_Trailers(self): return self.Number_Of_Trailers
1479    def set_Number_Of_Trailers(self, Number_Of_Trailers): self.Number_Of_Trailers = Number_Of_Trailers
1480    def get_Number_Of_Cross_Reference_Tables(self): return self.Number_Of_Cross_Reference_Tables
1481    def set_Number_Of_Cross_Reference_Tables(self, Number_Of_Cross_Reference_Tables): self.Number_Of_Cross_Reference_Tables = Number_Of_Cross_Reference_Tables
1482    def get_Keyword_Counts(self): return self.Keyword_Counts
1483    def set_Keyword_Counts(self, Keyword_Counts): self.Keyword_Counts = Keyword_Counts
1484    def get_encrypted(self): return self.encrypted
1485    def set_encrypted(self, encrypted): self.encrypted = encrypted
1486    def get_optimized(self): return self.optimized
1487    def set_optimized(self, optimized): self.optimized = optimized
1488    def hasContent_(self):
1489        if (
1490            self.Document_Information_Dictionary is not None or
1491            self.Number_Of_Indirect_Objects is not None or
1492            self.Number_Of_Trailers is not None or
1493            self.Number_Of_Cross_Reference_Tables is not None or
1494            self.Keyword_Counts is not None
1495            ):
1496            return True
1497        else:
1498            return False
1499    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileMetadataType', namespacedef_='', pretty_print=True):
1500        if pretty_print:
1501            eol_ = '\n'
1502        else:
1503            eol_ = ''
1504        showIndent(lwrite, level, pretty_print)
1505        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1506        already_processed = set()
1507        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFFileMetadataType')
1508        if self.hasContent_():
1509            lwrite('>%s' % (eol_, ))
1510            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1511            showIndent(lwrite, level, pretty_print)
1512            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1513        else:
1514            lwrite('/>%s' % (eol_, ))
1515    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFFileMetadataType'):
1516        if self.encrypted is not None:
1517
1518            lwrite(' encrypted="%s"' % self.gds_format_boolean(self.encrypted, input_name='encrypted'))
1519        if self.optimized is not None:
1520
1521            lwrite(' optimized="%s"' % self.gds_format_boolean(self.optimized, input_name='optimized'))
1522    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileMetadataType', fromsubclass_=False, pretty_print=True):
1523        if pretty_print:
1524            eol_ = '\n'
1525        else:
1526            eol_ = ''
1527        if self.Document_Information_Dictionary is not None:
1528            self.Document_Information_Dictionary.export(lwrite, level, 'PDFFileObj:', name_='Document_Information_Dictionary', pretty_print=pretty_print)
1529        if self.Number_Of_Indirect_Objects is not None:
1530            self.Number_Of_Indirect_Objects.export(lwrite, level, 'PDFFileObj:', name_='Number_Of_Indirect_Objects', pretty_print=pretty_print)
1531        if self.Number_Of_Trailers is not None:
1532            self.Number_Of_Trailers.export(lwrite, level, 'PDFFileObj:', name_='Number_Of_Trailers', pretty_print=pretty_print)
1533        if self.Number_Of_Cross_Reference_Tables is not None:
1534            self.Number_Of_Cross_Reference_Tables.export(lwrite, level, 'PDFFileObj:', name_='Number_Of_Cross_Reference_Tables', pretty_print=pretty_print)
1535        if self.Keyword_Counts is not None:
1536            self.Keyword_Counts.export(lwrite, level, 'PDFFileObj:', name_='Keyword_Counts', pretty_print=pretty_print)
1537    def build(self, node):
1538        self.__sourcenode__ = node
1539        already_processed = set()
1540        self.buildAttributes(node, node.attrib, already_processed)
1541        for child in node:
1542            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1543            self.buildChildren(child, node, nodeName_)
1544    def buildAttributes(self, node, attrs, already_processed):
1545        value = find_attr_value_('encrypted', node)
1546        if value is not None:
1547
1548            if value in ('true', '1'):
1549                self.encrypted = True
1550            elif value in ('false', '0'):
1551                self.encrypted = False
1552            else:
1553                raise_parse_error(node, 'Bad boolean attribute')
1554        value = find_attr_value_('optimized', node)
1555        if value is not None:
1556
1557            if value in ('true', '1'):
1558                self.optimized = True
1559            elif value in ('false', '0'):
1560                self.optimized = False
1561            else:
1562                raise_parse_error(node, 'Bad boolean attribute')
1563    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1564        if nodeName_ == 'Document_Information_Dictionary':
1565            obj_ = PDFDocumentInformationDictionaryType.factory()
1566            obj_.build(child_)
1567            self.set_Document_Information_Dictionary(obj_)
1568        elif nodeName_ == 'Number_Of_Indirect_Objects':
1569            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
1570            obj_.build(child_)
1571            self.set_Number_Of_Indirect_Objects(obj_)
1572        elif nodeName_ == 'Number_Of_Trailers':
1573            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
1574            obj_.build(child_)
1575            self.set_Number_Of_Trailers(obj_)
1576        elif nodeName_ == 'Number_Of_Cross_Reference_Tables':
1577            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
1578            obj_.build(child_)
1579            self.set_Number_Of_Cross_Reference_Tables(obj_)
1580        elif nodeName_ == 'Keyword_Counts':
1581            obj_ = PDFKeywordCountsType.factory()
1582            obj_.build(child_)
1583            self.set_Keyword_Counts(obj_)
1584# end class PDFFileMetadataType
1585
1586class PDFKeywordCountsType(GeneratedsSuper):
1587    """The PDFKeywordCountsType captures the occurrences of various
1588    keywords in a PDF file."""
1589
1590    subclass = None
1591    superclass = None
1592    def __init__(self, Page_Count=None, Encrypt_Count=None, ObjStm_Count=None, JS_Count=None, JavaScript_Count=None, AA_Count=None, OpenAction_Count=None, ASCIIHexDecode_Count=None, ASCII85Decode_Count=None, LZWDecode_Count=None, FlateDecode_Count=None, RunLengthDecode_Count=None, JBIG2Decode_Count=None, DCTDecode_Count=None, RichMedia_Count=None, CCITTFaxDecode_Count=None, Launch_Count=None, XFA_Count=None):
1593        self.Page_Count = Page_Count
1594        self.Encrypt_Count = Encrypt_Count
1595        self.ObjStm_Count = ObjStm_Count
1596        self.JS_Count = JS_Count
1597        self.JavaScript_Count = JavaScript_Count
1598        self.AA_Count = AA_Count
1599        self.OpenAction_Count = OpenAction_Count
1600        self.ASCIIHexDecode_Count = ASCIIHexDecode_Count
1601        self.ASCII85Decode_Count = ASCII85Decode_Count
1602        self.LZWDecode_Count = LZWDecode_Count
1603        self.FlateDecode_Count = FlateDecode_Count
1604        self.RunLengthDecode_Count = RunLengthDecode_Count
1605        self.JBIG2Decode_Count = JBIG2Decode_Count
1606        self.DCTDecode_Count = DCTDecode_Count
1607        self.RichMedia_Count = RichMedia_Count
1608        self.CCITTFaxDecode_Count = CCITTFaxDecode_Count
1609        self.Launch_Count = Launch_Count
1610        self.XFA_Count = XFA_Count
1611    def factory(*args_, **kwargs_):
1612        if PDFKeywordCountsType.subclass:
1613            return PDFKeywordCountsType.subclass(*args_, **kwargs_)
1614        else:
1615            return PDFKeywordCountsType(*args_, **kwargs_)
1616    factory = staticmethod(factory)
1617    def get_Page_Count(self): return self.Page_Count
1618    def set_Page_Count(self, Page_Count): self.Page_Count = Page_Count
1619    def get_Encrypt_Count(self): return self.Encrypt_Count
1620    def set_Encrypt_Count(self, Encrypt_Count): self.Encrypt_Count = Encrypt_Count
1621    def get_ObjStm_Count(self): return self.ObjStm_Count
1622    def set_ObjStm_Count(self, ObjStm_Count): self.ObjStm_Count = ObjStm_Count
1623    def get_JS_Count(self): return self.JS_Count
1624    def set_JS_Count(self, JS_Count): self.JS_Count = JS_Count
1625    def get_JavaScript_Count(self): return self.JavaScript_Count
1626    def set_JavaScript_Count(self, JavaScript_Count): self.JavaScript_Count = JavaScript_Count
1627    def get_AA_Count(self): return self.AA_Count
1628    def set_AA_Count(self, AA_Count): self.AA_Count = AA_Count
1629    def get_OpenAction_Count(self): return self.OpenAction_Count
1630    def set_OpenAction_Count(self, OpenAction_Count): self.OpenAction_Count = OpenAction_Count
1631    def get_ASCIIHexDecode_Count(self): return self.ASCIIHexDecode_Count
1632    def set_ASCIIHexDecode_Count(self, ASCIIHexDecode_Count): self.ASCIIHexDecode_Count = ASCIIHexDecode_Count
1633    def get_ASCII85Decode_Count(self): return self.ASCII85Decode_Count
1634    def set_ASCII85Decode_Count(self, ASCII85Decode_Count): self.ASCII85Decode_Count = ASCII85Decode_Count
1635    def get_LZWDecode_Count(self): return self.LZWDecode_Count
1636    def set_LZWDecode_Count(self, LZWDecode_Count): self.LZWDecode_Count = LZWDecode_Count
1637    def get_FlateDecode_Count(self): return self.FlateDecode_Count
1638    def set_FlateDecode_Count(self, FlateDecode_Count): self.FlateDecode_Count = FlateDecode_Count
1639    def get_RunLengthDecode_Count(self): return self.RunLengthDecode_Count
1640    def set_RunLengthDecode_Count(self, RunLengthDecode_Count): self.RunLengthDecode_Count = RunLengthDecode_Count
1641    def get_JBIG2Decode_Count(self): return self.JBIG2Decode_Count
1642    def set_JBIG2Decode_Count(self, JBIG2Decode_Count): self.JBIG2Decode_Count = JBIG2Decode_Count
1643    def get_DCTDecode_Count(self): return self.DCTDecode_Count
1644    def set_DCTDecode_Count(self, DCTDecode_Count): self.DCTDecode_Count = DCTDecode_Count
1645    def get_RichMedia_Count(self): return self.RichMedia_Count
1646    def set_RichMedia_Count(self, RichMedia_Count): self.RichMedia_Count = RichMedia_Count
1647    def get_CCITTFaxDecode_Count(self): return self.CCITTFaxDecode_Count
1648    def set_CCITTFaxDecode_Count(self, CCITTFaxDecode_Count): self.CCITTFaxDecode_Count = CCITTFaxDecode_Count
1649    def get_Launch_Count(self): return self.Launch_Count
1650    def set_Launch_Count(self, Launch_Count): self.Launch_Count = Launch_Count
1651    def get_XFA_Count(self): return self.XFA_Count
1652    def set_XFA_Count(self, XFA_Count): self.XFA_Count = XFA_Count
1653    def hasContent_(self):
1654        if (
1655            self.Page_Count is not None or
1656            self.Encrypt_Count is not None or
1657            self.ObjStm_Count is not None or
1658            self.JS_Count is not None or
1659            self.JavaScript_Count is not None or
1660            self.AA_Count is not None or
1661            self.OpenAction_Count is not None or
1662            self.ASCIIHexDecode_Count is not None or
1663            self.ASCII85Decode_Count is not None or
1664            self.LZWDecode_Count is not None or
1665            self.FlateDecode_Count is not None or
1666            self.RunLengthDecode_Count is not None or
1667            self.JBIG2Decode_Count is not None or
1668            self.DCTDecode_Count is not None or
1669            self.RichMedia_Count is not None or
1670            self.CCITTFaxDecode_Count is not None or
1671            self.Launch_Count is not None or
1672            self.XFA_Count is not None
1673            ):
1674            return True
1675        else:
1676            return False
1677    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFKeywordCountsType', namespacedef_='', pretty_print=True):
1678        if pretty_print:
1679            eol_ = '\n'
1680        else:
1681            eol_ = ''
1682        showIndent(lwrite, level, pretty_print)
1683        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1684        already_processed = set()
1685        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFKeywordCountsType')
1686        if self.hasContent_():
1687            lwrite('>%s' % (eol_, ))
1688            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1689            showIndent(lwrite, level, pretty_print)
1690            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1691        else:
1692            lwrite('/>%s' % (eol_, ))
1693    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFKeywordCountsType'):
1694        pass
1695    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFKeywordCountsType', fromsubclass_=False, pretty_print=True):
1696        if pretty_print:
1697            eol_ = '\n'
1698        else:
1699            eol_ = ''
1700        if self.Page_Count is not None:
1701            self.Page_Count.export(lwrite, level, 'PDFFileObj:', name_='Page_Count', pretty_print=pretty_print)
1702        if self.Encrypt_Count is not None:
1703            self.Encrypt_Count.export(lwrite, level, 'PDFFileObj:', name_='Encrypt_Count', pretty_print=pretty_print)
1704        if self.ObjStm_Count is not None:
1705            self.ObjStm_Count.export(lwrite, level, 'PDFFileObj:', name_='ObjStm_Count', pretty_print=pretty_print)
1706        if self.JS_Count is not None:
1707            self.JS_Count.export(lwrite, level, 'PDFFileObj:', name_='JS_Count', pretty_print=pretty_print)
1708        if self.JavaScript_Count is not None:
1709            self.JavaScript_Count.export(lwrite, level, 'PDFFileObj:', name_='JavaScript_Count', pretty_print=pretty_print)
1710        if self.AA_Count is not None:
1711            self.AA_Count.export(lwrite, level, 'PDFFileObj:', name_='AA_Count', pretty_print=pretty_print)
1712        if self.OpenAction_Count is not None:
1713            self.OpenAction_Count.export(lwrite, level, 'PDFFileObj:', name_='OpenAction_Count', pretty_print=pretty_print)
1714        if self.ASCIIHexDecode_Count is not None:
1715            self.ASCIIHexDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='ASCIIHexDecode_Count', pretty_print=pretty_print)
1716        if self.ASCII85Decode_Count is not None:
1717            self.ASCII85Decode_Count.export(lwrite, level, 'PDFFileObj:', name_='ASCII85Decode_Count', pretty_print=pretty_print)
1718        if self.LZWDecode_Count is not None:
1719            self.LZWDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='LZWDecode_Count', pretty_print=pretty_print)
1720        if self.FlateDecode_Count is not None:
1721            self.FlateDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='FlateDecode_Count', pretty_print=pretty_print)
1722        if self.RunLengthDecode_Count is not None:
1723            self.RunLengthDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='RunLengthDecode_Count', pretty_print=pretty_print)
1724        if self.JBIG2Decode_Count is not None:
1725            self.JBIG2Decode_Count.export(lwrite, level, 'PDFFileObj:', name_='JBIG2Decode_Count', pretty_print=pretty_print)
1726        if self.DCTDecode_Count is not None:
1727            self.DCTDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='DCTDecode_Count', pretty_print=pretty_print)
1728        if self.RichMedia_Count is not None:
1729            self.RichMedia_Count.export(lwrite, level, 'PDFFileObj:', name_='RichMedia_Count', pretty_print=pretty_print)
1730        if self.CCITTFaxDecode_Count is not None:
1731            self.CCITTFaxDecode_Count.export(lwrite, level, 'PDFFileObj:', name_='CCITTFaxDecode_Count', pretty_print=pretty_print)
1732        if self.Launch_Count is not None:
1733            self.Launch_Count.export(lwrite, level, 'PDFFileObj:', name_='Launch_Count', pretty_print=pretty_print)
1734        if self.XFA_Count is not None:
1735            self.XFA_Count.export(lwrite, level, 'PDFFileObj:', name_='XFA_Count', pretty_print=pretty_print)
1736    def build(self, node):
1737        self.__sourcenode__ = node
1738        already_processed = set()
1739        self.buildAttributes(node, node.attrib, already_processed)
1740        for child in node:
1741            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1742            self.buildChildren(child, node, nodeName_)
1743    def buildAttributes(self, node, attrs, already_processed):
1744        pass
1745    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1746        if nodeName_ == 'Page_Count':
1747            obj_ = PDFKeywordCountType.factory()
1748            obj_.build(child_)
1749            self.set_Page_Count(obj_)
1750        elif nodeName_ == 'Encrypt_Count':
1751            obj_ = PDFKeywordCountType.factory()
1752            obj_.build(child_)
1753            self.set_Encrypt_Count(obj_)
1754        elif nodeName_ == 'ObjStm_Count':
1755            obj_ = PDFKeywordCountType.factory()
1756            obj_.build(child_)
1757            self.set_ObjStm_Count(obj_)
1758        elif nodeName_ == 'JS_Count':
1759            obj_ = PDFKeywordCountType.factory()
1760            obj_.build(child_)
1761            self.set_JS_Count(obj_)
1762        elif nodeName_ == 'JavaScript_Count':
1763            obj_ = PDFKeywordCountType.factory()
1764            obj_.build(child_)
1765            self.set_JavaScript_Count(obj_)
1766        elif nodeName_ == 'AA_Count':
1767            obj_ = PDFKeywordCountType.factory()
1768            obj_.build(child_)
1769            self.set_AA_Count(obj_)
1770        elif nodeName_ == 'OpenAction_Count':
1771            obj_ = PDFKeywordCountType.factory()
1772            obj_.build(child_)
1773            self.set_OpenAction_Count(obj_)
1774        elif nodeName_ == 'ASCIIHexDecode_Count':
1775            obj_ = PDFKeywordCountType.factory()
1776            obj_.build(child_)
1777            self.set_ASCIIHexDecode_Count(obj_)
1778        elif nodeName_ == 'ASCII85Decode_Count':
1779            obj_ = PDFKeywordCountType.factory()
1780            obj_.build(child_)
1781            self.set_ASCII85Decode_Count(obj_)
1782        elif nodeName_ == 'LZWDecode_Count':
1783            obj_ = PDFKeywordCountType.factory()
1784            obj_.build(child_)
1785            self.set_LZWDecode_Count(obj_)
1786        elif nodeName_ == 'FlateDecode_Count':
1787            obj_ = PDFKeywordCountType.factory()
1788            obj_.build(child_)
1789            self.set_FlateDecode_Count(obj_)
1790        elif nodeName_ == 'RunLengthDecode_Count':
1791            obj_ = PDFKeywordCountType.factory()
1792            obj_.build(child_)
1793            self.set_RunLengthDecode_Count(obj_)
1794        elif nodeName_ == 'JBIG2Decode_Count':
1795            obj_ = PDFKeywordCountType.factory()
1796            obj_.build(child_)
1797            self.set_JBIG2Decode_Count(obj_)
1798        elif nodeName_ == 'DCTDecode_Count':
1799            obj_ = PDFKeywordCountType.factory()
1800            obj_.build(child_)
1801            self.set_DCTDecode_Count(obj_)
1802        elif nodeName_ == 'RichMedia_Count':
1803            obj_ = PDFKeywordCountType.factory()
1804            obj_.build(child_)
1805            self.set_RichMedia_Count(obj_)
1806        elif nodeName_ == 'CCITTFaxDecode_Count':
1807            obj_ = PDFKeywordCountType.factory()
1808            obj_.build(child_)
1809            self.set_CCITTFaxDecode_Count(obj_)
1810        elif nodeName_ == 'Launch_Count':
1811            obj_ = PDFKeywordCountType.factory()
1812            obj_.build(child_)
1813            self.set_Launch_Count(obj_)
1814        elif nodeName_ == 'XFA_Count':
1815            obj_ = PDFKeywordCountType.factory()
1816            obj_.build(child_)
1817            self.set_XFA_Count(obj_)
1818# end class PDFKeywordCountsType
1819
1820class PDFKeywordCountType(GeneratedsSuper):
1821    """The PDFKeywordCountType captures the obfuscated and non-obfuscated
1822    occurrences of a keyword."""
1823
1824    subclass = None
1825    superclass = None
1826    def __init__(self, Non_Obfuscated_Count=None, Obfuscated_Count=None):
1827        self.Non_Obfuscated_Count = Non_Obfuscated_Count
1828        self.Obfuscated_Count = Obfuscated_Count
1829    def factory(*args_, **kwargs_):
1830        if PDFKeywordCountType.subclass:
1831            return PDFKeywordCountType.subclass(*args_, **kwargs_)
1832        else:
1833            return PDFKeywordCountType(*args_, **kwargs_)
1834    factory = staticmethod(factory)
1835    def get_Non_Obfuscated_Count(self): return self.Non_Obfuscated_Count
1836    def set_Non_Obfuscated_Count(self, Non_Obfuscated_Count): self.Non_Obfuscated_Count = Non_Obfuscated_Count
1837    def validate_NonNegativeIntegerObjectPropertyType(self, value):
1838        # Validate type cybox_common.NonNegativeIntegerObjectPropertyType, a restriction on None.
1839        pass
1840    def get_Obfuscated_Count(self): return self.Obfuscated_Count
1841    def set_Obfuscated_Count(self, Obfuscated_Count): self.Obfuscated_Count = Obfuscated_Count
1842    def hasContent_(self):
1843        if (
1844            self.Non_Obfuscated_Count is not None or
1845            self.Obfuscated_Count is not None
1846            ):
1847            return True
1848        else:
1849            return False
1850    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFKeywordCountType', namespacedef_='', pretty_print=True):
1851        if pretty_print:
1852            eol_ = '\n'
1853        else:
1854            eol_ = ''
1855        showIndent(lwrite, level, pretty_print)
1856        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1857        already_processed = set()
1858        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFKeywordCountType')
1859        if self.hasContent_():
1860            lwrite('>%s' % (eol_, ))
1861            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1862            showIndent(lwrite, level, pretty_print)
1863            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1864        else:
1865            lwrite('/>%s' % (eol_, ))
1866    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFKeywordCountType'):
1867        pass
1868    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFKeywordCountType', fromsubclass_=False, pretty_print=True):
1869        if pretty_print:
1870            eol_ = '\n'
1871        else:
1872            eol_ = ''
1873        if self.Non_Obfuscated_Count is not None:
1874            self.Non_Obfuscated_Count.export(lwrite, level, 'PDFFileObj:', name_='Non_Obfuscated_Count', pretty_print=pretty_print)
1875        if self.Obfuscated_Count is not None:
1876            self.Obfuscated_Count.export(lwrite, level, 'PDFFileObj:', name_='Obfuscated_Count', pretty_print=pretty_print)
1877    def build(self, node):
1878        self.__sourcenode__ = node
1879        already_processed = set()
1880        self.buildAttributes(node, node.attrib, already_processed)
1881        for child in node:
1882            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1883            self.buildChildren(child, node, nodeName_)
1884    def buildAttributes(self, node, attrs, already_processed):
1885        pass
1886    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1887        if nodeName_ == 'Non_Obfuscated_Count':
1888            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
1889            obj_.build(child_)
1890            self.set_Non_Obfuscated_Count(obj_)
1891        elif nodeName_ == 'Obfuscated_Count':
1892            obj_ = cybox_common.NonNegativeIntegerObjectPropertyType.factory()
1893            obj_.build(child_)
1894            self.set_Obfuscated_Count(obj_)
1895# end class PDFKeywordCountType
1896
1897class PDFFileObjectType(file_object.FileObjectType):
1898    """The PDFFileObjectType type is intended to characterize the
1899    structural makeup of PDF files."""
1900
1901    subclass = None
1902    superclass = file_object.FileObjectType
1903    def __init__(self, object_reference=None, Custom_Properties=None, xsi_type=None, is_packed=None, File_Name=None, File_Path=None, Device_Path=None, Full_Path=None, File_Extension=None, Size_In_Bytes=None, Magic_Number=None, File_Format=None, Hashes=None, Digital_Signatures=None, Modified_Time=None, Accessed_Time=None, Created_Time=None, File_Attributes_List=None, Permissions=None, User_Owner=None, Packer_List=None, Peak_Entropy=None, Sym_Links=None, Byte_Runs=None, Extracted_Features=None, Metadata=None, Version=None, Indirect_Objects=None, Cross_Reference_Tables=None, Trailers=None):
1904        super(PDFFileObjectType, self).__init__(object_reference, Custom_Properties, is_packed, File_Name, File_Path, Device_Path, Full_Path, File_Extension, Size_In_Bytes, Magic_Number, File_Format, Hashes, Digital_Signatures, Modified_Time, Accessed_Time, Created_Time, File_Attributes_List, Permissions, User_Owner, Packer_List, Peak_Entropy, Sym_Links, Byte_Runs, Extracted_Features, )
1905        self.Metadata = Metadata
1906        self.Version = Version
1907        self.Indirect_Objects = Indirect_Objects
1908        self.Cross_Reference_Tables = Cross_Reference_Tables
1909        self.Trailers = Trailers
1910    def factory(*args_, **kwargs_):
1911        if PDFFileObjectType.subclass:
1912            return PDFFileObjectType.subclass(*args_, **kwargs_)
1913        else:
1914            return PDFFileObjectType(*args_, **kwargs_)
1915    factory = staticmethod(factory)
1916    def get_Metadata(self): return self.Metadata
1917    def set_Metadata(self, Metadata): self.Metadata = Metadata
1918    def get_Version(self): return self.Version
1919    def set_Version(self, Version): self.Version = Version
1920    def validate_DoubleObjectPropertyType(self, value):
1921        # Validate type cybox_common.DoubleObjectPropertyType, a restriction on None.
1922        pass
1923    def get_Indirect_Objects(self): return self.Indirect_Objects
1924    def set_Indirect_Objects(self, Indirect_Objects): self.Indirect_Objects = Indirect_Objects
1925    def get_Cross_Reference_Tables(self): return self.Cross_Reference_Tables
1926    def set_Cross_Reference_Tables(self, Cross_Reference_Tables): self.Cross_Reference_Tables = Cross_Reference_Tables
1927    def get_Trailers(self): return self.Trailers
1928    def set_Trailers(self, Trailers): self.Trailers = Trailers
1929    def hasContent_(self):
1930        if (
1931            self.Metadata is not None or
1932            self.Version is not None or
1933            self.Indirect_Objects is not None or
1934            self.Cross_Reference_Tables is not None or
1935            self.Trailers is not None or
1936            super(PDFFileObjectType, self).hasContent_()
1937            ):
1938            return True
1939        else:
1940            return False
1941    def export(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileObjectType', namespacedef_='', pretty_print=True):
1942        if pretty_print:
1943            eol_ = '\n'
1944        else:
1945            eol_ = ''
1946        showIndent(lwrite, level, pretty_print)
1947        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
1948        already_processed = set()
1949        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFFileObjectType')
1950        if self.hasContent_():
1951            lwrite('>%s' % (eol_, ))
1952            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
1953            showIndent(lwrite, level, pretty_print)
1954            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
1955        else:
1956            lwrite('/>%s' % (eol_, ))
1957    def exportAttributes(self, lwrite, level, already_processed, namespace_='PDFFileObj:', name_='PDFFileObjectType'):
1958        super(PDFFileObjectType, self).exportAttributes(lwrite, level, already_processed, namespace_, name_='PDFFileObjectType')
1959    def exportChildren(self, lwrite, level, namespace_='PDFFileObj:', name_='PDFFileObjectType', fromsubclass_=False, pretty_print=True):
1960        super(PDFFileObjectType, self).exportChildren(lwrite, level, 'PDFFileObj:', name_, True, pretty_print=pretty_print)
1961        if pretty_print:
1962            eol_ = '\n'
1963        else:
1964            eol_ = ''
1965        if self.Metadata is not None:
1966            self.Metadata.export(lwrite, level, 'PDFFileObj:', name_='Metadata', pretty_print=pretty_print)
1967        if self.Version is not None:
1968            self.Version.export(lwrite, level, 'PDFFileObj:', name_='Version', pretty_print=pretty_print)
1969        if self.Indirect_Objects is not None:
1970            self.Indirect_Objects.export(lwrite, level, 'PDFFileObj:', name_='Indirect_Objects', pretty_print=pretty_print)
1971        if self.Cross_Reference_Tables is not None:
1972            self.Cross_Reference_Tables.export(lwrite, level, 'PDFFileObj:', name_='Cross_Reference_Tables', pretty_print=pretty_print)
1973        if self.Trailers is not None:
1974            self.Trailers.export(lwrite, level, 'PDFFileObj:', name_='Trailers', pretty_print=pretty_print)
1975    def build(self, node):
1976        self.__sourcenode__ = node
1977        already_processed = set()
1978        self.buildAttributes(node, node.attrib, already_processed)
1979        for child in node:
1980            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1981            self.buildChildren(child, node, nodeName_)
1982    def buildAttributes(self, node, attrs, already_processed):
1983        super(PDFFileObjectType, self).buildAttributes(node, attrs, already_processed)
1984    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1985        if nodeName_ == 'Metadata':
1986            obj_ = PDFFileMetadataType.factory()
1987            obj_.build(child_)
1988            self.set_Metadata(obj_)
1989        elif nodeName_ == 'Version':
1990            obj_ = cybox_common.DoubleObjectPropertyType.factory()
1991            obj_.build(child_)
1992            self.set_Version(obj_)
1993        elif nodeName_ == 'Indirect_Objects':
1994            obj_ = PDFIndirectObjectListType.factory()
1995            obj_.build(child_)
1996            self.set_Indirect_Objects(obj_)
1997        elif nodeName_ == 'Cross_Reference_Tables':
1998            obj_ = PDFXRefTableListType.factory()
1999            obj_.build(child_)
2000            self.set_Cross_Reference_Tables(obj_)
2001        elif nodeName_ == 'Trailers':
2002            obj_ = PDFTrailerListType.factory()
2003            obj_.build(child_)
2004            self.set_Trailers(obj_)
2005        super(PDFFileObjectType, self).buildChildren(child_, node, nodeName_, True)
2006# end class PDFFileObjectType
2007
2008GDSClassesMapping = {
2009    'Build_Utility': cybox_common.BuildUtilityType,
2010    'Errors': cybox_common.ErrorsType,
2011    'Title': cybox_common.StringObjectPropertyType,
2012    'File_Extension': cybox_common.StringObjectPropertyType,
2013    'Opcodes': cybox_common.StringObjectPropertyType,
2014    'Certificate_Issuer': cybox_common.StringObjectPropertyType,
2015    'Identifier': cybox_common.PlatformIdentifierType,
2016    'Metadata': cybox_common.MetadataType,
2017    'Hash': cybox_common.HashType,
2018    'Number_Of_Trailers': cybox_common.PositiveIntegerObjectPropertyType,
2019    'Trapped': cybox_common.StringObjectPropertyType,
2020    'Size_In_Bytes': cybox_common.UnsignedLongObjectPropertyType,
2021    'Author': cybox_common.StringObjectPropertyType,
2022    'Generation_Number': cybox_common.NonNegativeIntegerObjectPropertyType,
2023    'Environment_Variable': cybox_common.EnvironmentVariableType,
2024    'Information_Source_Type': cybox_common.ControlledVocabularyStringType,
2025    'Dependencies': cybox_common.DependenciesType,
2026    'Internal_Strings': cybox_common.InternalStringsType,
2027    'Fuzzy_Hash_Structure': cybox_common.FuzzyHashStructureType,
2028    'Byte_Runs': cybox_common.ByteRunsType,
2029    'SubDatum': cybox_common.MetadataType,
2030    'Segment_Hash': cybox_common.HashValueType,
2031    'Digital_Signature': cybox_common.DigitalSignatureInfoType,
2032    'Code_Snippets': cybox_common.CodeSnippetsType,
2033    'Value': cybox_common.StringObjectPropertyType,
2034    'Length': cybox_common.IntegerObjectPropertyType,
2035    'Raw_Contents': cybox_common.StringObjectPropertyType,
2036    'Device_Path': cybox_common.StringObjectPropertyType,
2037    'Producer': cybox_common.StringObjectPropertyType,
2038    'Raw_Stream_Hashes': cybox_common.HashListType,
2039    'Internationalization_Settings': cybox_common.InternationalizationSettingsType,
2040    'Tool_Configuration': cybox_common.ToolConfigurationType,
2041    'English_Translation': cybox_common.StringObjectPropertyType,
2042    'Last_Cross_Reference_Offset': cybox_common.PositiveIntegerObjectPropertyType,
2043    'Subject': cybox_common.StringObjectPropertyType,
2044    'Functions': cybox_common.FunctionsType,
2045    'Byte_Offset': cybox_common.IntegerObjectPropertyType,
2046    'Compiler_Informal_Description': cybox_common.CompilerInformalDescriptionType,
2047    'Entry_Point': cybox_common.HexBinaryObjectPropertyType,
2048    'System': cybox_common.ObjectPropertiesType,
2049    'Platform': cybox_common.PlatformSpecificationType,
2050    'Version': cybox_common.StringObjectPropertyType,
2051    'Created_Time': cybox_common.DateTimeObjectPropertyType,
2052    'Type': file_object.PackerClassType,
2053    'Compilers': cybox_common.CompilersType,
2054    'Digital_Signatures': cybox_common.DigitalSignaturesType,
2055    'Tool_Type': cybox_common.ControlledVocabularyStringType,
2056    'String': cybox_common.ExtractedStringType,
2057    'File_Format': cybox_common.StringObjectPropertyType,
2058    'Tool': cybox_common.ToolInformationType,
2059    'Non_Stream_Contents': cybox_common.StringObjectPropertyType,
2060    'Detected_Entrypoint_Signatures': file_object.EntryPointSignatureListType,
2061    'Tool_Hashes': cybox_common.HashListType,
2062    'File_Path': file_object.FilePathType,
2063    'Entry_Point_Signature': file_object.EntryPointSignatureType,
2064    'Error_Instances': cybox_common.ErrorInstancesType,
2065    'Data_Segment': cybox_common.StringObjectPropertyType,
2066    'Sym_Link': cybox_common.StringObjectPropertyType,
2067    'Certificate_Subject': cybox_common.StringObjectPropertyType,
2068    'Error': cybox_common.ErrorType,
2069    'Signature': cybox_common.StringObjectPropertyType,
2070    'Property': cybox_common.PropertyType,
2071    'Strings': cybox_common.ExtractedStringsType,
2072    'User_Owner': cybox_common.StringObjectPropertyType,
2073    'Contributors': cybox_common.PersonnelType,
2074    'Packer': file_object.PackerType,
2075    'Simple_Hash_Value': cybox_common.SimpleHashValueType,
2076    'Number_Of_Indirect_Objects': cybox_common.PositiveIntegerObjectPropertyType,
2077    'User_Account_Info': cybox_common.ObjectPropertiesType,
2078    'File_Attributes_List': file_object.FileAttributeType,
2079    'Configuration_Settings': cybox_common.ConfigurationSettingsType,
2080    'Number_Of_Objects': cybox_common.NonNegativeIntegerObjectPropertyType,
2081    'Compiler_Platform_Specification': cybox_common.PlatformSpecificationType,
2082    'Size': cybox_common.PositiveIntegerObjectPropertyType,
2083    'Byte_String_Value': cybox_common.HexBinaryObjectPropertyType,
2084    'Sym_Links': file_object.SymLinksListType,
2085    'Image_Offset': cybox_common.IntegerObjectPropertyType,
2086    'Number_Of_Cross_Reference_Tables': cybox_common.PositiveIntegerObjectPropertyType,
2087    'Instance': cybox_common.ObjectPropertiesType,
2088    'Obfuscated_Count': cybox_common.NonNegativeIntegerObjectPropertyType,
2089    'Import': cybox_common.StringObjectPropertyType,
2090    'Accessed_Time': cybox_common.StringObjectPropertyType,
2091    'String_Value': cybox_common.StringObjectPropertyType,
2092    'Usage_Context_Assumptions': cybox_common.UsageContextAssumptionsType,
2093    'Tool_Specific_Data': cybox_common.ToolSpecificDataType,
2094    'Execution_Environment': cybox_common.ExecutionEnvironmentType,
2095    'Build_Utility_Platform_Specification': cybox_common.PlatformSpecificationType,
2096    'Search_Distance': cybox_common.IntegerObjectPropertyType,
2097    'Decoded_Stream': cybox_common.HexBinaryObjectPropertyType,
2098    'Segment_Count': cybox_common.IntegerObjectPropertyType,
2099    'Offset': cybox_common.IntegerObjectPropertyType,
2100    'Date': cybox_common.DateRangeType,
2101    'Hashes': cybox_common.HashListType,
2102    'Raw_Stream': cybox_common.StringObjectPropertyType,
2103    'Segments': cybox_common.HashSegmentsType,
2104    'Permissions': file_object.FilePermissionsType,
2105    'Language': cybox_common.StringObjectPropertyType,
2106    'Usage_Context_Assumption': cybox_common.StructuredTextType,
2107    'Block_Hash': cybox_common.FuzzyHashBlockType,
2108    'Dependency': cybox_common.DependencyType,
2109    'Packer_List': file_object.PackerListType,
2110    'Time': cybox_common.TimeType,
2111    'Trigger_Point': cybox_common.HexBinaryObjectPropertyType,
2112    'Byte_Run': cybox_common.ByteRunType,
2113    'File_System_Offset': cybox_common.IntegerObjectPropertyType,
2114    'Creator': cybox_common.StringObjectPropertyType,
2115    'Imports': cybox_common.ImportsType,
2116    'Object_Number': cybox_common.NonNegativeIntegerObjectPropertyType,
2117    'Build_Information': cybox_common.BuildInformationType,
2118    'References': cybox_common.ToolReferencesType,
2119    'Encoding': cybox_common.ControlledVocabularyStringType,
2120    'Keywords': cybox_common.StringObjectPropertyType,
2121    'Non_Obfuscated_Count': cybox_common.NonNegativeIntegerObjectPropertyType,
2122    'Block_Hash_Value': cybox_common.HashValueType,
2123    'File_Name': cybox_common.StringObjectPropertyType,
2124    'Configuration_Setting': cybox_common.ConfigurationSettingType,
2125    'Modified_Time': cybox_common.StringObjectPropertyType,
2126    'Reference_Description': cybox_common.StructuredTextType,
2127    'Libraries': cybox_common.LibrariesType,
2128    'Decoded_Stream_Hashes': cybox_common.HashListType,
2129    'Prev': cybox_common.PositiveIntegerObjectPropertyType,
2130    'Function': cybox_common.StringObjectPropertyType,
2131    'Description': cybox_common.StructuredTextType,
2132    'Code_Snippet': cybox_common.ObjectPropertiesType,
2133    'Build_Configuration': cybox_common.BuildConfigurationType,
2134    'Extracted_Features': cybox_common.ExtractedFeaturesType,
2135    'Magic_Number': cybox_common.HexBinaryObjectPropertyType,
2136    'ModDate': cybox_common.DateTimeObjectPropertyType,
2137    'ID_String': cybox_common.StringObjectPropertyType,
2138    'Address': cybox_common.HexBinaryObjectPropertyType,
2139    'Search_Within': cybox_common.IntegerObjectPropertyType,
2140    'Segment': cybox_common.HashSegmentType,
2141    'Depth': cybox_common.IntegerObjectPropertyType,
2142    'Full_Path': cybox_common.StringObjectPropertyType,
2143    'Compiler': cybox_common.CompilerType,
2144    'Name': cybox_common.StringObjectPropertyType,
2145    'Library': cybox_common.LibraryType,
2146    'First_Object_Number': cybox_common.NonNegativeIntegerObjectPropertyType,
2147    'Signature_Description': cybox_common.StringObjectPropertyType,
2148    'EP_Jump_Codes': file_object.EPJumpCodeType,
2149    'Block_Size': cybox_common.IntegerObjectPropertyType,
2150    'Peak_Entropy': cybox_common.DoubleObjectPropertyType,
2151    'Fuzzy_Hash_Value': cybox_common.FuzzyHashValueType,
2152    'Data_Size': cybox_common.DataSizeType,
2153    'Dependency_Description': cybox_common.StructuredTextType,
2154    'File': file_object.FileObjectType,
2155    'Contributor': cybox_common.ContributorType,
2156    'CreationDate': cybox_common.DateTimeObjectPropertyType,
2157    'Tools': cybox_common.ToolsInformationType,
2158    'Custom_Properties': cybox_common.CustomPropertiesType,
2159}
2160
2161USAGE_TEXT = """
2162Usage: python <Parser>.py [ -s ] <in_xml_file>
2163"""
2164
2165def usage():
2166    print(USAGE_TEXT)
2167    sys.exit(1)
2168
2169def get_root_tag(node):
2170    tag = Tag_pattern_.match(node.tag).groups()[-1]
2171    rootClass = GDSClassesMapping.get(tag)
2172    if rootClass is None:
2173        rootClass = globals().get(tag)
2174    return tag, rootClass
2175
2176def parse(inFileName):
2177    doc = parsexml_(inFileName)
2178    rootNode = doc.getroot()
2179    rootTag, rootClass = get_root_tag(rootNode)
2180    if rootClass is None:
2181        rootTag = 'PDF_File'
2182        rootClass = PDFFileObjectType
2183    rootObj = rootClass.factory()
2184    rootObj.build(rootNode)
2185    # Enable Python to collect the space used by the DOM.
2186    doc = None
2187#    sys.stdout.write('<?xml version="1.0" ?>\n')
2188#    rootObj.export(sys.stdout.write, 0, name_=rootTag,
2189#        namespacedef_='',
2190#        pretty_print=True)
2191    return rootObj
2192
2193def parseEtree(inFileName):
2194    doc = parsexml_(inFileName)
2195    rootNode = doc.getroot()
2196    rootTag, rootClass = get_root_tag(rootNode)
2197    if rootClass is None:
2198        rootTag = 'PDF_File'
2199        rootClass = PDFFileObjectType
2200    rootObj = rootClass.factory()
2201    rootObj.build(rootNode)
2202    # Enable Python to collect the space used by the DOM.
2203    doc = None
2204    rootElement = rootObj.to_etree(None, name_=rootTag)
2205    content = etree_.tostring(rootElement, pretty_print=True,
2206        xml_declaration=True, encoding="utf-8")
2207    sys.stdout.write(content)
2208    sys.stdout.write('\n')
2209    return rootObj, rootElement
2210
2211def parseString(inString):
2212    from mixbox.vendor.six import StringIO
2213    doc = parsexml_(StringIO(inString))
2214    rootNode = doc.getroot()
2215    rootTag, rootClass = get_root_tag(rootNode)
2216    if rootClass is None:
2217        rootTag = 'PDF_File'
2218        rootClass = PDFFileObjectType
2219    rootObj = rootClass.factory()
2220    rootObj.build(rootNode)
2221    # Enable Python to collect the space used by the DOM.
2222    doc = None
2223#    sys.stdout.write('<?xml version="1.0" ?>\n')
2224#    rootObj.export(sys.stdout.write, 0, name_="PDF_File",
2225#        namespacedef_='')
2226    return rootObj
2227
2228def main():
2229    args = sys.argv[1:]
2230    if len(args) == 1:
2231        parse(args[0])
2232    else:
2233        usage()
2234
2235if __name__ == '__main__':
2236    #import pdb; pdb.set_trace()
2237    main()
2238
2239__all__ = [
2240    "PDFFileObjectType",
2241    "PDFXRefTableListType",
2242    "PDFXRefTableType",
2243    "PDFXrefTableSubsectionListType",
2244    "PDFXrefTableSubsectionType",
2245    "PDFTrailerListType",
2246    "PDFTrailerType",
2247    "PDFFileIDType",
2248    "PDFIndirectObjectListType",
2249    "PDFIndirectObjectType",
2250    "PDFIndirectObjectIDType",
2251    "PDFIndirectObjectContentsType",
2252    "PDFStreamType",
2253    "PDFDocumentInformationDictionaryType",
2254    "PDFXrefEntryListType",
2255    "PDFXrefEntryType",
2256    "PDFDictionaryType",
2257    "PDFFileMetadataType",
2258    "PDFKeywordCountsType",
2259    "PDFKeywordCountType"
2260    ]
2261