package client.net.sf.saxon.ce.expr.instruct;
import client.net.sf.saxon.ce.event.SequenceReceiver;
import client.net.sf.saxon.ce.expr.*;
import client.net.sf.saxon.ce.om.StandardNames;
import client.net.sf.saxon.ce.pattern.NodeKindTest;
import client.net.sf.saxon.ce.trans.XPathException;
import client.net.sf.saxon.ce.type.ItemType;
import client.net.sf.saxon.ce.type.TypeHierarchy;
/**
* An instruction representing an xsl:comment element in the stylesheet.
*/
public final class Comment extends SimpleNodeConstructor {
/**
* Construct the instruction
*/
public Comment() {}
/**
* Get the instruction name, for diagnostics and tracing
* return the string "xsl:comment"
*/
public int getInstructionNameCode() {
return StandardNames.XSL_COMMENT;
}
public ItemType getItemType(TypeHierarchy th) {
return NodeKindTest.COMMENT;
}
public int getCardinality() {
return StaticProperty.EXACTLY_ONE;
}
public void localTypeCheck(ExpressionVisitor visitor, ItemType contextItemType) throws XPathException {
}
/**
* Process the value of the node, to create the new node.
* @param value the string value of the new node
* @param context the dynamic evaluation context
* @throws XPathException
*/
public void processValue(CharSequence value, XPathContext context) throws XPathException {
//String comment = expandChildren(context).toString();
String comment = checkContent(value.toString(), context);
SequenceReceiver out = context.getReceiver();
out.comment(comment);
}
/**
* Check the content of the node, and adjust it if necessary
*
* @param comment the supplied content
* @param context the dynamic context
* @return the original content, unless adjustments are needed
* @throws XPathException if the content is invalid
*/
protected String checkContent(String comment, XPathContext context) throws XPathException {
while(true) {
int hh = comment.indexOf("--");
if (hh < 0) break;
comment = comment.substring(0, hh+1) + ' ' + comment.substring(hh+1);
}
if (comment.length()>0 && comment.charAt(comment.length()-1)=='-') {
comment = comment + ' ';
}
return comment;
}
}
// 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.