Beispiel #1
0
        public void Ymnos_SerializationFull()
        {
            string            xmlString = @"<Ymnos>
                                    <annotation>
					                    <item language=""cs-ru"">Аннотация</item>
				                    </annotation>
                                    <stihos>
							            <item language=""cs-ru"">Стих 1</item>
						            </stihos>
                                    <stihos>
							            <item language=""cs-ru"">Стих 2</item>
						            </stihos>
                                    <text>
						                <item language=""cs-ru"">Текст</item>
					                </text>
				                </Ymnos>"                ;
            TypiconSerializer ser       = new TypiconSerializer();
            Ymnos             element   = ser.Deserialize <Ymnos>(xmlString);

            element.Text["cs-ru"] = "Текст измененный";

            string result = ser.Serialize(element);

            Assert.Pass(result);
        }
Beispiel #2
0
        private void AppendTroparion(Ymnos troparion)
        {
            var view = OutputSectionFactory.Create(troparion, handler.Settings.TypiconVersionId, serializer);

            appendModelAction(new OutputSectionModelCollection()
            {
                view
            });
        }
        private void AppendTroparion(Ymnos troparion)
        {
            var view = ViewModelItemFactory.Create(troparion, handler, serializer);

            appendModelAction(new ElementViewModel()
            {
                view
            });
        }
Beispiel #4
0
        protected virtual void ConstructWithCommonRule(CreateViewModelRequest <YmnosStructureRule> req, string key)
        {
            var children = Serializer.GetCommonRuleChildren(req.Handler.Settings.TypiconVersionId, key);

            //List<RuleElement> children = req.Handler.Settings.TypiconRule.Owner.GetChildren(
            //    new CommonRuleServiceRequest() { Key = key, RuleSerializer = Serializer }).ToList();

            if (req.Element.Structure.Groups.Count > 0)
            {
                //заполняем header - вставляем номер гласа
                ItemText header = (children[0] as TextHolder).Paragraphs[0];

                header.ReplaceForEach("[ihos]", req.Element.Structure.Groups[0].Ihos);
                //string headerText = header.StringExpression;
                //header.StringExpression = headerText.Replace("[ihos]",
                //    req.Handler.Settings.Language.IntConverter.ToString(req.Element.Structure.Groups[0].Ihos));

                //а теперь отсчитываем от последней стихиры и добавляем к ней стих из псалма
                //сам стих удаляем из псалма

                TextHolder psalm = new TextHolder(children[2] as TextHolder);

                for (int i = req.Element.Structure.Groups.Count - 1; i >= 0; i--)
                {
                    YmnosGroup group = req.Element.Structure.Groups[i];

                    for (int n = group.Ymnis.Count - 1; n >= 0; n--)
                    {
                        Ymnos ymnos = group.Ymnis[n];

                        ItemTextNoted stihos = psalm.Paragraphs.Last();

                        ymnos.Stihoi.Add(stihos);

                        psalm.Paragraphs.Remove(stihos);
                    }
                }
            }

            //теперь вставляем шапку
            AppendItem(children[0] as TextHolder);
            AppendItem(children[1] as TextHolder);

            //вставляем псалмы
            if ((req.Element as KekragariaRule).ShowPsalm)
            {
                AppendItem(children[2] as TextHolder);
            }

            void AppendItem(TextHolder textHolder)
            {
                req.AppendModelAction(new OutputSectionModelCollection()
                {
                    OutputSectionFactory.Create(textHolder, req.Handler.Settings.TypiconVersionId, Serializer)
                });
            }
        }
