예제 #1
0
        private Kniha NacistKnihu(XmlNode xml)
        {
            Kniha kniha = new Kniha();

            kniha.Id = xml.SelectSingleNode("@osisID").InnerText;

            // Budeme iterativně zpracovávat seznam XML potomků a přidávát
            // ekvivalenty.
            List <CastTextu> rodice = new List <CastTextu>
            {
                kniha
            };

            // Tento seznam obashuje seznamy XML prvků, které patří do daného rodiče.
            List <List <XmlNode> > xmlProRodice = new List <List <XmlNode> >
            {
                xml.ChildNodes.OfType <XmlNode>().ToList()
            };

            while (rodice.Count > 0)
            {
                CastTextu rodic = rodice[0];
                rodice.RemoveAt(0);

                List <XmlNode> xmlProTohotoRodice = xmlProRodice[0];
                xmlProRodice.RemoveAt(0);

                foreach (XmlNode xmlPotomek in xmlProTohotoRodice)
                {
                    if (xmlPotomek is XmlElement)
                    {
                        XmlElement xmlPotomekElem = xmlPotomek as XmlElement;

                        if (
                            xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") &&
                            xmlPotomek.Attributes["type"].InnerText == "majorSection")
                        {
                            // Máme major section.
                            HlavniCastKnihy hlavniCast = new HlavniCastKnihy
                            {
                                Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText
                            };

                            rodic.PridatPotomka(hlavniCast);
                            rodice.Add(hlavniCast);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (
                            xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") &&
                            xmlPotomek.Attributes["type"].InnerText == "section")
                        {
                            CastKnihy castKnihy = new CastKnihy
                            {
                                Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText.Trim('<', '>', '"')
                            };

                            rodic.PridatPotomka(castKnihy);
                            rodice.Add(castKnihy);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (
                            xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") &&
                            xmlPotomek.Attributes["type"].InnerText == "preface")
                        {
                            // Předmluva.
                            CastKnihy castKnihy = new CastKnihy
                            {
                                Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText
                            };

                            rodic.PridatPotomka(castKnihy);
                            rodice.Add(castKnihy);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "lg")
                        {
                            // Máme báseň.
                            Poezie poezie = new Poezie();

                            rodic.PridatPotomka(poezie);
                            rodice.Add(poezie);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "p")
                        {
                            // Odstavec složený z veršů, řádků básně či dalšího obsahu.
                            Odstavec odstavec = new Odstavec();

                            rodic.PridatPotomka(odstavec);
                            rodice.Add(odstavec);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "chapter")
                        {
                            if (xmlPotomekElem.HasAttribute("osisID") && xmlPotomekElem.HasAttribute("sID"))
                            {
                                UvodKapitoly uvodKapitoly = new UvodKapitoly
                                {
                                    Id = xmlPotomek.SelectSingleNode("@osisID", NsManager).InnerText
                                };

                                rodic.PridatPotomka(uvodKapitoly);
                                rodice.Add(uvodKapitoly);
                                xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                            }
                            else
                            {
                                // Konec kapitoly, zatím se neřeší.
                            }
                        }
                        else if (xmlPotomekElem.Name == "verse")
                        {
                            if (xmlPotomekElem.HasAttribute("osisID"))
                            {
                                Vers vers = new Vers
                                {
                                    Id = xmlPotomek.SelectSingleNode("@osisID", NsManager).InnerText
                                };

                                rodic.PridatPotomka(vers);
                                rodice.Add(vers);
                                xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                            }
                            else
                            {
                                // Konec verše, zatím se neřeší.
                            }
                        }
                        else if (xmlPotomek.Name == "l")
                        {
                            RadekPoezie radekPoezie = new RadekPoezie();

                            rodic.PridatPotomka(radekPoezie);
                            rodice.Add(radekPoezie);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "note")
                        {
                            // Poznámka (pod čarou).
                            Poznamka poznamka = new Poznamka();

                            rodic.PridatPotomka(poznamka);
                            rodice.Add(poznamka);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "i")
                        {
                            // Poznámka (pod čarou).
                            FormatovaniTextu formatovaniTextu = new FormatovaniTextu
                            {
                                Kurziva = true
                            };

                            rodic.PridatPotomka(formatovaniTextu);
                            rodice.Add(formatovaniTextu);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else if (xmlPotomek.Name == "head")
                        {
                            // Poznámka (pod čarou).
                            CastPoezie castPoezie = new CastPoezie();

                            rodic.PridatPotomka(castPoezie);
                            rodice.Add(castPoezie);
                            xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                        }
                        else
                        {
                        }
                    }
                    else if (xmlPotomek is XmlText)
                    {
                        // Máme čistě textový záznam.
                        CastTextuSTextem textovaCast = new CastTextuSTextem
                        {
                            /*
                             * TextovaData = HttpUtility.HtmlEncode(Regex.Replace(
                             * xmlPotomek.Value,
                             * "[\\n\\r ]+$",
                             * " "))
                             */
                            TextovaData = Regex.Replace(
                                xmlPotomek.Value,
                                "[\\n\\r ]+$",
                                " ")
                        };

                        rodic.PridatPotomka(textovaCast);
                        rodice.Add(textovaCast);
                        xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList());
                    }
                    else
                    {
                    }
                }
            }

            return(kniha);
        }
예제 #2
0
        public Start()
        {
            InitializeComponent();
            //获取MC类
            MC mc = MC.GetMC();

            //将Name绑定到mc的Name属性
            GameName.SetBinding(TextBox.TextProperty, new Binding("Name")
            {
                Source = mc, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Mode = BindingMode.TwoWay
            });
            //设置Vers的源由MCseting提供
            Vers.ItemsSource = MCSetting.AllVer;
            //创建启动路由命令
            RoutedCommand StartCommand = new RoutedCommand();

            //设置命令快捷键
            StartCommand.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Alt));
            //创造命令绑定
            CommandBinding StartCommandBinding = new CommandBinding(StartCommand);

            //将Ver绑定
            Vers.SetBinding(ComboBox.SelectedItemProperty, new Binding("Ver")
            {
                Source = mc, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Mode = BindingMode.TwoWay
            });
            //设置什么时候命令可以执行
            StartCommandBinding.CanExecute += (s, e) =>
            {
                if (mc.IsReady())
                {
                    e.CanExecute = true;
                }
                else
                {
                    e.CanExecute = false;
                }
                e.Handled = true;
            };
            //设置执行的内容
            StartCommandBinding.Executed += (s, e) =>
            {
                var setting = MCsettingJSONModel.GetConfig;
                setting.Name = mc.Name;
                var mcsetting = MCSetting.GetSetting();
                setting.JavaPath             = mcsetting.JavaPath;
                setting.MaxRam               = mcsetting.MaxRam;
                setting.MCVer                = mc.Ver.Name;
                MCsettingJSONModel.GetConfig = setting;
                try
                {
                    Load.Visibility = Visibility.Visible;
                    mc.Start();
                    Environment.Exit(0);
                }
                catch (ApplicationException ex)
                {
                    var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo);
                    if (r == MessageBoxResult.Yes)
                    {
                        Environment.FailFast("因异常而终止");
                    }
                }
                catch (System.IO.DirectoryNotFoundException ex)
                {
                    var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo);
                    if (r == MessageBoxResult.Yes)
                    {
                        Environment.FailFast("因异常而终止");
                    }
                }
                catch (System.IO.FileNotFoundException ex)
                {
                    var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo);
                    if (r == MessageBoxResult.Yes)
                    {
                        Environment.FailFast("因异常而终止");
                    }
                }
                finally
                {
                    Load.Visibility = Visibility.Hidden;
                }
                e.Handled = true;
            };
            //添加命令到控件
            Starter.Command = StartCommand;
            //添加命令绑定
            Starter.CommandBindings.Add(StartCommandBinding);
        }