'Handles PDF-related keywords.'

def do_keyword(self, pos, token):

    if (token in (self.KEYWORD_XREF, self.KEYWORD_STARTXREF)):
        self.add_results(*self.pop(1))
    elif (token is self.KEYWORD_ENDOBJ):
        self.add_results(*self.pop(4))
    elif (token is self.KEYWORD_NULL):
        self.push((pos, None))
    elif (token is self.KEYWORD_R):
        try:
            ((_, objid), (_, genno)) = self.pop(2)
            (objid, genno) = (int(objid), int(genno))
            obj = PDFObjRef(self.doc, objid, genno)
            self.push((pos, obj))
        except PSSyntaxError:
            pass
    elif (token is self.KEYWORD_STREAM):
        ((_, dic),) = self.pop(1)
        dic = dict_value(dic)
        objlen = 0
        if (not self.fallback):
            try:
                objlen = int_value(dic['Length'])
            except KeyError:
                if STRICT:
                    raise PDFSyntaxError(('/Length    is    undefined:    %r' % dic))
        self.seek(pos)
        try:
            (_, line) = self.nextline()
        except PSEOF:
            if STRICT:
                raise PDFSyntaxError('Unexpected    EOF')
            return
        pos += len(line)
        self.fp.seek(pos)
        data = self.fp.read(objlen)
        self.seek((pos + objlen))
        while 1:
            try:
                (linepos, line) = self.nextline()
            except PSEOF:
                if STRICT:
                    raise PDFSyntaxError('Unexpected    EOF')
                break
            if ('endstream' in line):
                i = line.index('endstream')
                objlen += i
                data += line[:i]
                break
            objlen += len(line)
            data += line
        self.seek((pos + objlen))
        if (2 <= self.debug):
            print >>sys.stderr, ('Stream:    pos=%d,    objlen=%d,    dic=%r,    data=%r...' % (pos, objlen, dic, data[:10]))
        obj = PDFStream(dic, data, self.doc.decipher)
        self.push((pos, obj))
    else:
        self.push((pos, token))
    return
