| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 RefPtrWillBeRawPtr<HTMLHtmlElement> html = HTMLHtmlElement::create(*this); | 74 RefPtrWillBeRawPtr<HTMLHtmlElement> html = HTMLHtmlElement::create(*this); |
| 75 parserAppendChild(html); | 75 parserAppendChild(html); |
| 76 RefPtrWillBeRawPtr<HTMLHeadElement> head = HTMLHeadElement::create(*this); | 76 RefPtrWillBeRawPtr<HTMLHeadElement> head = HTMLHeadElement::create(*this); |
| 77 html->parserAppendChild(head); | 77 html->parserAppendChild(head); |
| 78 RefPtrWillBeRawPtr<HTMLBodyElement> body = HTMLBodyElement::create(*this); | 78 RefPtrWillBeRawPtr<HTMLBodyElement> body = HTMLBodyElement::create(*this); |
| 79 html->parserAppendChild(body); | 79 html->parserAppendChild(body); |
| 80 | 80 |
| 81 // Create a line gutter div that can be used to make sure the gutter extends
down the height of the whole | 81 // Create a line gutter div that can be used to make sure the gutter extends
down the height of the whole |
| 82 // document. | 82 // document. |
| 83 RefPtrWillBeRawPtr<HTMLDivElement> div = HTMLDivElement::create(*this); | 83 RefPtrWillBeRawPtr<HTMLDivElement> div = HTMLDivElement::create(*this); |
| 84 div->setAttribute(classAttr, "webkit-line-gutter-backdrop"); | 84 div->setAttribute(classAttr, "line-gutter-backdrop"); |
| 85 body->parserAppendChild(div); | 85 body->parserAppendChild(div); |
| 86 | 86 |
| 87 RefPtrWillBeRawPtr<HTMLTableElement> table = HTMLTableElement::create(*this)
; | 87 RefPtrWillBeRawPtr<HTMLTableElement> table = HTMLTableElement::create(*this)
; |
| 88 body->parserAppendChild(table); | 88 body->parserAppendChild(table); |
| 89 m_tbody = HTMLTableSectionElement::create(tbodyTag, *this); | 89 m_tbody = HTMLTableSectionElement::create(tbodyTag, *this); |
| 90 table->parserAppendChild(m_tbody); | 90 table->parserAppendChild(m_tbody); |
| 91 m_current = m_tbody; | 91 m_current = m_tbody; |
| 92 m_lineNumber = 0; | 92 m_lineNumber = 0; |
| 93 } | 93 } |
| 94 | 94 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 115 processCommentToken(source, token); | 115 processCommentToken(source, token); |
| 116 break; | 116 break; |
| 117 case HTMLToken::Character: | 117 case HTMLToken::Character: |
| 118 processCharacterToken(source, token, annotation); | 118 processCharacterToken(source, token, annotation); |
| 119 break; | 119 break; |
| 120 } | 120 } |
| 121 } | 121 } |
| 122 | 122 |
| 123 void HTMLViewSourceDocument::processDoctypeToken(const String& source, HTMLToken
&) | 123 void HTMLViewSourceDocument::processDoctypeToken(const String& source, HTMLToken
&) |
| 124 { | 124 { |
| 125 m_current = addSpanWithClassName("webkit-html-doctype"); | 125 m_current = addSpanWithClassName("html-doctype"); |
| 126 addText(source, "webkit-html-doctype"); | 126 addText(source, "html-doctype"); |
| 127 m_current = m_td; | 127 m_current = m_td; |
| 128 } | 128 } |
| 129 | 129 |
| 130 void HTMLViewSourceDocument::processEndOfFileToken(const String& source, HTMLTok
en&) | 130 void HTMLViewSourceDocument::processEndOfFileToken(const String& source, HTMLTok
en&) |
| 131 { | 131 { |
| 132 m_current = addSpanWithClassName("webkit-html-end-of-file"); | 132 m_current = addSpanWithClassName("html-end-of-file"); |
| 133 addText(source, "webkit-html-end-of-file"); | 133 addText(source, "html-end-of-file"); |
| 134 m_current = m_td; | 134 m_current = m_td; |
| 135 } | 135 } |
| 136 | 136 |
| 137 void HTMLViewSourceDocument::processTagToken(const String& source, HTMLToken& to
ken, SourceAnnotation annotation) | 137 void HTMLViewSourceDocument::processTagToken(const String& source, HTMLToken& to
ken, SourceAnnotation annotation) |
| 138 { | 138 { |
| 139 maybeAddSpanForAnnotation(annotation); | 139 maybeAddSpanForAnnotation(annotation); |
| 140 m_current = addSpanWithClassName("webkit-html-tag"); | 140 m_current = addSpanWithClassName("html-tag"); |
| 141 | 141 |
| 142 AtomicString tagName(token.name()); | 142 AtomicString tagName(token.name()); |
| 143 | 143 |
| 144 unsigned index = 0; | 144 unsigned index = 0; |
| 145 HTMLToken::AttributeList::const_iterator iter = token.attributes().begin(); | 145 HTMLToken::AttributeList::const_iterator iter = token.attributes().begin(); |
| 146 while (index < source.length()) { | 146 while (index < source.length()) { |
| 147 if (iter == token.attributes().end()) { | 147 if (iter == token.attributes().end()) { |
| 148 // We want to show the remaining characters in the token. | 148 // We want to show the remaining characters in the token. |
| 149 index = addRange(source, index, source.length(), emptyAtom); | 149 index = addRange(source, index, source.length(), emptyAtom); |
| 150 ASSERT(index == source.length()); | 150 ASSERT(index == source.length()); |
| 151 break; | 151 break; |
| 152 } | 152 } |
| 153 | 153 |
| 154 AtomicString name(iter->name); | 154 AtomicString name(iter->name); |
| 155 AtomicString value(StringImpl::create8BitIfPossible(iter->value)); | 155 AtomicString value(StringImpl::create8BitIfPossible(iter->value)); |
| 156 | 156 |
| 157 index = addRange(source, index, iter->nameRange.start - token.startIndex
(), emptyAtom); | 157 index = addRange(source, index, iter->nameRange.start - token.startIndex
(), emptyAtom); |
| 158 index = addRange(source, index, iter->nameRange.end - token.startIndex()
, "webkit-html-attribute-name"); | 158 index = addRange(source, index, iter->nameRange.end - token.startIndex()
, "html-attribute-name"); |
| 159 | 159 |
| 160 if (tagName == baseTag && name == hrefAttr) | 160 if (tagName == baseTag && name == hrefAttr) |
| 161 addBase(value); | 161 addBase(value); |
| 162 | 162 |
| 163 index = addRange(source, index, iter->valueRange.start - token.startInde
x(), emptyAtom); | 163 index = addRange(source, index, iter->valueRange.start - token.startInde
x(), emptyAtom); |
| 164 | 164 |
| 165 bool isLink = name == srcAttr || name == hrefAttr; | 165 bool isLink = name == srcAttr || name == hrefAttr; |
| 166 index = addRange(source, index, iter->valueRange.end - token.startIndex(
), "webkit-html-attribute-value", isLink, tagName == aTag, value); | 166 index = addRange(source, index, iter->valueRange.end - token.startIndex(
), "html-attribute-value", isLink, tagName == aTag, value); |
| 167 | 167 |
| 168 ++iter; | 168 ++iter; |
| 169 } | 169 } |
| 170 m_current = m_td; | 170 m_current = m_td; |
| 171 } | 171 } |
| 172 | 172 |
| 173 void HTMLViewSourceDocument::processCommentToken(const String& source, HTMLToken
&) | 173 void HTMLViewSourceDocument::processCommentToken(const String& source, HTMLToken
&) |
| 174 { | 174 { |
| 175 m_current = addSpanWithClassName("webkit-html-comment"); | 175 m_current = addSpanWithClassName("html-comment"); |
| 176 addText(source, "webkit-html-comment"); | 176 addText(source, "html-comment"); |
| 177 m_current = m_td; | 177 m_current = m_td; |
| 178 } | 178 } |
| 179 | 179 |
| 180 void HTMLViewSourceDocument::processCharacterToken(const String& source, HTMLTok
en&, SourceAnnotation annotation) | 180 void HTMLViewSourceDocument::processCharacterToken(const String& source, HTMLTok
en&, SourceAnnotation annotation) |
| 181 { | 181 { |
| 182 addText(source, "", annotation); | 182 addText(source, "", annotation); |
| 183 } | 183 } |
| 184 | 184 |
| 185 PassRefPtrWillBeRawPtr<Element> HTMLViewSourceDocument::addSpanWithClassName(con
st AtomicString& className) | 185 PassRefPtrWillBeRawPtr<Element> HTMLViewSourceDocument::addSpanWithClassName(con
st AtomicString& className) |
| 186 { | 186 { |
| 187 if (m_current == m_tbody) { | 187 if (m_current == m_tbody) { |
| 188 addLine(className); | 188 addLine(className); |
| 189 return m_current; | 189 return m_current; |
| 190 } | 190 } |
| 191 | 191 |
| 192 RefPtrWillBeRawPtr<HTMLSpanElement> span = HTMLSpanElement::create(*this); | 192 RefPtrWillBeRawPtr<HTMLSpanElement> span = HTMLSpanElement::create(*this); |
| 193 span->setAttribute(classAttr, className); | 193 span->setAttribute(classAttr, className); |
| 194 m_current->parserAppendChild(span); | 194 m_current->parserAppendChild(span); |
| 195 return span.release(); | 195 return span.release(); |
| 196 } | 196 } |
| 197 | 197 |
| 198 void HTMLViewSourceDocument::addLine(const AtomicString& className) | 198 void HTMLViewSourceDocument::addLine(const AtomicString& className) |
| 199 { | 199 { |
| 200 // Create a table row. | 200 // Create a table row. |
| 201 RefPtrWillBeRawPtr<HTMLTableRowElement> trow = HTMLTableRowElement::create(*
this); | 201 RefPtrWillBeRawPtr<HTMLTableRowElement> trow = HTMLTableRowElement::create(*
this); |
| 202 m_tbody->parserAppendChild(trow); | 202 m_tbody->parserAppendChild(trow); |
| 203 | 203 |
| 204 // Create a cell that will hold the line number (it is generated in the styl
esheet using counters). | 204 // Create a cell that will hold the line number (it is generated in the styl
esheet using counters). |
| 205 RefPtrWillBeRawPtr<HTMLTableCellElement> td = HTMLTableCellElement::create(t
dTag, *this); | 205 RefPtrWillBeRawPtr<HTMLTableCellElement> td = HTMLTableCellElement::create(t
dTag, *this); |
| 206 td->setAttribute(classAttr, "webkit-line-number"); | 206 td->setAttribute(classAttr, "line-number"); |
| 207 td->setIntegralAttribute(valueAttr, ++m_lineNumber); | 207 td->setIntegralAttribute(valueAttr, ++m_lineNumber); |
| 208 trow->parserAppendChild(td); | 208 trow->parserAppendChild(td); |
| 209 | 209 |
| 210 // Create a second cell for the line contents | 210 // Create a second cell for the line contents |
| 211 td = HTMLTableCellElement::create(tdTag, *this); | 211 td = HTMLTableCellElement::create(tdTag, *this); |
| 212 td->setAttribute(classAttr, "webkit-line-content"); | 212 td->setAttribute(classAttr, "line-content"); |
| 213 trow->parserAppendChild(td); | 213 trow->parserAppendChild(td); |
| 214 m_current = m_td = td; | 214 m_current = m_td = td; |
| 215 | 215 |
| 216 // Open up the needed spans. | 216 // Open up the needed spans. |
| 217 if (!className.isEmpty()) { | 217 if (!className.isEmpty()) { |
| 218 if (className == "webkit-html-attribute-name" || className == "webkit-ht
ml-attribute-value") | 218 if (className == "html-attribute-name" || className == "html-attribute-v
alue") |
| 219 m_current = addSpanWithClassName("webkit-html-tag"); | 219 m_current = addSpanWithClassName("html-tag"); |
| 220 m_current = addSpanWithClassName(className); | 220 m_current = addSpanWithClassName(className); |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 | 223 |
| 224 void HTMLViewSourceDocument::finishLine() | 224 void HTMLViewSourceDocument::finishLine() |
| 225 { | 225 { |
| 226 if (!m_current->hasChildren()) { | 226 if (!m_current->hasChildren()) { |
| 227 RefPtrWillBeRawPtr<HTMLBRElement> br = HTMLBRElement::create(*this); | 227 RefPtrWillBeRawPtr<HTMLBRElement> br = HTMLBRElement::create(*this); |
| 228 m_current->parserAppendChild(br); | 228 m_current->parserAppendChild(br); |
| 229 } | 229 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 { | 281 { |
| 282 RefPtrWillBeRawPtr<HTMLBaseElement> base = HTMLBaseElement::create(*this); | 282 RefPtrWillBeRawPtr<HTMLBaseElement> base = HTMLBaseElement::create(*this); |
| 283 base->setAttribute(hrefAttr, href); | 283 base->setAttribute(hrefAttr, href); |
| 284 m_current->parserAppendChild(base); | 284 m_current->parserAppendChild(base); |
| 285 return base.release(); | 285 return base.release(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 PassRefPtrWillBeRawPtr<Element> HTMLViewSourceDocument::addLink(const AtomicStri
ng& url, bool isAnchor) | 288 PassRefPtrWillBeRawPtr<Element> HTMLViewSourceDocument::addLink(const AtomicStri
ng& url, bool isAnchor) |
| 289 { | 289 { |
| 290 if (m_current == m_tbody) | 290 if (m_current == m_tbody) |
| 291 addLine("webkit-html-tag"); | 291 addLine("html-tag"); |
| 292 | 292 |
| 293 // Now create a link for the attribute value instead of a span. | 293 // Now create a link for the attribute value instead of a span. |
| 294 RefPtrWillBeRawPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(*th
is); | 294 RefPtrWillBeRawPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(*th
is); |
| 295 const char* classValue; | 295 const char* classValue; |
| 296 if (isAnchor) | 296 if (isAnchor) |
| 297 classValue = "webkit-html-attribute-value webkit-html-external-link"; | 297 classValue = "html-attribute-value html-external-link"; |
| 298 else | 298 else |
| 299 classValue = "webkit-html-attribute-value webkit-html-resource-link"; | 299 classValue = "html-attribute-value html-resource-link"; |
| 300 anchor->setAttribute(classAttr, classValue); | 300 anchor->setAttribute(classAttr, classValue); |
| 301 anchor->setAttribute(targetAttr, "_blank"); | 301 anchor->setAttribute(targetAttr, "_blank"); |
| 302 anchor->setAttribute(hrefAttr, url); | 302 anchor->setAttribute(hrefAttr, url); |
| 303 m_current->parserAppendChild(anchor); | 303 m_current->parserAppendChild(anchor); |
| 304 return anchor.release(); | 304 return anchor.release(); |
| 305 } | 305 } |
| 306 | 306 |
| 307 void HTMLViewSourceDocument::maybeAddSpanForAnnotation(SourceAnnotation annotati
on) | 307 void HTMLViewSourceDocument::maybeAddSpanForAnnotation(SourceAnnotation annotati
on) |
| 308 { | 308 { |
| 309 if (annotation == AnnotateSourceAsXSS) { | 309 if (annotation == AnnotateSourceAsXSS) { |
| 310 m_current = addSpanWithClassName("webkit-highlight"); | 310 m_current = addSpanWithClassName("highlight"); |
| 311 m_current->setAttribute(titleAttr, kXSSDetected); | 311 m_current->setAttribute(titleAttr, kXSSDetected); |
| 312 } | 312 } |
| 313 } | 313 } |
| 314 | 314 |
| 315 void HTMLViewSourceDocument::trace(Visitor* visitor) | 315 void HTMLViewSourceDocument::trace(Visitor* visitor) |
| 316 { | 316 { |
| 317 visitor->trace(m_current); | 317 visitor->trace(m_current); |
| 318 visitor->trace(m_tbody); | 318 visitor->trace(m_tbody); |
| 319 visitor->trace(m_td); | 319 visitor->trace(m_td); |
| 320 HTMLDocument::trace(visitor); | 320 HTMLDocument::trace(visitor); |
| 321 } | 321 } |
| 322 | 322 |
| 323 } | 323 } |
| OLD | NEW |