public static void GetNamespacesLineInfo(string sourceXamlFileName, Dictionary<string, int> lineNumbersForNSes, Dictionary<string, int> lineNumbersForNSesForImpl)
{
// read until StartMember: TextExpression.NamespacesForImplementation OR TextExpression.Namespaces
// create a subtree reader,
// in the subtree,
// look for StartObject nodes of String type. their values are added to either LineNumbersForNSes or LineNumbersForNSesForImpl dictionaries.
if (!File.Exists(sourceXamlFileName))
{
return;
}
using (XmlReader xmlReader = XmlReader.Create(sourceXamlFileName))
{
using (XamlXmlReader xreader = new XamlXmlReader(xmlReader, new XamlXmlReaderSettings() { ProvideLineInfo = true }))
{
bool hasHitFirstStartObj = false;
while (!hasHitFirstStartObj && xreader.Read())
{
if (xreader.NodeType == XamlNodeType.StartObject)
{
hasHitFirstStartObj = true;
}
}
if (hasHitFirstStartObj)
{
xreader.Read();
do
{
if (IsStartMemberTextExprNS(xreader))
{
XamlReader subTreeReader = xreader.ReadSubtree();
WalkSubTree(subTreeReader, lineNumbersForNSes);
}
else if (IsStartMemberTextExprNSForImpl(xreader))
{
XamlReader subTreeReader = xreader.ReadSubtree();
WalkSubTree(subTreeReader, lineNumbersForNSesForImpl);
}
else
{
xreader.Skip();
}
}
while (!xreader.IsEof);
}
}
}
}