/// ------------------------------------------------------------------------------------ /// <summary> /// Loads the valid characters from the specified language definition into a new /// instance of the <see cref="ValidCharacters"/> class. /// </summary> /// <param name="ws">The writing system.</param> /// <param name="exceptionHandler">The exception handler to use if valid character data /// cannot be loaded.</param> /// <param name="legacyOverridesFile"></param> /// <returns>A <see cref="ValidCharacters"/> initialized with the valid characters data /// from the language definition.</returns> /// ------------------------------------------------------------------------------------ public static ValidCharacters Load(IWritingSystem ws, LoadExceptionDelegate exceptionHandler, string legacyOverridesFile) { ValidCharacters validChars = Load(ws.ValidChars, ws.DisplayLabel, ws, exceptionHandler, legacyOverridesFile); if (validChars != null) { validChars.InitSortComparer(ws); } return(validChars); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Loads the valid characters from the specified language definition into a new /// instance of the <see cref="ValidCharacters"/> class. /// </summary> /// <param name="ws">The writing system.</param> /// <param name="exceptionHandler">The exception handler to use if valid character data /// cannot be loaded.</param> /// <returns>A <see cref="ValidCharacters"/> initialized with the valid characters data /// from the language definition.</returns> /// ------------------------------------------------------------------------------------ public static ValidCharacters Load(CoreWritingSystemDefinition ws, LoadExceptionDelegate exceptionHandler = null) { var validChars = new ValidCharacters(); validChars.LoadException += exceptionHandler; var invalidChars = new List <string>(); validChars.AddCharactersFromWritingSystem(ws, "main", ValidCharacterType.WordForming, invalidChars); validChars.AddCharactersFromWritingSystem(ws, "numeric", ValidCharacterType.Numeric, invalidChars); validChars.AddCharactersFromWritingSystem(ws, "punctuation", ValidCharacterType.Other, invalidChars); if (invalidChars.Count > 0) { var bldr = new StringBuilder(); bldr.AppendFormat("Invalid ValidChars field while loading the {0} writing system. The following characters are invalid:", ws.DisplayLabel); foreach (string chr in invalidChars) { bldr.Append(Environment.NewLine); bldr.Append("\t"); bldr.AppendFormat("{0} (U+{1:X4}", chr, (int)chr[0]); for (int ich = 1; ich < chr.Length; ich++) { bldr.AppendFormat(", U+{0:X4}", (int)chr[ich]); } bldr.Append(")"); } validChars.ReportError(new ArgumentException(bldr.ToString(), "ws")); } if (invalidChars.Count > 0 && validChars.m_wordFormingCharacters.Count == 0) { validChars.m_wordFormingCharacters.AddRange(DefaultWordformingChars); validChars.Sort(validChars.m_wordFormingCharacters); } validChars.InitSortComparer(ws); return(validChars); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Loads the specified XML source to initialize a new instance of the /// <see cref="ValidCharacters"/> class. /// </summary> /// <param name="xmlSrc">The XML source representation.</param> /// <param name="wsName">The name of the writing system that is being loaded</param> /// <param name="ws">The writing system</param> /// <param name="exceptionHandler">The exception handler to use if valid character data /// cannot be loaded.</param> /// <param name="legacyOverridesFile"></param> /// <returns></returns> /// ------------------------------------------------------------------------------------ public static ValidCharacters Load(string xmlSrc, string wsName, IWritingSystem ws, LoadExceptionDelegate exceptionHandler, string legacyOverridesFile) { Exception e; var validChars = XmlSerializationHelper.DeserializeFromString <ValidCharacters>(xmlSrc, out e); bool fTryOldStyleList = false; if (validChars != null) { validChars.LoadException += exceptionHandler; } else { validChars = new ValidCharacters(); validChars.LoadException += exceptionHandler; if (e != null) { fTryOldStyleList = !DataAppearsToBeMalFormedXml(xmlSrc); } if (!fTryOldStyleList && !String.IsNullOrEmpty(xmlSrc)) { var bldr = new StringBuilder(); bldr.AppendFormat("Invalid ValidChars field while loading the {0} writing system:", wsName); bldr.Append(Environment.NewLine); bldr.Append("\t"); bldr.Append(xmlSrc); validChars.ReportError(new ArgumentException(bldr.ToString(), "xmlSrc", e)); } } validChars.m_legacyOverridesFile = legacyOverridesFile; List <string> invalidChars = validChars.Init(); if (fTryOldStyleList) { e = null; List <string> list = ParseCharString(xmlSrc, " ", validChars.m_cpe, out invalidChars); validChars.AddCharacters(list); } if (invalidChars.Count > 0) { var bldr = new StringBuilder(); bldr.AppendFormat("Invalid ValidChars field while loading the {0} writing system. The following characters are invalid:", wsName); foreach (string chr in invalidChars) { bldr.Append(Environment.NewLine); bldr.Append("\t"); bldr.AppendFormat("{0} (U+{1:X4}", chr, (int)chr[0]); for (int ich = 1; ich < chr.Length; ich++) { bldr.AppendFormat(", U+{0:X4}", (int)chr[ich]); } bldr.Append(")"); } validChars.ReportError(new ArgumentException(bldr.ToString(), "xmlSrc")); } if ((e != null || invalidChars.Count > 0) && validChars.m_WordFormingCharacters.Count == 0) { validChars.AddDefaultWordformingCharOverrides(); } return(validChars); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Loads the specified XML source to initialize a new instance of the /// <see cref="ValidCharacters"/> class. /// </summary> /// <param name="xmlSrc">The XML source representation.</param> /// <param name="wsName">The name of the writing system that is being loaded</param> /// <param name="ws">The writing system</param> /// <param name="exceptionHandler">The exception handler to use if valid character data /// cannot be loaded.</param> /// <param name="legacyOverridesFile"></param> /// <returns></returns> /// ------------------------------------------------------------------------------------ public static ValidCharacters Load(string xmlSrc, string wsName, IWritingSystem ws, LoadExceptionDelegate exceptionHandler, string legacyOverridesFile) { Exception e; var validChars = XmlSerializationHelper.DeserializeFromString<ValidCharacters>(xmlSrc, out e); bool fTryOldStyleList = false; if (validChars != null) { validChars.LoadException += exceptionHandler; } else { validChars = new ValidCharacters(); validChars.LoadException += exceptionHandler; if (e != null) fTryOldStyleList = !DataAppearsToBeMalFormedXml(xmlSrc); if (!fTryOldStyleList && !String.IsNullOrEmpty(xmlSrc)) { var bldr = new StringBuilder(); bldr.AppendFormat("Invalid ValidChars field while loading the {0} writing system:", wsName); bldr.Append(Environment.NewLine); bldr.Append("\t"); bldr.Append(xmlSrc); validChars.ReportError(new ArgumentException(bldr.ToString(), "xmlSrc", e)); } } validChars.m_legacyOverridesFile = legacyOverridesFile; List<string> invalidChars = validChars.Init(); if (fTryOldStyleList) { e = null; List<string> list = ParseCharString(xmlSrc, " ", validChars.m_cpe, out invalidChars); validChars.AddCharacters(list); } if (invalidChars.Count > 0) { var bldr = new StringBuilder(); bldr.AppendFormat("Invalid ValidChars field while loading the {0} writing system. The following characters are invalid:", wsName); foreach (string chr in invalidChars) { bldr.Append(Environment.NewLine); bldr.Append("\t"); bldr.AppendFormat("{0} (U+{1:X4}", chr, (int)chr[0]); for (int ich = 1; ich < chr.Length; ich++) bldr.AppendFormat(", U+{0:X4}", (int)chr[ich]); bldr.Append(")"); } validChars.ReportError(new ArgumentException(bldr.ToString(), "xmlSrc")); } if ((e != null || invalidChars.Count > 0) && validChars.m_WordFormingCharacters.Count == 0) validChars.AddDefaultWordformingCharOverrides(); return validChars; }
/// ------------------------------------------------------------------------------------ /// <summary> /// Loads the valid characters from the specified language definition into a new /// instance of the <see cref="ValidCharacters"/> class. /// </summary> /// <param name="ws">The writing system.</param> /// <param name="exceptionHandler">The exception handler to use if valid character data /// cannot be loaded.</param> /// <param name="legacyOverridesFile"></param> /// <returns>A <see cref="ValidCharacters"/> initialized with the valid characters data /// from the language definition.</returns> /// ------------------------------------------------------------------------------------ public static ValidCharacters Load(IWritingSystem ws, LoadExceptionDelegate exceptionHandler, string legacyOverridesFile) { ValidCharacters validChars = Load(ws.ValidChars, ws.DisplayLabel, ws, exceptionHandler, legacyOverridesFile); if (validChars != null) validChars.InitSortComparer(ws); return validChars; }