| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011 Apple 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 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 if (item->isSpecialNode() && !item->hasTagName(addressTag) && !item->has
TagName(divTag) && !item->hasTagName(pTag)) | 542 if (item->isSpecialNode() && !item->hasTagName(addressTag) && !item->has
TagName(divTag) && !item->hasTagName(pTag)) |
| 543 break; | 543 break; |
| 544 nodeRecord = nodeRecord->next(); | 544 nodeRecord = nodeRecord->next(); |
| 545 } | 545 } |
| 546 processFakePEndTagIfPInButtonScope(); | 546 processFakePEndTagIfPInButtonScope(); |
| 547 m_tree.insertHTMLElement(token); | 547 m_tree.insertHTMLElement(token); |
| 548 } | 548 } |
| 549 | 549 |
| 550 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; | 550 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; |
| 551 | 551 |
| 552 static void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, const
QualifiedName* const* names, size_t length) | 552 static void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, const
Vector<const QualifiedName*>& names) |
| 553 { | 553 { |
| 554 size_t length = names.size(); |
| 554 for (size_t i = 0; i < length; ++i) { | 555 for (size_t i = 0; i < length; ++i) { |
| 555 const QualifiedName& name = *names[i]; | 556 const QualifiedName& name = *names[i]; |
| 556 const AtomicString& localName = name.localName(); | 557 const AtomicString& localName = name.localName(); |
| 557 AtomicString loweredLocalName = localName.lower(); | 558 AtomicString loweredLocalName = localName.lower(); |
| 558 if (loweredLocalName != localName) | 559 if (loweredLocalName != localName) |
| 559 map->add(loweredLocalName, name); | 560 map->add(loweredLocalName, name); |
| 560 } | 561 } |
| 561 } | 562 } |
| 562 | 563 |
| 563 static void adjustSVGTagNameCase(AtomicHTMLToken* token) | 564 static void adjustSVGTagNameCase(AtomicHTMLToken* token) |
| 564 { | 565 { |
| 565 static PrefixedNameToQualifiedNameMap* caseMap = 0; | 566 static PrefixedNameToQualifiedNameMap* caseMap = 0; |
| 566 if (!caseMap) { | 567 if (!caseMap) { |
| 567 caseMap = new PrefixedNameToQualifiedNameMap; | 568 caseMap = new PrefixedNameToQualifiedNameMap; |
| 568 const QualifiedName* const* svgTags = SVGNames::getSVGTags(); | 569 Vector<const QualifiedName*> svgTags; |
| 569 mapLoweredLocalNameToName(caseMap, svgTags, SVGNames::SVGTagsCount); | 570 SVGNames::getSVGTags(svgTags); |
| 571 mapLoweredLocalNameToName(caseMap, svgTags); |
| 570 } | 572 } |
| 571 | 573 |
| 572 const QualifiedName& casedName = caseMap->get(token->name()); | 574 const QualifiedName& casedName = caseMap->get(token->name()); |
| 573 if (casedName.localName().isNull()) | 575 if (casedName.localName().isNull()) |
| 574 return; | 576 return; |
| 575 token->setName(casedName.localName()); | 577 token->setName(casedName.localName()); |
| 576 } | 578 } |
| 577 | 579 |
| 578 template<const QualifiedName* const* getAttrs(), unsigned length> | 580 template<void getAttrs(Vector<const QualifiedName*>&)> |
| 579 static void adjustAttributes(AtomicHTMLToken* token) | 581 static void adjustAttributes(AtomicHTMLToken* token) |
| 580 { | 582 { |
| 581 static PrefixedNameToQualifiedNameMap* caseMap = 0; | 583 static PrefixedNameToQualifiedNameMap* caseMap = 0; |
| 582 if (!caseMap) { | 584 if (!caseMap) { |
| 583 caseMap = new PrefixedNameToQualifiedNameMap; | 585 caseMap = new PrefixedNameToQualifiedNameMap; |
| 584 const QualifiedName* const* attrs = getAttrs(); | 586 Vector<const QualifiedName*> attrs; |
| 585 mapLoweredLocalNameToName(caseMap, attrs, length); | 587 getAttrs(attrs); |
| 588 mapLoweredLocalNameToName(caseMap, attrs); |
| 586 } | 589 } |
| 587 | 590 |
| 588 for (unsigned i = 0; i < token->attributes().size(); ++i) { | 591 for (unsigned i = 0; i < token->attributes().size(); ++i) { |
| 589 Attribute& tokenAttribute = token->attributes().at(i); | 592 Attribute& tokenAttribute = token->attributes().at(i); |
| 590 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName()
); | 593 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName()
); |
| 591 if (!casedName.localName().isNull()) | 594 if (!casedName.localName().isNull()) |
| 592 tokenAttribute.parserSetName(casedName); | 595 tokenAttribute.parserSetName(casedName); |
| 593 } | 596 } |
| 594 } | 597 } |
| 595 | 598 |
| 596 static void adjustSVGAttributes(AtomicHTMLToken* token) | 599 static void adjustSVGAttributes(AtomicHTMLToken* token) |
| 597 { | 600 { |
| 598 adjustAttributes<SVGNames::getSVGAttrs, SVGNames::SVGAttrsCount>(token); | 601 adjustAttributes<SVGNames::getSVGAttrs>(token); |
| 599 } | 602 } |
| 600 | 603 |
| 601 static void adjustMathMLAttributes(AtomicHTMLToken* token) | 604 static void adjustMathMLAttributes(AtomicHTMLToken* token) |
| 602 { | 605 { |
| 603 adjustAttributes<MathMLNames::getMathMLAttrs, MathMLNames::MathMLAttrsCount>
(token); | 606 adjustAttributes<MathMLNames::getMathMLAttrs>(token); |
| 604 } | 607 } |
| 605 | 608 |
| 606 static void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const Atomic
String& prefix, const QualifiedName* const* names, size_t length) | 609 static void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const Atomic
String& prefix, const Vector<const QualifiedName*>& names) |
| 607 { | 610 { |
| 611 size_t length = names.size(); |
| 608 for (size_t i = 0; i < length; ++i) { | 612 for (size_t i = 0; i < length; ++i) { |
| 609 const QualifiedName* name = names[i]; | 613 const QualifiedName* name = names[i]; |
| 610 const AtomicString& localName = name->localName(); | 614 const AtomicString& localName = name->localName(); |
| 611 AtomicString prefixColonLocalName = prefix + ':' + localName; | 615 AtomicString prefixColonLocalName = prefix + ':' + localName; |
| 612 QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI()); | 616 QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI()); |
| 613 map->add(prefixColonLocalName, nameWithPrefix); | 617 map->add(prefixColonLocalName, nameWithPrefix); |
| 614 } | 618 } |
| 615 } | 619 } |
| 616 | 620 |
| 617 static void adjustForeignAttributes(AtomicHTMLToken* token) | 621 static void adjustForeignAttributes(AtomicHTMLToken* token) |
| 618 { | 622 { |
| 619 static PrefixedNameToQualifiedNameMap* map = 0; | 623 static PrefixedNameToQualifiedNameMap* map = 0; |
| 620 if (!map) { | 624 if (!map) { |
| 621 map = new PrefixedNameToQualifiedNameMap; | 625 map = new PrefixedNameToQualifiedNameMap; |
| 622 | 626 |
| 623 const QualifiedName* const* attrs = XLinkNames::getXLinkAttrs(); | 627 Vector<const QualifiedName*> attrs; |
| 624 addNamesWithPrefix(map, xlinkAtom, attrs, XLinkNames::XLinkAttrsCount); | 628 XLinkNames::getXLinkAttrs(attrs); |
| 629 addNamesWithPrefix(map, xlinkAtom, attrs); |
| 625 | 630 |
| 626 attrs = XMLNames::getXMLAttrs(); | 631 XMLNames::getXMLAttrs(attrs); |
| 627 addNamesWithPrefix(map, xmlAtom, attrs, XMLNames::XMLAttrsCount); | 632 addNamesWithPrefix(map, xmlAtom, attrs); |
| 628 | 633 |
| 629 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr); | 634 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr); |
| 630 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames::
xmlnsNamespaceURI)); | 635 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames::
xmlnsNamespaceURI)); |
| 631 } | 636 } |
| 632 | 637 |
| 633 for (unsigned i = 0; i < token->attributes().size(); ++i) { | 638 for (unsigned i = 0; i < token->attributes().size(); ++i) { |
| 634 Attribute& tokenAttribute = token->attributes().at(i); | 639 Attribute& tokenAttribute = token->attributes().at(i); |
| 635 const QualifiedName& name = map->get(tokenAttribute.localName()); | 640 const QualifiedName& name = map->get(tokenAttribute.localName()); |
| 636 if (!name.localName().isNull()) | 641 if (!name.localName().isNull()) |
| 637 tokenAttribute.parserSetName(name); | 642 tokenAttribute.parserSetName(name); |
| (...skipping 2200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2838 ASSERT(m_isAttached); | 2843 ASSERT(m_isAttached); |
| 2839 // Warning, this may detach the parser. Do not do anything else after this. | 2844 // Warning, this may detach the parser. Do not do anything else after this. |
| 2840 m_tree.finishedParsing(); | 2845 m_tree.finishedParsing(); |
| 2841 } | 2846 } |
| 2842 | 2847 |
| 2843 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) | 2848 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) |
| 2844 { | 2849 { |
| 2845 } | 2850 } |
| 2846 | 2851 |
| 2847 } // namespace WebCore | 2852 } // namespace WebCore |
| OLD | NEW |