Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }