blob: 9c561eda08d327809635ecd5f95bcef14a579d2e [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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
reed@android.com8a1c16f2008-12-17 15:59:43 +00009
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
18class SkAnimateMaker;
19class SkDisplayable;
20
21class SkDisplayXMLParserError : public SkXMLParserError {
22public:
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;
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
61class SkDisplayXMLParser : public SkXMLParser {
62public:
63 SkDisplayXMLParser(SkAnimateMaker& maker);
64 virtual ~SkDisplayXMLParser();
65protected:
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);
71private:
72 struct Parent {
73 SkDisplayable* fDisplayable;
74 SkDisplayTypes fType;
75 };
76 SkTDArray<Parent> fParents;
77 SkDisplayXMLParser& operator= (const SkDisplayXMLParser& );
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