Atoms 0.2
[scilab.git] / scilab / modules / atoms / macros / atomsSearch.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008 - INRIA - Delphine GASC <delphine.gasc@scilab.org>
3 // Copyright (C) 2009 - DIGITEO - Sylvestre LEDRU <sylvestre.ledru@scilab.org>
4 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
5 //
6 // This file must be used under the terms of the CeCILL.
7 // This source file is licensed as described in the file COPYING, which
8 // you should have received as part of this distribution.  The terms
9 // are also available at
10 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11
12 // End user function
13
14 // Research of a toolbox
15
16 function result = atomsSearch(keyword, typeSearch)
17   rhs = argn(2)
18
19   if (rhs == 2 | rhs == 1) then
20
21   // If there is no type
22   if rhs == 1
23     typeSearch = "all"
24   end
25   result = %f
26   listTool = []
27   // We shape
28   keyword = splitWord(keyword)
29   typeSearch = convstr(typeSearch,"l")
30   [a, b] = size(keyword)
31   global numberFunction
32   listDesc = atomsReadDesc("")
33   [n, m] = size(listDesc("Toolbox"))
34   // We check all toolboxes one by one
35   for i=1:n
36     // Different value case of typeSearch
37     if typeSearch == "all"
38       // Research in Description + Title + Toolbox + Category + Author
39       titleTool = convstr(listDesc("Title")(i),"l")
40       descTool = convstr(listDesc("Description")(i),"l")
41       nameTool = convstr(listDesc("Toolbox")(i),"l")
42       catTool = convstr(listDesc("Category")(i),"l")
43       authorTool = convstr(listDesc("Author")(i),"l")
44       functionTool = listDesc("Function")(i)
45       // Comparaison keyword and words (we research the key-word position in the word, if it's == [] the word is not found; in this case, it's useless to compare the other keywords)
46       toolFind = %t
47       for j=1:a
48         if strindex(titleTool, keyword(j)) == [] & strindex(descTool, keyword(j)) == [] & strindex(nameTool, keyword(j)) == [] & strindex(catTool, keyword(j)) == [] & strindex(authorTool, keyword(j)) == []
49           toolFind = %f
50           for k=1:numberFunction
51             if strindex(convstr(functionTool(string(k)), "l"), keyword(j)) <> []
52               toolFind = %t
53             end
54           end
55           if ~toolFind
56             break
57           end
58         end
59       end
60     elseif typeSearch == "author"
61       // Research in Author
62       authorTool = convstr(listDesc("Author")(i),"l")
63       // Comparaison keyword and words
64       toolFind = %t
65       for j=1:a
66         if strindex(authorTool, keyword(j)) == []
67           toolFind = %f
68           break
69         end
70       end
71     elseif typeSearch == "entity"
72       // Research in Entity
73       entityTool = convstr(listDesc("Entity")(i),"l")
74       // Comparaison keyword and words
75       toolFind = %t
76       for j=1:a
77         if strindex(entityTool, keyword(j)) == []
78           toolFind = %f
79           break
80         end
81       end 
82     elseif typeSearch == "function"
83       // Research in Function
84       functionTool = listDesc("Function")(i)
85       // Reading lines to lines of the functions
86       // Comparaison keyword and words
87       toolFind = %t
88       for j=1:a
89         for k=1:numberFunction
90           toolFind = %f
91           if strindex(convstr(functionTool(string(k)), "l"), keyword(j)) <> []
92             toolFind = %t
93             break
94           end
95         end
96       end 
97     else
98       atomsDisplayMessage(sprintf(_("The research field %s doesn''t exist"),typeSearch))
99       return result
100     end
101     // If we found the words
102     if toolFind
103       [n, m] = size(listTool)
104       // We check if the Toolbox suit to the scilab version
105       if atomsVerifVersionScilab(listDesc("ScilabVersion")(i))
106         listTool(n+1) = listDesc("Toolbox")(i) + " - " + listDesc("Title")(i)
107       else
108         listTool(n+1) = listDesc("Toolbox")(i) + " - " + listDesc("Title")(i) + " - Warning this toolbox (Version " + listDesc("Version")(i) + ") isn''t compatible with your version of scilab"
109       end
110       result = %t
111     end
112   end
113   if ~result
114     disp(_("No toolbox matches the research"))
115   else
116     listTool = unique(listTool)
117     [n, m] = size(listTool)
118     if n == 1
119       disp(_("The following toolbox matches the research:"))
120       disp(listTool)
121     else
122       disp(_("The following toolboxes match the research:"))
123       for i=1:n
124         disp("- " + listTool(i))
125       end
126     end
127   end
128   return result
129   else
130     error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsSearch",1,2))
131   end
132
133
134 endfunction
135
136 // We split the sentences on a words array
137 function var = splitWord(var)
138   // We cross everything in small letter
139   var = convstr(var,"l")
140   // We split (error if the last character is a " ")
141   var = atomsSplitValue(var, " ")
142 endfunction