public void BugFromForumTopic3355446()
        {
            var ical = new iCalendar();
            var evt = ical.Create<Event>();
            
            var altDescProp = new CalendarProperty("X-ALT-DESC");
            altDescProp.AddParameter("FMTTYPE", "text/html");
            altDescProp.Value = "<a href=\"http://test.com\">some html</a>";
            evt.AddProperty(altDescProp);

            evt.Summary = "Test";
            evt.Description = "Test";
            evt.Start = new iCalDateTime(2012, 7, 30, 8, 0, 0);
            evt.Duration = TimeSpan.FromHours(1);

            var serializer = new iCalendarSerializer();
            var serializedString = serializer.SerializeToString(ical);

            Assert.IsTrue(serializedString.Contains("FMTTYPE=text/html"));
        }
        private void MapReminder1To2(TaskItemWrapper source, ITodo target)
        {
            if (_configuration.MapReminder == ReminderMapping.@false)
            {
                return;
            }

            if (source.Inner.ReminderSet)
            {
                if (_configuration.MapReminder == ReminderMapping.JustUpcoming &&
                    source.Inner.ReminderTime <= DateTime.Now)
                {
                    return;
                }

                var trigger = new Trigger();

                if (source.Inner.StartDate != _dateNull)
                {
                    trigger.Duration = source.Inner.ReminderTime - source.Inner.StartDate;
                    trigger.Parameters.Add("RELATED", "START");
                    trigger.Parameters.Add("VALUE", "DURATION");

                    target.Alarms.Add(
                        new Alarm()
                    {
                        Description = "This is a task reminder"
                    }
                        );
                    // Fix DDay.iCal TimeSpan 0 serialization
                    if (trigger.Duration.Value == TimeSpan.Zero)
                    {
                        target.Alarms[0].Properties.Add(new CalendarProperty("TRIGGER", "-P0D"));
                    }
                    else
                    {
                        target.Alarms[0].Trigger = trigger;
                    }
                    var actionProperty = new CalendarProperty("ACTION", "DISPLAY");
                    target.Alarms[0].Properties.Add(actionProperty);
                }
                else if (source.Inner.DueDate != _dateNull)
                {
                    trigger.Duration = source.Inner.ReminderTime - source.Inner.DueDate;
                    trigger.Parameters.Add("RELATED", "END");
                    trigger.Parameters.Add("VALUE", "DURATION");

                    target.Alarms.Add(
                        new Alarm()
                    {
                        Description = "This is a task reminder"
                    }
                        );
                    // Fix DDay.iCal TimeSpan 0 serialization
                    if (trigger.Duration.Value == TimeSpan.Zero)
                    {
                        target.Alarms[0].Properties.Add(new CalendarProperty("TRIGGER", "P0D"));
                    }
                    else
                    {
                        target.Alarms[0].Trigger = trigger;
                    }
                    var actionProperty = new CalendarProperty("ACTION", "DISPLAY");
                    target.Alarms[0].Properties.Add(actionProperty);
                }
            }
        }
        public void XProperty3()
        {
            iCalendar iCal = new iCalendar();
            Event evt = iCal.Create<Event>();

            StringBuilder htmlBuilder = new StringBuilder();
            htmlBuilder.Append("<HTML><HEAD><META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;charset=iso-8859-1\"></HEAD><BODY>");
            htmlBuilder.Append("<B>Test</B>");
            htmlBuilder.Append("</BODY></HTML>");
                        
            ICalendarProperty p = new CalendarProperty("X-ALT-DESC", htmlBuilder.ToString());
            p.Parameters.Add(new CalendarParameter("FMTTYPE", "text/html"));
            evt.Properties.Add(p);

            iCalendarSerializer serializer = new iCalendarSerializer();
            serializer.Serialize(iCal, @"Calendars/Serialization/XProperty3.ics");

            SerializeTest("XProperty3.ics", typeof(iCalendarSerializer));
        }
Пример #4
0
        public ICalendarProperty property(SerializationContext ctx, ICalendarPropertyListContainer c) //throws RecognitionException, TokenStreamException
        {
            ICalendarProperty p;
            {
                switch (LA(1))
                {
                case IANA_TOKEN:
                {
                    var n = LT(1);
                    match(IANA_TOKEN);

                    p = new CalendarProperty(n.getLine(), n.getColumn())
                    {
                        Name = n.getText().ToUpper()
                    };

                    break;
                }

                case X_NAME:
                {
                    var m = LT(1);
                    match(X_NAME);

                    p = new CalendarProperty(m.getLine(), m.getColumn())
                    {
                        Name = m.getText().ToUpper()
                    };

                    break;
                }

                default:
                {
                    throw new NoViableAltException(LT(1), getFilename());
                }
                }
            }

            var processor = ctx.GetService(typeof(CompositeProcessor <ICalendarProperty>)) as CompositeProcessor <ICalendarProperty>;

            // Do some pre-processing on the property
            processor?.PreDeserialization(p);

            // Add the property to the container, as the parent object(s)
            // may be needed during deserialization.
            c?.Properties.Add(p);

            // Push the property onto the serialization context stack
            ctx.Push(p);
            IStringSerializer dataMapSerializer = new DataMapSerializer(ctx);

            { // ( ... )*
                for (;;)
                {
                    if ((LA(1) == SEMICOLON))
                    {
                        match(SEMICOLON);
                        parameter(ctx, p);
                    }
                    else
                    {
                        goto _loop24_breakloop;
                    }
                }
_loop24_breakloop:
                ;
            } // ( ... )*
            match(COLON);
            var v = value();

            // Deserialize the value of the property
            // into a concrete iCalendar data type,
            // a list of concrete iCalendar data types,
            // or string value.
            var deserialized = dataMapSerializer.Deserialize(new StringReader(v));

            if (deserialized != null)
            {
                // Try to determine if this is was deserialized as a *list*
                // of concrete types.
                var targetType       = dataMapSerializer.TargetType;
                var listOfTargetType = typeof(IList <>).MakeGenericType(targetType);
                if (listOfTargetType.IsInstanceOfType(deserialized))
                {
                    // We deserialized a list - add each value to the
                    // resulting object.
                    foreach (var item in (IEnumerable)deserialized)
                    {
                        p.AddValue(item);
                    }
                }
                else
                {
                    // We deserialized a single value - add it to the object.
                    p.AddValue(deserialized);
                }
            }

            { // ( ... )*
                for (;;)
                {
                    if ((LA(1) == CRLF))
                    {
                        match(CRLF);
                    }
                    else
                    {
                        goto _loop26_breakloop;
                    }
                }
_loop26_breakloop:
                ;
            } // ( ... )*

            // Do some final processing on the property:
            processor?.PostDeserialization(p);

            // Notify that the property has been loaded
            p.OnLoaded();

            // Pop the property off the serialization context stack
            ctx.Pop();

            return(p);
        }