Beispiel #1
0
        private SisulizerProject AddProject(string projectName)
        {
            var sisulizerProject = new SisulizerProject(this, projectName);

            this.projects.Add(sisulizerProject);
            return(sisulizerProject);
        }
Beispiel #2
0
        private void ParseStream(Stream fileStream)
        {
            using (var xr = XmlReader.Create(fileStream))
            {
                SisulizerProject sisulizerProject = null;
                var mostRecentNativeText          = string.Empty;
                var mostRecentLanguage            = string.Empty;
                var mostRecentStatus  = LangStatus.Undefined;
                var mostRecentIsValid = false;
                var sisulizerNodeType = SisulizerNodeType.Undefined;

                // we are forward-only, so we need to store what we encounter and only act on it when the end-element is reached
                while (xr.Read())
                {
                    switch (xr.NodeType)
                    {
                    case XmlNodeType.Element:
                        switch (xr.Name)
                        {
                        case "source":
                            var projectName = xr.GetAttribute("name");
                            if (this.options.Verbose)
                            {
                                Console.WriteLine("Encountered new project " + projectName);
                            }

                            sisulizerProject = this.AddProject(projectName);
                            break;

                        case "node":
                            if (xr.GetAttribute("excluded") == "1")
                            {
                                xr.ReadInnerXml(); // we don't need the inner xml, we just want to skip over it and move the reader forward
                            }

                            break;

                        case "row":
                            if (SkipRow(xr.GetAttribute("id")) || xr.GetAttribute("hidden") == "1")
                            {
                                xr.ReadInnerXml(); // we don't need the inner xml, we just want to skip over it and move the reader forward
                            }
                            else
                            {
                                ////foo.Add(xr.GetAttribute("id"));
                                sisulizerNodeType = SisulizerNodeType.Row;
                            }

                            break;

                        case "native":
                            sisulizerNodeType = SisulizerNodeType.Native;
                            break;

                        case "lang":
                            sisulizerNodeType  = SisulizerNodeType.Lang;
                            mostRecentLanguage = xr.GetAttribute("id");
                            mostRecentStatus   = GetStatusFromInt(xr.GetAttribute("status"));
                            mostRecentIsValid  = xr.GetAttribute("invalidated") != "1";

                            break;

                        default:
                            sisulizerNodeType = SisulizerNodeType.Undefined;
                            break;
                        }

                        break;

                    case XmlNodeType.Text:
                        switch (sisulizerNodeType)
                        {
                        case SisulizerNodeType.Row:
                        case SisulizerNodeType.Native:
                            mostRecentNativeText = xr.Value;
                            sisulizerProject?.IncNative(mostRecentNativeText, string.Empty);
                            break;

                        case SisulizerNodeType.Lang:
                            var translatedText = xr.Value;
                            sisulizerProject?.IncLanguage(mostRecentLanguage, mostRecentStatus, mostRecentIsValid, mostRecentNativeText, translatedText);
                            break;
                        }
                        break;

                    case XmlNodeType.EndElement:
                    {
                        sisulizerNodeType = SisulizerNodeType.Undefined;
                        break;
                    }
                    }
                }
            }

            ////var sb = new StringBuilder();
            ////foreach (var text in foo.OrderBy(x => x))
            ////{
            ////  sb.AppendLine(text);
            ////}

            ////File.WriteAllText("rowids.txt", sb.ToString());
        }