when_exe 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +210 -171
  3. data/bin/irb.rc +1 -0
  4. data/lib/when_exe.rb +78 -53
  5. data/lib/when_exe/basictypes.rb +27 -8
  6. data/lib/when_exe/calendarnote.rb +848 -805
  7. data/lib/when_exe/calendartypes.rb +110 -240
  8. data/lib/when_exe/coordinates.rb +2440 -2175
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +13 -11
  11. data/lib/when_exe/core/extension.rb +38 -45
  12. data/lib/when_exe/ephemeris.rb +43 -14
  13. data/lib/when_exe/ephemeris/eclipse.rb +149 -0
  14. data/lib/when_exe/ephemeris/notes.rb +39 -7
  15. data/lib/when_exe/icalendar.rb +2 -6
  16. data/lib/when_exe/inspect.rb +1408 -1399
  17. data/lib/when_exe/parts/enumerator.rb +486 -477
  18. data/lib/when_exe/parts/resource.rb +1101 -1069
  19. data/lib/when_exe/parts/timezone.rb +6 -5
  20. data/lib/when_exe/region/babylonian.rb +405 -405
  21. data/lib/when_exe/region/bahai.rb +21 -61
  22. data/lib/when_exe/region/chinese/epochs.rb +81 -81
  23. data/lib/when_exe/region/chinese/twins.rb +51 -51
  24. data/lib/when_exe/region/christian.rb +7 -2
  25. data/lib/when_exe/region/coptic.rb +1 -1
  26. data/lib/when_exe/region/discordian.rb +9 -16
  27. data/lib/when_exe/region/french.rb +1 -1
  28. data/lib/when_exe/region/hanke_henry.rb +57 -0
  29. data/lib/when_exe/region/indian.rb +41 -73
  30. data/lib/when_exe/region/international_fixed.rb +97 -0
  31. data/lib/when_exe/region/iranian.rb +203 -203
  32. data/lib/when_exe/region/japanese.rb +13 -13
  33. data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
  34. data/lib/when_exe/region/japanese/notes.rb +1482 -1383
  35. data/lib/when_exe/region/japanese/residues.rb +726 -721
  36. data/lib/when_exe/region/japanese/twins.rb +37 -37
  37. data/lib/when_exe/region/jewish.rb +2 -2
  38. data/lib/when_exe/region/pax.rb +60 -0
  39. data/lib/when_exe/region/positivist.rb +100 -0
  40. data/lib/when_exe/region/roman.rb +333 -334
  41. data/lib/when_exe/region/shire.rb +3 -20
  42. data/lib/when_exe/region/thai.rb +2 -2
  43. data/lib/when_exe/region/tibetan.rb +3 -3
  44. data/lib/when_exe/region/tranquility.rb +208 -0
  45. data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
  46. data/lib/when_exe/region/vietnamese.rb +4 -4
  47. data/lib/when_exe/region/world.rb +9 -13
  48. data/lib/when_exe/region/world_season.rb +89 -0
  49. data/lib/when_exe/region/zoroastrian.rb +4 -2
  50. data/lib/when_exe/tmobjects.rb +14 -4
  51. data/lib/when_exe/tmposition.rb +239 -81
  52. data/lib/when_exe/tmreference.rb +57 -28
  53. data/lib/when_exe/version.rb +1 -1
  54. data/link_to_online_documents +6 -3
  55. data/test/examples/today.rb +1 -1
  56. data/test/scripts.rb +23 -0
  57. data/test/scripts/2.ext.rb +169 -0
  58. data/test/scripts/2.rb +169 -0
  59. data/test/scripts/3.ext.rb +133 -0
  60. data/test/scripts/3.rb +134 -0
  61. data/test/scripts/4.ext.rb +112 -0
  62. data/test/scripts/4.min.rb +65 -0
  63. data/test/scripts/4.rb +136 -0
  64. data/test/scripts/5.ext.rb +78 -0
  65. data/test/scripts/5.rb +81 -0
  66. data/test/scripts/6.gcal.rb +131 -0
  67. data/test/scripts/6.rb +205 -0
  68. data/test/scripts/6.tz.rb +105 -0
  69. data/test/scripts/7.phase.rb +109 -0
  70. data/test/scripts/7.rb +95 -0
  71. data/test/scripts/7.term.rb +128 -0
  72. data/test/scripts/7.week.rb +84 -0
  73. data/test/scripts/8.ext.rb +61 -0
  74. data/test/scripts/8.rb +62 -0
  75. data/test/scripts/9.ext.rb +131 -0
  76. data/test/scripts/9.rb +130 -0
  77. data/test/scripts/chinese-luni-solar.rb +52 -0
  78. data/test/{examples → scripts}/geometric_complex.rb +41 -41
  79. data/test/scripts/geometric_complex.txt +18 -0
  80. data/test/scripts/korea.rb +59 -0
  81. data/test/scripts/thai-reviewed.txt +211 -0
  82. data/test/scripts/thai.rb +36 -0
  83. data/test/scripts/thai.txt +210 -0
  84. data/test/test.rb +7 -0
  85. data/test/test/basictypes.rb +22 -0
  86. data/test/test/coordinates.rb +2 -1
  87. data/test/test/ephemeris.rb +34 -2
  88. data/test/test/icalendar.rb +12 -0
  89. data/test/test/inspect.rb +37 -1
  90. data/test/test/parts.rb +4 -3
  91. data/test/test/region/armenian.rb +20 -0
  92. data/test/test/region/bahai.rb +58 -0
  93. data/test/test/region/chinese.rb +14 -3
  94. data/test/test/region/christian.rb +16 -35
  95. data/test/test/region/discordian.rb +20 -0
  96. data/test/test/region/indian.rb +30 -2
  97. data/test/test/region/japanese.rb +24 -0
  98. data/test/test/region/jewish.rb +2 -0
  99. data/test/test/region/m17n.rb +9 -0
  100. data/test/test/region/reforms.rb +121 -0
  101. data/test/test/region/residue.rb +17 -11
  102. data/test/test/region/shire.rb +58 -0
  103. data/test/test/region/swedish.rb +45 -0
  104. data/test/test/region/zoroastrian.rb +58 -0
  105. data/test/test/tmobjects.rb +74 -0
  106. data/test/test/tmposition.rb +468 -397
  107. data/when_exe.gemspec +2 -2
  108. metadata +49 -6
