sig
  exception Error of string
  type t_doc_class = DOC_CHS | DOC_SECS | DOC_PARS | DOC_BLKS
  val class_of_tr_doc : Doc_types.tr_doc -> Common_utils.t_doc_class
  val string_of_t_doc_class : Common_utils.t_doc_class -> string
  type t_doc_settings = {
    doc_width : int;
    left_margin : int;
    title_indent : int;
    author_indent : int;
    abstract_indent : int;
    refs_indent : int;
    tab_length : int;
    abstract_hdr : (string * string) option;
    refs_hdr : (string * string) option;
    endnotes_hdr : string option;
    ch_prefix : (string * string) option;
    sec_prefix : (string * string) option;
    app_prefix : (string * string) option;
    par_prefix : (string * string) option;
    expand_tag : Doc_types.ts_tag -> (string * string) option;
    auto_numbering : int -> int -> string;
    allow_custom_numbering : bool;
  }
  val doc_settings_default : unit -> Common_utils.t_doc_settings
  val auto_numbering_of_string : string -> int -> int -> string
  val doc_settings_of_ts_blks :
    Common_utils.t_doc_settings ->
    int -> Doc_types.ts_blks -> Common_utils.t_doc_settings
  val doc_settings_of_tr_doc :
    Doc_types.tr_doc -> Common_utils.t_doc_settings
  type t_par_node = PAR_AUTO of int | PAR_TAG of (string * string * int)
  and t_itm_node =
      ITM_AUTO of string
    | ITM_CUSTOM of string
    | ITM_TAG_AUTO of (string * string)
    | ITM_TAG_CUSTOM of (string * string)
    | ITM_BIB_AUTO of string
    | ITM_BIB_CUSTOM of string
  type t_dsp_line_node =
      DSP_AUTO of string
    | DSP_CUSTOM of string
    | DSP_NONE
    | DSP_TAG_AUTO of (string * string)
    | DSP_TAG_CUSTOM of (string * string)
  type t_node =
      ABSTRACT_NODE
    | CH_NODE of int
    | SEC_NODE of int
    | APP_NODE of int
    | PAR_NODE of Common_utils.t_par_node
    | ITM_NODE of Common_utils.t_itm_node
    | DSP_NODE
    | BLT_NODE
    | DSP_LINE_NODE of Common_utils.t_dsp_line_node
    | REFS_NODE
    | NTE_NODE of int
  type t_path = Common_utils.t_node list
  type t_cref_element =
      Cref_element_ch of Doc_types.tr_ch
    | Cref_element_sec of Doc_types.tr_sec
    | Cref_element_par of Doc_types.tr_par_std
    | Cref_element_blk_itm of Doc_types.tr_blk_itm
    | Cref_element_dsp_line of Doc_types.tr_dsp_line
    | Cref_element_blk_nte of Doc_types.tr_blk_nte
  type t_cref_table =
      (Doc_types.tr_id * Common_utils.t_path * Common_utils.t_cref_element)
      list
  val path_to_ch_node : Common_utils.t_path -> Common_utils.t_path
  val path_to_sec_node : Common_utils.t_path -> Common_utils.t_path
  val path_to_app_node : Common_utils.t_path -> Common_utils.t_path
  val path_to_par_node : Common_utils.t_path -> Common_utils.t_path
  val lvl_of_path : Common_utils.t_path -> int
  val string_of_tr_id : Doc_types.tr_id -> string
  val string_of_path :
    Common_utils.t_doc_settings -> Common_utils.t_path -> string
  val string_of_ts_c_ref :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path -> Doc_types.ts_c_ref -> string
  val check_cref_table :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table -> Common_utils.t_cref_table
  val label_of_path_opt :
    Common_utils.t_doc_settings -> Common_utils.t_path -> string option
  val label_of_path :
    Common_utils.t_doc_settings -> Common_utils.t_path -> string
  val node_of_tu_par :
    Common_utils.t_doc_settings ->
    int -> Doc_types.tu_par -> Common_utils.t_node
  val node_of_blk_itm :
    Common_utils.t_doc_settings ->
    Common_utils.t_path -> int -> Doc_types.tr_blk_itm -> Common_utils.t_node
  val node_of_dsp_line :
    Common_utils.t_doc_settings ->
    Common_utils.t_path ->
    int -> Doc_types.tr_dsp_line -> Common_utils.t_node
  val par_restated_of_tr_id :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path ->
    Doc_types.tr_id -> (Doc_types.tr_par_std * Common_utils.t_path) option
  type t_time = {
    year : int;
    month : int;
    day : int;
    hour : int;
    minute : int;
    second : int;
    timezone : string * int * int;
  }
  val utc_timezone : string * int * int -> string
  val time_of_ts_date_auto :
    Common_utils.t_doc_settings ->
    Doc_types.ts_date_auto -> Common_utils.t_time option
  type t_nte_entry =
      Ftn_entry_ref of
        (Doc_types.ts_nte_ref * Common_utils.t_path * int *
         Doc_types.tr_blk_nte)
    | Ftn_entry_inline of
        (Doc_types.ts_nte_inline * Common_utils.t_path * int)
  type t_nte_table = Common_utils.t_nte_entry list
  val nte_table_of_ts_blk_txt :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path ->
    Common_utils.t_nte_table ->
    Doc_types.ts_blk_txt -> Common_utils.t_nte_table
  val nte_table_of_tr_dsp_line :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path ->
    Common_utils.t_nte_table ->
    Doc_types.tr_dsp_line -> Common_utils.t_nte_table
  val string_of_ts_nte_ref :
    Common_utils.t_doc_settings ->
    Common_utils.t_nte_table ->
    Common_utils.t_path -> Doc_types.ts_nte_ref -> string
  val string_of_ts_nte_inline :
    Common_utils.t_doc_settings ->
    Common_utils.t_nte_table ->
    Common_utils.t_path -> Doc_types.ts_nte_inline -> string
  val nte_table_of_ts_hdr_opt :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path ->
    Doc_types.ts_hdr option -> Common_utils.t_nte_table
  val reference_of_ts_nte_ref :
    Common_utils.t_doc_settings ->
    Common_utils.t_cref_table ->
    Common_utils.t_path ->
    Doc_types.ts_nte_ref -> Doc_types.tr_blk_nte option
  type t_txt_options = {
    margin : int option;
    width : int option;
    quiet : bool;
    numbering : string;
    allow_custom_numbering : bool;
    tags : string option;
  }
  type t_html_options = {
    margin : int option;
    lang : string;
    css : string list;
    quiet : bool;
    numbering : string;
    allow_custom_numbering : bool;
    tags : string option;
  }
  type t_exml_options = {
    quiet : bool;
    numbering : string;
    allow_custom_numbering : bool;
    tags : string option;
  }
  type t_axml_options = { tags : string option; }
  val exml_options_of_html_options :
    Common_utils.t_html_options -> Common_utils.t_exml_options
  val axml_options_of_html_options :
    Common_utils.t_html_options -> Common_utils.t_axml_options
  val axml_options_of_txt_options :
    Common_utils.t_txt_options -> Common_utils.t_axml_options
  val axml_options_of_exml_options :
    Common_utils.t_exml_options -> Common_utils.t_axml_options
  val txt_options_default : unit -> Common_utils.t_txt_options
  val html_options_default : unit -> Common_utils.t_html_options
  val exml_options_default : unit -> Common_utils.t_exml_options
  val axml_options_default : unit -> Common_utils.t_axml_options
end