/// <summary> /// Parses a UPX file. /// </summary> /// <param name="inputstream">The inputstream.</param> /// <returns>A List<<see cref="Kanji.DesktopApp.LogicLayer.Character"/>></returns> public static List <Character> ParseUPXFile(Stream inputstream) { XmlTextReader xmlr = new XmlTextReader(inputstream); List <Character> characterList = new List <Character>(); //if we're hitting and end element that is a hLevel stop reading //the ones from the strokes should be read within ReadUPXElementContentAsStroke while (xmlr.Read() && (!IsEndElementTypeWithName(xmlr, "hwData"))) { if (UPXReader.IsUPXhLevelCharacter(xmlr)) { characterList.Add(UPXReader.ReadUPXElementContentAsCharacter(xmlr)); } } return(characterList); }
/// <summary> /// Reads the upx element content as a character. /// </summary> /// <param name="xmlr">The XMLR.</param> /// <returns>An instance of the Character class</returns> public static Character ReadUPXElementContentAsCharacter(this XmlTextReader xmlr) { if (UPXReader.IsUPXhLevelCharacter(xmlr)) { Character c = new Character(); c.SHKK = XmlTools.ReadIDAttribute(xmlr); //now moving to label and reading it //then the radicals //if we're hitting and end element that is an hLevel stop reading //the ones from the Radicals should be eaten within ReadUPXElementContentAsRadical while (xmlr.Read() && (!IsEndElementTypeWithName(xmlr, "hLevel"))) { if (xmlr.NodeType == XmlNodeType.Element) { Radical rTemp = null; switch (xmlr.Name) { case "label": c.Value = ReadUPXElementContentAsLabel(xmlr, c.SHKK); break; case "hLevel": if (IsUPXhLevelRadical(xmlr)) { rTemp = ReadUPXElementContentAsRadical(xmlr); c.RadicalList.Add(rTemp); } break; } } } return(c); } else { throw new Exception(string.Format("Not the correct element. This was a {0}-tag", xmlr.Name)); } }