]> matita.cs.unibo.it Git - helm.git/blob - helm/uwobo/uwobo_styles.ml
moved uwobo sources to the root uwobo directory
[helm.git] / helm / uwobo / uwobo_styles.ml
1 (*
2  * Copyright (C) 2003:
3  *    Stefano Zacchiroli <zack@cs.unibo.it>
4  *    for the HELM Team http://helm.cs.unibo.it/
5  *
6  *  This file is part of HELM, an Hypertextual, Electronic
7  *  Library of Mathematics, developed at the Computer Science
8  *  Department, University of Bologna, Italy.
9  *
10  *  HELM is free software; you can redistribute it and/or
11  *  modify it under the terms of the GNU General Public License
12  *  as published by the Free Software Foundation; either version 2
13  *  of the License, or (at your option) any later version.
14  *
15  *  HELM is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with HELM; if not, write to the Free Software
22  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston,
23  *  MA  02111-1307, USA.
24  *
25  *  For details, see the HELM World-Wide-Web page,
26  *  http://helm.cs.unibo.it/
27  *)
28
29 open Printf;;
30
31 exception Stylesheet_not_found of string;;
32 exception Stylesheet_already_in of string;;
33
34 class styles =
35   object (self)
36     (* INVARIANT: 'stylesheets' and 'uris' are in sync *)
37
38     val mutable stylesheets = []
39     val mutable uris = []
40     val domImpl = Gdome.domImplementation ()
41
42       (** process an XSLT stylesheet *)
43     method private process uri = domImpl#createDocumentFromURI ~uri ()
44
45     method get keys =
46       let rev_keys = List.rev keys in
47       let last_key = List.hd rev_keys in
48       let p_stylesheets =
49         List.fold_left
50           (fun collected_styles key ->
51             let (key, stylesheet) =
52               try
53                 List.find (fun (k, _) -> k = key) stylesheets
54               with Not_found -> raise (Stylesheet_not_found key)
55             in
56             (key, Gdome_xslt.processStylesheet stylesheet)::collected_styles)
57           []
58           rev_keys
59       in
60       let last_stylesheet =
61         snd (List.find (fun (k, _) -> k = last_key) stylesheets)
62       in
63       (p_stylesheets, last_stylesheet)
64
65     method add key uri =
66       if (List.mem_assoc key uris) then
67         raise (Stylesheet_already_in key)
68       else begin
69         uris <- (key, uri) :: uris;
70         stylesheets <- (key, self#process uri) :: stylesheets
71       end
72
73     method remove key =
74       if not (List.mem_assoc key uris) then
75         raise (Stylesheet_not_found key)
76       else begin
77         uris <- List.remove_assoc key uris;
78         stylesheets <- List.remove_assoc key stylesheets
79       end
80
81     method removeAll = uris <- []; stylesheets <- []
82
83     method list =
84       List.map
85         (fun (key, uri) ->
86           sprintf "key = %s, uri = %s" key (List.assoc key uris))
87         uris
88
89     method reload key =
90       (try
91         let uri = List.assoc key uris in
92         stylesheets <-
93           (key, self#process uri) :: (List.remove_assoc key stylesheets)
94       with Not_found ->
95         raise (Stylesheet_not_found key))
96
97     method reloadAll =
98       stylesheets <- List.map (fun (key, uri) -> (key, self#process uri)) uris
99
100   end
101