source: Dev/trunk/src/client/dojox/date/hebrew/numerals.js @ 483

Last change on this file since 483 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

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