@@ -53,18 +53,33 @@ exception Syntax_error of string
53
53
let syntax_error s ln cn =
54
54
raise (Syntax_error (sprintf " (%d:%d): %s." ln cn s))
55
55
56
+ let syntax_error_ s (ln , cn ) =
57
+ raise (Syntax_error (sprintf " (%d:%d): %s." ln cn s))
58
+
56
59
let syntax_assert b s ln cn =
57
60
if not b then syntax_error s ln cn
58
61
62
+ let syntax_assert_ b s (ln , cn ) =
63
+ if not b then syntax_error s ln cn
64
+
59
65
let syntax_warning s ln cn =
60
66
eprintf " Warning (%d:%d): %s.\n " ln cn s
61
67
68
+ let syntax_warning_ s (ln , cn ) =
69
+ eprintf " Warning (%d:%d): %s.\n " ln cn s
70
+
62
71
let syntax_warning_if cond s ln cn =
63
72
if cond then
64
73
syntax_warning s ln cn
65
74
else
66
75
()
67
76
77
+ let syntax_warning_if_ cond s (ln , cn ) =
78
+ if cond then
79
+ syntax_warning s ln cn
80
+ else
81
+ ()
82
+
68
83
69
84
(* * http://tools.ietf.org/html/rfc5545#section-3.3.11 (TEXT) *)
70
85
let text_of_raw (ln , cn ) s =
@@ -389,20 +404,25 @@ let parse_ical l =
389
404
| Some e -> syntax_error (sprintf " unclosed block %s" e) (- 1 ) (- 1 );
390
405
| None -> res, []
391
406
end
392
- | {name ="BEGIN" ; value =e } as v ::tl ->
393
- let block, tl = loop_rev [] (Some e) tl in
394
- loop ((Block (v.name_start, e, block))::res) ob tl
395
- | {name ="END" ; value =e } as v ::tl ->
407
+ | {name ="BEGIN" ; value} as v ::tl ->
408
+ syntax_assert_ (v.parameters = [] ) " unexpected parameters for BEGIN"
409
+ v.name_start;
410
+ let block, tl = loop_rev [] (Some value) tl in
411
+ loop ((Block (v.name_start, value, block))::res) ob tl
412
+ | {name ="END" ; value} as v ::tl ->
413
+ syntax_assert_ (v.parameters = [] ) " unexpected parameters for START"
414
+ v.name_start;
415
+ assert (v.parameters = [] );
396
416
begin match ob with
397
- | Some x when x = e ->
417
+ | Some x when x = value ->
398
418
res, tl
399
419
| Some x ->
400
- syntax_error (sprintf " unexpected end of block %s, \
401
- expected end of block %s" x e )
402
- (fst v.name_start) (snd v.name_start)
420
+ syntax_error_ (sprintf " unexpected end of block %s, \
421
+ expected end of block %s" x value )
422
+ v.name_start
403
423
| None ->
404
- syntax_error (sprintf " unexpected end of block %s" e )
405
- (fst v.name_start) (snd v.name_start)
424
+ syntax_error_ (sprintf " unexpected end of block %s" value )
425
+ v.name_start
406
426
end
407
427
| {name; parameters; value} as v ::tl ->
408
428
let p =
@@ -420,8 +440,7 @@ let parse_ical l =
420
440
| res , [] ->
421
441
res
422
442
| _ , v ::_ ->
423
- syntax_error (sprintf " unexpected data" )
424
- (fst v.name_start) (snd v.name_start)
443
+ syntax_error_ (sprintf " unexpected data" ) v.name_start
425
444
426
445
427
446
(* * [map] keeps location and section names, it applies the
0 commit comments