(* * <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_var_functions.mli,v 1.7 2006-03-08 16:05:02 stolpmann Exp $ * ---------------------------------------------------------------------- * *) (** This module defines the "variable functions" that can be called in * [$[...]] expressions. All these functions take formally a list of * [var_value] arguments and return a [var_value]. Actually, they are * often only defined for a certain number of arguments, and for arguments * of certain type. * * The functions raise a [Failure] exception if something is wrong. *) open Wd_types val id : dialog_type -> var_value list -> var_value (** Returns the first argument *) val length : dialog_type -> var_value list -> var_value (** Returns the length of the single string argument in characters. *) val card : dialog_type -> var_value list -> var_value (** Returns the cardinality of the single argument. The cardinality are the * number of iterations <ui:iterate> or <ui:enumerate> would do for a * variable with the given value: * - For a string: the number of words of the string * - For an enumerator: the number of elements * - For an association: the number of elements *) val size : dialog_type -> var_value list -> var_value (** Returns the size of the single argument, which may be a [String_value], * [Enum_value], [Dyn_enum_value], or an [Alist_value]. * The returned size is encoded as [String_value]. * * {b [size] is deprecated! Use either [length] or [card] instead!} *) val add : dialog_type -> var_value list -> var_value (** Adds the numbers encoded as [String_value], and returns the sum as * [String_value]. *) val sub : dialog_type -> var_value list -> var_value (** Subtracts the following numbers from the first number. All numbers * must be encoded as [String_value]. Returns the result as * [String_value]. *) val mul : dialog_type -> var_value list -> var_value (** Multiplies the numbers encoded as [String_value], and returns the product * as [String_value]. *) val div : dialog_type -> var_value list -> var_value (** Divides the first number through the following numbers. All numbers * must be encoded as [String_value]. Returns the result as * [String_value]. *) val modulo : dialog_type -> var_value list -> var_value (** The first number module the second number. Both numbers * must be encoded as [String_value]. Returns the result as * [String_value]. *) val assoc : dialog_type -> var_value list -> var_value (** Looks the second argument up in the first argument, which must be * an [Alist_value]. The index, i.e. second argument, must be an * [String_value]. *) val nth : dialog_type -> var_value list -> var_value (** Returns the nth element of the first argument which must be an * [Alist_value]. The second argument is the position, a number encoded * as [String_value]. *) val contains : dialog_type -> var_value list -> var_value (** Returns 1 if the first argument contains the second argument, and 0 otherwise. * The second argument must be a string value. The function is defined as follows: * - If the first argument is a string, it is split up into a list of words, * and it is tested whether the second string occurs in the list of words. * - If the first argument is a declared enumerator, it is tested whether * the value includes the string as item. * - If the first argument is a dynamic enumerator, it is tested whether * the value includes the string as internal item. * - If the first argument is an associative list, it is tested whether * the value includes the string as index. *) val mentions : dialog_type -> var_value list -> var_value (** Returns 1 if the first argument contains the second argument, and 0 otherwise. * The second argument must be a string value. The function is defined as follows: * - If the first argument is a dynamic enumerator, it is tested whether * the value includes the string as external item. * - If the first argument is an associative list, it is tested whether * the value includes the string as mapped value. *) val translate : dialog_type -> var_value list -> var_value (** Like ui:translate maps internal values of enumerators to external * values. The function takes two arguments: * * - [translate [dyn; int]]: The first argument is a dynamic enumerator, * and the second argument is the internal value to translate to the * external value * - [translate [type; int]]: The first argument denotes a declared * enumerator (as a string), and the second argument is the internal * value to translate to the external value *) val rev_translate : dialog_type -> var_value list -> var_value (** Maps external values to internal values: * * - [rev_translate [dyn; int]]: The first argument is a dynamic enumerator, * and the second argument is the external value to translate to the * internal value * - [translate [type; int]]: The first argument denotes a declared * enumerator (as a string), and the second argument is the external * value to translate to the internal value *) val eq : dialog_type -> var_value list -> var_value (** Compares two strings, and returns 1 when equal and 0 when not equal *) val ne : dialog_type -> var_value list -> var_value (** Compares two strings, and returns 0 when equal and 1 when not equal *) val match_ : dialog_type -> var_value list -> var_value (** Checks whether the first string matches the regular expression in the * second string, and returns 1 on match and 0 otherwise *) val nomatch : dialog_type -> var_value list -> var_value (** Checks whether the first string matches the regular expression in the * second string, and returns 0 on match and 1 otherwise *) val substring : dialog_type -> var_value list -> var_value (** Returns a substring of the first argument, a [String_value]. The * following forms are accepted: * * - [substring [s; pos; length]]: The second argument is the position, * and the third argument is the length. The length can be negative. * - [substring [s; pos]]: Only the position is passed. Returns the * substring beginning at this position until the end of the string. * * If the start position or end position of the substring is outside * the possible range, only the part of the substring is returned that * is inside the possible range. *) val concat : dialog_type -> var_value list -> var_value (** Concatenates all the [String_value] arguments, and returns the * result as [String_value]. *) val int_eq : dialog_type -> var_value list -> var_value val int_ne : dialog_type -> var_value list -> var_value val int_lt : dialog_type -> var_value list -> var_value val int_le : dialog_type -> var_value list -> var_value val int_gt : dialog_type -> var_value list -> var_value val int_ge : dialog_type -> var_value list -> var_value (** These functions compare two strings as integers, and return 1 if the * condition is fulfilled, and 0 if not. The conditions are: * - int_eq: The integers are equal * - int_ne: The integers are not equal * - int_lt: The first integer is less than the second integer * - int_le: The first integer is less or equal than the second integer * - int_gt: The first integer is greater than the second integer * - int_ge: The first integer is greater or equal than the second integer *) val int_min : dialog_type -> var_value list -> var_value val int_max : dialog_type -> var_value list -> var_value (** These functions compute the minimum/maximum of all integer arguments *) val int_abs : dialog_type -> var_value list -> var_value val int_sign : dialog_type -> var_value list -> var_value (** These functions compute the absolute value/the sign of the first integer * argument *) val card_eq : dialog_type -> var_value list -> var_value val card_ne : dialog_type -> var_value list -> var_value val card_lt : dialog_type -> var_value list -> var_value val card_le : dialog_type -> var_value list -> var_value val card_gt : dialog_type -> var_value list -> var_value val card_ge : dialog_type -> var_value list -> var_value (** These functions compare the cardinality of the first argument with a string taken * as integer, and return 1 if the condition is fulfilled, and 0 if not. * The cardinality is defined as for the [card] function. * The conditions are: * - int_eq: The cardinality is equal to the integer * - int_ne: The cardinality is not equal to the integer * - int_lt: The cardinality is less than the integer * - int_le: The cardinality is less or equal than the integer * - int_gt: The cardinality is greater than the integer * - int_ge: The cardinality is greater or equal than the integer *) val height : dialog_type -> var_value list -> var_value (** Returns the height of the [String_value] argument. The height is * the number of lines, i.e. the number of LF/CR/CRLF occurrences * plus 1. *) val width : dialog_type -> var_value list -> var_value (** Returns the width of the [String_value] argument. The width is * the length of the longest line (not counting the line separators). *) val dialog_exists : dialog_type -> var_value list -> var_value (** When called with only one argument: The function returns 1 if the * argument is an existing dialog (i.e. [Dialog_value(Some _)]) and * 0 if the dialog does not exist (i.e. [Dialog_value None]). * * When called with two arguments (legacy mode): The first argument must * be a dialog value as before, and the second argument must be either * the string "yes" or the string "no". The function returns 1 if the * existence of the dialog is equivalent to the boolean value of the * string. *) val and_ : dialog_type -> var_value Lazy.t list -> var_value (** Calculates the logical AND operation for all its arguments: Returns 1 if * all arguments are non-zero integers, and 0 otherwise. *) val or_ : dialog_type -> var_value Lazy.t list -> var_value (** Calculates the logical OR operation for all its arguments: Returns 1 if * there is a non-zero integer as argument, and 0 otherwise. *) val not_ : dialog_type -> var_value list -> var_value (** Calculates the logical NOT operation of its single argument: Returns 1 * if the argument is 0, and 0 if the argument is non-zero. *) val true_ : dialog_type -> var_value list -> var_value (** Returns the constant 1 *) val false_ : dialog_type -> var_value list -> var_value (** Returns the constant 0 *) val if_ : dialog_type -> var_value Lazy.t list -> var_value (** Evaluates the first argument (which must be an integer). If the integer is * non-zero, the result is the second argument. If the integer is 0, the result * is the third argument. *) val var : dialog_type -> var_value list -> var_value (** Returns the contents of the variable whose name is passed as * first argument, a [String_value]. *) val dialog : dialog_type -> var_value list -> var_value (** Returns the name of the current dialog (no arguments) *) val self : dialog_type -> var_value list -> var_value (** Returns the current dialog (no arguments) *) val page : dialog_type -> var_value list -> var_value (** Returns the name of the current page (no arguments) *) val language : dialog_type -> var_value list -> var_value (** Returns the current language, or "" if none selected (no arguments) *) val cat_translate : dialog_type -> var_value list -> var_value (** Translates the token according to the current language *) val self_base_url : dialog_type -> var_value list -> var_value (** Returns the URL pointing to the current script without session state *) val session_id : dialog_type -> var_value list -> var_value (** Returns the session ID without checksum *) val create_anchor_event : dialog_type -> var_value list -> var_value (** Add an anchor event and return the identifier *) val create_xanchor_event : dialog_type -> var_value list -> var_value (** Add an indexed anchor event and return the identifier *) (* ====================================================================== * History: * * $Log: wd_var_functions.mli,v $ * Revision 1.7 2006-03-08 16:05:02 stolpmann * Limited support for catalogs: * * The syntax <ui:catalog>...</ui:catalog> is supported, and it is * possible to define catalogs in ui files. * * The syntax $[m(token)] looks up the token in the current catalog. * * The function cat-translate is also available. * * ui:select has the "display" attribute. * * Revision 1.6 2005/06/11 14:24:14 stolpmann * Extension of bracket expressions: many new functions. * Functions in bracket expressions may now lazily evaluate their arguments. * ui:if and ui:ifvar may refer to any functions defined for bracket * expressions. * New: ui:ifexpr * Parsing of bracket expressions is now done with ulex. Private interfaces * of PXP are no longer used for this purpose. * Serialization has been rewritten, and it is now safe. * Fix: In ui:context there may now be macro references at any location. * Also documented all these changes. * * Revision 1.5 2005/06/02 21:14:35 stolpmann * Improved the configure script a bit. * * Revision 1.4 2004/12/12 17:57:32 stolpmann * Added <q:wd-link> and <q:wd-xlink> to generate links for * applications that cannot use Javascript. Limited functionality, however. * See stdlib.xml for details. * * Revision 1.3 2003/02/16 01:07:03 stolpmann * size, substring, width: string positions are measured as * the number of characters, not as the number of bytes * * Revision 1.2 2002/11/03 20:56:56 stolpmann * New functions: translate, rev_translate * * Revision 1.1 2002/10/20 19:38:18 stolpmann * Initial revision * * *)