when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,240 +1,240 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-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
- class BasicTypes::M17n
10
-
11
- Shire = [self, [
12
- "namespace:[cal=http://en.wikipedia.org/wiki/Middle-earth_calendar#]",
13
- "locale:[=en:, ja=ja:, alias]",
14
- "names:[Shire=]",
15
- "[Shire=en:The_Lord_of_the_Rings, ホビット庄暦=ja:%%<指輪物語>]",
16
-
17
- [self,
18
- "names:[Festival=, 祭= ]",
19
- "[%0sYule=en:Yule, %0sユール祭= ]",
20
- "[%0sLithe=cal:Hobbit_calendar, %0sライズ祭= ]",
21
- ],
22
-
23
- [self,
24
- "names:[Month, 月=ja:%%<月_(暦)>]",
25
- "[Yule=en:Yule, ユール祭= ]",
26
- "[Afteryule=en:Yule, ユール後月= ]",
27
- "[Solmath=cal:Hobbit_calendar, ソマス= ]",
28
- "[Rethe=cal:Hobbit_calendar, レセ= ]",
29
- "[Astron=cal:Hobbit_calendar, アストロン= ]",
30
- "[Thrimidge=cal:Hobbit_calendar, スリミッジ= ]",
31
- "[Forelithe=cal:Hobbit_calendar, ライズ前月= ]",
32
- "[Afterlithe=cal:Hobbit_calendar, ライズ後月= ]",
33
- "[Wedmath=cal:Hobbit_calendar, ウェドマス= ]",
34
- "[Halimath=cal:Hobbit_calendar, ハリマス= ]",
35
- "[Winterfilth=cal:Hobbit_calendar, ウィンターフィルス=]",
36
- "[Blotmath=cal:Hobbit_calendar, ブロドマス= ]",
37
- "[Foreyule=en:Yule, ユール前月= ]"
38
- ]
39
- ]]
40
- end
41
-
42
- #
43
- # ホビット庄暦の暦週
44
- #
45
- class CalendarNote::ShireWeek < CalendarNote::Week
46
-
47
- Notes = [When::BasicTypes::M17n, [
48
- "locale:[=en:, ja=ja:, alias]",
49
- "names:[Shire]",
50
-
51
- # 年の暦注 ----------------------------
52
- [When::BasicTypes::M17n,
53
- "names:[year]"
54
- ],
55
-
56
- # 月の暦注 ----------------------------
57
- [When::BasicTypes::M17n,
58
- "names:[month]",
59
- [When::BasicTypes::M17n,
60
- "names:[Month]"
61
- ]
62
- ],
63
-
64
- # 日の暦注 ----------------------------
65
- [When::BasicTypes::M17n,
66
- "names:[day]",
67
- [When::BasicTypes::M17n,
68
- "names:[Week]",
69
- [DayOfWeek, "label:[Saturday, 土曜日]", {'delta'=>7}],
70
- [DayOfWeek, "label:[Sunday, 日曜日]", {'delta'=>7}],
71
- [DayOfWeek, "label:[Monday, 月曜日]", {'delta'=>7}],
72
- [DayOfWeek, "label:[Tuesday, 火曜日]", {'delta'=>7}],
73
- [DayOfWeek, "label:[Wednesday, 水曜日]", {'delta'=>7}],
74
- [DayOfWeek, "label:[Thursday, 木曜日]", {'delta'=>7}],
75
- [DayOfWeek, "label:[Friday, 金曜日]", {'delta'=>7}],
76
- [DayOfWeek, "label:[lithe, 中日= ]", {'delta'=> 365}],
77
- [DayOfWeek, "label:[double, 重日= ]", {'delta'=>1827}]
78
- ],
79
-
80
- "[Standard_Week]"
81
- ]
82
- ]]
83
-
84
- # @private
85
- FirstDayOfWeek = [6, 1, 3, 5, 0, 2, 4] * 2
86
-
87
- # @private
88
- ExtraDayInYear = {
89
- [ 8, 2] => 7,
90
- [ 8, 4] => 0
91
- }
92
-
93
- # @private
94
- WeekLength = {
95
- [ 8, 3] => 8,
96
- [ 8, 4] => 9
97
- }
98
-
99
- # 当日または直前の lithe の日
100
- # @param date [When::TM::TemporalPosition]
101
- # @param parameter [nil] 未使用
102
- # @return [When::TM::TemporalPosition]
103
- #
104
- def lithe(date, parameter=nil)
105
- event_name = 'lithe'
106
- date = date.frame.jul_trans(date, {:events=>[event_name]})
107
- y,m,d = date.cal_date
108
- m = date.frame.send(:_to_index,[y,m]) + 1
109
- h,n = (m+5).divmod(7)
110
- dow = 182 * h[0] + 30 * n + d + 1
111
- if m==8
112
- case d
113
- when 2 ; dow = 0
114
- when 3 ; dow = date.frame._sum([y]) == 365 ? 1 : 0
115
- when 4 ; dow = 1
116
- end
117
- end
118
- return date if dow == 0
119
- date += When::TM::PeriodDuration.new([0,0,-dow])
120
- date.events = [event_name]
121
- date
122
- end
123
-
124
- # 当日または直前の week_day の日
125
- # @method week_day(date, parameter=nil)
126
- # @param [When::TM::TemporalPosition] date
127
- # @param [nil] parameter 未使用
128
- # @return [When::TM::TemporalPosition]
129
- # @note week_day は saturday, sunday, monday, tuesday, wednesday, thursday, friday に読み替えてください。
130
-
131
- # @private
132
- 7.times do |k|
133
- name = When.CalendarNote('ShireWeek/Notes::day::Week')[k].to_s.downcase
134
- module_eval %Q{
135
- def #{name}(date, parameter=nil)
136
- event_name = 'from_#{name}'
137
- date = date.frame.jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
138
- y,m,d = date.cal_date
139
- m = date.frame.send(:_to_index, [y,m]) + 1
140
- h,n = (m+5).divmod(7)
141
- dow = (182 * h[0] + 30 * n + d - #{k}) % 7
142
- case m
143
- when 8
144
- case d
145
- when 2 ; dow = 7 - #{k}
146
- when 3 ; dow = (date.frame._sum([y]) == 365 && #{k} == 0) ? 0 : 8 - #{k}
147
- when 4 ; dow = #{k} == 0 ? 0 : 9 - #{k}
148
- end
149
- when 9
150
- dow += (date.frame._sum([y]) == 365) ? 1 : 2 if d < #{k}
151
- end
152
- return date if dow == 0
153
- date += When::TM::PeriodDuration.new([0,0,-dow])
154
- date.events = [event_name]
155
- date
156
- end
157
- }
158
- end
159
-
160
- #
161
- # この日は何曜?
162
- #
163
- # @param [When::TM::TemporalPosition] date
164
- # @param [When::TM::CalDate] base (not used)
165
- #
166
- # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
167
- #
168
- def week(date, base=nil)
169
- date = _to_date_for_note(date)
170
- y, m, d = date.cal_date
171
- m = date.frame.send(:_to_index, [y,m]) + 1
172
- length = WeekLength[[m, date.length(When::MONTH)]] || 7
173
- index = length == 8 ? 0 : 8 if [m,d] == [8,3]
174
- index ||= ExtraDayInYear[[m,d]] || (FirstDayOfWeek[m-1] + d - 1) % 7
175
- {:value=>@days_of_week[index], :position=>[index, length]}
176
- end
177
-
178
- #
179
- # 暦日を当該暦注計算用クラスに変換
180
- #
181
- # @private
182
- def _to_date_for_note(date)
183
- date = When::ShireG ^ date unless date.frame.label.to_s == 'Shire'
184
- date
185
- end
186
-
187
- # オブジェクトの正規化
188
- # @private
189
- def _normalize(args=[], options={})
190
- @event ||= 'saturday'
191
- super
192
- end
193
- end
194
-
195
- module CalendarTypes
196
-
197
- _shire_indices = [
198
- When.Index('Shire::Month', {:base => 0,
199
- :branch=>{1=>When.Resource('_m:Shire::Festival::*')[1]}}),
200
- When::Coordinates::DefaultDayIndex
201
- ]
202
-
203
- _IDs = '0,1,2,3,4,5,6,6=,7,8,9,10,11,12'
204
-
205
- #
206
- # Shire Calendar based on summer solstice date
207
- #
208
- Shire = [YearLengthTableBased, {
209
- 'label' => 'Shire::Shire',
210
- 'indices' => _shire_indices,
211
- 'border' => '00-00-02',
212
- 'day_offset' => -183, # the day 183 days before summer solstice
213
- 'cycle_offset' => Rational(1,4), # summer solstice
214
- 'time_basis' => '+09:00', # JST
215
- 'rule_table' => {
216
- 365 => {'Length'=>[2]+[30]*6+[3]+[30]*6, 'IDs'=>_IDs},
217
- 366 => {'Length'=>[2]+[30]*6+[4]+[30]*6, 'IDs'=>_IDs}
218
- },
219
- 'note' => 'ShireWeek'
220
- }]
221
-
222
- #
223
- # Shire Calendar based on Gregorian Date
224
- #
225
- ShireG = [CyclicTableBased, {
226
- 'label' => 'Shire::Shire',
227
- 'origin_of_LSC' => 1721060-10,
228
- 'indices' => _shire_indices,
229
- 'border' => '00-00-02',
230
- 'rule_table' => {
231
- 'T' => {'Rule' =>['LC', 'SC', 'SC', 'SC']},
232
- 'SC' => {'Rule' =>[365]*4 + [366, 365, 365, 365]*24},
233
- 'LC' => {'Rule' =>[366, 365, 365, 365]*25},
234
- 365 => {'Length'=>[2]+[30]*6+[3]+[30]*6, 'IDs'=>_IDs},
235
- 366 => {'Length'=>[2]+[30]*6+[4]+[30]*6, 'IDs'=>_IDs}
236
- },
237
- 'note' => 'ShireWeek'
238
- }]
239
- end
240
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-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
+ class BasicTypes::M17n
10
+
11
+ Shire = [self, [
12
+ "namespace:[cal=http://en.wikipedia.org/wiki/Middle-earth_calendar#]",
13
+ "locale:[=en:, ja=ja:, alias]",
14
+ "names:[Shire=]",
15
+ "[Shire=en:The_Lord_of_the_Rings, ホビット庄暦=ja:%%<指輪物語>]",
16
+
17
+ [self,
18
+ "names:[Festival=, 祭= ]",
19
+ "[%0sYule=en:Yule, %0sユール祭= ]",
20
+ "[%0sLithe=cal:Hobbit_calendar, %0sライズ祭= ]",
21
+ ],
22
+
23
+ [self,
24
+ "names:[Month, 月=ja:%%<月_(暦)>]",
25
+ "[Yule=en:Yule, ユール祭= ]",
26
+ "[Afteryule=en:Yule, ユール後月= ]",
27
+ "[Solmath=cal:Hobbit_calendar, ソマス= ]",
28
+ "[Rethe=cal:Hobbit_calendar, レセ= ]",
29
+ "[Astron=cal:Hobbit_calendar, アストロン= ]",
30
+ "[Thrimidge=cal:Hobbit_calendar, スリミッジ= ]",
31
+ "[Forelithe=cal:Hobbit_calendar, ライズ前月= ]",
32
+ "[Afterlithe=cal:Hobbit_calendar, ライズ後月= ]",
33
+ "[Wedmath=cal:Hobbit_calendar, ウェドマス= ]",
34
+ "[Halimath=cal:Hobbit_calendar, ハリマス= ]",
35
+ "[Winterfilth=cal:Hobbit_calendar, ウィンターフィルス=]",
36
+ "[Blotmath=cal:Hobbit_calendar, ブロドマス= ]",
37
+ "[Foreyule=en:Yule, ユール前月= ]"
38
+ ]
39
+ ]]
40
+ end
41
+
42
+ #
43
+ # ホビット庄暦の暦週
44
+ #
45
+ class CalendarNote::ShireWeek < CalendarNote::Week
46
+
47
+ Notes = [When::BasicTypes::M17n, [
48
+ "locale:[=en:, ja=ja:, alias]",
49
+ "names:[Shire]",
50
+
51
+ # 年の暦注 ----------------------------
52
+ [When::BasicTypes::M17n,
53
+ "names:[year]"
54
+ ],
55
+
56
+ # 月の暦注 ----------------------------
57
+ [When::BasicTypes::M17n,
58
+ "names:[month]",
59
+ [When::BasicTypes::M17n,
60
+ "names:[Month]"
61
+ ]
62
+ ],
63
+
64
+ # 日の暦注 ----------------------------
65
+ [When::BasicTypes::M17n,
66
+ "names:[day]",
67
+ [When::BasicTypes::M17n,
68
+ "names:[Week]",
69
+ [DayOfWeek, "label:[Saturday, 土曜日]", {'delta'=>7}],
70
+ [DayOfWeek, "label:[Sunday, 日曜日]", {'delta'=>7}],
71
+ [DayOfWeek, "label:[Monday, 月曜日]", {'delta'=>7}],
72
+ [DayOfWeek, "label:[Tuesday, 火曜日]", {'delta'=>7}],
73
+ [DayOfWeek, "label:[Wednesday, 水曜日]", {'delta'=>7}],
74
+ [DayOfWeek, "label:[Thursday, 木曜日]", {'delta'=>7}],
75
+ [DayOfWeek, "label:[Friday, 金曜日]", {'delta'=>7}],
76
+ [DayOfWeek, "label:[lithe, 中日= ]", {'delta'=> 365}],
77
+ [DayOfWeek, "label:[double, 重日= ]", {'delta'=>1827}]
78
+ ],
79
+
80
+ "[Common_Week]"
81
+ ]
82
+ ]]
83
+
84
+ # @private
85
+ FirstDayOfWeek = [6, 1, 3, 5, 0, 2, 4] * 2
86
+
87
+ # @private
88
+ ExtraDayInYear = {
89
+ [ 8, 2] => 7,
90
+ [ 8, 4] => 0
91
+ }
92
+
93
+ # @private
94
+ WeekLength = {
95
+ [ 8, 3] => 8,
96
+ [ 8, 4] => 9
97
+ }
98
+
99
+ # 当日または直前の lithe の日
100
+ # @param date [When::TM::TemporalPosition]
101
+ # @param parameter [nil] 未使用
102
+ # @return [When::TM::TemporalPosition]
103
+ #
104
+ def lithe(date, parameter=nil)
105
+ event_name = 'lithe'
106
+ date = date.frame.jul_trans(date, {:events=>[event_name]})
107
+ y,m,d = date.cal_date
108
+ m = date.frame.send(:_to_index,[y,m]) + 1
109
+ h,n = (m+5).divmod(7)
110
+ dow = 182 * h[0] + 30 * n + d + 1
111
+ if m==8
112
+ case d
113
+ when 2 ; dow = 0
114
+ when 3 ; dow = date.frame._sum([y]) == 365 ? 1 : 0
115
+ when 4 ; dow = 1
116
+ end
117
+ end
118
+ return date if dow == 0
119
+ date += When::TM::PeriodDuration.new([0,0,-dow])
120
+ date.events = [event_name]
121
+ date
122
+ end
123
+
124
+ # 当日または直前の week_day の日
125
+ # @method week_day(date, parameter=nil)
126
+ # @param [When::TM::TemporalPosition] date
127
+ # @param [nil] parameter 未使用
128
+ # @return [When::TM::TemporalPosition]
129
+ # @note week_day は saturday, sunday, monday, tuesday, wednesday, thursday, friday に読み替えてください。
130
+
131
+ # @private
132
+ 7.times do |k|
133
+ name = When.CalendarNote('ShireWeek/Notes::day::Week')[k].to_s.downcase
134
+ module_eval %Q{
135
+ def #{name}(date, parameter=nil)
136
+ event_name = 'from_#{name}'
137
+ date = date.frame.jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
138
+ y,m,d = date.cal_date
139
+ m = date.frame.send(:_to_index, [y,m]) + 1
140
+ h,n = (m+5).divmod(7)
141
+ dow = (182 * h[0] + 30 * n + d - #{k}) % 7
142
+ case m
143
+ when 8
144
+ case d
145
+ when 2 ; dow = 7 - #{k}
146
+ when 3 ; dow = (date.frame._sum([y]) == 365 && #{k} == 0) ? 0 : 8 - #{k}
147
+ when 4 ; dow = #{k} == 0 ? 0 : 9 - #{k}
148
+ end
149
+ when 9
150
+ dow += (date.frame._sum([y]) == 365) ? 1 : 2 if d < #{k}
151
+ end
152
+ return date if dow == 0
153
+ date += When::TM::PeriodDuration.new([0,0,-dow])
154
+ date.events = [event_name]
155
+ date
156
+ end
157
+ }
158
+ end
159
+
160
+ #
161
+ # この日は何曜?
162
+ #
163
+ # @param [When::TM::TemporalPosition] date
164
+ # @param [When::TM::CalDate] base (not used)
165
+ #
166
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
167
+ #
168
+ def week(date, base=nil)
169
+ date = _to_date_for_note(date)
170
+ y, m, d = date.cal_date
171
+ m = date.frame.send(:_to_index, [y,m]) + 1
172
+ length = WeekLength[[m, date.length(When::MONTH)]] || 7
173
+ index = length == 8 ? 0 : 8 if [m,d] == [8,3]
174
+ index ||= ExtraDayInYear[[m,d]] || (FirstDayOfWeek[m-1] + d - 1) % 7
175
+ {:value=>@days_of_week[index], :position=>[index, length]}
176
+ end
177
+
178
+ #
179
+ # 暦日を当該暦注計算用クラスに変換
180
+ #
181
+ # @private
182
+ def _to_date_for_note(date)
183
+ date = When::ShireG ^ date unless date.frame.label.to_s == 'Shire'
184
+ date
185
+ end
186
+
187
+ # オブジェクトの正規化
188
+ # @private
189
+ def _normalize(args=[], options={})
190
+ @event ||= 'saturday'
191
+ super
192
+ end
193
+ end
194
+
195
+ module CalendarTypes
196
+
197
+ _shire_indices = [
198
+ When.Index('Shire::Month', {:base => 0,
199
+ :branch=>{1=>When.Resource('_m:Shire::Festival::*')[1]}}),
200
+ When::Coordinates::DefaultDayIndex
201
+ ]
202
+
203
+ _IDs = '0,1,2,3,4,5,6,6=,7,8,9,10,11,12'
204
+
205
+ #
206
+ # Shire Calendar based on summer solstice date
207
+ #
208
+ Shire = [YearLengthTableBased, {
209
+ 'label' => 'Shire::Shire',
210
+ 'indices' => _shire_indices,
211
+ 'border' => '00-00-02',
212
+ 'day_offset' => -183, # the day 183 days before summer solstice
213
+ 'cycle_offset' => Rational(1,4), # summer solstice
214
+ 'time_basis' => '+09:00', # JST
215
+ 'rule_table' => {
216
+ 365 => {'Length'=>[2]+[30]*6+[3]+[30]*6, 'IDs'=>_IDs},
217
+ 366 => {'Length'=>[2]+[30]*6+[4]+[30]*6, 'IDs'=>_IDs}
218
+ },
219
+ 'note' => 'ShireWeek'
220
+ }]
221
+
222
+ #
223
+ # Shire Calendar based on Gregorian Date
224
+ #
225
+ ShireG = [CyclicTableBased, {
226
+ 'label' => 'Shire::Shire',
227
+ 'origin_of_LSC' => 1721060-10,
228
+ 'indices' => _shire_indices,
229
+ 'border' => '00-00-02',
230
+ 'rule_table' => {
231
+ 'T' => {'Rule' =>['LC', 'SC', 'SC', 'SC']},
232
+ 'SC' => {'Rule' =>[365]*4 + [366, 365, 365, 365]*24},
233
+ 'LC' => {'Rule' =>[366, 365, 365, 365]*25},
234
+ 365 => {'Length'=>[2]+[30]*6+[3]+[30]*6, 'IDs'=>_IDs},
235
+ 366 => {'Length'=>[2]+[30]*6+[4]+[30]*6, 'IDs'=>_IDs}
236
+ },
237
+ 'note' => 'ShireWeek'
238
+ }]
239
+ end
240
+ end