Package client.net.sf.saxon.ce.functions

Source Code of client.net.sf.saxon.ce.functions.Tokenize

package client.net.sf.saxon.ce.functions;

import client.net.sf.saxon.ce.expr.XPathContext;
import client.net.sf.saxon.ce.om.SequenceIterator;
import client.net.sf.saxon.ce.regex.ARegularExpression;
import client.net.sf.saxon.ce.trans.XPathException;
import client.net.sf.saxon.ce.tree.iter.EmptyIterator;
import client.net.sf.saxon.ce.value.AtomicValue;


/**
* This class implements the tokenize() function for regular expression matching. This returns a
* sequence of strings representing the unmatched substrings: the separators which match the
* regular expression are not returned.
*/

public class Tokenize extends SystemFunction  {

    public Tokenize newInstance() {
        return new Tokenize();
    }

    /**
    * Iterate over the results of the function
    */

    public SequenceIterator iterate(XPathContext c) throws XPathException {
        AtomicValue sv = (AtomicValue)argument[0].evaluateItem(c);
        if (sv==null) {
            return EmptyIterator.getInstance();
        }
        String input = sv.getStringValue();
        if (input.length() == 0) {
            return EmptyIterator.getInstance();
        }

        sv = (AtomicValue)argument[1].evaluateItem(c);
        CharSequence pattern = sv.getStringValueCS();

        CharSequence flags;
        if (argument.length==2) {
            flags = "";
        } else {
            sv = (AtomicValue)argument[2].evaluateItem(c);
            flags = sv.getStringValueCS();
        }

        try {
            ARegularExpression re = new ARegularExpression(pattern, flags.toString(), "XP20", null);

            // check that it's not a pattern that matches ""
            if (re.matches("")) {
                dynamicError("The regular expression in tokenize() must not be one that matches a zero-length string", "FORX0003", null);
            }

            return re.tokenize(input);

        } catch (XPathException err) {
            err.setErrorCode("FORX0002");
            err.setXPathContext(c);
            err.maybeSetLocation(this.getSourceLocator());
            throw err;
        }




    }

}



// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.
TOP

Related Classes of client.net.sf.saxon.ce.functions.Tokenize

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.