예제 #1
0
        /// ------------------------------------------------------------------------------------
        /// <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);
        }
예제 #2
0
        /// ------------------------------------------------------------------------------------
        /// <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);
        }
예제 #3
0
        /// ------------------------------------------------------------------------------------
        /// <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);
        }
예제 #4
0
		/// ------------------------------------------------------------------------------------
		/// <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;
		}
예제 #5
0
		/// ------------------------------------------------------------------------------------
		/// <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;
		}