source: Dev/branches/rest-dojo-ui/client/dojox/date/hebrew/numerals.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 4.3 KB
Line 
1define(["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});
Note: See TracBrowser for help on using the repository browser.