Imported GNU Classpath 0.90
Imported GNU Classpath 0.90
* scripts/makemake.tcl: Set gnu/java/awt/peer/swing to ignore.
* gnu/classpath/jdwp/VMFrame.java (SIZE): New constant.
* java/lang/VMCompiler.java: Use gnu.java.security.hash.MD5.
* java/lang/Math.java: New override file.
* java/lang/Character.java: Merged from Classpath.
(start, end): Now 'int's.
(canonicalName): New field.
(CANONICAL_NAME, NO_SPACES_NAME, CONSTANT_NAME): New constants.
(UnicodeBlock): Added argument.
(of): New overload.
(forName): New method.
Updated unicode blocks.
(sets): Updated.
* sources.am: Regenerated.
* Makefile.in: Likewise.
From-SVN: r111942
This commit is contained in:
@@ -2182,6 +2182,7 @@ loop:
|
||||
{
|
||||
nest++;
|
||||
}
|
||||
break;
|
||||
case ']':
|
||||
if (tryRead("]>"))
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* DomCharacterData.java --
|
||||
Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999,2000,2001,2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -39,6 +39,8 @@ package gnu.xml.dom;
|
||||
|
||||
import org.w3c.dom.CharacterData;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.events.MutationEvent;
|
||||
|
||||
|
||||
@@ -55,6 +57,30 @@ public abstract class DomCharacterData
|
||||
implements CharacterData
|
||||
{
|
||||
|
||||
/**
|
||||
* Empty node list representing the children of character data nodes.
|
||||
*/
|
||||
static class EmptyNodeList
|
||||
implements NodeList
|
||||
{
|
||||
|
||||
public int getLength()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Node item(int index)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Singleton empty node list for character data nodes.
|
||||
*/
|
||||
static final NodeList CHILD_NODES = new EmptyNodeList();
|
||||
|
||||
private String text;
|
||||
|
||||
// package private
|
||||
@@ -279,6 +305,15 @@ public abstract class DomCharacterData
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an empty node list.
|
||||
* Character data nodes do not have children.
|
||||
*/
|
||||
public NodeList getChildNodes()
|
||||
{
|
||||
return CHILD_NODES;
|
||||
}
|
||||
|
||||
/**
|
||||
* The base URI for character data is <code>null</code>.
|
||||
* @since DOM Level 3 Core
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* DomDocumentBuilder.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -37,9 +37,11 @@ exception statement from your version. */
|
||||
|
||||
package gnu.xml.dom;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import org.w3c.dom.Document;
|
||||
@@ -157,8 +159,18 @@ class DomDocumentBuilder
|
||||
}
|
||||
else
|
||||
{
|
||||
URL url = new URL(systemId);
|
||||
input.setByteStream(url.openStream());
|
||||
try
|
||||
{
|
||||
URL url = new URL(systemId);
|
||||
input.setByteStream(url.openStream());
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
// Maybe this is a relative file URL
|
||||
File cwd = new File(System.getProperty("user.dir"));
|
||||
URL url = new URL(cwd.toURL(), systemId);
|
||||
input.setByteStream(url.openStream());
|
||||
}
|
||||
}
|
||||
}
|
||||
input.setPublicId(is.getPublicId());
|
||||
|
||||
@@ -37,6 +37,7 @@ exception statement from your version. */
|
||||
|
||||
package gnu.xml.dom;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.FactoryConfigurationError;
|
||||
@@ -59,6 +60,7 @@ public class DomDocumentBuilderFactory
|
||||
|
||||
final DOMImplementation impl;
|
||||
final DOMImplementationLS ls;
|
||||
private boolean secureProcessing;
|
||||
|
||||
public DomDocumentBuilderFactory()
|
||||
{
|
||||
@@ -124,5 +126,26 @@ public class DomDocumentBuilderFactory
|
||||
// TODO
|
||||
}
|
||||
|
||||
public void setFeature(String name, boolean value)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (name == null)
|
||||
throw new NullPointerException();
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
{
|
||||
secureProcessing = true;
|
||||
return;
|
||||
}
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
public boolean getFeature(String name)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
return secureProcessing;
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ import org.xml.sax.XMLReader;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
@@ -70,6 +71,7 @@ public final class JAXPFactory
|
||||
private static final String FEATURE = "http://xml.org/sax/features/";
|
||||
|
||||
private SAXParserFactory pf;
|
||||
private boolean secureProcessing;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
@@ -138,6 +140,27 @@ public final class JAXPFactory
|
||||
throw new IllegalArgumentException(name);
|
||||
}
|
||||
|
||||
public void setFeature(String name, boolean value)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (name == null)
|
||||
throw new NullPointerException();
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
{
|
||||
secureProcessing = true;
|
||||
return;
|
||||
}
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
public boolean getFeature(String name)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
return secureProcessing;
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
static final class JAXPBuilder
|
||||
extends DocumentBuilder
|
||||
implements ErrorHandler
|
||||
|
||||
@@ -37,6 +37,7 @@ exception statement from your version. */
|
||||
|
||||
package gnu.xml.libxmlj.dom;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
@@ -47,9 +48,11 @@ import javax.xml.parsers.ParserConfigurationException;
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class GnomeDocumentBuilderFactory
|
||||
extends DocumentBuilderFactory
|
||||
extends DocumentBuilderFactory
|
||||
{
|
||||
|
||||
private boolean secureProcessing;
|
||||
|
||||
public GnomeDocumentBuilderFactory ()
|
||||
{
|
||||
setNamespaceAware (true);
|
||||
@@ -91,4 +94,25 @@ extends DocumentBuilderFactory
|
||||
// TODO
|
||||
}
|
||||
|
||||
public void setFeature(String name, boolean value)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (name == null)
|
||||
throw new NullPointerException();
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
{
|
||||
secureProcessing = true;
|
||||
return;
|
||||
}
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
public boolean getFeature(String name)
|
||||
throws ParserConfigurationException
|
||||
{
|
||||
if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
|
||||
return secureProcessing;
|
||||
throw new ParserConfigurationException(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* CRLFReader.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -153,13 +153,14 @@ class CRLFReader
|
||||
throws IOException
|
||||
{
|
||||
doReset = false;
|
||||
int lm1 = len - 1;
|
||||
for (int i = off; i < len; i++)
|
||||
int end = off + len;
|
||||
int em1 = end - 1;
|
||||
for (int i = off; i < end; i++)
|
||||
{
|
||||
if (b[i] == '\r') // CR
|
||||
{
|
||||
int d;
|
||||
if (i == lm1)
|
||||
if (i == em1)
|
||||
{
|
||||
d = in.read();
|
||||
doReset = true;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* EntityReferenceImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -41,7 +41,7 @@ import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import javax.xml.stream.Location;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
//import javax.xml.stream.events.EntityDeclaration;
|
||||
import javax.xml.stream.events.EntityDeclaration;
|
||||
import javax.xml.stream.events.EntityReference;
|
||||
|
||||
/**
|
||||
@@ -54,26 +54,16 @@ public class EntityReferenceImpl
|
||||
implements EntityReference
|
||||
{
|
||||
|
||||
//protected final EntityDeclaration decl;
|
||||
protected final EntityDeclaration decl;
|
||||
protected final String name;
|
||||
protected final String baseUri;
|
||||
protected final String publicId;
|
||||
protected final String systemId;
|
||||
protected final String replacementText;
|
||||
|
||||
protected EntityReferenceImpl(Location location,
|
||||
//EntityDeclaration decl,
|
||||
String name,
|
||||
String baseUri, String publicId,
|
||||
String systemId, String replacementText)
|
||||
EntityDeclaration decl,
|
||||
String name)
|
||||
{
|
||||
super(location);
|
||||
//this.decl = decl;
|
||||
this.decl = decl;
|
||||
this.name = name;
|
||||
this.baseUri = baseUri;
|
||||
this.publicId = publicId;
|
||||
this.systemId = systemId;
|
||||
this.replacementText = replacementText;
|
||||
}
|
||||
|
||||
public int getEventType()
|
||||
@@ -81,36 +71,16 @@ public class EntityReferenceImpl
|
||||
return ENTITY_REFERENCE;
|
||||
}
|
||||
|
||||
/*public EntityDeclaration getDeclaration()
|
||||
public EntityDeclaration getDeclaration()
|
||||
{
|
||||
return decl;
|
||||
}*/
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getBaseUri()
|
||||
{
|
||||
return baseUri;
|
||||
}
|
||||
|
||||
public String getPublicId()
|
||||
{
|
||||
return publicId;
|
||||
}
|
||||
|
||||
public String getSystemId()
|
||||
{
|
||||
return systemId;
|
||||
}
|
||||
|
||||
public String getReplacementText()
|
||||
{
|
||||
return replacementText;
|
||||
}
|
||||
|
||||
public void writeAsEncodedUnicode(Writer writer)
|
||||
throws XMLStreamException
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* FilteredEventReader.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -56,24 +56,37 @@ class FilteredEventReader
|
||||
}
|
||||
|
||||
public boolean hasNext()
|
||||
throws XMLStreamException
|
||||
{
|
||||
// XXX ???
|
||||
return super.hasNext();
|
||||
}
|
||||
|
||||
public XMLEvent next()
|
||||
public XMLEvent nextEvent()
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLEvent ret;
|
||||
do
|
||||
{
|
||||
ret = super.next();
|
||||
ret = super.nextEvent();
|
||||
}
|
||||
while (!filter.accept(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public Object next()
|
||||
{
|
||||
try
|
||||
{
|
||||
return nextEvent();
|
||||
}
|
||||
catch (XMLStreamException e)
|
||||
{
|
||||
RuntimeException e2 = new RuntimeException();
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
public XMLEvent peek()
|
||||
throws XMLStreamException
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* SAXParser.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -92,8 +92,7 @@ import org.xml.sax.ext.Locator2;
|
||||
*/
|
||||
public class SAXParser
|
||||
extends javax.xml.parsers.SAXParser
|
||||
implements XMLReader, Attributes2, Locator2, XMLReporter,
|
||||
XMLParser.XMLResolver2
|
||||
implements XMLReader, Attributes2, Locator2, XMLReporter, XMLResolver
|
||||
{
|
||||
|
||||
ContentHandler contentHandler;
|
||||
@@ -323,6 +322,7 @@ public class SAXParser
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
true,
|
||||
this,
|
||||
this);
|
||||
else
|
||||
@@ -338,6 +338,7 @@ public class SAXParser
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
true,
|
||||
this,
|
||||
this);
|
||||
}
|
||||
@@ -357,6 +358,7 @@ public class SAXParser
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
true,
|
||||
this,
|
||||
this);
|
||||
}
|
||||
@@ -486,14 +488,14 @@ public class SAXParser
|
||||
contentHandler.processingInstruction(target, data);
|
||||
}
|
||||
break;
|
||||
case XMLStreamConstants.START_ENTITY:
|
||||
case XMLParser.START_ENTITY:
|
||||
if (lexicalHandler != null)
|
||||
{
|
||||
String name = reader.getText();
|
||||
lexicalHandler.startEntity(name);
|
||||
}
|
||||
break;
|
||||
case XMLStreamConstants.END_ENTITY:
|
||||
case XMLParser.END_ENTITY:
|
||||
if (lexicalHandler != null)
|
||||
{
|
||||
String name = reader.getText();
|
||||
@@ -649,24 +651,36 @@ public class SAXParser
|
||||
lexicalHandler.endDTD();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (XMLStreamException e)
|
||||
{
|
||||
if (!startDocumentDone && contentHandler != null)
|
||||
contentHandler.startDocument();
|
||||
SAXParseException e2 = new SAXParseException(e.getMessage(), this);
|
||||
e2.initCause(e);
|
||||
if (errorHandler != null)
|
||||
errorHandler.fatalError(e2);
|
||||
if (contentHandler != null)
|
||||
contentHandler.endDocument();
|
||||
throw e2;
|
||||
}
|
||||
finally
|
||||
{
|
||||
reset();
|
||||
if (opened)
|
||||
in.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
SAXParseException e2 = new SAXParseException(e.getMessage(), this);
|
||||
e2.initCause(e);
|
||||
try
|
||||
{
|
||||
if (!startDocumentDone && contentHandler != null)
|
||||
contentHandler.startDocument();
|
||||
if (errorHandler != null)
|
||||
errorHandler.fatalError(e2);
|
||||
if (contentHandler != null)
|
||||
contentHandler.endDocument();
|
||||
}
|
||||
catch (SAXException sex)
|
||||
{
|
||||
// Ignored, we will rethrow the original exception.
|
||||
}
|
||||
reset();
|
||||
if (opened)
|
||||
in.close();
|
||||
if (e instanceof SAXException)
|
||||
throw (SAXException) e;
|
||||
if (e instanceof IOException)
|
||||
throw (IOException) e;
|
||||
else
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -685,7 +699,7 @@ public class SAXParser
|
||||
int ac = reader.getAttributeCount();
|
||||
for (int i = 0; i < ac; i++)
|
||||
{
|
||||
QName aname = reader.getAttributeQName(i);
|
||||
QName aname = reader.getAttributeName(i);
|
||||
if ("space".equals(aname.getLocalPart()) &&
|
||||
XMLConstants.XML_NS_URI.equals(aname.getNamespaceURI()))
|
||||
{
|
||||
@@ -726,7 +740,7 @@ public class SAXParser
|
||||
int len = reader.getAttributeCount();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
QName q = reader.getAttributeQName(i);
|
||||
QName q = reader.getAttributeName(i);
|
||||
String localName = q.getLocalPart();
|
||||
String prefix = q.getPrefix();
|
||||
String qn = ("".equals(prefix)) ? localName : prefix + ":" + localName;
|
||||
@@ -741,7 +755,7 @@ public class SAXParser
|
||||
int len = reader.getAttributeCount();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
QName q = reader.getAttributeQName(i);
|
||||
QName q = reader.getAttributeName(i);
|
||||
String ln = q.getLocalPart();
|
||||
String u = q.getNamespaceURI();
|
||||
if (u == null && uri != null)
|
||||
@@ -761,12 +775,12 @@ public class SAXParser
|
||||
|
||||
public String getLocalName(int index)
|
||||
{
|
||||
return reader.getAttributeName(index);
|
||||
return reader.getAttributeLocalName(index);
|
||||
}
|
||||
|
||||
public String getQName(int index)
|
||||
{
|
||||
QName q = reader.getAttributeQName(index);
|
||||
QName q = reader.getAttributeName(index);
|
||||
String localName = q.getLocalPart();
|
||||
String prefix = q.getPrefix();
|
||||
return ("".equals(prefix)) ? localName : prefix + ":" + localName;
|
||||
@@ -864,13 +878,14 @@ public class SAXParser
|
||||
|
||||
public String getPublicId()
|
||||
{
|
||||
return null;
|
||||
Location l = reader.getLocation();
|
||||
return l.getPublicId();
|
||||
}
|
||||
|
||||
public String getSystemId()
|
||||
{
|
||||
Location l = reader.getLocation();
|
||||
return l.getLocationURI();
|
||||
return l.getSystemId();
|
||||
}
|
||||
|
||||
public String getEncoding()
|
||||
@@ -885,13 +900,8 @@ public class SAXParser
|
||||
|
||||
// -- XMLResolver --
|
||||
|
||||
public InputStream resolve(String uri)
|
||||
throws XMLStreamException
|
||||
{
|
||||
return resolve(null, uri);
|
||||
}
|
||||
|
||||
public InputStream resolve(String publicId, String systemId)
|
||||
public Object resolveEntity(String publicId, String systemId,
|
||||
String baseURI, String namespace)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (entityResolver != null)
|
||||
@@ -901,7 +911,16 @@ public class SAXParser
|
||||
InputSource input =
|
||||
entityResolver.resolveEntity(publicId, systemId);
|
||||
if (input != null)
|
||||
return input.getByteStream();
|
||||
{
|
||||
InputStream in = input.getByteStream();
|
||||
if (in == null)
|
||||
{
|
||||
String newSystemId = input.getSystemId();
|
||||
if (newSystemId != null && !newSystemId.equals(systemId))
|
||||
in = XMLParser.resolve(newSystemId);
|
||||
}
|
||||
return in;
|
||||
}
|
||||
}
|
||||
catch (SAXException e)
|
||||
{
|
||||
|
||||
@@ -45,7 +45,7 @@ import java.io.Reader;
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
class UnicodeReader
|
||||
public class UnicodeReader
|
||||
{
|
||||
|
||||
final Reader in;
|
||||
@@ -152,6 +152,10 @@ class UnicodeReader
|
||||
in.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the specified UTF-16 char array as an array of Unicode code
|
||||
* points.
|
||||
*/
|
||||
public static int[] toCodePointArray(String text)
|
||||
throws IOException
|
||||
{
|
||||
|
||||
@@ -42,6 +42,7 @@ import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.HashSet;
|
||||
@@ -121,7 +122,17 @@ class XIncludeFilter
|
||||
boolean expandERefs)
|
||||
{
|
||||
super(reader);
|
||||
this.systemId = XMLParser.absolutize(null, systemId);
|
||||
try
|
||||
{
|
||||
this.systemId = XMLParser.absolutize(null, systemId);
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
RuntimeException e2 = new RuntimeException("unsupported URL: " +
|
||||
systemId);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
this.namespaceAware = namespaceAware;
|
||||
this.validating = validating;
|
||||
this.expandERefs = expandERefs;
|
||||
@@ -137,7 +148,7 @@ class XIncludeFilter
|
||||
return super.getAttributeCount();
|
||||
}
|
||||
|
||||
public String getAttributeName(int index)
|
||||
public String getAttributeLocalName(int index)
|
||||
{
|
||||
if (current != null)
|
||||
{
|
||||
@@ -147,7 +158,7 @@ class XIncludeFilter
|
||||
Node attr = attrs.item(index);
|
||||
return attr.getLocalName();
|
||||
}
|
||||
return super.getAttributeName(index);
|
||||
return super.getAttributeLocalName(index);
|
||||
}
|
||||
|
||||
public String getAttributeNamespace(int index)
|
||||
@@ -176,7 +187,7 @@ class XIncludeFilter
|
||||
return super.getAttributePrefix(index);
|
||||
}
|
||||
|
||||
public QName getAttributeQName(int index)
|
||||
public QName getAttributeName(int index)
|
||||
{
|
||||
if (current != null)
|
||||
{
|
||||
@@ -189,7 +200,7 @@ class XIncludeFilter
|
||||
String prefix = attr.getPrefix();
|
||||
return new QName(uri, localName, prefix);
|
||||
}
|
||||
return super.getAttributeQName(index);
|
||||
return super.getAttributeName(index);
|
||||
}
|
||||
|
||||
public String getAttributeType(int index)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* XMLEventAllocatorImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -116,10 +116,9 @@ public class XMLEventAllocatorImpl
|
||||
namespaces);
|
||||
case XMLStreamConstants.ENTITY_REFERENCE:
|
||||
String name = reader.getLocalName();
|
||||
//EntityDeclaration decl =
|
||||
// (EntityDeclaration) entityDeclarations.get(name);
|
||||
//return new EntityReferenceImpl(location, decl, name);
|
||||
return new EntityReferenceImpl(location, name, null, null, null, null);
|
||||
EntityDeclaration decl =
|
||||
(EntityDeclaration) entityDeclarations.get(name);
|
||||
return new EntityReferenceImpl(location, decl, name);
|
||||
case XMLStreamConstants.PROCESSING_INSTRUCTION:
|
||||
return new ProcessingInstructionImpl(location,
|
||||
reader.getPITarget(),
|
||||
@@ -132,7 +131,7 @@ public class XMLEventAllocatorImpl
|
||||
return new CharactersImpl(location, text,
|
||||
whitespace, false, ignorableWhitespace);
|
||||
case XMLStreamConstants.START_DOCUMENT:
|
||||
String systemId = location.getLocationURI();
|
||||
String systemId = location.getSystemId();
|
||||
String encoding = reader.getCharacterEncodingScheme();
|
||||
boolean encodingDeclared = encoding != null;
|
||||
if (encoding == null)
|
||||
@@ -164,7 +163,7 @@ public class XMLEventAllocatorImpl
|
||||
List attributes = new LinkedList();
|
||||
for (int i = 0; i < len; i++)
|
||||
attributes.add(new AttributeImpl(location,
|
||||
reader.getAttributeQName(i),
|
||||
reader.getAttributeName(i),
|
||||
reader.getAttributeValue(i),
|
||||
QName.valueOf(reader.getAttributeType(i)),
|
||||
reader.isAttributeSpecified(i)));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* XMLEventFactoryImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -233,12 +233,9 @@ public class XMLEventFactoryImpl
|
||||
}
|
||||
|
||||
public EntityReference createEntityReference(String name,
|
||||
//EntityDeclaration declaration)
|
||||
String replacementText)
|
||||
EntityDeclaration declaration)
|
||||
{
|
||||
//return new EntityReferenceImpl(location, declaration, name);
|
||||
return new EntityReferenceImpl(location, name, null, null, null,
|
||||
replacementText);
|
||||
return new EntityReferenceImpl(location, declaration, name);
|
||||
}
|
||||
|
||||
public Comment createComment(String text)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* XMLEventImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -116,16 +116,6 @@ public abstract class XMLEventImpl
|
||||
return getEventType() == END_DOCUMENT;
|
||||
}
|
||||
|
||||
public boolean isStartEntity()
|
||||
{
|
||||
return getEventType() == START_ENTITY;
|
||||
}
|
||||
|
||||
public boolean isEndEntity()
|
||||
{
|
||||
return getEventType() == END_ENTITY;
|
||||
}
|
||||
|
||||
public StartElement asStartElement()
|
||||
{
|
||||
return (StartElement) this;
|
||||
|
||||
@@ -67,7 +67,7 @@ public class XMLEventReaderImpl
|
||||
this.systemId = systemId;
|
||||
}
|
||||
|
||||
public XMLEvent next()
|
||||
public XMLEvent nextEvent()
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLEvent ret = peek();
|
||||
@@ -75,10 +75,32 @@ public class XMLEventReaderImpl
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean hasNext()
|
||||
throws XMLStreamException
|
||||
public Object next()
|
||||
{
|
||||
return peekEvent != null || reader.hasNext();
|
||||
try
|
||||
{
|
||||
return nextEvent();
|
||||
}
|
||||
catch (XMLStreamException e)
|
||||
{
|
||||
RuntimeException e2 = new RuntimeException();
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasNext()
|
||||
{
|
||||
if (peekEvent != null)
|
||||
return true;
|
||||
try
|
||||
{
|
||||
return reader.hasNext();
|
||||
}
|
||||
catch (XMLStreamException e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public XMLEvent peek()
|
||||
@@ -121,5 +143,16 @@ public class XMLEventReaderImpl
|
||||
return reader.getProperty(name);
|
||||
}
|
||||
|
||||
public void close()
|
||||
throws XMLStreamException
|
||||
{
|
||||
reader.close();
|
||||
}
|
||||
|
||||
public void remove()
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ public class XMLEventWriterImpl
|
||||
throws XMLStreamException
|
||||
{
|
||||
while (reader.hasNext())
|
||||
add(reader.next());
|
||||
add(reader.nextEvent());
|
||||
}
|
||||
|
||||
public String getPrefix(String uri)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* XMLInputFactoryImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -89,28 +89,7 @@ public class XMLInputFactoryImpl
|
||||
public XMLStreamReader createXMLStreamReader(Reader reader)
|
||||
throws XMLStreamException
|
||||
{
|
||||
/*
|
||||
return new XMLStreamReaderImpl(reader, null, null,
|
||||
resolver, reporter,
|
||||
validating, namespaceAware,
|
||||
coalescing, replacingEntityReferences,
|
||||
externalEntities, supportDTD);
|
||||
*/
|
||||
XMLParser ret = new XMLParser(reader, null,
|
||||
validating,
|
||||
namespaceAware,
|
||||
coalescing,
|
||||
replacingEntityReferences,
|
||||
externalEntities,
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
reporter,
|
||||
resolver);
|
||||
if (xIncludeAware)
|
||||
return new XIncludeFilter(ret, null, namespaceAware, validating,
|
||||
replacingEntityReferences);
|
||||
return ret;
|
||||
return createXMLStreamReader(null, reader);
|
||||
}
|
||||
|
||||
public XMLStreamReader createXMLStreamReader(Source source)
|
||||
@@ -118,11 +97,6 @@ public class XMLInputFactoryImpl
|
||||
{
|
||||
String systemId = source.getSystemId();
|
||||
InputStream in = getInputStream(source);
|
||||
/*return new XMLStreamReaderImpl(in, null, systemId,
|
||||
resolver, reporter,
|
||||
validating, namespaceAware,
|
||||
coalescing, replacingEntityReferences,
|
||||
externalEntities, supportDTD);*/
|
||||
XMLParser ret = new XMLParser(in, systemId,
|
||||
validating,
|
||||
namespaceAware,
|
||||
@@ -132,6 +106,7 @@ public class XMLInputFactoryImpl
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
false,
|
||||
reporter,
|
||||
resolver);
|
||||
if (xIncludeAware)
|
||||
@@ -143,26 +118,7 @@ public class XMLInputFactoryImpl
|
||||
public XMLStreamReader createXMLStreamReader(InputStream in)
|
||||
throws XMLStreamException
|
||||
{
|
||||
/*return new XMLStreamReaderImpl(in, null, null,
|
||||
resolver, reporter,
|
||||
validating, namespaceAware,
|
||||
coalescing, replacingEntityReferences,
|
||||
externalEntities, supportDTD);*/
|
||||
XMLParser ret = new XMLParser(in, null,
|
||||
validating,
|
||||
namespaceAware,
|
||||
coalescing,
|
||||
replacingEntityReferences,
|
||||
externalEntities,
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
reporter,
|
||||
resolver);
|
||||
if (xIncludeAware)
|
||||
return new XIncludeFilter(ret, null, namespaceAware, validating,
|
||||
replacingEntityReferences);
|
||||
return ret;
|
||||
return createXMLStreamReader(null, in);
|
||||
}
|
||||
|
||||
public XMLStreamReader createXMLStreamReader(InputStream in, String encoding)
|
||||
@@ -171,6 +127,48 @@ public class XMLInputFactoryImpl
|
||||
return createXMLStreamReader(in);
|
||||
}
|
||||
|
||||
public XMLStreamReader createXMLStreamReader(String systemId, InputStream in)
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLParser ret = new XMLParser(in, systemId,
|
||||
validating,
|
||||
namespaceAware,
|
||||
coalescing,
|
||||
replacingEntityReferences,
|
||||
externalEntities,
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
false,
|
||||
reporter,
|
||||
resolver);
|
||||
if (xIncludeAware)
|
||||
return new XIncludeFilter(ret, null, namespaceAware, validating,
|
||||
replacingEntityReferences);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public XMLStreamReader createXMLStreamReader(String systemId, Reader reader)
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLParser ret = new XMLParser(reader, systemId,
|
||||
validating,
|
||||
namespaceAware,
|
||||
coalescing,
|
||||
replacingEntityReferences,
|
||||
externalEntities,
|
||||
supportDTD,
|
||||
baseAware,
|
||||
stringInterning,
|
||||
false,
|
||||
reporter,
|
||||
resolver);
|
||||
if (xIncludeAware)
|
||||
return new XIncludeFilter(ret, null, namespaceAware, validating,
|
||||
replacingEntityReferences);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public XMLEventReader createXMLEventReader(Reader reader)
|
||||
throws XMLStreamException
|
||||
{
|
||||
@@ -178,6 +176,13 @@ public class XMLInputFactoryImpl
|
||||
return new XMLEventReaderImpl(sr, allocator, null);
|
||||
}
|
||||
|
||||
public XMLEventReader createXMLEventReader(String systemId, Reader reader)
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLStreamReader sr = createXMLStreamReader(systemId, reader);
|
||||
return new XMLEventReaderImpl(sr, allocator, null);
|
||||
}
|
||||
|
||||
public XMLEventReader createXMLEventReader(XMLStreamReader reader)
|
||||
throws XMLStreamException
|
||||
{
|
||||
@@ -205,6 +210,13 @@ public class XMLInputFactoryImpl
|
||||
return new XMLEventReaderImpl(sr, allocator, null);
|
||||
}
|
||||
|
||||
public XMLEventReader createXMLEventReader(String systemId, InputStream in)
|
||||
throws XMLStreamException
|
||||
{
|
||||
XMLStreamReader sr = createXMLStreamReader(systemId, in);
|
||||
return new XMLEventReaderImpl(sr, allocator, null);
|
||||
}
|
||||
|
||||
public XMLStreamReader createFilteredReader(XMLStreamReader reader,
|
||||
StreamFilter filter)
|
||||
throws XMLStreamException
|
||||
|
||||
@@ -42,6 +42,8 @@ import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.stream.XMLEventWriter;
|
||||
import javax.xml.stream.XMLOutputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
@@ -94,6 +96,22 @@ public class XMLOutputFactoryImpl
|
||||
}
|
||||
}
|
||||
|
||||
public XMLStreamWriter createXMLStreamWriter(Result result)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (result instanceof StreamResult)
|
||||
{
|
||||
StreamResult sr = (StreamResult) result;
|
||||
OutputStream out = sr.getOutputStream();
|
||||
if (out != null)
|
||||
return createXMLStreamWriter(out);
|
||||
Writer writer = sr.getWriter();
|
||||
if (writer != null)
|
||||
return createXMLStreamWriter(writer);
|
||||
}
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public XMLEventWriter createXMLEventWriter(OutputStream stream)
|
||||
throws XMLStreamException
|
||||
{
|
||||
@@ -116,10 +134,26 @@ public class XMLOutputFactoryImpl
|
||||
return new XMLEventWriterImpl(writer);
|
||||
}
|
||||
|
||||
public XMLEventWriter createXMLEventWriter(Result result)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (result instanceof StreamResult)
|
||||
{
|
||||
StreamResult sr = (StreamResult) result;
|
||||
OutputStream out = sr.getOutputStream();
|
||||
if (out != null)
|
||||
return createXMLEventWriter(out);
|
||||
Writer writer = sr.getWriter();
|
||||
if (writer != null)
|
||||
return createXMLEventWriter(writer);
|
||||
}
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public void setProperty(String name, Object value)
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
if (IS_PREFIX_DEFAULTING.equals(name))
|
||||
if (IS_REPAIRING_NAMESPACES.equals(name))
|
||||
prefixDefaulting = ((Boolean) value).booleanValue();
|
||||
else
|
||||
throw new IllegalArgumentException(name);
|
||||
@@ -128,14 +162,14 @@ public class XMLOutputFactoryImpl
|
||||
public Object getProperty(String name)
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
if (IS_PREFIX_DEFAULTING.equals(name))
|
||||
if (IS_REPAIRING_NAMESPACES.equals(name))
|
||||
return new Boolean(prefixDefaulting);
|
||||
throw new IllegalArgumentException(name);
|
||||
}
|
||||
|
||||
public boolean isPropertySupported(String name)
|
||||
{
|
||||
if (IS_PREFIX_DEFAULTING.equals(name))
|
||||
if (IS_REPAIRING_NAMESPACES.equals(name))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -137,6 +137,10 @@ public class XMLParser
|
||||
final static int ATTRIBUTE_DEFAULT_REQUIRED = 33;
|
||||
final static int ATTRIBUTE_DEFAULT_FIXED = 34;
|
||||
|
||||
// -- additional event types --
|
||||
final static int START_ENTITY = 50;
|
||||
final static int END_ENTITY = 51;
|
||||
|
||||
/**
|
||||
* The current input.
|
||||
*/
|
||||
@@ -317,6 +321,12 @@ public class XMLParser
|
||||
*/
|
||||
private final boolean baseAware;
|
||||
|
||||
/**
|
||||
* Whether to report extended event types (START_ENTITY and END_ENTITY)
|
||||
* in addition to the standard event types. Used by the SAX parser.
|
||||
*/
|
||||
private final boolean extendedEventTypes;
|
||||
|
||||
/**
|
||||
* The reporter to receive parsing warnings.
|
||||
*/
|
||||
@@ -389,6 +399,7 @@ public class XMLParser
|
||||
boolean supportDTD,
|
||||
boolean baseAware,
|
||||
boolean stringInterning,
|
||||
boolean extendedEventTypes,
|
||||
XMLReporter reporter,
|
||||
XMLResolver resolver)
|
||||
{
|
||||
@@ -400,6 +411,7 @@ public class XMLParser
|
||||
this.supportDTD = supportDTD;
|
||||
this.baseAware = baseAware;
|
||||
this.stringInterning = stringInterning;
|
||||
this.extendedEventTypes = extendedEventTypes;
|
||||
this.reporter = reporter;
|
||||
this.resolver = resolver;
|
||||
if (validating)
|
||||
@@ -446,6 +458,7 @@ public class XMLParser
|
||||
boolean supportDTD,
|
||||
boolean baseAware,
|
||||
boolean stringInterning,
|
||||
boolean extendedEventTypes,
|
||||
XMLReporter reporter,
|
||||
XMLResolver resolver)
|
||||
{
|
||||
@@ -457,6 +470,7 @@ public class XMLParser
|
||||
this.supportDTD = supportDTD;
|
||||
this.baseAware = baseAware;
|
||||
this.stringInterning = stringInterning;
|
||||
this.extendedEventTypes = extendedEventTypes;
|
||||
this.reporter = reporter;
|
||||
this.resolver = resolver;
|
||||
if (validating)
|
||||
@@ -561,7 +575,7 @@ public class XMLParser
|
||||
return attrs.size();
|
||||
}
|
||||
|
||||
public String getAttributeName(int index)
|
||||
public String getAttributeLocalName(int index)
|
||||
{
|
||||
Attribute a = (Attribute) attrs.get(index);
|
||||
return a.localName;
|
||||
@@ -579,7 +593,7 @@ public class XMLParser
|
||||
return a.prefix;
|
||||
}
|
||||
|
||||
public QName getAttributeQName(int index)
|
||||
public QName getAttributeName(int index)
|
||||
{
|
||||
Attribute a = (Attribute) attrs.get(index);
|
||||
String namespaceURI = getNamespaceURI(a.prefix);
|
||||
@@ -710,7 +724,7 @@ public class XMLParser
|
||||
|
||||
public int getNamespaceCount()
|
||||
{
|
||||
if (!namespaceAware)
|
||||
if (!namespaceAware || namespaces.isEmpty())
|
||||
return 0;
|
||||
switch (event)
|
||||
{
|
||||
@@ -984,10 +998,10 @@ public class XMLParser
|
||||
if (event == XMLStreamConstants.END_ELEMENT)
|
||||
{
|
||||
// Pop namespace context
|
||||
if (namespaceAware)
|
||||
if (namespaceAware && !namespaces.isEmpty())
|
||||
namespaces.removeFirst();
|
||||
// Pop base context
|
||||
if (baseAware)
|
||||
if (baseAware && !bases.isEmpty())
|
||||
bases.removeFirst();
|
||||
}
|
||||
if (!startEntityStack.isEmpty())
|
||||
@@ -995,16 +1009,16 @@ public class XMLParser
|
||||
String entityName = (String) startEntityStack.removeFirst();
|
||||
buf.setLength(0);
|
||||
buf.append(entityName);
|
||||
event = XMLStreamConstants.START_ENTITY;
|
||||
return event;
|
||||
event = START_ENTITY;
|
||||
return extendedEventTypes ? event : next();
|
||||
}
|
||||
else if (!endEntityStack.isEmpty())
|
||||
{
|
||||
String entityName = (String) endEntityStack.removeFirst();
|
||||
buf.setLength(0);
|
||||
buf.append(entityName);
|
||||
event = XMLStreamConstants.END_ENTITY;
|
||||
return event;
|
||||
event = END_ENTITY;
|
||||
return extendedEventTypes ? event : next();
|
||||
}
|
||||
try
|
||||
{
|
||||
@@ -1484,7 +1498,6 @@ public class XMLParser
|
||||
{
|
||||
if (!externalEntities)
|
||||
return;
|
||||
InputStream in = null;
|
||||
String url = absolutize(input.systemId, ids.systemId);
|
||||
// Check for recursion
|
||||
for (Iterator i = inputStack.iterator(); i.hasNext(); )
|
||||
@@ -1497,12 +1510,13 @@ public class XMLParser
|
||||
}
|
||||
if (name == null || "".equals(name))
|
||||
report = false;
|
||||
if (in == null && url != null && resolver != null)
|
||||
InputStream in = null;
|
||||
if (resolver != null)
|
||||
{
|
||||
if (resolver instanceof XMLResolver2)
|
||||
in = ((XMLResolver2) resolver).resolve(ids.publicId, url);
|
||||
else
|
||||
in = resolver.resolve(url);
|
||||
Object obj = resolver.resolveEntity(ids.publicId, url, getXMLBase(),
|
||||
null);
|
||||
if (obj instanceof InputStream)
|
||||
in = (InputStream) obj;
|
||||
}
|
||||
if (in == null)
|
||||
in = resolve(url);
|
||||
@@ -1535,12 +1549,13 @@ public class XMLParser
|
||||
* @param base the current base URL
|
||||
* @param href the (absolute or relative) URL to resolve
|
||||
*/
|
||||
static String absolutize(String base, String href)
|
||||
public static String absolutize(String base, String href)
|
||||
throws MalformedURLException
|
||||
{
|
||||
if (href == null)
|
||||
return null;
|
||||
int ci = href.indexOf(':');
|
||||
if (ci > 1 && isLowercaseAscii(href.substring(0, ci)))
|
||||
if (ci > 1 && isURLScheme(href.substring(0, ci)))
|
||||
{
|
||||
// href is absolute already
|
||||
return href;
|
||||
@@ -1565,40 +1580,23 @@ public class XMLParser
|
||||
if (!base.endsWith("/"))
|
||||
base += "/";
|
||||
}
|
||||
if (href.startsWith("/"))
|
||||
{
|
||||
if (base.startsWith("file:"))
|
||||
return "file://" + href;
|
||||
int i = base.indexOf("://");
|
||||
if (i != -1)
|
||||
{
|
||||
i = base.indexOf('/', i + 3);
|
||||
if (i != -1)
|
||||
base = base.substring(0, i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (href.startsWith(".."))
|
||||
{
|
||||
int i = base.lastIndexOf('/', base.length() - 2);
|
||||
if (i != -1)
|
||||
base = base.substring(0, i + 1);
|
||||
href = href.substring(2);
|
||||
if (href.startsWith("/"))
|
||||
href = href.substring(1);
|
||||
}
|
||||
}
|
||||
return base + href;
|
||||
return new URL(new URL(base), href).toString();
|
||||
}
|
||||
|
||||
private static boolean isLowercaseAscii(String text)
|
||||
/**
|
||||
* Indicates whether the specified characters match the scheme portion of
|
||||
* a URL.
|
||||
* @see RFC 1738 section 2.1
|
||||
*/
|
||||
private static boolean isURLScheme(String text)
|
||||
{
|
||||
int len = text.length();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = text.charAt(i);
|
||||
if (c < 97 || c > 122)
|
||||
if (c == '+' || c == '.' || c == '-')
|
||||
continue;
|
||||
if (c < 65 || (c > 90 && c < 97) || c > 122)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -1607,7 +1605,7 @@ public class XMLParser
|
||||
/**
|
||||
* Returns an input stream for the given URL.
|
||||
*/
|
||||
private InputStream resolve(String url)
|
||||
static InputStream resolve(String url)
|
||||
throws IOException
|
||||
{
|
||||
try
|
||||
@@ -1618,6 +1616,12 @@ public class XMLParser
|
||||
{
|
||||
return null;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
IOException e2 = new IOException("error resolving " + url);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1891,7 +1895,10 @@ public class XMLParser
|
||||
throws IOException, XMLStreamException
|
||||
{
|
||||
requireWhitespace();
|
||||
boolean saved = expandPE;
|
||||
expandPE = (inputStack.size() > 1);
|
||||
String name = readNmtoken(true);
|
||||
expandPE = saved;
|
||||
requireWhitespace();
|
||||
readContentspec(name);
|
||||
skipWhitespace();
|
||||
@@ -2106,7 +2113,10 @@ public class XMLParser
|
||||
throws IOException, XMLStreamException
|
||||
{
|
||||
requireWhitespace();
|
||||
boolean saved = expandPE;
|
||||
expandPE = (inputStack.size() > 1);
|
||||
String elementName = readNmtoken(true);
|
||||
expandPE = saved;
|
||||
boolean white = tryWhitespace();
|
||||
while (!tryRead('>'))
|
||||
{
|
||||
@@ -2419,11 +2429,11 @@ public class XMLParser
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isNameStartCharacter(cp[0]))
|
||||
if (!isNameStartCharacter(cp[0], input.xml11))
|
||||
error("malformed reference in entity value", value);
|
||||
for (int i = 1; i < cp.length; i++)
|
||||
{
|
||||
if (!isNameCharacter(cp[i]))
|
||||
if (!isNameCharacter(cp[i], input.xml11))
|
||||
error("malformed reference in entity value", value);
|
||||
}
|
||||
}
|
||||
@@ -2838,8 +2848,6 @@ public class XMLParser
|
||||
error("Duplicate default namespace declaration");
|
||||
if (XMLConstants.XML_NS_URI.equals(attr.value))
|
||||
error("can't bind XML namespace");
|
||||
if ("".equals(attr.value) && !input.xml11)
|
||||
error("illegal use of 1.1-style prefix unbinding in 1.0 document");
|
||||
ctx.put(XMLConstants.DEFAULT_NS_PREFIX, attr.value);
|
||||
return true;
|
||||
}
|
||||
@@ -3087,7 +3095,15 @@ public class XMLParser
|
||||
break;
|
||||
case 0x3c: // '<'
|
||||
reset();
|
||||
read(tmpBuf, 0, i);
|
||||
// read i characters
|
||||
int count = 0, remaining = i;
|
||||
do
|
||||
{
|
||||
int r = read(tmpBuf, 0, remaining);
|
||||
count += r;
|
||||
remaining -= r;
|
||||
}
|
||||
while (count < i);
|
||||
i = len;
|
||||
if (coalescing && tryRead(TEST_CDATA))
|
||||
readUntil(TEST_END_CDATA); // read CDATA section into buf
|
||||
@@ -3258,15 +3274,7 @@ public class XMLParser
|
||||
reset();
|
||||
char[] ref = readCharacterRef(hex ? 16 : 10);
|
||||
for (int i = 0; i < ref.length; i++)
|
||||
{
|
||||
char x = ref[i];
|
||||
if ((flags & (LIT_ATTRIBUTE | LIT_PUBID)) != 0 &&
|
||||
(x == 0x0a || x == 0x0d))
|
||||
x = 0x20; // normalize
|
||||
else if ((flags & LIT_ATTRIBUTE) != 0 && x == 0x09)
|
||||
x = 0x20; // normalize
|
||||
literalBuf.append(x);
|
||||
}
|
||||
literalBuf.append(ref[i]);
|
||||
entities = true;
|
||||
continue;
|
||||
}
|
||||
@@ -3469,13 +3477,13 @@ public class XMLParser
|
||||
int c = readCh();
|
||||
if (isName)
|
||||
{
|
||||
if (!isNameStartCharacter(c))
|
||||
if (!isNameStartCharacter(c, input.xml11))
|
||||
error("not a name start character",
|
||||
"U+" + Integer.toHexString(c));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isNameCharacter(c))
|
||||
if (!isNameCharacter(c, input.xml11))
|
||||
error("not a name character",
|
||||
"U+" + Integer.toHexString(c));
|
||||
}
|
||||
@@ -3510,7 +3518,7 @@ public class XMLParser
|
||||
reset();
|
||||
return intern(buf.toString());
|
||||
default:
|
||||
if (!isNameCharacter(c))
|
||||
if (!isNameCharacter(c, input.xml11))
|
||||
error("not a name character",
|
||||
"U+" + Integer.toHexString(c));
|
||||
else
|
||||
@@ -3523,7 +3531,7 @@ public class XMLParser
|
||||
/**
|
||||
* Indicates whether the specified Unicode character is an XML 1.1 Char.
|
||||
*/
|
||||
private boolean isXML11Char(int c)
|
||||
public static boolean isXML11Char(int c)
|
||||
{
|
||||
return ((c >= 0x0001 && c <= 0xD7FF) ||
|
||||
(c >= 0xE000 && c < 0xFFFD) || // NB exclude 0xfffd
|
||||
@@ -3534,7 +3542,7 @@ public class XMLParser
|
||||
* Indicates whether the specified Unicode character is an XML 1.1
|
||||
* RestrictedChar.
|
||||
*/
|
||||
private boolean isXML11RestrictedChar(int c)
|
||||
public static boolean isXML11RestrictedChar(int c)
|
||||
{
|
||||
return ((c >= 0x0001 && c <= 0x0008) ||
|
||||
(c >= 0x000B && c <= 0x000C) ||
|
||||
@@ -3556,17 +3564,17 @@ public class XMLParser
|
||||
return false;
|
||||
if (isName)
|
||||
{
|
||||
if (!isNameStartCharacter(cp[0]))
|
||||
if (!isNameStartCharacter(cp[0], input.xml11))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isNameCharacter(cp[0]))
|
||||
if (!isNameCharacter(cp[0], input.xml11))
|
||||
return false;
|
||||
}
|
||||
for (int i = 1; i < cp.length; i++)
|
||||
{
|
||||
if (!isNameCharacter(cp[i]))
|
||||
if (!isNameCharacter(cp[i], input.xml11))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -3581,9 +3589,9 @@ public class XMLParser
|
||||
* Indicates whether the specified Unicode character is a Name start
|
||||
* character.
|
||||
*/
|
||||
private boolean isNameStartCharacter(int c)
|
||||
public static boolean isNameStartCharacter(int c, boolean xml11)
|
||||
{
|
||||
if (input.xml11)
|
||||
if (xml11)
|
||||
return ((c >= 0x0041 && c <= 0x005a) ||
|
||||
(c >= 0x0061 && c <= 0x007a) ||
|
||||
c == 0x3a |
|
||||
@@ -3608,9 +3616,9 @@ public class XMLParser
|
||||
* Indicates whether the specified Unicode character is a Name non-initial
|
||||
* character.
|
||||
*/
|
||||
private boolean isNameCharacter(int c)
|
||||
public static boolean isNameCharacter(int c, boolean xml11)
|
||||
{
|
||||
if (input.xml11)
|
||||
if (xml11)
|
||||
return ((c >= 0x0041 && c <= 0x005a) ||
|
||||
(c >= 0x0061 && c <= 0x007a) ||
|
||||
(c >= 0x0030 && c <= 0x0039) ||
|
||||
@@ -4255,6 +4263,7 @@ public class XMLParser
|
||||
true, // supportDTD
|
||||
true, // baseAware
|
||||
true, // stringInterning
|
||||
true, // extendedEventTypes
|
||||
null,
|
||||
null);
|
||||
XMLStreamReader reader = p;
|
||||
@@ -4286,7 +4295,7 @@ public class XMLParser
|
||||
"='"+reader.getNamespaceURI(i)+"'");
|
||||
l = reader.getAttributeCount();
|
||||
for (int i = 0; i < l; i++)
|
||||
System.out.println("\tattribute "+reader.getAttributeQName(i)+
|
||||
System.out.println("\tattribute "+reader.getAttributeName(i)+
|
||||
"='"+reader.getAttributeValue(i)+"'");
|
||||
break;
|
||||
case XMLStreamConstants.END_ELEMENT:
|
||||
@@ -4314,10 +4323,10 @@ public class XMLParser
|
||||
System.out.println("PROCESSING_INSTRUCTION "+reader.getPITarget()+
|
||||
" "+reader.getPIData());
|
||||
break;
|
||||
case XMLStreamConstants.START_ENTITY:
|
||||
case START_ENTITY:
|
||||
System.out.println("START_ENTITY "+reader.getText());
|
||||
break;
|
||||
case XMLStreamConstants.END_ENTITY:
|
||||
case END_ENTITY:
|
||||
System.out.println("END_ENTITY "+reader.getText());
|
||||
break;
|
||||
default:
|
||||
@@ -4330,7 +4339,7 @@ public class XMLParser
|
||||
Location l = reader.getLocation();
|
||||
System.out.println("At line "+l.getLineNumber()+
|
||||
", column "+l.getColumnNumber()+
|
||||
" of "+l.getLocationURI());
|
||||
" of "+l.getSystemId());
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
@@ -4938,19 +4947,6 @@ public class XMLParser
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Compatibility interface that can be used to resolve based on a public
|
||||
* ID, not just an URL.
|
||||
*/
|
||||
interface XMLResolver2
|
||||
extends XMLResolver
|
||||
{
|
||||
|
||||
InputStream resolve(String publicId, String systemId)
|
||||
throws XMLStreamException;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* An XML input source.
|
||||
*/
|
||||
@@ -5019,7 +5015,12 @@ public class XMLParser
|
||||
return line;
|
||||
}
|
||||
|
||||
public String getLocationURI()
|
||||
public String getPublicId()
|
||||
{
|
||||
return publicId;
|
||||
}
|
||||
|
||||
public String getSystemId()
|
||||
{
|
||||
return systemId;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -104,6 +104,9 @@ public class XMLStreamWriterImpl
|
||||
private NamespaceSupport namespaces;
|
||||
private int count = 0;
|
||||
|
||||
private boolean xml11;
|
||||
private boolean hasXML11RestrictedChars;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* @see #writer
|
||||
@@ -145,6 +148,9 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isName(localName))
|
||||
throw new IllegalArgumentException("illegal Name: " + localName);
|
||||
|
||||
endStartElement();
|
||||
namespaces.pushContext();
|
||||
|
||||
@@ -167,6 +173,11 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
if (namespaceURI != null && !isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
if (!isName(localName))
|
||||
throw new IllegalArgumentException("illegal Name: " + localName);
|
||||
|
||||
endStartElement();
|
||||
namespaces.pushContext();
|
||||
|
||||
@@ -190,7 +201,7 @@ public class XMLStreamWriterImpl
|
||||
inStartElement = true;
|
||||
if (!isDeclared)
|
||||
{
|
||||
writeNamespace(prefix, namespaceURI);
|
||||
writeNamespaceImpl(prefix, namespaceURI);
|
||||
}
|
||||
|
||||
elements.addLast(new String[] { prefix, localName });
|
||||
@@ -229,6 +240,13 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
if (namespaceURI != null && !isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
if (prefix != null && !isNCName(prefix))
|
||||
throw new IllegalArgumentException("illegal NCName: " + prefix);
|
||||
if (!isNCName(localName))
|
||||
throw new IllegalArgumentException("illegal NCName: " + localName);
|
||||
|
||||
endStartElement();
|
||||
namespaces.pushContext();
|
||||
|
||||
@@ -243,7 +261,7 @@ public class XMLStreamWriterImpl
|
||||
writer.write(localName);
|
||||
if (prefixDefaulting && !isCurrent)
|
||||
{
|
||||
writeNamespace(prefix, namespaceURI);
|
||||
writeNamespaceImpl(prefix, namespaceURI);
|
||||
}
|
||||
|
||||
elements.addLast(new String[] { prefix, localName });
|
||||
@@ -343,11 +361,19 @@ public class XMLStreamWriterImpl
|
||||
throw new IllegalStateException();
|
||||
try
|
||||
{
|
||||
if (!isName(localName))
|
||||
throw new IllegalArgumentException("illegal Name: " + localName);
|
||||
if (!isChars(value))
|
||||
throw new IllegalArgumentException("illegal character: " + value);
|
||||
|
||||
writer.write(' ');
|
||||
writer.write(localName);
|
||||
writer.write('=');
|
||||
writer.write('"');
|
||||
writeEncoded(value, true);
|
||||
if (hasXML11RestrictedChars)
|
||||
writeEncodedWithRestrictedChars(value, true);
|
||||
else
|
||||
writeEncoded(value, true);
|
||||
writer.write('"');
|
||||
}
|
||||
catch (IOException e)
|
||||
@@ -366,11 +392,20 @@ public class XMLStreamWriterImpl
|
||||
throw new IllegalStateException();
|
||||
try
|
||||
{
|
||||
if (namespaceURI != null && !isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
if (prefix != null && !isNCName(prefix))
|
||||
throw new IllegalArgumentException("illegal NCName: " + prefix);
|
||||
if (!isNCName(localName))
|
||||
throw new IllegalArgumentException("illegal NCName: " + localName);
|
||||
if (!isChars(value))
|
||||
throw new IllegalArgumentException("illegal character: " + value);
|
||||
|
||||
String currentPrefix = getPrefix(namespaceURI);
|
||||
if (currentPrefix == null)
|
||||
{
|
||||
if (prefixDefaulting)
|
||||
writeNamespace(prefix, namespaceURI);
|
||||
writeNamespaceImpl(prefix, namespaceURI);
|
||||
else
|
||||
throw new XMLStreamException("namespace " + namespaceURI +
|
||||
" is not bound");
|
||||
@@ -388,7 +423,10 @@ public class XMLStreamWriterImpl
|
||||
writer.write(localName);
|
||||
writer.write('=');
|
||||
writer.write('"');
|
||||
writeEncoded(value, true);
|
||||
if (hasXML11RestrictedChars)
|
||||
writeEncodedWithRestrictedChars(value, true);
|
||||
else
|
||||
writeEncoded(value, true);
|
||||
writer.write('"');
|
||||
}
|
||||
catch (IOException e)
|
||||
@@ -407,13 +445,20 @@ public class XMLStreamWriterImpl
|
||||
throw new IllegalStateException();
|
||||
try
|
||||
{
|
||||
if (namespaceURI != null && !isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
if (!isName(localName))
|
||||
throw new IllegalArgumentException("illegal Name: " + localName);
|
||||
if (!isChars(value))
|
||||
throw new IllegalArgumentException("illegal character: " + value);
|
||||
|
||||
String prefix = getPrefix(namespaceURI);
|
||||
if (prefix == null)
|
||||
{
|
||||
if (prefixDefaulting)
|
||||
{
|
||||
prefix = XMLConstants.DEFAULT_NS_PREFIX;
|
||||
writeNamespace(prefix, namespaceURI);
|
||||
writeNamespaceImpl(prefix, namespaceURI);
|
||||
}
|
||||
else
|
||||
throw new XMLStreamException("namespace " + namespaceURI +
|
||||
@@ -428,7 +473,10 @@ public class XMLStreamWriterImpl
|
||||
writer.write(localName);
|
||||
writer.write('=');
|
||||
writer.write('"');
|
||||
writeEncoded(value, true);
|
||||
if (hasXML11RestrictedChars)
|
||||
writeEncodedWithRestrictedChars(value, true);
|
||||
else
|
||||
writeEncoded(value, true);
|
||||
writer.write('"');
|
||||
}
|
||||
catch (IOException e)
|
||||
@@ -444,6 +492,25 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
if (!inStartElement)
|
||||
throw new IllegalStateException();
|
||||
try
|
||||
{
|
||||
if (!isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
if (!isNCName(prefix))
|
||||
throw new IllegalArgumentException("illegal NCName: " + prefix);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
XMLStreamException e2 = new XMLStreamException(e);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
writeNamespaceImpl(prefix, namespaceURI);
|
||||
}
|
||||
|
||||
private void writeNamespaceImpl(String prefix, String namespaceURI)
|
||||
throws XMLStreamException
|
||||
{
|
||||
try
|
||||
{
|
||||
if (prefix == null)
|
||||
@@ -474,21 +541,41 @@ public class XMLStreamWriterImpl
|
||||
public void writeDefaultNamespace(String namespaceURI)
|
||||
throws XMLStreamException
|
||||
{
|
||||
writeNamespace(XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
|
||||
if (!inStartElement)
|
||||
throw new IllegalStateException();
|
||||
if (!isURI(namespaceURI))
|
||||
throw new IllegalArgumentException("illegal URI: " + namespaceURI);
|
||||
writeNamespaceImpl(XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
|
||||
}
|
||||
|
||||
public void writeComment(String data)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (data == null)
|
||||
return;
|
||||
try
|
||||
{
|
||||
if (!isChars(data))
|
||||
throw new IllegalArgumentException("illegal XML character: " + data);
|
||||
if (data.indexOf("--") != -1)
|
||||
throw new IllegalArgumentException("illegal comment: " + data);
|
||||
|
||||
endStartElement();
|
||||
|
||||
if (data != null && data.indexOf("--") != -1)
|
||||
throw new IllegalArgumentException(data);
|
||||
|
||||
writer.write("<!--");
|
||||
if (data != null)
|
||||
if (hasXML11RestrictedChars)
|
||||
{
|
||||
int[] seq = UnicodeReader.toCodePointArray(data);
|
||||
for (int i = 0; i < seq.length; i++)
|
||||
{
|
||||
int c = seq[i];
|
||||
if (XMLParser.isXML11RestrictedChar(c))
|
||||
writer.write("&#x" + Integer.toHexString(c) + ";");
|
||||
else
|
||||
writer.write(Character.toChars(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
writer.write(data);
|
||||
writer.write("-->");
|
||||
}
|
||||
@@ -511,6 +598,11 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isName(target) || "xml".equalsIgnoreCase(target))
|
||||
throw new IllegalArgumentException("illegal PITarget: " + target);
|
||||
if (data != null && !isChars(data))
|
||||
throw new IllegalArgumentException("illegal XML character: " + data);
|
||||
|
||||
endStartElement();
|
||||
|
||||
writer.write('<');
|
||||
@@ -519,7 +611,20 @@ public class XMLStreamWriterImpl
|
||||
if (data != null)
|
||||
{
|
||||
writer.write(' ');
|
||||
writer.write(data);
|
||||
if (hasXML11RestrictedChars)
|
||||
{
|
||||
int[] seq = UnicodeReader.toCodePointArray(data);
|
||||
for (int i = 0; i < seq.length; i++)
|
||||
{
|
||||
int c = seq[i];
|
||||
if (XMLParser.isXML11RestrictedChar(c))
|
||||
writer.write("&#x" + Integer.toHexString(c) + ";");
|
||||
else
|
||||
writer.write(Character.toChars(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
writer.write(data);
|
||||
}
|
||||
writer.write('?');
|
||||
writer.write('>');
|
||||
@@ -537,10 +642,12 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
endStartElement();
|
||||
|
||||
if (!isChars(data) || hasXML11RestrictedChars)
|
||||
throw new IllegalArgumentException("illegal XML character: " + data);
|
||||
if (data.indexOf("]]") != -1)
|
||||
throw new IllegalArgumentException(data);
|
||||
throw new IllegalArgumentException("illegal CDATA section: " + data);
|
||||
|
||||
endStartElement();
|
||||
|
||||
writer.write("<![CDATA[");
|
||||
writer.write(data);
|
||||
@@ -557,8 +664,12 @@ public class XMLStreamWriterImpl
|
||||
public void writeDTD(String dtd)
|
||||
throws XMLStreamException
|
||||
{
|
||||
// Really thoroughly pointless method...
|
||||
try
|
||||
{
|
||||
if (!isName(dtd))
|
||||
throw new IllegalArgumentException("illegal Name: " + dtd);
|
||||
|
||||
writer.write("<!DOCTYPE ");
|
||||
writer.write(dtd);
|
||||
writer.write('>');
|
||||
@@ -576,6 +687,9 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isName(name))
|
||||
throw new IllegalArgumentException("illegal Name: " + name);
|
||||
|
||||
endStartElement();
|
||||
|
||||
writer.write('&');
|
||||
@@ -607,6 +721,8 @@ public class XMLStreamWriterImpl
|
||||
{
|
||||
if (version == null)
|
||||
version = "1.0";
|
||||
else if ("1.1".equals(version))
|
||||
xml11 = true;
|
||||
encoding = this.encoding; // YES: the parameter must be ignored
|
||||
if (encoding == null)
|
||||
encoding = "UTF-8";
|
||||
@@ -632,11 +748,18 @@ public class XMLStreamWriterImpl
|
||||
public void writeCharacters(String text)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (text == null)
|
||||
return;
|
||||
try
|
||||
{
|
||||
if (!isChars(text))
|
||||
throw new IllegalArgumentException("illegal XML character: " + text);
|
||||
|
||||
endStartElement();
|
||||
|
||||
if (text != null)
|
||||
if (hasXML11RestrictedChars)
|
||||
writeEncodedWithRestrictedChars(text, false);
|
||||
else
|
||||
writeEncoded(text, false);
|
||||
}
|
||||
catch (IOException e)
|
||||
@@ -650,39 +773,7 @@ public class XMLStreamWriterImpl
|
||||
public void writeCharacters(char[] text, int start, int len)
|
||||
throws XMLStreamException
|
||||
{
|
||||
try
|
||||
{
|
||||
endStartElement();
|
||||
|
||||
int end = start + len;
|
||||
len = 0;
|
||||
for (int i = start; i < end; i++)
|
||||
{
|
||||
char c = text[i];
|
||||
if (c == '<' || c == '>' || c == '&')
|
||||
{
|
||||
writer.write(text, start, len);
|
||||
if (c == '<')
|
||||
writer.write("<");
|
||||
else if (c == '>')
|
||||
writer.write(">");
|
||||
else
|
||||
writer.write("&");
|
||||
start = i + 1;
|
||||
len = 0;
|
||||
}
|
||||
else
|
||||
len++;
|
||||
}
|
||||
if (len > 0)
|
||||
writer.write(text, start, len);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
XMLStreamException e2 = new XMLStreamException(e);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
writeCharacters(new String(text, start, len));
|
||||
}
|
||||
|
||||
public String getPrefix(String uri)
|
||||
@@ -697,6 +788,19 @@ public class XMLStreamWriterImpl
|
||||
public void setPrefix(String prefix, String uri)
|
||||
throws XMLStreamException
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isURI(uri))
|
||||
throw new IllegalArgumentException("illegal URI: " + uri);
|
||||
if (!isNCName(prefix))
|
||||
throw new IllegalArgumentException("illegal NCName: " + prefix);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
XMLStreamException e2 = new XMLStreamException(e);
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
if (!namespaces.declarePrefix(prefix, uri))
|
||||
throw new XMLStreamException("illegal prefix " + prefix);
|
||||
}
|
||||
@@ -704,6 +808,8 @@ public class XMLStreamWriterImpl
|
||||
public void setDefaultNamespace(String uri)
|
||||
throws XMLStreamException
|
||||
{
|
||||
if (!isURI(uri))
|
||||
throw new IllegalArgumentException("illegal URI: " + uri);
|
||||
if (!namespaces.declarePrefix(XMLConstants.DEFAULT_NS_PREFIX, uri))
|
||||
throw new XMLStreamException("illegal default namespace prefix");
|
||||
}
|
||||
@@ -769,6 +875,131 @@ public class XMLStreamWriterImpl
|
||||
if (len > 0)
|
||||
writer.write(chars, start, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the specified text, in the knowledge that some of the
|
||||
* characters are XML 1.1 restricted characters.
|
||||
*/
|
||||
private void writeEncodedWithRestrictedChars(String text, boolean inAttr)
|
||||
throws IOException
|
||||
{
|
||||
int[] seq = UnicodeReader.toCodePointArray(text);
|
||||
for (int i = 0; i < seq.length; i++)
|
||||
{
|
||||
int c = seq[i];
|
||||
switch (c)
|
||||
{
|
||||
case 0x3c: // '<'
|
||||
writer.write("<");
|
||||
break;
|
||||
case 0x3e: // '>'
|
||||
writer.write(">");
|
||||
break;
|
||||
case 0x26: // '&'
|
||||
writer.write("&");
|
||||
break;
|
||||
case 0x22: // '"'
|
||||
if (inAttr)
|
||||
writer.write(""");
|
||||
else
|
||||
writer.write(c);
|
||||
break;
|
||||
case 0x27: // '\''
|
||||
if (inAttr)
|
||||
writer.write("'");
|
||||
else
|
||||
writer.write(c);
|
||||
break;
|
||||
default:
|
||||
if (XMLParser.isXML11RestrictedChar(c))
|
||||
writer.write("&#x" + Integer.toHexString(c) + ";");
|
||||
else
|
||||
{
|
||||
char[] chars = Character.toChars(c);
|
||||
writer.write(chars, 0, chars.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isName(String text)
|
||||
throws IOException
|
||||
{
|
||||
if (text == null)
|
||||
return false;
|
||||
int[] seq = UnicodeReader.toCodePointArray(text);
|
||||
if (seq.length < 1)
|
||||
return false;
|
||||
if (!XMLParser.isNameStartCharacter(seq[0], xml11))
|
||||
return false;
|
||||
for (int i = 1; i < seq.length; i++)
|
||||
{
|
||||
if (!XMLParser.isNameCharacter(seq[i], xml11))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isNCName(String text)
|
||||
throws IOException
|
||||
{
|
||||
if (text == null)
|
||||
return false;
|
||||
int[] seq = UnicodeReader.toCodePointArray(text);
|
||||
if (seq.length < 1)
|
||||
return false;
|
||||
if (!XMLParser.isNameStartCharacter(seq[0], xml11) || seq[0] == 0x3a)
|
||||
return false;
|
||||
for (int i = 1; i < seq.length; i++)
|
||||
{
|
||||
if (!XMLParser.isNameCharacter(seq[i], xml11) || seq[i] == 0x3a)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isChars(String text)
|
||||
throws IOException
|
||||
{
|
||||
if (text == null)
|
||||
return false;
|
||||
int[] seq = UnicodeReader.toCodePointArray(text);
|
||||
hasXML11RestrictedChars = false;
|
||||
if (xml11)
|
||||
{
|
||||
for (int i = 0; i < seq.length; i++)
|
||||
{
|
||||
if (!XMLParser.isXML11Char(seq[i]))
|
||||
return false;
|
||||
if (XMLParser.isXML11RestrictedChar(seq[i]))
|
||||
hasXML11RestrictedChars = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < seq.length; i++)
|
||||
{
|
||||
if (!XMLParser.isChar(seq[i]))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isURI(String text)
|
||||
{
|
||||
if (text == null)
|
||||
return false;
|
||||
char[] chars = text.toCharArray();
|
||||
if (chars.length < 1)
|
||||
return false;
|
||||
for (int i = 0; i < chars.length; i++)
|
||||
{
|
||||
if (chars[i] < 0x20 || chars[i] >= 0x7f)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ abstract class AbstractNumberNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("number");
|
||||
buf.append('[');
|
||||
buf.append("format=");
|
||||
buf.append(format);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ApplyImportsNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -54,13 +54,9 @@ final class ApplyImportsNode
|
||||
{
|
||||
TemplateNode ret = new ApplyImportsNode();
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -71,15 +67,16 @@ final class ApplyImportsNode
|
||||
{
|
||||
TemplateNode t = stylesheet.getTemplate(mode, context, true);
|
||||
if (t != null)
|
||||
{
|
||||
t.apply(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
t.apply(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return "apply-imports";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ApplyTemplatesNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -76,29 +76,21 @@ final class ApplyTemplatesNode
|
||||
|
||||
TemplateNode clone(Stylesheet stylesheet)
|
||||
{
|
||||
int len = sortKeys.size();
|
||||
int len = sortKeys != null ? sortKeys.size() : 0;
|
||||
List sortKeys2 = new ArrayList(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
|
||||
}
|
||||
sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
|
||||
len = withParams.size();
|
||||
List withParams2 = new ArrayList(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
|
||||
}
|
||||
withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
|
||||
TemplateNode ret = new ApplyTemplatesNode(select.clone(stylesheet),
|
||||
mode, sortKeys2, withParams2,
|
||||
isDefault);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -147,9 +139,7 @@ final class ApplyTemplatesNode
|
||||
Collections.sort(nodes, new XSLComparator(sortKeys));
|
||||
}
|
||||
else
|
||||
{
|
||||
Collections.sort(nodes, documentOrderComparator);
|
||||
}
|
||||
Collections.sort(nodes, documentOrderComparator);
|
||||
int l = nodes.size();
|
||||
QName effectiveMode = isDefault ? mode : this.mode;
|
||||
for (int i = 0; i < l; i++)
|
||||
@@ -172,27 +162,21 @@ final class ApplyTemplatesNode
|
||||
}
|
||||
// apply-templates doesn't have processable children
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (select != null && select.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
if (withParams != null)
|
||||
{
|
||||
for (Iterator i = withParams.iterator(); i.hasNext(); )
|
||||
{
|
||||
if (((WithParam) i.next()).references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (sortKeys != null)
|
||||
@@ -200,9 +184,7 @@ final class ApplyTemplatesNode
|
||||
for (Iterator i = sortKeys.iterator(); i.hasNext(); )
|
||||
{
|
||||
if (((SortKey) i.next()).references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.references(var);
|
||||
@@ -210,7 +192,7 @@ final class ApplyTemplatesNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("apply-templates");
|
||||
buf.append('[');
|
||||
boolean o = false;
|
||||
if (select != null)
|
||||
|
||||
@@ -231,7 +231,7 @@ final class AttributeNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("attribute");
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
buf.append(name);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* CallTemplateNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -69,18 +69,12 @@ final class CallTemplateNode
|
||||
int len = withParams.size();
|
||||
List withParams2 = new ArrayList(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
|
||||
}
|
||||
withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
|
||||
TemplateNode ret = new CallTemplateNode(name, withParams2);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -89,52 +83,52 @@ final class CallTemplateNode
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
if (withParams != null)
|
||||
{
|
||||
// compute the parameter values
|
||||
LinkedList values = new LinkedList();
|
||||
for (Iterator i = withParams.iterator(); i.hasNext(); )
|
||||
{
|
||||
WithParam p = (WithParam) i.next();
|
||||
Object value = p.getValue(stylesheet, mode, context, pos, len);
|
||||
Object[] pair = new Object[2];
|
||||
pair[0] = p.name;
|
||||
pair[1] = value;
|
||||
values.add(pair);
|
||||
}
|
||||
// push the parameter context
|
||||
stylesheet.bindings.push(Bindings.WITH_PARAM);
|
||||
// set the parameters
|
||||
for (Iterator i = values.iterator(); i.hasNext(); )
|
||||
{
|
||||
Object[] pair = (Object[]) i.next();
|
||||
QName name = (QName) pair[0];
|
||||
Object value = pair[1];
|
||||
stylesheet.bindings.set(name, value, Bindings.WITH_PARAM);
|
||||
if (stylesheet.debug)
|
||||
{
|
||||
System.err.println("with-param: " + name + " = " + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
TemplateNode t = stylesheet.getTemplate(mode, name);
|
||||
if (t != null)
|
||||
{
|
||||
if (withParams != null)
|
||||
{
|
||||
// compute the parameter values
|
||||
LinkedList values = new LinkedList();
|
||||
for (Iterator i = withParams.iterator(); i.hasNext(); )
|
||||
{
|
||||
WithParam p = (WithParam) i.next();
|
||||
if (t.hasParam(p.name)) // ignore parameters not specified
|
||||
{
|
||||
Object value = p.getValue(stylesheet, mode, context,
|
||||
pos, len);
|
||||
Object[] pair = new Object[2];
|
||||
pair[0] = p.name;
|
||||
pair[1] = value;
|
||||
values.add(pair);
|
||||
}
|
||||
}
|
||||
// push the parameter context
|
||||
stylesheet.bindings.push(Bindings.WITH_PARAM);
|
||||
// set the parameters
|
||||
for (Iterator i = values.iterator(); i.hasNext(); )
|
||||
{
|
||||
Object[] pair = (Object[]) i.next();
|
||||
QName name = (QName) pair[0];
|
||||
Object value = pair[1];
|
||||
stylesheet.bindings.set(name, value, Bindings.WITH_PARAM);
|
||||
if (stylesheet.debug)
|
||||
System.err.println("with-param: " + name + " = " + value);
|
||||
}
|
||||
}
|
||||
t.apply(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
if (withParams != null)
|
||||
{
|
||||
// pop the variable context
|
||||
stylesheet.bindings.pop(Bindings.WITH_PARAM);
|
||||
if (withParams != null)
|
||||
{
|
||||
// pop the variable context
|
||||
stylesheet.bindings.pop(Bindings.WITH_PARAM);
|
||||
}
|
||||
}
|
||||
// call-template doesn't have processable children
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
@@ -144,9 +138,7 @@ final class CallTemplateNode
|
||||
for (Iterator i = withParams.iterator(); i.hasNext(); )
|
||||
{
|
||||
if (((WithParam) i.next()).references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.references(var);
|
||||
@@ -154,7 +146,7 @@ final class CallTemplateNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("call-template");
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
buf.append(name);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ChooseNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -54,13 +54,9 @@ final class ChooseNode
|
||||
{
|
||||
TemplateNode ret = new ChooseNode();
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -70,22 +66,18 @@ final class ChooseNode
|
||||
throws TransformerException
|
||||
{
|
||||
if (children != null)
|
||||
{
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("choose");
|
||||
buf.append('[');
|
||||
buf.append(']');
|
||||
return buf.toString();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* CommentNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -58,13 +58,9 @@ final class CommentNode
|
||||
{
|
||||
TemplateNode ret = new CommentNode();
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -90,27 +86,18 @@ final class CommentNode
|
||||
Comment comment = doc.createComment(value);
|
||||
// Insert into result tree
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(comment, nextSibling);
|
||||
}
|
||||
parent.insertBefore(comment, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(comment);
|
||||
}
|
||||
parent.appendChild(comment);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
buf.append('[');
|
||||
buf.append(']');
|
||||
return buf.toString();
|
||||
return "comment";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* CopyNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -65,13 +65,9 @@ final class CopyNode
|
||||
{
|
||||
TemplateNode ret = new CopyNode(uas);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -102,44 +98,32 @@ final class CopyNode
|
||||
{
|
||||
NamedNodeMap attrs = parent.getAttributes();
|
||||
if (attrs != null)
|
||||
{
|
||||
attrs.setNamedItemNS(copy);
|
||||
}
|
||||
attrs.setNamedItemNS(copy);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(copy, nextSibling);
|
||||
}
|
||||
parent.insertBefore(copy, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(copy);
|
||||
}
|
||||
parent.appendChild(copy);
|
||||
}
|
||||
}
|
||||
if (uas != null)
|
||||
{
|
||||
StringTokenizer st = new StringTokenizer(uas, " ");
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
addAttributeSet(stylesheet, mode, context, pos, len,
|
||||
copy, null, st.nextToken());
|
||||
}
|
||||
addAttributeSet(stylesheet, mode, context, pos, len,
|
||||
copy, null, st.nextToken());
|
||||
}
|
||||
if (children != null)
|
||||
{
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
copy, null);
|
||||
}
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
copy, null);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
void addAttributeSet(Stylesheet stylesheet, QName mode,
|
||||
@@ -151,32 +135,31 @@ final class CopyNode
|
||||
{
|
||||
AttributeSet as = (AttributeSet) i.next();
|
||||
if (!as.name.equals(attributeSet))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
if (as.uas != null)
|
||||
{
|
||||
StringTokenizer st = new StringTokenizer(as.uas, " ");
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
addAttributeSet(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling, st.nextToken());
|
||||
}
|
||||
addAttributeSet(stylesheet, mode, context, pos, len,
|
||||
parent, nextSibling, st.nextToken());
|
||||
}
|
||||
if (as.children != null)
|
||||
{
|
||||
as.children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
as.children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
buf.append('[');
|
||||
buf.append(']');
|
||||
StringBuffer buf = new StringBuffer("copy");
|
||||
if (uas != null)
|
||||
{
|
||||
buf.append('[');
|
||||
buf.append("uas=");
|
||||
buf.append(uas);
|
||||
buf.append(']');
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* CopyOfNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -70,13 +70,9 @@ final class CopyOfNode
|
||||
{
|
||||
TemplateNode ret = new CopyOfNode(select.clone(stylesheet));
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -102,9 +98,7 @@ final class CopyOfNode
|
||||
// Use document element
|
||||
src = ((Document) src).getDocumentElement();
|
||||
if (src == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
nodeType = Node.ELEMENT_NODE;
|
||||
}
|
||||
else if (nodeType == Node.ATTRIBUTE_NODE)
|
||||
@@ -128,20 +122,14 @@ final class CopyOfNode
|
||||
{
|
||||
NamedNodeMap attrs = parent.getAttributes();
|
||||
if (attrs != null)
|
||||
{
|
||||
attrs.setNamedItemNS(node);
|
||||
}
|
||||
attrs.setNamedItemNS(node);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(node, nextSibling);
|
||||
}
|
||||
parent.insertBefore(node, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(node);
|
||||
}
|
||||
parent.appendChild(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,36 +140,28 @@ final class CopyOfNode
|
||||
{
|
||||
Text textNode = doc.createTextNode(value);
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(textNode, nextSibling);
|
||||
}
|
||||
parent.insertBefore(textNode, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(textNode);
|
||||
}
|
||||
parent.appendChild(textNode);
|
||||
}
|
||||
}
|
||||
// copy-of doesn't process children
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (select != null && select.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return super.references(var);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("copy-of");
|
||||
buf.append('[');
|
||||
buf.append("select=");
|
||||
buf.append(select);
|
||||
|
||||
@@ -126,9 +126,7 @@ final class DocumentFunction
|
||||
Object arg1 = values.get(0);
|
||||
Object arg2 = values.get(1);
|
||||
if (!(arg2 instanceof Collection))
|
||||
{
|
||||
throw new RuntimeException("second argument is not a node-set");
|
||||
}
|
||||
throw new RuntimeException("second argument is not a node-set");
|
||||
Collection arg2ns = (Collection) arg2;
|
||||
String base2 = arg2ns.isEmpty() ? null :
|
||||
((Node) arg2ns.iterator().next()).getBaseURI();
|
||||
@@ -166,9 +164,7 @@ final class DocumentFunction
|
||||
Collection document(String uri, String base)
|
||||
{
|
||||
if ("".equals(uri) || uri == null)
|
||||
{
|
||||
uri = this.base.getBaseURI();
|
||||
}
|
||||
uri = this.base.getBaseURI();
|
||||
|
||||
// Get fragment
|
||||
Expr fragment = null;
|
||||
@@ -197,10 +193,10 @@ final class DocumentFunction
|
||||
source = resolver.resolveDOM(null, base, uri);
|
||||
}
|
||||
Node node = source.getNode();
|
||||
// Strip whitespace
|
||||
TransformerImpl.strip(stylesheet, node);
|
||||
if (fragment == null)
|
||||
{
|
||||
return Collections.singleton(node);
|
||||
}
|
||||
return Collections.singleton(node);
|
||||
else
|
||||
{
|
||||
Object ret = fragment.evaluate(node, 1, 1);
|
||||
@@ -216,9 +212,7 @@ final class DocumentFunction
|
||||
{
|
||||
String msg = "can't open " + uri;
|
||||
if (base != null)
|
||||
{
|
||||
msg += " with base " + base;
|
||||
}
|
||||
msg += " with base " + base;
|
||||
throw new RuntimeException(msg);
|
||||
}
|
||||
}
|
||||
@@ -227,16 +221,12 @@ final class DocumentFunction
|
||||
{
|
||||
Stylesheet s = stylesheet;
|
||||
if (context instanceof Stylesheet)
|
||||
{
|
||||
s = (Stylesheet) context;
|
||||
}
|
||||
s = (Stylesheet) context;
|
||||
DocumentFunction f = new DocumentFunction(s, base);
|
||||
int len = args.size();
|
||||
List args2 = new ArrayList(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
args2.add(((Expr) args.get(i)).clone(context));
|
||||
}
|
||||
args2.add(((Expr) args.get(i)).clone(context));
|
||||
f.setArguments(args2);
|
||||
return f;
|
||||
}
|
||||
@@ -246,9 +236,7 @@ final class DocumentFunction
|
||||
for (Iterator i = args.iterator(); i.hasNext(); )
|
||||
{
|
||||
if (((Expr) i.next()).references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ElementNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -238,7 +238,7 @@ final class ElementNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("element");
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
if (namespace != null)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ForEachNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -70,19 +70,13 @@ final class ForEachNode
|
||||
int len = sortKeys.size();
|
||||
List sortKeys2 = new ArrayList(len);
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
|
||||
}
|
||||
sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
|
||||
TemplateNode ret = new ForEachNode(select.clone(stylesheet),
|
||||
sortKeys2);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -113,9 +107,7 @@ final class ForEachNode
|
||||
Collections.sort(list, new XSLComparator(sortKeys));
|
||||
}
|
||||
else
|
||||
{
|
||||
Collections.sort(list, documentOrderComparator);
|
||||
}
|
||||
Collections.sort(list, documentOrderComparator);
|
||||
// Perform children for each node
|
||||
int l = list.size();
|
||||
int p = 1;
|
||||
@@ -132,27 +124,21 @@ final class ForEachNode
|
||||
stylesheet.currentTemplate = saved;
|
||||
}
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (select != null && select.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
if (sortKeys != null)
|
||||
{
|
||||
for (Iterator i = sortKeys.iterator(); i.hasNext(); )
|
||||
{
|
||||
if (((SortKey) i.next()).references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.references(var);
|
||||
@@ -160,7 +146,7 @@ final class ForEachNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("for-each");
|
||||
buf.append('[');
|
||||
buf.append("select=");
|
||||
buf.append(select);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* IfNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -62,19 +62,15 @@ final class IfNode
|
||||
{
|
||||
TemplateNode ret = new IfNode(test.clone(stylesheet));
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void doApply(Stylesheet stylesheet, QName mode,
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
Object ret = test.evaluate(context, pos, len);
|
||||
@@ -84,32 +80,26 @@ final class IfNode
|
||||
if (success)
|
||||
{
|
||||
if (children != null)
|
||||
{
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (test != null && test.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return super.references(var);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("if");
|
||||
buf.append('[');
|
||||
buf.append("test=");
|
||||
buf.append(test);
|
||||
|
||||
@@ -196,12 +196,7 @@ final class LiteralNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
buf.append('[');
|
||||
buf.append("source=");
|
||||
buf.append(source);
|
||||
buf.append(']');
|
||||
return buf.toString();
|
||||
return source.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -92,5 +92,17 @@ final class MessageNode
|
||||
if (next != null && !terminate)
|
||||
next.apply(stylesheet, mode, context, pos, len, parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer("message");
|
||||
if (terminate)
|
||||
{
|
||||
buf.append('[');
|
||||
buf.append("terminate");
|
||||
buf.append(']');
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* OtherwiseNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -54,13 +54,9 @@ final class OtherwiseNode
|
||||
{
|
||||
TemplateNode ret = new OtherwiseNode();
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -70,25 +66,18 @@ final class OtherwiseNode
|
||||
throws TransformerException
|
||||
{
|
||||
if (children != null)
|
||||
{
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
buf.append('[');
|
||||
buf.append(']');
|
||||
return buf.toString();
|
||||
return "otherwise";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ParameterNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -73,13 +73,9 @@ final class ParameterNode
|
||||
select.clone(stylesheet),
|
||||
type);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -96,18 +92,14 @@ final class ParameterNode
|
||||
{
|
||||
stylesheet.bindings.set(name, value, type);
|
||||
if (stylesheet.debug)
|
||||
{
|
||||
System.err.println(this + ": set to " + value);
|
||||
}
|
||||
System.err.println(this + ": set to " + value);
|
||||
}
|
||||
// variable and param don't process children as such
|
||||
// all subsequent instructions are processed with that variable context
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
// pop the variable context
|
||||
stylesheet.bindings.pop(type);
|
||||
}
|
||||
@@ -117,9 +109,7 @@ final class ParameterNode
|
||||
throws TransformerException
|
||||
{
|
||||
if (select != null)
|
||||
{
|
||||
return select.evaluate(context, pos, len);
|
||||
}
|
||||
return select.evaluate(context, pos, len);
|
||||
else if (children != null)
|
||||
{
|
||||
Document doc = (context instanceof Document) ? (Document) context :
|
||||
@@ -129,17 +119,13 @@ final class ParameterNode
|
||||
return Collections.singleton(fragment);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (select != null && select.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return super.references(var);
|
||||
}
|
||||
|
||||
@@ -151,33 +137,18 @@ final class ParameterNode
|
||||
boolean r1 = references(pn.name);
|
||||
boolean r2 = pn.references(name);
|
||||
if (r1 && r2)
|
||||
{
|
||||
throw new IllegalArgumentException("circular definitions");
|
||||
}
|
||||
throw new IllegalArgumentException("circular definitions");
|
||||
if (r1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
if (r2)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
buf.append(name);
|
||||
if (select != null)
|
||||
{
|
||||
buf.append(",select=");
|
||||
buf.append(select);
|
||||
}
|
||||
buf.append(",type=");
|
||||
StringBuffer buf = new StringBuffer();
|
||||
switch (type)
|
||||
{
|
||||
case Bindings.VARIABLE:
|
||||
@@ -190,6 +161,14 @@ final class ParameterNode
|
||||
buf.append("with-param");
|
||||
break;
|
||||
}
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
buf.append(name);
|
||||
if (select != null)
|
||||
{
|
||||
buf.append(",select=");
|
||||
buf.append(select);
|
||||
}
|
||||
buf.append(']');
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ProcessingInstructionNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -66,19 +66,15 @@ final class ProcessingInstructionNode
|
||||
{
|
||||
TemplateNode ret = new ProcessingInstructionNode(name);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void doApply(Stylesheet stylesheet, QName mode,
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
String data = null;
|
||||
@@ -98,24 +94,18 @@ final class ProcessingInstructionNode
|
||||
ProcessingInstruction pi = doc.createProcessingInstruction(name, data);
|
||||
// Insert into result tree
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(pi, nextSibling);
|
||||
}
|
||||
parent.insertBefore(pi, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(pi);
|
||||
}
|
||||
parent.appendChild(pi);
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("processing-instruction");
|
||||
buf.append('[');
|
||||
buf.append("name=");
|
||||
buf.append(name);
|
||||
|
||||
@@ -408,7 +408,7 @@ class Stylesheet
|
||||
{
|
||||
if (debug)
|
||||
System.err.println("getTemplate: mode="+mode+" context="+context);
|
||||
Set candidates = new TreeSet();
|
||||
Template selected = null;
|
||||
for (Iterator j = templates.iterator(); j.hasNext(); )
|
||||
{
|
||||
Template t = (Template) j.next();
|
||||
@@ -426,10 +426,21 @@ class Stylesheet
|
||||
}
|
||||
//System.err.println("\t"+context+" "+t+"="+isMatch);
|
||||
if (isMatch)
|
||||
candidates.add(t);
|
||||
{
|
||||
// Conflict resolution
|
||||
// @see http://www.w3.org/TR/xslt#conflict
|
||||
if (selected == null)
|
||||
selected = t;
|
||||
else
|
||||
{
|
||||
if (t.precedence < selected.precedence ||
|
||||
t.priority < selected.priority)
|
||||
continue;
|
||||
selected = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
//System.err.println("\tcandidates="+candidates);
|
||||
if (candidates.isEmpty())
|
||||
if (selected == null)
|
||||
{
|
||||
// Apply built-in template
|
||||
// Current template is unchanged
|
||||
@@ -451,32 +462,39 @@ class Stylesheet
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Template t = (Template) candidates.iterator().next();
|
||||
// Set current template
|
||||
currentTemplate = t;
|
||||
if (debug)
|
||||
System.err.println("\ttemplate="+t+" context="+context);
|
||||
return t.node;
|
||||
}
|
||||
// Set current template
|
||||
currentTemplate = selected;
|
||||
if (debug)
|
||||
System.err.println("\ttemplate="+currentTemplate+" context="+context);
|
||||
return currentTemplate.node;
|
||||
}
|
||||
|
||||
TemplateNode getTemplate(QName mode, QName name)
|
||||
throws TransformerException
|
||||
{
|
||||
Set candidates = new TreeSet();
|
||||
Template selected = null;
|
||||
for (Iterator j = templates.iterator(); j.hasNext(); )
|
||||
{
|
||||
Template t = (Template) j.next();
|
||||
boolean isMatch = t.matches(name);
|
||||
if (isMatch)
|
||||
candidates.add(t);
|
||||
{
|
||||
// Conflict resolution
|
||||
// @see http://www.w3.org/TR/xslt#conflict
|
||||
if (selected == null)
|
||||
selected = t;
|
||||
else
|
||||
{
|
||||
if (t.precedence < selected.precedence ||
|
||||
t.priority < selected.priority)
|
||||
continue;
|
||||
selected = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (candidates.isEmpty())
|
||||
if (selected == null)
|
||||
return null;
|
||||
Template t = (Template) candidates.iterator().next();
|
||||
return t.node;
|
||||
return selected.node;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -504,11 +522,9 @@ class Stylesheet
|
||||
String p = getAttribute(attrs, "priority");
|
||||
String mm = getAttribute(attrs, "mode");
|
||||
QName mode = (mm == null) ? null : getQName(mm);
|
||||
double priority = (p == null) ? Template.DEFAULT_PRIORITY :
|
||||
Double.parseDouble(p);
|
||||
Node children = node.getFirstChild();
|
||||
return new Template(this, name, match, parse(children),
|
||||
precedence, priority, mode);
|
||||
precedence, p, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -799,7 +815,7 @@ class Stylesheet
|
||||
templates.add(new Template(this, null, new Root(),
|
||||
parse(rootClone),
|
||||
precedence,
|
||||
Template.DEFAULT_PRIORITY,
|
||||
null,
|
||||
null));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Template.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -66,51 +66,77 @@ class Template
|
||||
final double priority;
|
||||
final int precedence;
|
||||
final QName mode;
|
||||
final boolean isAnyNode; // is the match simply "node()"?
|
||||
|
||||
Template(Stylesheet stylesheet,
|
||||
QName name, Pattern match, TemplateNode node,
|
||||
int precedence, double priority, QName mode)
|
||||
int precedence, String priorityAttr, QName mode)
|
||||
{
|
||||
this.stylesheet = stylesheet;
|
||||
this.name = name;
|
||||
this.match = match;
|
||||
this.node = node;
|
||||
// adjust priority if necessary
|
||||
// see XSLT section 5.5
|
||||
Test test = getNodeTest(match);
|
||||
if (test != null)
|
||||
this.precedence = precedence;
|
||||
this.mode = mode;
|
||||
|
||||
double p = DEFAULT_PRIORITY;
|
||||
boolean a = false;
|
||||
if (priorityAttr != null)
|
||||
p = Double.parseDouble(priorityAttr);
|
||||
else
|
||||
{
|
||||
if (test instanceof NameTest)
|
||||
// adjust priority if necessary
|
||||
// see XSLT section 5.5
|
||||
if (match instanceof Selector)
|
||||
{
|
||||
NameTest nameTest = (NameTest) test;
|
||||
if (nameTest.matchesAny() ||
|
||||
nameTest.matchesAnyLocalName())
|
||||
Selector selector = (Selector) match;
|
||||
Test[] tests = selector.getTests();
|
||||
if (tests.length > 0)
|
||||
{
|
||||
priority = -0.25d;
|
||||
}
|
||||
else
|
||||
{
|
||||
priority = 0.0d;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NodeTypeTest nodeTypeTest = (NodeTypeTest) test;
|
||||
if (nodeTypeTest.getNodeType() ==
|
||||
Node.PROCESSING_INSTRUCTION_NODE &&
|
||||
nodeTypeTest.getData() != null)
|
||||
{
|
||||
priority = 0.0d;
|
||||
}
|
||||
else
|
||||
{
|
||||
priority = -0.5d;
|
||||
Test test = tests[0];
|
||||
if (test instanceof NameTest)
|
||||
{
|
||||
NameTest nameTest = (NameTest) test;
|
||||
if (nameTest.matchesAny())
|
||||
p = -0.25d;
|
||||
else if (nameTest.matchesAnyLocalName())
|
||||
p = -0.20d;
|
||||
else
|
||||
p = 0.0d;
|
||||
}
|
||||
else
|
||||
{
|
||||
NodeTypeTest nodeTypeTest = (NodeTypeTest) test;
|
||||
if (nodeTypeTest.getNodeType() ==
|
||||
Node.PROCESSING_INSTRUCTION_NODE &&
|
||||
nodeTypeTest.getData() != null)
|
||||
p = 0.0d;
|
||||
else
|
||||
p = -0.5d;
|
||||
a = (nodeTypeTest.getNodeType() == 0);
|
||||
}
|
||||
// Add a small difference for predicates
|
||||
if (tests.length > 1)
|
||||
p += ((double) tests.length - 1) * 0.001;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.priority = p;
|
||||
this.isAnyNode = a;
|
||||
}
|
||||
|
||||
private Template(Stylesheet stylesheet,
|
||||
QName name, Pattern match, TemplateNode node,
|
||||
int precedence, double priority, QName mode, boolean isAnyNode)
|
||||
{
|
||||
this.stylesheet = stylesheet;
|
||||
this.name = name;
|
||||
this.match = match;
|
||||
this.node = node;
|
||||
this.precedence = precedence;
|
||||
this.priority = priority;
|
||||
this.mode = mode;
|
||||
this.isAnyNode = isAnyNode;
|
||||
}
|
||||
|
||||
Template clone(Stylesheet stylesheet)
|
||||
@@ -124,7 +150,8 @@ class Template
|
||||
(node == null) ? null : node.clone(stylesheet),
|
||||
precedence,
|
||||
priority,
|
||||
mode);
|
||||
mode,
|
||||
isAnyNode);
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
@@ -134,29 +161,16 @@ class Template
|
||||
Template t = (Template) other;
|
||||
int d = t.precedence - precedence;
|
||||
if (d != 0)
|
||||
{
|
||||
return d;
|
||||
}
|
||||
return d;
|
||||
double d2 = t.priority - priority;
|
||||
if (d2 != 0.0d)
|
||||
{
|
||||
return (int) Math.round(d2 * 1000.0d);
|
||||
}
|
||||
return (int) Math.round(d2 * 1000.0d);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Test getNodeTest(Expr expr)
|
||||
{
|
||||
if (expr instanceof Selector)
|
||||
{
|
||||
Selector selector = (Selector) expr;
|
||||
Test[] tests = selector.getTests();
|
||||
if (tests.length > 0)
|
||||
{
|
||||
return tests[0];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -164,13 +178,11 @@ class Template
|
||||
{
|
||||
if ((mode == null && this.mode != null) ||
|
||||
(mode != null && !mode.equals(this.mode)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
if (match == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
if (isAnyNode && node.getNodeType() == Node.DOCUMENT_NODE)
|
||||
return false; // don't match document node
|
||||
return match.matches(node);
|
||||
}
|
||||
|
||||
@@ -186,9 +198,7 @@ class Template
|
||||
ctx = ctx.parent)
|
||||
{
|
||||
if (ctx == stylesheet)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -206,13 +216,12 @@ class Template
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
System.err.println("...applying " + toString() + " to " + context);
|
||||
if (stylesheet.debug)
|
||||
System.err.println("...applying " + toString() + " to " + context);
|
||||
if (node != null)
|
||||
{
|
||||
node.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
node.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
@@ -244,9 +253,7 @@ class Template
|
||||
{
|
||||
out.println(toString());
|
||||
if (node != null)
|
||||
{
|
||||
node.list(1, out, true);
|
||||
}
|
||||
node.list(1, out, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -64,9 +64,7 @@ abstract class TemplateNode
|
||||
throws TransformerException
|
||||
{
|
||||
if (stylesheet.terminated)
|
||||
{
|
||||
return;
|
||||
}
|
||||
return;
|
||||
if (Thread.currentThread().isInterrupted())
|
||||
{
|
||||
// Try to head off any infinite loops at the pass
|
||||
@@ -91,13 +89,9 @@ abstract class TemplateNode
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (children != null && children.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
if (next != null && next.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -107,18 +101,30 @@ abstract class TemplateNode
|
||||
void list(int depth, PrintStream out, boolean listNext)
|
||||
{
|
||||
for (int i = 0; i < depth; i++)
|
||||
{
|
||||
out.print(" ");
|
||||
}
|
||||
out.print(" ");
|
||||
out.println(toString());
|
||||
if (children != null)
|
||||
{
|
||||
children.list(depth + 1, out, true);
|
||||
}
|
||||
children.list(depth + 1, out, true);
|
||||
if (listNext && next != null)
|
||||
next.list(depth, out, listNext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the template for which this template node is the
|
||||
* first node specifies the given parameter.
|
||||
*/
|
||||
boolean hasParam(QName name)
|
||||
{
|
||||
for (TemplateNode ctx = this; ctx != null; ctx = ctx.next)
|
||||
{
|
||||
next.list(depth, out, listNext);
|
||||
if (ctx instanceof ParameterNode)
|
||||
{
|
||||
ParameterNode param = (ParameterNode) ctx;
|
||||
if (param.type == Bindings.PARAM && param.name.equals(name))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* TextNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -65,19 +65,15 @@ final class TextNode
|
||||
{
|
||||
TemplateNode ret = new TextNode(disableOutputEscaping);
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void doApply(Stylesheet stylesheet, QName mode,
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
String value = "";
|
||||
@@ -96,24 +92,28 @@ final class TextNode
|
||||
}
|
||||
Text text = doc.createTextNode(value);
|
||||
if (disableOutputEscaping)
|
||||
{
|
||||
text.setUserData("disable-output-escaping", "yes", stylesheet);
|
||||
}
|
||||
text.setUserData("disable-output-escaping", "yes", stylesheet);
|
||||
// Insert into result tree
|
||||
if (nextSibling != null)
|
||||
{
|
||||
parent.insertBefore(text, nextSibling);
|
||||
}
|
||||
parent.insertBefore(text, nextSibling);
|
||||
else
|
||||
{
|
||||
parent.appendChild(text);
|
||||
}
|
||||
parent.appendChild(text);
|
||||
if (next != null)
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer("text");
|
||||
if (disableOutputEscaping)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
buf.append('[');
|
||||
buf.append("disable-output-escaping");
|
||||
buf.append(']');
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ class TransformerImpl
|
||||
}
|
||||
// Make a copy of the source node, and strip it
|
||||
context = context.cloneNode(true);
|
||||
strip(context);
|
||||
strip(stylesheet, context);
|
||||
// XSLT transformation
|
||||
try
|
||||
{
|
||||
@@ -321,7 +321,7 @@ class TransformerImpl
|
||||
if (indent)
|
||||
{
|
||||
parent.normalize();
|
||||
strip(parent);
|
||||
strip(stylesheet, parent);
|
||||
Document resultDoc = (parent instanceof Document) ?
|
||||
(Document) parent :
|
||||
parent.getOwnerDocument();
|
||||
@@ -393,7 +393,7 @@ class TransformerImpl
|
||||
/**
|
||||
* Strip whitespace from the source tree.
|
||||
*/
|
||||
boolean strip(Node node)
|
||||
static boolean strip(Stylesheet stylesheet, Node node)
|
||||
throws TransformerConfigurationException
|
||||
{
|
||||
short nt = node.getNodeType();
|
||||
@@ -444,7 +444,7 @@ class TransformerImpl
|
||||
Node child = node.getFirstChild();
|
||||
while (child != null)
|
||||
{
|
||||
boolean remove = strip(child);
|
||||
boolean remove = strip(stylesheet, child);
|
||||
Node next = child.getNextSibling();
|
||||
if (remove)
|
||||
node.removeChild(child);
|
||||
@@ -691,7 +691,7 @@ class TransformerImpl
|
||||
for (Iterator i = children.iterator(); i.hasNext(); )
|
||||
{
|
||||
ctx = (Node) i.next();
|
||||
reindent(doc, ctx, offset + 1);
|
||||
reindent(doc, ctx, offset);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -709,9 +709,9 @@ class TransformerImpl
|
||||
}
|
||||
buf = new StringBuffer();
|
||||
buf.append('\n');
|
||||
ws = buf.toString();
|
||||
for (int i = 0; i < offset; i++)
|
||||
buf.append(INDENT_WHITESPACE);
|
||||
ws = buf.toString();
|
||||
node.appendChild(doc.createTextNode(ws));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ final class ValueOfNode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("value-of");
|
||||
buf.append('[');
|
||||
buf.append("select=");
|
||||
buf.append(select);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* WhenNode.java --
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -62,19 +62,15 @@ final class WhenNode
|
||||
{
|
||||
TemplateNode ret = new WhenNode(test.clone(stylesheet));
|
||||
if (children != null)
|
||||
{
|
||||
ret.children = children.clone(stylesheet);
|
||||
}
|
||||
ret.children = children.clone(stylesheet);
|
||||
if (next != null)
|
||||
{
|
||||
ret.next = next.clone(stylesheet);
|
||||
}
|
||||
ret.next = next.clone(stylesheet);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void doApply(Stylesheet stylesheet, QName mode,
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
Node context, int pos, int len,
|
||||
Node parent, Node nextSibling)
|
||||
throws TransformerException
|
||||
{
|
||||
Object ret = test.evaluate(context, pos, len);
|
||||
@@ -84,35 +80,29 @@ final class WhenNode
|
||||
if (success)
|
||||
{
|
||||
if (children != null)
|
||||
{
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
children.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (next != null)
|
||||
{
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
next.apply(stylesheet, mode,
|
||||
context, pos, len,
|
||||
parent, nextSibling);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean references(QName var)
|
||||
{
|
||||
if (test != null && test.references(var))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return super.references(var);
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer(getClass().getName());
|
||||
StringBuffer buf = new StringBuffer("when");
|
||||
buf.append('[');
|
||||
buf.append("test=");
|
||||
buf.append(test);
|
||||
|
||||
@@ -55,6 +55,8 @@ import java.io.Writer;
|
||||
* data loss.
|
||||
*
|
||||
* @author David Brownell
|
||||
*
|
||||
* @deprecated Please use the javax.xml.stream APIs instead
|
||||
*/
|
||||
public class XHTMLWriter extends XMLWriter
|
||||
{
|
||||
|
||||
@@ -102,6 +102,8 @@ import org.xml.sax.helpers.*;
|
||||
* @see gnu.xml.pipeline.TextConsumer
|
||||
*
|
||||
* @author David Brownell
|
||||
*
|
||||
* @deprecated Please use the javax.xml.stream APIs instead
|
||||
*/
|
||||
public class XMLWriter
|
||||
implements ContentHandler, LexicalHandler, DTDHandler, DeclHandler
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/* Annotation.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* A schema component annotation.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class Annotation
|
||||
{
|
||||
|
||||
public final String documentation;
|
||||
|
||||
public Annotation(String documentation)
|
||||
{
|
||||
this.documentation = documentation;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return documentation;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/* AnySimpleType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
final class AnySimpleType
|
||||
extends SimpleType
|
||||
{
|
||||
|
||||
AnySimpleType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "anySimpleType"),
|
||||
ANY, /* variety */
|
||||
(Set) null, /* facets */
|
||||
0, /* fundametalFacets */
|
||||
(SimpleType) Type.ANY_TYPE, /* baseType */
|
||||
null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/* AnyType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
final class AnyType
|
||||
extends SimpleType
|
||||
{
|
||||
|
||||
AnyType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "anyType"),
|
||||
ANY, /* variety */
|
||||
null, /* facets */
|
||||
0, /* fundamentalFacets */
|
||||
null, /* baseType */
|
||||
null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
/* AnyURIType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema anyURI type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class AnyURIType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
AnyURIType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "anyURI"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
try
|
||||
{
|
||||
new URI(value);
|
||||
}
|
||||
catch (URISyntaxException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException(e.getIndex(),
|
||||
e.getReason());
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/* AtomicSimpleType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* An XML Schema atomic simple type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class AtomicSimpleType
|
||||
extends SimpleType
|
||||
{
|
||||
|
||||
public AtomicSimpleType(QName name,
|
||||
Set facets,
|
||||
int fundamentalFacets,
|
||||
SimpleType baseType,
|
||||
Annotation annotation)
|
||||
{
|
||||
super(name, ATOMIC, facets, fundamentalFacets, baseType, annotation);
|
||||
}
|
||||
|
||||
// Only for use by built-in types
|
||||
AtomicSimpleType(QName name, SimpleType baseType)
|
||||
{
|
||||
super(name, ATOMIC, null, 0, baseType, null);
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (baseType != null)
|
||||
baseType.checkValid(value, context);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/* Base64BinaryType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema base64Binary type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class Base64BinaryType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final String B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
|
||||
"abcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
static final String B16 = "AEIMQUYcgkosw048";
|
||||
static final String B04 = "AQgw";
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
Base64BinaryType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "base64Binary"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
// TODO value = collapseWhitespace(value);
|
||||
int len = value.length();
|
||||
try
|
||||
{
|
||||
for (int i = len - 1; i >= 0; )
|
||||
{
|
||||
char c4 = value.charAt(i--);
|
||||
if (c4 == ' ')
|
||||
c4 = value.charAt(i--);
|
||||
char c3 = value.charAt(i--);
|
||||
if (c3 == ' ')
|
||||
c3 = value.charAt(i--);
|
||||
char c2 = value.charAt(i--);
|
||||
if (c2 == ' ')
|
||||
c2 = value.charAt(i--);
|
||||
char c1 = value.charAt(i--);
|
||||
if (c1 == ' ')
|
||||
c1 = value.charAt(i--);
|
||||
|
||||
if (c4 == '=')
|
||||
{
|
||||
if (c3 == '=')
|
||||
{
|
||||
if (B04.indexOf(c2) != -1 &&
|
||||
B64.indexOf(c1) != -1)
|
||||
continue;
|
||||
}
|
||||
else if (B16.indexOf(c3) != -1)
|
||||
{
|
||||
if (B64.indexOf(c2) != -1 &&
|
||||
B64.indexOf(c1) != -1)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (B64.indexOf(c4) != -1)
|
||||
continue;
|
||||
throw new DatatypeException(i, "illegal BASE64");
|
||||
}
|
||||
}
|
||||
catch (IndexOutOfBoundsException e)
|
||||
{
|
||||
throw new DatatypeException("illegal BASE64");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/* BooleanType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema boolean type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class BooleanType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
static final Set VALUE_SPACE =
|
||||
new TreeSet(Arrays.asList(new String[] {"true", "false", "1", "0"}));
|
||||
|
||||
BooleanType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "boolean"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (!VALUE_SPACE.contains(value))
|
||||
throw new DatatypeException("invalid boolean value");
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
return ("1".equals(literal) || "true".equals(literal)) ? Boolean.TRUE :
|
||||
Boolean.FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/* ByteType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema byte type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class ByteType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
static final String MAX_VALUE = "127";
|
||||
static final String MIN_VALUE = "128";
|
||||
static final int LENGTH = MAX_VALUE.length();
|
||||
|
||||
ByteType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "byte"),
|
||||
TypeLibrary.SHORT);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValue(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid byte value");
|
||||
int i = 0, off = 0;
|
||||
boolean compare = false;
|
||||
String compareTo = MAX_VALUE;
|
||||
char c = value.charAt(0);
|
||||
if (c == '+')
|
||||
i++;
|
||||
else if (c == '-')
|
||||
{
|
||||
compareTo = MIN_VALUE;
|
||||
i++;
|
||||
}
|
||||
if (len - i > LENGTH)
|
||||
throw new DatatypeException(0, "invalid byte value");
|
||||
else if (len - i == LENGTH)
|
||||
compare = true;
|
||||
for (; i < len; i++)
|
||||
{
|
||||
c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
{
|
||||
if (compare)
|
||||
{
|
||||
char d = compareTo.charAt(off);
|
||||
if (Character.digit(c, 10) > Character.digit(d, 10))
|
||||
throw new DatatypeException(i, "invalid byte value");
|
||||
}
|
||||
off++;
|
||||
continue;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid byte value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new Byte(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,335 @@
|
||||
/* DateTimeType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.TimeZone;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema dateTime type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class DateTimeType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
DateTimeType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "dateTime"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValue(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
String year = value.substring(start, i);
|
||||
if ("0000".equals(year) || year.length() < 4)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 2: // day
|
||||
if (c == 'T')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 3;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 3: // hour
|
||||
if (c == ':')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 4;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 4: // minute
|
||||
if (c == ':')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 5;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 5: // second
|
||||
if (c == '.')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 6;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
else if (c == ' ')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 7;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 6: // second fraction
|
||||
if (c == ' ')
|
||||
{
|
||||
state = 7;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 7: // timezone 1
|
||||
if (start == i)
|
||||
{
|
||||
if (c == '+' || c == '-')
|
||||
continue;
|
||||
else if (c == 'Z')
|
||||
{
|
||||
state = 9;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (c == ':')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
state = 8;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid dateTime value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 5: // second
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException(len, "invalid dateTime value");
|
||||
break;
|
||||
case 6: // second fraction
|
||||
break;
|
||||
case 8: // timezone 2
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException(len, "invalid dateTime value");
|
||||
break;
|
||||
case 9: // post Z
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException(len, "invalid dateTime value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String value, ValidationContext context) {
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
Calendar cal = new GregorianCalendar();
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
cal.set(Calendar.YEAR,
|
||||
Integer.parseInt(value.substring(0, i)));
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
cal.set(Calendar.MONTH,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 2: // day
|
||||
if (c == 'T')
|
||||
{
|
||||
cal.set(Calendar.DATE,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 3;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 3: // hour
|
||||
if (c == ':')
|
||||
{
|
||||
cal.set(Calendar.HOUR,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 4;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 4: // minute
|
||||
if (c == ':')
|
||||
{
|
||||
cal.set(Calendar.MINUTE,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 5;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 5: // second
|
||||
if (c == ' ')
|
||||
{
|
||||
float second = Float.parseFloat(value.substring(start, i));
|
||||
// TODO adjust non-integer values
|
||||
cal.set(Calendar.SECOND, (int) second);
|
||||
state = 7;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// end of input
|
||||
if (len - start > 0 && state == 7)
|
||||
{
|
||||
// Timezone
|
||||
String timezone = value.substring(len - start);
|
||||
int i = timezone.indexOf(':');
|
||||
if (i == -1)
|
||||
{
|
||||
if ("Z".equals(timezone))
|
||||
timezone = "UTC";
|
||||
TimeZone tz = TimeZone.getTimeZone(timezone);
|
||||
if (tz == null)
|
||||
return null;
|
||||
cal.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
|
||||
}
|
||||
else
|
||||
{
|
||||
String tzh = timezone.substring(0, i);
|
||||
String tzm = timezone.substring(i + 1);
|
||||
int offset = Integer.parseInt(tzh) * 360000;
|
||||
if (offset < 0)
|
||||
offset -= Integer.parseInt(tzm) * 60000;
|
||||
else
|
||||
offset += Integer.parseInt(tzm) * 60000;
|
||||
cal.set(Calendar.ZONE_OFFSET, offset);
|
||||
}
|
||||
}
|
||||
return cal.getTime();
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
/* DateType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.TimeZone;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema date type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class DateType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
DateType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "date"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
String year = value.substring(start, i);
|
||||
if ("0000".equals(year) || year.length() < 4)
|
||||
throw new DatatypeException(i, "invalid date value");
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "invalid date value");
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid date value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 2: // day
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException("invalid date value");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("invalid date value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String value, ValidationContext context) {
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
Calendar cal = new GregorianCalendar();
|
||||
cal.set(Calendar.HOUR, 0);
|
||||
cal.set(Calendar.MINUTE, 0);
|
||||
cal.set(Calendar.SECOND, 0);
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
cal.set(Calendar.YEAR,
|
||||
Integer.parseInt(value.substring(0, i)));
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
cal.set(Calendar.MONTH,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case 2: // day
|
||||
if (c == 'T')
|
||||
{
|
||||
cal.set(Calendar.DATE,
|
||||
Integer.parseInt(value.substring(start, i)));
|
||||
state = 7;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// end of input
|
||||
if (len - start > 0 && state == 7)
|
||||
{
|
||||
// Timezone
|
||||
String timezone = value.substring(len - start);
|
||||
int i = timezone.indexOf(':');
|
||||
if (i == -1)
|
||||
{
|
||||
if ("Z".equals(timezone))
|
||||
timezone = "UTC";
|
||||
TimeZone tz = TimeZone.getTimeZone(timezone);
|
||||
if (tz == null)
|
||||
return null;
|
||||
cal.set(Calendar.ZONE_OFFSET, tz.getRawOffset());
|
||||
}
|
||||
else
|
||||
{
|
||||
String tzh = timezone.substring(0, i);
|
||||
String tzm = timezone.substring(i + 1);
|
||||
int offset = Integer.parseInt(tzh) * 360000;
|
||||
if (offset < 0)
|
||||
offset -= Integer.parseInt(tzm) * 60000;
|
||||
else
|
||||
offset += Integer.parseInt(tzm) * 60000;
|
||||
cal.set(Calendar.ZONE_OFFSET, offset);
|
||||
}
|
||||
}
|
||||
return cal.getTime();
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/* DecimalType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema decimal type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class DecimalType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
DecimalType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "decimal"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException("invalid decimal value");
|
||||
boolean seenDot = false;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
else if (c == '.')
|
||||
{
|
||||
if (seenDot)
|
||||
throw new DatatypeException(i, "invalid decimal value");
|
||||
seenDot = true;
|
||||
continue;
|
||||
}
|
||||
else if (c == '+' && i == 0)
|
||||
continue;
|
||||
else if (c == '-' && i == 0)
|
||||
continue;
|
||||
else
|
||||
throw new DatatypeException(i, "invalid decimal value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigDecimal(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/* DoubleType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema double type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class DoubleType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
static final Set SPECIAL =
|
||||
new TreeSet(Arrays.asList(new String[] {"INF", "-INF", "NaN"}));
|
||||
|
||||
DoubleType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "double"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (SPECIAL.contains(value))
|
||||
return;
|
||||
try
|
||||
{
|
||||
Double.parseDouble(value);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid double value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new Double(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
/* DurationType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema duration type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class DurationType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class Duration
|
||||
implements Comparable
|
||||
{
|
||||
int years;
|
||||
int months;
|
||||
int days;
|
||||
int minutes;
|
||||
float seconds;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
int hc = years;
|
||||
hc = hc * 31 + months;
|
||||
hc = hc * 31 + days;
|
||||
hc = hc * 31 + minutes;
|
||||
hc = hc * 31 + new Float(seconds).hashCode();
|
||||
return hc;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof Duration)
|
||||
{
|
||||
Duration duration = (Duration) other;
|
||||
return duration.years ==years &&
|
||||
duration.months == months &&
|
||||
duration.days == days &&
|
||||
duration.minutes == minutes &&
|
||||
duration.seconds == seconds;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof Duration)
|
||||
{
|
||||
Duration duration = (Duration) other;
|
||||
if (duration.years != years)
|
||||
return years - duration.years;
|
||||
if (duration.months != months)
|
||||
return months - duration.months;
|
||||
if (duration.days != days)
|
||||
return days - duration.days;
|
||||
if (duration.minutes != minutes)
|
||||
return minutes = duration.minutes;
|
||||
if (duration.seconds == seconds)
|
||||
return 0;
|
||||
return (seconds < duration.seconds) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
DurationType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "duration"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
char expect = 'P';
|
||||
boolean seenT = false;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && expect == 'P')
|
||||
continue;
|
||||
if (c == expect)
|
||||
{
|
||||
if (c == 'P')
|
||||
expect = 'Y';
|
||||
else if (c == 'Y')
|
||||
expect = 'M';
|
||||
else if (c == 'M' && !seenT)
|
||||
expect = 'D';
|
||||
else if (c == 'D')
|
||||
expect = 'T';
|
||||
else if (c == 'T')
|
||||
{
|
||||
expect = 'H';
|
||||
seenT = true;
|
||||
}
|
||||
else if (c == 'H')
|
||||
expect = 'M';
|
||||
else if (c == 'M' && seenT)
|
||||
expect = 'S';
|
||||
else if (c == 'S')
|
||||
{
|
||||
if (i + 1 != len)
|
||||
throw new DatatypeException(i, "illegal duration value");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39 && expect != 'P' && expect != 'T')
|
||||
continue;
|
||||
throw new DatatypeException(i, "illegal duration value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String value, ValidationContext context) {
|
||||
boolean negative = false;
|
||||
int days = 0, months = 0, years = 0;
|
||||
int minutes = 0;
|
||||
float seconds = 0.0f;
|
||||
int len = value.length();
|
||||
char expect = 'P';
|
||||
boolean seenT = false;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && expect == 'P')
|
||||
{
|
||||
negative = true;
|
||||
continue;
|
||||
}
|
||||
if (c == expect)
|
||||
{
|
||||
if (c == 'P')
|
||||
expect = 'Y';
|
||||
else if (c == 'Y')
|
||||
{
|
||||
expect = 'M';
|
||||
years = Integer.parseInt(value.substring(start, i));
|
||||
}
|
||||
else if (c == 'M' && !seenT)
|
||||
expect = 'D';
|
||||
else if (c == 'D')
|
||||
expect = 'T';
|
||||
else if (c == 'T')
|
||||
{
|
||||
expect = 'H';
|
||||
seenT = true;
|
||||
}
|
||||
else if (c == 'H')
|
||||
expect = 'M';
|
||||
else if (c == 'M' && seenT)
|
||||
expect = 'S';
|
||||
else if (c == 'S')
|
||||
{
|
||||
if (i + 1 != len)
|
||||
return null;
|
||||
}
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39 && expect != 'P' && expect != 'T')
|
||||
continue;
|
||||
return null;
|
||||
}
|
||||
if (negative)
|
||||
{
|
||||
days = days * -1;
|
||||
minutes = minutes * -1;
|
||||
seconds = seconds * -1.0f;
|
||||
}
|
||||
Duration duration = new Duration();
|
||||
duration.days = days;
|
||||
duration.minutes = minutes;
|
||||
duration.seconds = seconds;
|
||||
return duration;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
/* EntitiesType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema ENTITIES type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class EntitiesType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
EntitiesType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "ENTITIES"),
|
||||
TypeLibrary.ENTITY);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
StringBuffer buf = new StringBuffer();
|
||||
int len = value.length();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == ' ')
|
||||
{
|
||||
String token = buf.toString();
|
||||
if (token.length() > 0)
|
||||
{
|
||||
if (!context.isUnparsedEntity(token))
|
||||
throw new DatatypeException(i, "invalid ENTITIES value");
|
||||
}
|
||||
buf.setLength(0);
|
||||
}
|
||||
else
|
||||
buf.append(c);
|
||||
}
|
||||
String token = buf.toString();
|
||||
if (token.length() == 0 || !context.isUnparsedEntity(token))
|
||||
throw new DatatypeException("invalid ENTITIES value");
|
||||
}
|
||||
|
||||
public boolean isContextDependent()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/* EntityType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema ENTITY type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class EntityType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
EntityType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "ENTITY"),
|
||||
TypeLibrary.NCNAME);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (value.length() == 0 || !context.isUnparsedEntity(value))
|
||||
throw new DatatypeException("invalid ENTITY value");
|
||||
}
|
||||
|
||||
public boolean isContextDependent()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/* EnumerationFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* The <code>enumeration</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class EnumerationFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final String value;
|
||||
|
||||
public EnumerationFacet(String value, Annotation annotation)
|
||||
{
|
||||
super(ENUMERATION, annotation);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof EnumerationFacet &&
|
||||
((EnumerationFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/* Facet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* An XML Schema constraining facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public abstract class Facet
|
||||
{
|
||||
|
||||
public static final int LENGTH = 1;
|
||||
public static final int MIN_LENGTH = 2;
|
||||
public static final int MAX_LENGTH = 3;
|
||||
public static final int PATTERN = 4;
|
||||
public static final int ENUMERATION = 5;
|
||||
public static final int WHITESPACE = 6;
|
||||
public static final int MAX_INCLUSIVE = 7;
|
||||
public static final int MAX_EXCLUSIVE = 8;
|
||||
public static final int MIN_EXCLUSIVE = 9;
|
||||
public static final int MIN_INCLUSIVE = 10;
|
||||
public static final int TOTAL_DIGITS = 11;
|
||||
public static final int FRACTION_DIGITS = 12;
|
||||
|
||||
/**
|
||||
* The type of this facet.
|
||||
*/
|
||||
public final int type;
|
||||
|
||||
/**
|
||||
* Optional annotation.
|
||||
*/
|
||||
public Annotation annotation;
|
||||
|
||||
protected Facet(int type, Annotation annotation)
|
||||
{
|
||||
this.type = type;
|
||||
this.annotation = annotation;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/* FloatType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema float type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class FloatType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
static final Set SPECIAL =
|
||||
new TreeSet(Arrays.asList(new String[] {"INF", "-INF", "NaN"}));
|
||||
|
||||
FloatType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "float"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (SPECIAL.contains(value))
|
||||
return;
|
||||
try
|
||||
{
|
||||
Float.parseFloat(value);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid float value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new Float(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/* FractionDigitsFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* The <code>fractionDigits</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class FractionDigitsFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final int value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public FractionDigitsFacet(int value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(FRACTION_DIGITS, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof FractionDigitsFacet &&
|
||||
((FractionDigitsFacet) other).value == value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
/* GDayType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema gDay type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class GDayType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class GDay
|
||||
implements Comparable
|
||||
{
|
||||
|
||||
int day;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return day;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof GDay)
|
||||
return ((GDay) other).day == day;
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GDay)
|
||||
{
|
||||
GDay gd = (GDay) other;
|
||||
if (gd.day == day)
|
||||
return 0;
|
||||
return (day < gd.day) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
GDayType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gDay"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
continue;
|
||||
case 1:
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
default:
|
||||
throw new DatatypeException(i, "invalid GDay value");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
if (i - start != 0)
|
||||
throw new DatatypeException(i, "invalid GDay value");
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid GDay value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 2: // day
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException("invalid GDay value");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("invalid GDay value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
GDay ret = new GDay();
|
||||
ret.day = Integer.parseInt(literal.substring(3));
|
||||
return ret;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,184 @@
|
||||
/* GMonthDayType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema gMonthDay type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class GMonthDayType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class GMonthDay
|
||||
implements Comparable
|
||||
{
|
||||
|
||||
int month;
|
||||
int day;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return month * 31 + day;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof GMonthDay)
|
||||
{
|
||||
GMonthDay gmd = (GMonthDay) other;
|
||||
return gmd.month == month && gmd.day == day;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GMonthDay)
|
||||
{
|
||||
GMonthDay gmd = (GMonthDay) other;
|
||||
if (gmd.month == month)
|
||||
{
|
||||
if (gmd.day == day)
|
||||
return 0;
|
||||
return (day < gmd.day) ? -1 : 1;
|
||||
}
|
||||
return (month < gmd.month) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
GMonthDayType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gMonthDay"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
continue;
|
||||
case 1:
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
default:
|
||||
throw new DatatypeException(i, "illegal GMonthDay type");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1: // month
|
||||
if (c == '-')
|
||||
{
|
||||
if (i - start != 2)
|
||||
throw new DatatypeException(i, "illegal GMonthDay type");
|
||||
state = 2;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "illegal GMonthDay type");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 2: // day
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException("illegal GMonthDay type");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("illegal GMonthDay type");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
GMonthDay ret = new GMonthDay();
|
||||
ret.month = Integer.parseInt(literal.substring(2, 5));
|
||||
ret.day = Integer.parseInt(literal.substring(6));
|
||||
return ret;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
/* GMonthType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema gMonth type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class GMonthType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class GMonth
|
||||
implements Comparable
|
||||
{
|
||||
|
||||
int month;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return month;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof GMonth)
|
||||
return ((GMonth) other).month == month;
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GMonth)
|
||||
{
|
||||
GMonth gm = (GMonth) other;
|
||||
if (gm.month == month)
|
||||
return 0;
|
||||
return (month < gm.month) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
GMonthType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gMonth"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
continue;
|
||||
case 1:
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
default:
|
||||
throw new DatatypeException(i, "illegal GMonth value");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "illegal GMonth value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 1: // month
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException("illegal GMonth value");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("illegal GMonth value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
GMonth ret = new GMonth();
|
||||
ret.month = Integer.parseInt(literal.substring(2));
|
||||
return ret;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
/* GYearMonthType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema gYearMonth type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class GYearMonthType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class GYearMonth
|
||||
implements Comparable
|
||||
{
|
||||
|
||||
int year;
|
||||
int month;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return year * 31 + month;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof GYearMonth)
|
||||
{
|
||||
GYearMonth gmy = (GYearMonth) other;
|
||||
return gmy.year == year && gmy.month == month;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GYearMonth)
|
||||
{
|
||||
GYearMonth gmy = (GYearMonth) other;
|
||||
if (gmy.year == year)
|
||||
{
|
||||
if (gmy.month == month)
|
||||
return 0;
|
||||
return (month < gmy.month) ? -1 : 1;
|
||||
}
|
||||
return (year < gmy.year) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
GYearMonthType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gYearMonth"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
if (c == '-')
|
||||
{
|
||||
String year = value.substring(start, i);
|
||||
if (year.length() < 4 || Integer.parseInt(year) == 0)
|
||||
throw new DatatypeException(i, "illegal GYear value");
|
||||
state = 1;
|
||||
start = i + 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw new DatatypeException(i, "illegal GYear value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 1: // month
|
||||
if (len - start != 2)
|
||||
throw new DatatypeException("illegal GYear value");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("illegal GYear value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
int offset = 5;
|
||||
if (literal.charAt(0) == '-')
|
||||
offset++;
|
||||
GYearMonth ret = new GYearMonth();
|
||||
ret.year = Integer.parseInt(literal.substring(0, offset));
|
||||
ret.month = Integer.parseInt(literal.substring(offset + 1));
|
||||
return ret;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
/* GYearType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema gYear type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class GYearType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static class GYear
|
||||
implements Comparable
|
||||
{
|
||||
|
||||
int year;
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return year;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
if (other instanceof GYear)
|
||||
return ((GYear) other).year == year;
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(Object other)
|
||||
{
|
||||
if (other instanceof GYear)
|
||||
{
|
||||
GYear gy = (GYear) other;
|
||||
if (gy.year == year)
|
||||
return 0;
|
||||
return (year < gy.year) ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
GYearType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "gYear"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
int state = 0;
|
||||
int start = 0;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-' && i == 0)
|
||||
{
|
||||
start++;
|
||||
continue;
|
||||
}
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
throw new DatatypeException(i, "invalid GYear value");
|
||||
}
|
||||
switch (state)
|
||||
{
|
||||
case 0: // year
|
||||
String year = value.substring(start, len);
|
||||
if (year.length() < 4 || Integer.parseInt(year) == 0)
|
||||
throw new DatatypeException("invalid GYear value");
|
||||
break;
|
||||
default:
|
||||
throw new DatatypeException("invalid GYear value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
GYear ret = new GYear();
|
||||
ret.year = Integer.parseInt(literal);
|
||||
return ret;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/* HexBinaryType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema hexBinary type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class HexBinaryType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final String HEX = "0123456789ABCDEF";
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
HexBinaryType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "hexBinary"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (HEX.indexOf(c) == -1)
|
||||
throw new DatatypeException(i, "invalid hexBinary value");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/* IDRefType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema IDREF type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class IDRefType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
IDRefType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "IDREF"),
|
||||
TypeLibrary.NCNAME);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
// TODO
|
||||
}
|
||||
|
||||
public int getIdType()
|
||||
{
|
||||
return ID_TYPE_IDREF;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/* IDRefsType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema IDREFS type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class IDRefsType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
IDRefsType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "IDREFS"),
|
||||
TypeLibrary.IDREF);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
// TODO
|
||||
}
|
||||
|
||||
public int getIdType()
|
||||
{
|
||||
return ID_TYPE_IDREFS;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/* IDType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema ID type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class IDType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
IDType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "ID"),
|
||||
TypeLibrary.NCNAME);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
// TODO
|
||||
}
|
||||
|
||||
public int getIdType()
|
||||
{
|
||||
return ID_TYPE_ID;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/* IntType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema int type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class IntType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
static final String MAX_VALUE = "2147483647";
|
||||
static final String MIN_VALUE = "2147483648";
|
||||
static final int LENGTH = MAX_VALUE.length();
|
||||
|
||||
IntType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "int"),
|
||||
TypeLibrary.LONG);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid int value");
|
||||
int i = 0, off = 0;
|
||||
boolean compare = false;
|
||||
String compareTo = MAX_VALUE;
|
||||
char c = value.charAt(0);
|
||||
if (c == '+')
|
||||
i++;
|
||||
else if (c == '-')
|
||||
{
|
||||
compareTo = MIN_VALUE;
|
||||
i++;
|
||||
}
|
||||
if (len - i > LENGTH)
|
||||
throw new DatatypeException("invalid int value");
|
||||
else if (len - i == LENGTH)
|
||||
compare = true;
|
||||
for (; i < len; i++)
|
||||
{
|
||||
c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
{
|
||||
if (compare)
|
||||
{
|
||||
char d = compareTo.charAt(off);
|
||||
if (Character.digit(c, 10) > Character.digit(d, 10))
|
||||
throw new DatatypeException(i, "invalid int value");
|
||||
}
|
||||
off++;
|
||||
continue;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid int value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new Integer(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/* IntegerType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema integer type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class IntegerType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
IntegerType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "integer"),
|
||||
TypeLibrary.DECIMAL);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid integer value");
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
else if (c == '+' && i == 0)
|
||||
continue;
|
||||
else if (c == '-' && i == 0)
|
||||
continue;
|
||||
throw new DatatypeException(i, "invalid integer value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigInteger(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/* LanguageType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema language type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class LanguageType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
static final Pattern PATTERN =
|
||||
Pattern.compile("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*");
|
||||
|
||||
LanguageType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "language"),
|
||||
TypeLibrary.TOKEN);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (!PATTERN.matcher(value).matches())
|
||||
throw new DatatypeException("invalid language value");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/* LengthFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* The <code>length</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class LengthFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final int value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public LengthFacet(int value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(LENGTH, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof LengthFacet &&
|
||||
((LengthFacet) other).value == value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/* ListSimpleType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* An XML Schema list simple type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class ListSimpleType
|
||||
extends SimpleType
|
||||
{
|
||||
|
||||
/**
|
||||
* The type of the items in this list (atomic or union).
|
||||
*/
|
||||
public final SimpleType itemType;
|
||||
|
||||
public ListSimpleType(QName name, Set facets,
|
||||
int fundamentalFacets, SimpleType baseType,
|
||||
Annotation annotation, SimpleType itemType)
|
||||
{
|
||||
super(name, LIST, facets, fundamentalFacets, baseType, annotation);
|
||||
this.itemType = itemType;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
StringTokenizer st = new StringTokenizer(value, " ");
|
||||
if (!st.hasMoreTokens())
|
||||
throw new DatatypeException("invalid list value");
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
String token = st.nextToken();
|
||||
itemType.checkValid(token, context);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/* LongType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema long type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class LongType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
static final String MAX_VALUE = "9223372036854775807";
|
||||
static final String MIN_VALUE = "9223372036854775808";
|
||||
static final int LENGTH = MAX_VALUE.length();
|
||||
|
||||
LongType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "long"),
|
||||
TypeLibrary.INTEGER);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid long value");
|
||||
int i = 0, off = 0;
|
||||
boolean compare = false;
|
||||
String compareTo = MAX_VALUE;
|
||||
char c = value.charAt(0);
|
||||
if (c == '+')
|
||||
i++;
|
||||
else if (c == '-')
|
||||
{
|
||||
compareTo = MIN_VALUE;
|
||||
i++;
|
||||
}
|
||||
if (len - i > LENGTH)
|
||||
throw new DatatypeException(i, "invalid long value");
|
||||
else if (len - i == LENGTH)
|
||||
compare = true;
|
||||
for (; i < len; i++)
|
||||
{
|
||||
c = value.charAt(i);
|
||||
if (c >= 0x30 && c <= 0x39)
|
||||
{
|
||||
if (compare)
|
||||
{
|
||||
char d = compareTo.charAt(off);
|
||||
if (Character.digit(c, 10) > Character.digit(d, 10))
|
||||
throw new DatatypeException(i, "invalid long value");
|
||||
}
|
||||
off++;
|
||||
continue;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid long value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new Long(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/* MaxExclusiveFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* The <code>maxExclusive</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class MaxExclusiveFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final Object value; // date or number
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public MaxExclusiveFacet(Object value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(MAX_EXCLUSIVE, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof MaxExclusiveFacet &&
|
||||
((MaxExclusiveFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
boolean matches(Object test)
|
||||
{
|
||||
if (value instanceof Date)
|
||||
{
|
||||
Date dvalue = (Date) value;
|
||||
if (!(test instanceof Date))
|
||||
return false;
|
||||
return ((Date) test).before(dvalue);
|
||||
}
|
||||
else if (value instanceof BigInteger)
|
||||
{
|
||||
BigInteger ivalue = (BigInteger) value;
|
||||
if (!(test instanceof BigInteger))
|
||||
return false;
|
||||
return ((BigInteger) test).compareTo(ivalue) < 0;
|
||||
}
|
||||
else if (value instanceof BigDecimal)
|
||||
{
|
||||
BigDecimal dvalue = (BigDecimal) value;
|
||||
if (!(test instanceof BigDecimal))
|
||||
return false;
|
||||
return ((BigDecimal) test).compareTo(dvalue) < 0;
|
||||
}
|
||||
else if (value instanceof Comparable)
|
||||
{
|
||||
if (!(test.getClass().equals(value.getClass())))
|
||||
return false;
|
||||
return ((Comparable) test).compareTo(value) < 0;
|
||||
}
|
||||
Number nvalue = (Number) value;
|
||||
if (!(test instanceof Number))
|
||||
return false;
|
||||
return ((Number) test).doubleValue() < nvalue.doubleValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/* MaxInclusiveFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* The <code>maxInclusive</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class MaxInclusiveFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final Object value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public MaxInclusiveFacet(Object value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(MAX_INCLUSIVE, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof MaxInclusiveFacet &&
|
||||
((MaxInclusiveFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
boolean matches(Object test)
|
||||
{
|
||||
if (value instanceof Date)
|
||||
{
|
||||
Date dvalue = (Date) value;
|
||||
if (!(test instanceof Date))
|
||||
return false;
|
||||
Date dtest = (Date) test;
|
||||
return dtest.equals(dvalue) || dtest.before(dvalue);
|
||||
}
|
||||
else if (value instanceof BigInteger)
|
||||
{
|
||||
BigInteger ivalue = (BigInteger) value;
|
||||
if (!(test instanceof BigInteger))
|
||||
return false;
|
||||
return ((BigInteger) test).compareTo(ivalue) <= 0;
|
||||
}
|
||||
else if (value instanceof BigDecimal)
|
||||
{
|
||||
BigDecimal dvalue = (BigDecimal) value;
|
||||
if (!(test instanceof BigDecimal))
|
||||
return false;
|
||||
return ((BigDecimal) test).compareTo(dvalue) <= 0;
|
||||
}
|
||||
else if (value instanceof Comparable)
|
||||
{
|
||||
if (!(test.getClass().equals(value.getClass())))
|
||||
return false;
|
||||
return ((Comparable) test).compareTo(value) <= 0;
|
||||
}
|
||||
Number nvalue = (Number) value;
|
||||
if (!(test instanceof Number))
|
||||
return false;
|
||||
return ((Number) test).doubleValue() <= nvalue.doubleValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+17
-34
@@ -1,5 +1,5 @@
|
||||
/* LocationImpl.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
/* MaxLengthFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -35,54 +35,37 @@ this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.stream;
|
||||
|
||||
import javax.xml.stream.Location;
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* Information about the location of an XML event within the underlying
|
||||
* stream.
|
||||
* The <code>maxLength</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public class LocationImpl
|
||||
implements Location
|
||||
public final class MaxLengthFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
protected final int offset;
|
||||
public final int value;
|
||||
|
||||
protected final int col;
|
||||
public final boolean fixed;
|
||||
|
||||
protected final int line;
|
||||
|
||||
protected final String systemId;
|
||||
|
||||
protected LocationImpl(int offset, int col, int line, String systemId)
|
||||
public MaxLengthFacet(int value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
this.offset = offset;
|
||||
this.col = col;
|
||||
this.line = line;
|
||||
this.systemId = systemId;
|
||||
super(MAX_LENGTH, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int getLineNumber()
|
||||
public int hashCode()
|
||||
{
|
||||
return line;
|
||||
return value;
|
||||
}
|
||||
|
||||
public int getColumnNumber()
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return col;
|
||||
}
|
||||
|
||||
public int getCharacterOffset()
|
||||
{
|
||||
return offset;
|
||||
}
|
||||
|
||||
public String getLocationURI()
|
||||
{
|
||||
return systemId;
|
||||
return (other instanceof MaxLengthFacet &&
|
||||
((MaxLengthFacet) other).value == value);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
/* MinExclusiveFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* The <code>minExclusive</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class MinExclusiveFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final Object value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public MinExclusiveFacet(Object value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(MIN_EXCLUSIVE, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof MinExclusiveFacet &&
|
||||
((MinExclusiveFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
boolean matches(Object test)
|
||||
{
|
||||
if (value instanceof Date)
|
||||
{
|
||||
Date dvalue = (Date) value;
|
||||
if (!(test instanceof Date))
|
||||
return false;
|
||||
return ((Date) test).after(dvalue);
|
||||
}
|
||||
else if (value instanceof BigInteger)
|
||||
{
|
||||
BigInteger ivalue = (BigInteger) value;
|
||||
if (!(test instanceof BigInteger))
|
||||
return false;
|
||||
return ((BigInteger) test).compareTo(ivalue) > 0;
|
||||
}
|
||||
else if (value instanceof BigDecimal)
|
||||
{
|
||||
BigDecimal dvalue = (BigDecimal) value;
|
||||
if (!(test instanceof BigDecimal))
|
||||
return false;
|
||||
return ((BigDecimal) test).compareTo(dvalue) > 0;
|
||||
}
|
||||
else if (value instanceof Comparable)
|
||||
{
|
||||
if (!(test.getClass().equals(value.getClass())))
|
||||
return false;
|
||||
return ((Comparable) test).compareTo(value) > 0;
|
||||
}
|
||||
Number nvalue = (Number) value;
|
||||
if (!(test instanceof Number))
|
||||
return false;
|
||||
return ((Number) test).doubleValue() > nvalue.doubleValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/* MinInclusiveFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* The <code>minInclusive</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class MinInclusiveFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final Object value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public MinInclusiveFacet(Object value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(MIN_INCLUSIVE, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof MinInclusiveFacet &&
|
||||
((MinInclusiveFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
boolean matches(Object test)
|
||||
{
|
||||
if (value instanceof Date)
|
||||
{
|
||||
Date dvalue = (Date) value;
|
||||
if (!(test instanceof Date))
|
||||
return false;
|
||||
Date dtest = (Date) test;
|
||||
return dtest.equals(dvalue) || dtest.after(dvalue);
|
||||
}
|
||||
else if (value instanceof BigInteger)
|
||||
{
|
||||
BigInteger ivalue = (BigInteger) value;
|
||||
if (!(test instanceof BigInteger))
|
||||
return false;
|
||||
return ((BigInteger) test).compareTo(ivalue) >= 0;
|
||||
}
|
||||
else if (value instanceof BigDecimal)
|
||||
{
|
||||
BigDecimal dvalue = (BigDecimal) value;
|
||||
if (!(test instanceof BigDecimal))
|
||||
return false;
|
||||
return ((BigDecimal) test).compareTo(dvalue) >= 0;
|
||||
}
|
||||
else if (value instanceof Comparable)
|
||||
{
|
||||
if (!(test.getClass().equals(value.getClass())))
|
||||
return false;
|
||||
return ((Comparable) test).compareTo(value) >= 0;
|
||||
}
|
||||
Number nvalue = (Number) value;
|
||||
if (!(test instanceof Number))
|
||||
return false;
|
||||
return ((Number) test).doubleValue() >= nvalue.doubleValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/* MinLengthFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
/**
|
||||
* The <code>minLength</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class MinLengthFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final int value;
|
||||
|
||||
public final boolean fixed;
|
||||
|
||||
public MinLengthFacet(int value, boolean fixed, Annotation annotation)
|
||||
{
|
||||
super(MIN_LENGTH, annotation);
|
||||
this.value = value;
|
||||
this.fixed = fixed;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof MinLengthFacet &&
|
||||
((MinLengthFacet) other).value == value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/* NCNameType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
import gnu.xml.stream.UnicodeReader;
|
||||
import gnu.xml.stream.XMLParser;
|
||||
|
||||
/**
|
||||
* The XML Schema NCName type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NCNameType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NCNameType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "NCName"),
|
||||
TypeLibrary.NAME);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
try
|
||||
{
|
||||
int[] cp = UnicodeReader.toCodePointArray(value);
|
||||
if (cp.length == 0)
|
||||
throw new DatatypeException("invalid NCName value");
|
||||
// XXX XML 1.1 documents?
|
||||
if (cp[0] == ':' || !XMLParser.isNameStartCharacter(cp[0], false))
|
||||
throw new DatatypeException(0, "invalid NCName value");
|
||||
boolean seenColon = false;
|
||||
for (int i = 1; i < cp.length; i++)
|
||||
{
|
||||
if (cp[i] == ':')
|
||||
{
|
||||
if (seenColon || (i + 1 == cp.length))
|
||||
throw new DatatypeException(i, "invalid NCName value");
|
||||
seenColon = true;
|
||||
}
|
||||
else if (!XMLParser.isNameCharacter(cp[i], false))
|
||||
throw new DatatypeException(i, "invalid NCName value");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid NCName value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/* NMTokenType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
import gnu.xml.stream.UnicodeReader;
|
||||
import gnu.xml.stream.XMLParser;
|
||||
|
||||
/**
|
||||
* The XML Schema NMTOKEN type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NMTokenType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NMTokenType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "NMTOKEN"),
|
||||
TypeLibrary.TOKEN);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
try
|
||||
{
|
||||
int[] cp = UnicodeReader.toCodePointArray(value);
|
||||
if (cp.length == 0)
|
||||
throw new DatatypeException("invalid NMTOKEN value");
|
||||
for (int i = 0; i < cp.length; i++)
|
||||
{
|
||||
// XXX XML 1.1 documents?
|
||||
if (!XMLParser.isNameCharacter(cp[i], false))
|
||||
throw new DatatypeException(i, "invalid NMTOKEN value");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid NMTOKEN value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
/* NMTokensType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
import gnu.xml.stream.UnicodeReader;
|
||||
import gnu.xml.stream.XMLParser;
|
||||
|
||||
/**
|
||||
* The XML Schema NMTOKENS type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NMTokensType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NMTokensType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "NMTOKENS"),
|
||||
TypeLibrary.NMTOKEN);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
StringBuffer buf = new StringBuffer();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == ' ')
|
||||
{
|
||||
String token = buf.toString();
|
||||
if (token.length() > 0)
|
||||
checkNmtoken(token, i);
|
||||
buf.setLength(0);
|
||||
}
|
||||
else
|
||||
buf.append(c);
|
||||
}
|
||||
checkNmtoken(buf.toString(), len);
|
||||
}
|
||||
|
||||
private void checkNmtoken(String text, int i)
|
||||
throws DatatypeException
|
||||
{
|
||||
try
|
||||
{
|
||||
int[] cp = UnicodeReader.toCodePointArray(text);
|
||||
if (cp.length == 0)
|
||||
throw new DatatypeException("invalid NMTOKEN value");
|
||||
for (int j = 0; j < cp.length; j++)
|
||||
{
|
||||
// XXX XML 1.1 documents?
|
||||
if (!XMLParser.isNameCharacter(cp[j], false))
|
||||
throw new DatatypeException(i, "invalid NMTOKEN value");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid NMTOKEN value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
/* NameType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
import gnu.xml.stream.UnicodeReader;
|
||||
import gnu.xml.stream.XMLParser;
|
||||
|
||||
/**
|
||||
* The XML Schema Name type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NameType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NameType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "Name"),
|
||||
TypeLibrary.TOKEN);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
try
|
||||
{
|
||||
int[] cp = UnicodeReader.toCodePointArray(value);
|
||||
if (cp.length == 0)
|
||||
throw new DatatypeException("invalid Name value");
|
||||
// XXX XML 1.1 documents?
|
||||
if (!XMLParser.isNameStartCharacter(cp[0], false))
|
||||
throw new DatatypeException(0, "invalid Name value");
|
||||
for (int i = 1; i < cp.length; i++)
|
||||
{
|
||||
if (!XMLParser.isNameCharacter(cp[i], false))
|
||||
throw new DatatypeException(i, "invalid Name value");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
DatatypeException e2 = new DatatypeException("invalid Name value");
|
||||
e2.initCause(e);
|
||||
throw e2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/* NegativeIntegerType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema negativeInteger type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NegativeIntegerType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
NegativeIntegerType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "negativeInteger"),
|
||||
TypeLibrary.NON_POSITIVE_INTEGER);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValue(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid negative integer value");
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '-')
|
||||
{
|
||||
if (i == 0)
|
||||
continue;
|
||||
}
|
||||
else if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
throw new DatatypeException(i, "invalid negative integer value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigInteger(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/* NonNegativeIntegerType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema nonNegativeInteger type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NonNegativeIntegerType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
NonNegativeIntegerType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "nonNegativeInteger"),
|
||||
TypeLibrary.INTEGER);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid non-negative integer value");
|
||||
boolean negative = false;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == 0x30)
|
||||
continue;
|
||||
else if (c >= 0x31 && c <= 0x39)
|
||||
{
|
||||
if (negative)
|
||||
throw new DatatypeException(i,
|
||||
"invalid non-negative integer value");
|
||||
continue;
|
||||
}
|
||||
else if (c == '+' && i == 0)
|
||||
continue;
|
||||
else if (c == '-' && i == 0)
|
||||
{
|
||||
negative = true;
|
||||
continue;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid non-negative integer value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigInteger(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/* NonPositiveIntegerType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema nonPositiveInteger type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NonPositiveIntegerType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
NonPositiveIntegerType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "nonPositiveInteger"),
|
||||
TypeLibrary.INTEGER);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid non-positive integer value");
|
||||
boolean positive = true;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == 0x30)
|
||||
continue;
|
||||
else if (c >= 0x31 && c <= 0x39)
|
||||
{
|
||||
if (positive)
|
||||
throw new DatatypeException(i,
|
||||
"invalid non-positive integer value");
|
||||
continue;
|
||||
}
|
||||
else if (c == '+' && i == 0)
|
||||
continue;
|
||||
else if (c == '-' && i == 0)
|
||||
{
|
||||
positive = false;
|
||||
continue;
|
||||
}
|
||||
throw new DatatypeException(i, "invalid non-positive integer value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigInteger(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/* NormalizedStringType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema normalizedString type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NormalizedStringType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NormalizedStringType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "normalizedString"),
|
||||
TypeLibrary.STRING);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == 0x0a || c == 0x0d || c == 0x09)
|
||||
throw new DatatypeException(i, "invalid normalized-string value");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/* NotationType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema NOTATION type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class NotationType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.LENGTH,
|
||||
Facet.MIN_LENGTH,
|
||||
Facet.MAX_LENGTH,
|
||||
Facet.PATTERN,
|
||||
Facet.ENUMERATION,
|
||||
Facet.WHITESPACE
|
||||
};
|
||||
|
||||
NotationType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "NOTATION"),
|
||||
TypeLibrary.ANY_SIMPLE_TYPE);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
if (!context.isNotation(value))
|
||||
throw new DatatypeException("invalid NOTATION value");
|
||||
}
|
||||
|
||||
public boolean isContextDependent()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/* PatternFacet.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* The <code>pattern</code> facet.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
public final class PatternFacet
|
||||
extends Facet
|
||||
{
|
||||
|
||||
public final Pattern value;
|
||||
|
||||
public PatternFacet(Pattern value, Annotation annotation)
|
||||
{
|
||||
super(PATTERN, annotation);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
public boolean equals(Object other)
|
||||
{
|
||||
return (other instanceof PatternFacet &&
|
||||
((PatternFacet) other).value.equals(value));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/* PositiveIntegerType.java --
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.xml.validation.datatype;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.relaxng.datatype.DatatypeException;
|
||||
import org.relaxng.datatype.ValidationContext;
|
||||
|
||||
/**
|
||||
* The XML Schema positiveInteger type.
|
||||
*
|
||||
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
|
||||
*/
|
||||
final class PositiveIntegerType
|
||||
extends AtomicSimpleType
|
||||
{
|
||||
|
||||
static final int[] CONSTRAINING_FACETS = {
|
||||
Facet.TOTAL_DIGITS,
|
||||
Facet.FRACTION_DIGITS,
|
||||
Facet.PATTERN,
|
||||
Facet.WHITESPACE,
|
||||
Facet.ENUMERATION,
|
||||
Facet.MAX_INCLUSIVE,
|
||||
Facet.MAX_EXCLUSIVE,
|
||||
Facet.MIN_INCLUSIVE,
|
||||
Facet.MIN_EXCLUSIVE
|
||||
};
|
||||
|
||||
PositiveIntegerType()
|
||||
{
|
||||
super(new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "positiveInteger"),
|
||||
TypeLibrary.NON_NEGATIVE_INTEGER);
|
||||
}
|
||||
|
||||
public int[] getConstrainingFacets()
|
||||
{
|
||||
return CONSTRAINING_FACETS;
|
||||
}
|
||||
|
||||
public void checkValid(String value, ValidationContext context)
|
||||
throws DatatypeException
|
||||
{
|
||||
super.checkValid(value, context);
|
||||
int len = value.length();
|
||||
if (len == 0)
|
||||
throw new DatatypeException(0, "invalid positive integer value");
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
char c = value.charAt(i);
|
||||
if (c == '+')
|
||||
{
|
||||
if (i == 0)
|
||||
continue;
|
||||
}
|
||||
else if (c >= 0x30 && c <= 0x39)
|
||||
continue;
|
||||
throw new DatatypeException(i, "invalid positive integer value");
|
||||
}
|
||||
}
|
||||
|
||||
public Object createValue(String literal, ValidationContext context) {
|
||||
try
|
||||
{
|
||||
return new BigInteger(literal);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user