private LocalizedString AddReference(LocalizedString localizedString, XmlTextReader reader, string xamlPath) { if (reader.HasLineInfo ()) { localizedString.AddReference (RelativeDocumentUrl (xamlPath), reader.LineNumber); } return localizedString; }
private IEnumerable<LocalizedString> Parse(string xamlPath) { using (var reader = new XmlTextReader (xamlPath)) { while (reader.Read ()) { if (reader.NodeType != XmlNodeType.Element || !reader.HasAttributes) { continue; } var in_app_bar = false; if (reader.NamespaceURI.Contains ("clr-namespace:Microsoft.Phone.Shell")) { var name = reader.Name.Substring (reader.Prefix.Length + 1); in_app_bar = name == "ApplicationBarIconButton" || name == "ApplicationBarMenuItem"; } var localized_string = new LocalizedString (); while (reader.MoveToNextAttribute ()) { if (!in_app_bar && !reader.NamespaceURI.Contains ("clr-namespace:Vernacular.Xaml")) { continue; } var name = String.IsNullOrEmpty (reader.Prefix) ? reader.Name : reader.Name.Substring (reader.Prefix.Length + 1); switch (name) { case "Text": // only valid when in_app_bar is true case "Catalog.Message": localized_string.UntranslatedSingularValue = reader.Value; if (reader.HasLineInfo ()) { localized_string.AddReference (RelativeDocumentUrl (xamlPath), reader.LineNumber); } break; case "Catalog.PluralMessage": localized_string.UntranslatedPluralValue = reader.Value; break; case "Catalog.Comment": localized_string.DeveloperComments = reader.Value; break; } } if (localized_string.IsDefined) { yield return localized_string; } reader.MoveToElement (); } } }