[webkit-changes] cvs commit: WebCore/khtml/xml xml_tokenizer.cpp

Anders andersca at opensource.apple.com
Fri Jan 6 02:39:56 PST 2006


andersca    06/01/06 02:39:56

  Modified:    .        ChangeLog
               khtml/xml xml_tokenizer.cpp
  Log:
  2006-01-06  Anders Carlsson  <andersca at mac.com>
  
          Reviewed by Eric.
  
          - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=5142
          parseXMLDocumentFragment can't parse fragments correctly
  
          * khtml/xml/xml_tokenizer.cpp:
          (khtml::balancedStartElementNsHandler):
          (khtml::balancedEndElementNsHandler):
          (khtml::balancedCharactersHandler):
          (khtml::balancedProcessingInstructionHandler):
          (khtml::balancedCdataBlockHandler):
          (khtml::balancedCommentHandler):
          (khtml::balancedWarningHandler):
          Add handlers.
  
          (khtml::parseXMLDocumentFragment):
          Change back into using xmlParseBalancedChunkMemory.
  
  Revision  Changes    Path
  1.92      +20 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.91
  retrieving revision 1.92
  diff -u -r1.91 -r1.92
  --- ChangeLog	6 Jan 2006 09:09:57 -0000	1.91
  +++ ChangeLog	6 Jan 2006 10:39:55 -0000	1.92
  @@ -1,3 +1,23 @@
  +2006-01-06  Anders Carlsson  <andersca at mac.com>
  +
  +        Reviewed by Eric.
  +
  +        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=5142
  +        parseXMLDocumentFragment can't parse fragments correctly
  +        
  +        * khtml/xml/xml_tokenizer.cpp:
  +        (khtml::balancedStartElementNsHandler):
  +        (khtml::balancedEndElementNsHandler):
  +        (khtml::balancedCharactersHandler):
  +        (khtml::balancedProcessingInstructionHandler):
  +        (khtml::balancedCdataBlockHandler):
  +        (khtml::balancedCommentHandler):
  +        (khtml::balancedWarningHandler):
  +        Add handlers.
  +        
  +        (khtml::parseXMLDocumentFragment):
  +        Change back into using xmlParseBalancedChunkMemory. 
  +
   2006-01-06  Alexander Kellett  <lypanov at kde.org>
   
           Reviewed by eseidel.
  
  
  
  1.63      +49 -13    WebCore/khtml/xml/xml_tokenizer.cpp
  
  Index: xml_tokenizer.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/xml/xml_tokenizer.cpp,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- xml_tokenizer.cpp	30 Dec 2005 05:43:23 -0000	1.62
  +++ xml_tokenizer.cpp	6 Jan 2006 10:39:55 -0000	1.63
  @@ -914,27 +914,63 @@
       xmlStopParser(m_context);
   }
   
  +static void balancedStartElementNsHandler(void *closure, const xmlChar *localname, const xmlChar *prefix, const xmlChar *uri, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **libxmlAttributes)
  +{
  +   static_cast<XMLTokenizer *>(closure)->startElementNs(localname, prefix, uri, nb_namespaces, namespaces, nb_attributes, nb_defaulted, libxmlAttributes);
  +}
  +
  +static void balancedEndElementNsHandler(void *closure, const xmlChar *localname, const xmlChar *prefix, const xmlChar *uri)
  +{
  +    static_cast<XMLTokenizer *>(closure)->endElementNs();
  +}
  +
  +static void balancedCharactersHandler(void *closure, const xmlChar *s, int len)
  +{
  +    static_cast<XMLTokenizer *>(closure)->characters(s, len);
  +}
  +
  +static void balancedProcessingInstructionHandler(void *closure, const xmlChar *target, const xmlChar *data)
  +{
  +    static_cast<XMLTokenizer *>(closure)->processingInstruction(target, data);
  +}
  +
  +static void balancedCdataBlockHandler(void *closure, const xmlChar *s, int len)
  +{
  +    static_cast<XMLTokenizer *>(closure)->cdataBlock(s, len);
  +}
  +
  +static void balancedCommentHandler(void *closure, const xmlChar *comment)
  +{
  +    static_cast<XMLTokenizer *>(closure)->comment(comment);
  +}
  +
  +static void balancedWarningHandler(void *closure, const char *message, ...)
  +{
  +    va_list args;
  +    va_start(args, message);
  +    static_cast<XMLTokenizer *>(closure)->error(XMLTokenizer::warning, message, args);
  +    va_end(args);
  +}
  +
   bool parseXMLDocumentFragment(const DOMString &string, DocumentFragmentImpl *fragment, ElementImpl *parent)
   {
       XMLTokenizer tokenizer(fragment, parent);
       
       xmlSAXHandler sax;
       memset(&sax, 0, sizeof(sax));
  -    sax.characters = charactersHandler;
  -    sax.processingInstruction = processingInstructionHandler;
  -    sax.startElementNs = startElementNsHandler;
  -    sax.endElementNs = endElementNsHandler;
  -    sax.cdataBlock = cdataBlockHandler;
  -    sax.comment = commentHandler;
  -    sax.warning = warningHandler;
  +
  +    sax.characters = balancedCharactersHandler;
  +    sax.processingInstruction = balancedProcessingInstructionHandler;
  +    sax.startElementNs = balancedStartElementNsHandler;
  +    sax.endElementNs = balancedEndElementNsHandler;
  +    sax.cdataBlock = balancedCdataBlockHandler;
  +    sax.ignorableWhitespace = balancedCdataBlockHandler;
  +    sax.comment = balancedCommentHandler;
  +    sax.warning = balancedWarningHandler;
       sax.initialized = XML_SAX2_MAGIC;
       
  -    xmlParserCtxtPtr parser = createQStringParser(&sax, &tokenizer);
  -    int result = parseQString(parser, string.qstring());
  -    if (parser->myDoc)
  -        xmlFreeDoc(parser->myDoc);
  -    xmlFreeParserCtxt(parser);
  -
  +    int result = xmlParseBalancedChunkMemory(0, &sax, &tokenizer, 0, 
  +                                            (const xmlChar*)(const char*)(string.qstring().utf8()), 0);
       return result == 0;
   }
   
  
  
  



More information about the webkit-changes mailing list