/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkDisplayXMLParser_DEFINED #define SkDisplayXMLParser_DEFINED #include "SkIntArray.h" #include "SkTDict.h" #include "SkDisplayType.h" #include "SkXMLParser.h" class SkAnimateMaker; class SkDisplayable; class SkDisplayXMLParserError : public SkXMLParserError { public: enum ErrorCode { kApplyScopesItself = kUnknownError + 1, kDisplayTreeTooDeep, kElementMissingParent, kElementTypeNotAllowedInParent, kErrorAddingDataToPost, kErrorAddingToMatrix, kErrorAddingToPaint, kErrorAddingToPath, kErrorInAttributeValue, kErrorInScript, kExpectedMovie, kFieldNotInTarget, kGradientOffsetsDontMatchColors, kGradientOffsetsMustBeNoMoreThanOne, kGradientOffsetsMustEndWithOne, kGradientOffsetsMustIncrease, kGradientOffsetsMustStartWithZero, kGradientPointsLengthMustBeFour, kInInclude, kInMovie, kIncludeNameUnknownOrMissing, kIndexOutOfRange, kMovieNameUnknownOrMissing, kNoParentAvailable, kParentElementCantContain, kSaveLayerNeedsBounds, kTargetIDNotFound, kUnexpectedType }; virtual ~SkDisplayXMLParserError(); virtual void getErrorString(SkString* str) const; void setCode(ErrorCode code) { INHERITED::setCode((INHERITED::ErrorCode) code); } void setInnerError(SkAnimateMaker* maker, const SkString& str); typedef SkXMLParserError INHERITED; friend class SkDisplayXMLParser; }; class SkDisplayXMLParser : public SkXMLParser { public: SkDisplayXMLParser(SkAnimateMaker& maker); virtual ~SkDisplayXMLParser(); protected: virtual bool onAddAttribute(const char name[], const char value[]); bool onAddAttributeLen(const char name[], const char value[], size_t len); virtual bool onEndElement(const char elem[]); virtual bool onStartElement(const char elem[]); bool onStartElementLen(const char elem[], size_t len); private: struct Parent { SkDisplayable* fDisplayable; SkDisplayTypes fType; }; SkTDArray fParents; SkDisplayXMLParser& operator= (const SkDisplayXMLParser& ); SkDisplayXMLParserError* getError() { return (SkDisplayXMLParserError*) fError; } const SkMemberInfo* searchContainer(const SkMemberInfo* , int infoCount); SkAnimateMaker& fMaker; SkBool fInInclude; SkBool fInSkia; // local state between onStartElement and onAddAttribute SkDisplayable* fCurrDisplayable; SkDisplayTypes fCurrType; friend class SkXMLAnimatorWriter; typedef SkXMLParser INHERITED; }; #endif // SkDisplayXMLParser_DEFINED