Show
Ignore:
Timestamp:
07/22/05 16:22:46 (19 years ago)
Author:
jerome
Message:

Improved PCLXL parser.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pkpgcounter/trunk/pkpgpdls/pclxl.py

    r235 r245  
    238238        return 0 
    239239     
     240    def reservedForFutureUse(self) : 
     241        """Outputs something when a reserved byte is encountered.""" 
     242        if self.debug : 
     243            sys.stderr.write("Byte at %s is out of the PCLXL Protocol Class 2.0 Specification\n" % self.pos) 
     244        return 0     
     245         
     246    def escape(self) :     
     247        """Handles the ESC code.""" 
     248        pos = endpos = self.pos 
     249        if self.minfile[pos : pos+8] == r"%-12345X" : 
     250            endpos = pos + 9 
     251            endmark = chr(0x0c) + chr(0x00) 
     252            while self.minfile[endpos] not in endmark : 
     253                endpos += 1 
     254                 
     255            # Store this in a per page mapping.     
     256            # NB : First time will be at page 0 (i.e. **before** page 1) ! 
     257            stuff = self.escapedStuff.setdefault(self.pagecount, []) 
     258            stuff.append(self.minfile[pos : endpos]) 
     259            if self.debug : 
     260                sys.stderr.write("Escaped datas : [%s]\n" % repr(self.minfile[pos : endpos])) 
     261        return endpos - pos 
     262         
    240263    def getJobSize(self) : 
    241264        """Counts pages in a PCLXL (PCL6) document. 
     
    273296        self.tags = [ 0 ] * 256     
    274297         
     298        self.tags[0x1b] = self.escape # The escape code 
     299         
    275300        # GhostScript's sources tell us that HP printers 
    276301        # only accept little endianness, but we can handle both. 
     
    280305        self.tags[0x43] = self.beginPage    # BeginPage 
    281306        self.tags[0x44] = self.endPage      # EndPage 
     307        self.tags[0x45] = self.reservedForFutureUse # reserved 
     308        self.tags[0x46] = self.reservedForFutureUse # reserved 
     309         
     310        self.tags[0x4a] = self.reservedForFutureUse # reserved 
     311        self.tags[0x4b] = self.reservedForFutureUse # reserved 
     312        self.tags[0x4c] = self.reservedForFutureUse # reserved 
     313        self.tags[0x4d] = self.reservedForFutureUse # reserved 
     314        self.tags[0x4e] = self.reservedForFutureUse # reserved 
     315         
     316        self.tags[0x56] = self.reservedForFutureUse # TODO : documentation not clear about reserved status 
     317         
     318        self.tags[0x57] = self.reservedForFutureUse # reserved 
     319        self.tags[0x58] = self.reservedForFutureUse # reserved 
     320        self.tags[0x59] = self.reservedForFutureUse # reserved 
     321        self.tags[0x5a] = self.reservedForFutureUse # reserved 
    282322         
    283323        self.tags[0x6a] = self.setColorSpace    # to detect color/b&w mode 
     324         
     325        self.tags[0x83] = self.reservedForFutureUse # reserved 
     326         
     327        self.tags[0x87] = self.reservedForFutureUse # reserved 
     328        self.tags[0x88] = self.reservedForFutureUse # reserved 
     329        self.tags[0x89] = self.reservedForFutureUse # reserved 
     330        self.tags[0x8a] = self.reservedForFutureUse # reserved 
     331        self.tags[0x8b] = self.reservedForFutureUse # reserved 
     332        self.tags[0x8c] = self.reservedForFutureUse # reserved 
     333        self.tags[0x8d] = self.reservedForFutureUse # reserved 
     334        self.tags[0x8e] = self.reservedForFutureUse # reserved 
     335        self.tags[0x8f] = self.reservedForFutureUse # reserved 
     336        self.tags[0x90] = self.reservedForFutureUse # reserved 
     337         
     338        self.tags[0x92] = self.reservedForFutureUse # reserved 
     339         
     340        self.tags[0x94] = self.reservedForFutureUse # reserved 
     341         
     342        self.tags[0x9a] = self.reservedForFutureUse # reserved 
     343        self.tags[0x9c] = self.reservedForFutureUse # reserved 
     344         
     345        self.tags[0xa4] = self.reservedForFutureUse # reserved 
     346        self.tags[0xa5] = self.reservedForFutureUse # reserved 
     347        self.tags[0xa6] = self.reservedForFutureUse # reserved 
     348        self.tags[0xa7] = self.reservedForFutureUse # reserved 
     349         
     350        self.tags[0xaa] = self.reservedForFutureUse # reserved 
     351        self.tags[0xab] = self.reservedForFutureUse # reserved 
     352        self.tags[0xac] = self.reservedForFutureUse # reserved 
     353        self.tags[0xad] = self.reservedForFutureUse # reserved 
     354        self.tags[0xae] = self.reservedForFutureUse # reserved 
     355        self.tags[0xaf] = self.reservedForFutureUse # reserved 
     356         
     357        self.tags[0xb7] = self.reservedForFutureUse # reserved 
     358         
     359        self.tags[0xba] = self.reservedForFutureUse # reserved 
     360        self.tags[0xbb] = self.reservedForFutureUse # reserved 
     361        self.tags[0xbc] = self.reservedForFutureUse # reserved 
     362        self.tags[0xbd] = self.reservedForFutureUse # reserved 
     363        self.tags[0xbe] = self.reservedForFutureUse # reserved 
     364        self.tags[0xbf] = self.reservedForFutureUse # reserved 
    284365         
    285366        self.tags[0xc0] = 1 # ubyte 
     
    290371        self.tags[0xc5] = 4 # real32 
    291372         
     373        self.tags[0xc6] = self.reservedForFutureUse # reserved 
     374        self.tags[0xc7] = self.reservedForFutureUse # reserved 
     375         
    292376        self.tags[0xc8] = self.array_8  # ubyte_array 
    293377        self.tags[0xc9] = self.array_16 # uint16_array 
     
    297381        self.tags[0xcd] = self.array_32 # real32_array 
    298382         
     383        self.tags[0xce] = self.reservedForFutureUse # reserved 
     384        self.tags[0xcf] = self.reservedForFutureUse # reserved 
     385         
    299386        self.tags[0xd0] = 2 # ubyte_xy 
    300387        self.tags[0xd1] = 4 # uint16_xy 
     
    303390        self.tags[0xd4] = 8 # sint32_xy 
    304391        self.tags[0xd5] = 8 # real32_xy 
     392        self.tags[0xd6] = self.reservedForFutureUse # reserved 
     393        self.tags[0xd7] = self.reservedForFutureUse # reserved 
     394        self.tags[0xd8] = self.reservedForFutureUse # reserved 
     395        self.tags[0xd9] = self.reservedForFutureUse # reserved 
     396        self.tags[0xda] = self.reservedForFutureUse # reserved 
     397        self.tags[0xdb] = self.reservedForFutureUse # reserved 
     398        self.tags[0xdc] = self.reservedForFutureUse # reserved 
     399        self.tags[0xdd] = self.reservedForFutureUse # reserved 
     400        self.tags[0xde] = self.reservedForFutureUse # reserved 
     401        self.tags[0xdf] = self.reservedForFutureUse # reserved 
    305402         
    306403        self.tags[0xe0] = 4  # ubyte_box 
     
    310407        self.tags[0xe4] = 16 # sint32_box 
    311408        self.tags[0xe5] = 16 # real32_box 
     409        self.tags[0xe6] = self.reservedForFutureUse # reserved 
     410        self.tags[0xe7] = self.reservedForFutureUse # reserved 
     411        self.tags[0xe8] = self.reservedForFutureUse # reserved 
     412        self.tags[0xe9] = self.reservedForFutureUse # reserved 
     413        self.tags[0xea] = self.reservedForFutureUse # reserved 
     414        self.tags[0xeb] = self.reservedForFutureUse # reserved 
     415        self.tags[0xec] = self.reservedForFutureUse # reserved 
     416        self.tags[0xed] = self.reservedForFutureUse # reserved 
     417        self.tags[0xee] = self.reservedForFutureUse # reserved 
     418        self.tags[0xef] = self.reservedForFutureUse # reserved 
     419         
     420        self.tags[0xf0] = self.reservedForFutureUse # reserved 
     421        self.tags[0xf1] = self.reservedForFutureUse # reserved 
     422        self.tags[0xf2] = self.reservedForFutureUse # reserved 
     423        self.tags[0xf3] = self.reservedForFutureUse # reserved 
     424        self.tags[0xf4] = self.reservedForFutureUse # reserved 
     425        self.tags[0xf5] = self.reservedForFutureUse # reserved 
     426        self.tags[0xf6] = self.reservedForFutureUse # reserved 
     427        self.tags[0xf7] = self.reservedForFutureUse # reserved 
    312428         
    313429        self.tags[0xf8] = 1 # attr_ubyte 
     
    316432        self.tags[0xfa] = self.embeddedData      # dataLength 
    317433        self.tags[0xfb] = self.embeddedDataSmall # dataLengthByte 
     434         
     435        self.tags[0xfc] = self.reservedForFutureUse # reserved 
     436        self.tags[0xfd] = self.reservedForFutureUse # reserved 
     437        self.tags[0xfe] = self.reservedForFutureUse # reserved 
     438        self.tags[0xff] = self.reservedForFutureUse # reserved 
    318439             
    319440        # color spaces     
     
    330451        tags = self.tags 
    331452        self.pagecount = 0 
    332         self.pos = pos = self.infile.tell() 
     453        self.escapedStuff = {} 
     454        self.pos = pos = 0 
    333455        try : 
    334456            while 1 : 
     
    367489                                                          page["mediasource"],  
    368490                                                          colormode)) 
    369              
    370491        return self.pagecount 
    371492