1 /* 2 * Copyright (C) 1999 Lars Knoll (knoll (at) kde.org) 3 * (C) 1999 Antti Koivisto (koivisto (at) kde.org) 4 * Copyright (C) 2010 Apple Inc. All rights reserved. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #include "config.h" 24 #include "HTMLOListElement.h" 25 26 #include "Attribute.h" 27 #include "CSSPropertyNames.h" 28 #include "CSSValueKeywords.h" 29 #include "HTMLNames.h" 30 #include "RenderListItem.h" 31 32 namespace WebCore { 33 34 using namespace HTMLNames; 35 36 HTMLOListElement::HTMLOListElement(const QualifiedName& tagName, Document* document) 37 : HTMLElement(tagName, document) 38 , m_start(1) 39 { 40 ASSERT(hasTagName(olTag)); 41 } 42 43 PassRefPtr<HTMLOListElement> HTMLOListElement::create(Document* document) 44 { 45 return adoptRef(new HTMLOListElement(olTag, document)); 46 } 47 48 PassRefPtr<HTMLOListElement> HTMLOListElement::create(const QualifiedName& tagName, Document* document) 49 { 50 return adoptRef(new HTMLOListElement(tagName, document)); 51 } 52 53 bool HTMLOListElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const 54 { 55 if (attrName == typeAttr) { 56 result = eListItem; // Share with <li> 57 return false; 58 } 59 60 return HTMLElement::mapToEntry(attrName, result); 61 } 62 63 void HTMLOListElement::parseMappedAttribute(Attribute* attr) 64 { 65 if (attr->name() == typeAttr) { 66 if (attr->value() == "a") 67 addCSSProperty(attr, CSSPropertyListStyleType, CSSValueLowerAlpha); 68 else if (attr->value() == "A") 69 addCSSProperty(attr, CSSPropertyListStyleType, CSSValueUpperAlpha); 70 else if (attr->value() == "i") 71 addCSSProperty(attr, CSSPropertyListStyleType, CSSValueLowerRoman); 72 else if (attr->value() == "I") 73 addCSSProperty(attr, CSSPropertyListStyleType, CSSValueUpperRoman); 74 else if (attr->value() == "1") 75 addCSSProperty(attr, CSSPropertyListStyleType, CSSValueDecimal); 76 } else if (attr->name() == startAttr) { 77 bool canParse; 78 int start = attr->value().toInt(&canParse); 79 if (!canParse) 80 start = 1; 81 if (start == m_start) 82 return; 83 m_start = start; 84 for (RenderObject* child = renderer(); child; child = child->nextInPreOrder(renderer())) { 85 if (child->isListItem()) 86 toRenderListItem(child)->updateValue(); 87 } 88 } else 89 HTMLElement::parseMappedAttribute(attr); 90 } 91 92 void HTMLOListElement::setStart(int start) 93 { 94 setAttribute(startAttr, String::number(start)); 95 } 96 97 } 98