77c6b074c816bcb41207e2228fb544c58cec5ec1
[scilab.git] / scilab / modules / preferences / macros / getPreferencesValue.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
3 // Copyright (C) 2017 - Samuel GOUGEON
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13
14 function values = getPreferencesValue(xpath, attributes, doc)
15     rhs = argn(2);
16
17     if (rhs ~= 2 & rhs ~= 3) then
18         msg = _("%s: Wrong number of input arguments: %d or %d expected.\n")
19         error(msprintf(msg, "getPreferencesValue", 2, 3));
20     end
21
22     if type(xpath) <> 10 then
23         msg = _("%s: Wrong type for input argument #%d: String expected.\n")
24         error(msprintf(msg, "getPreferencesValue", 1));
25     end
26
27     if type(attributes) <> 10 then
28         msg = _("%s: Wrong type for input argument #%d: Matrix of strings expected.\n")
29         error(msprintf(msg, "getPreferencesValue", 2));
30     end
31
32     if rhs == 2 then
33         doc = SCIHOME + "/XConfiguration.xml"
34     end
35     doc0 = doc
36     delDoc = (rhs == 2 | type(doc0)==10)
37     if type(doc)==10 then
38         if isfile(doc)
39             try
40                 doc = xmlRead(doc0);
41             catch
42                 msg = _("%s: Invalid ""%s"" file.\n")
43                 error(msprintf(msg, "getPreferencesValue", tokens(doc0,["/" "\"])($)));
44             end
45         else
46             msg = _("%s: The file ""%s"" does not exist.\n")
47             error(msprintf(msg, "getPreferencesValue", doc));
48         end
49     elseif typeof(doc) ~= "XMLDoc" then
50         msg = _("%s: Wrong type for input argument #%d: A XMLDoc expected.\n")
51         error(msprintf(msg, "getPreferencesValue", 3));
52     end
53
54     try
55         xp = xmlXPath(doc, xpath);
56     catch
57         if delDoc then
58             xmlDelete(doc);
59         end
60         msg = gettext("%s: Invalid XPath request.\n")
61         error(msprintf(msg, "getPreferencesValue"));
62     end
63
64     if xp.size == 0 then
65         if delDoc then
66             xmlDelete(doc);
67         end
68         msg = gettext("%s: Invalid XPath request.")
69         error(msprintf(msg, "getPreferencesValue"));
70     end
71
72     values = [];
73     for i = 1 : xp.size
74         node = xp(i);
75         if node.type ~= "XML_ELEMENT_NODE" then
76             if delDoc then
77                 xmlDelete(doc);
78             end
79             msg = gettext("%s: Target node is not a XML_ELEMENT_NODE.")
80             error(msprintf(msg, "getPreferencesValue"));
81         end
82     
83         attr = node.attributes;
84         for j = 1:size(attributes,"*")
85             a = attributes(j)
86             v = attr(a);
87             if v ~= [] then
88                 values(i,j) = v;
89             else
90                 if delDoc then
91                     xmlDelete(doc);
92                 end
93                 msg = gettext("%s: Invalid attribute name: %s.")
94                 error(msprintf(msg, "getPreferencesValue", a));
95             end
96         end
97     end
98     if xp.size==1 then
99         values = matrix(values, size(attributes));
100     end
101     if delDoc then
102         xmlDelete(doc);
103     end
104 endfunction