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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user