-/*
- * icalendar.l -- icalendar (RFC 5545) scanner
+/* icalendar.l -- icalendar (RFC 5545) scanner
*
* This code is Copyright (c) 2014, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
#include "h/mh.h"
#include "h/icalendar.h"
#include "sbr/icalparse.h"
+#include "sbr/base64.h"
static char *unfold (char *, size_t *);
-static void destroy_icallex ();
+static void destroy_icallex(void);
%}
/*
. {
/* By default, flex will just pass unmatched text. Catch it instead. */
- inform("unexpected input: |%s|\n", icaltext);
+ contentline *clines = vevents.last->contentlines;
+ contentline *cline;
+
+ if (clines && (cline = clines->last)) {
+ if (cline->unexpected == NULL) {
+ cline->unexpected = charstring_create (0);
+ }
+ charstring_append_cstring (cline->unexpected, icaltext);
+ }
}
+<INITIAL>
<<EOF>> {
+ /* See next rule for when start state is not INITIAL. */
destroy_icallex ();
yyterminate ();
}
+<<EOF>> {
+ /* Missing a final newline after a token. The input does not conform
+ to RFC 5545 ยง 3.1, which requires that each contentline end with a
+ CRLF. (Assume that the token is at the end of a contentline.) Be
+ liberal in what we accept by faking a newline here, and setting the
+ start state to terminate on the next call. */
+ BEGIN (INITIAL);
+ return ICAL_CRLF;
+}
+
%%
static char *
* with something other than flex.
*/
static void
-destroy_icallex () {
+destroy_icallex(void) {
#if defined FLEX_SCANNER && defined YY_FLEX_SUBMINOR_VERSION
/* Hack: rely on fact that the the YY_FLEX_SUBMINOR_VERSION
#define was added to flex (flex.skl v. 2.163) after