mmidy 2002/11/14 14:43:00 Modified: java/src/org/apache/xalan/templates Tag: xslt20 ElemNumber.java java/src/org/apache/xml/utils Tag: xslt20 Duration.java java/src/org/apache/xpath/functions Tag: xslt20 FuncDeepEqual.java FuncSequenceDeepEqual.java FuncSequenceNodeEqual.java java/src/org/apache/xpath/operations Tag: xslt20 Is.java IsNot.java Log: Fix some problems with deep-equal, sequence-deep-equal, is, isnot, etc... Revision Changes Path No revision No revision 1.28.2.1.2.1 +21 -3 xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java Index: ElemNumber.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java,v retrieving revision 1.28.2.1 retrieving revision 1.28.2.1.2.1 diff -u -r1.28.2.1 -r1.28.2.1.2.1 --- ElemNumber.java 14 Aug 2002 19:21:28 -0000 1.28.2.1 +++ ElemNumber.java 14 Nov 2002 22:42:53 -0000 1.28.2.1.2.1 @@ -75,6 +75,7 @@ import org.apache.xpath.*; import org.apache.xpath.objects.XObject; +import org.apache.xpath.objects.XSequenceImpl; import org.apache.xml.utils.PrefixResolver; import org.apache.xml.utils.PrefixResolverDefault; import org.apache.xml.utils.QName; @@ -893,10 +894,25 @@ if (null != m_valueExpr) { XObject countObj = m_valueExpr.execute(xctxt, sourceNode, this); - long count = (long)java.lang.Math.floor(countObj.num()+ 0.5); + if (countObj instanceof XSequenceImpl) + { + XSequenceImpl seq = (XSequenceImpl)countObj; + list = new long[seq.getLength()]; + XObject item; + int i = 0; + while ((item = seq.next()) != null) + { + long count = (long)java.lang.Math.floor(item.num()+ 0.5); + list [i++] = count; + } + } + else + { + long count = (long)java.lang.Math.floor(countObj.num()+ 0.5); - list = new long[1]; - list[0] = count; + list = new long[1]; + list[0] = count; + } } else { @@ -1212,6 +1228,8 @@ formatter.setGroupingUsed(false); } } + else + formatter.setGroupingUsed(false); return formatter; } No revision No revision 1.1.2.1.2.1 +2 -2 xml-xalan/java/src/org/apache/xml/utils/Attic/Duration.java Index: Duration.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/utils/Attic/Duration.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.1.2.1 diff -u -r1.1.2.1 -r1.1.2.1.2.1 --- Duration.java 14 Aug 2002 19:45:36 -0000 1.1.2.1 +++ Duration.java 14 Nov 2002 22:42:54 -0000 1.1.2.1.2.1 @@ -155,7 +155,7 @@ public Duration(int[] xercesduration) { // I'm not sure how they're representing negative durations!? - m_year = xercesduration[0]; + m_year = Math.abs(xercesduration[0]); m_month = xercesduration[1]; m_day = xercesduration[2]; m_hour = xercesduration[3]; @@ -167,7 +167,7 @@ public Duration(int year, int month, int day, int hour, int minute, double second) { // I'm not sure how they're representing negative durations!? - m_year = year; + m_year = Math.abs(year); m_month = month; m_day = day; m_hour = hour; No revision No revision 1.1.2.4 +12 -4 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncDeepEqual.java Index: FuncDeepEqual.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncDeepEqual.java,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -r1.1.2.3 -r1.1.2.4 --- FuncDeepEqual.java 12 Nov 2002 19:03:51 -0000 1.1.2.3 +++ FuncDeepEqual.java 14 Nov 2002 22:42:57 -0000 1.1.2.4 @@ -160,11 +160,16 @@ } - private boolean deepEqual(int node1, int node2, DTM dtm1, DTM dtm2, java.text.Collator collator) + static boolean deepEqual(int node1, int node2, DTM dtm1, DTM dtm2, java.text.Collator collator) { int type = dtm1.getNodeType(node1); + String uri1 = null; if (type == dtm2.getNodeType(node2) - && dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2))) + && dtm1.getLocalName(node1).equals(dtm2.getLocalName(node2)) + && ((uri1 = dtm1.getNamespaceURI(node1)) == null ? + dtm2.getNamespaceURI(node2) == null : + uri1.equals(dtm2.getNamespaceURI(node2)))) + //dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2))) { switch (type) { @@ -259,13 +264,16 @@ return false; } } - return true; + else if (!dtm1.hasChildNodes(node1) && !dtm2.hasChildNodes(node2)) + return true; + else + return false; } else return false; } - private int getNonCommentOrPI(DTM dtm, int child) + static private int getNonCommentOrPI(DTM dtm, int child) { if (DTM.NULL == child) return child; 1.1.2.2 +13 -5 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceDeepEqual.java Index: FuncSequenceDeepEqual.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceDeepEqual.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- FuncSequenceDeepEqual.java 10 Oct 2002 14:58:35 -0000 1.1.2.1 +++ FuncSequenceDeepEqual.java 14 Nov 2002 22:42:59 -0000 1.1.2.2 @@ -68,6 +68,7 @@ import org.apache.xpath.objects.XBoolean; import java.util.Comparator; import org.apache.xml.dtm.XType; +import org.apache.xml.dtm.DTM; import org.apache.xpath.parser.regexp.*; import org.apache.xalan.res.XSLMessages; import org.apache.xpath.res.XPATHErrorResources; @@ -135,12 +136,19 @@ { if(item1 instanceof XNodeSequenceSingleton) { - XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item1; + XNodeSequenceSingleton xnss1 = (XNodeSequenceSingleton)item1; if (type == item2.getType()) { - if (!xnss.deepEquals((XNodeSequenceSingleton)item2)) - return new XBoolean(false); + XNodeSequenceSingleton xnss2 = (XNodeSequenceSingleton)item2; + if (!xnss1.deepEquals(xnss2)) + { + DTM dtm1 = xnss1.getDTM(); + DTM dtm2 = xnss2.getDTM(); + int node1 = xnss1.getNodeHandle(); + int node2 = xnss2.getNodeHandle(); + return new XBoolean(FuncDeepEqual.deepEqual(node1, node2, dtm1, dtm2, collator)); + } } } } @@ -148,12 +156,12 @@ { if (collator == null) { - if (!item1.equals(item2)) + if (type != item2.getType() || !item1.equals(item2)) return new XBoolean(false); } else { - if (collator.equals(item1.str(), item2.str())) + if (type != item2.getType() || !collator.equals(item1.str(), item2.str())) return new XBoolean(false); } } 1.1.2.2 +18 -2 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceNodeEqual.java Index: FuncSequenceNodeEqual.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceNodeEqual.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- FuncSequenceNodeEqual.java 10 Oct 2002 14:58:35 -0000 1.1.2.1 +++ FuncSequenceNodeEqual.java 14 Nov 2002 22:43:00 -0000 1.1.2.2 @@ -68,6 +68,7 @@ import org.apache.xpath.objects.XBoolean; import java.util.Comparator; import org.apache.xml.dtm.XType; +import org.apache.xml.dtm.DTM; import org.apache.xpath.parser.regexp.*; import org.apache.xalan.res.XSLMessages; import org.apache.xpath.res.XPATHErrorResources; @@ -96,6 +97,9 @@ XSequence seq1 = m_arg0.execute(xctxt).xseq(); XSequence seq2 = m_arg1.execute(xctxt).xseq(); + if (seq1.getLength() == 0 || seq2.getLength() == 0) + return XSequence.EMPTY; + if (seq1.getLength() != seq2.getLength()) return new XBoolean(false); @@ -112,11 +116,23 @@ { if(item1 instanceof XNodeSequenceSingleton) { - XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item1; + XNodeSequenceSingleton xnss1 = (XNodeSequenceSingleton)item1; + XNodeSequenceSingleton xnss2 = (XNodeSequenceSingleton)item2; if (type == item2.getType()) { - if (!xnss.deepEquals((XNodeSequenceSingleton)item2)) + DTM dtm1 = xnss1.getDTM(); + DTM dtm2 = xnss2.getDTM(); + int node1 = xnss1.getNodeHandle(); + int node2 = xnss2.getNodeHandle(); + + String uri1 = null; + if(!dtm1.getLocalName(node1).equals(dtm2.getLocalName(node2)) + || !((uri1 = dtm1.getNamespaceURI(node1)) == null ? + dtm2.getNamespaceURI(node2) == null : + uri1.equals(dtm2.getNamespaceURI(node2))) + //(!dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2)) + || (!xnss1.deepEquals(xnss2))) return new XBoolean(false); } } No revision No revision 1.1.2.1.2.1 +17 -4 xml-xalan/java/src/org/apache/xpath/operations/Attic/Is.java Index: Is.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Attic/Is.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.1.2.1 diff -u -r1.1.2.1 -r1.1.2.1.2.1 --- Is.java 14 Aug 2002 20:07:05 -0000 1.1.2.1 +++ Is.java 14 Nov 2002 22:43:00 -0000 1.1.2.1.2.1 @@ -60,6 +60,8 @@ import org.apache.xpath.XPathContext; import org.apache.xpath.objects.XBoolean; import org.apache.xpath.objects.XObject; +import org.apache.xpath.objects.XSequence; +import org.apache.xml.dtm.XType; /** * The '=' operation expression executer. @@ -81,7 +83,14 @@ throws javax.xml.transform.TransformerException { // Might need to be more sophisticated! - return (left == right) ? XBoolean.S_TRUE : XBoolean.S_FALSE; + if (left.xseq().getLength() == 0 || right.xseq().getLength() == 0) + return XSequence.EMPTY; + + if (left.getType() == XType.NODE && right.getType() == XType.NODE) + return (left.iter().nextNode() == right.iter().nextNode())? XBoolean.S_TRUE : XBoolean.S_FALSE; + //return (left.notEquals(right)) ? XBoolean.S_FALSE : XBoolean.S_TRUE; + else + return XBoolean.S_FALSE; } /** @@ -100,9 +109,13 @@ { XObject left = m_left.execute(xctxt, true); XObject right = m_right.execute(xctxt, true); - - // Might need to be more sophisticated! - boolean result = (left == right) ? true : false; + + // Might need to be more sophisticated! + boolean result; + if (left.getType() == XType.NODE && right.getType() == XType.NODE) + result = (left.iter().nextNode() == right.iter().nextNode())? true : false; + else + result = false; left.detach(); right.detach(); return result; 1.1.2.1.2.1 +10 -1 xml-xalan/java/src/org/apache/xpath/operations/Attic/IsNot.java Index: IsNot.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Attic/IsNot.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.1.2.1 diff -u -r1.1.2.1 -r1.1.2.1.2.1 --- IsNot.java 14 Aug 2002 20:07:05 -0000 1.1.2.1 +++ IsNot.java 14 Nov 2002 22:43:00 -0000 1.1.2.1.2.1 @@ -58,6 +58,8 @@ import org.apache.xpath.objects.XObject; import org.apache.xpath.objects.XBoolean; +import org.apache.xpath.objects.XSequence; +import org.apache.xml.dtm.XType; /** * The '!=' operation expression executer. @@ -79,6 +81,13 @@ throws javax.xml.transform.TransformerException { // Might have to be more sophisticated! - return (left != right) ? XBoolean.S_TRUE : XBoolean.S_FALSE; + if (left.xseq().getLength() == 0 || right.xseq().getLength() == 0) + return XSequence.EMPTY; + + if (left.getType() == XType.NODE && right.getType() == XType.NODE) + return (left.iter().nextNode() == right.iter().nextNode())? XBoolean.S_FALSE : XBoolean.S_TRUE; + //return (left.notEquals(right)) ? XBoolean.S_FALSE : XBoolean.S_TRUE; + else + return XBoolean.S_FALSE; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]