• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 SkXMLWriter_DEFINED
11 #define SkXMLWriter_DEFINED
12 
13 #include "SkTDArray.h"
14 #include "SkString.h"
15 #include "SkDOM.h"
16 
17 class SkWStream;
18 class SkXMLParser;
19 
20 class SkXMLWriter {
21 public:
22             SkXMLWriter(bool doEscapeMarkup = true);
23     virtual ~SkXMLWriter();
24 
25     void    addS32Attribute(const char name[], int32_t value);
26     void    addAttribute(const char name[], const char value[]);
27     void    addAttributeLen(const char name[], const char value[], size_t length);
28     void    addHexAttribute(const char name[], uint32_t value, int minDigits = 0);
29     void    addScalarAttribute(const char name[], SkScalar value);
endElement()30     void    endElement() { this->onEndElement(); }
31     void    startElement(const char elem[]);
32     void    startElementLen(const char elem[], size_t length);
33     void    writeDOM(const SkDOM&, const SkDOM::Node*, bool skipRoot);
34     void    flush();
35     virtual void writeHeader();
36 
37 protected:
38     virtual void onStartElementLen(const char elem[], size_t length) = 0;
39     virtual void onAddAttributeLen(const char name[], const char value[], size_t length) = 0;
40     virtual void onEndElement() = 0;
41 
42     struct Elem {
43         SkString    fName;
44         bool        fHasChildren;
45     };
46     void doEnd(Elem* elem);
47     bool doStart(const char name[], size_t length);
48     Elem* getEnd();
49     const char* getHeader();
50     SkTDArray<Elem*> fElems;
51 
52 private:
53     bool fDoEscapeMarkup;
54     // illegal
55     SkXMLWriter& operator=(const SkXMLWriter&);
56 };
57 
58 class SkXMLStreamWriter : public SkXMLWriter {
59 public:
60     SkXMLStreamWriter(SkWStream*);
61     virtual ~SkXMLStreamWriter();
62     virtual void    writeHeader();
63     SkDEBUGCODE(static void UnitTest();)
64 protected:
65     virtual void onStartElementLen(const char elem[], size_t length);
66     virtual void onEndElement();
67     virtual void onAddAttributeLen(const char name[], const char value[], size_t length);
68 private:
69     SkWStream&      fStream;
70 };
71 
72 class SkXMLParserWriter : public SkXMLWriter {
73 public:
74     SkXMLParserWriter(SkXMLParser*);
75     virtual ~SkXMLParserWriter();
76 protected:
77     virtual void onStartElementLen(const char elem[], size_t length);
78     virtual void onEndElement();
79     virtual void onAddAttributeLen(const char name[], const char value[], size_t length);
80 private:
81     SkXMLParser&        fParser;
82 };
83 
84 
85 #endif
86 
87