Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package net.sf.saxon.style;
import net.sf.saxon.Configuration;
import net.sf.saxon.PreparedStylesheet;
import net.sf.saxon.expr.Expression;
import net.sf.saxon.expr.Literal;
import net.sf.saxon.instruct.*;
import net.sf.saxon.om.*;
import net.sf.saxon.trace.Location;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.tree.DocumentImpl;
import net.sf.saxon.tree.TreeBuilder;
import net.sf.saxon.type.SchemaType;
import javax.xml.transform.TransformerException;
/**
* This class represents a literal result element in the style sheet
* (typically an HTML element to be output).
* It is also used to represent unknown top-level elements, which are ignored.
*/
public class LiteralResultElement extends StyleElement {
private int resultNameCode;
private int[] attributeNames;
private Expression[] attributeValues;
private int numberOfAttributes;
private boolean toplevel;
private int[] namespaceCodes;
private AttributeSet[] attributeSets;
private SchemaType schemaType = null;
private int validation = Validation.STRIP;
private boolean inheritNamespaces = true;
/**
* Determine whether this type of element is allowed to contain a sequence constructor
* @return true: yes, it may contain a sequence constructor
*/
public boolean mayContainSequenceConstructor() {
return true;
}
/**
* Specify that this is an instruction
*/
public boolean isInstruction() {
return true;
}
/**
* Process the attribute list
*/
public void prepareAttributes() throws XPathException {
// Process the values of all attributes. At this stage we deal with attribute
// values (especially AVTs), but we do not apply namespace aliasing to the
// attribute names.
int num = attributeList.getLength();
if (num == 0) {
numberOfAttributes = 0;
} else {
NamePool namePool = getNamePool();
attributeNames = new int[num];
attributeValues = new Expression[num];
numberOfAttributes = 0;
for (int i=0; i 0) {
for (int i=0; i 0) {
for (int i=attributeNames.length - 1; i>=0; i--) {
FixedAttribute att = new FixedAttribute(
attributeNames[i],
Validation.STRIP,
null,
StandardNames.XS_UNTYPED_ATOMIC);
try {
att.setSelect(attributeValues[i], exec.getConfiguration());
} catch (XPathException err) {
compileError(err);
}
att.setLocationId(allocateLocationId(getSystemId(), getLineNumber()));
Expression exp = att;
if (getConfiguration().isCompileWithTracing()) {
TraceExpression trace = new TraceExpression(exp);
trace.setLineNumber(getLineNumber());
trace.setColumnNumber(-1);
trace.setSystemId(getSystemId());
trace.setNamespaceResolver(getNamespaceResolver());
trace.setConstructType(Location.LITERAL_RESULT_ATTRIBUTE);
trace.setLocationId(allocateLocationId(getSystemId(), getLineNumber()));
trace.setObjectName(new StructuredQName(getNamePool(), attributeNames[i]));
exp = trace;
}
if (content == null) {
content = exp;
} else {
content = Block.makeBlock(exp, content);
content.setLocationId(allocateLocationId(getSystemId(), getLineNumber()));
}
}
}
if (attributeSets != null) {
UseAttributeSets use = new UseAttributeSets(attributeSets);
if (content == null) {
content = use;
} else {
content = Block.makeBlock(use, content);
content.setLocationId(allocateLocationId(getSystemId(), getLineNumber()));
}
}
if (content == null) {
content = Literal.makeEmptySequence();
}
inst.setContentExpression(content);
return inst;
}
/**
* Make a top-level literal result element into a stylesheet. This implements
* the "Simplified Stylesheet" facility.
* @param pss the PreparedStylesheet (the compiled stylesheet as provided)
* @param nodeFactory the node factory used to construct the stylesheet tree
* @return the reconstructed stylesheet with an xsl:stylesheet and xsl:template element added
*/
public DocumentImpl makeStylesheet(PreparedStylesheet pss,
StyleNodeFactory nodeFactory)
throws XPathException {
// the implementation grafts the LRE node onto a containing xsl:template and
// xsl:stylesheet
NamePool pool = getNamePool();
String xslPrefix = getPrefixForURI(NamespaceConstant.XSLT);
if (xslPrefix==null) {
String message;
if (getLocalPart().equals("stylesheet") || getLocalPart().equals("transform")) {
if (getPrefixForURI(NamespaceConstant.MICROSOFT_XSL) != null) {
message = "Saxon is not able to process Microsoft's WD-xsl dialect";
} else {
message = "Namespace for stylesheet element should be " + NamespaceConstant.XSLT;
}
} else {
message = "The supplied file does not appear to be a stylesheet";
}
XPathException err = new XPathException(message);
err.setLocator(this);
err.setErrorCode("XTSE0165");
err.setIsStaticError(true);
//noinspection EmptyCatchBlock
try {
pss.reportError(err);
} catch (TransformerException err2) {
}
throw err;
}
// check there is an xsl:version attribute (it's mandatory), and copy
// it to the new xsl:stylesheet element
String version = getAttributeValue(StandardNames.XSL_VERSION);
if (version==null) {
XPathException err = new XPathException("Simplified stylesheet: xsl:version attribute is missing");
err.setErrorCode("XTSE0150");
err.setIsStaticError(true);
err.setLocator(this);
//noinspection EmptyCatchBlock
try {
pss.reportError(err);
} catch (TransformerException err2) {
}
throw err;
}
try {
TreeBuilder builder = new TreeBuilder();
builder.setPipelineConfiguration(pss.getConfiguration().makePipelineConfiguration());
builder.setNodeFactory(nodeFactory);
builder.setSystemId(this.getSystemId());
builder.open();
builder.startDocument(0);
int st = StandardNames.XSL_STYLESHEET;
builder.startElement(st, StandardNames.XS_UNTYPED, 0, 0);
builder.namespace(NamespaceConstant.XSLT_CODE, 0);
builder.attribute(pool.allocate("", "", "version"), StandardNames.XS_UNTYPED_ATOMIC, version, 0, 0);
builder.startContent();
int te = StandardNames.XSL_TEMPLATE;
builder.startElement(te, StandardNames.XS_UNTYPED, 0, 0);
builder.attribute(pool.allocate("", "", "match"), StandardNames.XS_UNTYPED_ATOMIC, "/", 0, 0);
builder.startContent();
builder.graftElement(this);
builder.endElement();
builder.endElement();
builder.endDocument();
builder.close();
return (DocumentImpl)builder.getCurrentRoot();
} catch (XPathException err) {
//TransformerConfigurationException e = new TransformerConfigurationException(err);
err.setLocator(this);
throw err;
}
}
/**
* Get the type of construct. This will be a constant in
* class {@link net.sf.saxon.trace.Location}. This method is part of the
* {@link net.sf.saxon.trace.InstructionInfo} interface
*/
public int getConstructType() {
return Location.LITERAL_RESULT_ELEMENT;
}
/**
* Get a name identifying the object of the expression, for example a function name, template name,
* variable name, key name, element name, etc. This is used only where the name is known statically.
* If there is no name, the value will be -1.
* @return the name of the literal result element
*/
public int getObjectNameCode() {
return resultNameCode;
}
/**
* Get the value of a particular property of the instruction. This is part of the
* {@link net.sf.saxon.trace.InstructionInfo} interface for run-time tracing and debugging. The properties
* available include all the attributes of the source instruction (named by the attribute name):
* these are all provided as string values.
* @param name The name of the required property
* @return The value of the requested property, or null if the property is not available
*/
public Object getProperty(String name) {
if (name.equals("name")) {
return getDisplayName();
}
return null;
}
}
//
// The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the
// License at http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
// See the License for the specific language governing rights and limitations under the License.
//
// The Original Code is: all this file.
//
// The Initial Developer of the Original Code is Michael H. Kay.
//
// Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
//
// Contributor(s): none.
//