| 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  | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  285   ret = ret.replace(u'\u2122', '(TM)') |  285   ret = ret.replace(u'\u2122', '(TM)') | 
|  286  |  286  | 
|  287  |  287  | 
|  288   # how enable to emit this a python string |  288   # how enable to emit this a python string | 
|  289   ret = ret.replace('\'', '\\\'') |  289   ret = ret.replace('\'', '\\\'') | 
|  290   ret = ret.replace('\n', '\\n') |  290   ret = ret.replace('\n', '\\n') | 
|  291  |  291  | 
|  292    |  292    | 
|  293   return ret |  293   return ret | 
|  294    |  294    | 
|  295 def commitRow(): |  295 def commitRow(fspecPy): | 
|  296   global columnValues |  296   global columnValues | 
|  297   global emitedDitionaryName |  297   global emitedDitionaryName | 
|  298   global table |  298   global table | 
|  299   global tableToClassName |  299   global tableToClassName | 
|  300    |  300    | 
|  301   if columnValues == None: |  301   if columnValues == None: | 
|  302     return |  302     return | 
|  303    |  303    | 
|  304   #print columnValues |  304   #print columnValues | 
|  305    |  305    | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  386     #else: |  386     #else: | 
|  387       #print table |  387       #print table | 
|  388      |  388      | 
|  389     #print tableKey |  389     #print tableKey | 
|  390     #print('\'' + tableKey + '\': [\'' + emitedDitionaryName + '\', \'' + table[
     len(tableKey) + 1:] + '\'],') |  390     #print('\'' + tableKey + '\': [\'' + emitedDitionaryName + '\', \'' + table[
     len(tableKey) + 1:] + '\'],') | 
|  391  |  391  | 
|  392     emitedDitionaryName = tableToClassName[tableKey][0] |  392     emitedDitionaryName = tableToClassName[tableKey][0] | 
|  393     comment = fix(tableToClassName[tableKey][1]) |  393     comment = fix(tableToClassName[tableKey][1]) | 
|  394      |  394      | 
|  395     if len(tableToClassName[tableKey]) >= 3 and tableToClassName[tableKey][2] !=
      '': |  395     if len(tableToClassName[tableKey]) >= 3 and tableToClassName[tableKey][2] !=
      '': | 
|  396       print('  pdfspec.addClass(\'' + emitedDitionaryName + '\', \'' + tableToCl
     assName[tableKey][2] + '\', \'' + comment + '\')\\') |  396       fspecPy.write('  pdfspec.addClass(\'' + emitedDitionaryName + '\', \'' + t
     ableToClassName[tableKey][2] + '\', \'' + comment + '\')\\\n') | 
|  397     else: |  397     else: | 
|  398       print('  pdfspec.addClass(\'' + emitedDitionaryName + '\', \'Dictionary\',
      \'' + comment + '\')\\') |  398       fspecPy.write('  pdfspec.addClass(\'' + emitedDitionaryName + '\', \'Dicti
     onary\', \'' + comment + '\')\\\n') | 
|  399  |  399  | 
|  400   if len(tableToClassName[tableKey]) >= 4 and columnValues[0] in tableToClassNam
     e[tableKey][3]: |  400   if len(tableToClassName[tableKey]) >= 4 and columnValues[0] in tableToClassNam
     e[tableKey][3]: | 
