OLD | NEW |
1 #!/usr/local/bin/python | 1 #!/usr/local/bin/python |
2 # coding: utf-8 | 2 # coding: utf-8 |
3 | 3 |
4 import sys | 4 import sys |
5 import re | 5 import re |
6 | 6 |
7 # TODO(edisonn): put processed part of file in a new file | 7 # TODO(edisonn): put processed part of file in a new file |
8 # put unprocessed part, in a new file, so we see what we miss | 8 # put unprocessed part, in a new file, so we see what we miss |
9 # keep blank lines, and generate a version without the blank lines | 9 # keep blank lines, and generate a version without the blank lines |
10 | 10 |
11 #TODO (edisonn): deal manually with | 11 #TODO (edisonn): deal manually with |
12 # TABLE 7.11 Restrictions on the entries in a soft-mask image dictionary | 12 # TABLE 7.11 Restrictions on the entries in a soft-mask image dictionary |
13 #KEY RESTRICTION | 13 #KEY RESTRICTION |
14 | 14 |
15 | 15 |
16 | 16 |
17 lines = 0 | 17 lines = 0 |
18 table = '' | 18 table = '' |
19 tableHeaderFound = False | 19 tableHeaderFound = False |
20 tableLine = 0 | 20 tableLine = 0 |
21 tableRow = 0 | 21 tableRow = 0 |
22 columnWidth = [] | 22 columnWidth = [] |
23 columnValues = ['', '', ''] | 23 columnValues = None |
24 mustFollowTableHeader = False | 24 mustFollowTableHeader = False |
| 25 emitedDitionaryName = '' |
25 | 26 |
26 knownTypes = { | 27 knownTypes = { |
27 '(any)', | 28 '(any)', |
28 unicode('undefined', 'utf8'), | 29 unicode('undefined', 'utf8'), |
29 '(undefined)', | 30 '(undefined)', |
30 '(various)', | 31 '(various)', |
31 'array', | 32 'array', |
32 'or', | 33 'or', |
33 'boolean', | 34 'boolean', |
34 'date', | 35 'date', |
35 'dictionary', | 36 'dictionary', |
36 'function', | 37 'function', |
37 'integer', | 38 'integer', |
38 unicode('file', 'utf8'), | 39 unicode('file', 'utf8'), |
39 'file', | 40 'file', |
40 unicode('specification', 'utf8'), | 41 unicode('specification', 'utf8'), |
41 'specification', | 42 'specification', |
42 'name', | 43 'name', |
43 'tree', | 44 'tree', |
44 'number', | 45 'number', |
45 'rectangle', | 46 'rectangle', |
46 'stream', | 47 'stream', |
47 'string', | 48 'string', |
48 'text', | 49 'text', |
49 ',', | 50 ',', |
50 ' ' | 51 ' ' |
51 } | 52 } |
52 | 53 |
| 54 tableToClassName = { |
| 55 'TABLE 3.4': ['StreamDictionariesCommon', 'Entries common to all stream dictiona
ries'], |
| 56 'TABLE 3.7': ['LzwdecodeAndFlatedecodeFiltersOptionalParameters', 'Optional para
meters for LZWDecode and FlateDecode filters'], |
| 57 'TABLE 3.9': ['CcittfaxdecodeFilterOptionalParameters', 'Optional parameters for
the CCITTFaxDecode filter'], |
| 58 'TABLE 3.10': ['Jbig2DecodeFilterOptionalParameters', 'Optional parameter for th
e JBIG2Decode filter'], |
| 59 'TABLE 3.11': ['DctdecodeFilterOptionalParameters', 'Optional parameter for the
DCTDecode filter'], |
| 60 'TABLE 3.12': ['FileTrailerDictionary', 'Entries in the file trailer dictionary'
], |
| 61 'TABLE 3.13': ['EncryptionDictionariesCommon', 'Entries common to all encryption
dictionaries'], |
| 62 'TABLE 3.14': ['DictionaryEntriesForTheStandardSecurityHandler', 'Additional enc
ryption dictionary entries for the standard security handler'], |
| 63 'TABLE 3.16': ['CatalogDictionary', 'Entries in the catalog dictionary'], |
| 64 'TABLE 3.17': ['PageTreeNodeDictionary', 'Required entries in a page tree node']
, |
| 65 'TABLE 3.18': ['PageObjectDictionary', 'Entries in a page object'], |
| 66 'TABLE 3.19': ['NameDictionary', 'Entries in the name dictionary'], |
| 67 'TABLE 3.21': ['ResourceDictionary', 'Entries in a resource dictionary'], |
| 68 'TABLE 3.23': ['NameTreeNodeDictionary', 'Entries in a name tree node dictionary
'], |
| 69 'TABLE 3.25': ['NumberTreeNodeDictionary', 'Entries in a number tree node dictio
nary'], |
| 70 'TABLE 3.26': ['FunctionDictionariesCommon', 'Entries common to all function dic
tionaries'], |
| 71 'TABLE 3.27': ['SpecificToAType0FunctionDictionary', 'Additional entries specifi
c to a type 0 function dictionary'], |
| 72 'TABLE 3.28': ['SpecificToAType2FunctionDictionary', 'Additional entries specifi
c to a type 2 function dictionary'], |
| 73 'TABLE 3.29': ['SpecificToAType3FunctionDictionary', 'Additional entries specifi
c to a type 3 function dictionary'], |
| 74 'TABLE 3.32': ['FileSpecificationDictionary', 'Entries in a file specification d
ictionary'], |
| 75 'TABLE 3.33': ['EmbeddedFileStreamDictionary', 'Additional entries in an embedde
d file stream dictionary'], |
| 76 'TABLE 3.35': ['MacOsFileInformationDictionary', 'Entries in a Mac OS file infor
mation dictionary'], |
| 77 'TABLE 4.13': ['CalgrayColorSpaceDictionary', 'Entries in a CalGray color space
dictionary'], |
| 78 'TABLE 4.14': ['CalrgbColorSpaceDictionary', 'Entries in a CalRGB color space di
ctionary'], |
| 79 'TABLE 4.15': ['LabColorSpaceDictionary', 'Entries in a Lab color space dictiona
ry'], |
| 80 'TABLE 4.16': ['SpecificToAnIccProfileStreamDictionary', 'Additional entries spe
cific to an ICC profile stream dictionary'], |
| 81 'TABLE 4.20': ['DevicenColorSpaceAttributesDictionary', 'Entry in a DeviceN colo
r space attributes dictionary'], |
| 82 'TABLE 4.22': ['SpecificToAType1PatternDictionary', 'Additional entries specific
to a type 1 pattern dictionary'], |
| 83 'TABLE 4.23': ['Type2PatternDictionary', 'Entries in a type 2 pattern dictionary
'], |
| 84 'TABLE 4.25': ['ShadingDictionariesCommon', 'Entries common to all shading dicti
onaries'], |
| 85 'TABLE 4.26': ['SpecificToAType1ShadingDictionary', 'Additional entries specific
to a type 1 shading dictionary'], |
| 86 'TABLE 4.27': ['SpecificToAType2ShadingDictionary', 'Additional entries specific
to a type 2 shading dictionary'], |
| 87 'TABLE 4.28': ['SpecificToAType3ShadingDictionary', 'Additional entries specific
to a type 3 shading dictionary'], |
| 88 'TABLE 4.29': ['SpecificToAType4ShadingDictionary', 'Additional entries specific
to a type 4 shading dictionary'], |
| 89 'TABLE 4.30': ['SpecificToAType5ShadingDictionary', 'Additional entries specific
to a type 5 shading dictionary'], |
| 90 'TABLE 4.31': ['SpecificToAType6ShadingDictionary', 'Additional entries specific
to a type 6 shading dictionary'], |
| 91 'TABLE 4.35': ['SpecificToAnImageDictionary', 'Additional entries specific to an
image dictionary'], |
| 92 'TABLE 4.37': ['AlternateImageDictionary', 'Entries in an alternate image dictio
nary'], |
| 93 'TABLE 4.41': ['SpecificToAType1FormDictionary', 'Additional entries specific to
a type 1 form dictionary'], |
| 94 'TABLE 4.42': ['GroupAttributesDictionariesCommon', 'Entries common to all group
attributes dictionaries'], |
| 95 'TABLE 4.43': ['ReferenceDictionary', 'Entries in a reference dictionary'], |
| 96 'TABLE 4.44': ['SpecificToAPostscriptXobjectDictionary', 'Additional entries spe
cific to a PostScript XObject dictionary'], |
| 97 'TABLE 5.8': ['Type1FontDictionary', 'Entries in a Type 1 font dictionary'], |
| 98 'TABLE 5.9': ['Type3FontDictionary', 'Entries in a Type 3 font dictionary'], |
| 99 'TABLE 5.11': ['EncodingDictionary', 'Entries in an encoding dictionary'], |
| 100 'TABLE 5.12': ['CidsysteminfoDictionary', 'Entries in a CIDSystemInfo dictionary
'], |
| 101 'TABLE 5.13': ['CidfontDictionary', 'Entries in a CIDFont dictionary'], |
| 102 'TABLE 5.16': ['CmapDictionary', 'Additional entries in a CMap dictionary'], |
| 103 'TABLE 5.17': ['Type0FontDictionary', 'Entries in a Type 0 font dictionary'], |
| 104 'TABLE 5.18': ['FontDescriptorsCommon', 'Entries common to all font descriptors'
], |
| 105 'TABLE 5.20': ['DescriptorEntriesForCidfonts', 'Additional font descriptor entri
es for CIDFonts'], |
| 106 'TABLE 5.23': ['EmbeddedFontStreamDictionary', 'Additional entries in an embedde
d font stream dictionary'], |
| 107 'TABLE 6.3': ['Type1HalftoneDictionary', 'Entries in a type 1 halftone dictionar
y'], |
| 108 'TABLE 6.4': ['SpecificToAType6HalftoneDictionary', 'Additional entries specific
to a type 6 halftone dictionary'], |
| 109 'TABLE 6.5': ['SpecificToAType10HalftoneDictionary', 'Additional entries specifi
c to a type 10 halftone dictionary'], |
| 110 'TABLE 6.6': ['SpecificToAType16HalftoneDictionary', 'Additional entries specifi
c to a type 16 halftone dictionary'], |
| 111 'TABLE 6.7': ['Type5HalftoneDictionary', 'Entries in a type 5 halftone dictionar
y'], |
| 112 'TABLE 7.10': ['Soft-MaskDictionary', 'Entries in a soft-mask dictionary'], |
| 113 'TABLE 7.12': ['Soft-MaskImageDictionary', 'Additional entry in a soft-mask imag
e dictionary'], |
| 114 'TABLE 7.13': ['SpecificToATransparencyGroupAttributesDictionary', 'Additional e
ntries specific to a transparency group attributes dictionary'], |
| 115 'TABLE 8.1': ['ViewerPreferencesDictionary', 'Entries in a viewer preferences di
ctionary'], |
| 116 'TABLE 8.3': ['OutlineDictionary', 'Entries in the outline dictionary'], |
| 117 'TABLE 8.6': ['PageLabelDictionary', 'Entries in a page label dictionary'], |
| 118 'TABLE 8.7': ['ThreadDictionary', 'Entries in a thread dictionary'], |
| 119 'TABLE 8.9': ['TransitionDictionary', 'Entries in a transition dictionary'], |
| 120 'TABLE 8.10': ['AnnotationDictionariesCommon', 'Entries common to all annotation
dictionaries'], |
| 121 'TABLE 8.12': ['BorderStyleDictionary', 'Entries in a border style dictionary'], |
| 122 'TABLE 8.13': ['AppearanceDictionary', 'Entries in an appearance dictionary'], |
| 123 'TABLE 8.15': ['SpecificToATextAnnotation', 'Additional entries specific to a te
xt annotation'], |
| 124 'TABLE 8.16': ['SpecificToALinkAnnotation', 'Additional entries specific to a li
nk annotation'], |
| 125 'TABLE 8.17': ['SpecificToAFreeTextAnnotation', 'Additional entries specific to
a free text annotation'], |
| 126 'TABLE 8.18': ['SpecificToALineAnnotation', 'Additional entries specific to a li
ne annotation'], |
| 127 'TABLE 8.20': ['SpecificToASquareOrCircleAnnotation', 'Additional entries specif
ic to a square or circle annotation'], |
| 128 'TABLE 8.21': ['SpecificToMarkupAnnotations', 'Additional entries specific to ma
rkup annotations'], |
| 129 'TABLE 8.22': ['SpecificToARubberStampAnnotation', 'Additional entries specific
to a rubber stamp annotation'], |
| 130 'TABLE 8.23': ['SpecificToAnInkAnnotation', 'Additional entries specific to an i
nk annotation'], |
| 131 'TABLE 8.24': ['SpecificToAPop-UpAnnotation', 'Additional entries specific to a
pop-up annotation'], |
| 132 'TABLE 8.26': ['SpecificToASoundAnnotation', 'Additional entries specific to a s
ound annotation'], |
| 133 'TABLE 8.27': ['SpecificToAMovieAnnotation', 'Additional entries specific to a m
ovie annotation'], |
| 134 'TABLE 8.28': ['SpecificToAWidgetAnnotation', 'Additional entries specific to a
widget annotation'], |
| 135 'TABLE 8.29': ['ActionDictionariesCommon', 'Entries common to all action diction
aries'], |
| 136 'TABLE 8.30': ['Annotation’SAdditional-ActionsDictionary', 'Entries in an annota
tion’s additional-actions dictionary'], |
| 137 'TABLE 8.35': ['SpecificToAGo-ToAction', 'Additional entries specific to a go-to
action'], |
| 138 'TABLE 8.36': ['SpecificToARemoteGo-ToAction', 'Additional entries specific to a
remote go-to action'], |
| 139 'TABLE 8.37': ['SpecificToALaunchAction', 'Additional entries specific to a laun
ch action'], |
| 140 'TABLE 8.39': ['SpecificToAThreadAction', 'Additional entries specific to a thre
ad action'], |
| 141 'TABLE 8.40': ['SpecificToAUriAction', 'Additional entries specific to a URI act
ion'], |
| 142 'TABLE 8.41': ['UriDictionary', 'Entry in a URI dictionary'], |
| 143 'TABLE 8.42': ['SpecificToASoundAction', 'Additional entries specific to a sound
action'], |
| 144 'TABLE 8.43': ['SpecificToAMovieAction', 'Additional entries specific to a movie
action'], |
| 145 'TABLE 8.44': ['SpecificToAHideAction', 'Additional entries specific to a hide a
ction'], |
| 146 'TABLE 8.46': ['SpecificToNamedActions', 'Additional entries specific to named a
ctions'], |
| 147 'TABLE 8.47': ['InteractiveFormDictionary', 'Entries in the interactive form dic
tionary'], |
| 148 'TABLE 8.49': ['FieldDictionariesCommon', 'Entries common to all field dictionar
ies'], |
| 149 'TABLE 8.51': ['CommonToAllFieldsContainingVariableText', 'Additional entries co
mmon to all fields containing variable text'], |
| 150 'TABLE 8.52': ['AppearanceCharacteristicsDictionary', 'Entries in an appearance
characteristics dictionary'], |
| 151 'TABLE 8.54': ['SpecificToACheckboxField', 'Additional entry specific to a check
box field'], |
| 152 'TABLE 8.55': ['SpecificToARadioButtonField', 'Additional entry specific to a ra
dio button field'], |
| 153 'TABLE 8.57': ['SpecificToATextField', 'Additional entry specific to a text fiel
d'], |
| 154 'TABLE 8.59': ['SpecificToAChoiceField', 'Additional entries specific to a choic
e field'], |
| 155 'TABLE 8.60': ['SignatureDictionary', 'Entries in a signature dictionary'], |
| 156 'TABLE 8.61': ['SpecificToASubmit-FormAction', 'Additional entries specific to a
submit-form action'], |
| 157 'TABLE 8.63': ['SpecificToAReset-FormAction', 'Additional entries specific to a
reset-form action'], |
| 158 'TABLE 8.65': ['SpecificToAnImport-DataAction', 'Additional entries specific to
an import-data action'], |
| 159 'TABLE 8.66': ['SpecificToAJavascriptAction', 'Additional entries specific to a
JavaScript action'], |
| 160 'TABLE 8.67': ['FdfTrailerDictionary', 'Entry in the FDF trailer dictionary'], |
| 161 'TABLE 8.68': ['FdfCatalogDictionary', 'Entries in the FDF catalog dictionary'], |
| 162 'TABLE 8.70': ['EmbeddedFileStreamDictionary', 'Additional entry in an embedded
file stream dictionary for an encrypted FDF file'], |
| 163 'TABLE 8.71': ['JavascriptDictionary', 'Entries in the JavaScript dictionary'], |
| 164 'TABLE 8.72': ['FdfFieldDictionary', 'Entries in an FDF field dictionary'], |
| 165 'TABLE 8.73': ['IconFitDictionary', 'Entries in an icon fit dictionary'], |
| 166 'TABLE 8.74': ['FdfPageDictionary', 'Entries in an FDF page dictionary'], |
| 167 'TABLE 8.75': ['FdfTemplateDictionary', 'Entries in an FDF template dictionary']
, |
| 168 'TABLE 8.76': ['FdfNamedPageReferenceDictionary', 'Entries in an FDF named page
reference dictionary'], |
| 169 'TABLE 8.77': ['ForAnnotationDictionariesInAnFdfFile', 'Additional entry for ann
otation dictionaries in an FDF file'], |
| 170 'TABLE 8.78': ['SpecificToASoundObject', 'Additional entries specific to a sound
object'], |
| 171 'TABLE 8.79': ['MovieDictionary', 'Entries in a movie dictionary'], |
| 172 'TABLE 9.2': ['DocumentInformationDictionary', 'Entries in the document informat
ion dictionary'], |
| 173 'TABLE 9.3': ['MetadataStreamDictionary', 'Additional entries in a metadata stre
am dictionary'], |
| 174 'TABLE 9.4': ['ForComponentsHavingMetadata', 'Additional entry for components ha
ving metadata'], |
| 175 'TABLE 9.6': ['Page-PieceDictionary', 'Entries in a page-piece dictionary'], |
| 176 'TABLE 9.7': ['ApplicationDataDictionary', 'Entries in an application data dicti
onary'], |
| 177 'TABLE 9.9': ['StructureTreeRootDictionary', 'Entries in the structure tree root
'], |
| 178 'TABLE 9.11': ['Marked-ContentReferenceDictionary', 'Entries in a marked-content
reference dictionary'], |
| 179 'TABLE 9.12': ['ObjectReferenceDictionary', 'Entries in an object reference dict
ionary'], |
| 180 'TABLE 9.13': ['EntriesForStructureElementAccess', 'Additional dictionary entrie
s for structure element access'], |
| 181 'TABLE 9.14': ['AttributeObjectsCommon', 'Entry common to all attribute objects'
], |
| 182 'TABLE 9.15': ['MarkInformationDictionary', 'Entry in the mark information dicti
onary'], |
| 183 'TABLE 9.16': ['ArtifactsDictionary', 'Property list entries for artifacts'], |
| 184 'TABLE 9.27': ['StandardStructureTypesCommon', 'Standard layout attributes commo
n to all standard structure types'], |
| 185 'TABLE 9.28': ['LayoutAttributesSpecificToBlock-LevelStructureElements', 'Additi
onal standard layout attributes specific to block-level structure elements'], |
| 186 'TABLE 9.29': ['LayoutAttributesSpecificToInline-LevelStructureElementsDictionar
y', 'Standard layout attributes specific to inline-level structure elements'], |
| 187 'TABLE 9.30': ['ListAttributeDictionary', 'Standard list attribute'], |
| 188 'TABLE 9.31': ['TableAttributesDictionary', 'Standard table attributes'], |
| 189 'TABLE 9.32': ['WebCaptureInformationDictionary', 'Entries in the Web Capture in
formation dictionary'], |
| 190 'TABLE 9.33': ['WebCaptureContentSetsCommon', 'Entries common to all Web Capture
content sets'], |
| 191 'TABLE 9.35': ['SpecificToAWebCaptureImageSet', 'Additional entries specific to
a Web Capture image set'], |
| 192 'TABLE 9.36': ['SourceInformationDictionary', 'Entries in a source information d
ictionary'], |
| 193 'TABLE 9.37': ['UrlAliasDictionary', 'Entries in a URL alias dictionary'], |
| 194 'TABLE 9.38': ['WebCaptureCommandDictionary', 'Entries in a Web Capture command
dictionary'], |
| 195 'TABLE 9.40': ['WebCaptureCommandSettingsDictionary', 'Entries in a Web Capture
command settings dictionary'], |
| 196 'TABLE 9.41': ['BoxColorInformationDictionary', 'Entries in a box color informat
ion dictionary'], |
| 197 'TABLE 9.43': ['SpecificToAPrinter’SMarkAnnotation', 'Additional entries specifi
c to a printer’s mark annotation'], |
| 198 'TABLE 9.44': ['SpecificToAPrinter’SMarkFormDictionary', 'Additional entries spe
cific to a printer’s mark form dictionary'], |
| 199 'TABLE 9.45': ['SeparationDictionary', 'Entries in a separation dictionary'], |
| 200 'TABLE 9.46': ['Pdf/XOutputIntentDictionary', 'Entries in a PDF/X output intent
dictionary'], |
| 201 'TABLE 9.47': ['SpecificToATrapNetworkAnnotation', 'Additional entries specific
to a trap network annotation'], |
| 202 'TABLE 9.48': ['SpecificToATrapNetworkAppearanceStream', 'Additional entries spe
cific to a trap network appearance stream'], |
| 203 'TABLE 9.49': ['OpiVersionDictionary', 'Entry in an OPI version dictionary'], |
| 204 } |
| 205 |
| 206 |
53 def acceptType(val): | 207 def acceptType(val): |
54 global knownTypes | 208 global knownTypes |
55 | 209 |
56 ret = val | 210 ret = val |
57 | 211 |
58 for item in knownTypes: | 212 for item in knownTypes: |
59 ret = ret.replace(item, '') | 213 ret = ret.replace(item, '') |
60 | 214 |
61 return ret == '' | 215 return ret == '' |
62 | 216 |
63 | 217 |
64 def inTable(): | 218 def inTable(): |
65 global tableHeaderFound | 219 global tableHeaderFound |
66 return tableHeaderFound | 220 return tableHeaderFound |
67 | 221 |
68 def tableDescriptionFound(desc): | 222 def tableDescriptionFound(desc): |
69 global table | 223 global table |
70 table = desc.strip() | 224 table = desc.strip() |
71 | 225 |
72 def tableHasHeader(): | 226 def tableHasHeader(): |
73 global table | 227 global table |
74 global tableHeaderFound | 228 global tableHeaderFound |
75 | 229 |
76 tableHeaderFound = True | 230 tableHeaderFound = True |
77 #print table | 231 #print table |
78 | 232 |
79 | 233 |
80 def commitRow(): | 234 def commitRow(): |
81 global columnValues | 235 global columnValues |
| 236 global emitedDitionaryName |
| 237 global table |
| 238 global tableToClassName |
| 239 |
| 240 if columnValues == None: |
| 241 return |
| 242 |
82 #print columnValues | 243 #print columnValues |
83 | 244 |
84 lastClosed = columnValues[2].find(')') | 245 lastClosed = columnValues[2].find(')') |
85 if lastClosed < 0: | 246 if lastClosed < 0: |
86 print 'ERRRRRRRRRRRRRRROR' | 247 print 'ERRRRRRRRRRRRRRROR' |
87 print columnValues | 248 print columnValues |
88 return | 249 return |
89 | 250 |
90 spec = columnValues[2][:lastClosed + 1] | 251 spec = columnValues[2][:lastClosed + 1] |
91 spec = spec.replace('(', ';') | 252 spec = spec.replace('(', ';') |
92 spec = spec.replace(')', ';') | 253 spec = spec.replace(')', ';') |
93 spec = spec.strip(';') | 254 spec = spec.strip(';') |
94 | 255 |
95 specs = spec.split(';') | 256 specs = spec.split(';') |
96 | 257 |
97 # clearly required, but it can be required with conditions. don't handle this
ones here, but manually | 258 # clearly required, but it can be required with conditions. don't handle this
ones here, but manually |
98 required = specs[0] == 'Required' | 259 required = specs[0] == 'Required' |
99 | 260 |
100 inheritable = False | 261 inheritable = False |
101 version = '' | 262 version = '' |
102 for s in specs: | 263 for s in specs: |
103 if s.strip() == 'inheritable' or s.strip() == 'Inheritable': | 264 if s.strip() == 'inheritable' or s.strip() == 'Inheritable': |
104 inheritable = True | 265 inheritable = True |
105 elif re.match('^PDF [0-9]*[\.[0-9]*]*', s.strip()): | 266 elif re.match('^PDF [0-9]*[\.[0-9]*]*', s.strip()): |
106 version = s.strip() | 267 version = s.strip() |
107 elif s != 'Required': | 268 elif s != 'Required': |
108 required = False | 269 required = False |
109 | 270 |
110 print spec | 271 #print spec |
111 print specs | 272 #print specs |
112 print required | 273 #print required |
113 print inheritable | 274 #print inheritable |
114 print version | 275 #print version |
115 print columnValues | 276 #print columnValues |
| 277 |
| 278 columnValues = [columnValues[0].replace(unicode('fi', 'utf8'), 'fi'), columnVal
ues[1].replace(unicode('fi', 'utf8'), 'fi'), columnValues[2].replace(unicode('fi',
'utf8'), 'fi')] |
| 279 |
| 280 if emitedDitionaryName == '': |
| 281 table = table.replace(unicode('fi', 'utf8'), 'fi') |
| 282 |
| 283 |
| 284 #print table |
| 285 emitedDitionaryName = 'foo' |
| 286 e = re.search('[Entries|Entry] in [a-z]* (.* dictionary)', table) |
| 287 a = re.search('Additional [a-z]* in a[n]? (.* dictionary)', table) |
| 288 s = re.search('Additional [a-z]* (.*)', table) |
| 289 c = re.search('[Entries|Entry] common to all (.*)', table) |
| 290 o1 = re.search('Optional parameter[s]? for the (.*)', table) |
| 291 o2 = re.search('Optional parameter[s]? for (.*)', table) |
| 292 t = re.search('.*ntries in [a-z]* (.*)', table) |
| 293 |
| 294 r = re.search('Property list entries for (.*)', table) |
| 295 st = re.search('Standard (.*)', table) |
| 296 |
| 297 if e: |
| 298 emitedDitionaryName = e.group(1).title().replace(' ', '') |
| 299 #print emitedDitionaryName |
| 300 elif a: |
| 301 emitedDitionaryName = a.group(1).title().replace(' ', '') |
| 302 #print emitedDitionaryName |
| 303 elif s: |
| 304 emitedDitionaryName = s.group(1).title().replace(' ', '') |
| 305 #print emitedDitionaryName |
| 306 elif c: |
| 307 emitedDitionaryName = c.group(1).title().replace(' ', '') + 'Common' |
| 308 #print emitedDitionaryName |
| 309 elif o1: |
| 310 emitedDitionaryName = o1.group(1).title().replace(' ', '') + 'OptionalPara
meters' |
| 311 #print emitedDitionaryName |
| 312 elif o2: |
| 313 emitedDitionaryName = o2.group(1).title().replace(' ', '') + 'OptionalPara
meters' |
| 314 #print emitedDitionaryName |
| 315 elif t: |
| 316 emitedDitionaryName = t.group(1).title().replace(' ', '') + 'Dictionary' |
| 317 #print emitedDitionaryName |
| 318 elif r: |
| 319 emitedDitionaryName = r.group(1).title().replace(' ', '') + 'Dictionary' |
| 320 #print emitedDitionaryName |
| 321 elif st: |
| 322 emitedDitionaryName = st.group(1).title().replace(' ', '') + 'Dictionary' |
| 323 #print emitedDitionaryName |
| 324 #else: |
| 325 #print table |
| 326 |
| 327 tableKey = re.search('(TABLE [0-9].[0-9][0-9]?)', table).group(1) |
| 328 #print tableKey |
| 329 #print('\'' + tableKey + '\': [\'' + emitedDitionaryName + '\', \'' + table[
len(tableKey) + 1:] + '\'],') |
| 330 |
| 331 emitedDitionaryName = tableToClassName[tableKey][0] |
| 332 comment = tableToClassName[tableKey][1] |
| 333 |
| 334 print(' all.addClass(\'' + emitedDitionaryName + '\', \'Dictionary\', \'' +
comment + '\')\\') |
| 335 |
| 336 if required: |
| 337 print(' .required(\'NULL\')\\') |
| 338 else: |
| 339 print(' .optional()\\') |
| 340 |
| 341 print(' .field(\'' + columnValues[0] + '\')\\') |
| 342 print(' .name(\'' + columnValues[0] + '\')\\') |
| 343 print(' .type(\'' + columnValues[1] + '\')\\') |
| 344 print(' .comment(\'' + columnValues[2] + '\')\\') |
| 345 print(' .done().done()\\') |
| 346 |
| 347 |
| 348 columnValues = None |
116 | 349 |
117 def newRow(first, second, third): | 350 def newRow(first, second, third): |
118 global columnValues | 351 global columnValues |
119 columnValues = [first.rstrip(), second.rstrip(), third.rstrip()] | 352 columnValues = [first.rstrip(), second.rstrip(), third.rstrip()] |
120 | 353 |
121 def appendRow(second, third): | 354 def appendRow(second, third): |
122 global columnValues | 355 global columnValues |
123 if second.rstrip() != '': | 356 if second.rstrip() != '': |
124 columnValues[1] = columnValues[1] + ' ' + second.rstrip() | 357 columnValues[1] = columnValues[1] + ' ' + second.rstrip() |
125 if third.rstrip() != '': | 358 if third.rstrip() != '': |
(...skipping 21 matching lines...) Expand all Loading... |
147 columnWidth[1] = line.find('(Optional') - columnWidth[0] | 380 columnWidth[1] = line.find('(Optional') - columnWidth[0] |
148 if words[i].startswith('(Required'): | 381 if words[i].startswith('(Required'): |
149 columnWidth[1] = line.find('(Required') - columnWidth[0] | 382 columnWidth[1] = line.find('(Required') - columnWidth[0] |
150 return True | 383 return True |
151 | 384 |
152 return False | 385 return False |
153 | 386 |
154 | 387 |
155 def stopTable(): | 388 def stopTable(): |
156 global tableHeaderFound | 389 global tableHeaderFound |
| 390 global emitedDitionaryName |
157 commitRow() | 391 commitRow() |
158 tableHeaderFound = False | 392 tableHeaderFound = False |
| 393 emitedDitionaryName = '' |
| 394 print(' .done()') |
| 395 print |
159 | 396 |
160 | 397 |
161 def killTable(): | 398 def killTable(): |
162 return | 399 return |
163 | 400 |
164 def processLine(line): | 401 def processLine(line): |
165 global lines | 402 global lines |
166 global tableLine | 403 global tableLine |
167 global tableRow | 404 global tableRow |
168 global columnWidth | 405 global columnWidth |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 if first != '' and second != '' and third[0] == '(': | 495 if first != '' and second != '' and third[0] == '(': |
259 commitRow() | 496 commitRow() |
260 newRow(first, second, third) | 497 newRow(first, second, third) |
261 return | 498 return |
262 | 499 |
263 | 500 |
264 def generateDef(): | 501 def generateDef(): |
265 global lines | 502 global lines |
266 for line in sys.stdin: | 503 for line in sys.stdin: |
267 processLine(line) | 504 processLine(line) |
268 print lines | 505 #print lines |
269 | 506 |
270 if '__main__' == __name__: | 507 if '__main__' == __name__: |
271 sys.exit(generateDef()) | 508 sys.exit(generateDef()) |
OLD | NEW |