11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkDisplayXMLParser_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkDisplayXMLParser_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkIntArray.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTDict.h"
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayType.h"
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkXMLParser.h"
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkAnimateMaker;
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDisplayable;
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDisplayXMLParserError : public SkXMLParserError {
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    enum ErrorCode {
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kApplyScopesItself = kUnknownError + 1,
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kDisplayTreeTooDeep,
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kElementMissingParent,
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kElementTypeNotAllowedInParent,
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorAddingDataToPost,
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorAddingToMatrix,
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorAddingToPaint,
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorAddingToPath,
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorInAttributeValue,
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kErrorInScript,
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kExpectedMovie,
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kFieldNotInTarget,
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientOffsetsDontMatchColors,
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientOffsetsMustBeNoMoreThanOne,
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientOffsetsMustEndWithOne,
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientOffsetsMustIncrease,
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientOffsetsMustStartWithZero,
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kGradientPointsLengthMustBeFour,
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kInInclude,
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kInMovie,
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kIncludeNameUnknownOrMissing,
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kIndexOutOfRange,
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kMovieNameUnknownOrMissing,
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kNoParentAvailable,
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kParentElementCantContain,
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kSaveLayerNeedsBounds,
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kTargetIDNotFound,
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kUnexpectedType
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    };
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual ~SkDisplayXMLParserError();
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual void getErrorString(SkString* str) const;
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void setCode(ErrorCode code) { INHERITED::setCode((INHERITED::ErrorCode) code); }
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void setInnerError(SkAnimateMaker* maker, const SkString& str);
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkXMLParserError INHERITED;
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    friend class SkDisplayXMLParser;
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDisplayXMLParser : public SkXMLParser {
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayXMLParser(SkAnimateMaker& maker);
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual ~SkDisplayXMLParser();
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected:
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual bool onAddAttribute(const char name[], const char value[]);
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    bool onAddAttributeLen(const char name[], const char value[], size_t len);
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual bool onEndElement(const char elem[]);
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual bool onStartElement(const char elem[]);
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    bool onStartElementLen(const char elem[], size_t len);
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    struct Parent {
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayable* fDisplayable;
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes fType;
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    };
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkTDArray<Parent> fParents;
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayXMLParser& operator= (const SkDisplayXMLParser& );
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayXMLParserError* getError() { return (SkDisplayXMLParserError*) fError; }
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* searchContainer(const SkMemberInfo* ,
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        int infoCount);
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkAnimateMaker& fMaker;
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkBool fInInclude;
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkBool fInSkia;
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // local state between onStartElement and onAddAttribute
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayable*  fCurrDisplayable;
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes  fCurrType;
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    friend class SkXMLAnimatorWriter;
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkXMLParser INHERITED;
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif // SkDisplayXMLParser_DEFINED
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
94