7b86d7bb2c47066ea12c921e2bfbd30773e3de42
[scilab.git] / scilab / modules / graphics / macros / getLineSpec.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2004-2006 - INRIA - Fabrice Leray
3 // Copyright (C) 2012 - 2016 - Scilab Enterprises
4 //
5 // This file is hereby licensed under the terms of the GNU GPL v2.0,
6 // pursuant to article 5.3.4 of the CeCILL v.2.1.
7 // This file was originally licensed under the terms of the CeCILL v2.1,
8 // and continues to be available under such terms.
9 // For more information, see the COPYING file which you should have received
10 // along with this program.
11
12 function [Color,Line,LineStyle,Marker,MarkerStyle,MarkerSize,fail]=getLineSpec(str,current_figure,cur_draw_mode)
13
14     LineStyle=1;
15     Color=[];
16     MarkerStyle=[];
17     MarkerSize=1;
18     LineStyle=1;
19     fail=0;
20
21     //conversion to lower format
22     str = convstr(str);
23
24     // 1) LINE STYLE
25     // Line type modifiers
26
27     if strindex(str,"--")
28         str=strsubst(str,"--","");
29         LineStyle=2;
30         Line = %T;
31     elseif strindex(str,"-.")
32         str=strsubst(str,"-.","");
33         LineStyle=4;
34         Line = %T;
35     elseif strindex(str,":")
36         str=strsubst(str,":","");
37         LineStyle=5;
38         Line = %T;
39     elseif strindex(str,"-")
40         str=strsubst(str,"-","");
41         LineStyle=1;
42         Line = %T;
43     end
44
45     //
46
47     //disp("str vaut:::::::: 1/2")
48     //disp(str)
49
50     // 2) COLORS + MARKS STYLE
51
52     opt1=[];
53
54     //Marks
55     Table = [ "+" "o" "*" "." "x" "square" "diamond" "^" "v" ">" "<" "pentagram"];
56     MarksStyleVal=[1 9 10 0 2 11 5 6 7 12 13 14];
57     //MarksSizeVal =[4 3 7  1 3  3 4 3 3  3  3  3];
58     //MarksSizeVal =[6 6 6  6 6  6 6 6 6  6  6  6]; // size is given in points now (25.02.05)
59
60     //Colors
61     Table= [Table "red" "green" "blue" "cyan" "magenta" "yellow" "black" "k" "white"]
62     ColorVal   = ["red" "green" "blue" "cyan" "magenta" "yellow" "black" "black" "white"]
63
64     //color management
65     //difficulty here since we have to allow every kind of writings:
66     //i.e:
67     //magenta can be set by: 'm' 'ma' 'mag' 'mage' 'magen' 'magent' or at least 'magenta'
68     //
69
70
71     str = str+"@";
72
73     while length(str) > 1
74         c1 = part(str,1); // We get the first character
75         k=find(part(Table,1)==c1);
76
77         if (k == [] | (size(k,"*") > 1 & c1 <> "b"))
78             ResetFigureDDM(current_figure, cur_draw_mode);
79             error(msprintf(gettext("%s: Wrong type for input argument.\n"), "getLineSpec"));
80         end
81
82         if c1=="b" // special case here : we have to distinguish between black and blue colors
83             c2 = part(str,2);
84             if (c2 == "l")
85                 c3 = part(str,3);
86                 if (c3 == "a")
87                     k=19; // k is set to black color
88                 else
89                     k=15; // k is set to blue color
90                 end
91             else
92                 k=15; // k is set to blue color
93             end
94         end
95
96         opt = Table(k);
97         for i=1:length(str)
98             if part(opt,i) <> part(str,i)
99                 break;
100             end
101         end
102
103         opt1 = [opt1 k];
104
105         str = part(str,i:length(str));
106
107     end
108
109
110     // LineSpec is parsed now
111     //Marker = %F;
112     //Line   = %T;
113
114     for i=1:size(opt1,"*")
115
116         if (opt1(i) <= 12)
117             Marker = %T;
118             MarkerStyle = MarksStyleVal(opt1(i));
119             MarkerSize  = 6;
120             //MarkerSize  = MarksSizeVal (opt1(i));
121             //    disp("MarkerSize =");
122             //    disp(MarkerSize);
123         else
124             Color = color(ColorVal(opt1(i)-12));
125         end
126
127     end
128
129
130 endfunction
131 // end of getLineSpec