PageRenderTime 43ms CodeModel.GetById 9ms app.highlight 27ms RepoModel.GetById 1ms app.codeStats 1ms

/modules/freetype2/src/tools/docmaker/formatter.py

http://github.com/zpao/v8monkey
Python | 188 lines | 113 code | 52 blank | 23 comment | 30 complexity | 58b93fa28b4a0ccdbf2535397f08be91 MD5 | raw file
  1#  Formatter (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org>
  2#
  3
  4from sources import *
  5from content import *
  6from utils   import *
  7
  8# This is the base Formatter class.  Its purpose is to convert
  9# a content processor's data into specific documents (i.e., table of
 10# contents, global index, and individual API reference indices).
 11#
 12# You need to sub-class it to output anything sensible.  For example,
 13# the file tohtml.py contains the definition of the HtmlFormatter sub-class
 14# used to output -- you guessed it -- HTML.
 15#
 16
 17class  Formatter:
 18
 19    def  __init__( self, processor ):
 20        self.processor   = processor
 21        self.identifiers = {}
 22        self.chapters    = processor.chapters
 23        self.sections    = processor.sections.values()
 24        self.block_index = []
 25
 26        # store all blocks in a dictionary
 27        self.blocks = []
 28        for section in self.sections:
 29            for block in section.blocks.values():
 30                self.add_identifier( block.name, block )
 31
 32                # add enumeration values to the index, since this is useful
 33                for markup in block.markups:
 34                    if markup.tag == 'values':
 35                        for field in markup.fields:
 36                            self.add_identifier( field.name, block )
 37
 38        self.block_index = self.identifiers.keys()
 39        self.block_index.sort( index_sort )
 40
 41    def  add_identifier( self, name, block ):
 42        if self.identifiers.has_key( name ):
 43            # duplicate name!
 44            sys.stderr.write(                                           \
 45               "WARNING: duplicate definition for '" + name + "' in " + \
 46               block.location() + ", previous definition in " +         \
 47               self.identifiers[name].location() + "\n" )
 48        else:
 49            self.identifiers[name] = block
 50
 51    #
 52    #  Formatting the table of contents
 53    #
 54    def  toc_enter( self ):
 55        pass
 56
 57    def  toc_chapter_enter( self, chapter ):
 58        pass
 59
 60    def  toc_section_enter( self, section ):
 61        pass
 62
 63    def  toc_section_exit( self, section ):
 64        pass
 65
 66    def  toc_chapter_exit( self, chapter ):
 67        pass
 68
 69    def  toc_index( self, index_filename ):
 70        pass
 71
 72    def  toc_exit( self ):
 73        pass
 74
 75    def  toc_dump( self, toc_filename = None, index_filename = None ):
 76        output = None
 77        if toc_filename:
 78            output = open_output( toc_filename )
 79
 80        self.toc_enter()
 81
 82        for chap in self.processor.chapters:
 83
 84            self.toc_chapter_enter( chap )
 85
 86            for section in chap.sections:
 87                self.toc_section_enter( section )
 88                self.toc_section_exit( section )
 89
 90            self.toc_chapter_exit( chap )
 91
 92        self.toc_index( index_filename )
 93
 94        self.toc_exit()
 95
 96        if output:
 97            close_output( output )
 98
 99    #
100    #  Formatting the index
101    #
102    def  index_enter( self ):
103        pass
104
105    def  index_name_enter( self, name ):
106        pass
107
108    def  index_name_exit( self, name ):
109        pass
110
111    def  index_exit( self ):
112        pass
113
114    def  index_dump( self, index_filename = None ):
115        output = None
116        if index_filename:
117            output = open_output( index_filename )
118
119        self.index_enter()
120
121        for name in self.block_index:
122            self.index_name_enter( name )
123            self.index_name_exit( name )
124
125        self.index_exit()
126
127        if output:
128            close_output( output )
129
130    #
131    #  Formatting a section
132    #
133    def  section_enter( self, section ):
134        pass
135
136    def  block_enter( self, block ):
137        pass
138
139    def  markup_enter( self, markup, block = None ):
140        pass
141
142    def  field_enter( self, field, markup = None, block = None ):
143        pass
144
145    def  field_exit( self, field, markup = None, block = None ):
146        pass
147
148    def  markup_exit( self, markup, block = None ):
149        pass
150
151    def  block_exit( self, block ):
152        pass
153
154    def  section_exit( self, section ):
155        pass
156
157    def  section_dump( self, section, section_filename = None ):
158        output = None
159        if section_filename:
160            output = open_output( section_filename )
161
162        self.section_enter( section )
163
164        for name in section.block_names:
165            block = self.identifiers[name]
166            self.block_enter( block )
167
168            for markup in block.markups[1:]:   # always ignore first markup!
169                self.markup_enter( markup, block )
170
171                for field in markup.fields:
172                    self.field_enter( field, markup, block )
173                    self.field_exit( field, markup, block )
174
175                self.markup_exit( markup, block )
176
177            self.block_exit( block )
178
179        self.section_exit( section )
180
181        if output:
182            close_output( output )
183
184    def  section_dump_all( self ):
185        for section in self.sections:
186            self.section_dump( section )
187
188# eof