Changeset 450 for pkpgcounter/trunk

Show
Ignore:
Timestamp:
02/08/07 22:23:59 (17 years ago)
Author:
jerome
Message:

Now uses Python's universal newline detection to read input files,
and also uses file objects directly instead of calling their xreadlines()
method.
Fixed an accounting problem in the PDF parser for some type of files.

Location:
pkpgcounter/trunk
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • pkpgcounter/trunk/man/pkpgcounter.1

    r445 r450  
    11.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.36. 
    2 .TH PKPGCOUNTER "1" "January 2007" "C@LL - Conseil Internet & Logiciels Libres" "User Commands" 
     2.TH PKPGCOUNTER "1" "February 2007" "C@LL - Conseil Internet & Logiciels Libres" "User Commands" 
    33.SH NAME 
    4 pkpgcounter \- manual page for pkpgcounter 2.14 
     4pkpgcounter \- manual page for pkpgcounter 2.15 
    55.SH DESCRIPTION 
    6 pkpgcounter v2.14 (c) 2003, 2004, 2005, 2006, 2007 Jerome Alet 
     6pkpgcounter v2.15 (c) 2003, 2004, 2005, 2006, 2007 Jerome Alet 
    77.PP 
    88pkpgcounter is a generic Page Description Language parser. 
  • pkpgcounter/trunk/NEWS

    r444 r450  
    2222pkpgcounter News : 
    2323 
     24  * 2.15 : 
     25    
     26    - Fixed a regexp in the PDF parser which caused some files to be 
     27      incorrectly accounted for. 
     28     
     29    - Improved the detection of the number of copies in PostScript documents. 
     30     
    2431  * 2.14 : 
    2532   
  • pkpgcounter/trunk/pkpgpdls/analyzer.py

    r443 r450  
    110110        else :     
    111111            # normal file 
    112             self.infile = open(self.filename, "rb") 
     112            self.infile = open(self.filename, "rbU") 
    113113            self.mustclose = 1 
    114114            return 
    115115             
    116116        # Use a temporary file, always seekable contrary to standard input. 
    117         self.infile = tempfile.TemporaryFile(mode="w+b") 
     117        self.infile = tempfile.TemporaryFile(mode="w+bU") 
    118118        while 1 : 
    119119            data = infile.read(pdlparser.MEGABYTE)  
  • pkpgcounter/trunk/pkpgpdls/pdf.py

    r428 r450  
    6262        inobject = 0 
    6363        objre = re.compile(r"\s?(\d+)\s+(\d+)\s+obj[<\s/]?") 
    64         for fullline in self.infile.xreadlines() : 
    65             parts = [ l.strip() for l in fullline.splitlines() ] 
    66             for line in parts : 
    67                 if line.startswith("% ") :     
     64        for line in self.infile : 
     65            line = line.strip() 
     66            if line.startswith("% ") :     
     67                if inobject : 
     68                    obj.comments.append(line) 
     69                else : 
     70                    lastcomment = line[2:] 
     71            else : 
     72                # New object begins here 
     73                result = objre.search(line) 
     74                if result is not None : 
     75                    (major, minor) = [int(num) for num in line[result.start():result.end()].split()[:2]] 
     76                    obj = PDFObject(major, minor, lastcomment) 
     77                    obj.content.append(line[result.end():]) 
     78                    inobject = 1 
     79                elif line.startswith("endobj") \ 
     80                  or line.startswith(">> endobj") \ 
     81                  or line.startswith(">>endobj") : 
     82                    # Handle previous object, if any 
    6883                    if inobject : 
    69                         obj.comments.append(line) 
    70                     else : 
    71                         lastcomment = line[2:] 
    72                 else : 
    73                     # New object begins here 
    74                     result = objre.search(line) 
    75                     if result is not None : 
    76                         (major, minor) = [int(num) for num in line[result.start():result.end()].split()[:2]] 
    77                         obj = PDFObject(major, minor, lastcomment) 
    78                         obj.content.append(line[result.end():]) 
    79                         inobject = 1 
    80                     elif line.startswith("endobj") \ 
    81                       or line.startswith(">> endobj") \ 
    82                       or line.startswith(">>endobj") : 
    83                         # Handle previous object, if any 
    84                         if inobject : 
    85                             # only overwrite older versions of this object 
    86                             # same minor seems to be possible, so the latest one 
    87                             # found in the file will be the one we keep. 
    88                             # if we want the first one, just use > instead of >= 
    89                             oldobject = objects.setdefault(major, obj) 
    90                             if minor >= oldobject.minor : 
    91                                 objects[major] = obj 
    92                             inobject = 0         
    93                     else :     
    94                         if inobject : 
    95                             obj.content.append(line) 
     84                        # only overwrite older versions of this object 
     85                        # same minor seems to be possible, so the latest one 
     86                        # found in the file will be the one we keep. 
     87                        # if we want the first one, just use > instead of >= 
     88                        oldobject = objects.setdefault(major, obj) 
     89                        if minor >= oldobject.minor : 
     90                            objects[major] = obj 
     91                        inobject = 0         
     92                else :     
     93                    if inobject : 
     94                        obj.content.append(line) 
    9695                         
    9796        # Now we check each PDF object we've just created. 
    9897        # colorregexp = re.compile(r"(/ColorSpace) ?(/DeviceRGB|/DeviceCMYK)[/ \t\r\n]", re.I) 
    99         newpageregexp = re.compile(r"(/Type)\s?(/Page)[/\s]", re.I) 
     98        newpageregexp = re.compile(r"(/Type)\s?(/Page)[/>\s]", re.I) 
    10099        pagecount = 0 
    101100        for obj in objects.values() : 
    102101            content = "".join(obj.content) 
    103102            count = len(newpageregexp.findall(content)) 
    104             pagecount += count 
     103            if count and (content != r"<</Type /Page>>") : # Empty pages which are not rendered ? 
     104                pagecount += count 
    105105        return pagecount     
    106106         
  • pkpgcounter/trunk/pkpgpdls/pdlparser.py

    r443 r450  
    140140            mustclose = 0 
    141141        else :     
    142             infile = open(arg, "rb") 
     142            infile = open(arg, "rbU") 
    143143            mustclose = 1 
    144144        try : 
  • pkpgcounter/trunk/pkpgpdls/postscript.py

    r448 r450  
    9191        acrobatmarker = 0 
    9292        pagescomment = None 
    93         for line in self.infile.xreadlines() :  
     93        for line in self.infile :  
    9494            if (not prescribe) and line.startswith(r"%%BeginResource: procset pdf") \ 
    9595               and not acrobatmarker : 
  • pkpgcounter/trunk/pkpgpdls/version.py

    r447 r450  
    2323 
    2424 
    25 __version__ = "2.15alpha" 
     25__version__ = "2.15" 
    2626 
    2727__doc__ = """pkpgcounter : a generic Page Description Languages parser."""