Exemplo n.º 1
0
        /// <summary>
        /// Parses a UPX file.
        /// </summary>
        /// <param name="inputstream">The inputstream.</param>
        /// <returns>A List&lt;<see cref="Kanji.DesktopApp.LogicLayer.Character"/>&gt;</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);
        }
Exemplo n.º 2
0
        /// <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));
            }
        }