let label_of_path_opt (doc_settings : t_doc_settings) (path : t_path) : string option =
match path with
| [] -> None
| hd :: tl ->
match hd with
| CH_NODE _ -> (
match doc_settings.ch_prefix, string_of_path doc_settings path with
| None, p -> Some p
| Some (lbl,_), p -> Some (lbl ^ "\u{00A0}" ^ p)
)
| SEC_NODE _ -> (
match doc_settings.sec_prefix, string_of_path doc_settings path with
| None, p -> Some p
| Some (lbl,_), p -> Some (lbl ^ "\u{00A0}" ^ p)
)
| APP_NODE _ -> (
match doc_settings.app_prefix, string_of_path doc_settings path with
| None, p -> Some p
| Some (lbl,_), p -> Some (lbl ^ "\u{00A0}" ^ p)
)
| PAR_NODE _ -> (
match doc_settings.par_prefix, string_of_path doc_settings path with
| None, p -> Some p
| Some (lbl,_), p -> Some (lbl ^ "\u{00A0}" ^ p)
)
| ITM_NODE _
| BLT_NODE
| DSP_LINE_NODE _ -> string_of_node_opt doc_settings tl hd
| ABSTRACT_NODE -> (
match doc_settings.abstract_hdr with
|Some (lbl,_) -> Some lbl
|None -> None
)
| REFS_NODE -> (
match doc_settings.refs_hdr with
|Some (lbl,_) -> Some lbl
|None -> None
)
|NTE_NODE n -> Some (superscript_string_of_int n)
| _ -> None