+(* }}} *)
+(* parse extended member {{{ *)
+
+and ext_member m f = parse
+| sp+
+| "//" to_eol { ext_member m f lexbuf }
+| '\n' { ext_member m f (nextl lexbuf) }
+| "/*" { let _ = cComment (B.create 1024) lexbuf in
+ ext_member m f lexbuf }
+| '.' (ident as member) sp* '=' sp* ([^';''\n']+ as s) ';'
+ {
+ ext_member (
+ let do_anch s = s, f, lnum lexbuf in
+ match member with
+ | "init" -> {m with init = do_anch s}
+ | "onchange" -> {m with onchange = Some(do_anch s)}
+ | _ ->
+ die (lnum lexbuf) f
+ (sprintf "Unknown directive `%s'" member)
+ ) f lexbuf
+ }
+| '}' sp* ';' { m }
+| "" { die (lnum lexbuf) f "Syntax error" }
+