|  401     required = True |  401     required = True | 
|  402  |  402  | 
|  403   if required: |  403   if required: | 
|  404     print('      .required(\'NULL\')\\') |  404     fspecPy.write('      .required(\'NULL\')\\\n') | 
|  405   else: |  405   else: | 
|  406     print('      .optional()\\') |  406     fspecPy.write('      .optional()\\\n') | 
|  407      |  407      | 
|  408   print('          .field(\'' + columnValues[0] + '\')\\') |  408   fspecPy.write('          .field(\'' + columnValues[0] + '\')\\\n') | 
|  409   print('          .name(\'' + columnValues[0] + '\')\\') |  409   fspecPy.write('          .name(\'' + columnValues[0] + '\')\\\n') | 
|  410   print('          .type(\'' + columnValues[1] + '\')\\') |  410   fspecPy.write('          .type(\'' + columnValues[1] + '\')\\\n') | 
|  411   print('          .comment(\'' + columnValues[2] + '\')\\') |  411   fspecPy.write('          .comment(\'' + columnValues[2] + '\')\\\n') | 
|  412  |  412  | 
|  413   if len(tableToClassName[tableKey]) >= 4 and columnValues[0] in tableToClassNam
     e[tableKey][3]: |  413   if len(tableToClassName[tableKey]) >= 4 and columnValues[0] in tableToClassNam
     e[tableKey][3]: | 
|  414     print('          .must(' + tableToClassName[tableKey][3][columnValues[0]] + 
     ')\\') |  414     fspecPy.write('          .must(' + tableToClassName[tableKey][3][columnValue
     s[0]] + ')\\\n') | 
