(***********************************************************************)
(*                                                                     *)
(*                                 GALAX                               *)
(*                           XML Query Engine                          *)
(*                                                                     *)
(*  Copyright 2000, Lucent Technologies.                               *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: print.mli,v 1.23 2002/12/14 21:48:36 mff Exp $ *)

(********************)
(* Print namespaces *)
(********************)

val print_namespaces : Format.formatter -> unit -> unit

(*********************)
(* Print base values *)
(*********************)

val print_baseval : Format.formatter -> Datatypes._AtomicValue -> unit

(*********************************)
(* Print functions for the AST's *)
(*********************************)

(* Datatype *)

val printf_datatype_kind  : string -> Xquery_ast.datatype_kind -> unit
val bprintf_datatype_kind : string -> Xquery_ast.datatype_kind -> string

val printf_datatype  : string -> Xquery_ast.datatype -> unit
val bprintf_datatype : string -> Xquery_ast.datatype -> string

(* Type *)

val printf_model  : string -> Xquery_ast.model -> unit
val bprintf_model : string -> Xquery_ast.model -> string

(* Full XQuery expression *)

val print_expr_body : Format.formatter -> Xquery_ast.expr -> unit

val fprintf_expr : Format.formatter -> string -> Xquery_ast.expr -> unit
val printf_expr  : string -> Xquery_ast.expr -> unit
val bprintf_expr : string -> Xquery_ast.expr -> string

(* Full XQuery update *)

val fprintf_update : Format.formatter -> string -> Xquery_ast.update -> unit

(* Core expression *)

val fprintf_cexpr : Format.formatter -> string -> Xquery_ast.cexpr -> unit
val printf_cexpr  : string -> Xquery_ast.cexpr -> unit
val bprintf_cexpr : string -> Xquery_ast.cexpr -> string

(* Core XQuery update *)

val fprintf_cupdate : Format.formatter -> string -> Xquery_ast.cupdate -> unit

(* Function definition *)

val fprintf_cfunction_def : Format.formatter -> string -> Xquery_ast.cfunction_def -> unit
val printf_cfunction_def  : string -> Xquery_ast.cfunction_def -> unit
val bprintf_cfunction_def : string -> Xquery_ast.cfunction_def -> string

(* Variable declaration *)

val fprintf_cvar_decl : Format.formatter -> string -> Xquery_ast.cvar_decl -> unit
val printf_cvar_decl  : string -> Xquery_ast.cvar_decl -> unit
val bprintf_cvar_decl : string -> Xquery_ast.cvar_decl -> string

(* Sort declaration *)

val printf_sort_decl  : string -> Xquery_ast.sort_decl -> unit
val bprintf_sort_decl : string -> Xquery_ast.sort_decl -> string

(* Core query module list *)

val printf_cquery_module_list  : string -> Xquery_ast.cquery_module_list -> unit
val bprintf_cquery_module_list : string -> Xquery_ast.cquery_module_list -> string

(* BChoi: needed for FSA *)
(* Jerome: do we still need those? *)
val printf_uqname : string -> Namespace.uqname -> unit
val printf_rqname : string -> Namespace.rqname -> unit

(*****************************)
(* Top-level print functions *)
(*****************************)

val fprintf_result_type : Format.formatter -> string -> Xquery_ast.model -> unit
val printf_result_type  : string -> Xquery_ast.model -> unit
val bprintf_result_type : string -> Xquery_ast.model -> string

val fprintf_schema : Format.formatter -> string -> Xquery_ast.sort_decl list -> unit
val printf_schema  : string -> Xquery_ast.sort_decl list -> unit
val bprintf_schema : string -> Xquery_ast.sort_decl list -> string

val string_of_baseval : Datatypes._AtomicValue -> string
val string_of_basety : Datatypes.atomic_type -> string
