misc/libfreetype/src/tools/docmaker/formatter.py
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     1 #  Formatter (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org>
       
     2 #
       
     3 
       
     4 from sources import *
       
     5 from content import *
       
     6 from 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 
       
    17 class  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