[483] | 1 | define(["../..", "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 | }); |
---|