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); }
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 }); }
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) }); } }
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); }
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) } }); }
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) } }); }
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); } }
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"]); }
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); }