X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fuwobo%2Fsrc%2Focaml%2Fuwobo_common.ml;h=1f7fb0328ae7e29d0edd801ef7201ed0b78da46e;hb=85ccebb566c36671ca753debe09e6dd5c9dd0df7;hp=09f9ba5a100f8fdb340f662c09edeb9e1e495143;hpb=beaf9a3cb95519e68e5806ac2f8a45b480d8e5ac;p=helm.git diff --git a/helm/uwobo/src/ocaml/uwobo_common.ml b/helm/uwobo/src/ocaml/uwobo_common.ml index 09f9ba5a1..1f7fb0328 100644 --- a/helm/uwobo/src/ocaml/uwobo_common.ml +++ b/helm/uwobo/src/ocaml/uwobo_common.ml @@ -1,98 +1,111 @@ - -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM 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. - * - * HELM 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. +(* + * Copyright (C) 2003: + * Stefano Zacchiroli + * for the HELM Team http://helm.cs.unibo.it/ + * + * This file is part of HELM, an Hypertextual, Electronic + * Library of Mathematics, developed at the Computer Science + * Department, University of Bologna, Italy. + * + * HELM 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. * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. + * HELM 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 HELM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + * + * For details, see the HELM World-Wide-Web page, + * http://helm.cs.unibo.it/ *) -let debug = false;; -let debug_print msg = if debug then prerr_endline msg;; +open Printf;; exception Uwobo_failure of string;; -class threadSafe = - object (self) - - val mutex = Mutex.create () - - (** condition variable: 'no readers is currently reading' *) - val noReaders = Condition.create () - - (** readers count *) - val mutable readersCount = 0 - - method private incrReadersCount = (* internal, not exported *) - self#doCritical (lazy ( - readersCount <- readersCount + 1 - )) - - method private decrReadersCount = (* internal, not exported *) - self#doCritical (lazy ( - if readersCount > 0 then readersCount <- readersCount - 1; - )) - - method private signalNoReaders = (* internal, not exported *) - self#doCritical (lazy ( - if readersCount = 0 then Condition.signal noReaders - )) +let supported_properties = [ + "cdata-section-elements"; + "doctype-public"; + "doctype-system"; + "encoding"; + "indent"; + "media-type"; + "method"; + "omit-xml-declaration"; + "standalone"; + "version" +] - method private doCritical: 'a. 'a lazy_t -> 'a = - fun action -> - debug_print ""; - (try - Mutex.lock mutex; - let res = Lazy.force action in - Mutex.unlock mutex; - debug_print ""; - res - with e -> - Mutex.unlock mutex; - raise e); +let is_supported_property name = List.mem name supported_properties - method private doReader: 'a. 'a lazy_t -> 'a = - fun action -> - debug_print ""; - let cleanup () = - self#decrReadersCount; - self#signalNoReaders - in - self#incrReadersCount; - let res = (try Lazy.force action with e -> (cleanup (); raise e)) in - cleanup (); - debug_print ""; - res +let usage_string = + sprintf +" + + + UWOBO's help message + + +

+ Usage: http://hostname:uwoboport/command +

+

+ Available commands: +

+

+ help
+ display this help message +

+

+ add?bind=key,uri[&bind=key,stylesheet[&...]]
+ load a new stylesheet, specified by uri, and bind it to key + key +

+

+ remove?[?keys=key1,key2,...]
+ unload stylesheets specified by key1, key2, ... or all + stylesheets if no key was given +

+

+ reload?[?keys=key1,key2,...]
+ reload stylesheets specified by key1, key2, ... or all + stylesheets if no key was given +

+

+ list
+ return a list of loaded stylesheets +

+

+ apply?xmluri=uri&keys=key1,key2,...[¶m.name=value[¶m.name=value[&...]]][¶m.key.name=value[¶m.key.name=value[&...]]][&name[=value][&prop.name[=value][&...]]]
+ apply a chain of stylesheets, specified by key1, key2, ..., to an + input document, specified by uri.
+ Additional parameters can be set for each stylesheet application: global + parameters (i.e. parameters passed to all stylesheets) are set using + param.name=value syntax, per stylesheet parameters are set using + param.key.name=value where key is the key of a loaded + stylesheet.
+ Properties of the final chain output can be set too: valueless properties + can be set using prop.name syntax, others can be set using + prop.name=value syntax.
+ Current supported properties are: %s. +

+ + +" + (String.concat ", " supported_properties);; - (* TODO may starve!!!! is what we want or not? *) - method private doWriter: 'a. 'a lazy_t -> 'a = - fun action -> - debug_print ""; - self#doCritical (lazy ( - while readersCount > 0 do - Condition.wait noReaders mutex - done; - let res = Lazy.force action in - debug_print ""; - res - )) +let pp_error = sprintf "

Error: %s

";; +let return_error msg outchan = + Http_daemon.respond ~body:(pp_error msg) outchan;; +let bad_request body outchan = + Http_daemon.respond_error ~code:400 ~body outchan +;; - end