numerals.js 4.4 KB

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