#! /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"),
            ("inst", "Installing Python Modules"),
            ("dist", "Distributing Python Modules"),
            ]:
            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.  It is formatted for printing on two-sided paper; if you do plan
to print this, *please* print two-sided if you have a printer capable
of it!  To locate published copies of the larger manuals, or other
Python reference material, consult the PSA Online Bookstore at:

             http://www.python.org/psa/bookstore/

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.

If you would like to support the development and maintenance of
documentation for Python, please consider joining the Python Software
Activity (PSA; see http://www.python.org/psa/), or urging your
organization to join the PSA or the Python Consortium (see
http://www.python.org/consortium/).
"""

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()
