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, new XmlReaderSettings { XmlResolver = null })) { 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); } } } }
private IEnumerable <Message> DoExtractMessagesFromFile([NotNull] UFile file, [NotNull] XamlXmlReader reader) { while (reader.Read()) { if (reader.NodeType != XamlNodeType.StartObject) { continue; } var lineNumber = reader.LineNumber; var type = reader.Type.UnderlyingType; if (type == typeof(LocalizeExtension)) { var readSubtree = reader.ReadSubtree(); readSubtree.Read(); // read once to position on the first node var message = ParseLocalizeExtension(readSubtree); message.LineNumber = lineNumber; message.Source = file; yield return(message); } } }