research/brotlidump.py
def verboseRead(self, alphabet, context='', skipExtra=False):
        """Read symbol and extra from stream and explain what happens.
        Returns the value of the symbol
        >>> olleke.pos = 0
        >>> l = Layout(olleke)
        >>> l.verboseRead(WindowSizeAlphabet())
        0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288
        4194288
        """
        #TODO 2: verbosity level, e.g. show only codes and maps in header
        stream = self.stream
        pos = stream.pos
        if skipExtra:
            length, symbol = alphabet.readTuple(stream)
            extraBits, extra = 0, None
        else:
            length, symbol, extraBits, extra = alphabet.readTupleAndExtra(
                stream)
        #fields: address, hex data, binary data, name of alphabet, explanation
        hexdata = self.makeHexData(pos)
        addressField = '{:04x}'.format(pos+7>>3) if hexdata else ''
        bitdata = self.formatBitData(pos, length, extraBits)
        #bitPtr moves bitdata so that the bytes are easier to read
        #jump back to right if a new byte starts
        if '|' in bitdata[1:]:
            #start over on the right side
            self.bitPtr = self.width
        fillWidth = self.bitPtr-(len(hexdata)+len(bitdata))
        if fillWidth<0: fillWidth = 0
        print('{:<5s} {:<{}s} {:7s} {}'.format(
            addressField,
            hexdata+' '*fillWidth+bitdata, self.width,
            context+alphabet.name,
            symbol if skipExtra else symbol.explanation(extra),
            ))
        #jump to the right if we started with a '|'
        #because we didn't jump before printing
        if bitdata.startswith('|'): self.bitPtr = self.width
        else: self.bitPtr -= len(bitdata)
        return symbol if skipExtra else symbol.value(extra)
def verboseRead(self, alphabet, context='', skipExtra=False):
        """Read symbol and extra from stream and explain what happens.
        Returns the value of the symbol
        >>> olleke.pos = 0
        >>> l = Layout(olleke)
        >>> l.verboseRead(WindowSizeAlphabet())
        0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288
        4194288
        """
        #TODO 2: verbosity level, e.g. show only codes and maps in header
        stream = self.stream
        pos = stream.pos
        if skipExtra:
            length, symbol = alphabet.readTuple(stream)
            extraBits, extra = 0, None
        else:
            length, symbol, extraBits, extra = alphabet.readTupleAndExtra(
                stream)
        #fields: address, hex data, binary data, name of alphabet, explanation
        hexdata = self.makeHexData(pos)
        addressField = '{:04x}'.format(pos+7>>3) if hexdata else ''
        bitdata = self.formatBitData(pos, length, extraBits)
        #bitPtr moves bitdata so that the bytes are easier to read
        #jump back to right if a new byte starts
        if '|' in bitdata[1:]:
            #start over on the right side
            self.bitPtr = self.width
        fillWidth = self.bitPtr-(len(hexdata)+len(bitdata))
        if fillWidth<0: fillWidth = 0
        print('{:<5s} {:<{}s} {:7s} {}'.format(
            addressField,
            hexdata+' '*fillWidth+bitdata, self.width,
            context+alphabet.name,
            symbol if skipExtra else symbol.explanation(extra),
            ))
        #jump to the right if we started with a '|'
        #because we didn't jump before printing
        if bitdata.startswith('|'): self.bitPtr = self.width
        else: self.bitPtr -= len(bitdata)
        return symbol if skipExtra else symbol.value(extra)
def verboseRead ( self , alphabet , context = '' , skipExtra = False ) : #TODO 2: verbosity level, e.g. show only codes and maps in header stream = self . stream pos = stream . pos if skipExtra : length , symbol = alphabet . readTuple ( stream ) extraBits , extra = 0 , None else : length , symbol , extraBits , extra = alphabet . readTupleAndExtra ( stream ) #fields: address, hex data, binary data, name of alphabet, explanation hexdata = self . makeHexData ( pos ) addressField = '{:04x}' . format ( pos + 7 >> 3 ) if hexdata else '' bitdata = self . formatBitData ( pos , length , extraBits ) #bitPtr moves bitdata so that the bytes are easier to read #jump back to right if a new byte starts if '|' in bitdata [ 1 : ] : #start over on the right side self . bitPtr = self . width fillWidth = self . bitPtr - ( len ( hexdata ) + len ( bitdata ) ) if fillWidth < 0 : fillWidth = 0 print ( '{:<5s} {:<{}s} {:7s} {}' . format ( addressField , hexdata + ' ' * fillWidth + bitdata , self . width , context + alphabet . name , symbol if skipExtra else symbol . explanation ( extra ) , ) ) #jump to the right if we started with a '|' #because we didn't jump before printing if bitdata . startswith ( '|' ) : self . bitPtr = self . width else : self . bitPtr -= len ( bitdata ) return symbol if skipExtra else symbol . value ( extra )
Read symbol and extra from stream and explain what happens.
        Returns the value of the symbol
        >>> olleke.pos = 0
        >>> l = Layout(olleke)
        >>> l.verboseRead(WindowSizeAlphabet())
        0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288
        4194288
Read symbol and extra from stream and explain what happens . Returns the value of the symbol >>> olleke . pos = 0 >>> l = Layout ( olleke ) >>> l . verboseRead ( WindowSizeAlphabet () ) 0000 1b 1011 WSIZE windowsize = ( 1<<22 ) - 16 = 4194288 4194288