1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkDisplayXMLParser_DEFINED 11 #define SkDisplayXMLParser_DEFINED 12 13 #include "SkIntArray.h" 14 #include "SkTDict.h" 15 #include "SkDisplayType.h" 16 #include "SkXMLParser.h" 17 18 class SkAnimateMaker; 19 class SkDisplayable; 20 21 class SkDisplayXMLParserError : public SkXMLParserError { 22 public: 23 enum ErrorCode { 24 kApplyScopesItself = kUnknownError + 1, 25 kDisplayTreeTooDeep, 26 kElementMissingParent, 27 kElementTypeNotAllowedInParent, 28 kErrorAddingDataToPost, 29 kErrorAddingToMatrix, 30 kErrorAddingToPaint, 31 kErrorAddingToPath, 32 kErrorInAttributeValue, 33 kErrorInScript, 34 kExpectedMovie, 35 kFieldNotInTarget, 36 kGradientOffsetsDontMatchColors, 37 kGradientOffsetsMustBeNoMoreThanOne, 38 kGradientOffsetsMustEndWithOne, 39 kGradientOffsetsMustIncrease, 40 kGradientOffsetsMustStartWithZero, 41 kGradientPointsLengthMustBeFour, 42 kInInclude, 43 kInMovie, 44 kIncludeNameUnknownOrMissing, 45 kIndexOutOfRange, 46 kMovieNameUnknownOrMissing, 47 kNoParentAvailable, 48 kParentElementCantContain, 49 kSaveLayerNeedsBounds, 50 kTargetIDNotFound, 51 kUnexpectedType 52 }; 53 virtual ~SkDisplayXMLParserError(); 54 virtual void getErrorString(SkString* str) const; setCode(ErrorCode code)55 void setCode(ErrorCode code) { INHERITED::setCode((INHERITED::ErrorCode) code); } 56 void setInnerError(SkAnimateMaker* maker, const SkString& str); 57 typedef SkXMLParserError INHERITED; 58 friend class SkDisplayXMLParser; 59 }; 60 61 class SkDisplayXMLParser : public SkXMLParser { 62 public: 63 SkDisplayXMLParser(SkAnimateMaker& maker); 64 virtual ~SkDisplayXMLParser(); 65 protected: 66 virtual bool onAddAttribute(const char name[], const char value[]); 67 bool onAddAttributeLen(const char name[], const char value[], size_t len); 68 virtual bool onEndElement(const char elem[]); 69 virtual bool onStartElement(const char elem[]); 70 bool onStartElementLen(const char elem[], size_t len); 71 private: 72 struct Parent { 73 SkDisplayable* fDisplayable; 74 SkDisplayTypes fType; 75 }; 76 SkTDArray<Parent> fParents; 77 SkDisplayXMLParser& operator= (const SkDisplayXMLParser& ); getError()78 SkDisplayXMLParserError* getError() { return (SkDisplayXMLParserError*) fError; } 79 const SkMemberInfo* searchContainer(const SkMemberInfo* , 80 int infoCount); 81 SkAnimateMaker& fMaker; 82 SkBool fInInclude; 83 SkBool fInSkia; 84 // local state between onStartElement and onAddAttribute 85 SkDisplayable* fCurrDisplayable; 86 SkDisplayTypes fCurrType; 87 friend class SkXMLAnimatorWriter; 88 typedef SkXMLParser INHERITED; 89 }; 90 91 #endif // SkDisplayXMLParser_DEFINED 92