ics_analyzer/docs/ics_format.txt

80 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

2024-01-03 07:58:55 +01:00
RFC5545
-------
https://www.rfc-editor.org/rfc/rfc5545
2024-01-03 08:06:26 +01:00
The iCalendar object is organized into individual lines of text,
called content lines. Content lines are delimited by a line break,
which is a CRLF sequence (CR character followed by LF character).
2024-01-03 17:57:25 +01:00
Lines of text SHOULD NOT be longer than 75 octets, excluding the line
break. Long content lines SHOULD be split into a multiple line
representations using a line "folding" technique. That is, a long
line can be split between any two characters by inserting a CRLF
immediately followed by a single linear white-space character (i.e.,
SPACE or HTAB). Any sequence of CRLF followed immediately by a
single linear white-space character is ignored (i.e., removed) when
processing the content type.
For example, the line:
DESCRIPTION:This is a long description that exists on a long line.
Can be represented as:
DESCRIPTION:This is a lo
ng description
that exists on a long line.
The process of moving from this folded multiple-line representation
to its single-line representation is called "unfolding". Unfolding
is accomplished by removing the CRLF and the linear white-space
character that immediately follows.
When parsing a content line, folded lines MUST first be unfolded
according to the unfolding procedure described above.
--------------------------------------------------------------------------------
2024-01-03 18:06:43 +01:00
Colons seem to be allowed in the "value" so you can't split by colon.
You have to split by "\r\n" but unfold the lines before.
2024-01-03 17:57:25 +01:00
Observation of different ics files from different sources
---------------------------------------------------------
2024-01-03 07:58:55 +01:00
ICS files from Microsoft Outlook differ from those that were created by Gnome Evolution.
2024-01-03 17:57:25 +01:00
The order of "fields" seems not be standardized and differs between every application.
Evolution
---------
all line endings are \r\n
all day event:
DTSTART;VALUE=DATE:20230908
DTEND;VALUE=DATE:20230909
an all day event can span over multiple days and look like this:
DTSTART;VALUE=DATE:20230911^M$
DTEND;VALUE=DATE:20230916^M$
The DTEND of an all day event is exclusively, it is not an all day event anymore!
appointment:
DTSTART;TZID=/freeassociation.sourceforge.net/Continent/City:
20230909T090000
DTEND;TZID=/freeassociation.sourceforge.net/Continent/City:
20230909T093000
appointments can also span over multiple days:
DTSTART;TZID=/freeassociation.sourceforge.net/Europe/Berlin:
20230913T230000
DTEND;TZID=/freeassociation.sourceforge.net/Europe/Berlin:
20230914T040000
SEQUENCE is the number of times the event was modified.
Evolution sets this to 2 after it has been generated.
Appointments include the continent and city of the used time zone.
"DESCRIPTION:" is an optional field.