mmidy       2002/09/13 12:59:58

  Modified:    java/src/org/apache/xalan/templates Tag: xslt20
                        ElemAnalyzeString.java ElemMatchingSubstring.java
               java/src/org/apache/xml/dtm Tag: xslt20 XType.java
               java/src/org/apache/xpath Tag: xslt20 Expression.java
               java/src/org/apache/xpath/functions Tag: xslt20
                        FuncReplace.java FuncTokenize.java
               java/src/org/apache/xpath/parser Tag: xslt20 SimpleNode.java
  Added:       java/src/org/apache/xpath/functions Tag: xslt20
                        FuncEmpty.java FuncExists.java FuncIndexOf.java
                        FuncItemAt.java
  Log:
  New functions: empty(), index-of(), exists(), item-at()
  Fix misc problems with regular expressions
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.3   +22 -6     
xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemAnalyzeString.java
  
  Index: ElemAnalyzeString.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemAnalyzeString.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- ElemAnalyzeString.java    19 Aug 2002 22:44:13 -0000      1.1.2.2
  +++ ElemAnalyzeString.java    13 Sep 2002 19:59:56 -0000      1.1.2.3
  @@ -336,18 +336,34 @@
       {
        if(tokenTree.size() > 0)
        {
  -     for(i=0; i<tokenTree.size(); i++)
  +     for(i=0; i<tokenTree.size() && index<length; i++)
                {
                        child = tokenTree.getChild(i);
  -                     regexp.compileToken(child);
  -                     int[] range = regexp.matchString(selectResult, index, 
length);
  -        int start = range[0];
  +                     int[] range;
  +                     // Needs review!!! See regex020, E4...
  +                     if (child.getType() == Token.PAREN &&
  +                     (i+1 < tokenTree.size()) &&
  +                     tokenTree.getChild(i+1).getType() == Token.CHAR)
  +                     {
  +                             regexp.compileToken(tokenTree.getChild(i+1));
  +                         range = regexp.matchString(selectResult, index, 
length);
  +            int start = range[0] > length ? length : range[0]; 
  +             regexp.compileToken(child);
  +             range = regexp.matchString(selectResult, index, start);
  +                     }
  +                     else
  +                     {
  +                             regexp.compileToken(child);
  +                             range = regexp.matchString(selectResult, index, 
length);
  +                     } 
  +                     int start = range[0];
           int end = range[1];
           if (end >=0)
           {
                if (child.getType() == Token.PAREN)
  -             matchSeq.insertItemAt(new XString(selectResult.substring(start, 
end)), t++);
  -             noMatchSeq.insertItemAt(new 
XString(selectResult.substring(index, start)), j++); 
  +               matchSeq.insertItemAt(new 
XString(selectResult.substring(start, end)), t++);
  +             if (index != start)
  +               noMatchSeq.insertItemAt(new 
XString(selectResult.substring(index, start)), j++); 
            index = end;
           }
           else
  
  
  
  1.1.2.2   +2 -2      
xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemMatchingSubstring.java
  
  Index: ElemMatchingSubstring.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemMatchingSubstring.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- ElemMatchingSubstring.java        16 Aug 2002 21:23:47 -0000      1.1.2.1
  +++ ElemMatchingSubstring.java        13 Sep 2002 19:59:56 -0000      1.1.2.2
  @@ -196,7 +196,7 @@
   
         xctxt.pushCurrentItem(XSequence.EMPTY);
   
  -      int currentNodePos = xctxt.getCurrentNodeFirstFree() - 1;
  +      //int currentNodePos = xctxt.getCurrentNodeFirstFree() - 1;
   
         xctxt.pushCurrentExpressionNode(DTM.NULL);
   
  @@ -212,7 +212,7 @@
         XObject item;
         
          //for each item in the population, evaluate the expression
  -       // while (null != (item = m_substringSequence.next()))
  +        //while (null != (item = m_substringSequence.next()))
            if (null != (item = m_substringSequence.next()))
             {
                xctxt.setCurrentItem(item);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.1 +2 -1      xml-xalan/java/src/org/apache/xml/dtm/Attic/XType.java
  
  Index: XType.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/Attic/XType.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
  --- XType.java        14 Aug 2002 19:45:33 -0000      1.1.2.1
  +++ XType.java        13 Sep 2002 19:59:57 -0000      1.1.2.1.2.1
  @@ -140,7 +140,8 @@
       "yearMonthDuration", // YEARMONTHDURATION = 23;
       "dayTimeDuration", // DAYTIMEDURATION = 24;
       "AnySimpleType", // ANYSIMPLETYPE = 25;
  -    "EMPTY" // EMPTYSEQ = 26;
  +    "EMPTY", // EMPTYSEQ = 26;
  +    "sequence" // SEQ = 27;
     };
     
     public static final int NOTHOMOGENOUS = 0xFFFFFFFF;
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.18.4.1.2.1 +41 -0     xml-xalan/java/src/org/apache/xpath/Expression.java
  
  Index: Expression.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/Expression.java,v
  retrieving revision 1.18.4.1
  retrieving revision 1.18.4.1.2.1
  diff -u -r1.18.4.1 -r1.18.4.1.2.1
  --- Expression.java   14 Aug 2002 20:06:56 -0000      1.18.4.1
  +++ Expression.java   13 Sep 2002 19:59:57 -0000      1.18.4.1.2.1
  @@ -64,10 +64,12 @@
   import javax.xml.transform.TransformerException;
   import org.apache.xalan.res.XSLMessages;
   import org.apache.xml.dtm.DTM;
  +import org.apache.xml.dtm.XType;
   import org.apache.xml.dtm.DTMIterator;
   import org.apache.xml.utils.XMLString;
   import org.apache.xpath.objects.XNodeSet;
   import org.apache.xpath.objects.XObject;
  +import org.apache.xpath.objects.XSequence;
   import org.apache.xpath.parser.SimpleNode;
   import org.apache.xpath.res.XPATHErrorResources;
   import org.xml.sax.ContentHandler;
  @@ -246,6 +248,45 @@
             throws javax.xml.transform.TransformerException
     {
       return execute(xctxt).xstr();
  +  }
  +  
  +  /**
  +   * Cast result object to a string.
  +   *
  +   *
  +   * @param xctxt The XPath runtime context.
  +   * @return The string this wraps or the empty string if null
  +   *
  +   * @throws javax.xml.transform.TransformerException
  +   */
  +  public String strOrNull(XPathContext xctxt)
  +          throws javax.xml.transform.TransformerException
  +  {
  +    XObject obj = execute(xctxt);
  +    if(obj instanceof XSequence)
  +    {
  +      XSequence seq = (XSequence)obj;
  +      int len = seq.getLength();
  +      if(len > 1) //!seq.isSingletonOrEmpty())
  +      {
  +        this.error(xctxt, XPATHErrorResources.ER_CANT_CONVERT_TO_TYPE,new 
Object[]{XType.getLocalNameFromType(XType.SEQ), 
XType.getLocalNameFromType(XType.STRING)}); 
  +        return null;
  +      }
  +      else
  +      {
  +        if (len == 0)
  +          return null;
  +        else
  +          return obj.str();
  +      }
  +    }
  +    else
  +    {
  +      if (obj.object() == null)
  +        return null;
  +      else
  +        return obj.str();
  +    }
     }
   
     /**
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.5   +10 -3     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncReplace.java
  
  Index: FuncReplace.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncReplace.java,v
  retrieving revision 1.1.2.4
  retrieving revision 1.1.2.5
  diff -u -r1.1.2.4 -r1.1.2.5
  --- FuncReplace.java  28 Aug 2002 15:39:24 -0000      1.1.2.4
  +++ FuncReplace.java  13 Sep 2002 19:59:57 -0000      1.1.2.5
  @@ -62,6 +62,7 @@
   import org.apache.xpath.XPathContext;
   import org.apache.xpath.objects.XObject;
   import org.apache.xpath.objects.XString;
  +import org.apache.xpath.objects.XSequence;
   import org.apache.xpath.parser.regexp.*;
   import org.apache.xalan.res.XSLMessages;
   
  @@ -82,9 +83,13 @@
      */
     public XObject execute(XPathContext xctxt) throws 
javax.xml.transform.TransformerException
     {
  -     String input = m_arg0.execute(xctxt).str();
  -     String pattern = m_arg1.execute(xctxt).str();
  -     String replace = m_arg2.execute(xctxt).str();
  +     String input = m_arg0.strOrNull(xctxt);
  +     String pattern = m_arg1.strOrNull(xctxt);
  +     String replace = m_arg2.strOrNull(xctxt);
  +     
  +     if (input == null || replace == null || pattern == null)
  +       return XSequence.EMPTY;
  +       
        String flags = "";
        if (m_args != null)
        flags = m_args[0].execute(xctxt).str(); 
  @@ -112,6 +117,8 @@
                        int[] range;
                        // Note: Not really sure this is correct.
                        // Needs review!!! See regex020, E4...
  +                     // the begining of the following character token will
  +                     // be the end of this paren token.
                        if (child.getType() == Token.PAREN &&
                        (i+1 < tokenTree.size()) &&
                        tokenTree.getChild(i+1).getType() == Token.CHAR)
  
  
  
  1.1.2.3   +9 -3      
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncTokenize.java
  
  Index: FuncTokenize.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncTokenize.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- FuncTokenize.java 19 Aug 2002 22:44:13 -0000      1.1.2.2
  +++ FuncTokenize.java 13 Sep 2002 19:59:57 -0000      1.1.2.3
  @@ -65,6 +65,7 @@
   import org.apache.xpath.objects.XSequenceImpl;
   import org.apache.xpath.objects.XString;
   import org.apache.xpath.parser.regexp.*;
  +import org.apache.xpath.parser.regexp.RegularExpression;
   import org.apache.xalan.res.XSLMessages;
   
   /**
  @@ -84,8 +85,10 @@
      */
     public XObject execute(XPathContext xctxt) throws 
javax.xml.transform.TransformerException
     {
  -     String input = m_arg0.execute(xctxt).str();
  -     String pattern = m_arg1.execute(xctxt).str();
  +     String input = m_arg0.strOrNull(xctxt);
  +     String pattern = m_arg1.strOrNull(xctxt);
  +    if (input == null || pattern == null)
  +      return XSequence.EMPTY;
        String flags = "";
        if (m_arg2 != null)
        flags = m_arg2.execute(xctxt).str(); 
  @@ -115,7 +118,10 @@
           index = length;
        }
       }
  -     return seq;
  +    if (seq.getLength() == 0)
  +      return XSequence.EMPTY;
  +    else
  +      return seq;
       
     }
     
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +88 -0     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncEmpty.java
  
  
  
  
  1.1.2.1   +88 -0     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncExists.java
  
  
  
  
  1.1.2.1   +193 -0    
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncIndexOf.java
  
  
  
  
  1.1.2.1   +108 -0    
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncItemAt.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.9 +13 -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.8
  retrieving revision 1.1.2.1.2.9
  diff -u -r1.1.2.1.2.8 -r1.1.2.1.2.9
  --- SimpleNode.java   6 Sep 2002 19:53:26 -0000       1.1.2.1.2.8
  +++ SimpleNode.java   13 Sep 2002 19:59:58 -0000      1.1.2.1.2.9
  @@ -362,7 +362,19 @@
         new FuncReplace());
   m_builtInFunctions.put(
         new QName("tokenize"),
  -      new FuncTokenize());    
  +      new FuncTokenize());
  +m_builtInFunctions.put(
  +      new QName("empty"),
  +      new FuncEmpty());
  +m_builtInFunctions.put(
  +      new QName("exists"),
  +      new FuncExists());
  +m_builtInFunctions.put(
  +      new QName("index-of"),
  +      new FuncIndexOf());
  +m_builtInFunctions.put(
  +      new QName("item-at"),
  +      new FuncItemAt());
     }
   
     /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to