internal void LoadFromReader(XmlReader reader, XmlSpace space)
{
if (reader == null)
{
throw new ArgumentNullException("reader");
}
IXmlLineInfo lineInfo = reader as IXmlLineInfo;
if ((lineInfo == null) || !lineInfo.HasLineInfo())
{
lineInfo = null;
}
this.hasLineInfo = lineInfo != null;
this.nameTable = reader.NameTable;
XPathDocumentBuilder builder = new XPathDocumentBuilder(this, lineInfo, reader.BaseURI, LoadFlags.None);
try
{
bool isEmptyElement;
string str2;
bool flag = reader.ReadState == ReadState.Initial;
int depth = reader.Depth;
string str = this.nameTable.Get("http://www.w3.org/2000/xmlns/");
if (flag && !reader.Read())
{
return;
}
Label_007D:
if (!flag && (reader.Depth < depth))
{
return;
}
switch (reader.NodeType)
{
case XmlNodeType.Element:
isEmptyElement = reader.IsEmptyElement;
builder.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.BaseURI);
goto Label_017B;
case XmlNodeType.Text:
case XmlNodeType.CDATA:
builder.WriteString(reader.Value, TextBlockType.Text);
goto Label_022B;
case XmlNodeType.EntityReference:
reader.ResolveEntity();
goto Label_022B;
case XmlNodeType.ProcessingInstruction:
builder.WriteProcessingInstruction(reader.LocalName, reader.Value, reader.BaseURI);
goto Label_022B;
case XmlNodeType.Comment:
builder.WriteComment(reader.Value);
goto Label_022B;
case XmlNodeType.DocumentType:
{
IDtdInfo dtdInfo = reader.DtdInfo;
if (dtdInfo != null)
{
builder.CreateIdTables(dtdInfo);
}
goto Label_022B;
}
case XmlNodeType.Whitespace:
goto Label_01C9;
case XmlNodeType.SignificantWhitespace:
if (reader.XmlSpace != XmlSpace.Preserve)
{
goto Label_01C9;
}
builder.WriteString(reader.Value, TextBlockType.SignificantWhitespace);
goto Label_022B;
case XmlNodeType.EndElement:
builder.WriteEndElement(false);
goto Label_022B;
default:
goto Label_022B;
}
Label_0113:
str2 = reader.NamespaceURI;
if (str2 == str)
{
if (reader.Prefix.Length == 0)
{
builder.WriteNamespaceDeclaration(string.Empty, reader.Value);
}
else
{
builder.WriteNamespaceDeclaration(reader.LocalName, reader.Value);
}
}
else
{
builder.WriteStartAttribute(reader.Prefix, reader.LocalName, str2);
builder.WriteString(reader.Value, TextBlockType.Text);
builder.WriteEndAttribute();
}
Label_017B:
if (reader.MoveToNextAttribute())
{
goto Label_0113;
}
if (isEmptyElement)
{
builder.WriteEndElement(true);
}
goto Label_022B;
Label_01C9:
if ((space == XmlSpace.Preserve) && (!flag || (reader.Depth != 0)))
{
builder.WriteString(reader.Value, TextBlockType.Whitespace);
}
Label_022B:
if (reader.Read())
{
goto Label_007D;
}
}
finally
{
builder.Close();
}
}