OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights
reserved. |
3 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. | 3 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 StringImpl* foundNS = namespaces.get(pre); | 282 StringImpl* foundNS = namespaces.get(pre); |
283 if (foundNS != namespaceURI.impl()) { | 283 if (foundNS != namespaceURI.impl()) { |
284 namespaces.set(pre, namespaceURI.impl()); | 284 namespaces.set(pre, namespaceURI.impl()); |
285 result.append(' '); | 285 result.append(' '); |
286 result.append(xmlnsAtom.string()); | 286 result.append(xmlnsAtom.string()); |
287 if (!prefix.isEmpty()) { | 287 if (!prefix.isEmpty()) { |
288 result.append(':'); | 288 result.append(':'); |
289 result.append(prefix); | 289 result.append(prefix); |
290 } | 290 } |
291 | 291 |
292 result.append('='); | 292 result.appendLiteral("=\""); |
293 result.append('"'); | |
294 appendAttributeValue(result, namespaceURI, false); | 293 appendAttributeValue(result, namespaceURI, false); |
295 result.append('"'); | 294 result.append('"'); |
296 } | 295 } |
297 } | 296 } |
298 | 297 |
299 EntityMask MarkupAccumulator::entityMaskForText(Text* text) const | 298 EntityMask MarkupAccumulator::entityMaskForText(Text* text) const |
300 { | 299 { |
301 if (!text->document().isHTMLDocument()) | 300 if (!text->document().isHTMLDocument()) |
302 return EntityMaskInPCDATA; | 301 return EntityMaskInPCDATA; |
303 | 302 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 if (n->name().isEmpty()) | 350 if (n->name().isEmpty()) |
352 return; | 351 return; |
353 | 352 |
354 result.appendLiteral("<!DOCTYPE "); | 353 result.appendLiteral("<!DOCTYPE "); |
355 result.append(n->name()); | 354 result.append(n->name()); |
356 if (!n->publicId().isEmpty()) { | 355 if (!n->publicId().isEmpty()) { |
357 result.appendLiteral(" PUBLIC \""); | 356 result.appendLiteral(" PUBLIC \""); |
358 result.append(n->publicId()); | 357 result.append(n->publicId()); |
359 result.append('"'); | 358 result.append('"'); |
360 if (!n->systemId().isEmpty()) { | 359 if (!n->systemId().isEmpty()) { |
361 result.append(' '); | 360 result.appendLiteral(" \""); |
362 result.append('"'); | |
363 result.append(n->systemId()); | 361 result.append(n->systemId()); |
364 result.append('"'); | 362 result.append('"'); |
365 } | 363 } |
366 } else if (!n->systemId().isEmpty()) { | 364 } else if (!n->systemId().isEmpty()) { |
367 result.appendLiteral(" SYSTEM \""); | 365 result.appendLiteral(" SYSTEM \""); |
368 result.append(n->systemId()); | 366 result.append(n->systemId()); |
369 result.append('"'); | 367 result.append('"'); |
370 } | 368 } |
371 if (!n->internalSubset().isEmpty()) { | 369 if (!n->internalSubset().isEmpty()) { |
372 result.append(' '); | 370 result.appendLiteral(" ["); |
373 result.append('['); | |
374 result.append(n->internalSubset()); | 371 result.append(n->internalSubset()); |
375 result.append(']'); | 372 result.append(']'); |
376 } | 373 } |
377 result.append('>'); | 374 result.append('>'); |
378 } | 375 } |
379 | 376 |
380 void MarkupAccumulator::appendProcessingInstruction(StringBuilder& result, const
String& target, const String& data) | 377 void MarkupAccumulator::appendProcessingInstruction(StringBuilder& result, const
String& target, const String& data) |
381 { | 378 { |
382 // FIXME: PI data is not escaped, but XMLSerializer (and possibly other call
ers) this should raise an exception if it includes "?>". | 379 // FIXME: PI data is not escaped, but XMLSerializer (and possibly other call
ers) this should raise an exception if it includes "?>". |
383 result.append('<'); | 380 result.appendLiteral("<?"); |
384 result.append('?'); | |
385 result.append(target); | 381 result.append(target); |
386 result.append(' '); | 382 result.append(' '); |
387 result.append(data); | 383 result.append(data); |
388 result.append('?'); | 384 result.appendLiteral("?>"); |
389 result.append('>'); | |
390 } | 385 } |
391 | 386 |
392 void MarkupAccumulator::appendElement(StringBuilder& result, Element* element, N
amespaces* namespaces) | 387 void MarkupAccumulator::appendElement(StringBuilder& result, Element* element, N
amespaces* namespaces) |
393 { | 388 { |
394 appendOpenTag(result, element, namespaces); | 389 appendOpenTag(result, element, namespaces); |
395 | 390 |
396 if (element->hasAttributes()) { | 391 if (element->hasAttributes()) { |
397 unsigned length = element->attributeCount(); | 392 unsigned length = element->attributeCount(); |
398 for (unsigned int i = 0; i < length; i++) | 393 for (unsigned int i = 0; i < length; i++) |
399 appendAttribute(result, element, *element->attributeItem(i), namespa
ces); | 394 appendAttribute(result, element, *element->attributeItem(i), namespa
ces); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 // or createContextualFragment. It does not necessarily align with | 531 // or createContextualFragment. It does not necessarily align with |
537 // which elements should be serialized w/o end tags. | 532 // which elements should be serialized w/o end tags. |
538 return toHTMLElement(node)->ieForbidsInsertHTML(); | 533 return toHTMLElement(node)->ieForbidsInsertHTML(); |
539 } | 534 } |
540 | 535 |
541 void MarkupAccumulator::appendEndMarkup(StringBuilder& result, const Node* node) | 536 void MarkupAccumulator::appendEndMarkup(StringBuilder& result, const Node* node) |
542 { | 537 { |
543 if (!node->isElementNode() || shouldSelfClose(node) || (!node->hasChildNodes
() && elementCannotHaveEndTag(node))) | 538 if (!node->isElementNode() || shouldSelfClose(node) || (!node->hasChildNodes
() && elementCannotHaveEndTag(node))) |
544 return; | 539 return; |
545 | 540 |
546 result.append('<'); | 541 result.appendLiteral("</"); |
547 result.append('/'); | |
548 result.append(toElement(node)->nodeNamePreservingCase()); | 542 result.append(toElement(node)->nodeNamePreservingCase()); |
549 result.append('>'); | 543 result.append('>'); |
550 } | 544 } |
551 | 545 |
552 } | 546 } |
OLD | NEW |