01: /*
02: * Copyright 1999-2004 The Apache Software Foundation.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: /*
17: * $Id: FuncNormalizeSpace.java,v 1.13 2004/08/17 19:25:36 jycli Exp $
18: */
19: package org.apache.xpath.functions;
20:
21: import org.apache.xml.dtm.DTM;
22: import org.apache.xml.utils.XMLString;
23: import org.apache.xpath.XPathContext;
24: import org.apache.xpath.objects.XObject;
25: import org.apache.xpath.objects.XString;
26: import org.xml.sax.ContentHandler;
27:
28: /**
29: * Execute the normalize-space() function.
30: * @xsl.usage advanced
31: */
32: public class FuncNormalizeSpace extends FunctionDef1Arg {
33: static final long serialVersionUID = -3377956872032190880L;
34:
35: /**
36: * Execute the function. The function must return
37: * a valid object.
38: * @param xctxt The current execution context.
39: * @return A valid XObject.
40: *
41: * @throws javax.xml.transform.TransformerException
42: */
43: public XObject execute(XPathContext xctxt)
44: throws javax.xml.transform.TransformerException {
45: XMLString s1 = getArg0AsString(xctxt);
46:
47: return (XString) s1.fixWhiteSpace(true, true, false);
48: }
49:
50: /**
51: * Execute an expression in the XPath runtime context, and return the
52: * result of the expression.
53: *
54: *
55: * @param xctxt The XPath runtime context.
56: *
57: * @return The result of the expression in the form of a <code>XObject</code>.
58: *
59: * @throws javax.xml.transform.TransformerException if a runtime exception
60: * occurs.
61: */
62: public void executeCharsToContentHandler(XPathContext xctxt,
63: ContentHandler handler)
64: throws javax.xml.transform.TransformerException,
65: org.xml.sax.SAXException {
66: if (Arg0IsNodesetExpr()) {
67: int node = getArg0AsNode(xctxt);
68: if (DTM.NULL != node) {
69: DTM dtm = xctxt.getDTM(node);
70: dtm.dispatchCharactersEvents(node, handler, true);
71: }
72: } else {
73: XObject obj = execute(xctxt);
74: obj.dispatchCharactersEvents(handler);
75: }
76: }
77:
78: }
|