|  415  |  415  | 
|  416   print('          .done().done()\\') |  416   fspecPy.write('          .done().done()\\\n') | 
|  417    |  417    | 
|  418    |  418    | 
|  419   columnValues = None |  419   columnValues = None | 
|  420    |  420    | 
|  421 def newRow(first, second, third): |  421 def newRow(first, second, third): | 
|  422   global columnValues  |  422   global columnValues  | 
|  423   columnValues = [first.rstrip(), second.rstrip(), third.rstrip()] |  423   columnValues = [first.rstrip(), second.rstrip(), third.rstrip()] | 
|  424  |  424  | 
|  425 def appendRow(second, third): |  425 def appendRow(second, third): | 
|  426   global columnValues |  426   global columnValues | 
|  427   if second.rstrip() != '': |  427   if second.rstrip() != '': | 
|  428     columnValues[1] = columnValues[1] + ' ' + second.rstrip() |  428     columnValues[1] = columnValues[1] + ' ' + second.rstrip() | 
|  429   if third.rstrip() != '': |  429   if third.rstrip() != '': | 
|  430     columnValues[2] = columnValues[2] + '\n' + third.rstrip() |  430     columnValues[2] = columnValues[2] + '\n' + third.rstrip() | 
|  431  |  431  | 
|  432 def rebaseTable(line): |  432 def rebaseTable(fspecPy, line): | 
|  433   global knownTypes |  433   global knownTypes | 
|  434   global columnWidth |  434   global columnWidth | 
|  435    |  435    | 
|  436   line2 = line.replace(',', ' , ') |  436   line2 = line.replace(',', ' , ') | 
|  437    |  437    | 
|  438   words = line2.split() |  438   words = line2.split() | 
|  439    |  439    | 
|  440   if len(words) < 3: |  440   if len(words) < 3: | 
|  441     return False |  441     return False | 
|  442  |  442  | 
|  443   i = 1 |  443   i = 1 | 
|  444   while i < len(words) - 1 and words[i] in knownTypes: |  444   while i < len(words) - 1 and words[i] in knownTypes: | 
|  445     i = i + 1 |  445     i = i + 1 | 
|  446      |  446      | 
|  447   if words[i].startswith('(Optional') or words[i].startswith('(Required'): |  447   if words[i].startswith('(Optional') or words[i].startswith('(Required'): | 
|  448     commitRow() |  448     commitRow(fspecPy) | 
|  449      |  449      | 
|  450     columnWidth[0] = line.find(words[1]) |  450     columnWidth[0] = line.find(words[1]) | 
|  451      |  451      | 
|  452     if words[i].startswith('(Optional'): |  452     if words[i].startswith('(Optional'): | 
|  453       columnWidth[1] = line.find('(Optional') - columnWidth[0]  |  453       columnWidth[1] = line.find('(Optional') - columnWidth[0]  | 
|  454     if words[i].startswith('(Required'): |  454     if words[i].startswith('(Required'): | 
|  455       columnWidth[1] = line.find('(Required') - columnWidth[0]  |  455       columnWidth[1] = line.find('(Required') - columnWidth[0]  | 
|  456     return True |  456     return True | 
|  457      |  457      | 
|  458   return False |  458   return False | 
|  459      |  459      | 
|  460      |  460      | 
|  461 def stopTable(): |  461 def stopTable(fspecPy): | 
|  462   global tableHeaderFound |  462   global tableHeaderFound | 
|  463   global emitedDitionaryName |  463   global emitedDitionaryName | 
|  464  |  464  | 
|  465   if not inTable(): |  465   if not inTable(): | 
|  466     return |  466     return | 
|  467    |  467    | 
|  468   commitRow() |  468   commitRow(fspecPy) | 
|  469   tableHeaderFound = False |  469   tableHeaderFound = False | 
|  470   emitedDitionaryName = '' |  470   emitedDitionaryName = '' | 
|  471   print('      .done()') |  471   fspecPy.write('      .done()\n') | 
|  472   print |  472   fspecPy.write('\n') | 
|  473      |  473      | 
|  474  |  474  | 
|  475 def killTable(): |  475 def killTable(): | 
|  476   return |  476   return | 
|  477  |  477  | 
|  478 def processLineCore(line): |  478 def processLineCore(fspecPy, line): | 
|  479   global lines |  479   global lines | 
|  480   global tableLine |  480   global tableLine | 
|  481   global tableRow |  481   global tableRow | 
|  482   global columnWidth |  482   global columnWidth | 
|  483   global columnValues |  483   global columnValues | 
|  484   global mustFollowTableHeader |  484   global mustFollowTableHeader | 
|  485    |  485    | 
|  486   global fnewspec |  486   #global fnewspec | 
|  487    |  487    | 
|  488   lines = lines + 1 |  488   lines = lines + 1 | 
|  489    |  489    | 
|  490   line = unicode(line, 'utf8') |  490   line = unicode(line, 'utf8') | 
|  491    |  491    | 
|  492   striped = line.rstrip() |  492   striped = line.rstrip() | 
|  493    |  493    | 
|  494   words = line.split() |  494   words = line.split() | 
|  495   if len(words) == 0: |  495   if len(words) == 0: | 
|  496     stopTable() |  496     stopTable(fspecPy) | 
|  497     return False |  497     return False | 
|  498          |  498          | 
|  499   isTableHeader = re.search('^[\s]*(TABLE [0-9].[0-9][0-9]?)', striped) |  499   isTableHeader = re.search('^[\s]*(TABLE [0-9].[0-9][0-9]?)', striped) | 
|  500   if isTableHeader: |  500   if isTableHeader: | 
|  501     stopTable() |  501     stopTable(fspecPy) | 
|  502     tableDescriptionFound(striped) |  502     tableDescriptionFound(striped) | 
|  503     mustFollowTableHeader = True |  503     mustFollowTableHeader = True | 
|  504     return False |  504     return False | 
|  505    |  505    | 
|  506   if mustFollowTableHeader: |  506   if mustFollowTableHeader: | 
|  507     mustFollowTableHeader = False |  507     mustFollowTableHeader = False | 
|  508     if len(words) != 3: |  508     if len(words) != 3: | 
|  509       killTable() |  509       killTable() | 
|  510       return False |  510       return False | 
|  511   |  511   | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|  528     third = striped[columnWidth[0] + columnWidth[1] :] |  528     third = striped[columnWidth[0] + columnWidth[1] :] | 
|  529  |  529  | 
|  530     if tableLine == 1: |  530     if tableLine == 1: | 
|  531       if third[0] != '(': |  531       if third[0] != '(': | 
|  532         killTable() |  532         killTable() | 
|  533         return False |  533         return False | 
|  534  |  534  | 
|  535       newRow(first, second, third) |  535       newRow(first, second, third) | 
|  536       return True |  536       return True | 
|  537      |  537      | 
|  538     if rebaseTable(striped): |  538     if rebaseTable(fspecPy, striped): | 
|  539       first = striped[0 : columnWidth[0]] |  539       first = striped[0 : columnWidth[0]] | 
|  540       second = striped[columnWidth[0] : columnWidth[0] + columnWidth[1]] |  540       second = striped[columnWidth[0] : columnWidth[0] + columnWidth[1]] | 
|  541       third = striped[columnWidth[0] + columnWidth[1] :] |  541       third = striped[columnWidth[0] + columnWidth[1] :] | 
|  542      |  542      | 
|  543     first = first.rstrip() |  543     first = first.rstrip() | 
|  544     second = second.rstrip() |  544     second = second.rstrip() | 
|  545     third = third.rstrip() |  545     third = third.rstrip() | 
|  546          |  546          | 
|  547     if first == '' and second == '' and third != '': |  547     if first == '' and second == '' and third != '': | 
|  548       appendRow(second, third) |  548       appendRow(second, third) | 
|  549       return True |  549       return True | 
|  550        |  550        | 
|  551     if len(first.split()) > 1: |  551     if len(first.split()) > 1: | 
|  552       stopTable() |  552       stopTable(fspecPy) | 
|  553       return False |  553       return False | 
|  554  |  554  | 
|  555     if first != '' and first[0] == ' ': |  555     if first != '' and first[0] == ' ': | 
|  556       stopTable() |  556       stopTable(fspecPy) | 
|  557       return False |  557       return False | 
|  558  |  558  | 
|  559     if first != '' and second != '' and third == '': |  559     if first != '' and second != '' and third == '': | 
|  560       stopTable() |  560       stopTable(fspecPy) | 
|  561       return False |  561       return False | 
|  562  |  562  | 
|  563     if first == '' and second != '' and second[0] != ' ': |  563     if first == '' and second != '' and second[0] != ' ': | 
|  564       if acceptType(second): |  564       if acceptType(second): | 
|  565         appendRow(second, third) |  565         appendRow(second, third) | 
|  566         return True |  566         return True | 
|  567       else: |  567       else: | 
|  568         stopTable() |  568         stopTable(fspecPy) | 
|  569         return False |  569         return False | 
|  570  |  570  | 
|  571     if first != '' and second != '' and third[0] != '(': |  571     if first != '' and second != '' and third[0] != '(': | 
|  572       stopTable() |  572       stopTable() | 
|  573       return False |  573       return False | 
|  574        |  574        | 
|  575     if first == '' and second != '' and second[0] == ' ': |  575     if first == '' and second != '' and second[0] == ' ': | 
|  576       stopTable() |  576       stopTable(fspecPy) | 
|  577       return False |  577       return False | 
|  578  |  578  | 
|  579     if first != '' and second != '' and third[0] == '(': |  579     if first != '' and second != '' and third[0] == '(': | 
|  580       commitRow() |  580       commitRow(fspecPy) | 
|  581       newRow(first, second, third) |  581       newRow(first, second, third) | 
|  582       return True |  582       return True | 
|  583      |  583      | 
|  584     return False |  584     return False | 
|  585   return False |  585   return False | 
|  586    |  586    | 
|  587 def processLine(line): |  587 def processLine(fspecPy, line): | 
|  588   global fnewspec |  588   #global fnewspec | 
|  589    |  589    | 
|  590   inSpec = processLineCore(line) |  590   inSpec = processLineCore(fspecPy, line) | 
|  591    |  591    | 
|  592   #just return, use the next lines if you wish to rewrite spec |  592   #just return, use the next lines if you wish to rewrite spec | 
|  593   #return |  593   return | 
|  594    |  594    | 
|  595   if inSpec: |  595   if inSpec: | 
|  596     #resize colum with types |  596     #resize colum with types | 
|  597     line = line[:columnWidth[0] + columnWidth[1]] + (' ' * (60 - columnWidth[1])
     ) + line[columnWidth[0] + columnWidth[1]:] |  597     line = line[:columnWidth[0] + columnWidth[1]] + (' ' * (60 - columnWidth[1])
     ) + line[columnWidth[0] + columnWidth[1]:] | 
