[Python-checkins] python/dist/src/Doc/tools prechm.py,1.9,1.10

tim_one@sourceforge.net tim_one@sourceforge.net
Sat, 20 Apr 2002 01:36:45 -0700


Update of /cvsroot/python/python/dist/src/Doc/tools
In directory usw-pr-cvs1:/tmp/cvs-serv14323

Modified Files:
	prechm.py 
Log Message:
Widespread:  Used classes in a more natural way.  Added convenience
methods to squash code duplication.  Simplified several overly complex
chunks of logic.  Built output strings more with string interpolation
instead of infix '+'.  Added comments.  Exploited recent Python features
(chiefly bool and augmented assignment).


Index: prechm.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/tools/prechm.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** prechm.py	20 Apr 2002 03:25:02 -0000	1.9
--- prechm.py	20 Apr 2002 08:36:42 -0000	1.10
***************
*** 18,23 ****
  import sys
  import os
! import formatter
! import htmllib
  import string
  import getopt
--- 18,23 ----
  import sys
  import os
! from formatter import NullWriter, AbstractFormatter
! from htmllib import HTMLParser
  import string
  import getopt
***************
*** 197,246 ****
  }
  
! class AlmostNullWriter(formatter.NullWriter):
!     savedliteral = ''
  
      def send_flowing_data(self, data):
!         # need the text tag for later
!         datastriped = string.strip(data)
!         if self.savedliteral == '':
!             self.savedliteral = datastriped
!         else:
!             self.savedliteral = string.strip(self.savedliteral +
!                                             ' ' + datastriped)
  
  
! class HelpHtmlParser(htmllib.HTMLParser):
!     indent = 0  # number of tabs for pritty printing of files
!     ft = None   # output file
!     path = None # relative path
!     proc = 0    # if true I process, if false I skip
!                 #   (some headers, footers, etc.)
  
      def begin_group(self):
!         if not self.proc:
!             # first level, start processing
!             self.proc = 1
!         self.indent = self.indent + 1
  
!     def finnish_group(self):
!         self.indent = self.indent - 1
!         if self.proc and self.indent == 0:
!             # if processing and back to root, then stop
!             self.proc = 0
  
      def anchor_bgn(self, href, name, type):
          if self.proc:
!             self.formatter.writer.savedliteral = ''
!             self.ft.write('<OBJECT type="text/sitemap">\n')
!             self.ft.write('\t' * self.indent + \
!                 '\t<param name="Local" value="' + self.path + \
!                 '/' + href + '">\n')
  
      def anchor_end(self):
          if self.proc:
!             self.ft.write('\t' * self.indent + \
!                 '\t<param name="Name" value="' + \
!                 self.formatter.writer.savedliteral + '">\n')
!             self.ft.write('\t' * self.indent + '\t</OBJECT>\n')
  
      def start_dl(self, atr_val):
--- 197,253 ----
  }
  
! # AlmostNullWriter doesn't print anything; it just arranges to save the
! # text sent to send_flowing_data().  This is used to capture the text
! # between an anchor begin/end pair, e.g. for TOC entries.
! 
! class AlmostNullWriter(NullWriter):
! 
!     def __init__(self):
!         NullWriter.__init__(self)
!         self.saved_clear()
  
      def send_flowing_data(self, data):
!         stripped = data.strip()
!         if stripped:    # don't bother to save runs of whitespace
!             self.saved.append(stripped)
  
+     # Forget all saved text.
+     def saved_clear(self):
+         self.saved = []
  
!     # Return all saved text as a string.
!     def saved_get(self):
!         return ' '.join(self.saved)
! 
! class HelpHtmlParser(HTMLParser):
! 
!     def __init__(self, formatter, path, output):
!         HTMLParser.__init__(self, formatter)
!         self.path = path    # relative path
!         self.ft = output    # output file
!         self.indent = 0     # number of tabs for pretty printing of files
!         self.proc = False   # True when actively processing, else False
!                             # (headers, footers, etc)
  
      def begin_group(self):
!         self.indent += 1
!         self.proc = True
  
!     def finish_group(self):
!         self.indent -= 1
!         # stop processing when back to top level
!         self.proc = self.indent > 0
  
      def anchor_bgn(self, href, name, type):
          if self.proc:
