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 SkDOM_DEFINED 11 #define SkDOM_DEFINED 12 13 #include "SkChunkAlloc.h" 14 #include "SkScalar.h" 15 #include "SkTemplates.h" 16 17 struct SkDOMNode; 18 struct SkDOMAttr; 19 20 class SkDOM { 21 public: 22 SkDOM(); 23 ~SkDOM(); 24 25 typedef SkDOMNode Node; 26 typedef SkDOMAttr Attr; 27 28 /** Returns null on failure 29 */ 30 const Node* build(const char doc[], size_t len); 31 const Node* copy(const SkDOM& dom, const Node* node); 32 33 const Node* getRootNode() const; 34 35 enum Type { 36 kElement_Type, 37 kText_Type 38 }; 39 Type getType(const Node*) const; 40 41 const char* getName(const Node*) const; 42 const Node* getFirstChild(const Node*, const char elem[] = NULL) const; 43 const Node* getNextSibling(const Node*, const char elem[] = NULL) const; 44 45 const char* findAttr(const Node*, const char attrName[]) const; 46 const Attr* getFirstAttr(const Node*) const; 47 const Attr* getNextAttr(const Node*, const Attr*) const; 48 const char* getAttrName(const Node*, const Attr*) const; 49 const char* getAttrValue(const Node*, const Attr*) const; 50 51 // helpers for walking children 52 int countChildren(const Node* node, const char elem[] = NULL) const; 53 54 // helpers for calling SkParse 55 bool findS32(const Node*, const char name[], int32_t* value) const; 56 bool findScalars(const Node*, const char name[], SkScalar value[], int count) const; 57 bool findHex(const Node*, const char name[], uint32_t* value) const; 58 bool findBool(const Node*, const char name[], bool*) const; 59 int findList(const Node*, const char name[], const char list[]) const; 60 61 bool findScalar(const Node* node, const char name[], SkScalar value[]) const 62 { 63 return this->findScalars(node, name, value, 1); 64 } 65 66 bool hasAttr(const Node*, const char name[], const char value[]) const; 67 bool hasS32(const Node*, const char name[], int32_t value) const; 68 bool hasScalar(const Node*, const char name[], SkScalar value) const; 69 bool hasHex(const Node*, const char name[], uint32_t value) const; 70 bool hasBool(const Node*, const char name[], bool value) const; 71 72 class AttrIter { 73 public: 74 AttrIter(const class SkDOM&, const Node*); 75 const char* next(const char** value); 76 private: 77 const Attr* fAttr; 78 const Attr* fStop; 79 }; 80 81 SkDEBUGCODE(void dump(const Node* node = NULL, int tabLevel = 0) const;) 82 SkDEBUGCODE(static void UnitTest();) 83 84 private: 85 SkChunkAlloc fAlloc; 86 Node* fRoot; 87 friend class AttrIter; 88 friend class SkDOMParser; 89 }; 90 91 #endif 92