Skip to content

Commit

Permalink
YearlyOnMonth
Browse files Browse the repository at this point in the history
  • Loading branch information
pt-icg committed Sep 2, 2020
1 parent 04cad2a commit 726d1b9
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public void Custom()
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=2", "alle 2 Monate am zweiten Freitag");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=3", "alle 2 Monate am dritten Freitag");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=4", "alle 2 Monate am vierten Freitag");
ToTextTest("FREQ=YEARLY;INTERVAL=3;BYMONTH=3,4", "alle 3 Jahre im März und April");
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public void Custom()
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=2", "every 2 months on second Friday");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=3", "every 2 months on third Friday");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=4", "every 2 months on fourth Friday");
ToTextTest("FREQ=YEARLY;INTERVAL=3;BYMONTH=3,4", "every 3 years in March and April");
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public void Custom()
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=2", "cada 2 meses el segundo viernes");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=3", "cada 2 meses el tercer viernes");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=4", "cada 2 meses el cuarto viernes");
ToTextTest("FREQ=YEARLY;INTERVAL=3;BYMONTH=3,4", "cada 3 años en marzo y abril");
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public void Custom()
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=2", "tous les 2 mois le deuxième vendredi");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=3", "tous les 2 mois le troisième vendredi");
ToTextTest("FREQ=MONTHLY;INTERVAL=2;BYDAY=FR;BYSETPOS=4", "tous les 2 mois le quatrième vendredi");
ToTextTest("FREQ=YEARLY;INTERVAL=3;BYMONTH=3,4", "tous les 3 ans en mars et avril");
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.9.4</Version>
<Version>0.9.5</Version>
<Authors>pt</Authors>
<Company>IcgSoftware</Company>
<Description>Human readable extension for iCal.NET RecurrencePattern https://github.com/rianjs/ical.net</Description>
Expand Down
31 changes: 29 additions & 2 deletions IcgSoftware.RecurrenceRuleToText/Language.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion IcgSoftware.RecurrenceRuleToText/Language.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@
<data name="UntilDateEndingDateFormat" xml:space="preserve">
<value>dd. MMMM yyyy</value>
</data>
<data name="DayChainSeparator" xml:space="preserve">
<data name="DayChainLastSeparator" xml:space="preserve">
<value>und</value>
</data>
<data name="MonthlyOnWeekDay" xml:space="preserve">
Expand All @@ -248,4 +248,10 @@
<data name="YearlyOnDay" xml:space="preserve">
<value>am {0}</value>
</data>
<data name="MonthChainLastSeparator" xml:space="preserve">
<value>und</value>
</data>
<data name="YearlyOnMonth" xml:space="preserve">
<value>im {0}</value>
</data>
</root>
8 changes: 7 additions & 1 deletion IcgSoftware.RecurrenceRuleToText/Language.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@
<data name="UntilDateEndingDateFormat" xml:space="preserve">
<value>D</value>
</data>
<data name="DayChainSeparator" xml:space="preserve">
<data name="DayChainLastSeparator" xml:space="preserve">
<value>y</value>
</data>
<data name="MonthlyOnWeekDay" xml:space="preserve">
Expand All @@ -245,4 +245,10 @@
<value>el {1} de {0}</value>
<comment>{0} month, {1} day ordinal</comment>
</data>
<data name="MonthChainLastSeparator" xml:space="preserve">
<value>y</value>
</data>
<data name="YearlyOnMonth" xml:space="preserve">
<value>en {0}</value>
</data>
</root>
8 changes: 7 additions & 1 deletion IcgSoftware.RecurrenceRuleToText/Language.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@
<data name="UntilDateEndingDateFormat" xml:space="preserve">
<value>dd MMMM yyyy</value>
</data>
<data name="DayChainSeparator" xml:space="preserve">
<data name="DayChainLastSeparator" xml:space="preserve">
<value>et</value>
</data>
<data name="MonthlyOnWeekDay" xml:space="preserve">
Expand All @@ -248,4 +248,10 @@
<value>le {1} {0}</value>
<comment>{0} month, {1} day ordinal</comment>
</data>
<data name="MonthChainLastSeparator" xml:space="preserve">
<value>et</value>
</data>
<data name="YearlyOnMonth" xml:space="preserve">
<value>en {0}</value>
</data>
</root>
11 changes: 10 additions & 1 deletion IcgSoftware.RecurrenceRuleToText/Language.resx
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@
<data name="UntilDateEndingDateFormat" xml:space="preserve">
<value>MMMM dd, yyyy</value>
</data>
<data name="DayChainSeparator" xml:space="preserve">
<data name="DayChainLastSeparator" xml:space="preserve">
<value>and</value>
</data>
<data name="MonthlyOnWeekDay" xml:space="preserve">
Expand All @@ -245,4 +245,13 @@
<value>on {0} the {1}</value>
<comment>{0} month, {1} day ordinal</comment>
</data>
<data name="MonthChainLastSeparator" xml:space="preserve">
<value>and</value>
</data>
<data name="YearlyOnMonthFormat" xml:space="preserve">
<value>MMMM</value>
</data>
<data name="YearlyOnMonth" xml:space="preserve">
<value>in {0}</value>
</data>
</root>
32 changes: 30 additions & 2 deletions IcgSoftware.RecurrenceRuleToText/RRuleTextBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ public string ToText()
day += BuildYearlyOnDay();
else if (recurrencePattern.BySetPosition.Count > 0 && recurrencePattern.ByDay.Count > 0 && recurrencePattern.ByMonth.Count > 0)
day += BuildYearlyOnNumbered();
else if (recurrencePattern.ByMonth.Count > 0)
day += BuildYearlyOnMonth();
break;
}