|  598     line = line[:columnWidth[0]] + (' ' * (40 - columnWidth[0])) + line[columnWi
     dth[0]:] |  598     line = line[:columnWidth[0]] + (' ' * (40 - columnWidth[0])) + line[columnWi
     dth[0]:] | 
|  599    |  599    | 
|  600   fnewspec.write(line) |  600   #fnewspec.write(line) | 
|  601    |  601    | 
|  602  |  602  | 
|  603 def generateDef(): |  603 def generateDef(): | 
|  604   global lines |  604   global lines | 
|  605   global fnewspec |  605   #global fnewspec | 
|  606    |  606    | 
|  607   fnewspec = open('PdfReference-okular-2.txt', 'w') |  607   #fnewspec = open('PdfReference-okular-2.txt', 'w') | 
|  608    |  608    | 
|  609   print 'import datatypes' |  609   # pdf spec in text format | 
|  610   print |  610   fspecText = open(sys.argv[1], 'r') | 
 |  611    | 
 |  612   # pdf spec in python directives  | 
 |  613   fspecPy = open(sys.argv[2], 'w') | 
 |  614    | 
 |  615   fspecPy.write('import datatypes\n') | 
 |  616   fspecPy.write('\n') | 
|  611  |  617  | 
|  612   print 'def buildPdfSpec(pdfspec):' |  618   fspecPy.write('def buildPdfSpec(pdfspec):\n') | 
|  613    |  619    | 
|  614   for line in sys.stdin: |  620   for line in fspecText: | 
|  615     processLine(line) |  621     processLine(fspecPy, line) | 
|  616     |  622     | 
|  617   # close last table if it was not closed already  |  623   # close last table if it was not closed already  | 
|  618   stopTable() |  624   stopTable(fspecPy) | 
|  619    |  625    | 
|  620   print |  626   fspecPy.write('\n') | 
|  621  |  627  | 
|  622   print 'def addDictionaryTypesTo(knowTypes):'   |  628   fspecPy.write('def addDictionaryTypesTo(knowTypes):\n')   | 
|  623   for e in tableToClassName: |  629   for e in tableToClassName: | 
|  624     print('  knowTypes[\'' + tableToClassName[e][0] + '\'] = [\'SkPdf' + tableTo
     ClassName[e][0] + '*\', \'' + tableToClassName[e][0] + 'FromDictionary\', dataty
     pes.CppNull(), \'ret->podofo()->GetDataType() == ePdfDataType_Dictionary\']') |  630     fspecPy.write('  knowTypes[\'' + tableToClassName[e][0] + '\'] = [\'SkPdf' +
      tableToClassName[e][0] + '*\', \'SkPdf' + tableToClassName[e][0] + 'FromDiction
     ary\', datatypes.CppNull(), \'ret->podofo()->GetDataType() == PoDoFo::ePdfDataTy
     pe_Dictionary\', \'A_DICTIONARY\']\n') | 
|  625   print |  631   fspecPy.write('\n') | 
|  626   print |  | 
|  627  |  | 
|  628    |  632    | 
|  629   #print lines |  633   #print lines | 
|  630   fnewspec.close() |  634   #fnewspec.close() | 
|  631  |  635  | 
|  632 if '__main__' == __name__: |  636 if '__main__' == __name__: | 
|  633   sys.exit(generateDef()) |  637   sys.exit(generateDef()) | 
| OLD | NEW |