License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsReadDesc.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 // Internal function
14
15 // Parsing of the DESCRIPTION file
16
17 // =============================================================================
18 // description_out = atomsReadDesc(file_in,description_in)
19 // Parse a DESCRIPTION file
20 //
21 // Date : 20/03/2009
22 // =============================================================================
23
24 function description_out = atomsReadDesc(file_in,description_in)
25
26     description_out = struct();
27
28     rhs  = argn(2);
29
30     if rhs < 1 | rhs > 2 then
31         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsReadDesc",1,2));
32     end
33
34     if regexp( file_in,"/DESCRIPTION$/") == [] then
35         error(msprintf(gettext("%s: Wrong value for input argument #%d: String that ends with DESCRIPTION expected.\n"),"atomsReadDesc",1));
36     end
37
38     if rhs==2 & type(description_in)<>17 then
39         error(msprintf(gettext("%s: Wrong type for input argument #%d: mlist expected.\n"),"atomsReadDesc",2));
40     end
41
42     if rhs==2 then
43         description_out = description_in;
44     end
45
46     tabDesc         = mgetl(file_in);
47     current_field   = "";
48
49     for i=1:size(tabDesc,"*")
50
51         // First case : new field
52         if regexp(tabDesc(i),"/^[a-zA-Z0-9]*:\s/","o") == 1 then
53             current_field_length    = regexp(tabDesc(i),"/:\s/","o")
54             current_field           = part(tabDesc(i),1:current_field_length-1);
55             current_value           = part(tabDesc(i),current_field_length+2:length(tabDesc(i)));
56             description_out(current_field) = current_value;
57             continue;
58         end
59
60         // Second case : Current field continuation
61         if regexp(tabDesc(i),"/^\s/","o") == 1 then
62             current_value = part(tabDesc(i),2:length(tabDesc(i)));
63             description_out(current_field) = [ description_out(current_field) ; current_value ];
64             continue;
65         end
66
67         // Third case : Blank line
68         if length(tabDesc(i)) == 0 then
69             continue;
70         end
71
72         // Else Error
73         error(msprintf(gettext("%s: The description is not well formated at line %d\n"),"atomsReadDesc",i));
74
75     end
76
77 endfunction