Home | History | Annotate | Download | only in xmllite
      1 /*
      2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef _xmlbuilder_h_
     12 #define _xmlbuilder_h_
     13 
     14 #include <string>
     15 #include <vector>
     16 #include "webrtc/libjingle/xmllite/xmlparser.h"
     17 #include "webrtc/base/scoped_ptr.h"
     18 
     19 #ifdef EXPAT_RELATIVE_PATH
     20 #include "expat.h"
     21 #else
     22 #include "third_party/expat/v2_0_1/Source/lib/expat.h"
     23 #endif  // EXPAT_RELATIVE_PATH
     24 
     25 namespace buzz {
     26 
     27 class XmlElement;
     28 class XmlParseContext;
     29 
     30 
     31 class XmlBuilder : public XmlParseHandler {
     32 public:
     33   XmlBuilder();
     34 
     35   static XmlElement * BuildElement(XmlParseContext * pctx,
     36                                   const char * name, const char ** atts);
     37   virtual void StartElement(XmlParseContext * pctx,
     38                             const char * name, const char ** atts);
     39   virtual void EndElement(XmlParseContext * pctx, const char * name);
     40   virtual void CharacterData(XmlParseContext * pctx,
     41                              const char * text, int len);
     42   virtual void Error(XmlParseContext * pctx, XML_Error);
     43   virtual ~XmlBuilder();
     44 
     45   void Reset();
     46 
     47   // Take ownership of the built element; second call returns NULL
     48   XmlElement * CreateElement();
     49 
     50   // Peek at the built element without taking ownership
     51   XmlElement * BuiltElement();
     52 
     53 private:
     54   XmlElement * pelCurrent_;
     55   rtc::scoped_ptr<XmlElement> pelRoot_;
     56   rtc::scoped_ptr<std::vector<XmlElement*> > pvParents_;
     57 };
     58 
     59 }
     60 
     61 #endif
     62