148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org/* 248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * 448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org */ 1048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlparser.h" 1248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <string> 1448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <vector> 1548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlconstants.h" 1748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlelement.h" 1848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlnsstack.h" 1948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlnsstack.h" 2048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/base/common.h" 2148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgnamespace buzz { 2348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgstatic void 2648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgStartElementCallback(void * userData, const char *name, const char **atts) { 2748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (static_cast<XmlParser *>(userData))->ExpatStartElement(name, atts); 2848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 2948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgstatic void 3148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgEndElementCallback(void * userData, const char *name) { 3248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (static_cast<XmlParser *>(userData))->ExpatEndElement(name); 3348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 3448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgstatic void 3648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgCharacterDataCallback(void * userData, const char *text, int len) { 3748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (static_cast<XmlParser *>(userData))->ExpatCharacterData(text, len); 3848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 3948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgstatic void 4148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlDeclCallback(void * userData, const char * ver, const char * enc, int st) { 4248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (static_cast<XmlParser *>(userData))->ExpatXmlDecl(ver, enc, st); 4348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 4448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::XmlParser(XmlParseHandler *pxph) : 4648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org pxph_(pxph), sentError_(false) { 4748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org expat_ = XML_ParserCreate(NULL); 4848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetUserData(expat_, this); 4948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetElementHandler(expat_, StartElementCallback, EndElementCallback); 5048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetCharacterDataHandler(expat_, CharacterDataCallback); 5148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetXmlDeclHandler(expat_, XmlDeclCallback); 5248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 5348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 5548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::Reset() { 5648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (!XML_ParserReset(expat_, NULL)) { 5748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_ParserFree(expat_); 5848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org expat_ = XML_ParserCreate(NULL); 5948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 6048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetUserData(expat_, this); 6148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetElementHandler(expat_, StartElementCallback, EndElementCallback); 6248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetCharacterDataHandler(expat_, CharacterDataCallback); 6348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_SetXmlDeclHandler(expat_, XmlDeclCallback); 6448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.Reset(); 6548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org sentError_ = false; 6648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 6748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 6848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgstatic bool 6948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser_StartsWithXmlns(const char *name) { 7048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return name[0] == 'x' && 7148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name[1] == 'm' && 7248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name[2] == 'l' && 7348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name[3] == 'n' && 7448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name[4] == 's'; 7548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 7648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 7748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 7848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ExpatStartElement(const char *name, const char **atts) { 7948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (context_.RaisedError() != XML_ERROR_NONE) 8048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 8148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const char **att; 8248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.StartElement(); 8348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org for (att = atts; *att; att += 2) { 8448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (XmlParser_StartsWithXmlns(*att)) { 8548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if ((*att)[5] == '\0') { 8648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.StartNamespace("", *(att + 1)); 8748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 8848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org else if ((*att)[5] == ':') { 8948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (**(att + 1) == '\0') { 9048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // In XML 1.0 empty namespace illegal with prefix (not in 1.1) 9148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.RaiseError(XML_ERROR_SYNTAX); 9248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 9348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 9448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.StartNamespace((*att) + 6, *(att + 1)); 9548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 9648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 9748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 9848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.SetPosition(XML_GetCurrentLineNumber(expat_), 9948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentColumnNumber(expat_), 10048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentByteIndex(expat_)); 10148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org pxph_->StartElement(&context_, name, atts); 10248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 10348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 10448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 10548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ExpatEndElement(const char *name) { 10648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (context_.RaisedError() != XML_ERROR_NONE) 10748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 10848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.EndElement(); 10948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.SetPosition(XML_GetCurrentLineNumber(expat_), 11048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentColumnNumber(expat_), 11148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentByteIndex(expat_)); 11248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org pxph_->EndElement(&context_, name); 11348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 11448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 11548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 11648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ExpatCharacterData(const char *text, int len) { 11748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (context_.RaisedError() != XML_ERROR_NONE) 11848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 11948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.SetPosition(XML_GetCurrentLineNumber(expat_), 12048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentColumnNumber(expat_), 12148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentByteIndex(expat_)); 12248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org pxph_->CharacterData(&context_, text, len); 12348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 12448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 12548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 12648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ExpatXmlDecl(const char * ver, const char * enc, int standalone) { 12748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (context_.RaisedError() != XML_ERROR_NONE) 12848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 12948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (ver && std::string("1.0") != ver) { 13148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.RaiseError(XML_ERROR_SYNTAX); 13248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 13348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 13448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (standalone == 0) { 13648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.RaiseError(XML_ERROR_SYNTAX); 13748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 13848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 13948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 14048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (enc && !((enc[0] == 'U' || enc[0] == 'u') && 14148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (enc[1] == 'T' || enc[1] == 't') && 14248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org (enc[2] == 'F' || enc[2] == 'f') && 14348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org enc[3] == '-' && enc[4] =='8')) { 14448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.RaiseError(XML_ERROR_INCORRECT_ENCODING); 14548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return; 14648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 14748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 14848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 14948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgbool 15148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::Parse(const char *data, size_t len, bool isFinal) { 15248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (sentError_) 15348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return false; 15448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (XML_Parse(expat_, data, static_cast<int>(len), isFinal) != 15648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_STATUS_OK) { 15748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.SetPosition(XML_GetCurrentLineNumber(expat_), 15848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentColumnNumber(expat_), 15948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_GetCurrentByteIndex(expat_)); 16048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org context_.RaiseError(XML_GetErrorCode(expat_)); 16148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 16248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 16348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (context_.RaisedError() != XML_ERROR_NONE) { 16448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org sentError_ = true; 16548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org pxph_->Error(&context_, context_.RaisedError()); 16648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return false; 16748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 16848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 16948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return true; 17048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 17148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 17248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::~XmlParser() { 17348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XML_ParserFree(expat_); 17448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 17548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 17648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 17748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseXml(XmlParseHandler *pxph, std::string text) { 17848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser parser(pxph); 17948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org parser.Parse(text.c_str(), text.length(), true); 18048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 18148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 18248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::ParseContext() : 18348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_(), 18448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org raised_(XML_ERROR_NONE), 18548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org line_number_(0), 18648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org column_number_(0), 18748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org byte_index_(0) { 18848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 18948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 19148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::StartNamespace(const char *prefix, const char *ns) { 19248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_.AddXmlns(*prefix ? prefix : STR_EMPTY, ns); 19348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 19448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 19648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::StartElement() { 19748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_.PushFrame(); 19848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 19948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 20048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 20148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::EndElement() { 20248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_.PopFrame(); 20348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 20448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 20548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgQName 20648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::ResolveQName(const char* qname, bool isAttr) { 20748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const char *c; 20848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org for (c = qname; *c; ++c) { 20948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (*c == ':') { 21048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::pair<std::string, bool> result = 21148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_.NsForPrefix(std::string(qname, c - qname)); 21248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (!result.second) 21348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return QName(); 21448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return QName(result.first, c + 1); 21548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 21648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 21748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (isAttr) 21848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return QName(STR_EMPTY, qname); 21948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 22048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org std::pair<std::string, bool> result = xmlnsstack_.NsForPrefix(STR_EMPTY); 22148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (!result.second) 22248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return QName(); 22348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 22448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return QName(result.first, qname); 22548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 22648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 22748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 22848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::Reset() { 22948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org xmlnsstack_.Reset(); 23048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org raised_ = XML_ERROR_NONE; 23148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 23248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 23348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 23448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::SetPosition(int line, int column, 23548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org long byte_index) { 23648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org line_number_ = line; 23748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org column_number_ = column; 23848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org byte_index_ = byte_index; 23948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 24048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 24148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgvoid 24248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::GetPosition(unsigned long * line, 24348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org unsigned long * column, 24448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org unsigned long * byte_index) { 24548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (line != NULL) { 24648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org *line = static_cast<unsigned long>(line_number_); 24748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 24848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 24948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (column != NULL) { 25048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org *column = static_cast<unsigned long>(column_number_); 25148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 25248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 25348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org if (byte_index != NULL) { 25448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org *byte_index = static_cast<unsigned long>(byte_index_); 25548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 25648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 25748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 25848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgXmlParser::ParseContext::~ParseContext() { 25948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 26048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 26148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} // namespace buzz 262