1 /* libs/graphics/xml/SkXMLParser.cpp 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #include "SkXMLParser.h" 19 20 static char const* const gErrorStrings[] = { 21 "empty or missing file ", 22 "unknown element ", 23 "unknown attribute name ", 24 "error in attribute value ", 25 "duplicate ID ", 26 "unknown error " 27 }; 28 29 SkXMLParserError::SkXMLParserError() : fCode(kNoError), fLineNumber(-1), 30 fNativeCode(-1) 31 { 32 reset(); 33 } 34 35 SkXMLParserError::~SkXMLParserError() 36 { 37 // need a virtual destructor for our subclasses 38 } 39 40 void SkXMLParserError::getErrorString(SkString* str) const 41 { 42 SkASSERT(str); 43 SkString temp; 44 if (fCode != kNoError) { 45 if ((unsigned)fCode < SK_ARRAY_COUNT(gErrorStrings)) 46 temp.set(gErrorStrings[fCode - 1]); 47 temp.append(fNoun); 48 } else 49 SkXMLParser::GetNativeErrorString(fNativeCode, &temp); 50 str->append(temp); 51 } 52 53 void SkXMLParserError::reset() { 54 fCode = kNoError; 55 fLineNumber = -1; 56 fNativeCode = -1; 57 } 58 59 60 //////////////// 61 62 SkXMLParser::SkXMLParser(SkXMLParserError* parserError) : fParser(NULL), fError(parserError) 63 { 64 } 65 66 SkXMLParser::~SkXMLParser() 67 { 68 } 69 70 bool SkXMLParser::startElement(const char elem[]) 71 { 72 return this->onStartElement(elem); 73 } 74 75 bool SkXMLParser::addAttribute(const char name[], const char value[]) 76 { 77 return this->onAddAttribute(name, value); 78 } 79 80 bool SkXMLParser::endElement(const char elem[]) 81 { 82 return this->onEndElement(elem); 83 } 84 85 bool SkXMLParser::text(const char text[], int len) 86 { 87 return this->onText(text, len); 88 } 89 90 //////////////////////////////////////////////////////////////////////////////// 91 92 bool SkXMLParser::onStartElement(const char elem[]) {return false; } 93 bool SkXMLParser::onAddAttribute(const char name[], const char value[]) {return false; } 94 bool SkXMLParser::onEndElement(const char elem[]) { return false; } 95 bool SkXMLParser::onText(const char text[], int len) {return false; } 96