Methods Summary |
---|
public void | addParameter(com.sun.org.apache.xalan.internal.xsltc.compiler.Param param)
_parameters.addElement(param);
|
public int | compareTo(java.lang.Object template)Compare this template to another. First checks priority, then position.
Template other = (Template)template;
if (_priority > other._priority)
return 1;
else if (_priority < other._priority)
return -1;
else if (_position > other._position)
return 1;
else if (_position < other._position)
return -1;
else
return 0;
|
public void | disable()
_disabled = true;
|
public boolean | disabled()
return(_disabled);
|
public void | display(int indent)
Util.println('\n");
indent(indent);
if (_name != null) {
indent(indent);
Util.println("name = " + _name);
}
else if (_pattern != null) {
indent(indent);
Util.println("match = " + _pattern.toString());
}
if (_mode != null) {
indent(indent);
Util.println("mode = " + _mode);
}
displayContents(indent + IndentIncrement);
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.QName | getModeName()
return _mode;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.QName | getName()
return _name;
|
public java.util.Vector | getParameters()
return _parameters;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern | getPattern()
return _pattern;
|
public int | getPosition()
return(_position);
|
public double | getPriority()
return _priority;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet | getStylesheet()
return _stylesheet;
|
public boolean | hasParams()
return _parameters.size() > 0;
|
public boolean | isNamed()
return _name != null;
|
public boolean | isSimpleNamedTemplate()
return _isSimpleNamedTemplate;
|
public boolean | isSimplified()
return(_simplified);
|
public void | parseContents(com.sun.org.apache.xalan.internal.xsltc.compiler.Parser parser)
final String name = getAttribute("name");
final String mode = getAttribute("mode");
final String match = getAttribute("match");
final String priority = getAttribute("priority");
_stylesheet = super.getStylesheet();
if (name.length() > 0) {
if (!XMLChar.isValidQName(name)) {
ErrorMsg err = new ErrorMsg(ErrorMsg.INVALID_QNAME_ERR, name, this);
parser.reportError(Constants.ERROR, err);
}
_name = parser.getQNameIgnoreDefaultNs(name);
}
if (mode.length() > 0) {
if (!XMLChar.isValidQName(mode)) {
ErrorMsg err = new ErrorMsg(ErrorMsg.INVALID_QNAME_ERR, mode, this);
parser.reportError(Constants.ERROR, err);
}
_mode = parser.getQNameIgnoreDefaultNs(mode);
}
if (match.length() > 0) {
_pattern = parser.parsePattern(this, "match", null);
}
if (priority.length() > 0) {
_priority = Double.parseDouble(priority);
}
else {
if (_pattern != null)
_priority = _pattern.getPriority();
else
_priority = Double.NaN;
}
_position = parser.getTemplateIndex();
// Add the (named) template to the symbol table
if (_name != null) {
Template other = parser.getSymbolTable().addTemplate(this);
if (!resolveNamedTemplates(other, parser)) {
ErrorMsg err =
new ErrorMsg(ErrorMsg.TEMPLATE_REDEF_ERR, _name, this);
parser.reportError(Constants.ERROR, err);
}
// Is this a simple named template?
if (_pattern == null && _mode == null) {
_isSimpleNamedTemplate = true;
}
}
if (_parent instanceof Stylesheet) {
((Stylesheet)_parent).addTemplate(this);
}
parser.setTemplate(this); // set current template
parseChildren(parser);
parser.setTemplate(null); // clear template
|
public void | parseSimplified(com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet stylesheet, com.sun.org.apache.xalan.internal.xsltc.compiler.Parser parser)When the parser realises that it is dealign with a simplified stylesheet
it will create an empty Stylesheet object with the root element of the
stylesheet (a LiteralElement object) as its only child. The Stylesheet
object will then create this Template object and invoke this method to
force some specific behaviour. What we need to do is:
o) create a pattern matching on the root node
o) add the LRE root node (the only child of the Stylesheet) as our
only child node
o) set the empty Stylesheet as our parent
o) set this template as the Stylesheet's only child
_stylesheet = stylesheet;
setParent(stylesheet);
_name = null;
_mode = null;
_priority = Double.NaN;
_pattern = parser.parsePattern(this, "/");
final Vector contents = _stylesheet.getContents();
final SyntaxTreeNode root = (SyntaxTreeNode)contents.elementAt(0);
if (root instanceof LiteralElement) {
addElement(root);
root.setParent(this);
contents.set(0, this);
parser.setTemplate(this);
root.parseContents(parser);
parser.setTemplate(null);
}
|
private boolean | resolveNamedTemplates(com.sun.org.apache.xalan.internal.xsltc.compiler.Template other, com.sun.org.apache.xalan.internal.xsltc.compiler.Parser parser)
if (other == null) return true;
SymbolTable stable = parser.getSymbolTable();
final int us = this.getImportPrecedence();
final int them = other.getImportPrecedence();
if (us > them) {
other.disable();
return true;
}
else if (us < them) {
stable.addTemplate(other);
this.disable();
return true;
}
else {
return false;
}
|
public void | setName(com.sun.org.apache.xalan.internal.xsltc.compiler.QName qname)
if (_name == null) _name = qname;
|
public void | setSimplified()
_simplified = true;
|
public void | translate(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
if (_disabled) return;
// bug fix #4433133, add a call to named template from applyTemplates
String className = classGen.getClassName();
if (_compiled && isNamed()){
String methodName = Util.escape(_name.toString());
il.append(classGen.loadTranslet());
il.append(methodGen.loadDOM());
il.append(methodGen.loadIterator());
il.append(methodGen.loadHandler());
il.append(methodGen.loadCurrentNode());
il.append(new INVOKEVIRTUAL(cpg.addMethodref(className,
methodName,
"("
+ DOM_INTF_SIG
+ NODE_ITERATOR_SIG
+ TRANSLET_OUTPUT_SIG
+ "I)V")));
return;
}
if (_compiled) return;
_compiled = true;
// %OPT% Special handling for simple named templates.
if (_isSimpleNamedTemplate && methodGen instanceof NamedMethodGenerator) {
int numParams = _parameters.size();
NamedMethodGenerator namedMethodGen = (NamedMethodGenerator)methodGen;
// Update load/store instructions to access Params from the stack
for (int i = 0; i < numParams; i++) {
Param param = (Param)_parameters.elementAt(i);
param.setLoadInstruction(namedMethodGen.loadParameter(i));
param.setStoreInstruction(namedMethodGen.storeParameter(i));
}
}
translateContents(classGen, methodGen);
il.setPositions(true);
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type | typeCheck(com.sun.org.apache.xalan.internal.xsltc.compiler.SymbolTable stable)
if (_pattern != null) {
_pattern.typeCheck(stable);
}
return typeCheckContents(stable);
|