def parse_declaration(self, i):
j = None<EOL>if self.rawdata[i:i+<NUM_LIT:9>] == '<STR_LIT>':<EOL><INDENT>k = self.rawdata.find('<STR_LIT>', i)<EOL>if k == -<NUM_LIT:1>:<EOL><INDENT>k = len(self.rawdata)<EOL><DEDENT>data = self.rawdata[i+<NUM_LIT:9>:k]<EOL>j = k+<NUM_LIT:3><EOL>self._toStringSubclass(data, CData)<EOL><DEDENT>else:<EOL><INDENT>try:<EOL><INDENT>j = SGMLParser.parse_declaration(self, i)<EOL><DEDENT>except SGMLParseError:<EOL><INDENT>toHandle = self.rawdata[i:]<EOL>self.handle_data(toHandle)<EOL>j = i + len(toHandle)<EOL><DEDENT><DEDENT>return j<EOL>
Treat a bogus SGML declaration as raw data. Treat a CDATA
        declaration as a CData object.