Пример #1
0
		/// <summary>
		/// Read the LDML file at the root element and populate the writing system.
		/// </summary>
		/// <param name="element">Root element</param>
		/// <param name="ws">Writing System to populate</param>
		/// <remarks>
		/// For elements that have * annotation in the LDML spec, we use the extensions NonAltElement
		/// and NonAltElements to ignore the elements that have the alt attribute.
		/// </remarks>
		private void ReadLdml(XElement element, WritingSystemDefinition ws)
		{
			Debug.Assert(element != null);
			Debug.Assert(ws != null);
			if (element.Name != "ldml")
				throw new ApplicationException("Unable to load writing system definition: Missing <ldml> tag.");

			ResetWritingSystemDefinition(ws);

			XElement identityElem = element.Element("identity");
			if (identityElem != null)
				ReadIdentityElement(identityElem, ws);

			// Check for the proper LDML version after reading identity element so that we have the proper language tag if an error occurs.
			foreach (XElement specialElem in element.NonAltElements("special"))
				CheckVersion(specialElem, ws);

			XElement charactersElem = element.Element("characters");
			if (charactersElem != null)
				ReadCharactersElement(charactersElem, ws);

			XElement delimitersElem = element.Element("delimiters");
			if (delimitersElem != null)
				ReadDelimitersElement(delimitersElem, ws);

			XElement layoutElem = element.Element("layout");
			if (layoutElem != null)
				ReadLayoutElement(layoutElem, ws);

			XElement numbersElem = element.Element("numbers");
			if (numbersElem != null)
				ReadNumbersElement(numbersElem, ws);

			XElement collationsElem = element.Element("collations");
			if (collationsElem != null)
				ReadCollationsElement(collationsElem, ws);

			foreach (XElement specialElem in element.NonAltElements("special"))
				ReadTopLevelSpecialElement(specialElem, ws);

			// Validate collations after all of them have been read in (for self-referencing imports)
			foreach (CollationDefinition cd in ws.Collations)
			{
				string message;
				cd.Validate(out message);
			}
			ws.Id = string.Empty;
			ws.AcceptChanges();
		}