Beispiel #5
0
        private string CreateFakeXml(PlaceYmnosSource place, int ihos, DayOfWeek dayOfWeek)
        {
            string text = string.Format("[{0}] [глас {1}] [{2}] Богородичен из Приложения Ирмология", place, ihos, dayOfWeek);

            Ymnos ymnos = new Ymnos();

            ymnos.Text.AddElement("cs-ru", text);

            return(new TypiconSerializer().Serialize(ymnos));
        }
        private IEnumerable <Ymnos> GetYmnis(Odi odi)
        {
            List <Ymnos> result = new List <Ymnos>();

            //включаем фильтрацию
            //не берем ирмосы, катавасии и мученичны - если указано
            List <Ymnos> ymnis = odi.Troparia.FindAll(c => (UseMartyrion)
                                        ? c.Kind != YmnosKind.Irmos && c.Kind != YmnosKind.Katavasia
                                        : c.Kind != YmnosKind.Irmos && c.Kind != YmnosKind.Katavasia && c.Kind != YmnosKind.Martyrion);

            if (ymnis == null)
            {
                return(result);
            }

            //если есть ирмосы, вычитаем их количество
            int count = Count - IrmosCount;

            if (ymnis.Count >= count)
            {
                result.AddRange(ymnis.Take(count));
            }
            else
            {
                /*если заявленное количество больше того, что есть, выдаем с повторами
                 * например: 8 = 3 3 2
                 *           10= 4 4 3
                 */

                int appendedCount = 0;

                int i = 0;

                while (appendedCount < count)
                {
                    //округляем в большую сторону результат деления count на YmnosStructureCount
                    //в результате получаем, сколько раз необходимо повторять песнопение
                    int b = (int)Math.Ceiling((double)(count - appendedCount) / (ymnis.Count - i));

                    Ymnos ymnosToAdd = ymnis[i];

                    while (b > 0)
                    {
                        result.Add(new Ymnos(ymnosToAdd));

                        b--;
                        appendedCount++;
                    }

                    i++;
                }
            }

            return(result);
        }
        public override DayElementBase Calculate(RuleHandlerSettings settings)
        {
            Kanonas result = null;
            Kanonas source = GetKanonas(settings);

            if (source != null)
            {
                result = new Kanonas()
                {
                    Acrostic   = source.Acrostic,
                    Annotation = source.Annotation,
                    Ihos       = source.Ihos,
                    Stihos     = source.Stihos
                };

                foreach (Odi odi in source.Odes)
                {
                    Odi o = new Odi()
                    {
                        Number = odi.Number
                    };

                    //добавляем ирмос(ы)
                    Ymnos irmos = odi.Troparia.Find(c => c.Kind == YmnosKind.Irmos);

                    int troparia = IrmosCount;
                    while (troparia > 0)
                    {
                        o.Troparia.Add(irmos);
                        troparia--;
                    }

                    //добавляем тропари
                    o.Troparia.AddRange(GetYmnis(odi));

                    //if (IncludeKatavasia
                    //     && (odi.Number == 3 || odi.Number == 6 || odi.Number == 8 || odi.Number == 9))
                    //{
                    //    //добавляем ирмос в качестве катавасии
                    //    Ymnos katavasia = new Ymnos(irmos)
                    //    {
                    //        Kind = YmnosKind.Katavasia
                    //    };
                    //    o.Troparia.Add(katavasia);
                    //}

                    //добавляем саму песнь
                    result.Odes.Add(o);
                }
            }

            return(result);
        }
Beispiel #8
0
        public void Ymnos_Deserialization()
        {
            string            xmlString = @"<Ymnos>
                                    <text>
						                <item language=""cs-ru"">[item] [sign] Господи воззвах, Славник</item>
					                </text>
				                </Ymnos>"                ;
            TypiconSerializer ser       = new TypiconSerializer();
            Ymnos             element   = ser.Deserialize <Ymnos>(xmlString);

            Assert.IsFalse(element.Text.IsEmpty);
            Assert.Pass(element.Text["cs-ru"]);
        }
        private string CreateFakeXml(TheotokionAppPlace place, int ihos, DayOfWeek dayOfWeek)
        {
            string text = string.Format("[{0}] [глас {1}] [{2}] Богородичен из Приложения Ирмология", place, ihos, dayOfWeek);

            Ymnos ymnos = new Ymnos();

            ymnos.Text.AddOrUpdate(new ItemTextUnit()
            {
                Language = "cs-ru", Text = text
            });

            return(new TypiconSerializer().Serialize(ymnos));
        }
        public static OutputSectionModel Create(Ymnos ymnos, int typiconVersionId, IRuleSerializerRoot serializer)
        {
            var kind = Cast(ymnos.Kind);

            return(new OutputSectionModel()
            {
                Kind = Cast(ymnos.Kind),
                KindText = GetKindItemTextValue(kind, typiconVersionId, serializer),
                Paragraphs = new List <ItemTextNoted>()
                {
                    new ItemTextNoted(ymnos.Text)
                }
            });
        }
Beispiel #11
0
        public static ViewModelItem Create(Ymnos ymnos, IRuleHandler handler, IRuleSerializerRoot serializer)
        {
            var kind = Cast(ymnos.Kind);

            return(new ViewModelItem()
            {
                Kind = Cast(ymnos.Kind),
                KindStringValue = GetKindStringValue(kind, handler, serializer),
                Paragraphs = new List <ParagraphViewModel>()
                {
                    ParagraphVMFactory.Create(ymnos.Text, handler.Settings.Language.Name)
                }
            });
        }
