santiagopg 02/05/10 08:40:03
Modified: java/src/org/apache/xalan/xsltc/compiler ApplyTemplates.java
AttributeSet.java CallTemplate.java
DecimalFormatting.java EqualityExpr.java
FormatNumberCall.java Key.java KeyCall.java
Parser.java QName.java SymbolTable.java
Template.java UseAttributeSets.java
VariableBase.java xpath.cup
Log:
Fixed problem with default namespace in XPath expressions and XSLT's
named objects (e.g. templates, keys, variables, etc.).
Revision Changes Path
1.14 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ApplyTemplates.java
Index: ApplyTemplates.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ApplyTemplates.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- ApplyTemplates.java 24 Apr 2002 17:03:15 -0000 1.13
+++ ApplyTemplates.java 10 May 2002 15:40:02 -0000 1.14
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: ApplyTemplates.java,v 1.13 2002/04/24 17:03:15 santiagopg Exp $
+ * @(#)$Id: ApplyTemplates.java,v 1.14 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -106,7 +106,7 @@
}
if (mode.length() > 0) {
- _modeName = parser.getQName(mode);
+ _modeName = parser.getQNameIgnoreDefaultNs(mode);
}
// instantiate Mode if needed, cache (apply temp) function name
1.11 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/AttributeSet.java
Index: AttributeSet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/AttributeSet.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- AttributeSet.java 1 Feb 2002 20:07:08 -0000 1.10
+++ AttributeSet.java 10 May 2002 15:40:02 -0000 1.11
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: AttributeSet.java,v 1.10 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: AttributeSet.java,v 1.11 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -119,7 +119,7 @@
public void parseContents(Parser parser) {
// Get this attribute set's name
- _name = parser.getQName(getAttribute("name"));
+ _name = parser.getQNameIgnoreDefaultNs(getAttribute("name"));
if ((_name == null) || (_name.equals(EMPTYSTRING))) {
ErrorMsg msg = new ErrorMsg(ErrorMsg.UNNAMED_ATTRIBSET_ERR, this);
parser.reportError(Constants.ERROR, msg);
1.10 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CallTemplate.java
Index: CallTemplate.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CallTemplate.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- CallTemplate.java 1 Feb 2002 20:07:08 -0000 1.9
+++ CallTemplate.java 10 May 2002 15:40:02 -0000 1.10
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: CallTemplate.java,v 1.9 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: CallTemplate.java,v 1.10 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -87,7 +87,7 @@
}
public void parseContents(Parser parser) {
- _name = parser.getQName(getAttribute("name"));
+ _name = parser.getQNameIgnoreDefaultNs(getAttribute("name"));
parseChildren(parser);
}
1.9 +13 -7
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/DecimalFormatting.java
Index: DecimalFormatting.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/DecimalFormatting.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DecimalFormatting.java 1 Feb 2002 20:07:08 -0000 1.8
+++ DecimalFormatting.java 10 May 2002 15:40:02 -0000 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DecimalFormatting.java,v 1.8 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: DecimalFormatting.java,v 1.9 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -84,7 +84,7 @@
private static final String DFS_CLASS = "java.text.DecimalFormatSymbols";
private static final String DFS_SIG =
"Ljava/text/DecimalFormatSymbols;";
- private String _name = null;
+ private QName _name = null;
/**
* No type check needed for the <xsl:decimal-formatting/> element
@@ -98,14 +98,20 @@
*/
public void parseContents(Parser parser) {
// Get the name of these decimal formatting symbols
- if ((_name = getAttribute("name")) == null) _name = EMPTYSTRING;
+ _name = parser.getQNameIgnoreDefaultNs(getAttribute("name"));
+ if (_name == null) {
+ _name = parser.getQNameIgnoreDefaultNs(EMPTYSTRING);
+ }
// Check if a set of symbols has already been registered under this name
SymbolTable stable = parser.getSymbolTable();
- if (stable.getDecimalFormatting(_name) != null)
- reportWarning(this, parser,
ErrorMsg.SYMBOLS_REDEF_ERR,_name.toString());
- else
+ if (stable.getDecimalFormatting(_name) != null) {
+ reportWarning(this, parser, ErrorMsg.SYMBOLS_REDEF_ERR,
+ _name.toString());
+ }
+ else {
stable.addDecimalFormatting(_name, this);
+ }
}
/**
@@ -122,7 +128,7 @@
// Push the format name on the stack for call to addDecimalFormat()
il.append(classGen.loadTranslet());
- il.append(new PUSH(cpg, _name));
+ il.append(new PUSH(cpg, _name.toString()));
// Manufacture a DecimalFormatSymbols on the stack
// for call to addDecimalFormat()
1.9 +2 -5
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/EqualityExpr.java
Index: EqualityExpr.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/EqualityExpr.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- EqualityExpr.java 1 Feb 2002 20:07:08 -0000 1.8
+++ EqualityExpr.java 10 May 2002 15:40:02 -0000 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: EqualityExpr.java,v 1.8 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: EqualityExpr.java,v 1.9 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -101,10 +101,7 @@
}
public boolean getOp() {
- if (_op == Operators.NE)
- return false;
- else
- return true;
+ return (_op != Operators.NE);
}
/**
1.8 +14 -5
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FormatNumberCall.java
Index: FormatNumberCall.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FormatNumberCall.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FormatNumberCall.java 24 Apr 2002 17:03:15 -0000 1.7
+++ FormatNumberCall.java 10 May 2002 15:40:02 -0000 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FormatNumberCall.java,v 1.7 2002/04/24 17:03:15 santiagopg Exp $
+ * @(#)$Id: FormatNumberCall.java,v 1.8 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -74,6 +74,7 @@
private Expression _value;
private Expression _format;
private Expression _name;
+ private QName _resolvedQName = null;
public FormatNumberCall(QName fname, Vector arguments) {
super(fname, arguments);
@@ -83,9 +84,8 @@
}
public Type typeCheck(SymbolTable stable) throws TypeCheckError {
- // The stylesheet element only adds code to instanciate the
- // default DecimalFormat object if at least one format-number()
- // call exists in the stylesheet. We must signal this call...
+
+ // Inform stylesheet to instantiate a DecimalFormat object
getStylesheet().numberFormattingUsed();
final Type tvalue = _value.typeCheck(stable);
@@ -98,7 +98,13 @@
}
if (argumentCount() == 3) {
final Type tname = _name.typeCheck(stable);
- if (tname instanceof StringType == false) {
+
+ if (_name instanceof LiteralExpr) {
+ final LiteralExpr literal = (LiteralExpr) _name;
+ _resolvedQName =
+ getParser().getQNameIgnoreDefaultNs(literal.getValue());
+ }
+ else if (tname instanceof StringType == false) {
_name = new CastExpr(_name, Type.String);
}
}
@@ -125,6 +131,9 @@
il.append(classGen.loadTranslet());
if (_name == null) {
il.append(new PUSH(cpg, EMPTYSTRING));
+ }
+ else if (_resolvedQName != null) {
+ il.append(new PUSH(cpg, _resolvedQName.toString()));
}
else {
_name.translate(classGen, methodGen);
1.11 +5 -9
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Key.java
Index: Key.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Key.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Key.java 1 Feb 2002 20:07:08 -0000 1.10
+++ Key.java 10 May 2002 15:40:02 -0000 1.11
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Key.java,v 1.10 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: Key.java,v 1.11 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -87,7 +87,7 @@
public void parseContents(Parser parser) {
// Get the required attributes and parser XPath expressions
- _name = parser.getQName(getAttribute("name"));
+ _name = parser.getQNameIgnoreDefaultNs(getAttribute("name"));
_match = parser.parsePattern(this, "match", null);
_use = parser.parseExpression(this, "use", null);
@@ -111,12 +111,7 @@
* @return The key's name (from the <xsl:key> elements 'name' attribute).
*/
public String getName() {
- String name;
- if (_name.getPrefix() == null)
- name = _name.getLocalPart();
- else
- name = _name.getPrefix()+":"+_name.getLocalPart();
- return(name);
+ return _name.toString();
}
/**
@@ -191,7 +186,8 @@
// Prepare to call buildKeyIndex(String name, int node, String value);
il.append(classGen.loadTranslet());
- il.append(new PUSH(cpg, getName()));
+ // il.append(new PUSH(cpg, getName()));
+ il.append(new PUSH(cpg, _name.toString()));
il.append(new ILOAD(parentNode.getIndex()));
// Now get the node value and feck it on the parameter stack
1.8 +31 -10
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/KeyCall.java
Index: KeyCall.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/KeyCall.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- KeyCall.java 1 Feb 2002 20:07:08 -0000 1.7
+++ KeyCall.java 10 May 2002 15:40:02 -0000 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: KeyCall.java,v 1.7 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: KeyCall.java,v 1.8 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -73,6 +73,7 @@
private Expression _name; // The name of this key
private Expression _value; // The value to look up in the key/index
private Type _valueType; // The value's data type
+ private QName _resolvedQName = null;
/**
* Get the parameters passed to function:
@@ -117,7 +118,13 @@
// and if it is not it must be converted to one using string() rules.
if (_name != null) {
final Type nameType = _name.typeCheck(stable);
- if (!(nameType instanceof StringType)) {
+
+ if (_name instanceof LiteralExpr) {
+ final LiteralExpr literal = (LiteralExpr) _name;
+ _resolvedQName =
+ getParser().getQNameIgnoreDefaultNs(literal.getValue());
+ }
+ else if (nameType instanceof StringType == false) {
_name = new CastExpr(_name, Type.String);
}
}
@@ -241,10 +248,15 @@
// Initialise the index specified in the first parameter of key()
il.append(classGen.loadTranslet());
- if (_name == null)
+ if (_name == null) {
il.append(new PUSH(cpg,"##id"));
- else
+ }
+ else if (_resolvedQName != null) {
+ il.append(new PUSH(cpg, _resolvedQName.toString()));
+ }
+ else {
_name.translate(classGen, methodGen);
+ }
il.append(new INVOKEVIRTUAL(getKeyIndex));
il.append(new ASTORE(searchIndex.getIndex()));
@@ -265,10 +277,12 @@
il.append(methodGen.loadDOM());
il.append(methodGen.loadCurrentNode());
il.append(new INVOKEINTERFACE(getNodeValue, 2));
- if (_name == null)
+ if (_name == null) {
il.append(new INVOKEVIRTUAL(lookupId));
- else
+ }
+ else {
il.append(new INVOKEVIRTUAL(lookupKey));
+ }
// Call to returnIndex.merge(searchIndex);
il.append(new INVOKEVIRTUAL(merge));
@@ -295,10 +309,15 @@
// Call getKeyIndex in AbstractTranslet with the name of the key
// to get the index for this key (which is also a node iterator).
il.append(classGen.loadTranslet());
- if (_name == null)
+ if (_name == null) {
il.append(new PUSH(cpg,"##id"));
- else
+ }
+ else if (_resolvedQName != null) {
+ il.append(new PUSH(cpg, _resolvedQName.toString()));
+ }
+ else {
_name.translate(classGen, methodGen);
+ }
il.append(new INVOKEVIRTUAL(getKeyIndex));
// Now use the value in the second argument to determine what nodes
@@ -318,10 +337,12 @@
_value.translate(classGen, methodGen);
}
- if (_name == null)
+ if (_name == null) {
il.append(new INVOKEVIRTUAL(lookupId));
- else
+ }
+ else {
il.append(new INVOKEVIRTUAL(lookupKey));
+ }
}
}
}
1.43 +15 -4
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java
Index: Parser.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- Parser.java 6 May 2002 17:52:29 -0000 1.42
+++ Parser.java 10 May 2002 15:40:02 -0000 1.43
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Parser.java,v 1.42 2002/05/06 17:52:29 santiagopg Exp $
+ * @(#)$Id: Parser.java,v 1.43 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -265,10 +265,20 @@
}
public QName getQName(final String stringRep) {
- return getQName(stringRep, true);
+ return getQName(stringRep, true, false);
+ }
+
+ public QName getQNameIgnoreDefaultNs(final String stringRep) {
+ return getQName(stringRep, true, true);
}
public QName getQName(final String stringRep, boolean reportError) {
+ return getQName(stringRep, reportError, false);
+ }
+
+ private QName getQName(final String stringRep, boolean reportError,
+ boolean ignoreDefaultNs)
+ {
// parse and retrieve namespace
final int colon = stringRep.lastIndexOf(':');
if (colon != -1) {
@@ -289,13 +299,14 @@
return getQName(namespace, prefix, localname);
}
else {
- final String defURI = _symbolTable.lookupNamespace(EMPTYSTRING);
+ final String defURI = ignoreDefaultNs ? null
+ : _symbolTable.lookupNamespace(EMPTYSTRING);
return getQName(defURI, null, stringRep);
}
}
public QName getQName(String namespace, String prefix, String localname)
{
- if (namespace == null) {
+ if (namespace == null || namespace.equals(EMPTYSTRING)) {
QName name = (QName)_qNames.get(localname);
if (name == null) {
name = new QName(null, prefix, localname);
1.4 +8 -17
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/QName.java
Index: QName.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/QName.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- QName.java 19 Jun 2001 10:44:11 -0000 1.3
+++ QName.java 10 May 2002 15:40:02 -0000 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: QName.java,v 1.3 2001/06/19 10:44:11 morten Exp $
+ * @(#)$Id: QName.java,v 1.4 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -75,22 +75,12 @@
_namespace = namespace;
_prefix = prefix;
_localname = localname;
- if ((namespace != null) && (!namespace.equals(Constants.EMPTYSTRING))) {
- _stringRep = namespace+':'+localname;
- }
- else {
- _stringRep = localname;
- }
- _hashCode = _stringRep.hashCode() + 19; // cached for speed
- }
+ _stringRep =
+ (namespace != null && !namespace.equals(Constants.EMPTYSTRING)) ?
+ (namespace + ':' + localname) : localname;
- public void clearDefaultNamespace() {
- if ((_prefix == null) || (_prefix.equals(Constants.EMPTYSTRING))) {
- _namespace = null;
- _stringRep = _localname;
- _hashCode = _stringRep.hashCode() + 19; // cached for speed
- }
+ _hashCode = _stringRep.hashCode() + 19; // cached for speed
}
public void clearNamespace() {
@@ -106,7 +96,7 @@
}
public boolean equals(Object other) {
- return this == other;
+ return (this == other);
}
public String getLocalPart() {
@@ -126,6 +116,7 @@
}
public String dump() {
- return(new String("QName: "+_namespace+"("+_prefix+"):"+_localname));
+ return new String("QName: " + _namespace + "(" + _prefix + "):"
+ + _localname);
}
}
1.8 +3 -5
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SymbolTable.java
Index: SymbolTable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SymbolTable.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SymbolTable.java 24 Apr 2002 17:03:15 -0000 1.7
+++ SymbolTable.java 10 May 2002 15:40:02 -0000 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: SymbolTable.java,v 1.7 2002/04/24 17:03:15 santiagopg Exp $
+ * @(#)$Id: SymbolTable.java,v 1.8 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -85,12 +85,12 @@
private Hashtable _excludedURI = null;
private Hashtable _decimalFormats = null;
- public DecimalFormatting getDecimalFormatting(String name) {
+ public DecimalFormatting getDecimalFormatting(QName name) {
if (_decimalFormats == null) return null;
return((DecimalFormatting)_decimalFormats.get(name));
}
- public void addDecimalFormatting(String name, DecimalFormatting symbols)
{
+ public void addDecimalFormatting(QName name, DecimalFormatting symbols) {
if (_decimalFormats == null) _decimalFormats = new Hashtable();
_decimalFormats.put(name, symbols);
}
@@ -105,14 +105,12 @@
public Template addTemplate(Template template) {
final QName name = template.getName();
- name.clearDefaultNamespace();
if (_templates == null) _templates = new Hashtable();
return (Template)_templates.put(name, template);
}
public Template lookupTemplate(QName name) {
if (_templates == null) return null;
- name.clearDefaultNamespace();
return (Template)_templates.get(name);
}
1.17 +3 -3
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java
Index: Template.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- Template.java 1 Feb 2002 20:07:08 -0000 1.16
+++ Template.java 10 May 2002 15:40:02 -0000 1.17
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Template.java,v 1.16 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: Template.java,v 1.17 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -245,11 +245,11 @@
_stylesheet = super.getStylesheet();
if (name.length() > 0) {
- _name = parser.getQName(name);
+ _name = parser.getQNameIgnoreDefaultNs(name);
}
if (mode.length() > 0) {
- _mode = parser.getQName(mode);
+ _mode = parser.getQNameIgnoreDefaultNs(mode);
}
if (match.length() > 0) {
1.8 +3 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java
Index: UseAttributeSets.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- UseAttributeSets.java 1 Feb 2002 20:07:09 -0000 1.7
+++ UseAttributeSets.java 10 May 2002 15:40:02 -0000 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: UseAttributeSets.java,v 1.7 2002/02/01 20:07:09 tmiller Exp $
+ * @(#)$Id: UseAttributeSets.java,v 1.8 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -99,7 +99,8 @@
if ((setNames != null) && (!setNames.equals(Constants.EMPTYSTRING))) {
final StringTokenizer tokens = new StringTokenizer(setNames);
while (tokens.hasMoreTokens()) {
- final QName qname = getParser().getQName(tokens.nextToken());
+ final QName qname =
+ getParser().getQNameIgnoreDefaultNs(tokens.nextToken());
_sets.add(qname);
}
}
1.16 +2 -3
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableBase.java
Index: VariableBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableBase.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- VariableBase.java 6 May 2002 16:21:22 -0000 1.15
+++ VariableBase.java 10 May 2002 15:40:02 -0000 1.16
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: VariableBase.java,v 1.15 2002/05/06 16:21:22 santiagopg Exp $
+ * @(#)$Id: VariableBase.java,v 1.16 2002/05/10 15:40:02 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -231,7 +231,6 @@
*/
public void setName(QName name) {
_name = name;
- _name.clearDefaultNamespace();
_variable = Util.escape(name.getLocalPart());
}
@@ -251,7 +250,7 @@
if (name == null) name = EMPTYSTRING;
if (name.length() > 0)
- setName(parser.getQName(name));
+ setName(parser.getQNameIgnoreDefaultNs(name));
else
reportError(this, parser, ErrorMsg.REQUIRED_ATTR_ERR, "name");
1.36 +85 -75
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup
Index: xpath.cup
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- xpath.cup 6 May 2002 17:52:29 -0000 1.35
+++ xpath.cup 10 May 2002 15:40:03 -0000 1.36
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: xpath.cup,v 1.35 2002/05/06 17:52:29 santiagopg Exp $
+ * @(#)$Id: xpath.cup,v 1.36 2002/05/10 15:40:03 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -120,6 +120,10 @@
return _parser.getQName(name);
}
+ public QName getQNameIgnoreDefaultNs(String name) {
+ return _parser.getQNameIgnoreDefaultNs(name);
+ }
+
public void setMultiDocument(boolean flag) {
_xsltc.setMultiDocument(flag);
}
@@ -726,16 +730,18 @@
/*
* If the string appears to have the syntax of a QName, store
* namespace info in the literal expression. This is used for
- * element-available and function-available functions.
+ * element-available and function-available functions, among
+ * others. Also, the default namespace must be ignored.
*/
+ String namespace = null;
final int index = string.lastIndexOf(':');
- final String prefix = index >= 0
- ? string.substring(0, index)
- : Constants.EMPTYSTRING;
- String namespace = parser._symbolTable.lookupNamespace(prefix);
- RESULT = namespace == null
- ? new LiteralExpr(string)
- : new LiteralExpr(string, namespace);
+
+ if (index > 0) {
+ final String prefix = string.substring(0, index);
+ namespace = parser._symbolTable.lookupNamespace(prefix);
+ }
+ RESULT = (namespace == null) ? new LiteralExpr(string)
+ : new LiteralExpr(string, namespace);
:}
| INT:num
@@ -785,49 +791,48 @@
if (node == null) {
RESULT = new UnresolvedRef(varName);
}
-
:};
FunctionCall ::= FunctionName:fname LPAREN RPAREN
{:
- if (fname == parser.getQName("current")) {
+ if (fname == parser.getQNameIgnoreDefaultNs("current")) {
RESULT = new CurrentCall(fname);
}
- else if (fname == parser.getQName("number")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
RESULT = new NumberCall(fname, parser.EmptyArgs);
}
- else if (fname == parser.getQName("string")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
RESULT = new StringCall(fname, parser.EmptyArgs);
}
- else if (fname == parser.getQName("concat")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
RESULT = new ConcatCall(fname, parser.EmptyArgs);
}
- else if (fname == parser.getQName("true")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
RESULT = new BooleanExpr(true);
}
- else if (fname == parser.getQName("false")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
RESULT = new BooleanExpr(false);
}
- else if (fname == parser.getQName("name")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
RESULT = new NameCall(fname);
}
- else if (fname == parser.getQName("generate-id")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
RESULT = new GenerateIdCall(fname, parser.EmptyArgs);
}
- else if (fname == parser.getQName("string-length")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("string-length"))
{
RESULT = new StringLengthCall(fname, parser.EmptyArgs);
}
- else if (fname == parser.getQName("position")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("position")) {
RESULT = new PositionCall(fname);
}
- else if (fname == parser.getQName("last")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("last")) {
RESULT = new LastCall(fname);
}
- else if (fname == parser.getQName("local-name")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
RESULT = new LocalNameCall(fname);
}
- else if (fname == parser.getQName("namespace-uri")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri"))
{
RESULT = new NamespaceUriCall(fname);
}
else {
@@ -837,74 +842,74 @@
| FunctionName:fname LPAREN NonemptyArgumentList:argl RPAREN
{:
- if (fname == parser.getQName("concat")) {
+ if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
RESULT = new ConcatCall(fname, argl);
}
- else if (fname == parser.getQName("number")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
RESULT = new NumberCall(fname, argl);
}
- else if (fname == parser.getQName("document")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
parser.setMultiDocument(true);
RESULT = new DocumentCall(fname, argl);
}
- else if (fname == parser.getQName("string")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
RESULT = new StringCall(fname, argl);
}
- else if (fname == parser.getQName("boolean")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
RESULT = new BooleanCall(fname, argl);
}
- else if (fname == parser.getQName("name")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
RESULT = new NameCall(fname, argl);
}
- else if (fname == parser.getQName("generate-id")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
RESULT = new GenerateIdCall(fname, argl);
}
- else if (fname == parser.getQName("not")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("not")) {
RESULT = new NotCall(fname, argl);
}
- else if (fname == parser.getQName("format-number")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("format-number"))
{
RESULT = new FormatNumberCall(fname, argl);
}
- else if (fname == parser.getQName("unparsed-entity-uri")) {
+ else if (fname ==
parser.getQNameIgnoreDefaultNs("unparsed-entity-uri")) {
RESULT = new UnparsedEntityUriCall(fname, argl);
}
- else if (fname == parser.getQName("key")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("key")) {
RESULT = new KeyCall(fname, argl);
}
- else if (fname == parser.getQName("id")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("id")) {
RESULT = new KeyCall(fname, argl);
}
- else if (fname == parser.getQName("ceiling")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("ceiling")) {
RESULT = new CeilingCall(fname, argl);
}
- else if (fname == parser.getQName("round")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("round")) {
RESULT = new RoundCall(fname, argl);
}
- else if (fname == parser.getQName("floor")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("floor")) {
RESULT = new FloorCall(fname, argl);
}
- else if (fname == parser.getQName("contains")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("contains")) {
RESULT = new ContainsCall(fname, argl);
}
- else if (fname == parser.getQName("string-length")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("string-length"))
{
RESULT = new StringLengthCall(fname, argl);
}
- else if (fname == parser.getQName("starts-with")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("starts-with")) {
RESULT = new StartsWithCall(fname, argl);
}
- else if (fname == parser.getQName("function-available")) {
+ else if (fname ==
parser.getQNameIgnoreDefaultNs("function-available")) {
RESULT = new FunctionAvailableCall(fname, argl);
}
- else if (fname == parser.getQName("element-available")) {
+ else if (fname ==
parser.getQNameIgnoreDefaultNs("element-available")) {
RESULT = new ElementAvailableCall(fname, argl);
}
- else if (fname == parser.getQName("local-name")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
RESULT = new LocalNameCall(fname, argl);
}
- else if (fname == parser.getQName("lang")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("lang")) {
RESULT = new LangCall(fname, argl);
}
- else if (fname == parser.getQName("namespace-uri")) {
+ else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri"))
{
RESULT = new NamespaceUriCall(fname, argl);
}
// Special case for extension function nodeset()
@@ -928,18 +933,24 @@
{: argl.insertElementAt(arg, 0); RESULT = argl; :};
FunctionName ::= QName:fname
- {:
- fname.clearDefaultNamespace();
- RESULT = fname;
- :};
+ {:
+ final String prefix = fname.getPrefix();
+ if (prefix == null || prefix.equals(Constants.EMPTYSTRING)) {
+ fname = parser.getQNameIgnoreDefaultNs(fname.getLocalPart());
+ }
+ RESULT = fname;
+ :};
VariableName ::= QName:vname
- {:
- vname.clearDefaultNamespace();
- RESULT = vname;
- :};
+ {:
+ final String prefix = vname.getPrefix();
+ if (prefix == null || prefix.equals(Constants.EMPTYSTRING)) {
+ vname = parser.getQNameIgnoreDefaultNs(vname.getLocalPart());
+ }
+ RESULT = vname;
+ :};
-Argument ::= Expr:ex
+Argument ::= Expr:ex
{: RESULT = ex; :};
NodeTest ::= NameTest:nt
@@ -956,14 +967,13 @@
| PIPARAM LPAREN Literal:l RPAREN
{:
- QName name = parser.getQName("name");
+ QName name = parser.getQNameIgnoreDefaultNs("name");
Expression exp = new EqualityExpr(Operators.EQ,
new NameCall(name),
new LiteralExpr(l));
Vector predicates = new Vector();
predicates.addElement(new Predicate(exp));
RESULT = new Step(Axis.CHILD, NodeTest.PI, predicates);
- //RESULT = new Integer(NodeTest.PI);
:}
| PI
@@ -978,54 +988,54 @@
QName ::= QNAME:qname
{: RESULT = parser.getQName(qname); :}
- | DIV
- {: RESULT = parser.getQName("div"); :}
+ | DIV
+ {: RESULT = parser.getQNameIgnoreDefaultNs("div"); :}
| MOD
- {: RESULT = parser.getQName("mod"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("mod"); :}
| KEY
- {: RESULT = parser.getQName("key"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("key"); :}
| ANCESTOR
- {: RESULT = parser.getQName("child"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("child"); :}
| ANCESTORORSELF
- {: RESULT = parser.getQName("ancestor-or-self"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("ancestor-or-self"); :}
| ATTRIBUTE
- {: RESULT = parser.getQName("attribute"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("attribute"); :}
| CHILD
- {: RESULT = parser.getQName("child"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("child"); :}
| DESCENDANT
- {: RESULT = parser.getQName("decendant"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("decendant"); :}
| DESCENDANTORSELF
- {: RESULT = parser.getQName("decendant-or-self"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("decendant-or-self"); :}
| FOLLOWING
- {: RESULT = parser.getQName("following"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("following"); :}
| FOLLOWINGSIBLING
- {: RESULT = parser.getQName("following-sibling"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("following-sibling"); :}
| NAMESPACE
- {: RESULT = parser.getQName("namespace"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("namespace"); :}
| PARENT
- {: RESULT = parser.getQName("parent"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("parent"); :}
| PRECEDING
- {: RESULT = parser.getQName("preceding"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("preceding"); :}
| PRECEDINGSIBLING
- {: RESULT = parser.getQName("preceding-sibling"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("preceding-sibling"); :}
| SELF
- {: RESULT = parser.getQName("self"); :}
+ {: RESULT = parser.getQNameIgnoreDefaultNs("self"); :}
| ID
- {: RESULT = parser.getQName("id"); :};
+ {: RESULT = parser.getQNameIgnoreDefaultNs("id"); :};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]