Changeset 1676

Show
Ignore:
Timestamp:
08/22/04 01:16:57 (20 years ago)
Author:
jalet
Message:

First draft of ESC/P2 (mini-)parser.

Location:
pykota/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/NEWS

    r1675 r1676  
    2222PyKota NEWS : 
    2323 
     24    - 1.20alpha2 : 
     25     
     26        - First version of ESC/P2 analyzer. Seems to work 
     27          ok at least with 'epson', 'epsonc', 'eps9mid'  
     28          and 'esp9high' ghostscript devices. Needs more 
     29          work to correctly analyze other devices. 
     30         
    2431    - 1.20alpha1 :  
    2532     
  • pykota/trunk/pykota/pdlanalyzer.py

    r1675 r1676  
    2222# 
    2323# $Log$ 
     24# Revision 1.30  2004/08/21 23:16:57  jalet 
     25# First draft of ESC/P2 (mini-)parser. 
     26# 
    2427# Revision 1.29  2004/08/11 16:25:38  jalet 
    2528# Fixed index problem in PCLXL parser when retrieving number of copies for 
     
    213216        for line in self.infile.xreadlines() :  
    214217            pagecount += len(regexp.findall(line)) 
     218        return pagecount     
     219         
     220class ESCP2Analyzer : 
     221    def __init__(self, infile) : 
     222        """Initialize ESC/P2 Analyzer.""" 
     223        self.infile = infile 
     224                 
     225    def getJobSize(self) :     
     226        """Counts pages in an ESC/P2 document.""" 
     227        # typical new page marker is Carriage Return (with optional Line Feed) 
     228        # followed by Form Feed, followed by Escape character 
     229        marker1 = chr(13) + chr(12) + chr(27) 
     230        marker2 = chr(13) + chr(10) + chr(12) + chr(27) 
     231        pagecount = 0 
     232        for line in self.infile.xreadlines() :  
     233            c = line.count(marker1) 
     234            if not c : 
     235                c = line.count(marker2) 
     236            pagecount += c     
    215237        return pagecount     
    216238         
     
    685707            return 0 
    686708             
     709    def isESCP2(self, data) :         
     710        """Returns 1 if data is ESC/P2, else 0.""" 
     711        if (data[:2] == "\033@") or (data[:2] == "\033*") : 
     712            return 1 
     713        else :     
     714            return 0 
     715     
    687716    def detectPDLHandler(self) :     
    688717        """Tries to autodetect the document format. 
     
    702731        elif self.isPDF(firstblock) :     
    703732            return PDFAnalyzer 
     733        elif self.isESCP2(firstblock) :     
     734            return ESCP2Analyzer 
    704735        else :     
    705736            raise PDLAnalyzerError, "Analysis of first data block failed." 
  • pykota/trunk/pykota/version.py

    r1665 r1676  
    2222# 
    2323 
    24 __version__ = "1.20alpha1_unofficial" 
     24__version__ = "1.20alpha2_unofficial" 
    2525 
    2626__doc__ = """PyKota : a complete Printing Quota Solution for CUPS and LPRng.""" 
  • pykota/trunk/tests/runtest.sh

    r1589 r1676  
    44/bin/rm -f testsuite.* master2.ps 
    55gunzip <master.ps.gz >master2.ps 
    6 for device in laserjet ljet3 ljet4 lj5gray lj5mono pxlmono pxlcolor pdfwrite pswrite psgray psmono psrgb ; do 
     6for device in laserjet ljet3 ljet4 lj5gray lj5mono pxlmono pxlcolor pdfwrite pswrite psgray psmono psrgb epson epsonc eps9mid eps9high ; do 
    77    gs -dQUIET -dBATCH -dNOPAUSE -sOutputFile="testsuite.$device" -sDEVICE="$device" master2.ps ; 
    88    done