Expand Down Expand Up @@ -266,10 +268,10 @@ private String GetDayChain(List<int> dayList)
case 1:
return "";
case 2:
return string.Join($" {Language.DayChainSeparator} ", dayList.OrderBy(i => i).Select(i => i.ToOrdinalNumber(ordinalCulture)).ToList());
return string.Join($" {Language.DayChainLastSeparator} ", dayList.OrderBy(i => i).Select(i => i.ToOrdinalNumber(ordinalCulture)).ToList());
default:
var sorted = dayList.OrderBy(i => i).ToList();
return string.Join(", ", sorted.Take(sorted.Count - 1).Select(i => i.ToOrdinalNumber(ordinalCulture)).ToList()) + $" {Language.DayChainSeparator} " + sorted.Last().ToOrdinalNumber(ordinalCulture);
return string.Join(", ", sorted.Take(sorted.Count - 1).Select(i => i.ToOrdinalNumber(ordinalCulture)).ToList()) + $" {Language.DayChainLastSeparator} " + sorted.Last().ToOrdinalNumber(ordinalCulture);
}

}
Expand All @@ -290,6 +292,22 @@ private String GetDayChain(List<int> dayList)

//}

private String GetMonthChain(List<string> monthList)
{
switch (monthList.Count)
{
case 0:
case 1:
return monthList.First();
case 2:
return string.Join($" {Language.MonthChainLastSeparator} ", monthList.ToList());
default:
var sorted = monthList.OrderBy(i => i).ToList();
return string.Join(", ", monthList.Take(monthList.Count - 1)) + $" {Language.DayChainLastSeparator} " + monthList.Last();
}

}


private String BuildMonthlyOnNumberedDay()
{
Expand Down Expand Up @@ -386,6 +404,16 @@ private String BuildYearlyOnNumbered()
day.ToString(Language.YearlyOnNumberedMonthFormat, Language.Culture));
}

private String BuildYearlyOnMonth()
{
if (recurrencePattern.ByMonth.Count == 0)
return "";

List<string> sorted = recurrencePattern.ByMonth.OrderBy(i => i).Select(i => new DateTime(DateTime.Today.Year, i, 1)).Select(i => i.ToString(Language.YearlyOnMonthFormat, Language.Culture)).ToList();
return String.Format(Language.YearlyOnMonth, GetMonthChain(sorted));
}


private String BuildUntilDateEnding()
{
if (recurrencePattern.Until == DateTime.MinValue)
Expand Down

0 comments on commit 726d1b9

Please sign in to comment.