public static Element Parse(StringReader reader)
{
Element element = new Element();
int next = reader.Peek();
switch (next)
{
case '/':
{
element.ElementType = ElementType.AnyHierarchical;
reader.Read();
break;
}
case '.':
{
element.ElementType = ElementType.AnyComponent;
reader.Read();
break;
}
case '<':
{
element.ElementType = ElementType.ForwardReference;
reader.Read();
if (reader.Peek() == '#')
{
element.IncludeSubtypes = false;
reader.Read();
}
if (reader.Peek() == '!')
{
element.ElementType = ElementType.InverseReference;
reader.Read();
}
element.ReferenceTypeName = ParseName(reader, true);
break;
}
default:
{
element.ElementType = ElementType.AnyHierarchical;
break;
}
}
element.TargetName = ParseName(reader, false);
return element;
}
#endregion