Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: experimental/PdfViewer/spec2def.py

Issue 18042005: isolate podofo to prepare for native parser, autogenerate PDF API during build (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « experimental/PdfViewer/pdfparser/podofo/SkPodofoUtils.cpp ('k') | gyp/pdfviewer.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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())
OLDNEW
« no previous file with comments | « experimental/PdfViewer/pdfparser/podofo/SkPodofoUtils.cpp ('k') | gyp/pdfviewer.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698