OLD | NEW |
---|---|
1 | |
2 /* | 1 /* |
3 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
4 * | 3 * |
5 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
7 */ | 6 */ |
8 | 7 |
9 | |
10 #include "SkXMLWriter.h" | 8 #include "SkXMLWriter.h" |
11 #include "SkStream.h" | 9 #include "SkStream.h" |
12 | 10 |
13 SkXMLWriter::SkXMLWriter(bool doEscapeMarkup) : fDoEscapeMarkup(doEscapeMarkup) | 11 SkXMLWriter::SkXMLWriter(bool doEscapeMarkup) : fDoEscapeMarkup(doEscapeMarkup) |
14 { | 12 { |
15 } | 13 } |
16 | 14 |
17 SkXMLWriter::~SkXMLWriter() | 15 SkXMLWriter::~SkXMLWriter() |
18 { | 16 { |
19 SkASSERT(fElems.count() == 0); | 17 SkASSERT(fElems.count() == 0); |
(...skipping 24 matching lines...) Expand all Loading... | |
44 this->addAttribute(name, tmp.c_str()); | 42 this->addAttribute(name, tmp.c_str()); |
45 } | 43 } |
46 | 44 |
47 void SkXMLWriter::addScalarAttribute(const char name[], SkScalar value) | 45 void SkXMLWriter::addScalarAttribute(const char name[], SkScalar value) |
48 { | 46 { |
49 SkString tmp; | 47 SkString tmp; |
50 tmp.appendScalar(value); | 48 tmp.appendScalar(value); |
51 this->addAttribute(name, tmp.c_str()); | 49 this->addAttribute(name, tmp.c_str()); |
52 } | 50 } |
53 | 51 |
54 void SkXMLWriter::addText(const char text[]) | 52 void SkXMLWriter::addText(const char text[], size_t length) { |
55 { | |
56 if (fElems.isEmpty()) { | 53 if (fElems.isEmpty()) { |
57 return; | 54 return; |
58 } | 55 } |
56 | |
57 this->onAddText(text, length); | |
58 | |
59 fElems.top()->fHasText = true; | |
60 } | |
59 | 61 |
60 this->onAddText(text); | 62 void SkXMLWriter::addText(const char cstr[]) { |
61 | 63 this->addText(cstr, strlen(cstr)); |
62 fElems.top()->fHasText = true; | |
63 } | 64 } |
64 | 65 |
65 void SkXMLWriter::doEnd(Elem* elem) | 66 void SkXMLWriter::doEnd(Elem* elem) |
66 { | 67 { |
67 delete elem; | 68 delete elem; |
68 } | 69 } |
69 | 70 |
70 bool SkXMLWriter::doStart(const char name[], size_t length) | 71 bool SkXMLWriter::doStart(const char name[], size_t length) |
71 { | 72 { |
72 int level = fElems.count(); | 73 int level = fElems.count(); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
222 void SkXMLStreamWriter::onAddAttributeLen(const char name[], const char value[], size_t length) | 223 void SkXMLStreamWriter::onAddAttributeLen(const char name[], const char value[], size_t length) |
223 { | 224 { |
224 SkASSERT(!fElems.top()->fHasChildren && !fElems.top()->fHasText); | 225 SkASSERT(!fElems.top()->fHasChildren && !fElems.top()->fHasText); |
225 fStream.writeText(" "); | 226 fStream.writeText(" "); |
226 fStream.writeText(name); | 227 fStream.writeText(name); |
227 fStream.writeText("=\""); | 228 fStream.writeText("=\""); |
228 fStream.write(value, length); | 229 fStream.write(value, length); |
229 fStream.writeText("\""); | 230 fStream.writeText("\""); |
230 } | 231 } |
231 | 232 |
232 void SkXMLStreamWriter::onAddText(const char text[]) | 233 void SkXMLStreamWriter::onAddText(const char text[], size_t length) { |
233 { | |
234 Elem* elem = fElems.top(); | 234 Elem* elem = fElems.top(); |
235 | 235 |
236 if (!elem->fHasChildren && !elem->fHasText) { | 236 if (!elem->fHasChildren && !elem->fHasText) { |
237 fStream.writeText(">"); | 237 fStream.writeText(">"); |
238 fStream.newline(); | 238 fStream.newline(); |
239 } | 239 } |
240 | 240 |
241 tab(fStream, fElems.count() + 1); | 241 tab(fStream, fElems.count() + 1); |
242 fStream.writeText(text); | 242 fStream.writeText(text); |
f(malita)
2015/02/05 02:16:17
If we're accepting explicit text lengths, we shoul
reed1
2015/02/05 02:17:45
Yikes, good catch. Will fix.
| |
243 fStream.newline(); | 243 fStream.newline(); |
244 } | 244 } |
245 | 245 |
246 void SkXMLStreamWriter::onEndElement() | 246 void SkXMLStreamWriter::onEndElement() |
247 { | 247 { |
248 Elem* elem = getEnd(); | 248 Elem* elem = getEnd(); |
249 if (elem->fHasChildren || elem->fHasText) | 249 if (elem->fHasChildren || elem->fHasText) |
250 { | 250 { |
251 tab(fStream, fElems.count()); | 251 tab(fStream, fElems.count()); |
252 fStream.writeText("</"); | 252 fStream.writeText("</"); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
295 this->flush(); | 295 this->flush(); |
296 } | 296 } |
297 | 297 |
298 void SkXMLParserWriter::onAddAttributeLen(const char name[], const char value[], size_t length) | 298 void SkXMLParserWriter::onAddAttributeLen(const char name[], const char value[], size_t length) |
299 { | 299 { |
300 SkASSERT(fElems.count() == 0 || (!fElems.top()->fHasChildren && !fElems.top( )->fHasText)); | 300 SkASSERT(fElems.count() == 0 || (!fElems.top()->fHasChildren && !fElems.top( )->fHasText)); |
301 SkString str(value, length); | 301 SkString str(value, length); |
302 fParser.addAttribute(name, str.c_str()); | 302 fParser.addAttribute(name, str.c_str()); |
303 } | 303 } |
304 | 304 |
305 void SkXMLParserWriter::onAddText(const char text[]) | 305 void SkXMLParserWriter::onAddText(const char text[], size_t length) { |
306 { | 306 fParser.text(text, SkToInt(length)); |
307 fParser.text(text, SkToInt(strlen(text))); | |
308 } | 307 } |
309 | 308 |
310 void SkXMLParserWriter::onEndElement() | 309 void SkXMLParserWriter::onEndElement() |
311 { | 310 { |
312 Elem* elem = this->getEnd(); | 311 Elem* elem = this->getEnd(); |
313 fParser.endElement(elem->fName.c_str()); | 312 fParser.endElement(elem->fName.c_str()); |
314 this->doEnd(elem); | 313 this->doEnd(elem); |
315 } | 314 } |
316 | 315 |
317 void SkXMLParserWriter::onStartElementLen(const char name[], size_t length) | 316 void SkXMLParserWriter::onStartElementLen(const char name[], size_t length) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
350 w.endElement(); | 349 w.endElement(); |
351 w.endElement(); | 350 w.endElement(); |
352 w.startElement("elem2"); | 351 w.startElement("elem2"); |
353 w.endElement(); | 352 w.endElement(); |
354 w.endElement(); | 353 w.endElement(); |
355 w.endElement(); | 354 w.endElement(); |
356 #endif | 355 #endif |
357 } | 356 } |
358 | 357 |
359 #endif | 358 #endif |
OLD | NEW |