(* * <COPYRIGHT> * Copyright 2002 Joachim Schrod Network and Publication Consultance GmbH, Gerd Stolpmann * * <GPL> * This file is part of WDialog. * * WDialog is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * WDialog is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WDialog; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * </> *) (* $Id: wd_templrep.mli,v 3.5 2003-03-21 14:23:44 stolpmann Exp $ * ---------------------------------------------------------------------- * *) (** Template representation *) open Wd_types type 'ext t constraint 'ext = 'ext Pxp_document.node #Pxp_document.extension (** The type of prepared templates *) type 'ext param = { param_tree : 'ext Pxp_document.node; (** parameter as XML tree *) param_text : string Lazy.t; (** parameter as string *) } (** The type of parameters to instantiate. * In [param_tree], the instantiation text must be passed as XML tree; * in [param_text], the same must be passed as string. The first * component is used if a parameter is found in element context; * the second component is used if a parameter is found in an attribute * value. * [param_text] is a lazy-evaluated value because it is unlikely that * the string transcription is actually used. *) type expr = Expr_var of string (** a variable in an expr *) | Expr_strconst of string (** a string constant *) | Expr_apply of (string * expr list) (** a function call *) | Expr_param of (string * string list) (** a template parameter *) (** Expressions inside $[...] *) val prepare_tree_with_parameters : mk_uiencode: (unit -> 'ext Pxp_document.node) -> string -> application_type -> 'ext Pxp_document.node list -> 'ext t (** [let pt = prepare_tree_with_parameters ~mk_uiencode name app nodes]: * * Prepares the node list [nodes] for the instantiation of parameters. * [nodes] remains unmodified; but references to inner nodes of [nodes] * are stored in [pt] (this should be transparent). * [app] is the application. * [name] is the name of the template; it is only used to generate * error messages. * * The preparation procedure scans all data nodes and all attribute * values for '$' parameters. [pt] contains a restructured copy of * [nodes] in which the parameters are specially marked up such that * the instantiation procedure can find them quickly. * * Recognized forms: * - [$name]: Replaced by the parameter [name] here * - [${name}]: Same * - [${name/enc1/enc2/...}]: Apply the encodings [enc1],[enc2],... in turn before replacing * - [$[name]]: Replaced by the value of the dialog variable [name]. * - [$[name/enc1/enc2/...]]: Apply the encodings [enc1],[enc2],... in turn before replacing * * [~mk_uiencode]: This function must return an empty [<ui:encode/>] node. Such nodes are generated * for [${name/enc1/enc2/...}] in element context. * *) val get_parameters : 'ext t -> unit dict (** Returns the parameters that have been found in the template as dictionary *) val instantiate : ?eval_expr:(expr -> string) -> 'ext t -> 'ext param dict list -> 'ext Pxp_document.node -> unit (** [instantiate ~eval_expr pt params container]: * * Instantiates the already prepared tree [pt], and sets the sub nodes * of [container] to the new instance (the instance is a node list). * The parameters are searched in [params], strictly from left to * right. * * An [Instantiation_error] is raised if something goes wrong. * * [~eval_expr]: Evaluates an expression found inside brackets [$[expr]] * and returns the result as string. The expression never contains * [Expr_param] nodes, because these have already been replaced by * [Expr_strconst] nodes. *) (* ====================================================================== * History: * * $Log: wd_templrep.mli,v $ * Revision 3.5 2003-03-21 14:23:44 stolpmann * ocamldoc updated * * Revision 3.4 2002/10/20 19:39:17 stolpmann * New feature: The brackets $[...] can contain expressions, * not only variables * * Revision 3.3 2002/02/16 17:29:45 stolpmann * mostly ocamldoc. * * Revision 3.2 2002/02/14 16:15:21 stolpmann * Added copyright notice. * * Revision 3.1 2002/02/12 20:29:23 stolpmann * Initial release at sourceforge. * * Revision 1.7 2002/01/30 15:13:33 gerd * New: The notations ${name/enc1/...} and $[name/enc1/...] are * recognized and handled properly. * * Revision 1.6 2002/01/27 19:13:15 gerd * New: [get_parameters] * * Revision 1.5 2002/01/26 22:38:26 gerd * Changed the type for passing parameters to templates. It is * now syntax_tree dict instead of a simple list. Furthermore, the * method [instantiate] no longer returns the new context. The new element * ui:context creates the new contexts now. * * Revision 1.4 2002/01/24 23:34:33 gerd * The function [instantiate] raises [Instantiation_error] on * errors. * * Revision 1.3 2001/05/21 12:52:27 gerd * Added a type constraint due to stricter type checking in * O'Caml 3.01 * * Revision 1.2 2000/09/21 15:12:34 gerd * Updated for O'Caml 3 and PXP * * Revision 1.1 2000/05/08 10:36:37 gerd * Initial revision. * * *)