when_exe 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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]