@@ -13,63 +13,63 @@ module When
13
13
  ChineseLuniSolar = [self, [
14
14
  'locale:[=ja:, en=en:]',
15
15
  'area:[中国の暦月=, *ChineseLuniSolar=]',
16
- ['[太初暦]1.01.01', '@CR', '1-01-01^ChineseTwin::太初暦', '85-01-01'], # 西暦が正になるところから開始(実際は-103.01.01)
17
- ['[四分暦]85.01.01', '@CR', '85-01-01^ChineseTwin::四分暦', '265-01-01'],
18
- ['[乾象暦]222.01.01', '@CR', '222-01-01^ChineseTwin::乾象暦', '281-01-01'],
19
- ['[景初暦]237.01.01', '@CR', '237-01-01^ChineseTwin::景初暦', '452-01-01'],
20
- ['[元嘉暦]445.01.01', '@CR', '445-01-01^ChineseTwin::元嘉暦', '510-01-01'],
21
- ['[大明暦]510.01.01', '@CR', '510-01-01^ChineseTwin::大明暦', '590-01-01'],
22
- ['[三紀暦=]384.01.01', '@CR', '384-01-01^ChineseTwin::三紀暦', '418-01-01'],
23
- ['[玄始暦=]412.01.01', '@CR', '412-01-01^ChineseTwin::玄始暦', '440-01-01'],
24
- ['[玄始暦=]452.01.01', '@CR', '452-01-01^ChineseTwin::玄始暦', '523-01-01'],
25
- ['[正光暦=]523.01.01', '@CR', '523-01-01^ChineseTwin::正光暦', '566-01-01'],
26
- ['[興和暦=]540.01.01', '@CR', '540-01-01^ChineseTwin::興和暦', '551-01-01'],
27
- ['[天保暦=]551.01.01', '@CR', '551-01-01^ChineseTwin::天保暦', '578-01-01'],
28
- ['[天和暦=]566.01.01', '@CR', '566-01-01^ChineseTwin::天和暦', '579-01-01'],
29
- ['[大象暦=]579.01.01', '@CR', '579-01-01^ChineseTwin::大象暦', '584-01-01'],
30
- ['[開皇暦=]584.01.01', '@CR', '584-01-01^ChineseTwin::開皇暦', '597-01-01'],
31
- ['[大業暦=]597.01.01', '@CR', '597-01-01^ChineseTwin::大業暦', '619-01-01'],
32
- ['[戊寅元暦]619.01.01', '@CR', '619-01-01^ChineseTwin::戊寅元暦', '645-01-01'],
33
- ['[平朔戊寅暦=]645.01.01','@CR','645-01-01^ChineseTwin::平朔戊寅暦','665-01-01'],
34
- ['[麟徳暦]665.01.01', '@CR', '665-01-01^ChineseTwin::麟徳暦', '729-01-01'],
35
- ['[大衍暦]729.01.01', '@CR', '729-01-01^ChineseTwin::大衍暦', '762-01-01'],
36
- ['[五紀暦]762.01.01', '@CR', '762-01-01^ChineseTwin::五紀暦', '784-01-01'],
37
- ['[正元暦=]784.01.01', '@CR', '784-01-01^ChineseTwin::正元暦', '807-01-01'],
38
- ['[宣明暦]822.01.01', '@CR', '822-01-01^ChineseTwin::宣明暦', '893-01-01'],
39
- ['[崇玄暦=]893.01.01', '@CR', '893-01-01^ChineseTwin::崇玄暦', '956-01-01'],
40
- ['[授時暦]1281.01.01', '@CR','1281-01-01^ChineseTwin::授時暦', '1368-01-01'],
41
- ['[大統暦]1368.01.01', '@CR','1368-01-01^ChineseTwin::大統暦', '1645-01-01']
16
+ ['[太初暦]1.01.01', '@CR', '1-01-01^ChineseTwin::太初暦'], # 西暦が正になるところから開始(実際は-103.01.01)
17
+ ['[四分暦]85.01.01', '@CR', '85-01-01^ChineseTwin::四分暦'],
18
+ ['[乾象暦]222.01.01', '@CR', '222-01-01^ChineseTwin::乾象暦'],
19
+ ['[景初暦]237.01.01', '@CR', '237-01-01^ChineseTwin::景初暦'],
20
+ ['[元嘉暦]445.01.01', '@CR', '445-01-01^ChineseTwin::元嘉暦'],
21
+ ['[大明暦]510.01.01', '@CR', '510-01-01^ChineseTwin::大明暦'],
22
+ ['[三紀暦=]384.01.01', '@CR', '384-01-01^ChineseTwin::三紀暦'],
23
+ ['[玄始暦=]412.01.01', '@CR', '412-01-01^ChineseTwin::玄始暦'],
24
+ ['[玄始暦=]452.01.01', '@CR', '452-01-01^ChineseTwin::玄始暦'],
25
+ ['[正光暦=]523.01.01', '@CR', '523-01-01^ChineseTwin::正光暦'],
26
+ ['[興和暦=]540.01.01', '@CR', '540-01-01^ChineseTwin::興和暦'],
27
+ ['[天保暦=]551.01.01', '@CR', '551-01-01^ChineseTwin::天保暦'],
28
+ ['[天和暦=]566.01.01', '@CR', '566-01-01^ChineseTwin::天和暦'],
29
+ ['[大象暦=]579.01.01', '@CR', '579-01-01^ChineseTwin::大象暦'],
30
+ ['[開皇暦=]584.01.01', '@CR', '584-01-01^ChineseTwin::開皇暦'],
31
+ ['[大業暦=]597.01.01', '@CR', '597-01-01^ChineseTwin::大業暦'],
32
+ ['[戊寅元暦]619.01.01', '@CR', '619-01-01^ChineseTwin::戊寅元暦'],
33
+ ['[平朔戊寅暦=]645.01.01','@CR','645-01-01^ChineseTwin::平朔戊寅暦'],
34
+ ['[麟徳暦]665.01.01', '@CR', '665-01-01^ChineseTwin::麟徳暦'],
35
+ ['[大衍暦]729.01.01', '@CR', '729-01-01^ChineseTwin::大衍暦'],
36
+ ['[五紀暦]762.01.01', '@CR', '762-01-01^ChineseTwin::五紀暦'],
37
+ ['[正元暦=]784.01.01', '@CR', '784-01-01^ChineseTwin::正元暦', '807-01-01'],
38
+ ['[宣明暦]822.01.01', '@CR', '822-01-01^ChineseTwin::宣明暦'],
39
+ ['[崇玄暦=]893.01.01', '@CR', '893-01-01^ChineseTwin::崇玄暦', '956-01-01'],
40
+ ['[授時暦]1281.01.01', '@CR','1281-01-01^ChineseTwin::授時暦'],
41
+ ['[大統暦]1368.01.01', '@CR','1368-01-01^ChineseTwin::大統暦', '1645-01-01']
42
42
  ]]
