180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkXMLWriter_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkXMLWriter_DEFINED 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkTDArray.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDOM.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkWStream; 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkXMLParser; 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkXMLWriter { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLWriter(bool doEscapeMarkup = true); 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual ~SkXMLWriter(); 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void addS32Attribute(const char name[], int32_t value); 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void addAttribute(const char name[], const char value[]); 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void addAttributeLen(const char name[], const char value[], size_t length); 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void addHexAttribute(const char name[], uint32_t value, int minDigits = 0); 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void addScalarAttribute(const char name[], SkScalar value); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void endElement() { this->onEndElement(); } 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void startElement(const char elem[]); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void startElementLen(const char elem[], size_t length); 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void writeDOM(const SkDOM&, const SkDOM::Node*, bool skipRoot); 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void flush(); 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void writeHeader(); 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onStartElementLen(const char elem[], size_t length) = 0; 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onAddAttributeLen(const char name[], const char value[], size_t length) = 0; 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onEndElement() = 0; 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru struct Elem { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fName; 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool fHasChildren; 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void doEnd(Elem* elem); 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool doStart(const char name[], size_t length); 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Elem* getEnd(); 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* getHeader(); 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDArray<Elem*> fElems; 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool fDoEscapeMarkup; 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // illegal 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLWriter& operator=(const SkXMLWriter&); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkXMLStreamWriter : public SkXMLWriter { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLStreamWriter(SkWStream*); 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual ~SkXMLStreamWriter(); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void writeHeader(); 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDEBUGCODE(static void UnitTest();) 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onStartElementLen(const char elem[], size_t length); 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onEndElement(); 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onAddAttributeLen(const char name[], const char value[], size_t length); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkWStream& fStream; 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkXMLParserWriter : public SkXMLWriter { 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLParserWriter(SkXMLParser*); 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual ~SkXMLParserWriter(); 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onStartElementLen(const char elem[], size_t length); 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onEndElement(); 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onAddAttributeLen(const char name[], const char value[], size_t length); 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLParser& fParser; 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 86