4423d8d55ef27df1347fcacab7b0c53381676233
[scilab.git] / scilab / modules / time / macros / calendar.sci
1 //------------------------------------------------------------------------
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) INRIA - Allan CORNET
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 // Copyright (C) 2019 - Samuel GOUGEON
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
15 function listcal = calendar(varargin)
16     lhs = argn(1);
17     rhs = argn(2);
18
19     c = [0,0,0];
20     
21     // Looking for the "display" keyword
22     display = %F
23     if rhs > 0 then
24         v = varargin($)
25         if type(v)==10 & v(1)==part("display",1:length(v))
26             display = %T
27             varargin($) = null()
28             rhs = rhs-1
29             break
30         end
31     end
32
33     select rhs
34     case 0
35         ct = getdate();
36         c = [ct(1),ct(2),1]
37         break
38     case 2
39         Y = varargin(1);
40         M = varargin(2);
41         msg = gettext("%s: Argument #%d: Scalar (1 element) expected.\n");
42         if length(Y)>1
43             error(msprintf(msg,"calendar", 1));
44         end
45         if length(M)>1
46             error(msprintf(msg,"calendar", 2));
47         end
48         if (M < 1) | (M > 12) then
49             msg = gettext("%s: Argument #%d: Must be in the interval [%d, %d].\n")
50             error(msprintf(msg, "calendar", 1, 12));
51         end
52         c = [Y, M, 1];
53         break
54     else
55         msg = gettext("%s: Wrong number of input arguments: %d or %d expected.\n")
56         if display
57             error(msprintf(msg, "calendar", 1, 3));
58         else
59             error(msprintf(msg, "calendar", 0, 2));
60         end
61     end
62
63
64     months = [gettext("Jan"); ..
65     gettext("Feb"); ..
66     gettext("Mar"); ..
67     gettext("Apr"); ..
68     gettext("May"); ..
69     gettext("Jun"); ..
70     gettext("Jul"); ..
71     gettext("Aug"); ..
72     gettext("Sep"); ..
73     gettext("Oct"); ..
74     gettext("Nov"); ..
75     gettext("Dec")];
76
77     month = months(c(:,2), :);
78     cal = Calendar(c(1), c(2));
79     dayNames = gettext("Mon  Tue  Wed  Thu  Fri  Sat  Sun")
80     //!\\ Glyphs for ja, zh, .. are not monospaced, even in the Monospaced font
81     // .po translations have been tuned and tested for alignments with Monospaced 12.
82     Title = sprintf("%s %d", month, c(1))
83     if display then
84         k = vectorfind(cal, zeros(1,7), "r")
85         cal(k,:) = []
86         t = matrix(msprintf("%d\n",cal(:)), -1, 7)
87         t(t=="0") = ""
88         t = strcat(justify(t, "r"), "   ", "c");
89         Title = blanks((length(t(2))-length(Title))/2) + Title
90         t = strsubst(["" ; Title ; dayNames ; t], " ", ascii(160))  // non-breakable spaces
91         mprintf(" %s\n", t)
92         listcal = [];
93     else
94         listcal = list(Title, dayNames, cal);
95     end
96 endfunction