'Same as getPrevPosCharStyle, but does not move the buffer position.
@param ignore_styles {tuple}
@returns {tuple} with values (pos, char, style), these values will
all be None if it exceeds the max_look_back.
@raises IndexError can be raised when nothing left to consume.'

def peekPrevPosCharStyle(self, ignore_styles=None, max_look_back=100):

    old_pos = self._pos
    old_ch = self._ch
    old_style = self._style
    old_cachePos = self._cachePos
    old_cacheFirstBufPos = self._cacheFirstBufPos
    try:
        (pos, ch, style) = self.getPrevPosCharStyle(ignore_styles, max_look_back)
    finally:
        self._pos = old_pos
        self._ch = old_ch
        self._style = old_style
        cache_extended_by = (old_cacheFirstBufPos - self._cacheFirstBufPos)
        self._cachePos = (old_cachePos + cache_extended_by)
    if self._debug:
        print ('peekPrevPosCharStyle::    pos:%d    ch:%r    style:%d' % (pos, ch, style))
    return (pos, ch, style)
