(***********************************************************************)
(*                                                                     *)
(*                                 GALAX                               *)
(*                              XQuery Engine                          *)
(*                                                                     *)
(*  Copyright 2001-2003, Lucent Technologies.                          *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: print.mli,v 1.2 2003/06/27 20:34:24 simeon Exp $ *)

(* Module Print
   Description:
     This module implements pretty-printing for the XQuery ASTs.
*)

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

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

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

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

(****************************************)
(* Print functions for the XQuery 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

(* Statement *)

val fprintf_statement : Format.formatter -> string -> Xquery_ast.statement -> unit

(* Module *)

val fprintf_module : Format.formatter -> string -> Xquery_ast.query_module -> unit


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

(* 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

(* Core 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

(* Core 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

(* Core 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

(*****************************)
(* 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
