OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [gnu/] [xml/] [dom/] [html2/] [DomHTMLCollection.java] - Blame information for rev 769

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 769 jeremybenn
/* DomHTMLCollection.java --
2
   Copyright (C) 2005 Free Software Foundation, Inc.
3
 
4
This file is part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2, or (at your option)
9
any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; see the file COPYING.  If not, write to the
18
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301 USA.
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version. */
37
 
38
package gnu.xml.dom.html2;
39
 
40
import gnu.xml.dom.DomDOMException;
41
import java.util.ArrayList;
42
import java.util.Iterator;
43
import java.util.LinkedList;
44
import java.util.List;
45
import org.w3c.dom.DOMException;
46
import org.w3c.dom.NamedNodeMap;
47
import org.w3c.dom.Node;
48
import org.w3c.dom.NodeList;
49
import org.w3c.dom.html2.HTMLCollection;
50
import org.w3c.dom.html2.HTMLOptionsCollection;
51
import org.w3c.dom.traversal.NodeFilter;
52
import org.w3c.dom.traversal.NodeIterator;
53
 
54
/**
55
 * An HTML element collection.
56
 *
57
 * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
58
 */
59
class DomHTMLCollection
60
  implements HTMLCollection, HTMLOptionsCollection, NodeList, NodeFilter
61
{
62
 
63
  final DomHTMLDocument doc;
64
  final Node root;
65
  List nodeNames;
66
  List attributeNames;
67
  List results;
68
 
69
  DomHTMLCollection(DomHTMLDocument doc, Node root)
70
  {
71
    this.doc = doc;
72
    this.root = root;
73
  }
74
 
75
  // -- Node name and attribute filtering --
76
 
77
  void addNodeName(String name)
78
  {
79
    if (nodeNames == null)
80
      {
81
        nodeNames = new LinkedList();
82
      }
83
    nodeNames.add(name);
84
  }
85
 
86
  void addAttributeName(String name)
87
  {
88
    if (attributeNames == null)
89
      {
90
        attributeNames = new LinkedList();
91
      }
92
    attributeNames.add(name);
93
  }
94
 
95
  public short acceptNode(Node n)
96
  {
97
    if (n.getNodeType() != Node.ELEMENT_NODE)
98
      {
99
        return NodeFilter.FILTER_SKIP;
100
      }
101
    String localName = n.getLocalName();
102
    if (localName == null)
103
      {
104
        localName = n.getNodeName();
105
      }
106
    if (nodeNames != null && !acceptName(localName))
107
      {
108
        return NodeFilter.FILTER_SKIP;
109
      }
110
    if (attributeNames != null && !acceptAttributes(n.getAttributes()))
111
      {
112
        return NodeFilter.FILTER_SKIP;
113
      }
114
    return NodeFilter.FILTER_ACCEPT;
115
  }
116
 
117
  private boolean acceptName(String name)
118
  {
119
    for (Iterator i = nodeNames.iterator(); i.hasNext(); )
120
      {
121
        String nodeName = (String) i.next();
122
        if (nodeName.equalsIgnoreCase(name))
123
          {
124
            return true;
125
          }
126
      }
127
    return false;
128
  }
129
 
130
  private boolean acceptAttributes(NamedNodeMap attrs)
131
  {
132
    for (Iterator i = attributeNames.iterator(); i.hasNext(); )
133
      {
134
        String attributeName = (String) i.next();
135
        Node attr = getNamedItem(attrs, attributeName);
136
        if (attr != null)
137
          {
138
            // Check that attribute has a non-null value
139
            String nodeValue = attr.getNodeValue();
140
            if (nodeValue != null && nodeValue.length() > 0)
141
              {
142
                return true;
143
              }
144
          }
145
      }
146
    return false;
147
  }
148
 
149
  /**
150
   * Case-insensitive version of getNamedItem.
151
   */
152
  private Node getNamedItem(NamedNodeMap attrs, String name)
153
  {
154
    int len = attrs.getLength();
155
    for (int i = 0; i < len; i++)
156
      {
157
        Node attr = attrs.item(i);
158
        String attrName = attr.getLocalName();
159
        if (attrName == null)
160
          {
161
            attrName = attr.getNodeName();
162
          }
163
        if (name.equalsIgnoreCase(attrName))
164
          {
165
            return attr;
166
          }
167
      }
168
    return null;
169
  }
170
 
171
  // -- Perform query --
172
 
173
  void evaluate()
174
  {
175
    NodeIterator i = doc.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
176
                                            this, true);
177
    results = new ArrayList();
178
    for (Node node = i.nextNode(); node != null; node = i.nextNode())
179
      {
180
        results.add(node);
181
      }
182
  }
183
 
184
  // -- HTMLCollection/NodeList interface --
185
 
186
  public int getLength()
187
  {
188
    return results.size();
189
  }
190
 
191
  public void setLength(int length)
192
  {
193
    throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
194
  }
195
 
196
  public Node item(int index)
197
  {
198
    return (Node) results.get(index);
199
  }
200
 
201
  public Node namedItem(String name)
202
  {
203
    boolean xhtml = false; // FIXME detect XHTML document
204
    for (Iterator i = results.iterator(); i.hasNext(); )
205
      {
206
        Node node = (Node) i.next();
207
        NamedNodeMap attrs = node.getAttributes();
208
        Node attr = getNamedItem(attrs, "id");
209
        if (name.equals(attr.getTextContent()))
210
          {
211
            return node;
212
          }
213
        if (!xhtml)
214
          {
215
            attr = getNamedItem(attrs, "name");
216
            if (name.equals(attr.getTextContent()))
217
              {
218
                return node;
219
              }
220
          }
221
      }
222
    return null;
223
  }
224
 
225
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.