1 | define(["dojo/_base/kernel", "dojo/_base/array"], function(dojo){ |
---|
2 | dojo.getObject("date.hebrew.numerals", true, dojox); |
---|
3 | dojo.experimental("dojox.date.hebrew.numerals"); |
---|
4 | |
---|
5 | //Conversion from "Hindi" numerals to Hebrew numerals and vice versa |
---|
6 | |
---|
7 | var DIG="×××××××××"; |
---|
8 | var TEN="××××× ×¡×¢×€×Š"; |
---|
9 | var HUN="קךשת"; |
---|
10 | |
---|
11 | var transformChars = function(str, nogrsh){ |
---|
12 | str = str.replace("××", "××").replace("××", "××"); |
---|
13 | |
---|
14 | if(!nogrsh){ |
---|
15 | var len = str.length; |
---|
16 | if(len > 1){ |
---|
17 | str = str.substr(0, len - 1) + '"' + str.charAt(len - 1); |
---|
18 | }else{ |
---|
19 | str += "\u05F3"; // 05F3:geresh |
---|
20 | } |
---|
21 | } |
---|
22 | return str; // String |
---|
23 | }; |
---|
24 | |
---|
25 | var parseStrToNumber = function(str){ |
---|
26 | var num = 0; |
---|
27 | dojo.forEach(str, function(ch){ |
---|
28 | var i; |
---|
29 | if((i = DIG.indexOf(ch)) != -1){ |
---|
30 | num += ++i; |
---|
31 | }else if((i = TEN.indexOf(ch)) != -1){ |
---|
32 | num += 10 * ++i; |
---|
33 | }else if((i = HUN.indexOf(ch)) != -1){ |
---|
34 | num += 100 * ++i; |
---|
35 | } |
---|
36 | }); |
---|
37 | return num; //Number |
---|
38 | }; |
---|
39 | |
---|
40 | var convertNumberToStr = function(num){ |
---|
41 | var str = "", n = 4, j = 9; |
---|
42 | while(num){ |
---|
43 | if(num >= n*100){ |
---|
44 | str += HUN.charAt(n-1); |
---|
45 | num -= n*100; |
---|
46 | continue; |
---|
47 | }else if(n > 1){ |
---|
48 | n--; |
---|
49 | continue; |
---|
50 | }else if(num >= j*10){ |
---|
51 | str += TEN.charAt(j-1); |
---|
52 | num -= j*10; |
---|
53 | }else if(j > 1){ |
---|
54 | j--; |
---|
55 | continue; |
---|
56 | }else if(num > 0){ |
---|
57 | str += DIG.charAt(num-1); |
---|
58 | num = 0; |
---|
59 | } |
---|
60 | } |
---|
61 | return str; //String |
---|
62 | }; |
---|
63 | |
---|
64 | dojox.date.hebrew.numerals.getYearHebrewLetters = function(/*Number */ year){ |
---|
65 | // summary: converts the year from an integer to Hebrew numerals. |
---|
66 | // |
---|
67 | // example: |
---|
68 | // | var date1 = new dojox.date.hebrew.Date(); |
---|
69 | // | |
---|
70 | // | document.writeln(dojox.date.hebrew.numerals.getYearHebrewLetters(date1.getFullYear()); |
---|
71 | |
---|
72 | var rem = year % 1000; |
---|
73 | //FIXME: tests include dates outside this range and seem to pass. |
---|
74 | // if((year - rem) / 1000 != 5){ throw new Error("Hebrew year "+year+" is not in range 5001-5999");} |
---|
75 | return transformChars(convertNumberToStr(rem)); // String |
---|
76 | }; |
---|
77 | |
---|
78 | dojox.date.hebrew.numerals.parseYearHebrewLetters = function(/*String hebrew year*/ year){ |
---|
79 | // summary: converts the year written in Hebrew numerals to an integer |
---|
80 | // |
---|
81 | // example: |
---|
82 | // | var date = new dojox.date.hebrew.Date(); |
---|
83 | // | date.setFullYear(dojox.date.hebrew.numerals.parseYearHebrewLetters('\u05ea\u05e9\u05e1\u05f4\u05d7')); |
---|
84 | |
---|
85 | return parseStrToNumber(year) + 5000; // int |
---|
86 | }; |
---|
87 | |
---|
88 | dojox.date.hebrew.numerals.getDayHebrewLetters = function(day, /*boolean?*/ nogrsh){ |
---|
89 | // summary: converts an integer to a String representing the number in Hebrew numerals. Can be formatted with or without geresh ׳ |
---|
90 | // |
---|
91 | // example: |
---|
92 | // | var date1 = new dojox.date.hebrew.Date(); |
---|
93 | // | |
---|
94 | // | document.writeln(dojox.date.hebrew.numerals.getDayHebrewLetters(date1.getDay()); |
---|
95 | |
---|
96 | return transformChars(convertNumberToStr(day), nogrsh); // String |
---|
97 | }; |
---|
98 | |
---|
99 | dojox.date.hebrew.numerals.parseDayHebrewLetters = function(/*String hebrew*/ day){ |
---|
100 | // summary: converts the string containing a Hebrew numeral to an integer |
---|
101 | // |
---|
102 | // example: |
---|
103 | // | var date1 = new dojox.date.hebrew.Date(); |
---|
104 | // | |
---|
105 | // | date1.setDate(dojox.date.hebrew.numerals.parseDayHebrewLetters('\u05d0')); // ALEPH |
---|
106 | return parseStrToNumber(day); // int |
---|
107 | }; |
---|
108 | |
---|
109 | dojox.date.hebrew.numerals.getMonthHebrewLetters = function(/*int*/month){ |
---|
110 | // summary: converts an integer representing a month to a String written in Hebrew numerals |
---|
111 | // |
---|
112 | // example: |
---|
113 | // | var date1 = new dojox.date.hebrew.Date(); |
---|
114 | // | |
---|
115 | // | document.writeln(dojox.date.hebrew.numerals.getMonthHebrewLetters(date1.getMonth()); |
---|
116 | |
---|
117 | return transformChars(convertNumberToStr(month+1)); // String |
---|
118 | }; |
---|
119 | |
---|
120 | dojox.date.hebrew.numerals.parseMonthHebrewLetters = function(/*String*/monthStr){ |
---|
121 | // summary: converts a Hebrew numeral string representing |
---|
122 | // a month to an integer. The returned value |
---|
123 | // is indexed in the month name array. To use it for |
---|
124 | // setMonth, do correction for leap year |
---|
125 | // |
---|
126 | // example: |
---|
127 | // | var date = new dojox.date.hebrew.Date(); |
---|
128 | // | var number = dojox.date.hebrew.numerals.parseMonthHebrewLetters("\u05ea\u05de\u05d5\u05d6"); // Tammuz |
---|
129 | // | date.setMonth(number); |
---|
130 | |
---|
131 | //month number from 0 to 12 |
---|
132 | var monnum = dojox.date.hebrew.numerals.parseDayHebrewLetters(monthStr) - 1; |
---|
133 | |
---|
134 | if(monnum == -1 || monnum > 12){ |
---|
135 | throw new Error("The month name is incorrect , month = " + monnum); |
---|
136 | } |
---|
137 | return monnum; |
---|
138 | }; |
---|
139 | return dojox.date.hebrew.numerals; |
---|
140 | }); |
---|