OLD | NEW |
| (Empty) |
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 SkSVGParser_DEFINED | |
11 #define SkSVGParser_DEFINED | |
12 | |
13 #include "SkMatrix.h" | |
14 #include "SkTDict.h" | |
15 #include "SkTDStack.h" | |
16 #include "SkSVGPaintState.h" | |
17 #include "SkSVGTypes.h" | |
18 #include "SkStream.h" | |
19 #include "SkString.h" | |
20 #include "SkXMLParser.h" | |
21 #include "SkXMLWriter.h" | |
22 | |
23 class SkSVGBase; | |
24 class SkSVGElement; | |
25 | |
26 class SkSVGParser : public SkXMLParser { | |
27 public: | |
28 SkSVGParser(SkXMLParserError* err = NULL); | |
29 virtual ~SkSVGParser(); | |
30 void _addAttribute(const char* attrName, const char* attrValue) { | |
31 fXMLWriter.addAttribute(attrName, attrValue); } | |
32 void _addAttribute(const char* attrName, SkString& attrValue) { | |
33 fXMLWriter.addAttribute(attrName, attrValue.c_str()); } | |
34 void _addAttributeLen(const char* attrName, const char* attrValue, size_t le
n) { | |
35 fXMLWriter.addAttributeLen(attrName, attrValue, len); } | |
36 void _endElement() { fXMLWriter.endElement(); } | |
37 int findAttribute(SkSVGBase* , const char* attrValue, size_t len, bool isPai
nt); | |
38 // const char* getFinal(); | |
39 SkTDict<SkSVGElement*>& getIDs() { return fIDs; } | |
40 SkString& getPaintLast(SkSVGPaint::Field field); | |
41 void _startElement(const char name[]) { fXMLWriter.startElement(name); } | |
42 void translate(SkSVGElement*, bool isDef); | |
43 void translateMatrix(SkString& , SkString* id); | |
44 static void ConvertToArray(SkString& vals); | |
45 protected: | |
46 virtual bool onAddAttribute(const char name[], const char value[]); | |
47 bool onAddAttributeLen(const char name[], const char value[], size_t len); | |
48 virtual bool onEndElement(const char elem[]); | |
49 virtual bool onStartElement(const char elem[]); | |
50 bool onStartElementLen(const char elem[], size_t len); | |
51 virtual bool onText(const char text[], int len); | |
52 private: | |
53 bool isStrokeAndFill(SkSVGPaint** stroke, SkSVGPaint** fill); | |
54 static SkSVGElement* CreateElement(SkSVGTypes type, SkSVGElement* parent); | |
55 static void Delete(SkTDArray<SkSVGElement*>& fChildren); | |
56 static SkSVGTypes GetType(const char name[], size_t len); | |
57 SkSVGPaint* fHead; | |
58 SkSVGPaint fEmptyPaint; | |
59 SkSVGPaint fLastFlush; | |
60 SkString fLastColor; | |
61 SkMatrix fLastTransform; | |
62 SkTDArray<SkSVGElement*> fChildren; | |
63 SkTDict<SkSVGElement*> fIDs; | |
64 SkTDArray<SkSVGElement*> fParents; | |
65 SkDynamicMemoryWStream fStream; | |
66 SkXMLStreamWriter fXMLWriter; | |
67 SkSVGElement* fCurrElement; | |
68 SkBool8 fInSVG; | |
69 SkBool8 fSuppressPaint; | |
70 friend class SkSVGPaint; | |
71 friend class SkSVGGradient; | |
72 }; | |
73 | |
74 #endif // SkSVGParser_DEFINED | |
OLD | NEW |