43
43
 
44
44
  # Chinese Solar Calendar Series for Chinese Note
45
45
  ChineseSolar = [self, [
46
46
  'locale:[=ja:, en=en:]',
47
47
  'area:[中国の節月=, *ChineseSolar=]',
48
- ['[太初暦]1.01.01', '@CR', '1-01-01^ChineseTwin::太初暦(節月)', '85-01-06'], # 西暦が正になるところから開始(実際は-103.01.15)
49
- ['[四分暦]85.01.07', '@CR', '85-01-07^ChineseTwin::四分暦(節月)', '264-12-28'],
50
- ['[乾象暦]221.12.23', '@CR', '221-12-23^ChineseTwin::乾象暦(節月)', '280-12-31'],
51
- ['[景初暦]237.01.07', '@CR', '237-01-07^ChineseTwin::景初暦(節月)', '451-12-31'],
52
- ['[元嘉暦]444.12.22', '@CR', '444-12-22^ChineseTwin::元嘉暦(節月)', '509-12-24'],
53
- ['[大明暦]509.12.23', '@CR', '509-12-23^ChineseTwin::大明暦(節月)', '590-01-08'],
54
- ['[三紀暦=]384.01.02', '@CR', '384-01-02^ChineseTwin::三紀暦(節月)', '418-01-16'],
55
- ['[玄始暦=]411.12.26', '@CR', '411-12-26^ChineseTwin::玄始暦(節月)', '440-01-15'],
56
- ['[玄始暦=]452.01.02', '@CR', '452-01-02^ChineseTwin::玄始暦(節月)', '522-12-29'],
57
- ['[正光暦=]522.12.29', '@CR', '522-12-29^ChineseTwin::正光暦(節月)', '566-01-05'],
58
- ['[興和暦=]539.12.22', '@CR', '539-12-22^ChineseTwin::興和暦(節月)', '550-12-20'],
59
- ['[天保暦=]550.12.19', '@CR', '550-12-19^ChineseTwin::天保暦(節月)', '577-12-21'],
60
- ['[天和暦=]566.01.05', '@CR', '566-01-05^ChineseTwin::天和暦(節月)', '579-01-11'],
61
- ['[大象暦=]579.01.11', '@CR', '579-01-11^ChineseTwin::大象暦(節月)', '584-01-15'],
62
- ['[開皇暦=]584.01.16', '@CR', '584-01-16^ChineseTwin::開皇暦(節月)', '596-12-23'],
63
- ['[大業暦=]596.12.22', '@CR', '596-12-22^ChineseTwin::大業暦(節月)', '618-12-19'],
64
- ['[戊寅元暦]618.12.19', '@CR', '618-12-19^ChineseTwin::戊寅元暦(節月)', '664-12-21'],
65
- ['[麟徳暦]664.12.21', '@CR', '664-12-21^ChineseTwin::麟徳暦(節月)', '729-01-03'],
66
- ['[大衍暦]729.01.03', '@CR', '729-01-03^ChineseTwin::大衍暦(節月)', '761-12-29'],
67
- ['[五紀暦]761.12.29', '@CR', '761-12-29^ChineseTwin::五紀暦(節月)', '783-12-26'],
68
- ['[正元暦=]783.12.26', '@CR', '783-12-26^ChineseTwin::正元暦(節月)', '807-01-11'],
69
- ['[宣明暦]821.01.01', '@CR', '821-01-01^ChineseTwin::宣明暦(節月)', '892-12-22'], # 年の始めに遡って開始(実際は12.27)
70
- ['[崇玄暦=]892.12.22', '@CR', '892-12-22^ChineseTwin::崇玄暦(節月)', '956-01-15'],
71
- ['[授時暦]1280.01.01', '@CR', '1280-01-01^ChineseTwin::授時暦(節月)', '1367-12-24'],
72
- ['[大統暦]1367.12.24', '@CR', '1367-12-24^ChineseTwin::大統暦(節月)', '1644-12-24']
48
+ ['[太初暦]1.01.01', '@CR', '1-01-01^ChineseTwin::太初暦(節月)'], # 西暦が正になるところから開始(実際は-103.01.15)
49
+ ['[四分暦]85.01.07', '@CR', '85-01-07^ChineseTwin::四分暦(節月)'],
50
+ ['[乾象暦]221.12.23', '@CR', '221-12-23^ChineseTwin::乾象暦(節月)'],
51
+ ['[景初暦]237.01.07', '@CR', '237-01-07^ChineseTwin::景初暦(節月)'],
52
+ ['[元嘉暦]444.12.22', '@CR', '444-12-22^ChineseTwin::元嘉暦(節月)'],
53
+ ['[大明暦]509.12.23', '@CR', '509-12-23^ChineseTwin::大明暦(節月)'],
54
+ ['[三紀暦=]384.01.02', '@CR', '384-01-02^ChineseTwin::三紀暦(節月)'],
55
+ ['[玄始暦=]411.12.26', '@CR', '411-12-26^ChineseTwin::玄始暦(節月)'],
56
+ ['[玄始暦=]452.01.02', '@CR', '452-01-02^ChineseTwin::玄始暦(節月)'],
57
+ ['[正光暦=]522.12.29', '@CR', '522-12-29^ChineseTwin::正光暦(節月)'],
58
+ ['[興和暦=]539.12.22', '@CR', '539-12-22^ChineseTwin::興和暦(節月)'],
59
+ ['[天保暦=]550.12.19', '@CR', '550-12-19^ChineseTwin::天保暦(節月)'],
60
+ ['[天和暦=]566.01.05', '@CR', '566-01-05^ChineseTwin::天和暦(節月)'],
61
+ ['[大象暦=]579.01.11', '@CR', '579-01-11^ChineseTwin::大象暦(節月)'],
62
+ ['[開皇暦=]584.01.16', '@CR', '584-01-16^ChineseTwin::開皇暦(節月)'],
63
+ ['[大業暦=]596.12.22', '@CR', '596-12-22^ChineseTwin::大業暦(節月)'],
64
+ ['[戊寅元暦]618.12.19', '@CR', '618-12-19^ChineseTwin::戊寅元暦(節月)'],
65
+ ['[麟徳暦]664.12.21', '@CR', '664-12-21^ChineseTwin::麟徳暦(節月)'],
66
+ ['[大衍暦]729.01.03', '@CR', '729-01-03^ChineseTwin::大衍暦(節月)'],
67
+ ['[五紀暦]761.12.29', '@CR', '761-12-29^ChineseTwin::五紀暦(節月)'],
68
+ ['[正元暦=]783.12.26', '@CR', '783-12-26^ChineseTwin::正元暦(節月)', '807-01-11'],
69
+ ['[宣明暦]821.01.01', '@CR', '821-01-01^ChineseTwin::宣明暦(節月)'], # 年の始めに遡って開始(実際は12.27)
70
+ ['[崇玄暦=]892.12.22', '@CR', '892-12-22^ChineseTwin::崇玄暦(節月)', '956-01-15'],
71
+ ['[授時暦]1280.01.01', '@CR', '1280-01-01^ChineseTwin::授時暦(節月)'],
72
+ ['[大統暦]1367.12.24', '@CR', '1367-12-24^ChineseTwin::大統暦(節月)', '1644-12-24']
73
73
  ]]
