private void LoadTemplate(NsDecl stylesheetNsList)
{
Debug.Assert(_curTemplate == null);
ContextInfo ctxInfo = _input.GetAttributes(_templateAttributes);
ctxInfo.nsList = MergeNamespaces(ctxInfo.nsList, stylesheetNsList);
string match = ParseStringAttribute(0, "match");
QilName name = ParseQNameAttribute(1);
double priority = double.NaN;
if (_input.MoveToXsltAttribute(2, "priority"))
{
priority = XPathConvert.StringToDouble(_input.Value);
if (double.IsNaN(priority) && !_input.ForwardCompatibility)
{
ReportError(/*[XT0530]*/SR.Xslt_InvalidAttrValue, "priority", _input.Value);
}
}
QilName mode = V1 ? ParseModeAttribute(3) : ParseModeListAttribute(3);
if (match == null)
{
CheckError(!_input.AttributeExists(1, "name"), /*[XT_007]*/SR.Xslt_BothMatchNameAbsent);
CheckError(_input.AttributeExists(3, "mode"), /*[XT_008]*/SR.Xslt_ModeWithoutMatch);
mode = nullMode;
if (_input.AttributeExists(2, "priority"))
{
if (V1)
{
ReportWarning(/*[XT_008]*/SR.Xslt_PriorityWithoutMatch);
}
else
{
ReportError(/*[XT_008]*/SR.Xslt_PriorityWithoutMatch);
}
}
}
if (_input.MoveToXsltAttribute(4, "as"))
{
ReportNYI("xsl:template/@as");
}
_curTemplate = f.Template(name, match, mode, priority, _input.XslVersion);
// Template without match considered to not have mode and can't call xsl:apply-imports
_input.CanHaveApplyImports = (match != null);
SetInfo(_curTemplate,
LoadEndTag(LoadInstructions(InstructionFlags.AllowParam)), ctxInfo
);
if (!_curStylesheet.AddTemplate(_curTemplate))
{
ReportError(/*[XT0660]*/SR.Xslt_DupTemplateName, _curTemplate.Name.QualifiedName);
}
_curTemplate = null;
}