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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 result.append(quoteChar); | 215 result.append(quoteChar); |
216 return; | 216 return; |
217 } | 217 } |
218 | 218 |
219 // FIXME: This does not fully match other browsers. Firefox percent-escapes
non-ASCII characters for innerHTML. | 219 // FIXME: This does not fully match other browsers. Firefox percent-escapes
non-ASCII characters for innerHTML. |
220 result.append(quoteChar); | 220 result.append(quoteChar); |
221 appendAttributeValue(result, resolvedURLString, false); | 221 appendAttributeValue(result, resolvedURLString, false); |
222 result.append(quoteChar); | 222 result.append(quoteChar); |
223 } | 223 } |
224 | 224 |
225 void MarkupAccumulator::appendNodeValue(StringBuilder& result, const Node* node,
const Range* range, EntityMask entityMask) | |
226 { | |
227 const String str = node->nodeValue(); | |
228 unsigned length = str.length(); | |
229 unsigned start = 0; | |
230 | |
231 if (range) { | |
232 if (node == range->endContainer()) | |
233 length = range->endOffset(); | |
234 if (node == range->startContainer()) { | |
235 start = range->startOffset(); | |
236 length -= start; | |
237 } | |
238 } | |
239 | |
240 appendCharactersReplacingEntities(result, str, start, length, entityMask); | |
241 } | |
242 | |
243 bool MarkupAccumulator::shouldAddNamespaceElement(const Element* element) | 225 bool MarkupAccumulator::shouldAddNamespaceElement(const Element* element) |
244 { | 226 { |
245 // Don't add namespace attribute if it is already defined for this elem. | 227 // Don't add namespace attribute if it is already defined for this elem. |
246 const AtomicString& prefix = element->prefix(); | 228 const AtomicString& prefix = element->prefix(); |
247 if (prefix.isEmpty()) | 229 if (prefix.isEmpty()) |
248 return !element->hasAttribute(xmlnsAtom); | 230 return !element->hasAttribute(xmlnsAtom); |
249 | 231 |
250 DEFINE_STATIC_LOCAL(String, xmlnsWithColon, ("xmlns:")); | 232 DEFINE_STATIC_LOCAL(String, xmlnsWithColon, ("xmlns:")); |
251 return !element->hasAttribute(xmlnsWithColon + prefix); | 233 return !element->hasAttribute(xmlnsWithColon + prefix); |
252 } | 234 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 if (text->parentElement()) | 282 if (text->parentElement()) |
301 parentName = &(text->parentElement())->tagQName(); | 283 parentName = &(text->parentElement())->tagQName(); |
302 | 284 |
303 if (parentName && (*parentName == scriptTag || *parentName == styleTag || *p
arentName == xmpTag)) | 285 if (parentName && (*parentName == scriptTag || *parentName == styleTag || *p
arentName == xmpTag)) |
304 return EntityMaskInCDATA; | 286 return EntityMaskInCDATA; |
305 return EntityMaskInHTMLPCDATA; | 287 return EntityMaskInHTMLPCDATA; |
306 } | 288 } |
307 | 289 |
308 void MarkupAccumulator::appendText(StringBuilder& result, Text* text) | 290 void MarkupAccumulator::appendText(StringBuilder& result, Text* text) |
309 { | 291 { |
310 appendNodeValue(result, text, m_range, entityMaskForText(text)); | 292 const String& str = text->data(); |
| 293 unsigned length = str.length(); |
| 294 unsigned start = 0; |
| 295 |
| 296 if (m_range) { |
| 297 if (text == m_range->endContainer()) |
| 298 length = m_range->endOffset(); |
| 299 if (text == m_range->startContainer()) { |
| 300 start = m_range->startOffset(); |
| 301 length -= start; |
| 302 } |
| 303 } |
| 304 appendCharactersReplacingEntities(result, str, start, length, entityMaskForT
ext(text)); |
311 } | 305 } |
312 | 306 |
313 void MarkupAccumulator::appendComment(StringBuilder& result, const String& comme
nt) | 307 void MarkupAccumulator::appendComment(StringBuilder& result, const String& comme
nt) |
314 { | 308 { |
315 // FIXME: Comment content is not escaped, but XMLSerializer (and possibly ot
her callers) should raise an exception if it includes "-->". | 309 // FIXME: Comment content is not escaped, but XMLSerializer (and possibly ot
her callers) should raise an exception if it includes "-->". |
316 result.appendLiteral("<!--"); | 310 result.appendLiteral("<!--"); |
317 result.append(comment); | 311 result.append(comment); |
318 result.appendLiteral("-->"); | 312 result.appendLiteral("-->"); |
319 } | 313 } |
320 | 314 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 { | 524 { |
531 if (!node->isElementNode() || shouldSelfClose(node) || (!node->hasChildNodes
() && elementCannotHaveEndTag(node))) | 525 if (!node->isElementNode() || shouldSelfClose(node) || (!node->hasChildNodes
() && elementCannotHaveEndTag(node))) |
532 return; | 526 return; |
533 | 527 |
534 result.appendLiteral("</"); | 528 result.appendLiteral("</"); |
535 result.append(toElement(node)->nodeNamePreservingCase()); | 529 result.append(toElement(node)->nodeNamePreservingCase()); |
536 result.append('>'); | 530 result.append('>'); |
537 } | 531 } |
538 | 532 |
539 } | 533 } |
OLD | NEW |