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

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

Issue 17748002: Basic support for Type3 Fonts in Pdf + various refactorings (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 6 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
OLDNEW
1 1
2 2
3 import sys 3 import sys
4 4
5 import datatypes 5 import datatypes
6 import pdfspec_autogen 6 from autogen.pdfspec_autogen import *
7 7
8 knowTypes = { 8 knowTypes = {
9 '(any)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true'], 9 '(any)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true'],
10 '(undefined)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'tr ue'], 10 '(undefined)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'tr ue'],
11 '(various)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true '], 11 '(various)': ['SkPdfObject*', 'ObjectFromDictionary', datatypes.CppNull(), 'true '],
12 'array': ['SkPdfArray', 'ArrayFromDictionary', datatypes.PdfArrayNone(), 'ret->p odofo()->GetDataType() == ePdfDataType_Array'], 12 'array': ['SkPdfArray*', 'ArrayFromDictionary', datatypes.CppNull(), 'ret->podof o()->GetDataType() == ePdfDataType_Array'],
13 'boolean': ['bool', 'BoolFromDictionary', datatypes.PdfBoolean('false'), 'ret->p odofo()->GetDataType() == ePdfDataType_Bool'], 13 'boolean': ['bool', 'BoolFromDictionary', datatypes.PdfBoolean('false'), 'ret->p odofo()->GetDataType() == ePdfDataType_Bool'],
14 'date': ['SkPdfDate', 'DateFromDictionary', datatypes.PdfDateNever(), 'ret->podo fo()->GetDataType() == ePdfDataType_Array'], 14 'date': ['SkPdfDate', 'DateFromDictionary', datatypes.PdfDateNever(), 'ret->podo fo()->GetDataType() == ePdfDataType_Array'],
15 'dictionary': ['SkPdfDictionary*', 'DictionaryFromDictionary', datatypes.CppNull (), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary'], 15 'dictionary': ['SkPdfDictionary*', 'DictionaryFromDictionary', datatypes.CppNull (), 'ret->podofo()->GetDataType() == ePdfDataType_Dictionary'],
16 'function': ['SkPdfFunction', 'FunctionFromDictionary', datatypes.PdfFunctionNon e(), 'ret->podofo()->GetDataType() == ePdfDataType_Reference'], 16 'function': ['SkPdfFunction', 'FunctionFromDictionary', datatypes.PdfFunctionNon e(), 'ret->podofo()->GetDataType() == ePdfDataType_Reference'],
17 'integer': ['long', 'LongFromDictionary', datatypes.PdfInteger(0), 'ret->podofo( )->GetDataType() == ePdfDataType_Number'], 17 'integer': ['long', 'LongFromDictionary', datatypes.PdfInteger(0), 'ret->podofo( )->GetDataType() == ePdfDataType_Number'],
18 'file_specification': ['SkPdfFileSpec', 'FileSpecFromDictionary', datatypes.File SpecNone(), 'ret->podofo()->GetDataType() == ePdfDataType_Reference'], 18 'file_specification': ['SkPdfFileSpec', 'FileSpecFromDictionary', datatypes.File SpecNone(), 'ret->podofo()->GetDataType() == ePdfDataType_Reference'],
19 'name': ['std::string', 'NameFromDictionary', datatypes.PdfString('""'), 'ret->p odofo()->GetDataType() == ePdfDataType_Name'], 19 'name': ['std::string', 'NameFromDictionary', datatypes.PdfString('""'), 'ret->p odofo()->GetDataType() == ePdfDataType_Name'],
20 'tree': ['SkPdfTree*', 'TreeFromDictionary', datatypes.CppNull(), 'ret->podofo() ->GetDataType() == ePdfDataType_Reference'], 20 'tree': ['SkPdfTree*', 'TreeFromDictionary', datatypes.CppNull(), 'ret->podofo() ->GetDataType() == ePdfDataType_Reference'],
21 'number': ['double', 'DoubleFromDictionary', datatypes.PdfNumber(0), 'ret->podof o()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfD ataType_Number'], 21 'number': ['double', 'DoubleFromDictionary', datatypes.PdfNumber(0), 'ret->podof o()->GetDataType() == ePdfDataType_Real || ret->podofo()->GetDataType() == ePdfD ataType_Number'],
22 'rectangle': ['SkRect', 'SkRectFromDictionary', datatypes.PdfEmptyRect(), 'ret-> podofo()->GetDataType() == ePdfDataType_Array'], 22 'rectangle': ['SkRect*', 'SkRectFromDictionary', datatypes.CppNull(), 'ret->podo fo()->GetDataType() == ePdfDataType_Array && ret->podofo()->GetArray().GetLength () == 4'],
23 'stream': ['SkPdfStream*', 'StreamFromDictionary', datatypes.CppNull(), 'ret->p odofo()->HasStream()'], 23 'stream': ['SkPdfStream*', 'StreamFromDictionary', datatypes.CppNull(), 'ret->p odofo()->HasStream()'],
24 'string': ['std::string', 'StringFromDictionary', datatypes.PdfString('""'), 're t->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType( ) == ePdfDataType_HexString'], 24 'string': ['std::string', 'StringFromDictionary', datatypes.PdfString('""'), 're t->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType( ) == ePdfDataType_HexString'],
25 'text': ['std::string', 'StringFromDictionary', datatypes.PdfString('""'), 'ret- >podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString'], 25 'text': ['std::string', 'StringFromDictionary', datatypes.PdfString('""'), 'ret- >podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetDataType() == ePdfDataType_HexString'],
26 'text string': ['std::string', 'StringFromDictionary', datatypes.PdfString('""') , 'ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetData Type() == ePdfDataType_HexString'], 26 'text string': ['std::string', 'StringFromDictionary', datatypes.PdfString('""') , 'ret->podofo()->GetDataType() == ePdfDataType_String || ret->podofo()->GetData Type() == ePdfDataType_HexString'],
27 'matrix': ['SkMatrix*', 'SkMatrixFromDictionary', datatypes.CppNull(), 'ret->pod ofo()->GetDataType() == ePdfDataType_Array && ret->podofo()->GetArray().GetLengt h() == 4'],
27 } 28 }
28 29
29 30
30 class PdfField: 31 class PdfField:
31 def __init__(self, parent, name, abr): 32 def __init__(self, parent, name, abr):
32 self.fParent = parent 33 self.fParent = parent
33 self.fName = name 34 self.fName = name
34 self.fAbr = abr 35 self.fAbr = abr
35 36
36 self.fDefault = '' 37 self.fDefault = ''
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 283
283 for name in self.fClassesNamesInOrder: 284 for name in self.fClassesNamesInOrder:
284 cls = self.fClasses[name] 285 cls = self.fClasses[name]
285 enum = cls.fEnum 286 enum = cls.fEnum
286 287
287 fileClass = open('SkPdf' + cls.fName + '_autogen.h', 'w') 288 fileClass = open('SkPdf' + cls.fName + '_autogen.h', 'w')
288 fileClass.write('#ifndef __DEFINED__SkPdf' + cls.fName + '\n') 289 fileClass.write('#ifndef __DEFINED__SkPdf' + cls.fName + '\n')
289 fileClass.write('#define __DEFINED__SkPdf' + cls.fName + '\n') 290 fileClass.write('#define __DEFINED__SkPdf' + cls.fName + '\n')
290 fileClass.write('\n') 291 fileClass.write('\n')
291 292
293 fileClass.write('#include "SkPdfUtils.h"\n')
292 fileClass.write('#include "SkPdfEnums_autogen.h"\n') 294 fileClass.write('#include "SkPdfEnums_autogen.h"\n')
293 fileClass.write('#include "SkPdfArray_autogen.h"\n') 295 fileClass.write('#include "SkPdfArray_autogen.h"\n')
294 if cls.fBase != '': 296 if cls.fBase != '':
295 fileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n') 297 fileClass.write('#include "SkPdf' + cls.fBase + '_autogen.h"\n')
296 fileClass.write('\n') 298 fileClass.write('\n')
297 299
298 if cls.fComment != '': 300 if cls.fComment != '':
299 fileClass.write('// ' + cls.fComment + '\n') 301 fileClass.write('// ' + cls.fComment + '\n')
300 302
301 if cls.fBase == '': 303 if cls.fBase == '':
(...skipping 18 matching lines...) Expand all
320 for cc in cls.fCCPrivate: 322 for cc in cls.fCCPrivate:
321 fileClass.write(' ' + cc + '\n') 323 fileClass.write(' ' + cc + '\n')
322 324
323 if cls.fBase == '': 325 if cls.fBase == '':
324 fileClass.write('protected:\n') 326 fileClass.write('protected:\n')
325 fileClass.write(' const PdfMemDocument* fPodofoDoc;\n') 327 fileClass.write(' const PdfMemDocument* fPodofoDoc;\n')
326 fileClass.write(' const PdfObject* fPodofoObj;\n') 328 fileClass.write(' const PdfObject* fPodofoObj;\n')
327 fileClass.write('\n') 329 fileClass.write('\n')
328 fileClass.write('public:\n') 330 fileClass.write('public:\n')
329 fileClass.write(' SkPdf' + cls.fName + '(const PdfMemDocument* podofoDo c = NULL, const PdfObject* podofoObj = NULL) : fPodofoDoc(podofoDoc), fPodofoObj (podofoObj) {}\n') 331 fileClass.write(' SkPdf' + cls.fName + '(const PdfMemDocument* podofoDo c = NULL, const PdfObject* podofoObj = NULL) : fPodofoDoc(podofoDoc), fPodofoObj (podofoObj) {}\n')
332 fileClass.write(' SkPdf' + cls.fName + '(const SkPdf' + cls.fName + '& from) : fPodofoDoc(from.fPodofoDoc), fPodofoObj(from.fPodofoObj) {}\n')
333 fileClass.write('\n')
330 fileClass.write(' const PdfMemDocument* doc() const { return fPodofoDoc ;}\n') 334 fileClass.write(' const PdfMemDocument* doc() const { return fPodofoDoc ;}\n')
331 fileClass.write(' const PdfObject* podofo() const { return fPodofoObj;} \n') 335 fileClass.write(' const PdfObject* podofo() const { return fPodofoObj;} \n')
332 else: 336 else:
333 fileClass.write('public:\n') 337 fileClass.write('public:\n')
334 fileClass.write(' SkPdf' + cls.fName + '(const PdfMemDocument* podofoDo c = NULL, const PdfObject* podofoObj = NULL) : SkPdf' + cls.fBase + '(podofoDoc, podofoObj) {}\n') 338 fileClass.write(' SkPdf' + cls.fName + '(const PdfMemDocument* podofoDo c = NULL, const PdfObject* podofoObj = NULL) : SkPdf' + cls.fBase + '(podofoDoc, podofoObj) {}\n')
335 fileClass.write('\n') 339 fileClass.write('\n')
340 fileClass.write(' SkPdf' + cls.fName + '(const SkPdf' + cls.fName + '& from) : SkPdf' + cls.fBase + '(from.fPodofoDoc, from.fPodofoObj) {}\n')
341 fileClass.write('\n')
342
336 343
337 #check required fieds, also, there should be an internal_valid() manually wrote for complex 344 #check required fieds, also, there should be an internal_valid() manually wrote for complex
338 # situations 345 # situations
339 # right now valid return true 346 # right now valid return true
340 fileClass.write(' virtual bool valid() const {return true;}\n') 347 fileClass.write(' virtual bool valid() const {return true;}\n')
341 fileClass.write('\n') 348 fileClass.write('\n')
342 349
343 fileClass.write(' SkPdf' + cls.fName + '& operator=(const SkPdf' + cls.fN ame + '& from) {this->fPodofoDoc = from.fPodofoDoc; this->fPodofoObj = from.fPod ofoObj; return *this;}\n') 350 fileClass.write(' SkPdf' + cls.fName + '& operator=(const SkPdf' + cls.fN ame + '& from) {this->fPodofoDoc = from.fPodofoDoc; this->fPodofoObj = from.fPod ofoObj; return *this;}\n')
344 fileClass.write('\n') 351 fileClass.write('\n')
345 352
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 fileMapper.write('};\n') 497 fileMapper.write('};\n')
491 fileMapper.write('\n') 498 fileMapper.write('\n')
492 499
493 fileMapper.write('#endif // __DEFINED__SkPdfPodofoMapper\n') 500 fileMapper.write('#endif // __DEFINED__SkPdfPodofoMapper\n')
494 fileMapper.close() 501 fileMapper.close()
495 502
496 return 503 return
497 504
498 def generateCode(): 505 def generateCode():
499 global fileHeaders 506 global fileHeaders
507 global knowTypes
500 508
501 fileHeaders = open('SkPdfHeaders_autogen.h', 'w') 509 fileHeaders = open('SkPdfHeaders_autogen.h', 'w')
502 fileHeaders.write('#ifndef __DEFINED__SkPdfHeaders\n') 510 fileHeaders.write('#ifndef __DEFINED__SkPdfHeaders\n')
503 fileHeaders.write('#define __DEFINED__SkPdfHeaders\n') 511 fileHeaders.write('#define __DEFINED__SkPdfHeaders\n')
504 fileHeaders.write('\n') 512 fileHeaders.write('\n')
505 513
506 fileHeaders.write('#include "SkPdfEnums_autogen.h"\n') 514 fileHeaders.write('#include "SkPdfEnums_autogen.h"\n')
507 515
508 manager = PdfClassManager() 516 manager = PdfClassManager()
509 517
(...skipping 18 matching lines...) Expand all
528 .carbonCopyPublic('const int size() const {return f PodofoObj->GetArray().GetSize();}')\ 536 .carbonCopyPublic('const int size() const {return f PodofoObj->GetArray().GetSize();}')\
529 .carbonCopyPublic('SkPdfObject* operator[](int i) c onst { SkPdfObject* ret = NULL; skpdfmap(*fPodofoDoc, fPodofoObj->GetArray()[i] , &ret); return ret; }')\ 537 .carbonCopyPublic('SkPdfObject* operator[](int i) c onst { SkPdfObject* ret = NULL; skpdfmap(*fPodofoDoc, fPodofoObj->GetArray()[i] , &ret); return ret; }')\
530 538
531 manager.addClass('String').check('podofoObj.GetDataType() == ePdfDataType_Stri ng || podofoObj.GetDataType() == ePdfDataType_HexString')\ 539 manager.addClass('String').check('podofoObj.GetDataType() == ePdfDataType_Stri ng || podofoObj.GetDataType() == ePdfDataType_HexString')\
532 .carbonCopyPublic('const std::string& value() const {return fPodofoObj->GetString().GetStringUtf8();}') 540 .carbonCopyPublic('const std::string& value() const {return fPodofoObj->GetString().GetStringUtf8();}')
533 541
534 manager.addClass('HexString', 'String').check('podofoObj.GetDataType() == ePdf DataType_HexString')\ 542 manager.addClass('HexString', 'String').check('podofoObj.GetDataType() == ePdf DataType_HexString')\
535 .carbonCopyPublic('const std::string& value() const {return fPodofoObj->GetString().GetStringUtf8();}') 543 .carbonCopyPublic('const std::string& value() const {return fPodofoObj->GetString().GetStringUtf8();}')
536 544
537 manager.addClass('Dictionary').check('podofoObj.GetDataType() == ePdfDataType_ Dictionary')\ 545 manager.addClass('Dictionary').check('podofoObj.GetDataType() == ePdfDataType_ Dictionary')\
538 .carbonCopyPublic('const SkPdfObject get(const c har* dictionaryKeyName) const {return SkPdfObject(fPodofoDoc, resolveReferenceOb ject(fPodofoDoc, fPodofoObj->GetDictionary().GetKey(PdfName(dictionaryKeyName))) );}')\ 546 .carbonCopyPublic('SkPdfObject* get(const char* dictionaryKeyName) const {return new SkPdfObject(fPodofoDoc, resolveReferenceObj ect(fPodofoDoc, fPodofoObj->GetDictionary().GetKey(PdfName(dictionaryKeyName)))) ;}')\
539 .carbonCopyPublic('SkPdfObject get(const char* d ictionaryKeyName) {return SkPdfObject(fPodofoDoc, resolveReferenceObject(fPodofo Doc, fPodofoObj->GetDictionary().GetKey(PdfName(dictionaryKeyName))));}')\ 547 .carbonCopyPublic('SkPdfObject* get(const char* dictionaryKeyName) {return new SkPdfObject(fPodofoDoc, resolveReferenceObject(fP odofoDoc, fPodofoObj->GetDictionary().GetKey(PdfName(dictionaryKeyName))));}')\
540 548
541 manager.addClass('Stream') # attached to a dictionary in podofo 549 manager.addClass('Stream') # attached to a dictionary in podofo
542 550
543 551
544 # these classes are not explicitely backed by a table in the pdf spec 552 # these classes are not explicitely backed by a table in the pdf spec
545 manager.addClass('XObjectDictionary', 'Dictionary') 553 manager.addClass('XObjectDictionary', 'Dictionary')
546 554
547 manager.addClass('FontDictionary', 'Dictionary') 555 manager.addClass('FontDictionary', 'Dictionary')
548 556
549 manager.addClass('TrueTypeFontDictionary', 'Type1FontDictionary')\ 557 manager.addClass('TrueTypeFontDictionary', 'Type1FontDictionary')\
550 .required('NULL')\ 558 .required('NULL')\
551 .field('Subtype')\ 559 .field('Subtype')\
552 .name('Subtype')\ 560 .name('Subtype')\
553 .type('name')\ 561 .type('name')\
554 .comment('')\ 562 .comment('')\
555 .must([datatypes.PdfName('TrueType')])\ 563 .must([datatypes.PdfName('TrueType')])\
556 .done().done()\ 564 .done().done()\
557 565
558 pdfspec_autogen.buildPdfSpec(manager) 566
567 addDictionaryTypesTo(knowTypes)
568 buildPdfSpec(manager)
559 569
560 manager.addClass('MultiMasterFontDictionary', 'Type1FontDictionary')\ 570 manager.addClass('MultiMasterFontDictionary', 'Type1FontDictionary')\
561 .required('NULL')\ 571 .required('NULL')\
562 .field('Subtype')\ 572 .field('Subtype')\
563 .name('Subtype')\ 573 .name('Subtype')\
564 .type('name')\ 574 .type('name')\
565 .comment('')\ 575 .comment('')\
566 .must([datatypes.PdfName('MMType1')])\ 576 .must([datatypes.PdfName('MMType1')])\
567 .done().done()\ 577 .done().done()\
568 578
569 579
570 manager.write() 580 manager.write()
571 581
572 fileHeaders.write('#endif // __DEFINED__SkPdfHeaders\n') 582 fileHeaders.write('#endif // __DEFINED__SkPdfHeaders\n')
573 fileHeaders.close() 583 fileHeaders.close()
574 584
575 return 1 585 return 1
576 586
577 if '__main__' == __name__: 587 if '__main__' == __name__:
578 sys.exit(generateCode()) 588 sys.exit(generateCode())
579 589
OLDNEW
« no previous file with comments | « experimental/PdfViewer/autogen/pdfspec_autogen.py ('k') | experimental/PdfViewer/pdf_viewer_main.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698