Changeset 62082 in webkit
- Timestamp:
- Jun 28, 2010 9:31:40 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r62081 r62082 1 2010-06-28 Eric Seidel <eric@webkit.org> 2 3 Reviewed by Adam Barth. 4 5 Implement HTMLTreeBuilder::reconstructTheActiveFormattingElements 6 https://bugs.webkit.org/show_bug.cgi?id=41319 7 8 Restructure the code to not use in-band data, which is what 9 got us in trouble with a signed/unsigned mismatch before. 10 11 * html/HTMLTreeBuilder.cpp: 12 (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement): 13 (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements): 14 * html/HTMLTreeBuilder.h: 15 1 16 2010-06-28 Daniel Bates <dbates@rim.com> 2 17 -
trunk/WebCore/html/HTMLTreeBuilder.cpp
r62080 r62082 915 915 } 916 916 917 int HTMLTreeBuilder::indexOfLastOpenFormattingElementOrMarker() const 918 { 919 ASSERT(!m_activeFormattingElements.isEmpty()); 920 for (int index = m_activeFormattingElements.size() - 1; index >= 0; --index) { 917 bool HTMLTreeBuilder::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const 918 { 919 if (m_activeFormattingElements.isEmpty()) 920 return false; 921 unsigned index = m_activeFormattingElements.size(); 922 do { 923 --index; 921 924 const FormattingElementEntry& entry = m_activeFormattingElements[index]; 922 if (entry.isMarker() || m_openElements.contains(entry.element())) 923 return index; 924 } 925 return -1; // No elements are open! 926 } 927 928 void HTMLTreeBuilder::reopenFormattingElementsAfterIndex(unsigned lastOpenElementIndex) 929 { 925 if (entry.isMarker() || m_openElements.contains(entry.element())) { 926 firstUnopenElementIndex = index; 927 return true; 928 } 929 } while (index); 930 return false; 931 } 932 933 void HTMLTreeBuilder::reconstructTheActiveFormattingElements() 934 { 935 unsigned firstUnopenElementIndex; 936 if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex)) 937 return; 938 930 939 Vector<FormattingElementEntry>& stack = m_activeFormattingElements; 931 unsigned unopenEntryIndex = lastOpenElementIndex + 1;940 unsigned unopenEntryIndex = firstUnopenElementIndex; 932 941 ASSERT(unopenEntryIndex < stack.size()); 933 942 for (; unopenEntryIndex < stack.size(); ++unopenEntryIndex) { … … 940 949 } 941 950 942 void HTMLTreeBuilder::reconstructTheActiveFormattingElements()943 {944 if (m_activeFormattingElements.isEmpty())945 return;946 947 int lastOpenElementIndex = indexOfLastOpenFormattingElementOrMarker();948 if (lastOpenElementIndex < m_activeFormattingElements.size() - 1)949 reopenFormattingElementsAfterIndex(lastOpenElementIndex);950 }951 952 951 void HTMLTreeBuilder::finished() 953 952 { -
trunk/WebCore/html/HTMLTreeBuilder.h
r62080 r62082 216 216 217 217 PassRefPtr<Element> createElement(AtomicHTMLToken&); 218 int indexOfLastOpenFormattingElementOrMarker() const; 219 void reopenFormattingElementsAfterIndex(unsigned lastOpenElementIndex);218 219 bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const; 220 220 void reconstructTheActiveFormattingElements(); 221 221
Note: See TracChangeset
for help on using the changeset viewer.