private void LoadAttributeSet(NsDecl stylesheetNsList)
{
ContextInfo ctxInfo = _input.GetAttributes(_attributeSetAttributes);
ctxInfo.nsList = MergeNamespaces(ctxInfo.nsList, stylesheetNsList);
QilName setName = ParseQNameAttribute(0);
Debug.Assert(setName != null, "Required attribute always != null");
AttributeSet set;
if (!_curStylesheet.AttributeSets.TryGetValue(setName, out set))
{
set = f.AttributeSet(setName);
// First definition for setName within this stylesheet
_curStylesheet.AttributeSets[setName] = set;
if (!_compiler.AttributeSets.ContainsKey(setName))
{
// First definition for setName overall, adding it to the list here
// to ensure stable order of prototemplate functions in QilExpression
_compiler.AllTemplates.Add(set);
}
}
List<XslNode> content = new List<XslNode>();
if (_input.MoveToXsltAttribute(1, "use-attribute-sets"))
{
AddUseAttributeSets(content);
}
QName parentName = _input.ElementName;
if (_input.MoveToFirstChild())
{
do
{
switch (_input.NodeType)
{
case XmlNodeType.Element:
// Only xsl:attribute's are allowed here
if (_input.IsXsltKeyword(_atoms.Attribute))
{
AddInstruction(content, XslAttribute());
}
else
{
ReportError(/*[XT_006]*/SR.Xslt_UnexpectedElement, _input.QualifiedName, parentName);
_input.SkipNode();
}
break;
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
break;
default:
Debug.Assert(_input.NodeType == XmlNodeType.Text);
ReportError(/*[XT_006]*/SR.Xslt_TextNodesNotAllowed, parentName);
break;
}
} while (_input.MoveToNextSibling());
}
set.AddContent(SetInfo(f.List(), LoadEndTag(content), ctxInfo));
}