when_exe 0.3.4 → 0.3.5
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.
- data/bin/locales.rb +2 -2
- data/bin/when.rb +2 -2
- data/lib/when_exe.rb +161 -55
- data/lib/when_exe/basictypes.rb +34 -26
- data/lib/when_exe/calendarnote.rb +654 -0
- data/lib/when_exe/calendartypes.rb +49 -474
- data/lib/when_exe/coordinates.rb +141 -34
- data/lib/when_exe/core/compatibility.rb +22 -2
- data/lib/when_exe/core/extension.rb +47 -3
- data/lib/when_exe/ephemeris.rb +82 -109
- data/lib/when_exe/googlecalendar.rb +1 -1
- data/lib/when_exe/icalendar.rb +26 -14
- data/lib/when_exe/inspect.rb +82 -68
- data/lib/when_exe/locales/af.rb +1 -1
- data/lib/when_exe/locales/ar.rb +1 -1
- data/lib/when_exe/locales/az.rb +1 -1
- data/lib/when_exe/locales/bg.rb +1 -1
- data/lib/when_exe/locales/bn.rb +1 -1
- data/lib/when_exe/locales/bs.rb +1 -1
- data/lib/when_exe/locales/ca.rb +1 -1
- data/lib/when_exe/locales/cs.rb +1 -1
- data/lib/when_exe/locales/cy.rb +1 -1
- data/lib/when_exe/locales/da.rb +1 -1
- data/lib/when_exe/locales/de.rb +1 -1
- data/lib/when_exe/locales/de_AT.rb +1 -1
- data/lib/when_exe/locales/de_CH.rb +1 -1
- data/lib/when_exe/locales/el.rb +1 -1
- data/lib/when_exe/locales/en.rb +1 -1
- data/lib/when_exe/locales/en_AU.rb +1 -1
- data/lib/when_exe/locales/en_CA.rb +1 -1
- data/lib/when_exe/locales/en_GB.rb +1 -1
- data/lib/when_exe/locales/en_IE.rb +1 -1
- data/lib/when_exe/locales/en_IN.rb +1 -1
- data/lib/when_exe/locales/en_NZ.rb +1 -1
- data/lib/when_exe/locales/en_US.rb +1 -1
- data/lib/when_exe/locales/eo.rb +1 -1
- data/lib/when_exe/locales/es.rb +1 -1
- data/lib/when_exe/locales/es_419.rb +1 -1
- data/lib/when_exe/locales/es_AR.rb +1 -1
- data/lib/when_exe/locales/es_CL.rb +1 -1
- data/lib/when_exe/locales/es_CO.rb +1 -1
- data/lib/when_exe/locales/es_CR.rb +1 -1
- data/lib/when_exe/locales/es_EC.rb +1 -1
- data/lib/when_exe/locales/es_MX.rb +1 -1
- data/lib/when_exe/locales/es_PA.rb +1 -1
- data/lib/when_exe/locales/es_PE.rb +1 -1
- data/lib/when_exe/locales/es_VE.rb +1 -1
- data/lib/when_exe/locales/et.rb +1 -1
- data/lib/when_exe/locales/eu.rb +1 -1
- data/lib/when_exe/locales/fa.rb +1 -1
- data/lib/when_exe/locales/fi.rb +1 -1
- data/lib/when_exe/locales/fr.rb +1 -1
- data/lib/when_exe/locales/fr_CA.rb +1 -1
- data/lib/when_exe/locales/fr_CH.rb +1 -1
- data/lib/when_exe/locales/gl.rb +1 -1
- data/lib/when_exe/locales/he.rb +1 -1
- data/lib/when_exe/locales/hi.rb +1 -1
- data/lib/when_exe/locales/hi_IN.rb +1 -1
- data/lib/when_exe/locales/hr.rb +1 -1
- data/lib/when_exe/locales/hu.rb +1 -1
- data/lib/when_exe/locales/id.rb +1 -1
- data/lib/when_exe/locales/is.rb +1 -1
- data/lib/when_exe/locales/it.rb +1 -1
- data/lib/when_exe/locales/it_CH.rb +1 -1
- data/lib/when_exe/locales/ja.rb +1 -1
- data/lib/when_exe/locales/kn.rb +1 -1
- data/lib/when_exe/locales/ko.rb +1 -1
- data/lib/when_exe/locales/lo.rb +1 -1
- data/lib/when_exe/locales/locales.rb +1 -1
- data/lib/when_exe/locales/lt.rb +1 -1
- data/lib/when_exe/locales/lv.rb +1 -1
- data/lib/when_exe/locales/mk.rb +1 -1
- data/lib/when_exe/locales/mn.rb +1 -1
- data/lib/when_exe/locales/ms.rb +1 -1
- data/lib/when_exe/locales/nb.rb +1 -1
- data/lib/when_exe/locales/ne.rb +1 -1
- data/lib/when_exe/locales/nl.rb +1 -1
- data/lib/when_exe/locales/nn.rb +1 -1
- data/lib/when_exe/locales/or.rb +1 -1
- data/lib/when_exe/locales/pl.rb +1 -1
- data/lib/when_exe/locales/pt.rb +1 -1
- data/lib/when_exe/locales/pt_BR.rb +1 -1
- data/lib/when_exe/locales/rm.rb +1 -1
- data/lib/when_exe/locales/ro.rb +1 -1
- data/lib/when_exe/locales/ru.rb +1 -1
- data/lib/when_exe/locales/sk.rb +1 -1
- data/lib/when_exe/locales/sl.rb +1 -1
- data/lib/when_exe/locales/sr.rb +1 -1
- data/lib/when_exe/locales/sv.rb +1 -1
- data/lib/when_exe/locales/sw.rb +1 -1
- data/lib/when_exe/locales/th.rb +1 -1
- data/lib/when_exe/locales/tl.rb +1 -1
- data/lib/when_exe/locales/tr.rb +1 -1
- data/lib/when_exe/locales/uk.rb +1 -1
- data/lib/when_exe/locales/ur.rb +1 -1
- data/lib/when_exe/locales/uz.rb +1 -1
- data/lib/when_exe/locales/vi.rb +1 -1
- data/lib/when_exe/locales/wo.rb +1 -1
- data/lib/when_exe/locales/zh_CN.rb +1 -1
- data/lib/when_exe/locales/zh_HK.rb +1 -1
- data/lib/when_exe/locales/zh_TW.rb +1 -1
- data/lib/when_exe/mini_application.rb +6 -2
- data/lib/when_exe/parts/enumerator.rb +13 -8
- data/lib/when_exe/parts/geometric_complex.rb +3 -5
- data/lib/when_exe/parts/locale.rb +185 -28
- data/lib/when_exe/parts/method_cash.rb +20 -10
- data/lib/when_exe/parts/resource.rb +154 -76
- data/lib/when_exe/parts/timezone.rb +11 -6
- data/lib/when_exe/region/bahai.rb +2 -2
- data/lib/when_exe/region/balinese.rb +296 -296
- data/lib/when_exe/region/chinese.rb +564 -564
- data/lib/when_exe/region/chinese_calendar.rb +5 -1
- data/lib/when_exe/region/chinese_epoch.rb +47 -102
- data/lib/when_exe/region/chinese_twin.rb +798 -0
- data/lib/when_exe/region/christian.rb +314 -338
- data/lib/when_exe/region/coptic.rb +88 -0
- data/lib/when_exe/region/ephemeric_notes.rb +322 -307
- data/lib/when_exe/region/french.rb +2 -2
- data/lib/when_exe/region/indian.rb +361 -272
- data/lib/when_exe/region/iranian.rb +2 -2
- data/lib/when_exe/region/islamic.rb +3 -3
- data/lib/when_exe/region/japanese.rb +1 -1
- data/lib/when_exe/region/japanese_notes.rb +165 -103
- data/lib/when_exe/region/japanese_residues.rb +56 -55
- data/lib/when_exe/region/japanese_twin.rb +228 -0
- data/lib/when_exe/region/javanese.rb +2 -2
- data/lib/when_exe/region/jewish.rb +2 -2
- data/lib/when_exe/region/korean.rb +4 -4
- data/lib/when_exe/region/m17n.rb +19 -19
- data/lib/when_exe/region/martian.rb +21 -9
- data/lib/when_exe/region/mayan.rb +19 -11
- data/lib/when_exe/region/moon.rb +7 -7
- data/lib/when_exe/region/nihon_shoki.rb +7 -7
- data/lib/when_exe/region/roman.rb +100 -100
- data/lib/when_exe/region/shire.rb +130 -147
- data/lib/when_exe/region/thai.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +2 -2
- data/lib/when_exe/region/vietnamese.rb +383 -114
- data/lib/when_exe/region/world.rb +112 -129
- data/lib/when_exe/timestandard.rb +12 -1
- data/lib/when_exe/tmposition.rb +28 -14
- data/lib/when_exe/tmreference.rb +96 -93
- data/lib/when_exe/version.rb +1 -1
- data/test/examples/Terms.m17n +2 -2
- data/test/examples/sample.json +16 -0
- data/test/examples/sample.xml +1 -1
- data/test/test.rb +4 -0
- data/test/test/basictypes.rb +2 -2
- data/test/test/calendarnote.rb +69 -0
- data/test/test/calendartypes.rb +41 -1
- data/test/test/coordinates.rb +12 -1
- data/test/test/ephemeris.rb +13 -66
- data/test/test/icalendar.rb +3 -3
- data/test/test/inspect.rb +1 -1
- data/test/test/parts.rb +7 -4
- data/test/test/region/chinese.rb +45 -0
- data/test/test/region/coptic.rb +27 -0
- data/test/test/region/indian.rb +1 -1
- data/test/test/region/japanese.rb +4 -4
- data/test/test/region/jewish.rb +1 -1
- data/test/test/region/m17n.rb +7 -5
- data/test/test/region/residue.rb +2 -2
- data/test/test/region/vietnamese.rb +102 -0
- data/test/test/timestandard.rb +81 -0
- data/test/test/tmposition.rb +1 -1
- data/test/test/tmreference.rb +1 -1
- data/when_exe.gemspec +2 -2
- metadata +16 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
=begin
|
|
3
|
-
Copyright (C) 2011-
|
|
3
|
+
Copyright (C) 2011-2014 Takashi SUGA
|
|
4
4
|
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
6
|
=end
|
|
@@ -12,46 +12,10 @@ module When
|
|
|
12
12
|
ChristianTerms = [self, [
|
|
13
13
|
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
|
14
14
|
"locale:[=en:, ja=ja:, alias]",
|
|
15
|
-
"names:[ChristianTerms]",
|
|
15
|
+
"names:[ChristianTerms=]",
|
|
16
16
|
"[Julian=en:Julian_calendar, ユリウス暦 ]",
|
|
17
17
|
"[Gregorian=en:Gregorian_calendar, グレゴリオ暦]",
|
|
18
|
-
"[Civil=en:Civil_calendar,
|
|
19
|
-
"[Coptic=en:Coptic_calendar, コプト暦 ]",
|
|
20
|
-
"[Ethiopian=en:Ethiopian_calendar, エチオピア暦=en:Ethiopian_calendar]",
|
|
21
|
-
|
|
22
|
-
[self,
|
|
23
|
-
"names:[EgyptianMonth, 月=ja:%%<月_(暦)>]",
|
|
24
|
-
"[tut=, トート= ]",
|
|
25
|
-
"[baba=, バーバ= ]",
|
|
26
|
-
"[hatur=, ハートール= ]",
|
|
27
|
-
"[kiyahak=, キヤハーク= ]",
|
|
28
|
-
"[tuba=, トーバ= ]",
|
|
29
|
-
"[amshir=, アムシール= ]",
|
|
30
|
-
"[baramhat=, バラムハート=]",
|
|
31
|
-
"[barmuda=, バルムーダ= ]",
|
|
32
|
-
"[bashans=, バシャンス= ]",
|
|
33
|
-
"[ba'una=, バウーナ= ]",
|
|
34
|
-
"[abib=, アビーブ= ]",
|
|
35
|
-
"[misra=, ミスラー= ]",
|
|
36
|
-
"[epagomen=, エパゴメネ= ]"
|
|
37
|
-
],
|
|
38
|
-
|
|
39
|
-
[self,
|
|
40
|
-
"names:[EthiopianMonth, 月=ja:%%<月_(暦)>]",
|
|
41
|
-
"[Mäskäräm=, マスカラム= ]",
|
|
42
|
-
"[Ṭəqəmt=, テケルト= ]",
|
|
43
|
-
"[Ḫədar=, ヘダル= ]",
|
|
44
|
-
"[Taḫśaś=, ターサス= ]",
|
|
45
|
-
"[Ṭərr=, テル= ]",
|
|
46
|
-
"[Yäkatit=, イェカティト=]",
|
|
47
|
-
"[Mägabit=, メガビト= ]",
|
|
48
|
-
"[Miyazya=, ミアジア= ]",
|
|
49
|
-
"[Gənbot=, ゲエンポト= ]",
|
|
50
|
-
"[Säne=, セネ= ]",
|
|
51
|
-
"[Ḥamle=, ハムレ= ]",
|
|
52
|
-
"[Nähase=, ネハッセ= ]",
|
|
53
|
-
"[Ṗagʷəmen=, パゴウメン= ]"
|
|
54
|
-
]
|
|
18
|
+
"[Civil in the West=en:Civil_calendar, 西暦, *alias:Civil]"
|
|
55
19
|
]]
|
|
56
20
|
end
|
|
57
21
|
|
|
@@ -69,49 +33,22 @@ module When
|
|
|
69
33
|
module CalendarTypes
|
|
70
34
|
|
|
71
35
|
#
|
|
72
|
-
#
|
|
36
|
+
# Christian Base Calendar
|
|
73
37
|
#
|
|
74
|
-
|
|
75
|
-
'label' => Parts::Resource._instance('_m:ChristianTerms::Coptic'),
|
|
76
|
-
'origin_of_LSC' => 1825030,
|
|
77
|
-
'origin_of_MSC' => 1,
|
|
78
|
-
'epoch_in_CE' => 285,
|
|
79
|
-
'indices' => [
|
|
80
|
-
When::Coordinates::Index.new({:unit =>13,
|
|
81
|
-
:trunk=>When::Parts::Resource._instance('_m:ChristianTerms::EgyptianMonth::*')}),
|
|
82
|
-
When::Coordinates::Index.new
|
|
83
|
-
],
|
|
84
|
-
'rule_table' => {
|
|
85
|
-
'T' => {'Rule' =>[366,365,365,365]},
|
|
86
|
-
365 => {'Length'=>[30]*12+[5]},
|
|
87
|
-
366 => {'Length'=>[30]*12+[6]}
|
|
88
|
-
}
|
|
89
|
-
}]
|
|
38
|
+
class Christian < When::TM::Calendar
|
|
90
39
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
],
|
|
104
|
-
'rule_table' => {
|
|
105
|
-
'T' => {'Rule' =>[366,365,365,365]},
|
|
106
|
-
365 => {'Length'=>[30]*12+[5]},
|
|
107
|
-
366 => {'Length'=>[30]*12+[6]}
|
|
108
|
-
}
|
|
109
|
-
}]
|
|
110
|
-
|
|
111
|
-
#
|
|
112
|
-
# Julian Calendar
|
|
113
|
-
#
|
|
114
|
-
class Julian < When::TM::Calendar
|
|
40
|
+
# @private
|
|
41
|
+
#
|
|
42
|
+
# ::Date オブジェクトに対応する暦法名
|
|
43
|
+
# (require 'Date' されていることの保証は呼び出し側)
|
|
44
|
+
#
|
|
45
|
+
def self._default_start(date)
|
|
46
|
+
case date.start
|
|
47
|
+
when ::Date::JULIAN ; 'Julian'
|
|
48
|
+
when ::Date::GREGORIAN ; 'Gregorian'
|
|
49
|
+
else ; "Civil?reform_jdn=#{date.start}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
115
52
|
|
|
116
53
|
# 年月日 -> 通日
|
|
117
54
|
#
|
|
@@ -167,6 +104,26 @@ module When
|
|
|
167
104
|
return (((((mm + 10) % 12) % 5) % 2) == 0) ? 31 : 30
|
|
168
105
|
end
|
|
169
106
|
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
def _normalize(args=[], options={})
|
|
110
|
+
raise TypeError, "#{self.class} is abstract class" unless @label
|
|
111
|
+
@note = When.CalendarNote(@note || 'Christian')
|
|
112
|
+
@indices ||= [
|
|
113
|
+
Index.new({:unit =>12,
|
|
114
|
+
:trunk=>m17n('[::_m:CalendarTerms::Month::*]')}),
|
|
115
|
+
|
|
116
|
+
DefaultDayIndex
|
|
117
|
+
]
|
|
118
|
+
super
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Julian Calendar
|
|
124
|
+
#
|
|
125
|
+
class Julian < Christian
|
|
126
|
+
|
|
170
127
|
# 太陰方程式
|
|
171
128
|
#
|
|
172
129
|
# @param [Numeric] year 西暦の年数
|
|
@@ -176,17 +133,17 @@ module When
|
|
|
176
133
|
0
|
|
177
134
|
end
|
|
178
135
|
|
|
136
|
+
# @private
|
|
137
|
+
#
|
|
138
|
+
# 対応する ::Date の start 属性
|
|
139
|
+
def _default_start
|
|
140
|
+
::Date::JULIAN
|
|
141
|
+
end
|
|
142
|
+
|
|
179
143
|
private
|
|
180
144
|
|
|
181
145
|
def _normalize(args=[], options={})
|
|
182
|
-
@label
|
|
183
|
-
@note = When.CalendarNote(@note || 'Christian')
|
|
184
|
-
@indices ||= [
|
|
185
|
-
Index.new({:unit =>12,
|
|
186
|
-
:trunk=>m17n('[::_m:CalendarTerms::Month::*]')}),
|
|
187
|
-
|
|
188
|
-
DefaultDayIndex
|
|
189
|
-
]
|
|
146
|
+
@label ||= When.Resource('_m:ChristianTerms::Julian')
|
|
190
147
|
super
|
|
191
148
|
end
|
|
192
149
|
end
|
|
@@ -194,7 +151,7 @@ module When
|
|
|
194
151
|
#
|
|
195
152
|
# Gregorian Calendar
|
|
196
153
|
#
|
|
197
|
-
class Gregorian <
|
|
154
|
+
class Gregorian < Christian
|
|
198
155
|
|
|
199
156
|
# 通日 - > ユリウス暦とグレゴリオ暦の差
|
|
200
157
|
#
|
|
@@ -282,6 +239,11 @@ module When
|
|
|
282
239
|
#
|
|
283
240
|
attr_reader :reform_jdn
|
|
284
241
|
|
|
242
|
+
# @private
|
|
243
|
+
#
|
|
244
|
+
# 対応する ::Date の start 属性
|
|
245
|
+
alias :_default_start :reform_jdn
|
|
246
|
+
|
|
285
247
|
#
|
|
286
248
|
# 年初の最初の定義の年
|
|
287
249
|
#
|
|
@@ -460,280 +422,294 @@ module When
|
|
|
460
422
|
@border = [0,0,0]
|
|
461
423
|
end
|
|
462
424
|
end
|
|
425
|
+
end
|
|
463
426
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
NoteObjects = [When::BasicTypes::M17n, [
|
|
470
|
-
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
|
471
|
-
"locale:[=en:, ja=ja:, alias]",
|
|
472
|
-
"names:[Christian]",
|
|
427
|
+
#
|
|
428
|
+
# キリスト教の暦注(クリスマスと復活祭)
|
|
429
|
+
#
|
|
430
|
+
class CalendarNote::Christian < CalendarNote
|
|
473
431
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
432
|
+
NoteObjects = [When::BasicTypes::M17n, [
|
|
433
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
|
434
|
+
"locale:[=en:, ja=ja:, alias]",
|
|
435
|
+
"names:[Christian]",
|
|
478
436
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
"names:[Month]"
|
|
484
|
-
]
|
|
485
|
-
],
|
|
437
|
+
# 年の暦注 ----------------------------
|
|
438
|
+
[When::BasicTypes::M17n,
|
|
439
|
+
"names:[year]"
|
|
440
|
+
],
|
|
486
441
|
|
|
487
|
-
|
|
442
|
+
# 月の暦注 ----------------------------
|
|
443
|
+
[When::BasicTypes::M17n,
|
|
444
|
+
"names:[month]",
|
|
488
445
|
[When::BasicTypes::M17n,
|
|
489
|
-
"names:[
|
|
490
|
-
[When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
|
|
491
|
-
[When::BasicTypes::M17n, "names:[Christmas, クリスマス]"],
|
|
492
|
-
[When::BasicTypes::M17n, "names:[Fixed_feast=, 固定祝日=]" ],
|
|
493
|
-
[When::BasicTypes::M17n, "names:[Moveable_feast, 移動祝日]" ]
|
|
446
|
+
"names:[Month]"
|
|
494
447
|
]
|
|
495
|
-
]
|
|
496
|
-
|
|
497
|
-
# 固定祝日
|
|
498
|
-
Fixed_feasts = {
|
|
499
|
-
[ 1, 6] => "Epiphany",
|
|
500
|
-
[ 3, 1] => "St.David's Day",
|
|
501
|
-
[ 3, 17] => "St.Patrick's Day",
|
|
502
|
-
[ 3, 25] => "Annunciation-Lady Day",
|
|
503
|
-
[ 4, 23] => "St.George's Day",
|
|
504
|
-
[ 6, 24] => "Midsummer Day",
|
|
505
|
-
[ 9, 14] => "Holy Cross Day",
|
|
506
|
-
[ 9, 29] => "Michaelmas Day",
|
|
507
|
-
[11, 30] => "St.Andrew's Day",
|
|
508
|
-
[12, 13] => "St.Lucia's Day",
|
|
509
|
-
[12, 21] => "St.Thomas's Day",
|
|
510
|
-
# [12, 25] => "Christmas Day"
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
# 移動祝日 (日付と曜日による)
|
|
514
|
-
moveable_feasts = {}
|
|
515
|
-
[[[ 9, 15, 2], "III Quatember"],
|
|
516
|
-
[[11, 27, 6], "Advent Sunday"],
|
|
517
|
-
[[12, 14, 2], "IV Quatember" ]].each do |pair|
|
|
518
|
-
date, name = pair
|
|
519
|
-
7.times do
|
|
520
|
-
moveable_feasts[date.dup] = name
|
|
521
|
-
date[1] += 1
|
|
522
|
-
if date[1] > 30
|
|
523
|
-
date[0] += 1
|
|
524
|
-
date[1] = 1
|
|
525
|
-
end
|
|
526
|
-
end
|
|
527
|
-
end
|
|
528
|
-
|
|
529
|
-
# 移動祝日
|
|
530
|
-
Moveable_feasts = {
|
|
531
|
-
# 復活祭からの日数による
|
|
532
|
-
-63 => "Septuagesima Sunday",
|
|
533
|
-
-56 => "Sexagesima Sunday",
|
|
534
|
-
-49 => "Quinquagesima Sunday",
|
|
535
|
-
-46 => "Ash Wednesday",
|
|
536
|
-
-42 => "Quadragesima Sunday",
|
|
537
|
-
-40 => "I Quatember",
|
|
538
|
-
-35 => "Reminizer Sunday",
|
|
539
|
-
-28 => "Oculi Sunday",
|
|
540
|
-
-21 => "Laetare Sunday",
|
|
541
|
-
-14 => "Judica Sunday",
|
|
542
|
-
-7 => "Palmarum",
|
|
543
|
-
-2 => "Good Friday",
|
|
544
|
-
# 0 => "Easter Day",
|
|
545
|
-
7 => "Low Sunday",
|
|
546
|
-
35 => "Rogation Sunday",
|
|
547
|
-
39 => "Ascension Day",
|
|
548
|
-
49 => "Whitsunday",
|
|
549
|
-
53 => "II Quatember",
|
|
550
|
-
56 => "Trinity Sunday",
|
|
551
|
-
60 => "Corpus Christi",
|
|
552
|
-
}.update(moveable_feasts)
|
|
553
|
-
|
|
554
|
-
# 週日補正フラグ
|
|
555
|
-
# @return [Integer]
|
|
556
|
-
attr_reader :w
|
|
557
|
-
|
|
558
|
-
# 最も遅い満月の3月0日からの日数
|
|
559
|
-
# @return [Integer]
|
|
560
|
-
attr_reader :d
|
|
561
|
-
|
|
562
|
-
# クリスマスの3月0日からの日数
|
|
563
|
-
# @return [Integer]
|
|
564
|
-
attr_reader :x
|
|
565
|
-
|
|
566
|
-
# 平年数
|
|
567
|
-
# @return [Integer]
|
|
568
|
-
attr_reader :n
|
|
569
|
-
|
|
570
|
-
# 置閏周期
|
|
571
|
-
# @return [Integer]
|
|
572
|
-
attr_reader :s
|
|
573
|
-
|
|
574
|
-
# 月の位相の補正
|
|
575
|
-
# @return [Integer]
|
|
576
|
-
attr_reader :c
|
|
577
|
-
|
|
578
|
-
# ガード
|
|
579
|
-
# @return [Integer]
|
|
580
|
-
attr_reader :g
|
|
581
|
-
|
|
582
|
-
# ベース
|
|
583
|
-
# @return [Integer]
|
|
584
|
-
attr_reader :b
|
|
448
|
+
],
|
|
585
449
|
|
|
586
|
-
#
|
|
587
|
-
|
|
588
|
-
|
|
450
|
+
# 日の暦注 ----------------------------
|
|
451
|
+
[When::BasicTypes::M17n,
|
|
452
|
+
"names:[day]",
|
|
453
|
+
[When::BasicTypes::M17n, "names:[Week, 七曜]" ],
|
|
454
|
+
[When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
|
|
455
|
+
[When::BasicTypes::M17n, "names:[Christmas, クリスマス]"],
|
|
456
|
+
[When::BasicTypes::M17n, "names:[Fixed_feast=, 固定祝日=]" ],
|
|
457
|
+
[When::BasicTypes::M17n, "names:[Moveable_feast, 移動祝日]" ]
|
|
458
|
+
]
|
|
459
|
+
]]
|
|
589
460
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
461
|
+
# 固定祝日
|
|
462
|
+
Fixed_feasts = {
|
|
463
|
+
[ 1, 6] => "Epiphany",
|
|
464
|
+
[ 3, 1] => "St.David's Day",
|
|
465
|
+
[ 3, 17] => "St.Patrick's Day",
|
|
466
|
+
[ 3, 25] => "Annunciation-Lady Day",
|
|
467
|
+
[ 4, 23] => "St.George's Day",
|
|
468
|
+
[ 6, 24] => "Midsummer Day",
|
|
469
|
+
[ 9, 14] => "Holy Cross Day",
|
|
470
|
+
[ 9, 29] => "Michaelmas Day",
|
|
471
|
+
[11, 30] => "St.Andrew's Day",
|
|
472
|
+
[12, 13] => "St.Lucia's Day",
|
|
473
|
+
[12, 21] => "St.Thomas's Day",
|
|
474
|
+
# [12, 25] => "Christmas Day"
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
# 移動祝日 (日付と曜日による)
|
|
478
|
+
moveable_feasts = {}
|
|
479
|
+
[[[ 9, 15, 2], "III Quatember"],
|
|
480
|
+
[[11, 27, 6], "Advent Sunday"],
|
|
481
|
+
[[12, 14, 2], "IV Quatember" ]].each do |pair|
|
|
482
|
+
date, name = pair
|
|
483
|
+
7.times do
|
|
484
|
+
moveable_feasts[date.dup] = name
|
|
485
|
+
date[1] += 1
|
|
486
|
+
if date[1] > 30
|
|
487
|
+
date[0] += 1
|
|
488
|
+
date[1] = 1
|
|
602
489
|
end
|
|
603
490
|
end
|
|
491
|
+
end
|
|
604
492
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
#
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
493
|
+
# 移動祝日
|
|
494
|
+
Moveable_feasts = {
|
|
495
|
+
# 復活祭からの日数による
|
|
496
|
+
-63 => "Septuagesima Sunday",
|
|
497
|
+
-56 => "Sexagesima Sunday",
|
|
498
|
+
-49 => "Quinquagesima Sunday",
|
|
499
|
+
-46 => "Ash Wednesday",
|
|
500
|
+
-42 => "Quadragesima Sunday",
|
|
501
|
+
-40 => "I Quatember",
|
|
502
|
+
-35 => "Reminizer Sunday",
|
|
503
|
+
-28 => "Oculi Sunday",
|
|
504
|
+
-21 => "Laetare Sunday",
|
|
505
|
+
-14 => "Judica Sunday",
|
|
506
|
+
-7 => "Palmarum",
|
|
507
|
+
-2 => "Good Friday",
|
|
508
|
+
# 0 => "Easter Day",
|
|
509
|
+
7 => "Low Sunday",
|
|
510
|
+
35 => "Rogation Sunday",
|
|
511
|
+
39 => "Ascension Day",
|
|
512
|
+
49 => "Whitsunday",
|
|
513
|
+
53 => "II Quatember",
|
|
514
|
+
56 => "Trinity Sunday",
|
|
515
|
+
60 => "Corpus Christi",
|
|
516
|
+
}.update(moveable_feasts)
|
|
517
|
+
|
|
518
|
+
# 週日補正フラグ
|
|
519
|
+
# @return [Integer]
|
|
520
|
+
attr_reader :w
|
|
521
|
+
|
|
522
|
+
# 最も遅い満月の3月0日からの日数
|
|
523
|
+
# @return [Integer]
|
|
524
|
+
attr_reader :d
|
|
525
|
+
|
|
526
|
+
# クリスマスの3月0日からの日数
|
|
527
|
+
# @return [Integer]
|
|
528
|
+
attr_reader :x
|
|
529
|
+
|
|
530
|
+
# 平年数
|
|
531
|
+
# @return [Integer]
|
|
532
|
+
attr_reader :n
|
|
533
|
+
|
|
534
|
+
# 置閏周期
|
|
535
|
+
# @return [Integer]
|
|
536
|
+
attr_reader :s
|
|
537
|
+
|
|
538
|
+
# 月の位相の補正
|
|
539
|
+
# @return [Integer]
|
|
540
|
+
attr_reader :c
|
|
541
|
+
|
|
542
|
+
# ガード
|
|
543
|
+
# @return [Integer]
|
|
544
|
+
attr_reader :g
|
|
545
|
+
|
|
546
|
+
# ベース
|
|
547
|
+
# @return [Integer]
|
|
548
|
+
attr_reader :b
|
|
549
|
+
|
|
550
|
+
# 満月補正フラグ
|
|
551
|
+
# @return [Integer]
|
|
552
|
+
attr_reader :f
|
|
553
|
+
|
|
554
|
+
# 七曜
|
|
555
|
+
#
|
|
556
|
+
# @param [When::TM::TemporalPosition] date
|
|
557
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(ダミー)
|
|
558
|
+
#
|
|
559
|
+
# @return [When::Coordinates::Residue] 七曜
|
|
560
|
+
#
|
|
561
|
+
def week(date, frame=nil)
|
|
562
|
+
When.Residue('Week')[date.to_i % 7]
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
# クリスマス
|
|
566
|
+
#
|
|
567
|
+
# @param [Numeric] date 西暦の年数
|
|
568
|
+
# @param [When::TM::TemporalPosition] date
|
|
569
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
570
|
+
#
|
|
571
|
+
# @return [Integer] クリスマスのユリウス通日(dateが西暦の年数の場合)
|
|
572
|
+
# @return [When::TM::CalDate] クリスマスのWhen::TM::CalDate(yearがWhen::TM::TemporalPositionの場合)
|
|
573
|
+
#
|
|
574
|
+
def christmas(date, frame=nil)
|
|
575
|
+
_event(date, 'christmas', frame) do |year, frame|
|
|
576
|
+
@x - 1 + frame._coordinates_to_number(year, 2, 0)
|
|
628
577
|
end
|
|
578
|
+
end
|
|
629
579
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
580
|
+
# 復活祭
|
|
581
|
+
#
|
|
582
|
+
# @param [Numeric] date 西暦の年数
|
|
583
|
+
# @param [When::TM::TemporalPosition] date
|
|
584
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
585
|
+
#
|
|
586
|
+
# @return [Integer] 復活祭のユリウス通日(dateが西暦の年数の場合)
|
|
587
|
+
# @return [When::TM::CalDate] 復活祭のWhen::TM::CalDate(yearがWhen::TM::TemporalPositionの場合)
|
|
588
|
+
#
|
|
589
|
+
def easter(date, frame=nil)
|
|
590
|
+
_event(date, 'easter', frame) do |year, frame|
|
|
591
|
+
golden = (year+@b) % @s + 1
|
|
592
|
+
m = (frame._lunar_equation(year) + 11*golden + @c) % 30
|
|
593
|
+
if @f == 0
|
|
594
|
+
m += 1 if m==0 || m==1 && golden>=@n
|
|
595
|
+
else
|
|
596
|
+
m += (golden-1) / @f
|
|
597
|
+
m -= 30 if m>=@n
|
|
598
|
+
end
|
|
599
|
+
result = frame._coordinates_to_number(year, 2, 0) + @d - 1 - m
|
|
600
|
+
result += @g - (result-@w) % 7 if @w<7
|
|
601
|
+
result
|
|
634
602
|
end
|
|
603
|
+
end
|
|
635
604
|
|
|
636
|
-
|
|
637
|
-
|
|
605
|
+
# イベントの標準的な間隔を返す
|
|
606
|
+
# @private
|
|
607
|
+
def _delta(parameter=nil)
|
|
608
|
+
return When::DurationP1Y
|
|
609
|
+
end
|
|
638
610
|
|
|
639
|
-
|
|
640
|
-
|
|
611
|
+
# @private
|
|
612
|
+
alias :christmas_delta :_delta
|
|
641
613
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
# @param [When::TM::TemporalPosition] date
|
|
645
|
-
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
646
|
-
#
|
|
647
|
-
# @return [String] 祝日の名称
|
|
648
|
-
# @return [nil] 祝日に該当しない
|
|
649
|
-
#
|
|
650
|
-
def fixed_feast(date, frame=nil)
|
|
651
|
-
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Julian)
|
|
652
|
-
Fixed_feasts[date.cal_date[-2..-1]]
|
|
653
|
-
end
|
|
614
|
+
# @private
|
|
615
|
+
alias :easter_delta :_delta
|
|
654
616
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
Moveable_feasts[date.cal_date[-2..-1] + [date.to_i % 7]]
|
|
668
|
-
end
|
|
617
|
+
# 固定祝日
|
|
618
|
+
#
|
|
619
|
+
# @param [When::TM::TemporalPosition] date
|
|
620
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
621
|
+
#
|
|
622
|
+
# @return [String] 祝日の名称
|
|
623
|
+
# @return [nil] 祝日に該当しない
|
|
624
|
+
#
|
|
625
|
+
def fixed_feast(date, frame=nil)
|
|
626
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Christian)
|
|
627
|
+
Fixed_feasts[date.cal_date[-2..-1]]
|
|
628
|
+
end
|
|
669
629
|
|
|
670
|
-
|
|
630
|
+
# 移動祝日
|
|
631
|
+
#
|
|
632
|
+
# @param [When::TM::TemporalPosition] date
|
|
633
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
634
|
+
#
|
|
635
|
+
# @return [String] 祝日の名称
|
|
636
|
+
# @return [nil] 祝日に該当しない
|
|
637
|
+
#
|
|
638
|
+
def moveable_feast(date, frame=nil)
|
|
639
|
+
result = Moveable_feasts[date.to_i - easter(date, frame).to_i]
|
|
640
|
+
return result if result
|
|
641
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Christian)
|
|
642
|
+
Moveable_feasts[date.cal_date[-2..-1] + [date.to_i % 7]]
|
|
643
|
+
end
|
|
671
644
|
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
645
|
+
private
|
|
646
|
+
|
|
647
|
+
# オブジェクトの正規化
|
|
648
|
+
# w - 週日補正フラグ(デフォルト 6)
|
|
649
|
+
# d - 最も遅い満月 (デフォルト 3月0日から 50日)
|
|
650
|
+
# x - クリスマス (デフォルト 3月0日から300日)
|
|
651
|
+
# n - 平年数 (デフォルト 12)
|
|
652
|
+
# s - 置閏周期 (デフォルト 19)
|
|
653
|
+
# c - 月の位相の補正(デフォルト 3)
|
|
654
|
+
# g - ガード (デフォルト 7)
|
|
655
|
+
# b - ベース (デフォルト 0)
|
|
656
|
+
# f - 満月補正フラグ(デフォルト 0)
|
|
657
|
+
def _normalize(args=[], options={})
|
|
658
|
+
w, d, x, n, s, c, g, b, f = args
|
|
659
|
+
@w = (w || @w || 6).to_i
|
|
660
|
+
@d = (d || @d || 50).to_i
|
|
661
|
+
@x = (x || @x || 300).to_i
|
|
662
|
+
@n = (n || @n || 12).to_i
|
|
663
|
+
@s = (s || @s || 19).to_i
|
|
664
|
+
@c = (c || @c || 3).to_i
|
|
665
|
+
@g = (g || @g || 7).to_i
|
|
666
|
+
@b = (b || @b || 0).to_i
|
|
667
|
+
@f = (f || @f || 0).to_i
|
|
668
|
+
@event = 'easter'
|
|
669
|
+
@prime ||= [['Month'], ['Week']]
|
|
670
|
+
super
|
|
671
|
+
end
|
|
697
672
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
673
|
+
#
|
|
674
|
+
# 任意の暦をグレゴリオorユリウス暦日に変換
|
|
675
|
+
#
|
|
676
|
+
def _to_date_for_note(date)
|
|
677
|
+
return When.Calendar(When::CalendarTypes::Christian._default_start(date)) ^ date if ::Object.const_defined?(:Date) && date.kind_of?(::Date)
|
|
678
|
+
return When.Calendar('Gregorian') ^ date if date.kind_of?(::Time)
|
|
679
|
+
return date if date.frame.kind_of?(When::CalendarTypes::Christian)
|
|
680
|
+
When.Calendar(date.frame.iri =~ /Coptic/ || date.to_i < 2299161 ? 'Julian' : 'Gregorian') ^ date
|
|
681
|
+
end
|
|
705
682
|
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
else
|
|
726
|
-
frame = date.frame
|
|
727
|
-
end
|
|
728
|
-
year = date.most_significant_coordinate * 1
|
|
683
|
+
# 当該年のイベントの日付
|
|
684
|
+
# date : 西暦の年数 or When::TM::(Temporal)Position
|
|
685
|
+
# event : イベント名 (String)
|
|
686
|
+
# frame : 暦法(デフォルトは When.Resource('_c:Gregorian'))
|
|
687
|
+
#
|
|
688
|
+
# @return [Integer] イベントのユリウス通日(dateが西暦の年数の場合)
|
|
689
|
+
# @return [When::TM::CalDate] イベントのWhen::TM::CalDate(yearがWhen::TM::(Temporal)Positionの場合)
|
|
690
|
+
#
|
|
691
|
+
def _event(date, event, frame=nil)
|
|
692
|
+
case date
|
|
693
|
+
when Numeric
|
|
694
|
+
year = date * 1
|
|
695
|
+
when When::TimeValue
|
|
696
|
+
options = date._attr
|
|
697
|
+
options[:precision] = When::DAY
|
|
698
|
+
options[:events] = [event]
|
|
699
|
+
if frame
|
|
700
|
+
frame = When.Calendar(frame)
|
|
701
|
+
date = frame.jul_trans(date, options)
|
|
729
702
|
else
|
|
730
|
-
|
|
703
|
+
frame = date.frame
|
|
731
704
|
end
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
return frame.jul_trans(result, options)
|
|
705
|
+
year = date.most_significant_coordinate * 1
|
|
706
|
+
else
|
|
707
|
+
raise TypeError, "Irregal date type: #{date.class}"
|
|
736
708
|
end
|
|
709
|
+
frame ||= When.Resource('_c:Gregorian')
|
|
710
|
+
result = yield(year, frame)
|
|
711
|
+
return result if date.kind_of?(Numeric)
|
|
712
|
+
return frame.jul_trans(result, options)
|
|
737
713
|
end
|
|
738
714
|
end
|
|
739
715
|
end
|