org.w3c.tidy.DOMAttrImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jtidy Show documentation
Show all versions of jtidy Show documentation
JTidy is a Java port of HTML Tidy, a HTML syntax checker and pretty printer. Like its non-Java cousin, JTidy can be
used as a tool for cleaning up malformed and faulty HTML. In addition, JTidy provides a DOM interface to the
document that is being processed, which effectively makes you able to use JTidy as a DOM parser for real-world HTML.
/*
* Java HTML Tidy - JTidy
* HTML parser and pretty printer
*
* Copyright (c) 1998-2000 World Wide Web Consortium (Massachusetts
* Institute of Technology, Institut National de Recherche en
* Informatique et en Automatique, Keio University). All Rights
* Reserved.
*
* Contributing Author(s):
*
* Dave Raggett
* Andy Quick (translation to Java)
* Gary L Peskin (Java development)
* Sami Lempinen (release management)
* Fabrizio Giustina
*
* The contributing author(s) would like to thank all those who
* helped with testing, bug fixes, and patience. This wouldn't
* have been possible without all of you.
*
* COPYRIGHT NOTICE:
*
* This software and documentation is provided "as is," and
* the copyright holders and contributing author(s) make no
* representations or warranties, express or implied, including
* but not limited to, warranties of merchantability or fitness
* for any particular purpose or that the use of the software or
* documentation will not infringe any third party patents,
* copyrights, trademarks or other rights.
*
* The copyright holders and contributing author(s) will not be
* liable for any direct, indirect, special or consequential damages
* arising out of any use of the software or documentation, even if
* advised of the possibility of such damage.
*
* Permission is hereby granted to use, copy, modify, and distribute
* this source code, or portions hereof, documentation and executables,
* for any purpose, without fee, subject to the following restrictions:
*
* 1. The origin of this source code must not be misrepresented.
* 2. Altered versions must be plainly marked as such and must
* not be misrepresented as being the original source.
* 3. This Copyright notice may not be removed or altered from any
* source or altered source distribution.
*
* The copyright holders and contributing author(s) specifically
* permit, without fee, and encourage the use of this source code
* as a component for supporting the Hypertext Markup Language in
* commercial products. If you use this source code in a product,
* acknowledgment is not required but would be appreciated.
*
*/
package org.w3c.tidy;
import org.w3c.dom.DOMException;
import org.w3c.dom.TypeInfo;
/**
* Tidy implementation of org.w3c.dom.DOMAttrImpl.
* @author Dave Raggett [email protected]
* @author Andy Quick [email protected] (translation to Java)
* @author Fabrizio Giustina
* @version $Revision$ ($Author$)
*/
public class DOMAttrImpl extends DOMNodeImpl implements org.w3c.dom.Attr, Cloneable
{
/**
* wrapped org.w3c.tidy.AttVal.
*/
protected AttVal avAdaptee;
/**
* instantiates a new DOMAttrImpl which wraps the given AttVal.
* @param adaptee wrapped AttVal
*/
protected DOMAttrImpl(AttVal adaptee)
{
super(null); // must override all methods of DOMNodeImpl
this.avAdaptee = adaptee;
}
/**
* @see org.w3c.dom.Node#getNodeValue()
*/
public String getNodeValue() throws DOMException
{
return getValue();
}
/**
* @see org.w3c.dom.Node#setNodeValue(java.lang.String)
*/
public void setNodeValue(String nodeValue) throws DOMException
{
setValue(nodeValue);
}
/**
* @see org.w3c.dom.Node#getNodeName()
*/
public String getNodeName()
{
return getName();
}
/**
* @see org.w3c.dom.Node#getNodeType()
*/
public short getNodeType()
{
return org.w3c.dom.Node.ATTRIBUTE_NODE;
}
/**
* @see org.w3c.dom.Attr#getName
*/
public String getName()
{
return avAdaptee.attribute;
}
/**
* @see org.w3c.dom.Attr#getSpecified
*/
public boolean getSpecified()
{
return avAdaptee.value != null;
}
/**
* @see org.w3c.dom.Attr#getValue
*/
public String getValue()
{
// Thanks to Brett Knights [email protected] for this fix.
return (avAdaptee.value == null) ? avAdaptee.attribute : avAdaptee.value;
}
/**
* @see org.w3c.dom.Attr#setValue(java.lang.String)
*/
public void setValue(String value)
{
avAdaptee.value = value;
}
/**
* @see org.w3c.dom.Node#getParentNode()
*/
public org.w3c.dom.Node getParentNode()
{
// Attr.getParentNode() should always return null
// http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-637646024
return null;
}
/**
* TODO DOM level 2 getChildNodes() Not implemented. Returns an empty NodeList.
* @see org.w3c.dom.Node#getChildNodes()
*/
public org.w3c.dom.NodeList getChildNodes()
{
// Calling getChildNodes on a DOM Attr node does return the children of the Attr, which are the text and
// EntityReference nodes that make up the Attr's content.
return new DOMNodeListImpl(null);
}
/**
* TODO DOM level 2 getFirstChild() Not implemented. Returns null.
* @see org.w3c.dom.Node#getFirstChild()
*/
public org.w3c.dom.Node getFirstChild()
{
return null;
}
/**
* TODO DOM level 2 getLastChild() Not implemented. Returns null.
* @see org.w3c.dom.Node#getLastChild()
*/
public org.w3c.dom.Node getLastChild()
{
return null;
}
/**
* @see org.w3c.dom.Node#getPreviousSibling()
*/
public org.w3c.dom.Node getPreviousSibling()
{
// Attr.getPreviousSibling() should always return null
return null;
}
/**
* @see org.w3c.dom.Node#getNextSibling()
*/
public org.w3c.dom.Node getNextSibling()
{
// Attr.getNextSibling() should always return null
return null;
}
/**
* @see org.w3c.dom.Node#getAttributes()
*/
public org.w3c.dom.NamedNodeMap getAttributes()
{
return null;
}
/**
* TODO DOM level 2 getOwnerDocument() Not implemented. Returns null.
* @see org.w3c.dom.Node#getOwnerDocument()
*/
public org.w3c.dom.Document getOwnerDocument()
{
return null;
}
/**
* Not supported.
* @see org.w3c.dom.Node#insertBefore(org.w3c.dom.Node, org.w3c.dom.Node)
*/
public org.w3c.dom.Node insertBefore(org.w3c.dom.Node newChild, org.w3c.dom.Node refChild) throws DOMException
{
throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "Not supported");
}
/**
* Not supported.
* @see org.w3c.dom.Node#replaceChild(org.w3c.dom.Node, org.w3c.dom.Node)
*/
public org.w3c.dom.Node replaceChild(org.w3c.dom.Node newChild, org.w3c.dom.Node oldChild) throws DOMException
{
throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "Not supported");
}
/**
* Not supported.
* @see org.w3c.dom.Node#removeChild(org.w3c.dom.Node)
*/
public org.w3c.dom.Node removeChild(org.w3c.dom.Node oldChild) throws DOMException
{
throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "Not supported");
}
/**
* Not supported.
* @see org.w3c.dom.Node#appendChild(org.w3c.dom.Node)
*/
public org.w3c.dom.Node appendChild(org.w3c.dom.Node newChild) throws DOMException
{
throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, "Not supported");
}
/**
* @see org.w3c.dom.Node#hasChildNodes()
*/
public boolean hasChildNodes()
{
return false;
}
/**
* @see org.w3c.dom.Node#cloneNode(boolean)
*/
public org.w3c.dom.Node cloneNode(boolean deep)
{
// http://java.sun.com/j2se/1.5.0/docs/api/index.html?org/w3c/dom/Attr.html
// Cloning an Attr always clones its children, since they represent its value, no matter whether this is a deep
// clone or not.
return (org.w3c.dom.Node) clone();
}
/**
* TODO DOM level 2 getOwnerElement() Not implemented. Returns null.
* @see org.w3c.dom.Attr#getOwnerElement()
*/
public org.w3c.dom.Element getOwnerElement()
{
return null;
}
/**
* TODO DOM level 3 getSchemaTypeInfo() Not implemented. Returns null.
* @see org.w3c.dom.Attr#getSchemaTypeInfo()
*/
public TypeInfo getSchemaTypeInfo()
{
return null;
}
/**
* @see org.w3c.dom.Attr#isId()
*/
public boolean isId()
{
return "id".equals(this.avAdaptee.getAttribute());
}
/**
* @see java.lang.Object#clone()
*/
protected Object clone()
{
DOMAttrImpl clone;
try
{
clone = (DOMAttrImpl) super.clone();
}
catch (CloneNotSupportedException e)
{
// should never happen
throw new RuntimeException("Clone not supported");
}
clone.avAdaptee = (AttVal) this.avAdaptee.clone();
return clone;
}
}