public static bool TryGetSimpleRulesFromCollationNode(string collationXml, out string rules) { if (collationXml == null) { throw new ArgumentNullException("collationXml"); } XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.CloseInput = true; readerSettings.ConformanceLevel = ConformanceLevel.Fragment; readerSettings.IgnoreWhitespace = true; rules = null; using (XmlReader collationReader = XmlReader.Create(new StringReader(collationXml), readerSettings)) { // simple rules can't deal with any non-default settings if (XmlHelpersV0.FindNextElementInSequence(collationReader, "settings", LdmlNodeComparer.CompareElementNames)) { return(false); } if (!XmlHelpersV0.FindNextElementInSequence(collationReader, "rules", LdmlNodeComparer.CompareElementNames)) { rules = string.Empty; return(true); } rules = GetSimpleRulesFromRulesNode(collationReader); } return(rules != null); }
protected string GetSpecialValue(XmlReader reader, string ns, string field) { if (!XmlHelpersV0.FindNextElementInSequence(reader, ns + ":" + field, _nameSpaceManager.LookupNamespace(ns), string.Compare)) { return(string.Empty); } return(reader.GetAttribute("value") ?? string.Empty); }
public static string GetIcuRulesFromCollationNode(string collationXml) { if (collationXml == null) { throw new ArgumentNullException("collationXml"); } XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.CloseInput = true; readerSettings.ConformanceLevel = ConformanceLevel.Fragment; string icuRules = string.Empty; string variableTop = null; int variableTopPositionIfNotUsed = 0; using (XmlReader collationReader = XmlReader.Create(new StringReader(collationXml), readerSettings)) { if (XmlHelpersV0.FindNextElementInSequence(collationReader, "settings", LdmlNodeComparer.CompareElementNames)) { icuRules += GetIcuSettingsFromSettingsNode(collationReader, out variableTop); variableTopPositionIfNotUsed = icuRules.Length; } if (XmlHelpersV0.FindNextElementInSequence(collationReader, "suppress_contractions", LdmlNodeComparer.CompareElementNames)) { icuRules += GetIcuOptionFromNode(collationReader); } if (XmlHelpersV0.FindNextElementInSequence(collationReader, "optimize", LdmlNodeComparer.CompareElementNames)) { icuRules += GetIcuOptionFromNode(collationReader); } if (XmlHelpersV0.FindNextElementInSequence(collationReader, "rules", LdmlNodeComparer.CompareElementNames)) { icuRules += GetIcuRulesFromRulesNode(collationReader, ref variableTop); } } if (variableTop != null) { string variableTopRule = String.Format(NewLine + "&{0} < [variable top]", EscapeForIcu(variableTop)); if (variableTopPositionIfNotUsed == icuRules.Length) { icuRules += variableTopRule; } else { icuRules = String.Format("{0}{1}{2}", icuRules.Substring(0, variableTopPositionIfNotUsed), variableTopRule, icuRules.Substring(variableTopPositionIfNotUsed)); } } return(icuRules.Trim()); }
private static bool FindElement(XmlReader reader, string name) { return(XmlHelpersV0.FindNextElementInSequence(reader, name, LdmlNodeComparerV0.CompareElementNames)); }