!             self.saved_clear()
!             self.write('<OBJECT type="text/sitemap">\n')
!             self.tab('\t<param name="Local" value="%s/%s">\n' %
!                      (self.path, href))
  
      def anchor_end(self):
          if self.proc:
!             self.tab('\t<param name="Name" value="%s">\n' % self.saved_get())
!             self.tab('\t</OBJECT>\n')
  
      def start_dl(self, atr_val):
***************
*** 248,257 ****
  
      def end_dl(self):
!         self.finnish_group()
  
      def do_dt(self, atr_val):
!         # no trailing newline on pourpose!
!         self.ft.write("\t" * self.indent + "<LI>")
  
  
  class IdxHlpHtmlParser(HelpHtmlParser):
--- 255,281 ----
  
      def end_dl(self):
!         self.finish_group()
  
      def do_dt(self, atr_val):
!         # no trailing newline on purpose!
!         self.tab("<LI>")
! 
!     # Write text to output file.
!     def write(self, text):
!         self.ft.write(text)
  
+     # Write text to output file after indenting by self.indent tabs.
+     def tab(self, text=''):
+         self.write('\t' * self.indent)
+         if text:
+             self.write(text)
+ 
+     # Forget all saved text.
+     def saved_clear(self):
+         self.formatter.writer.saved_clear()
+ 
+     # Return all saved text as a string.
+     def saved_get(self):
+         return self.formatter.writer.saved_get()
  
  class IdxHlpHtmlParser(HelpHtmlParser):
***************
*** 263,290 ****
      def start_dl(self, atr_val):
          self.begin_group()
!         self.ft.write('\t' * self.indent + '<UL>\n')
  
      def end_dl(self):
!         self.finnish_group()
!         self.ft.write('</UL>\n')
  
      def start_ul(self, atr_val):
          self.begin_group()
!         self.ft.write('\t' * self.indent + '<UL>\n')
  
      def end_ul(self):
!         self.finnish_group()
!         self.ft.write('</UL>\n')
  
      def do_li(self, atr_val):
!         # no trailing newline on pourpose!
!         self.ft.write("\t" * self.indent + "<LI>")
! 
  
  def index(path, indexpage, output):
!     f = formatter.AbstractFormatter(AlmostNullWriter())
!     parser = IdxHlpHtmlParser(f)
!     parser.path = path
!     parser.ft = output
      f = open(path + '/' + indexpage)
      parser.feed(f.read())
--- 287,311 ----
      def start_dl(self, atr_val):
          self.begin_group()
!         self.tab('<UL>\n')
  
      def end_dl(self):
!         self.finish_group()
!         self.tab('</UL>\n')
  
      def start_ul(self, atr_val):
          self.begin_group()
!         self.tab('<UL>\n')
  
      def end_ul(self):
!         self.finish_group()
!         self.tab('</UL>\n')
  
      def do_li(self, atr_val):
!         # no trailing newline on purpose!
!         self.tab("<LI>")
  
  def index(path, indexpage, output):
!     parser = IdxHlpHtmlParser(AbstractFormatter(AlmostNullWriter()),
!                               path, output)
      f = open(path + '/' + indexpage)
      parser.feed(f.read())
***************
*** 292,301 ****
      f.close()
  
- 
  def content(path, contentpage, output):
!     f = formatter.AbstractFormatter(AlmostNullWriter())
!     parser = TocHlpHtmlParser(f)
!     parser.path = path
!     parser.ft = output
      f = open(path + '/' + contentpage)
      parser.feed(f.read())
--- 313,319 ----
      f.close()
  
  def content(path, contentpage, output):
!     parser = TocHlpHtmlParser(AbstractFormatter(AlmostNullWriter()),
!                               path, output)
      f = open(path + '/' + contentpage)
      parser.feed(f.read())
***************
*** 303,307 ****
      f.close()
  
- 
  def do_index(library, output):
      output.write('<UL>\n')
--- 321,324 ----
***************
*** 312,316 ****
      output.write('</UL>\n')
  
- 
  def do_content(library, version, output):
      output.write(contents_header % version)
--- 329,332 ----
***************
*** 335,339 ****
                  output.write(path % page)
  
- 
  def openfile(file):
      try:
--- 351,354 ----
***************
*** 347,352 ****
          print usage_mode
          sys.exit(0)
- 
- 
  
  def do_it(args = None):
--- 362,365 ----