55 fElems.back()->fHasText =
true;
64 bool firstChild = level > 0 && !
fElems[level-1]->fHasChildren;
66 fElems[level-1]->fHasChildren =
true;
80 static const char gHeader[] =
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
89 static const char* gEscapeChars[] = {
97 const char** array = gEscapeChars;
98 for (
unsigned i = 0; i < std::size(gEscapeChars); i++) {
99 if (array[i][0] == c) {
110 const char* stop = src +
length;
115 size_t seqSize = strlen(seq);
118 memcpy(dst, seq, seqSize);
123 extra += seqSize - 1;
134 if (fDoEscapeMarkup) {
154 const char* elem =
dom.getName(node);
157 w->addText(elem, strlen(elem));
161 w->startElement(elem);
171 node =
dom.getFirstChild(node,
nullptr);
174 node =
dom.getNextSibling(node,
nullptr);
218 this->tab(
fElems.size() + 1);
238 int level =
fElems.size();
256void SkXMLStreamWriter::newline() {
262void SkXMLStreamWriter::tab(
int level) {
264 for (
int i = 0; i <
level; i++) {
constexpr int SkToInt(S x)
static size_t escape_markup(char dst[], const char src[], size_t length)
static const char * escape_char(char c, char storage[2])
static void write_dom(const SkDOM &dom, const SkDOM::Node *node, SkXMLWriter *w, bool skipRoot)
const char * next(const char **value)
const char * data() const
void appendHex(uint32_t value, int minDigits=0)
void appendS32(int32_t value)
void appendScalar(SkScalar value)
const char * c_str() const
virtual bool write(const void *buffer, size_t size)=0
bool writeText(const char text[])
void onEndElement() override
SkXMLParserWriter(SkXMLParser *)
void onAddText(const char text[], size_t length) override
void onAddAttributeLen(const char name[], const char value[], size_t length) override
~SkXMLParserWriter() override
void onStartElementLen(const char elem[], size_t length) override
bool startElement(const char elem[])
bool endElement(const char elem[])
bool addAttribute(const char name[], const char value[])
bool text(const char text[], int len)
~SkXMLStreamWriter() override
void onStartElementLen(const char elem[], size_t length) override
void onEndElement() override
SkXMLStreamWriter(SkWStream *, uint32_t flags=0)
void onAddText(const char text[], size_t length) override
void writeHeader() override
void onAddAttributeLen(const char name[], const char value[], size_t length) override
virtual void onStartElementLen(const char elem[], size_t length)=0
void addText(const char text[], size_t length)
void writeDOM(const SkDOM &, const SkDOM::Node *, bool skipRoot)
void addAttributeLen(const char name[], const char value[], size_t length)
void addHexAttribute(const char name[], uint32_t value, int minDigits=0)
virtual void onAddText(const char text[], size_t length)=0
void addScalarAttribute(const char name[], SkScalar value)
SkXMLWriter(bool doEscapeMarkup=true)
void addS32Attribute(const char name[], int32_t value)
SkTDArray< Elem * > fElems
void addAttribute(const char name[], const char value[])
virtual void onAddAttributeLen(const char name[], const char value[], size_t length)=0
virtual void writeHeader()
bool doStart(const char name[], size_t length)
void startElement(const char elem[])
void startElementLen(const char elem[], size_t length)
FlutterSemanticsFlag flags
static const char header[]