mmidy 2002/10/10 07:58:37 Modified: java/src/org/apache/xalan/templates Tag: xslt20 FuncDocument.java java/src/org/apache/xml/dtm Tag: xslt20 DTM.java java/src/org/apache/xml/dtm/ref Tag: xslt20 DTMDocumentImpl.java java/src/org/apache/xml/dtm/ref/dom2dtm Tag: xslt20 DOM2DTM.java java/src/org/apache/xml/dtm/ref/sax2dtm Tag: xslt20 SAX2DTM.java java/src/org/apache/xml/dtm/ref/xni2dtm Tag: xslt20 XNI2DTM.java java/src/org/apache/xpath/functions Tag: xslt20 FuncCompare.java FuncId.java FuncItemAt.java FuncSubsequence.java FuncSum.java java/src/org/apache/xpath/parser Tag: xslt20 SimpleNode.java java/src/org/apache/xpath/res Tag: xslt20 XPATHErrorResources.java XPATHErrorResources.properties Added: java/src/org/apache/xpath/functions Tag: xslt20 FuncIdref.java FuncMax.java FuncMin.java FuncSequenceDeepEqual.java FuncSequenceNodeEqual.java Log: New or updated functions: sum, sequence-deep-equal, sequence-node-equal, max, min, id, idref, document. Miscellaneous bug fixes... Revision Changes Path No revision No revision 1.27.2.1.2.1 +55 -9 xml-xalan/java/src/org/apache/xalan/templates/FuncDocument.java Index: FuncDocument.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/FuncDocument.java,v retrieving revision 1.27.2.1 retrieving revision 1.27.2.1.2.1 diff -u -r1.27.2.1 -r1.27.2.1.2.1 --- FuncDocument.java 14 Aug 2002 19:21:28 -0000 1.27.2.1 +++ FuncDocument.java 10 Oct 2002 14:58:32 -0000 1.27.2.1.2.1 @@ -65,6 +65,7 @@ import org.apache.xml.dtm.DTM; import org.apache.xml.dtm.DTMIterator; import org.apache.xml.dtm.DTMManager; +import org.apache.xml.dtm.XType; import org.apache.xpath.NodeSetDTM; import org.apache.xpath.functions.Function; @@ -72,6 +73,8 @@ import org.apache.xpath.functions.WrongNumberArgsException; import org.apache.xpath.objects.XObject; import org.apache.xpath.objects.XNodeSet; +import org.apache.xpath.objects.XSequence; +import org.apache.xpath.objects.XNodeSequenceSingleton; import org.apache.xpath.XPath; import org.apache.xpath.XPathContext; import org.apache.xpath.SourceTreeManager; @@ -125,7 +128,8 @@ DTM dtm = xctxt.getDTM(context); int docContext = dtm.getDocumentRoot(context); - XObject arg = (XObject) this.getArg0().execute(xctxt); + //XObject arg = (XObject) this.getArg0().execute(xctxt); + XSequence arg = this.getArg0().execute(xctxt).xseq(); String base = ""; Expression arg1Expr = this.getArg1(); @@ -137,8 +141,24 @@ // of the node in the second argument node-set that is first in document // order is used as the base URI for resolving the // relative URI into an absolute URI. - XObject arg2 = arg1Expr.execute(xctxt); - + //XObject arg2 = arg1Expr.execute(xctxt); + XSequence arg2 = arg1Expr.execute(xctxt).xseq(); + XObject item; + if ((item = arg2.next()) == null || + item.getType() != XType.NODE) + warn(xctxt, XSLTErrorResources.WG_EMPTY_SECOND_ARG, null); + + if (item != null) + { + if(item instanceof XNodeSequenceSingleton) + { + XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item; + int baseNode = xnss.getNodeHandle(); + base = xnss.getDTM().getDocumentBaseURI(); + } + } + } +/* if (XObject.CLASS_NODESET == arg2.getType()) { int baseNode = arg2.iter().nextNode(); @@ -153,7 +173,7 @@ // suite, but maybe it's just not doing a good test? // int baseDoc = baseDTM.getDocument(); // -// if (baseDoc == DTM.NULL /* || baseDoc instanceof Stylesheet -->What to do?? */) +// if (baseDoc == DTM.NULL /* || baseDoc instanceof Stylesheet -->What to do?? /) // { // // // base = ((Stylesheet)baseDoc).getBaseIdentifier(); @@ -161,12 +181,12 @@ // } // else // base = xctxt.getSourceTreeManager().findURIFromDoc(baseDoc); - } + /* } else { base = arg2.str(); } - } + }*/ else { @@ -185,6 +205,28 @@ XNodeSet nodes = new XNodeSet(xctxt.getDTMManager()); NodeSetDTM mnl = nodes.mutableNodeset(); + + XObject item; + while ((item = arg.next()) != null) + { + int pos = DTM.NULL; + XMLString ref = null; + int type = item.getType(); + if (type == XType.NODE) + { + if(item instanceof XNodeSequenceSingleton) + { + XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item; + pos = xnss.getNodeHandle(); + ref = xnss.getStringFromNode(pos); + } + } + else + { + ref = item.xstr(); + } + + /* DTMIterator iterator = (XObject.CLASS_NODESET == arg.getType()) ? arg.iter() : null; int pos = DTM.NULL; @@ -193,7 +235,8 @@ { XMLString ref = (null != iterator) ? xctxt.getDTM(pos).getStringValue(pos) : arg.xstr(); - + + */ // The first and only argument was a nodeset, the base in that // case is the base URI of the node from the first argument nodeset. // Remember, when the document function has exactly one argument and @@ -245,11 +288,14 @@ } } - if (null == iterator || newDoc == DTM.NULL) + if (null == item || newDoc == DTM.NULL) break; } - return nodes; + if (mnl.getLength() == 0) + return XSequence.EMPTY; + else + return nodes; } /** No revision No revision 1.7.4.1.2.1 +20 -0 xml-xalan/java/src/org/apache/xml/dtm/DTM.java Index: DTM.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/DTM.java,v retrieving revision 1.7.4.1 retrieving revision 1.7.4.1.2.1 diff -u -r1.7.4.1 -r1.7.4.1.2.1 --- DTM.java 14 Aug 2002 19:45:33 -0000 1.7.4.1 +++ DTM.java 10 Oct 2002 14:58:33 -0000 1.7.4.1.2.1 @@ -57,6 +57,7 @@ package org.apache.xml.dtm; import org.apache.xml.utils.XMLString; +import org.apache.xml.utils.NodeVector; import org.apache.xpath.objects.*; import javax.xml.transform.SourceLocator; @@ -718,6 +719,25 @@ * @return The handle of the matching element. */ public int getElementById(String elementId); + + /** + * Returns the <code>Element</code> whose <code>IDREF</code> is given by + * <code>elementIdref</code>. If no such element exists, returns + * <code>DTM.NULL</code>. Behavior is not defined if more than one element + * has this <code>IDREF</code>. Attributes (including those + * with the name "IDREF") are not of type IDREF unless so defined by DTD/Schema + * information available to the DTM implementation. + * Implementations that do not know whether attributes are of type ID or + * not are expected to return <code>DTM.NULL</code>. + * + * <p>%REVIEW% Presumably IDREFs are still scoped to a single document, + * and this operation searches only within a single document, right? + * Wouldn't want collisions between DTMs in the same process.</p> + * + * @param elementIdref The unique <code>idref</code> value for an element. + * @return The handle of the matching element. + */ + public NodeVector getElementByIdref(String elementIdref); /** * The getUnparsedEntityURI function returns the URI of the unparsed No revision No revision 1.7.10.1.2.1 +3 -0 xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDocumentImpl.java Index: DTMDocumentImpl.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDocumentImpl.java,v retrieving revision 1.7.10.1 retrieving revision 1.7.10.1.2.1 diff -u -r1.7.10.1 -r1.7.10.1.2.1 --- DTMDocumentImpl.java 14 Aug 2002 19:45:34 -0000 1.7.10.1 +++ DTMDocumentImpl.java 10 Oct 2002 14:58:34 -0000 1.7.10.1.2.1 @@ -67,6 +67,7 @@ import org.apache.xml.utils.FastStringBuffer; import org.apache.xml.utils.XMLString; import org.apache.xml.utils.XMLStringFactory; +import org.apache.xml.utils.NodeVector; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; @@ -1928,6 +1929,8 @@ * @return The handle of the matching element. */ public int getElementById(String elementId) {return 0;} + + public NodeVector getElementByIdref(String elementIdef) {return null;} /** * The getUnparsedEntityURI function returns the URI of the unparsed No revision No revision 1.28.4.1.2.1 +5 -0 xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTM.java Index: DOM2DTM.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTM.java,v retrieving revision 1.28.4.1 retrieving revision 1.28.4.1.2.1 diff -u -r1.28.4.1 -r1.28.4.1.2.1 --- DOM2DTM.java 14 Aug 2002 19:45:34 -0000 1.28.4.1 +++ DOM2DTM.java 10 Oct 2002 14:58:34 -0000 1.28.4.1.2.1 @@ -1378,6 +1378,11 @@ } return DTM.NULL; } + + public NodeVector getElementByIdref(String elementIdref) + { + return null; + } /** * The getUnparsedEntityURI function returns the URI of the unparsed No revision No revision 1.29.2.1.2.3 +29 -0 xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java Index: SAX2DTM.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java,v retrieving revision 1.29.2.1.2.2 retrieving revision 1.29.2.1.2.3 diff -u -r1.29.2.1.2.2 -r1.29.2.1.2.3 --- SAX2DTM.java 26 Aug 2002 17:58:05 -0000 1.29.2.1.2.2 +++ SAX2DTM.java 10 Oct 2002 14:58:35 -0000 1.29.2.1.2.3 @@ -76,6 +76,7 @@ import org.apache.xml.utils.XMLCharacterRecognizer; import org.apache.xml.utils.XMLString; import org.apache.xml.utils.XMLStringFactory; +import org.apache.xml.utils.NodeVector; import org.xml.sax.*; import org.xml.sax.ext.*; @@ -1487,6 +1488,34 @@ while (null == intObj); return DTM.NULL; + } + + public NodeVector getElementByIdref(String idref) + { + + int node; + boolean isMore = true; + NodeVector nv = new NodeVector(); + + DTMAxisIterator iterator = this.getAxisIterator(Axis.DESCENDANTORSELF); + while ((node = iterator.next()) != DTM.NULL) + { + int attrNode = getFirstAttribute(node); + while (attrNode != DTM.NULL) + { + if(getSchemaTypeLocalName(attrNode).equalsIgnoreCase("IDREF")) + nv.addElement(node); + + attrNode = getNextAttribute(attrNode); + } + + // if (!isMore || m_endDocumentOccured) + // break; + + // isMore = nextNode(); + } + + return nv; } /** No revision No revision 1.2.4.1.2.6 +3 -0 xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/XNI2DTM.java Index: XNI2DTM.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/xni2dtm/Attic/XNI2DTM.java,v retrieving revision 1.2.4.1.2.5 retrieving revision 1.2.4.1.2.6 diff -u -r1.2.4.1.2.5 -r1.2.4.1.2.6 --- XNI2DTM.java 26 Aug 2002 17:58:06 -0000 1.2.4.1.2.5 +++ XNI2DTM.java 10 Oct 2002 14:58:35 -0000 1.2.4.1.2.6 @@ -886,6 +886,9 @@ AttributePSVImpl attrPSVI=(AttributePSVImpl)attrAugs.getItem(org.apache.xerces.impl.Constants.ATTRIBUTE_PSVI); XPath2Type xp2attrtype=new XPath2Type(attrPSVI,true); + if (xp2attrtype.getTypeName().equalsIgnoreCase("ID")) + setIDAttribute(valString, elemNode); + prev = addNode(nodeType, exName, elemNode, prev, val, false, xp2attrtype); } // Attribute list loop No revision No revision 1.1.2.2 +3 -3 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncCompare.java Index: FuncCompare.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncCompare.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- FuncCompare.java 20 Aug 2002 14:45:28 -0000 1.1.2.1 +++ FuncCompare.java 10 Oct 2002 14:58:35 -0000 1.1.2.2 @@ -60,7 +60,7 @@ import javax.xml.transform.TransformerException; import org.apache.xalan.res.XSLMessages; -import org.apache.xalan.res.XSLTErrorResources; +import org.apache.xpath.res.XPATHErrorResources; import org.apache.xpath.XPathContext; import org.apache.xpath.XPathException; import org.apache.xpath.objects.XObject; @@ -112,8 +112,8 @@ { // This should probably be error rather than // exception -- %REVIEW% - throw new XPathException(XSLMessages.createMessage( - XSLTErrorResources.WG_CANNOT_FIND_COLLATOR, + throw new XPathException(XSLMessages.createXPATHMessage( + XPATHErrorResources.ER_CANNOT_FIND_COLLATOR, new Object[]{collation} ) ); } 1.9.14.1.2.1 +37 -2 xml-xalan/java/src/org/apache/xpath/functions/FuncId.java Index: FuncId.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/FuncId.java,v retrieving revision 1.9.14.1 retrieving revision 1.9.14.1.2.1 diff -u -r1.9.14.1 -r1.9.14.1.2.1 --- FuncId.java 14 Aug 2002 20:06:59 -0000 1.9.14.1 +++ FuncId.java 10 Oct 2002 14:58:35 -0000 1.9.14.1.2.1 @@ -73,7 +73,10 @@ import org.apache.xpath.NodeSetDTM; import org.apache.xpath.objects.XObject; import org.apache.xpath.objects.XNodeSet; +import org.apache.xpath.objects.XNodeSequenceSingleton; +import org.apache.xpath.objects.XSequence; import org.apache.xml.utils.StringVector; +import org.apache.xml.dtm.XType; /** * <meta name="usage" content="advanced"/> @@ -156,8 +159,39 @@ if (DTM.NULL == docContext) error(xctxt, XPATHErrorResources.ER_CONTEXT_HAS_NO_OWNERDOC, null); - XObject arg = m_arg0.execute(xctxt); - int argType = arg.getType(); + XSequence arg = m_arg0.execute(xctxt).xseq(); + int count = arg.getLength(); + + XNodeSet nodes = new XNodeSet(xctxt.getDTMManager()); + NodeSetDTM nodeSet = nodes.mutableNodeset(); + + StringVector usedrefs = null; + XObject item; + while ((item = arg.next()) != null) + { + int type = item.getType(); + // Not sure what we do about a sequence of nodes at this point!! + /* + if(item instanceof XNodeSequenceSingleton) + { + XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item; + int pos = xnss.getNodeHandle(); + String refval = xnss.getStringFromNode(pos).toString(); + usedrefs = getNodesByID(xctxt, docContext, refval, usedrefs, nodeSet, + (count -1) != arg.getCurrentPos()); + } + else*/ + { + String refval = item.str(); + getNodesByID(xctxt, docContext, refval, null, nodeSet, false); + } + + } + if(nodeSet.getLength() == 0) + return XSequence.EMPTY; + else + return nodes; + /* int argType = arg.getType(); XNodeSet nodes = new XNodeSet(xctxt.getDTMManager()); NodeSetDTM nodeSet = nodes.mutableNodeset(); @@ -190,5 +224,6 @@ } return nodes; + */ } } 1.1.2.3 +1 -1 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncItemAt.java Index: FuncItemAt.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncItemAt.java,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- FuncItemAt.java 18 Sep 2002 20:00:52 -0000 1.1.2.2 +++ FuncItemAt.java 10 Oct 2002 14:58:35 -0000 1.1.2.3 @@ -98,7 +98,7 @@ int pos = m_arg1.execute(xctxt).integer(); - if (seqParam.getLength() <= pos) + if (pos-1 <0 || seqParam.getLength() <= pos) this.error(xctxt, XPATHErrorResources.ER_ERROR_OCCURED, null); return ((XSequenceImpl)seqParam).getItem(pos-1); 1.1.2.2 +8 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSubsequence.java Index: FuncSubsequence.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSubsequence.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- FuncSubsequence.java 18 Sep 2002 14:17:47 -0000 1.1.2.1 +++ FuncSubsequence.java 10 Oct 2002 14:58:35 -0000 1.1.2.2 @@ -147,4 +147,12 @@ protected void reportWrongNumberArgs() throws WrongNumberArgsException { throw new WrongNumberArgsException(XSLMessages.createXPATHMessage("twoorthree", null)); } + + + + /** Return the number of children the node has. */ + public int exprGetNumChildren() + { + return (m_arg2 == null) ? 2 : 3; + } } 1.5.14.1.2.1 +34 -1 xml-xalan/java/src/org/apache/xpath/functions/FuncSum.java Index: FuncSum.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/functions/FuncSum.java,v retrieving revision 1.5.14.1 retrieving revision 1.5.14.1.2.1 diff -u -r1.5.14.1 -r1.5.14.1.2.1 --- FuncSum.java 14 Aug 2002 20:07:00 -0000 1.5.14.1 +++ FuncSum.java 10 Oct 2002 14:58:35 -0000 1.5.14.1.2.1 @@ -59,10 +59,13 @@ import javax.xml.transform.TransformerException; import org.apache.xml.dtm.DTM; import org.apache.xml.dtm.DTMIterator; +import org.apache.xml.dtm.XType; import org.apache.xml.utils.XMLString; import org.apache.xpath.XPathContext; import org.apache.xpath.objects.XDouble; import org.apache.xpath.objects.XObject; +import org.apache.xpath.objects.XSequence; +import org.apache.xpath.objects.XNodeSequenceSingleton; /** * <meta name="usage" content="advanced"/> @@ -81,6 +84,36 @@ */ public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException { + XSequence nl = m_arg0.execute(xctxt).xseq(); + if (nl.equals(XSequence.EMPTY)) + return XSequence.EMPTY; + + double sum = 0; + XObject item; + while ((item = nl.next()) != null) + { + int type = item.getValueType(); + if(type == XType.ANYTYPE || type == XType.ANYSIMPLETYPE) + { + type = XObject.CLASS_NUMBER; + } + if (type != XObject.CLASS_NUMBER) + throw new javax.xml.transform.TransformerException("Argument not Numeric"); + + if(item instanceof XNodeSequenceSingleton) + { + XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item; + sum += xnss.num(); + } + else + { + sum += item.num(); + } + } + + return new XDouble(sum); + } + /* { DTMIterator nodes = m_arg0.asIterator(xctxt, xctxt.getCurrentNode()); double sum = 0.0; @@ -97,5 +130,5 @@ nodes.detach(); return new XDouble(sum); - } + }*/ } No revision No revision 1.1.2.1 +201 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncIdref.java 1.1.2.1 +201 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncMax.java 1.1.2.1 +174 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncMin.java 1.1.2.1 +195 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceDeepEqual.java 1.1.2.1 +128 -0 xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceNodeEqual.java No revision No revision 1.1.2.1.2.12 +16 -1 xml-xalan/java/src/org/apache/xpath/parser/Attic/SimpleNode.java Index: SimpleNode.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/parser/Attic/SimpleNode.java,v retrieving revision 1.1.2.1.2.11 retrieving revision 1.1.2.1.2.12 diff -u -r1.1.2.1.2.11 -r1.1.2.1.2.12 --- SimpleNode.java 19 Sep 2002 21:43:30 -0000 1.1.2.1.2.11 +++ SimpleNode.java 10 Oct 2002 14:58:36 -0000 1.1.2.1.2.12 @@ -393,7 +393,22 @@ new FuncDistinctValues()); m_builtInFunctions.put( new QName("avg"), - new FuncAverage()); + new FuncAverage()); +m_builtInFunctions.put( + new QName("max"), + new FuncMax()); +m_builtInFunctions.put( + new QName("min"), + new FuncMin()); +m_builtInFunctions.put( + new QName("idref"), + new FuncIdref()); +m_builtInFunctions.put( + new QName("sequence-node-equal"), + new FuncSequenceNodeEqual()); +m_builtInFunctions.put( + new QName("sequence-deep-equal"), + new FuncSequenceDeepEqual()); } /** No revision No revision 1.16.2.1.2.1 +3 -0 xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.java Index: XPATHErrorResources.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.java,v retrieving revision 1.16.2.1 retrieving revision 1.16.2.1.2.1 diff -u -r1.16.2.1 -r1.16.2.1.2.1 --- XPATHErrorResources.java 14 Aug 2002 20:07:09 -0000 1.16.2.1 +++ XPATHErrorResources.java 10 Oct 2002 14:58:37 -0000 1.16.2.1.2.1 @@ -464,6 +464,9 @@ // Variable accessed before it is bound! public static final int ER_VARIABLE_ACCESSED_BEFORE_BIND = 85; + + /** ER_CANNOT_FIND_COLLATOR */ + public static final int ER_CANNOT_FIND_COLLATOR = 86; // Warnings... 1.7.2.1.2.2 +3 -0 xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.properties Index: XPATHErrorResources.properties =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/res/XPATHErrorResources.properties,v retrieving revision 1.7.2.1.2.1 retrieving revision 1.7.2.1.2.2 diff -u -r1.7.2.1.2.1 -r1.7.2.1.2.2 --- XPATHErrorResources.properties 16 Aug 2002 21:23:48 -0000 1.7.2.1.2.1 +++ XPATHErrorResources.properties 10 Oct 2002 14:58:37 -0000 1.7.2.1.2.2 @@ -176,6 +176,8 @@ ER0084=2 or 3 # ER_VARIABLE_ACCESSED_BEFORE_BIND ER0085=Variable accessed before it is bound! +# ER_CANNOT_FIND_COLLATOR */ +ER0086=Could not find Collator for {0} # WG_LOCALE_NAME_NOT_HANDLED WR0001=locale name in the format-number function not yet handled! @@ -227,5 +229,6 @@ one=1 two=2 three=3 +oneortwo=1 or 2 twoorthree=2 or 3 threeorfour = 3 or 4
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]