source: trunk/poppler/freetype-2.1.10/src/tools/docmaker/formatter.py @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 5.0 KB
Line 
1from sources import *
2from content import *
3from utils   import *
4
5# This is the base Formatter class. its purpose is to convert
6# a content processor's data into specific documents (i.e. table of
7# contents, global index, and individual API reference indices).
8#
9# You'll need to sub-class it to output anything sensible.  For example,
10# the file tohtml.py contains the definition of the HtmlFormatter sub-class
11# used to output, you guessed it, HTML.
12#
13
14class Formatter:
15
16    def __init__( self, processor ):
17
18        self.processor   = processor
19        self.identifiers = {}
20        self.chapters    = processor.chapters
21        self.sections    = processor.sections.values()
22        self.block_index = []
23
24        # store all blocks in a dictionary
25        self.blocks      = []
26        for section in self.sections:
27            for block in section.blocks.values():
28                self.add_identifier( block.name, block )
29                   
30                # add enumeration values to the index, since this is useful
31                for markup in block.markups:
32                    if markup.tag == 'values':
33                        for field in markup.fields:
34                            self.add_identifier( field.name, block )
35
36
37        self.block_index = self.identifiers.keys()
38        self.block_index.sort( index_sort )
39
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    #
53    #  Formatting the table of contents
54    #
55
56    def  toc_enter( self ):
57        pass
58   
59    def  toc_chapter_enter( self, chapter ):
60        pass
61   
62    def  toc_section_enter( self, section ):
63        pass
64       
65    def  toc_section_exit( self, section ):
66        pass
67       
68    def  toc_chapter_exit( self, chapter ):
69        pass
70
71    def  toc_index( self, index_filename ):
72        pass
73   
74    def  toc_exit( self ):
75        pass
76
77    def  toc_dump( self, toc_filename = None, index_filename = None ):
78       
79        output = None
80        if toc_filename:
81            output = open_output( toc_filename )
82       
83        self.toc_enter()
84   
85        for chap in self.processor.chapters:
86   
87            self.toc_chapter_enter( chap )
88   
89            for section in chap.sections:
90                self.toc_section_enter( section )
91                self.toc_section_exit( section )
92   
93            self.toc_chapter_exit ( chap )
94   
95        self.toc_index( index_filename )
96   
97        self.toc_exit()
98
99        if output:
100            close_output( output )
101   
102    #
103    #  Formatting the index
104    #
105
106    def  index_enter( self ):
107        pass
108
109    def  index_name_enter( self, name ):
110        pass
111
112    def  index_name_exit( self, name ):
113        pass
114
115    def  index_exit( self ):
116        pass
117
118    def  index_dump( self, index_filename = None ):
119       
120        output = None
121        if index_filename:
122            output = open_output( index_filename )
123
124        self.index_enter()
125
126        for name in self.block_index:
127            self.index_name_enter( name )
128            self.index_name_exit ( name )
129
130        self.index_exit()
131     
132        if output:
133            close_output( output )
134     
135    #
136    #  Formatting a section
137    #
138    def  section_enter( self, section ):
139        pass
140   
141    def  block_enter( self, block ):
142        pass
143   
144    def  markup_enter( self, markup, block = None ):
145        pass
146   
147    def  field_enter( self, field, markup = None, block = None ):
148        pass
149       
150    def  field_exit( self, field, markup = None, block = None ):
151        pass
152   
153    def  markup_exit( self, markup, block = None ):
154        pass
155       
156    def  block_exit( self, block ):
157        pass
158
159    def  section_exit( self, section ):
160        pass
161
162
163    def  section_dump( self, section, section_filename = None ):
164       
165        output = None
166        if section_filename:
167            output = open_output( section_filename )
168       
169        self.section_enter( section )
170
171        for name in section.block_names:
172            block = self.identifiers[ name ]
173            self.block_enter( block )
174
175            for markup in block.markups[1:]:   # always ignore first markup !!
176                self.markup_enter( markup, block )
177
178                for field in markup.fields:
179                    self.field_enter( field, markup, block )
180
181                    self.field_exit ( field, markup, block )
182
183                self.markup_exit( markup, block )
184
185            self.block_exit( block )
186
187        self.section_exit ( section )
188
189        if output:
190            close_output( output )
191
192
193    def section_dump_all( self ):
194        for section in self.sections:
195            self.section_dump( section )
196
197    #
198    #  Formatting a block
199    #
200
201
202
203
Note: See TracBrowser for help on using the repository browser.