Show
Ignore:
Timestamp:
02/09/06 23:04:48 (19 years ago)
Author:
jerome
Message:

Simplified code again, with a small loss performance.

Files:
1 modified

Legend:

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

    r316 r317  
    176176    def endPage(self, prevpos) :     
    177177        """Indicates the end of a page.""" 
    178         pos = prevpos 
    179         pos3 = pos - 3 
     178        pos3 = prevpos - 3 
    180179        minfile = self.minfile 
    181         if minfile[pos3:pos-1] == self.setNumberOfCopies : 
     180        if minfile[pos3:prevpos-1] == self.setNumberOfCopies : 
    182181            # The EndPage operator may be preceded by a PageCopies attribute 
    183182            # So set number of copies for current page. 
     
    185184            # of copies is an unsigned 16 bits integer 
    186185            try : 
    187                 self.pages[self.pagecount]["copies"] = unpack(self.unpackShort, minfile[pos-5:pos3])[0] 
     186                self.pages[self.pagecount]["copies"] = unpack(self.unpackShort, minfile[pos3-2:pos3])[0] 
    188187            except KeyError :     
    189188                self.logdebug("It looks like this PCLXL file is corrupted.") 
     
    192191    def setColorSpace(self, prevpos) :     
    193192        """Changes the color space.""" 
    194         if self.minfile[prevpos-4:prevpos-1] == self.RGBColorSpace : 
     193        if self.minfile[prevpos-4:prevpos-1] == self.RGBColorSpace : # TODO : doesn't seem to handle all cases ! 
    195194            self.iscolor = 1 
    196195        return 0 
    197196             
    198     def array_8(self, prevpos) :     
    199         """Handles byte arrays.""" 
     197    def array_Generic(self, prevpos, size) : 
     198        """Handles all arrays.""" 
    200199        pos = prevpos 
    201         datatype = self.minfile[pos] 
     200        datatype = ord(self.minfile[pos]) 
    202201        pos += 1 
    203         length = self.tags[ord(datatype)] 
     202        length = self.tags[datatype] 
    204203        if callable(length) : 
    205204            length = length(pos) 
    206205        posl = pos + length 
    207206        if length == 1 :     
    208             return 1 + length + unpack("B", self.minfile[pos:posl])[0] 
     207            return 1 + length + size * unpack("B", self.minfile[pos:posl])[0] 
    209208        elif length == 2 :     
    210             return 1 + length + unpack(self.unpackShort, self.minfile[pos:posl])[0] 
     209            return 1 + length + size * unpack(self.unpackShort, self.minfile[pos:posl])[0] 
    211210        elif length == 4 :     
    212             return 1 + length + unpack(self.unpackLong, self.minfile[pos:posl])[0] 
     211            return 1 + length + size * unpack(self.unpackLong, self.minfile[pos:posl])[0] 
    213212        else :     
    214213            raise pdlparser.PDLParserError, "Error on array size at %x" % prevpos 
     214             
     215    def array_8(self, prevpos) :     
     216        """Handles byte arrays.""" 
     217        return self.array_Generic(prevpos, 1) 
    215218         
    216219    def array_16(self, prevpos) : 
    217220        """Handles byte arrays.""" 
    218         pos = prevpos 
    219         datatype = self.minfile[pos] 
    220         pos += 1 
    221         length = self.tags[ord(datatype)] 
    222         if callable(length) : 
    223             length = length(pos) 
    224         posl = pos + length 
    225         if length == 1 :     
    226             return 1 + length + 2 * unpack("B", self.minfile[pos:posl])[0] 
    227         elif length == 2 :     
    228             return 1 + length + 2 * unpack(self.unpackShort, self.minfile[pos:posl])[0] 
    229         elif length == 4 :     
    230             return 1 + length + 2 * unpack(self.unpackLong, self.minfile[pos:posl])[0] 
    231         else :     
    232             raise pdlparser.PDLParserError, "Error on array size at %x" % prevpos 
     221        return self.array_Generic(prevpos, 2) 
    233222         
    234223    def array_32(self, prevpos) : 
    235224        """Handles byte arrays.""" 
    236         pos = prevpos 
    237         datatype = self.minfile[pos] 
    238         pos += 1 
    239         length = self.tags[ord(datatype)] 
    240         if callable(length) : 
    241             length = length(pos) 
    242         posl = pos + length 
    243         if length == 1 :     
    244             return 1 + length + 4 * unpack("B", self.minfile[pos:posl])[0] 
    245         elif length == 2 :     
    246             return 1 + length + 4 * unpack(self.unpackShort, self.minfile[pos:posl])[0] 
    247         elif length == 4 :     
    248             return 1 + length + 4 * unpack(self.unpackLong, self.minfile[pos:posl])[0] 
    249         else :     
    250             raise pdlparser.PDLParserError, "Error on array size at %x" % prevpos 
     225        return self.array_Generic(prevpos, 4) 
    251226         
    252227    def embeddedDataSmall(self, prevpos) : 
     
    260235    def littleEndian(self, prevpos) : 
    261236        """Toggles to little endianness.""" 
    262         self.endianness = "<" # little endian 
    263237        self.unpackShort = "<H" 
    264238        self.unpackLong = "<I" 
     
    267241    def bigEndian(self, prevpos) : 
    268242        """Toggles to big endianness.""" 
    269         self.endianness = ">" # big endian 
    270243        self.unpackShort = ">H" 
    271244        self.unpackLong = ">I" 
     
    285258            if (val == 0xf8) and (ord(minfile[pos+1]) in (0x95, 0x96)) : 
    286259                pos += 2 
    287                 ordatatype = ord(self.minfile[pos]) 
    288                 if ordatatype == 0x46 : 
     260                datatype = ord(self.minfile[pos]) 
     261                if datatype == 0x46 : 
    289262                    break 
    290263                pos += 1 
    291                 length = self.tags[ordatatype] 
     264                length = self.tags[datatype] 
    292265                posl = pos + length 
    293266                if length == 1 :     
     
    359332        """ 
    360333        self.iscolor = None 
    361         self.endianness = None 
    362334        found = 0 
    363335        while not found :