KHtml

html_listimpl.cpp
1 /**
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1999 Lars Knoll ([email protected])
5  * (C) 1999 Antti Koivisto ([email protected])
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB. If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23 #include "html_listimpl.h"
24 
25 using namespace DOM;
26 
27 #include "css/cssproperties.h"
28 #include "css/cssvalues.h"
29 #include "rendering/render_list.h"
30 #include "xml/dom_docimpl.h"
31 
32 using namespace khtml;
33 
34 NodeImpl::Id HTMLUListElementImpl::id() const
35 {
36  return ID_UL;
37 }
38 
39 void HTMLUListElementImpl::parseAttribute(AttributeImpl *attr)
40 {
41  switch (attr->id()) {
42  case ATTR_TYPE:
43  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, attr->value());
44  break;
45  default:
46  HTMLElementImpl::parseAttribute(attr);
47  }
48 }
49 
50 // -------------------------------------------------------------------------
51 
52 NodeImpl::Id HTMLDirectoryElementImpl::id() const
53 {
54  return ID_DIR;
55 }
56 
57 // -------------------------------------------------------------------------
58 
59 NodeImpl::Id HTMLMenuElementImpl::id() const
60 {
61  return ID_MENU;
62 }
63 
64 // -------------------------------------------------------------------------
65 
66 NodeImpl::Id HTMLOListElementImpl::id() const
67 {
68  return ID_OL;
69 }
70 
71 void HTMLOListElementImpl::parseAttribute(AttributeImpl *attr)
72 {
73  switch (attr->id()) {
74  case ATTR_TYPE:
75  if (strcmp(attr->value(), "a") == 0) {
76  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ALPHA);
77  } else if (strcmp(attr->value(), "A") == 0) {
78  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ALPHA);
79  } else if (strcmp(attr->value(), "i") == 0) {
80  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ROMAN);
81  } else if (strcmp(attr->value(), "I") == 0) {
82  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ROMAN);
83  } else if (strcmp(attr->value(), "1") == 0) {
84  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_DECIMAL);
85  }
86  break;
87  case ATTR_START:
88  _start = attr->val() ? attr->val()->toInt() : 1;
89  break;
90  default:
91  HTMLUListElementImpl::parseAttribute(attr);
92  }
93 }
94 
95 // -------------------------------------------------------------------------
96 
97 NodeImpl::Id HTMLLIElementImpl::id() const
98 {
99  return ID_LI;
100 }
101 
102 void HTMLLIElementImpl::parseAttribute(AttributeImpl *attr)
103 {
104  switch (attr->id()) {
105  case ATTR_VALUE:
106  if (m_render && m_render->isListItem() && m_render->style()->display() == LIST_ITEM) {
107  static_cast<RenderListItem *>(m_render)->setValue(attr->value().toInt());
108  }
109  break;
110  case ATTR_TYPE:
111  if (strcmp(attr->value(), "a") == 0) {
112  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ALPHA);
113  } else if (strcmp(attr->value(), "A") == 0) {
114  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ALPHA);
115  } else if (strcmp(attr->value(), "i") == 0) {
116  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ROMAN);
117  } else if (strcmp(attr->value(), "I") == 0) {
118  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ROMAN);
119  } else if (strcmp(attr->value(), "1") == 0) {
120  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_DECIMAL);
121  } else {
122  addCSSProperty(CSS_PROP_LIST_STYLE_TYPE, attr->value());
123  }
124  break;
125  default:
126  HTMLElementImpl::parseAttribute(attr);
127  }
128 }
129 
130 void HTMLLIElementImpl::attach()
131 {
132  assert(!attached());
133 
134  HTMLElementImpl::attach();
135 
136  if (m_render && m_render->style()->display() == LIST_ITEM) {
137  RenderListItem *render = static_cast<RenderListItem *>(renderer());
138  NodeImpl *listNode = nullptr;
139  NodeImpl *n = parentNode();
140  while (!listNode && n) {
141  switch (n->id()) {
142  case ID_UL:
143  case ID_OL:
144  listNode = n;
145  break;
146  }
147  n = n->parentNode();
148  }
149 
150  // if we are not in a list, then position us inside
151  // can't use addCSSProperty cause its inherited attribute
152  render->setInsideList(listNode);
153 
154  DOMString v = getAttribute(ATTR_VALUE);
155  if (!v.isEmpty()) {
156  render->setValue(v.implementation()->toInt());
157  }
158  }
159 }
160 
161 // -------------------------------------------------------------------------
162 
163 NodeImpl::Id HTMLDListElementImpl::id() const
164 {
165  return ID_DL;
166 }
167 
This file is part of the HTML rendering engine for KDE.
This class implements the basic string we use in the DOM.
Definition: dom_string.h:44
This library provides a full-featured HTML parser and widget.
DOMStringImpl * implementation() const
Definition: dom_string.h:145
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sat Oct 16 2021 22:47:54 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.