74
74
  end
75
75
 
@@ -105,6 +105,7 @@ module When
105
105
  def _normalize(args=[], options={})
106
106
  raise TypeError, "#{self.class} is abstract class" unless @label
107
107
  @note = When.CalendarNote(@note || 'Christian')
108
+ @diff_to_CE ||= 0
108
109
  super
109
110
  end
110
111
  end
@@ -364,7 +365,7 @@ module When
364
365
  # @return nil
365
366
  #
366
367
  def first_year_of_border
367
- return nil unless @border.kind_of?(When::CalendarTypes::MultiBorder)
368
+ return nil unless @border.kind_of?(When::Coordinates::MultiBorder)
368
369
  year = @border.borders[-1][:key]
369
370
  year.kind_of?(Integer) ? year : nil
370
371
  end
@@ -503,6 +504,9 @@ module When
503
504
  (skip && digit >= limit ? digit+skip : digit)+@base[date.length-1]
504
505
  end
505
506
  end
507
+ end
508
+
509
+ module Coordinates
506
510
 
507
511
  #
508
512
  # 日時要素の境界 - 復活祭
@@ -783,7 +787,8 @@ module When
783
787
  # 任意の暦をグレゴリオorユリウス暦日に変換
784
788
  #
785
789
  def _to_date_for_note(date)
