public ICalendarComponent component(
ISerializationContext ctx,
ISerializerFactory sf,
ICalendarComponentFactory cf,
ICalendarObject o
) //throws RecognitionException, TokenStreamException
{
ICalendarComponent c = null;;
IToken n = null;
IToken m = null;
match(BEGIN);
match(COLON);
{
switch ( LA(1) )
{
case IANA_TOKEN:
{
n = LT(1);
match(IANA_TOKEN);
c = cf.Build(n.getText().ToLower(), true);
break;
}
case X_NAME:
{
m = LT(1);
match(X_NAME);
c = cf.Build(m.getText().ToLower(), true);
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
ISerializationProcessor<ICalendarComponent> processor = ctx.GetService(typeof(ISerializationProcessor<ICalendarComponent>)) as ISerializationProcessor<ICalendarComponent>;
// Do some pre-processing on the component
if (processor != null)
processor.PreDeserialization(c);
SerializationUtil.OnDeserializing(c);
// Push the component onto the serialization context stack
ctx.Push(c);
if (o != null)
{
// Add the component as a child immediately, in case
// embedded components need to access this component,
// or the iCalendar itself.
o.AddChild(c);
}
c.Line = n.getLine();
c.Column = n.getColumn();
{ // ( ... )*
for (;;)
{
if ((LA(1)==CRLF))
{
match(CRLF);
}
else
{
goto _loop16_breakloop;
}
}
_loop16_breakloop: ;
} // ( ... )*
{ // ( ... )*
for (;;)
{
switch ( LA(1) )
{
case IANA_TOKEN:
case X_NAME:
{
property(ctx, c);
break;
}
case BEGIN:
{
component(ctx, sf, cf, c);
break;
}
default:
{
goto _loop18_breakloop;
}
}
}
_loop18_breakloop: ;
} // ( ... )*
match(END);
match(COLON);
match(IANA_TOKEN);
{ // ( ... )*
for (;;)
{
if ((LA(1)==CRLF))
{
match(CRLF);
}
else
{
goto _loop20_breakloop;
}
}
_loop20_breakloop: ;
} // ( ... )*
// Do some final processing on the component
if (processor != null)
processor.PostDeserialization(c);
// Notify that the component has been loaded
c.OnLoaded();
SerializationUtil.OnDeserialized(c);
// Pop the component off the serialization context stack
ctx.Pop();
return c;
}