Chromium Code Reviews| 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 |