786
- return When.Calendar(When::CalendarTypes::Christian._default_start(date)) ^ date if ::Object.const_defined?(:Date) && date.kind_of?(::Date)
790
+ return When.Calendar(When::CalendarTypes::Christian._default_start(date)) ^ date if ::Object.const_defined?(:Date) &&
791
+ ::Date.method_defined?(:+) && date.kind_of?(::Date)
787
792
  return When::Gregorian ^ date if date.kind_of?(::Time)
788
793
  return date if date.frame.kind_of?(When::CalendarTypes::Christian)
789
794
  When.Calendar(date.frame.iri =~ /Coptic/ || date.to_i < 2299161 ? 'Julian' : 'Gregorian') ^ date
@@ -79,7 +79,7 @@ module When
79
79
  'label' => 'Coptic::Coptic',
80
80
  'origin_of_LSC' => 1825030,
81
81
  'origin_of_MSC' => 1,
82
- 'epoch_in_CE' => 285,
82
+ 'diff_to_CE' => 285,
83
83
  'indices' => _egyptian_month_indices,
84
84
  'rule_table' => {
85
85
  'T' => {'Rule' =>[365,365,366,365]},
@@ -173,7 +173,7 @@ module When
173
173
  #
174
174
  # Discordian Calendar
175
175
  #
176
- class Discordian < TableBased
176
+ class Discordian < YearLengthTableBased
177
177
 
178
178
  # @private
179
179
  Normal_IDS = (1..73).to_a
@@ -188,14 +188,13 @@ module When
188
188
  #
189
189
  def _normalize(args=[], options={})
190
190
  @label ||= 'Discordian'
191
- @epoch_in_CE ||= -1166
192
- @note ||= 'DiscordianWeek'
193
- @engine ||= 'Gregorian'
194
- @engine = When.Calendar(@engine)
195
191
  @indices ||= [
196
192
  When.Index('DiscordianWeekNotes::month::Month', {:unit =>5}),
197
193
  When.Index({:branch=>{1=>When.M17n('Discordian::IntercalaryDay')[0]}})
198
194
  ]
195
+ @origin_of_MSC ||= +1166
196
+ @diff_to_CE ||= 0
197
+ @note ||= 'DiscordianWeek'
199
198
  @rule_table ||= {
200
199
  365 => {'Length'=> [73]*5},
201
200
  366 => {'Length'=> [74] + [73]*4}
@@ -203,22 +202,16 @@ module When
203
202
  super
204
203
  end
205
204
 
206
- # first day of year
207
- #
208
- def _sdn_(date)
209
- year = +date[0] + @epoch_in_CE
210
- @engine._coordinates_to_number(year, 0, 0)
211
- end
212
-
213
205
  #
214
206
  # day arrangement pattern
215
207
  #
216
208
  def _ids_(date)
217
209
  y, m = date
218
- return super unless m
219
- return Normal_IDS unless m == 0
220
- year = +y + @epoch_in_CE
221
- @engine._length([year,1]) == 28 ? Normal_IDS : Long_IDS
210
+ case m
211
+ when nil ; super
212
+ when 0 ; @engine._length([+y, 1]) == 28 ? Normal_IDS : Long_IDS
213
+ else ; Normal_IDS
214
+ end
222
215
  end
223
216
  end
224
217
  end
@@ -44,7 +44,7 @@ module When
44
44
  When::Coordinates::DefaultDayIndex
45
45
  ],
46
46
  'origin_of_MSC' => -1791,
47
- 'epoch_in_CE' => +1,
47
+ 'epoch_in_CE' => +1792,
48
48
  'cycle_offset' => Rational(1,2),
49
49
  'time_basis' => '+00:09:20',
50
50
  'rule_table' => {
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ module When
9
+
10
+ class BasicTypes::M17n
11
+
12
+ HankeHenry = [self, [
13
+ "locale:[=en:, ja]",
14
+ "names:[HankeHenry=]",
15
+ "[HankeHenry=en:Hanke-Henry_Permanent_Calendar, ハンキ=ヘンリー暦=ja:%%<ハンキ=ヘンリー・パーマネント・カレンダー>]",
16
+
17
+ [self,
18
+ "names:[Month, 月=ja:%%<月_(暦)>]",
19
+ "[January, 1月, /date/month_names/1] ",
20
+ "[February, 2月, /date/month_names/2] ",
21
+ "[March, 3月, /date/month_names/3] ",
22
+ "[April, 4月, /date/month_names/4] ",
23
+ "[May, 5月, /date/month_names/5] ",
24
+ "[June, 6月, /date/month_names/6] ",
25
+ "[July, 7月, /date/month_names/7] ",
26
+ "[August, 8月, /date/month_names/8] ",
27
+ "[September, 9月, /date/month_names/9] ",
28
+ "[October, 10月, /date/month_names/10]",
29
+ "[November, 11月, /date/month_names/11]",
30
+ "[December, 12月, /date/month_names/12]",
31
+ "[Xtra=en:Hanke-Henry_Permanent_Calendar, 追加週=ja:%%<ハンキ=ヘンリー・パーマネント・カレンダー>]" # Leap week
32
+ ]
33
+ ]]
34
+ end
35
+
36
+ module CalendarTypes
37
+
38
+ #
39
+ # Hanke-Henry Calendar
40
+ #
41
+ HankeHenry = [CyclicTableBased, {
42
+ 'label' => 'HankeHenry::HankeHenry',
43
+ 'origin_of_LSC' => 1721061,
44
+ 'indices' => [
45
+ When.Index('HankeHenry::Month'),
46
+ When::Coordinates::DefaultDayIndex
47
+ ],
48
+ 'rule_table' => {
49
+ 'T' => {'Rule' =>(2000...2400).to_a.map {|year|
50
+ [When.tm_pos(year,1,1), When.tm_pos(year,12,31)].map {|date| date.to_i % 7}.include?(3) ? 371 : 364
51
+ }},
52
+ 364 => {'Length'=>[30,30,31]*4},
53
+ 371 => {'Length'=>[30,30,31]*4 +[7]}
54
+ }
55
+ }]
56
+ end
57
+ end
@@ -562,91 +562,59 @@ module When
562
562
  #
563
563
  # Indian national solar calendar
564
564
  #
565
- IndianNationalSolar = [CyclicTableBased, {
565
+ IndianNationalSolar = [TableBasedWithSunrise, {
566
566
  'label' => 'Indian::IndianNationalSolar',
567
- 'origin_of_LSC' => 1721140,
568
567
  'origin_of_MSC' => -78,
569
- 'epoch_in_CE' => 0,
568
+ 'diff_to_CE' => 0,
569
+ 'engine_month' => 2, # February
570
+ 'engine_day' => 28+22, # 22nd of next month
570
571
  'indices' => [
571
572
  When.Index('Indian::LunarMonth', {:unit =>12, :shift=>4}),
572
573
  When::Coordinates::DefaultDayIndex
573
574
  ],
574
- 'rule_table' => {
575
- 'T' => {'Rule' =>['LC', 'SC', 'SC', 'SC']},
576
- 'SC' => {'Rule' =>[365]*4 + [366, 365, 365, 365]*24},
577
- 'LC' => {'Rule' =>[366, 365, 365, 365]*25},
575
+ 'rule_table' => {
578
576
  365 => {'Length'=>[30] + [31]*5 + [30]*6},
579
577
  366 => {'Length'=> [31]*6 + [30]*6}
580
- },
578
+ }
581
579
  }]
582
580
 
583
581
  #
584
582
  # Nanakshahi Calendar
585
583
  #
586
- class Nanakshahi < TableBased
587
-
588
- private
589
-
590
- #
591
- # Object Normalization
592
- #
593
- def _normalize(args=[], options={})
594
- @label ||= 'Indian::Nanakshahi'
595
- @epoch_in_CE ||= 1468
596
- @engine ||= 'Gregorian'
597
- @engine = When.Calendar(@engine)
598
- @indices ||= [
599
- When.Index('Indian::NanakshahiMonth', {:unit=>12, :shift=>4}),
600
- When::Coordinates::DefaultDayIndex
601
- ]
602
- @rule_table ||= {
603
- 365 => {'Length'=> [31]*5 + [30]*7},
604
- 366 => {'Length'=> [31]*5 + [30]*6 + [31]}
605
- }
606
- super
607
- end
608
-
609
- # first day of year
610
- #
611
- def _sdn_(date)
612
- year = +date[0] + @epoch_in_CE
613
- @engine._coordinates_to_number(year, 2, 13)
614
- end
615
- end
584
+ Nanakshahi = [YearLengthTableBased, {
585
+ 'label' => 'Indian::Nanakshahi',
586
+ 'origin_of_MSC' => -1468,
587
+ 'diff_to_CE' => 0,
588
+ 'engine_month' => 3,
589
+ 'engine_day' => 14,
590
+ 'indices' => [
591
+ When.Index('Indian::NanakshahiMonth', {:unit=>12, :shift=>4}),
592
+ When::Coordinates::DefaultDayIndex
593
+ ],
594
+ 'rule_table' => {
595
+ 365 => {'Length'=> [31]*5 + [30]*7},
596
+ 366 => {'Length'=> [31]*5 + [30]*6 + [31]}
597
+ }
598
+ }]
616
599
 
617
600
  #
618
601
  # Revised Bengali Calendar
619
602
  #
620
- class RevisedBengali < TableBased
621
-
622
- private
623
-
624
- #
625
- # Object Normalization
626
- #
627
- def _normalize(args=[], options={})
628
- @label ||= 'Indian::RevisedBengali'
629
- @epoch_in_CE ||= 593
630
- @engine ||= 'Gregorian'
631
- @engine = When.Calendar(@engine)
632
- @indices ||= [
633
- When.Index('Indian::BengaliMonth', {:unit=>12, :shift=>5}),
634
- When::Coordinates::DefaultDayIndex
635
- ]
636
- @rule_table ||= {
637
- 365 => {'Length'=> [31]*5 + [30]*7},
638
- 366 => {'Length'=> [31]*5 + [30]*5 + [31, 30]}
639
- }
640
- super
641
- end
642
-
643
- # first day of year
644
- #
645
- def _sdn_(date)
646
- year = +date[0] + @epoch_in_CE
647
- @engine._coordinates_to_number(year, 3, 13)
648
- end
649
- end
603
+ RevisedBengali = [YearLengthTableBased, {
604
+ 'label' => 'Indian::RevisedBengali',
605
+ 'origin_of_MSC' => -593,
606
+ 'diff_to_CE' => 0,
607
+ 'engine_month' => 4,
608
+ 'engine_day' => 14,
609
+ 'indices' => [
610
+ When.Index('Indian::BengaliMonth', {:unit=>12, :shift=>5}),
611
+ When::Coordinates::DefaultDayIndex
612
+ ],
613
+ 'rule_table' => {
614
+ 365 => {'Length'=> [31]*5 + [30]*7},
615
+ 366 => {'Length'=> [31]*5 + [30]*5 + [31, 30]}
616
+ }
617
+ }]
650
618
 
651
619
  #
652
620
  # Hindu Solar Calendar
@@ -679,12 +647,12 @@ module When
679
647
  def _normalize(args=[], options={})
680
648
  @label ||= 'Indian::HinduSolar'
681
649
  @type ||= 'SBS'
682
- raise ArgumentError, "Irregal formula: #{@formula}" unless @type.upcase =~ /\A(M|SS|SB)(V|S||B|H|VZ|SZ|BZ|HZ)\z/
650
+ raise ArgumentError, "Irregal formula: #{@formula}" unless @type.upcase =~ /\A(M|SS|SB)(V|S|B|H|VZ|SZ|BZ|HZ)\z/
683
651
 
684
652
  @location ||= HinduLuniSolar::Location_E[$2] || HinduLuniSolar::Location_F[$1]
685
653
  @cycle_offset ||= HinduLuniSolar::CycleOffset[$1]
686
654
  @origin_of_MSC ||= -HinduLuniSolar::YearEpoch[$2]
687
- @epoch_in_CE ||= 0
655
+ @diff_to_CE ||= 0
688
656
  @start_month ||= 1 # Maysha
689
657
  @start_month = @start_month.to_i
690
658
  @cycle_offset = @cycle_offset.to_f + (@start_month - 1)
@@ -822,13 +790,13 @@ module When
822
790
  def _normalize(args=[], options={})
823
791
  @label ||= 'Indian::HinduLuniSolar'
824
792
  @type ||= 'SBSA'
825
- raise ArgumentError, "Irregal formula: #{@formula}" unless @type.upcase =~ /\A(M|SS|SB)(V|S||B|H|VZ|SZ|BZ|HZ)(A|P|PX)\z/
793
+ raise ArgumentError, "Irregal formula: #{@formula}" unless @type.upcase =~ /\A(M|SS|SB)(V|S|B|H|VZ|SZ|BZ|HZ)(A|P|PX)\z/
826
794
 
827
795
  @location ||= Location_E[$2] || Location_F[$1]
828
796
  @cycle_offset ||= CycleOffset[$1]
829
797
  @origin_of_MSC ||= -YearEpoch[$2]
830
798
  @hindu_style ||= HinduStyle[$3]
831
- @epoch_in_CE ||= 0
799
+ @diff_to_CE ||= 0
832
800
  @start_month ||= 5 # Chaitra
833
801
  @start_month = @start_month.to_i
834
802
  @cycle_offset = @cycle_offset.to_f + (@start_month - 5)
@@ -1133,7 +1101,7 @@ module When
1133
1101
  # see {http://en.wikipedia.org/wiki/Samvatsara Samvatsara}
1134
1102
  #
1135
1103
  def samvatsara(dates)
1136
- year_kali = dates.l_date.most_significant_coordinate + dates.l_date.frame._diff_to_CE + 3101
1104
+ year_kali = dates.l_date.most_significant_coordinate + dates.l_date.frame.epoch_in_CE + 3101
1137
1105
  year_mod = year_kali >= jovian ? (year_kali + 12) % 60 :
1138
1106
  ((year_kali * 211 - 108).div(18000) + year_kali + 26) % 60
1139
1107
  When.CalendarNote('HinduNote/Notes')['year']['samvatsara'][year_mod]