Beispiel #12
0
        public void Ymnos_DeserializationTextRequired()
        {
            string            xmlString = @"<Ymnos>
                                    <annotation>
					                    <item language=""cs-ru"">Творе́ние господи́на Пахо́мия мона́ха.</item>
				                    </annotation>
                                    <stihos>
							            <item language=""cs-ru"">[item] [sign] Вечерня. На стиховне, Стих 1-й стихиры.</item>
						            </stihos>
                                    <stihos>
							            <item language=""cs-ru"">[item] [sign] Вечерня. На стиховне, Стих 2-й стихиры.</item>
						            </stihos>
				                </Ymnos>"                ;
            TypiconSerializer ser       = new TypiconSerializer();
            Ymnos             element   = ser.Deserialize <Ymnos>(xmlString);

            Assert.IsFalse(element.IsValid);
        }
        public DayElementBase CalculateEveryDayKatavasia(RuleHandlerSettings settings)
        {
            Kanonas result = null;
            Kanonas source = GetKanonas(settings);

            if (source != null)
            {
                result = new Kanonas()
                {
                    Acrostic   = source.Acrostic,
                    Annotation = source.Annotation,
                    Ihos       = source.Ihos,
                    Stihos     = source.Stihos
                };

                foreach (Odi odi in source.Odes)
                {
                    Odi o = new Odi()
                    {
                        Number = odi.Number
                    };

                    //ирмос
                    Ymnos irmos = odi.Troparia.Find(c => c.Kind == YmnosKind.Irmos);

                    if ((odi.Number == 3 || odi.Number == 6 || odi.Number == 8 || odi.Number == 9))
                    {
                        //добавляем ирмос в качестве катавасии
                        Ymnos katavasia = new Ymnos(irmos)
                        {
                            Kind = YmnosKind.Katavasia
                        };
                        o.Troparia.Add(katavasia);
                    }

                    //добавляем саму песнь
                    result.Odes.Add(o);
                }
            }

            return(result);
        }
        /// <summary>
        /// Используется для добавления выходной модели песни в каноне Утрени.
        /// </summary>
        /// <param name="odi"></param>
        /// <param name="katavasiaHeader">Если не null, то считаем, что это последний канон, в который необходимо вставить заголовок Катавасия</param>
        /// <param name="isOdi8">Если true, обавляет "Благословим" вместо "Славы", в 8-ую песнь вставляет стих "Хвалим, благословим..."</param>
        public void AppendViewModel(AppendViewModelOdiRequest req)
        {
            if (req.Odi == null)
            {
                //TODO: просто ничего не делаем, хотя надо бы это обрабатывать
                return;
            }

            for (int i = 0; i < req.Odi.Troparia.Count; i++)
            {
                Ymnos troparion = req.Odi.Troparia[i];
                //добавляем припев, только если это не катавасия
                if (troparion.Kind != YmnosKind.Katavasia)
                {
                    AppendChorus(req.Odi, req.IsLastKanonas, req.IsOdi8, i, req.DefaultChorus);
                }

                AppendTroparion(troparion);
            }
        }
Beispiel #15
0
        public void Ymnos_DeserializationFull()
        {
            string            xmlString = @"<Ymnos>
                                    <annotation>
					                    <item language=""cs-ru"">Аннотация</item>
				                    </annotation>
                                    <stihos>
							            <item language=""cs-ru"">Стих 1</item>
						            </stihos>
                                    <stihos>
							            <item language=""cs-ru"">Стих 2</item>
						            </stihos>
                                    <text>
						                <item language=""cs-ru"">Текст</item>
					                </text>
				                </Ymnos>"                ;
            TypiconSerializer ser       = new TypiconSerializer();
            Ymnos             element   = ser.Deserialize <Ymnos>(xmlString);

            Assert.IsFalse(element.Text.IsEmpty);
            Assert.Pass(element.Text["cs-ru"]);
        }
Beispiel #16
0
        private ItemText GetChorus(ChorusKind kind, Ymnos troparion, ItemText defaultChorus)
        {
            ItemText result = null;

            //выбираем какой предустановленный тип припева отображен в тропаре
            if (troparion.Kind == YmnosKind.Ymnos && kind == ChorusKind.Common)
            {
                return(defaultChorus);
            }

            int index = -1;

            switch (kind)
            {
            case ChorusKind.Slava:
                index = 0;
                break;

            case ChorusKind.Blagoslovim:
                index = 1;
                break;

            case ChorusKind.Inyne:
                index = 2;
                break;

            default:
                switch (troparion.Kind)
                {
                case YmnosKind.Ierarhon:
                    index = 3;
                    break;

                case YmnosKind.Martyrion:
                    index = 4;
                    break;

                case YmnosKind.Nekrosimo:
                    index = 5;
                    break;

                case YmnosKind.Osion:
                    index = 6;
                    break;

                case YmnosKind.Theotokion:
                    index = 7;
                    break;

                case YmnosKind.Triadiko:
                    index = 8;
                    break;

                case YmnosKind.Irmos:
                    //оставляем пустым значение
                    break;

                case YmnosKind.Katavasia:
                    //оставляем пустым значение
                    break;
                    //case YmnosKind.Ymnos:
                    //    break;
                }
                break;
            }

            if (index >= 0)
            {
                result = choruses[index]?.Paragraphs[0];
            }

            return(result);
        }