method register plugin ?plugin_aliases ?doc ?sdoc v =
let plugin = if insensitive then String.uppercase plugin else plugin in
let doc = match doc,sdoc with
| (Some d), _ -> d
| _, None -> Doc.trivial "(no doc)"
| _, (Some s) -> Doc.trivial s
in
if duplicates then begin
subsections <- (plugin,doc)::subsections ;
plugins <- (plugin,v)::plugins
end else begin
subsections <-
(plugin,doc)::(List.filter (fun (k,_) -> k<>plugin) subsections) ;
plugins <- (plugin,v)::(List.filter (fun (k,_) -> k<>plugin) plugins)
end ;
register_hook (plugin,v);
match plugin_aliases with
| Some l ->
aliases <- (List.map (fun alias -> (alias, v)) l) @ aliases
| None -> ()