* Bug 10455 fixed: helpbrowser improved
[scilab.git] / scilab / modules / helptools / macros / add_help_chapter.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2007-2008 - INRIA - Pierre MARECHAL
3 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL
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 // Parameters
15 //
16 // title      : A string array - Chapter title
17 // path       : A string array - Chapter path
18 // modulemode : A boolean      - %F by default
19 //                             - if TRUE, the chpater is consider as internal module online help,
20 //                               otherwise, it's consider as external online help,
21
22 // Description
23 //
24 // This function adds a new entry in the helps list. The help chapter files are to
25 // be located in a single directory. If the given path already exists in the helps
26 // list, nothing is done. The function checks if the directory exist.
27
28 function ok = add_help_chapter(helptitle,path,modulemode)
29
30     ok = [];
31
32     // Check input arguments
33     // =========================================================================
34
35     [lhs,rhs] = argn(0);
36
37     // Input arguments number
38     // -------------------------------------------------------------------------
39
40     if rhs < 2 | rhs > 3 then
41         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"add_help_chapter",2,3));
42     end
43
44     // Input arguments types
45     // -------------------------------------------------------------------------
46
47     if type(helptitle) <> 10 then
48         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"add_help_chapter",1));
49     end
50
51     if type(path) <> 10 then
52         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"add_help_chapter",2));
53     end
54
55     if (rhs>2) & (type(modulemode) <> 4) then
56         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"add_help_chapter",3));
57     end
58
59     // Input arguments dimensions
60     // -------------------------------------------------------------------------
61
62     if or( size(helptitle) <> size(path) ) then
63         error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"add_help_chapter",1,2));
64     end
65
66     // Default value
67     // =========================================================================
68
69     if rhs < 3 then
70         modulemode = %F;
71     end
72
73     if modulemode then
74         global %helps_modules;
75         this_help = %helps_modules;
76     else
77         global %helps;
78         this_help = %helps;
79     end
80
81     // Save the current path
82     // =========================================================================
83     current_directory = pwd();
84
85     // Loop on "path"
86     // =========================================================================
87     path = pathconvert(path,%F);
88
89     for i=1:size(path,"*")
90
91         ok(i) = %F;
92
93         // Get the absolute path of "path"
94         // ---------------------------------------------------------------------
95
96         if ~isdir(path(i)) then
97             chdir(current_directory);
98             error(msprintf(gettext("%s: Wrong value for input argument #%d: An existing directory expected.\n"),"add_help_chapter",2));
99         end
100
101         chdir(path(i));
102
103         if getos() == "Windows" then
104             path(i) = getlongpathname(pwd());
105         else
106             path(i) = pwd();
107         end
108
109         // Check if the path is already added
110         // ---------------------------------------------------------------------
111
112         if find( this_help(:,1) == path(i)) <> [] then
113             continue;
114         end
115
116         this_help = [ this_help ; path(i) helptitle(i) ];
117
118         ok(i) = %T;
119     end
120
121     // Go to the original location
122     // =========================================================================
123     chdir(current_directory);
124
125     // Reshape ok
126     // =========================================================================
127     ok = matrix(ok,size(path));
128
129     // That's all
130     // =========================================================================
131     if modulemode then
132         %helps_modules = this_help;
133     else
134         %helps = this_help;
135     end
136
137     // Update the help browser (if open)
138     // =========================================================================
139     [?, w] = where()
140     if grep(w, "atomsAutoload") == []
141         helpbrowser_update()
142     // otherwise: We update the browser from scilab.start AFTER atomsAutoload().
143     // to not make the browser blinking.
144     end
145
146 endfunction