private ModifiedYear CreateModifiedYear(TypiconEntity typicon, DateTime date) { //По умолчанию добавляем год, пусть он и останется пустым ModifiedYear modifiedYear = new ModifiedYear() { Year = date.Year }; DateTime indexDate = new DateTime(date.Year, 1, 1); //формируем список дней для изменения до 1 января будущего года DateTime endDate = new DateTime(date.Year + 1, 1, 1); while (indexDate != endDate) { //Menology //находим правило для конкретного дня Минеи MenologyRule menologyRule = typicon.GetMenologyRule(indexDate); if (menologyRule == null) { throw new ArgumentNullException("MenologyRule"); } InterpretMenologyRule(menologyRule, indexDate, date.Year); indexDate = indexDate.AddDays(1); } //теперь обрабатываем переходящие минейные праздники //у них не должны быть определены даты. так их и найдем typicon.MenologyRules.FindAll(c => (c.Date.IsEmpty && c.DateB.IsEmpty)). ForEach(a => { InterpretMenologyRule(a, date, date.Year); //не нашел другого способа, как только два раза вычислять изменяемые дни InterpretMenologyRule(a, date.AddYears(1), date.Year); }); //Triodion //найти текущую Пасху //Для каждого правила выполнять interpret(), где date = текущая Пасха. AddDays(Day.DaysFromEaster) DateTime easter = Serializer.BookStorage.Easters.GetCurrentEaster(date.Year); typicon.TriodionRules. ForEach(a => { RuleElement rule = a.GetRule(Serializer); if (rule != null) { ModificationsRuleHandler handler = new ModificationsRuleHandler( new RuleHandlerSettings(a), date.Year); int i = a.DaysFromEaster; rule.Interpret(easter.AddDays(i), handler); } }); return(modifiedYear); void InterpretMenologyRule(MenologyRule menologyRule, DateTime dateToInterpret, int year) { if (menologyRule != null) { ModificationsRuleHandler handler = new ModificationsRuleHandler( new RuleHandlerSettings(menologyRule), year); //выполняем его menologyRule.GetRule(Serializer).Interpret(dateToInterpret, handler); } } }
private static ModifiedYear CreateModifiedYear(TypiconEntity typicon, DateTime date, IRuleSerializerRoot serializer) { ModificationsRuleHandler handler = new ModificationsRuleHandler(date.Year); DateTime indexDate = new DateTime(date.Year, 1, 1); //формируем список дней для изменения до 1 января будущего года DateTime endDate = new DateTime(date.Year + 1, 1, 1); while (indexDate != endDate) { //Menology //находим правило для конкретного дня Минеи MenologyRule menologyRule = typicon.GetMenologyRule(indexDate); if (menologyRule == null) { throw new ArgumentNullException("MenologyRule"); } InterpretMenologyRule(menologyRule, indexDate, handler); indexDate = indexDate.AddDays(1); } //теперь обрабатываем переходящие минейные праздники //у них не должны быть определены даты. так их и найдем typicon.MenologyRules.FindAll(c => (c.Date.IsEmpty && c.DateB.IsEmpty)). ForEach(a => { InterpretMenologyRule(a, date, handler); //не нашел другого способа, как только два раза вычислять изменяемые дни InterpretMenologyRule(a, date.AddYears(1), handler); }); //Triodion //найти текущую Пасху //Для каждого правила выполнять interpret(), где date = текущая Пасха. AddDays(Day.DaysFromEaster) DateTime easter = serializer.BookStorage.Easters.GetCurrentEaster(date.Year); typicon.TriodionRules. ForEach(a => { handler.Settings.Rule = a; handler.Settings.Date = easter.AddDays(a.DaysFromEaster); a.GetRule(serializer)?.Interpret(handler); //RuleElement rule = a.GetRule(serializer); //if (rule != null) //{ // ModificationsRuleHandler handler = new ModificationsRuleHandler( // new RuleHandlerSettings(a, easter.AddDays(a.DaysFromEaster)), date.Year); // rule.Interpret(handler); //} }); return(typicon.ModifiedYears.FirstOrDefault(m => m.Year == date.Year));; void InterpretMenologyRule(MenologyRule menologyRule, DateTime dateToInterpret, /*int year, */ ModificationsRuleHandler h) { if (menologyRule != null) { h.Settings.Rule = menologyRule; h.Settings.Date = dateToInterpret; //ModificationsRuleHandler handler = new ModificationsRuleHandler( // new RuleHandlerSettings(, dateToInterpret), year); //выполняем его menologyRule.GetRule(serializer)?.Interpret(h); } } }