| /* | 
 |  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef _xmlbuilder_h_ | 
 | #define _xmlbuilder_h_ | 
 |  | 
 | #include <string> | 
 | #include <vector> | 
 | #include "webrtc/libjingle/xmllite/xmlparser.h" | 
 | #include "webrtc/base/scoped_ptr.h" | 
 |  | 
 | #ifdef EXPAT_RELATIVE_PATH | 
 | #include "expat.h" | 
 | #else | 
 | #include "third_party/expat/v2_0_1/Source/lib/expat.h" | 
 | #endif  // EXPAT_RELATIVE_PATH | 
 |  | 
 | namespace buzz { | 
 |  | 
 | class XmlElement; | 
 | class XmlParseContext; | 
 |  | 
 |  | 
 | class XmlBuilder : public XmlParseHandler { | 
 | public: | 
 |   XmlBuilder(); | 
 |  | 
 |   static XmlElement * BuildElement(XmlParseContext * pctx, | 
 |                                   const char * name, const char ** atts); | 
 |   virtual void StartElement(XmlParseContext * pctx, | 
 |                             const char * name, const char ** atts); | 
 |   virtual void EndElement(XmlParseContext * pctx, const char * name); | 
 |   virtual void CharacterData(XmlParseContext * pctx, | 
 |                              const char * text, int len); | 
 |   virtual void Error(XmlParseContext * pctx, XML_Error); | 
 |   virtual ~XmlBuilder(); | 
 |  | 
 |   void Reset(); | 
 |  | 
 |   // Take ownership of the built element; second call returns NULL | 
 |   XmlElement * CreateElement(); | 
 |  | 
 |   // Peek at the built element without taking ownership | 
 |   XmlElement * BuiltElement(); | 
 |  | 
 | private: | 
 |   XmlElement * pelCurrent_; | 
 |   rtc::scoped_ptr<XmlElement> pelRoot_; | 
 |   rtc::scoped_ptr<std::vector<XmlElement*> > pvParents_; | 
 | }; | 
 |  | 
 | } | 
 |  | 
 | #endif |