#! /usr/bin/env python
#  -*- Python -*-

"""Generate a page count report of the PostScript version of the manuals."""

__version__ = '$Revision$'


class PageCounter:
    def __init__(self):
        self.doclist = []
        self.total = 0
        self.title_width = 0

    def add_document(self, prefix, title):
        count = count_pages(prefix + ".ps")
        self.doclist.append((title, prefix, count))
        self.title_width = max(self.title_width, len(title))
        self.total = self.total + count

    def dump(self):
        fmt = "%%-%ds  (%%s.ps, %%d pages)" % self.title_width
        for item in self.doclist:
            print fmt % item
        print
        print "  Total page count:  %d" % self.total

    def run(self):
        for prefix, title in [
            ("api", "Python/C API"),
            ("ext", "Extending and Embedding the Python Interpreter"),
            ("lib", "Python Library Reference"),
            ("mac", "Macintosh Module Reference"),
            ("ref", "Python Reference Manual"),
            ("tut", "Python Tutorial"),
            ("doc", "Documenting Python"),
            ]:
            self.add_document(prefix, title)
        print self.PREFIX
        self.dump()
        print self.SUFFIX

    PREFIX = """\
This is the PostScript version of the standard Python documentation.
If you plan to print this, be aware that some of the documents are
long.  The following manuals are included:
"""
    SUFFIX = """\


If you have any questions, comments, or suggestions regarding these
documents, please send them via email to python-docs@python.org.
"""

def count_pages(filename):
    fp = open(filename)
    count = 0
    while 1:
        lines = fp.readlines(1024*40)
        if not lines:
            break
        for line in lines:
            if line[:7] == "%%Page:":
                count = count + 1
    fp.close()
    return count


def main():
    PageCounter().run()

if __name__ == "__main__":
    main()
