when_exe 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/README.md +36 -33
- data/bin/locales.rb +1 -1
- data/bin/make_ttl.rb.config +1 -1
- data/lib/when_exe.rb +27 -16
- data/lib/when_exe/basictypes.rb +772 -771
- data/lib/when_exe/calendartypes.rb +1485 -1453
- data/lib/when_exe/coordinates.rb +5 -0
- data/lib/when_exe/core/compatibility.rb +1 -1
- data/lib/when_exe/core/duration.rb +147 -116
- data/lib/when_exe/core/extension.rb +499 -497
- data/lib/when_exe/ephemeris.rb +1952 -1951
- data/lib/when_exe/ephemeris/eclipse.rb +5 -4
- data/lib/when_exe/ephemeris/notes.rb +457 -421
- data/lib/when_exe/ephemeris/planets.rb +585 -585
- data/lib/when_exe/ephemeris/sun.rb +214 -214
- data/lib/when_exe/google_api.rb +153 -0
- data/lib/when_exe/icalendar.rb +1640 -1632
- data/lib/when_exe/inspect.rb +42 -20
- data/lib/when_exe/linkeddata.rb +28 -7
- data/lib/when_exe/locales/autoload.rb +2 -1
- data/lib/when_exe/locales/locale.rb +35 -15
- data/lib/when_exe/locales/zh.rb +77 -0
- data/lib/when_exe/mini_application.rb +3 -1
- data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
- data/lib/when_exe/parts/enumerator.rb +498 -486
- data/lib/when_exe/parts/geometric_complex.rb +397 -397
- data/lib/when_exe/parts/timezone.rb +246 -241
- data/lib/when_exe/region/armenian.rb +55 -56
- data/lib/when_exe/region/babylonian.rb +406 -405
- data/lib/when_exe/region/bahai.rb +107 -106
- data/lib/when_exe/region/balinese.rb +624 -622
- data/lib/when_exe/region/chinese.rb +1071 -1026
- data/lib/when_exe/region/chinese/epochs.rb +28 -28
- data/lib/when_exe/region/chinese/notes.rb +219 -0
- data/lib/when_exe/region/chinese/twins.rb +803 -803
- data/lib/when_exe/region/christian.rb +21 -15
- data/lib/when_exe/region/coptic.rb +107 -106
- data/lib/when_exe/region/discordian.rb +218 -218
- data/lib/when_exe/region/east_asian.rb +1 -1
- data/lib/when_exe/region/french.rb +126 -56
- data/lib/when_exe/region/geologicalage.rb +639 -639
- data/lib/when_exe/region/goddess.rb +60 -58
- data/lib/when_exe/region/hanke_henry.rb +2 -2
- data/lib/when_exe/region/indian.rb +1225 -1222
- data/lib/when_exe/region/international_fixed.rb +96 -97
- data/lib/when_exe/region/iranian.rb +206 -203
- data/lib/when_exe/region/islamic.rb +102 -102
- data/lib/when_exe/region/japanese.rb +126 -71
- data/lib/when_exe/region/japanese/epochs.rb +426 -426
- data/lib/when_exe/region/japanese/notes.rb +101 -81
- data/lib/when_exe/region/japanese/residues.rb +1345 -1311
- data/lib/when_exe/region/japanese/twins.rb +225 -225
- data/lib/when_exe/region/japanese/weeks.rb +112 -112
- data/lib/when_exe/region/javanese.rb +230 -230
- data/lib/when_exe/region/jewish.rb +130 -131
- data/lib/when_exe/region/m17n.rb +114 -114
- data/lib/when_exe/region/martian.rb +258 -258
- data/lib/when_exe/region/mayan.rb +11 -8
- data/lib/when_exe/region/pax.rb +4 -5
- data/lib/when_exe/region/pope.rb +1 -1
- data/lib/when_exe/region/positivist.rb +100 -100
- data/lib/when_exe/region/residue.rb +162 -162
- data/lib/when_exe/region/roman.rb +333 -333
- data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
- data/lib/when_exe/region/shire.rb +222 -223
- data/lib/when_exe/region/symmetry.rb +50 -50
- data/lib/when_exe/region/thai.rb +336 -336
- data/lib/when_exe/region/tibetan.rb +315 -316
- data/lib/when_exe/region/tranquility.rb +207 -208
- data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
- data/lib/when_exe/region/vietnamese.rb +449 -440
- data/lib/when_exe/region/weekdate.rb +80 -80
- data/lib/when_exe/region/world.rb +170 -171
- data/lib/when_exe/region/world_season.rb +89 -89
- data/lib/when_exe/region/yerm.rb +3 -3
- data/lib/when_exe/region/zoroastrian.rb +205 -205
- data/lib/when_exe/timestandard.rb +708 -707
- data/lib/when_exe/tmduration.rb +338 -338
- data/lib/when_exe/tmobjects.rb +1356 -1356
- data/lib/when_exe/tmposition.rb +66 -31
- data/lib/when_exe/version.rb +16 -2
- data/test/examples/Residue.m17n +83 -83
- data/test/examples/Terms.m17n +2 -2
- data/test/test.rb +2 -2
- data/test/test/google_api.rb +65 -0
- data/test/test/linkeddata.rb +1 -1
- data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
- data/test/test/region/indian.rb +90 -85
- data/test/test/region/m17n.rb +7 -7
- data/test/test/region/mayan.rb +195 -195
- data/test/test/region/residue.rb +153 -153
- data/test/test/tmposition.rb +11 -1
- data/when_exe.gemspec +2 -2
- metadata +95 -8
- data/test/test.rb.config +0 -1
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (C) 2013-
|
|
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
|
-
Martian = [self, [
|
|
13
|
-
"locale:[=en:, ja=ja:, alias]",
|
|
14
|
-
"names:[Martian=]",
|
|
15
|
-
"[Darian=en:Darian_calendar,
|
|
16
|
-
|
|
17
|
-
[self,
|
|
18
|
-
"names:[
|
|
19
|
-
"[Sagittarius, いて= ]",
|
|
20
|
-
"[Dhanus=, 人馬= ]",
|
|
21
|
-
"[Capricornus, やぎ= ]",
|
|
22
|
-
"[Makara=, 磨羯= ]",
|
|
23
|
-
"[Aquarius, みずがめ=]",
|
|
24
|
-
"[Kumbha=, 宝瓶= ]",
|
|
25
|
-
"[Pisces, うお= ]",
|
|
26
|
-
"[Mina=, 双魚= ]",
|
|
27
|
-
"[Aries, おひつじ=]",
|
|
28
|
-
"[Mesha=, 白羊= ]",
|
|
29
|
-
"[Taurus, おうし= ]",
|
|
30
|
-
"[Rishabha=, 金牛= ]",
|
|
31
|
-
"[Gemini, ふたご= ]",
|
|
32
|
-
"[Mithuna=, 双児= ]",
|
|
33
|
-
"[Cancer, かに= ]",
|
|
34
|
-
"[Karka=, 巨蟹= ]",
|
|
35
|
-
"[Leo, しし= ]",
|
|
36
|
-
"[Simha=, 獅子= ]",
|
|
37
|
-
"[Virgo, おとめ= ]",
|
|
38
|
-
"[Kanya=, 処女= ]",
|
|
39
|
-
"[Libra, てんびん=]",
|
|
40
|
-
"[Tula=, 天秤= ]",
|
|
41
|
-
"[Scorpius, さそり= ]",
|
|
42
|
-
"[Vrishika=, 天蠍= ]"
|
|
43
|
-
]
|
|
44
|
-
]]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
module TimeStandard
|
|
48
|
-
|
|
49
|
-
#
|
|
50
|
-
# Martian Time, Coordinated
|
|
51
|
-
#
|
|
52
|
-
class MartianTimeCoordinated < TimeStandard
|
|
53
|
-
|
|
54
|
-
J2000Jan6 = 2451549.5
|
|
55
|
-
Ratio = 1.02749125
|
|
56
|
-
MTC0 = 44796.0 - 0.0002 - 0.5
|
|
57
|
-
|
|
58
|
-
# 当該時刻系の日付を dynamical date に変換する
|
|
59
|
-
#
|
|
60
|
-
# @param [Numeric] date 当該時刻系の日付
|
|
61
|
-
#
|
|
62
|
-
# @return [Numeric] dynamical date
|
|
63
|
-
#
|
|
64
|
-
def to_dynamical_date(date)
|
|
65
|
-
(date - @mtc0) * Ratio + J2000Jan6
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# dynamical date を当該時刻系の日付に変換する
|
|
69
|
-
#
|
|
70
|
-
# @param [Numeric] date dynamical date
|
|
71
|
-
#
|
|
72
|
-
# @return [Numeric] 当該時刻系の日付
|
|
73
|
-
#
|
|
74
|
-
def from_dynamical_date(date)
|
|
75
|
-
(date - J2000Jan6) / Ratio + @mtc0
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# universal time を dynamical time に変換する
|
|
79
|
-
#
|
|
80
|
-
# @param [Numeric] time universal time
|
|
81
|
-
#
|
|
82
|
-
# @return [Numeric] dynamical time
|
|
83
|
-
#
|
|
84
|
-
def to_dynamical_time(time)
|
|
85
|
-
When::TM::JulianDate._d_to_t(
|
|
86
|
-
to_dynamical_date(
|
|
87
|
-
When::TM::JulianDate._t_to_d(time)))
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# dynamical time を universal time に変換する
|
|
91
|
-
#
|
|
92
|
-
# @param [Numeric] time dynamical time
|
|
93
|
-
#
|
|
94
|
-
# @return [Numeric] universal time
|
|
95
|
-
#
|
|
96
|
-
def from_dynamical_time(time)
|
|
97
|
-
When::TM::JulianDate._d_to_t(
|
|
98
|
-
from_dynamical_date(
|
|
99
|
-
When::TM::JulianDate._t_to_d(time)))
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
private
|
|
103
|
-
|
|
104
|
-
# オブジェクトの正規化
|
|
105
|
-
def _normalize(args=[], options={})
|
|
106
|
-
@location = When.Resource(@location || '_l:long=0&lat=0&datum=Mars')
|
|
107
|
-
@mtc0 = MTC0 + @location.long / (360.0 * When::Coordinates::Spatial::DEGREE)
|
|
108
|
-
super
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
class CalendarNote
|
|
114
|
-
|
|
115
|
-
#
|
|
116
|
-
# Darian Week
|
|
117
|
-
#
|
|
118
|
-
class DarianWeek < WorldWeek
|
|
119
|
-
|
|
120
|
-
Notes = [When::BasicTypes::M17n, [
|
|
121
|
-
"locale:[=en:, ja=ja:, alias]",
|
|
122
|
-
"names:[Darian]",
|
|
123
|
-
|
|
124
|
-
# 年の暦注 ----------------------------
|
|
125
|
-
[When::BasicTypes::M17n,
|
|
126
|
-
"names:[year]"
|
|
127
|
-
],
|
|
128
|
-
|
|
129
|
-
# 月の暦注 ----------------------------
|
|
130
|
-
[When::BasicTypes::M17n,
|
|
131
|
-
"names:[month]",
|
|
132
|
-
[When::BasicTypes::M17n,
|
|
133
|
-
"names:[Month]"
|
|
134
|
-
]
|
|
135
|
-
],
|
|
136
|
-
|
|
137
|
-
# 日の暦注 ----------------------------
|
|
138
|
-
[When::BasicTypes::M17n,
|
|
139
|
-
"names:[day]",
|
|
140
|
-
[When::BasicTypes::M17n,
|
|
141
|
-
"names:[Week]",
|
|
142
|
-
[DayOfWeek, "label:[Solis=, 日曜日]", {'delta'=>7}],
|
|
143
|
-
[DayOfWeek, "label:[Lunae=, 月曜日]", {'delta'=>7}],
|
|
144
|
-
[DayOfWeek, "label:[Martis=, 火曜日]", {'delta'=>7}],
|
|
145
|
-
[DayOfWeek, "label:[Mercurii=, 水曜日]", {'delta'=>7}],
|
|
146
|
-
[DayOfWeek, "label:[Jovis=, 木曜日]", {'delta'=>7}],
|
|
147
|
-
[DayOfWeek, "label:[Veneris=, 金曜日]", {'delta'=>7}],
|
|
148
|
-
[DayOfWeek, "label:[Saturni=, 土曜日]", {'delta'=>7}]
|
|
149
|
-
]
|
|
150
|
-
]
|
|
151
|
-
]]
|
|
152
|
-
|
|
153
|
-
#
|
|
154
|
-
# 当日または直前の solis の日
|
|
155
|
-
#
|
|
156
|
-
# @param date [When::TM::TemporalPosition]
|
|
157
|
-
# @param parameter [nil] 未使用
|
|
158
|
-
#
|
|
159
|
-
# @return [When::TM::TemporalPosition]
|
|
160
|
-
#
|
|
161
|
-
def solis(date, parameter=nil)
|
|
162
|
-
date = When.Calendar('Darian').jul_trans(date, {:events=>['from_solis']})
|
|
163
|
-
y,m,d = date.cal_date
|
|
164
|
-
dow = (d-1) % 7
|
|
165
|
-
return date if dow == 0
|
|
166
|
-
date += When::TM::PeriodDuration.new([0,0,-dow])
|
|
167
|
-
date.events = ['from_solis']
|
|
168
|
-
date
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
#
|
|
172
|
-
# この日は何曜?
|
|
173
|
-
#
|
|
174
|
-
# @param [When::TM::TemporalPosition] date
|
|
175
|
-
# @param [When::TM::CalDate] base (not used)
|
|
176
|
-
#
|
|
177
|
-
# @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
|
|
178
|
-
#
|
|
179
|
-
def week(date, base=nil)
|
|
180
|
-
date = _to_date_for_note(date)
|
|
181
|
-
index = (date.cal_date.last - 1) % 7
|
|
182
|
-
{:value=>@days_of_week[index], :position=>[index, 7]}
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
# 曜日の名前の一覧
|
|
187
|
-
#
|
|
188
|
-
# @param [When::TM::TemporalPosition] date (ダミー)
|
|
189
|
-
#
|
|
190
|
-
# @return [Array<When::CalendarNote::Week::DayOfWeek>]
|
|
191
|
-
#
|
|
192
|
-
def week_labels(date)
|
|
193
|
-
@days_of_week.child
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
#
|
|
197
|
-
# 暦日を当該暦注計算用クラスに変換
|
|
198
|
-
#
|
|
199
|
-
# @private
|
|
200
|
-
def _to_date_for_note(date)
|
|
201
|
-
date = When::Darian ^ date unless date.frame.label.to_s == 'Darian'
|
|
202
|
-
date
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
private
|
|
206
|
-
|
|
207
|
-
# オブジェクトの正規化
|
|
208
|
-
def _normalize(args=[], options={})
|
|
209
|
-
@event ||= 'solis'
|
|
210
|
-
super
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
module CalendarTypes
|
|
216
|
-
|
|
217
|
-
#
|
|
218
|
-
# Martian Time, Coordinated
|
|
219
|
-
#
|
|
220
|
-
class MTC < UTC
|
|
221
|
-
|
|
222
|
-
private
|
|
223
|
-
|
|
224
|
-
# オブジェクトの正規化
|
|
225
|
-
def _normalize(args=[], options={})
|
|
226
|
-
label = 'MTC'
|
|
227
|
-
long = @long||0
|
|
228
|
-
label += "?long=#{long}" unless long.to_f == 0
|
|
229
|
-
@label = m17n(label)
|
|
230
|
-
@time_standard = When.Resource("_t:MartianTimeCoordinated?location=(_l:long=#{long}&datum=Mars)")
|
|
231
|
-
super
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
#
|
|
236
|
-
# Darian Calendar
|
|
237
|
-
#
|
|
238
|
-
Darian = [CyclicTableBased, {
|
|
239
|
-
'label' => 'Martian::Darian',
|
|
240
|
-
'time_basis' => 'MTC',
|
|
241
|
-
'origin_of_LSC' => -94798,
|
|
242
|
-
'indices' => [
|
|
243
|
-
When.Index('Martian::DarianMonth', {:unit =>24}),
|
|
244
|
-
When::Coordinates::DefaultDayIndex
|
|
245
|
-
],
|
|
246
|
-
'rule_table' => {
|
|
247
|
-
'T' => {'Rule' =>['LongCentury', ['ShortCentury', 4]]},
|
|
248
|
-
'LongCentury' => {'Rule' =>[ ['LongDecade', 10]]},
|
|
249
|
-
'ShortCentury' => {'Rule' =>['ShortDecade', ['LongDecade', 9]]},
|
|
250
|
-
'LongDecade' => {'Rule' =>[669] * 2 + [668, 669] * 4 },
|
|
251
|
-
'ShortDecade' => {'Rule' => [668, 669] * 5 },
|
|
252
|
-
668 => {'Length'=>[28, 28, 28, 28, 28, 27] * 4 },
|
|
253
|
-
669 => {'Length'=>[28, 28, 28, 28, 28, 27] * 3 + [28] * 6}
|
|
254
|
-
},
|
|
255
|
-
'note' => 'DarianWeek'
|
|
256
|
-
}]
|
|
257
|
-
end
|
|
258
|
-
end
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2013-2015 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
|
+
Martian = [self, [
|
|
13
|
+
"locale:[=en:, ja=ja:, zh=zh:, alias]",
|
|
14
|
+
"names:[Martian=en:Mars, 火星, 火星]",
|
|
15
|
+
"[Darian=en:Darian_calendar, ダリアン暦, 大流士火星曆]",
|
|
16
|
+
|
|
17
|
+
[self,
|
|
18
|
+
"names:[month name named after the zodiac=, 黄道十二宮にちなむ月名=, 對應於黃道十二宮月份名稱=, *alias:DarianMonth=]",
|
|
19
|
+
"[Sagittarius, いて= ]",
|
|
20
|
+
"[Dhanus=, 人馬= ]",
|
|
21
|
+
"[Capricornus, やぎ= ]",
|
|
22
|
+
"[Makara=, 磨羯= ]",
|
|
23
|
+
"[Aquarius, みずがめ=]",
|
|
24
|
+
"[Kumbha=, 宝瓶= ]",
|
|
25
|
+
"[Pisces, うお= ]",
|
|
26
|
+
"[Mina=, 双魚= ]",
|
|
27
|
+
"[Aries, おひつじ=]",
|
|
28
|
+
"[Mesha=, 白羊= ]",
|
|
29
|
+
"[Taurus, おうし= ]",
|
|
30
|
+
"[Rishabha=, 金牛= ]",
|
|
31
|
+
"[Gemini, ふたご= ]",
|
|
32
|
+
"[Mithuna=, 双児= ]",
|
|
33
|
+
"[Cancer, かに= ]",
|
|
34
|
+
"[Karka=, 巨蟹= ]",
|
|
35
|
+
"[Leo, しし= ]",
|
|
36
|
+
"[Simha=, 獅子= ]",
|
|
37
|
+
"[Virgo, おとめ= ]",
|
|
38
|
+
"[Kanya=, 処女= ]",
|
|
39
|
+
"[Libra, てんびん=]",
|
|
40
|
+
"[Tula=, 天秤= ]",
|
|
41
|
+
"[Scorpius, さそり= ]",
|
|
42
|
+
"[Vrishika=, 天蠍= ]"
|
|
43
|
+
]
|
|
44
|
+
]]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
module TimeStandard
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Martian Time, Coordinated
|
|
51
|
+
#
|
|
52
|
+
class MartianTimeCoordinated < TimeStandard
|
|
53
|
+
|
|
54
|
+
J2000Jan6 = 2451549.5
|
|
55
|
+
Ratio = 1.02749125
|
|
56
|
+
MTC0 = 44796.0 - 0.0002 - 0.5
|
|
57
|
+
|
|
58
|
+
# 当該時刻系の日付を dynamical date に変換する
|
|
59
|
+
#
|
|
60
|
+
# @param [Numeric] date 当該時刻系の日付
|
|
61
|
+
#
|
|
62
|
+
# @return [Numeric] dynamical date
|
|
63
|
+
#
|
|
64
|
+
def to_dynamical_date(date)
|
|
65
|
+
(date - @mtc0) * Ratio + J2000Jan6
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# dynamical date を当該時刻系の日付に変換する
|
|
69
|
+
#
|
|
70
|
+
# @param [Numeric] date dynamical date
|
|
71
|
+
#
|
|
72
|
+
# @return [Numeric] 当該時刻系の日付
|
|
73
|
+
#
|
|
74
|
+
def from_dynamical_date(date)
|
|
75
|
+
(date - J2000Jan6) / Ratio + @mtc0
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# universal time を dynamical time に変換する
|
|
79
|
+
#
|
|
80
|
+
# @param [Numeric] time universal time
|
|
81
|
+
#
|
|
82
|
+
# @return [Numeric] dynamical time
|
|
83
|
+
#
|
|
84
|
+
def to_dynamical_time(time)
|
|
85
|
+
When::TM::JulianDate._d_to_t(
|
|
86
|
+
to_dynamical_date(
|
|
87
|
+
When::TM::JulianDate._t_to_d(time)))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# dynamical time を universal time に変換する
|
|
91
|
+
#
|
|
92
|
+
# @param [Numeric] time dynamical time
|
|
93
|
+
#
|
|
94
|
+
# @return [Numeric] universal time
|
|
95
|
+
#
|
|
96
|
+
def from_dynamical_time(time)
|
|
97
|
+
When::TM::JulianDate._d_to_t(
|
|
98
|
+
from_dynamical_date(
|
|
99
|
+
When::TM::JulianDate._t_to_d(time)))
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
# オブジェクトの正規化
|
|
105
|
+
def _normalize(args=[], options={})
|
|
106
|
+
@location = When.Resource(@location || '_l:long=0&lat=0&datum=Mars')
|
|
107
|
+
@mtc0 = MTC0 + @location.long / (360.0 * When::Coordinates::Spatial::DEGREE)
|
|
108
|
+
super
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class CalendarNote
|
|
114
|
+
|
|
115
|
+
#
|
|
116
|
+
# Darian Week
|
|
117
|
+
#
|
|
118
|
+
class DarianWeek < WorldWeek
|
|
119
|
+
|
|
120
|
+
Notes = [When::BasicTypes::M17n, [
|
|
121
|
+
"locale:[=en:, ja=ja:, alias]",
|
|
122
|
+
"names:[Darian, ダリアン暦]",
|
|
123
|
+
|
|
124
|
+
# 年の暦注 ----------------------------
|
|
125
|
+
[When::BasicTypes::M17n,
|
|
126
|
+
"names:[note for year=, 年の暦注=, *year]"
|
|
127
|
+
],
|
|
128
|
+
|
|
129
|
+
# 月の暦注 ----------------------------
|
|
130
|
+
[When::BasicTypes::M17n,
|
|
131
|
+
"names:[note for month=, 月の暦注=, *month]",
|
|
132
|
+
[When::BasicTypes::M17n,
|
|
133
|
+
"names:[month name=en:Month, 月の名前=ja:%%<月_(暦)>, zh:該月的名稱=, *alias:Month=]"
|
|
134
|
+
]
|
|
135
|
+
],
|
|
136
|
+
|
|
137
|
+
# 日の暦注 ----------------------------
|
|
138
|
+
[When::BasicTypes::M17n,
|
|
139
|
+
"names:[note for day=, 日の暦注=, *day]",
|
|
140
|
+
[When::BasicTypes::M17n,
|
|
141
|
+
"names:[Week, 週, zh:星期]",
|
|
142
|
+
[DayOfWeek, "label:[Solis=, 日曜日]", {'delta'=>7}],
|
|
143
|
+
[DayOfWeek, "label:[Lunae=, 月曜日]", {'delta'=>7}],
|
|
144
|
+
[DayOfWeek, "label:[Martis=, 火曜日]", {'delta'=>7}],
|
|
145
|
+
[DayOfWeek, "label:[Mercurii=, 水曜日]", {'delta'=>7}],
|
|
146
|
+
[DayOfWeek, "label:[Jovis=, 木曜日]", {'delta'=>7}],
|
|
147
|
+
[DayOfWeek, "label:[Veneris=, 金曜日]", {'delta'=>7}],
|
|
148
|
+
[DayOfWeek, "label:[Saturni=, 土曜日]", {'delta'=>7}]
|
|
149
|
+
]
|
|
150
|
+
]
|
|
151
|
+
]]
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# 当日または直前の solis の日
|
|
155
|
+
#
|
|
156
|
+
# @param date [When::TM::TemporalPosition]
|
|
157
|
+
# @param parameter [nil] 未使用
|
|
158
|
+
#
|
|
159
|
+
# @return [When::TM::TemporalPosition]
|
|
160
|
+
#
|
|
161
|
+
def solis(date, parameter=nil)
|
|
162
|
+
date = When.Calendar('Darian').jul_trans(date, {:events=>['from_solis']})
|
|
163
|
+
y,m,d = date.cal_date
|
|
164
|
+
dow = (d-1) % 7
|
|
165
|
+
return date if dow == 0
|
|
166
|
+
date += When::TM::PeriodDuration.new([0,0,-dow])
|
|
167
|
+
date.events = ['from_solis']
|
|
168
|
+
date
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
#
|
|
172
|
+
# この日は何曜?
|
|
173
|
+
#
|
|
174
|
+
# @param [When::TM::TemporalPosition] date
|
|
175
|
+
# @param [When::TM::CalDate] base (not used)
|
|
176
|
+
#
|
|
177
|
+
# @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
|
|
178
|
+
#
|
|
179
|
+
def week(date, base=nil)
|
|
180
|
+
date = _to_date_for_note(date)
|
|
181
|
+
index = (date.cal_date.last - 1) % 7
|
|
182
|
+
{:value=>@days_of_week[index], :position=>[index, 7]}
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
#
|
|
186
|
+
# 曜日の名前の一覧
|
|
187
|
+
#
|
|
188
|
+
# @param [When::TM::TemporalPosition] date (ダミー)
|
|
189
|
+
#
|
|
190
|
+
# @return [Array<When::CalendarNote::Week::DayOfWeek>]
|
|
191
|
+
#
|
|
192
|
+
def week_labels(date)
|
|
193
|
+
@days_of_week.child
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
#
|
|
197
|
+
# 暦日を当該暦注計算用クラスに変換
|
|
198
|
+
#
|
|
199
|
+
# @private
|
|
200
|
+
def _to_date_for_note(date)
|
|
201
|
+
date = When::Darian ^ date unless date.frame.label.to_s == 'Darian'
|
|
202
|
+
date
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
private
|
|
206
|
+
|
|
207
|
+
# オブジェクトの正規化
|
|
208
|
+
def _normalize(args=[], options={})
|
|
209
|
+
@event ||= 'solis'
|
|
210
|
+
super
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
module CalendarTypes
|
|
216
|
+
|
|
217
|
+
#
|
|
218
|
+
# Martian Time, Coordinated
|
|
219
|
+
#
|
|
220
|
+
class MTC < UTC
|
|
221
|
+
|
|
222
|
+
private
|
|
223
|
+
|
|
224
|
+
# オブジェクトの正規化
|
|
225
|
+
def _normalize(args=[], options={})
|
|
226
|
+
label = 'MTC'
|
|
227
|
+
long = @long||0
|
|
228
|
+
label += "?long=#{long}" unless long.to_f == 0
|
|
229
|
+
@label = m17n(label)
|
|
230
|
+
@time_standard = When.Resource("_t:MartianTimeCoordinated?location=(_l:long=#{long}&datum=Mars)")
|
|
231
|
+
super
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
#
|
|
236
|
+
# Darian Calendar
|
|
237
|
+
#
|
|
238
|
+
Darian = [CyclicTableBased, {
|
|
239
|
+
'label' => 'Martian::Darian',
|
|
240
|
+
'time_basis' => 'MTC',
|
|
241
|
+
'origin_of_LSC' => -94798,
|
|
242
|
+
'indices' => [
|
|
243
|
+
When.Index('Martian::DarianMonth', {:unit =>24}),
|
|
244
|
+
When::Coordinates::DefaultDayIndex
|
|
245
|
+
],
|
|
246
|
+
'rule_table' => {
|
|
247
|
+
'T' => {'Rule' =>['LongCentury', ['ShortCentury', 4]]},
|
|
248
|
+
'LongCentury' => {'Rule' =>[ ['LongDecade', 10]]},
|
|
249
|
+
'ShortCentury' => {'Rule' =>['ShortDecade', ['LongDecade', 9]]},
|
|
250
|
+
'LongDecade' => {'Rule' =>[669] * 2 + [668, 669] * 4 },
|
|
251
|
+
'ShortDecade' => {'Rule' => [668, 669] * 5 },
|
|
252
|
+
668 => {'Length'=>[28, 28, 28, 28, 28, 27] * 4 },
|
|
253
|
+
669 => {'Length'=>[28, 28, 28, 28, 28, 27] * 3 + [28] * 6}
|
|
254
|
+
},
|
|
255
|
+
'note' => 'DarianWeek'
|
|
256
|
+
}]
|
|
257
|
+
end
|
|
258
|
+
end
|