/// <summary> /// Parses line attribute data /// </summary> /// <param name="list"></param> /// <param name="s"></param> private void ParseAttributeData(List<AttributeData> list, ref string s) { Regex p = new Regex("\\s*;\\s*(?<id>\\w+)\\s*=\\s*((?<value>\"[^\"]*\")|(?<value>[^;:]+))"); MatchCollection mc = p.Matches(s); if (mc.Count > 0) { for (int i = 0; i < mc.Count; i++) { AttributeData attr = new AttributeData(mc[i].Groups["id"].Value, mc[i].Groups["value"].Value); list.Add(attr); } s = s.Substring(mc[mc.Count - 1].Index + mc[mc.Count - 1].Length); } }
/// <summary> /// Processes Interval= attribute entries /// </summary> /// <param name="entry"></param> /// <param name="rrule"></param> /// <param name="attr"></param> private void ProcessInterval(CalendarEntry entry, RRule rrule, AttributeData attr) { int n; if (int.TryParse(attr.Value, out n) == false) { n = 1; ReportError(entry, String.Format("\"{0}\" is not a valid INTERVAL value", attr.Value)); } rrule.Interval = n; }
/// <summary> /// Processes Until= attribute entries /// </summary> /// <param name="entry"></param> /// <param name="rrule"></param> /// <param name="attr"></param> private void ProcessUntil(CalendarEntry entry, RRule rrule, AttributeData attr) { rrule.Until = (attr.Value.Length > 8) ? ProcessDateTime(entry, attr.Value) : ProcessDateValue(entry, attr.Value); }
/// <summary> /// Processes Freq= attribute entries /// </summary> /// <param name="entry"></param> /// <param name="rrule"></param> /// <param name="attr"></param> private void ProcessFreq(CalendarEntry entry, RRule rrule, AttributeData attr) { ValueToken tkn = (ValueToken)GetToken(_values, attr.Value); switch (tkn) { case ValueToken.Secondly: rrule.Freq = Frequency.Secondly; break; case ValueToken.Minutely: rrule.Freq = Frequency.Minutely; break; case ValueToken.Hourly: rrule.Freq = Frequency.Hourly; break; case ValueToken.Daily: rrule.Freq = Frequency.Daily; break; case ValueToken.Weekly: rrule.Freq = Frequency.Weekly; break; case ValueToken.Monthly: rrule.Freq = Frequency.Monthly; break; case ValueToken.Yearly: rrule.Freq = Frequency.Yearly; break; default: ReportError(entry, "Invalid FREQ value"); rrule.Freq = Frequency.Daily; break; } }