when_exe 0.3.6 → 0.3.7
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 +7 -0
- data/README.md +171 -0
- data/lib/when_exe.rb +78 -47
- data/lib/when_exe/basictypes.rb +752 -747
- data/lib/when_exe/calendarnote.rb +805 -801
- data/lib/when_exe/calendartypes.rb +1583 -1531
- data/lib/when_exe/coordinates.rb +16 -15
- data/lib/when_exe/core/duration.rb +114 -110
- data/lib/when_exe/core/extension.rb +504 -504
- data/lib/when_exe/ephemeris.rb +1917 -1913
- data/lib/when_exe/ephemeris/moon.rb +333 -333
- data/lib/when_exe/ephemeris/notes.rb +389 -387
- data/lib/when_exe/ephemeris/planets.rb +585 -585
- data/lib/when_exe/ephemeris/sun.rb +214 -214
- data/lib/when_exe/googlecalendar.rb +144 -140
- data/lib/when_exe/icalendar.rb +1636 -1636
- data/lib/when_exe/inspect.rb +46 -22
- data/lib/when_exe/locales/akt.rb +176 -176
- data/lib/when_exe/locales/encoding_conversion.rb +134 -126
- data/lib/when_exe/locales/iast.rb +90 -90
- data/lib/when_exe/locales/locale.rb +750 -746
- data/lib/when_exe/locales/transliteration_table.rb +62 -62
- data/lib/when_exe/mini_application.rb +307 -305
- data/lib/when_exe/parts/enumerator.rb +2 -2
- data/lib/when_exe/parts/geometric_complex.rb +397 -397
- data/lib/when_exe/parts/method_cash.rb +224 -224
- data/lib/when_exe/parts/resource.rb +1069 -1071
- data/lib/when_exe/parts/timezone.rb +240 -230
- data/lib/when_exe/region/armenian.rb +56 -56
- data/lib/when_exe/region/babylonian.rb +405 -0
- data/lib/when_exe/region/bahai.rb +146 -146
- data/lib/when_exe/region/balinese.rb +622 -622
- data/lib/when_exe/region/chinese.rb +95 -25
- data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
- data/lib/when_exe/region/chinese/epochs.rb +1 -1
- data/lib/when_exe/region/chinese/twins.rb +803 -795
- data/lib/when_exe/region/christian.rb +824 -824
- data/lib/when_exe/region/coptic.rb +106 -87
- data/lib/when_exe/region/discordian.rb +225 -225
- data/lib/when_exe/region/far_east.rb +188 -188
- data/lib/when_exe/region/french.rb +56 -56
- data/lib/when_exe/region/geologicalage.rb +639 -639
- data/lib/when_exe/region/goddess.rb +58 -58
- data/lib/when_exe/region/indian.rb +1254 -1251
- data/lib/when_exe/region/iranian.rb +8 -8
- data/lib/when_exe/region/islamic.rb +3 -3
- data/lib/when_exe/region/japanese.rb +93 -99
- data/lib/when_exe/region/japanese/calendars.rb +396 -397
- data/lib/when_exe/region/japanese/epochs.rb +26 -26
- data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
- data/lib/when_exe/region/japanese/notes.rb +1383 -1386
- data/lib/when_exe/region/japanese/residues.rb +1306 -1306
- data/lib/when_exe/region/japanese/twins.rb +225 -225
- data/lib/when_exe/region/japanese/weeks.rb +112 -0
- data/lib/when_exe/region/javanese.rb +230 -230
- data/lib/when_exe/region/jewish.rb +126 -126
- data/lib/when_exe/region/korean.rb +378 -378
- data/lib/when_exe/region/m17n.rb +114 -113
- data/lib/when_exe/region/martian.rb +258 -255
- data/lib/when_exe/region/mayan.rb +32 -32
- data/lib/when_exe/region/residue.rb +89 -89
- data/lib/when_exe/region/roman.rb +36 -24
- data/lib/when_exe/region/ryukyu.rb +97 -97
- data/lib/when_exe/region/shire.rb +240 -240
- data/lib/when_exe/region/soviet.rb +209 -0
- data/lib/when_exe/region/symmetry.rb +50 -50
- data/lib/when_exe/region/thai.rb +336 -335
- data/lib/when_exe/region/tibetan.rb +316 -315
- data/lib/when_exe/region/vietnamese.rb +440 -439
- data/lib/when_exe/region/weekdate.rb +80 -80
- data/lib/when_exe/region/world.rb +175 -175
- data/lib/when_exe/region/yerm.rb +14 -14
- data/lib/when_exe/region/zoroastrian.rb +203 -203
- data/lib/when_exe/timestandard.rb +707 -681
- data/lib/when_exe/tmduration.rb +338 -330
- data/lib/when_exe/tmobjects.rb +1346 -1325
- data/lib/when_exe/tmposition.rb +2115 -2072
- data/lib/when_exe/tmreference.rb +1693 -1669
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +1 -1
- data/test/examples/JapanHolidaysRFC6350.ics +1 -1
- data/test/test.rb +67 -61
- data/test/test/basictypes.rb +409 -409
- data/test/test/calendarnote.rb +86 -69
- data/test/test/calendartypes.rb +97 -97
- data/test/test/coordinates.rb +396 -396
- data/test/test/ephemeris.rb +83 -74
- data/test/test/ephemeris/moon.rb +14 -14
- data/test/test/ephemeris/planets.rb +14 -14
- data/test/test/ephemeris/sun.rb +14 -14
- data/test/test/googlecalendar.rb +194 -176
- data/test/test/icalendar.rb +867 -858
- data/test/test/inspect.rb +117 -117
- data/test/test/parts.rb +487 -487
- data/test/test/region/balinese.rb +34 -0
- data/test/test/region/chinese.rb +218 -206
- data/test/test/region/christian.rb +245 -245
- data/test/test/region/coptic.rb +27 -27
- data/test/test/region/french.rb +33 -33
- data/test/test/region/geologicalage.rb +17 -17
- data/test/test/region/indian.rb +57 -57
- data/test/test/region/iran.rb +54 -54
- data/test/test/region/islamic.rb +18 -18
- data/test/test/region/japanese.rb +237 -219
- data/test/test/region/jewish.rb +61 -61
- data/test/test/region/m17n.rb +184 -184
- data/test/test/region/mayan.rb +195 -195
- data/test/test/region/residue.rb +147 -139
- data/test/test/region/thai.rb +116 -116
- data/test/test/region/tibetan.rb +30 -30
- data/test/test/region/vietnamese.rb +102 -102
- data/test/test/region/yerm.rb +146 -146
- data/test/test/timestandard.rb +81 -81
- data/test/test/tmobjects.rb +328 -328
- data/test/test/tmposition.rb +397 -284
- data/test/test/tmreference.rb +157 -157
- metadata +13 -10
|
@@ -1,87 +1,106 @@
|
|
|
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
|
-
|
|
10
|
-
class BasicTypes::M17n
|
|
11
|
-
|
|
12
|
-
Coptic = [self, [
|
|
13
|
-
"locale:[=en:, ja=ja:, alias]",
|
|
14
|
-
"names:[Coptic=]",
|
|
15
|
-
"[Coptic=en:Coptic_calendar, コプト暦 ]",
|
|
16
|
-
"[Ethiopian=en:Ethiopian_calendar, エチオピア暦=en:Ethiopian_calendar]",
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"[
|
|
25
|
-
"[
|
|
26
|
-
"[
|
|
27
|
-
"[
|
|
28
|
-
"[
|
|
29
|
-
"[
|
|
30
|
-
"[
|
|
31
|
-
"[
|
|
32
|
-
"[
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"[
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"[
|
|
42
|
-
"[
|
|
43
|
-
"[
|
|
44
|
-
"[
|
|
45
|
-
"[
|
|
46
|
-
"[
|
|
47
|
-
"[
|
|
48
|
-
"[
|
|
49
|
-
"[
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
When.Index('Coptic::
|
|
63
|
-
When::Coordinates::DefaultDayIndex
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
'
|
|
80
|
-
'
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
+
|
|
10
|
+
class BasicTypes::M17n
|
|
11
|
+
|
|
12
|
+
Coptic = [self, [
|
|
13
|
+
"locale:[=en:, ja=ja:, alias]",
|
|
14
|
+
"names:[Coptic=]",
|
|
15
|
+
"[Coptic=en:Coptic_calendar, コプト暦 ]",
|
|
16
|
+
"[Ethiopian=en:Ethiopian_calendar, エチオピア暦=en:Ethiopian_calendar]",
|
|
17
|
+
"[Ptolemaic=en:Ptolemaic_dynasty, プトレマイオス朝]",
|
|
18
|
+
|
|
19
|
+
# Remarks
|
|
20
|
+
'[based on Chris Bennett "Egyptian Dates" (Retrieved 2014-06-29)=http://www.tyndalehouse.com/Egypt/ptolemies/chron/egyptian/chron_eg_intro.htm,' +
|
|
21
|
+
'典拠 - Chris Bennett "Egyptian Dates" (2014-06-29 閲覧)=]',
|
|
22
|
+
|
|
23
|
+
[self,
|
|
24
|
+
"names:[EgyptianMonth=, 月=ja:%%<月_(暦)>]",
|
|
25
|
+
"[tut=, トート= ]",
|
|
26
|
+
"[baba=, バーバ= ]",
|
|
27
|
+
"[hatur=, ハートール= ]",
|
|
28
|
+
"[kiyahak=, キヤハーク= ]",
|
|
29
|
+
"[tuba=, トーバ= ]",
|
|
30
|
+
"[amshir=, アムシール= ]",
|
|
31
|
+
"[baramhat=, バラムハート=]",
|
|
32
|
+
"[barmuda=, バルムーダ= ]",
|
|
33
|
+
"[bashans=, バシャンス= ]",
|
|
34
|
+
"[ba'una=, バウーナ= ]",
|
|
35
|
+
"[abib=, アビーブ= ]",
|
|
36
|
+
"[misra=, ミスラー= ]",
|
|
37
|
+
"[epagomen=, エパゴメネ= ]"
|
|
38
|
+
],
|
|
39
|
+
|
|
40
|
+
[self,
|
|
41
|
+
"names:[EthiopianMonth=, 月=ja:%%<月_(暦)>]",
|
|
42
|
+
"[Mäskäräm=, マスカラム= ]",
|
|
43
|
+
"[Ṭəqəmt=, テケルト= ]",
|
|
44
|
+
"[Ḫədar=, ヘダル= ]",
|
|
45
|
+
"[Taḫśaś=, ターサス= ]",
|
|
46
|
+
"[Ṭərr=, テル= ]",
|
|
47
|
+
"[Yäkatit=, イェカティト=]",
|
|
48
|
+
"[Mägabit=, メガビト= ]",
|
|
49
|
+
"[Miyazya=, ミアジア= ]",
|
|
50
|
+
"[Gənbot=, ゲエンポト= ]",
|
|
51
|
+
"[Säne=, セネ= ]",
|
|
52
|
+
"[Ḥamle=, ハムレ= ]",
|
|
53
|
+
"[Nähase=, ネハッセ= ]",
|
|
54
|
+
"[Ṗagʷəmen=, パゴウメン= ]"
|
|
55
|
+
]
|
|
56
|
+
]]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
module CalendarTypes
|
|
60
|
+
|
|
61
|
+
_egyptian_month_indices = [
|
|
62
|
+
When.Index('Coptic::EgyptianMonth', {:unit =>13}),
|
|
63
|
+
When::Coordinates::DefaultDayIndex
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
_ethiopian_month_indices = [
|
|
67
|
+
When.Index('Coptic::EthiopianMonth', {:unit =>13}),
|
|
68
|
+
When::Coordinates::DefaultDayIndex
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Coptic Calendar in Egypt and Ethiopia
|
|
73
|
+
#
|
|
74
|
+
Coptic = [{'Epoch'=>{'284Y'=>{'origin_of_MSC' => 1},
|
|
75
|
+
'0Y'=>{'origin_of_MSC' => 285},
|
|
76
|
+
'8Y'=>{'origin_of_MSC' => 277,
|
|
77
|
+
'label' => 'Coptic::Ethiopian',
|
|
78
|
+
'indices' => _ethiopian_month_indices}}}, CyclicTableBased, {
|
|
79
|
+
'label' => 'Coptic::Coptic',
|
|
80
|
+
'origin_of_LSC' => 1825030,
|
|
81
|
+
'origin_of_MSC' => 1,
|
|
82
|
+
'epoch_in_CE' => 285,
|
|
83
|
+
'indices' => _egyptian_month_indices,
|
|
84
|
+
'rule_table' => {
|
|
85
|
+
'T' => {'Rule' =>[365,365,366,365]},
|
|
86
|
+
365 => {'Length'=>[30]*12+[5]},
|
|
87
|
+
366 => {'Length'=>[30]*12+[6]}
|
|
88
|
+
}
|
|
89
|
+
}]
|
|
90
|
+
|
|
91
|
+
#
|
|
92
|
+
# Egyptian Calendar based on Chris Bennett, http://www.tyndalehouse.com/Egypt/ptolemies/chron/babylonian/chron_bab_intro_fr.htm
|
|
93
|
+
#
|
|
94
|
+
Ptolemaic = [CyclicTableBased, {
|
|
95
|
+
'label' => 'Coptic::Ptolemaic',
|
|
96
|
+
'remarks' => When.M17n('Coptic::based on Chris Bennett "Egyptian Dates" (Retrieved 2014-06-29)'),
|
|
97
|
+
'origin_of_LSC' => 1600478,
|
|
98
|
+
'origin_of_MSC' => -330,
|
|
99
|
+
'indices' => _egyptian_month_indices,
|
|
100
|
+
'rule_table' => {
|
|
101
|
+
'T' => {'Rule' =>[365]},
|
|
102
|
+
365 => {'Length'=>[30]*12+[5]}
|
|
103
|
+
}
|
|
104
|
+
}]
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -1,225 +1,225 @@
|
|
|
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
|
-
Discordian = [self, [
|
|
13
|
-
"locale:[=en:, ja]",
|
|
14
|
-
"names:[Discordian=en:Discordian_calendar, ディスコーディアン暦=]",
|
|
15
|
-
[self,
|
|
16
|
-
"names:[IntercalaryDay=en:Intercalation, 閏日=ja:%%<閏>]",
|
|
17
|
-
"[%0sSt. Tib's Day=, %0s閏日=]"
|
|
18
|
-
]
|
|
19
|
-
]]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
#
|
|
23
|
-
# Discordian Note
|
|
24
|
-
#
|
|
25
|
-
class CalendarNote::DiscordianWeek < CalendarNote::Week
|
|
26
|
-
|
|
27
|
-
Notes = [When::BasicTypes::M17n, [
|
|
28
|
-
"namespace:[en=http://en.wiktionary.org/wiki/]",
|
|
29
|
-
"locale:[=en:]",
|
|
30
|
-
"names:[Discordian]",
|
|
31
|
-
|
|
32
|
-
# Notes for year ----------------------------
|
|
33
|
-
[When::BasicTypes::M17n,
|
|
34
|
-
"names:[year]"
|
|
35
|
-
],
|
|
36
|
-
|
|
37
|
-
# Notes for month ----------------------------
|
|
38
|
-
[When::BasicTypes::M17n,
|
|
39
|
-
"names:[month]",
|
|
40
|
-
[When::BasicTypes::M17n,
|
|
41
|
-
"names:[Month]",
|
|
42
|
-
"[Chaos=en:chaos ]",
|
|
43
|
-
"[Discord=en:discord ]",
|
|
44
|
-
"[Confusion=en:confusion ]",
|
|
45
|
-
"[Bureaucracy ]",
|
|
46
|
-
"[The Aftermath=en:aftermath]"
|
|
47
|
-
]
|
|
48
|
-
],
|
|
49
|
-
|
|
50
|
-
# Notes for day ----------------------------
|
|
51
|
-
[When::BasicTypes::M17n,
|
|
52
|
-
"names:[day]",
|
|
53
|
-
[When::BasicTypes::M17n,
|
|
54
|
-
"names:[Week]",
|
|
55
|
-
[DayOfWeek, "label:[Sweetmorn= ]", {'delta'=>5}],
|
|
56
|
-
[DayOfWeek, "label:[Boomtime= ]", {'delta'=>5}],
|
|
57
|
-
[DayOfWeek, "label:[Pungenday= ]", {'delta'=>5}],
|
|
58
|
-
[DayOfWeek, "label:[Prickle-Prickle=]", {'delta'=>5}],
|
|
59
|
-
[DayOfWeek, "label:[Setting Orange= ]", {'delta'=>5}],
|
|
60
|
-
[DayOfWeek, "label:[Out of Week= ]", {'delta'=>1461}]
|
|
61
|
-
],
|
|
62
|
-
|
|
63
|
-
[When::BasicTypes::M17n,
|
|
64
|
-
"names:[Holyday=]",
|
|
65
|
-
"[St. Tib's Day=]", # 02-29 St. Tib's Day
|
|
66
|
-
"[Mungday= ]", # 01-05 Chaos 5
|
|
67
|
-
"[Chaoflux= ]", # 02-19 Chaos 50
|
|
68
|
-
"[Mojoday= ]", # 03-19 Discord 5
|
|
69
|
-
"[Discoflux= ]", # 05-03 Discord 50
|
|
70
|
-
"[Syaday= ]", # 05-31 Confusion 5
|
|
71
|
-
"[Confuflux= ]", # 07-15 Confusion 50
|
|
72
|
-
"[Zaraday= ]", # 08-12 Bureaucracy 5
|
|
73
|
-
"[Bureflux= ]", # 09-26 Bureaucracy 50
|
|
74
|
-
"[Maladay= ]", # 10-24 The Aftermath 5
|
|
75
|
-
"[Afflux= ]" # 12-08 The Aftermath 50
|
|
76
|
-
],
|
|
77
|
-
|
|
78
|
-
"[
|
|
79
|
-
]
|
|
80
|
-
]]
|
|
81
|
-
|
|
82
|
-
# @private
|
|
83
|
-
IndexOfWeek = [0, 1, 2, 3, 5, 4]
|
|
84
|
-
|
|
85
|
-
# Just or last sweetmorn
|
|
86
|
-
#
|
|
87
|
-
# @param [When::TM::TemporalPosition] date
|
|
88
|
-
# @param [nil] parameter (not used)
|
|
89
|
-
#
|
|
90
|
-
# @return [When::TM::TemporalPosition]
|
|
91
|
-
#
|
|
92
|
-
def sweetmorn(date, parameter=nil)
|
|
93
|
-
date = _to_date_for_note(date)
|
|
94
|
-
y,m,d = date.cal_date
|
|
95
|
-
date -= When::P1D if date.length(When::MONTH) == 74 && +d == 60
|
|
96
|
-
dow = ((m-1)*73+d*1-1) % 5
|
|
97
|
-
date -= When::P1D * dow unless dow == 0
|
|
98
|
-
date.events = [@days_of_week[0]]
|
|
99
|
-
date
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Erisian week
|
|
103
|
-
#
|
|
104
|
-
# @param [When::TM::CalDate] date
|
|
105
|
-
# @param [When::TM::CalDate] base
|
|
106
|
-
#
|
|
107
|
-
# @return [String]
|
|
108
|
-
#
|
|
109
|
-
def week(date, base=nil)
|
|
110
|
-
date = _to_date_for_note(date)
|
|
111
|
-
y,m,d = date.cal_date
|
|
112
|
-
dow = d*0 == 0 ? ((m-1)*73+d*1-1) % 5 : 5
|
|
113
|
-
length = (base || date).length(When::MONTH) == 73 ? 5 : 6
|
|
114
|
-
index = length == 5 ? dow : IndexOfWeek[dow]
|
|
115
|
-
{:value=>@days_of_week[dow], :position=>[index,length]}
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
#
|
|
119
|
-
# Week labels
|
|
120
|
-
#
|
|
121
|
-
# @param [When::TM::TemporalPosition] date
|
|
122
|
-
#
|
|
123
|
-
# @return [Array<When::CalendarNote::Week::DayOfWeek>]
|
|
124
|
-
#
|
|
125
|
-
def week_labels(date)
|
|
126
|
-
date = _to_date_for_note(date)
|
|
127
|
-
date.length(When::MONTH) == 73 ?
|
|
128
|
-
@days_of_week.child[0...5] :
|
|
129
|
-
@days_of_week.child[0...4] + [@days_of_week.child[5]] + [@days_of_week.child[4]]
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Holyday
|
|
133
|
-
#
|
|
134
|
-
# @param [When::TM::CalDate] date
|
|
135
|
-
#
|
|
136
|
-
# @return [String]
|
|
137
|
-
#
|
|
138
|
-
def holyday(date)
|
|
139
|
-
date = _to_date_for_note(date)
|
|
140
|
-
y, m, d = date.cal_date
|
|
141
|
-
index =
|
|
142
|
-
case +d
|
|
143
|
-
when 5 ; 1
|
|
144
|
-
when 50 ; 2
|
|
145
|
-
else ; d * 0 - 1
|
|
146
|
-
end
|
|
147
|
-
return nil if index == -1
|
|
148
|
-
When.CalendarNote('DiscordianWeek/Notes::day::Holyday::*')[(m-1)*2+index]
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
#
|
|
152
|
-
# convert date to Discordian date
|
|
153
|
-
#
|
|
154
|
-
# @private
|
|
155
|
-
def _to_date_for_note(date)
|
|
156
|
-
date = When::Discordian ^ date unless date.frame.label.to_s == 'Discordian'
|
|
157
|
-
date
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
private
|
|
161
|
-
|
|
162
|
-
# object normalization
|
|
163
|
-
#
|
|
164
|
-
# @private
|
|
165
|
-
def _normalize(args=[], options={})
|
|
166
|
-
@event ||= 'sweetmorn'
|
|
167
|
-
super
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
module CalendarTypes
|
|
172
|
-
|
|
173
|
-
#
|
|
174
|
-
# Discordian Calendar
|
|
175
|
-
#
|
|
176
|
-
class Discordian < TableBased
|
|
177
|
-
|
|
178
|
-
# @private
|
|
179
|
-
Normal_IDS = (1..73).to_a
|
|
180
|
-
|
|
181
|
-
# @private
|
|
182
|
-
Long_IDS = (1..59).to_a + [When.Pair(59,1)] + (60..73).to_a
|
|
183
|
-
|
|
184
|
-
private
|
|
185
|
-
|
|
186
|
-
#
|
|
187
|
-
# Object Normalization
|
|
188
|
-
#
|
|
189
|
-
def _normalize(args=[], options={})
|
|
190
|
-
@label ||= 'Discordian'
|
|
191
|
-
@epoch_in_CE ||= -1166
|
|
192
|
-
@note ||= 'DiscordianWeek'
|
|
193
|
-
@engine ||= 'Gregorian'
|
|
194
|
-
@engine = When.Calendar(@engine)
|
|
195
|
-
@indices ||= [
|
|
196
|
-
When.Index('DiscordianWeekNotes::month::Month', {:unit =>5}),
|
|
197
|
-
When.Index({:branch=>{1=>When.M17n('Discordian::IntercalaryDay')[0]}})
|
|
198
|
-
]
|
|
199
|
-
@rule_table ||= {
|
|
200
|
-
365 => {'Length'=> [73]*5},
|
|
201
|
-
366 => {'Length'=> [74] + [73]*4}
|
|
202
|
-
}
|
|
203
|
-
super
|
|
204
|
-
end
|
|
205
|
-
|
|
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
|
-
#
|
|
214
|
-
# day arrangement pattern
|
|
215
|
-
#
|
|
216
|
-
def _ids_(date)
|
|
217
|
-
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
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
end
|
|
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
|
+
Discordian = [self, [
|
|
13
|
+
"locale:[=en:, ja]",
|
|
14
|
+
"names:[Discordian=en:Discordian_calendar, ディスコーディアン暦=]",
|
|
15
|
+
[self,
|
|
16
|
+
"names:[IntercalaryDay=en:Intercalation, 閏日=ja:%%<閏>]",
|
|
17
|
+
"[%0sSt. Tib's Day=, %0s閏日=]"
|
|
18
|
+
]
|
|
19
|
+
]]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Discordian Note
|
|
24
|
+
#
|
|
25
|
+
class CalendarNote::DiscordianWeek < CalendarNote::Week
|
|
26
|
+
|
|
27
|
+
Notes = [When::BasicTypes::M17n, [
|
|
28
|
+
"namespace:[en=http://en.wiktionary.org/wiki/]",
|
|
29
|
+
"locale:[=en:]",
|
|
30
|
+
"names:[Discordian]",
|
|
31
|
+
|
|
32
|
+
# Notes for year ----------------------------
|
|
33
|
+
[When::BasicTypes::M17n,
|
|
34
|
+
"names:[year]"
|
|
35
|
+
],
|
|
36
|
+
|
|
37
|
+
# Notes for month ----------------------------
|
|
38
|
+
[When::BasicTypes::M17n,
|
|
39
|
+
"names:[month]",
|
|
40
|
+
[When::BasicTypes::M17n,
|
|
41
|
+
"names:[Month]",
|
|
42
|
+
"[Chaos=en:chaos ]",
|
|
43
|
+
"[Discord=en:discord ]",
|
|
44
|
+
"[Confusion=en:confusion ]",
|
|
45
|
+
"[Bureaucracy ]",
|
|
46
|
+
"[The Aftermath=en:aftermath]"
|
|
47
|
+
]
|
|
48
|
+
],
|
|
49
|
+
|
|
50
|
+
# Notes for day ----------------------------
|
|
51
|
+
[When::BasicTypes::M17n,
|
|
52
|
+
"names:[day]",
|
|
53
|
+
[When::BasicTypes::M17n,
|
|
54
|
+
"names:[Week]",
|
|
55
|
+
[DayOfWeek, "label:[Sweetmorn= ]", {'delta'=>5}],
|
|
56
|
+
[DayOfWeek, "label:[Boomtime= ]", {'delta'=>5}],
|
|
57
|
+
[DayOfWeek, "label:[Pungenday= ]", {'delta'=>5}],
|
|
58
|
+
[DayOfWeek, "label:[Prickle-Prickle=]", {'delta'=>5}],
|
|
59
|
+
[DayOfWeek, "label:[Setting Orange= ]", {'delta'=>5}],
|
|
60
|
+
[DayOfWeek, "label:[Out of Week= ]", {'delta'=>1461}]
|
|
61
|
+
],
|
|
62
|
+
|
|
63
|
+
[When::BasicTypes::M17n,
|
|
64
|
+
"names:[Holyday=]",
|
|
65
|
+
"[St. Tib's Day=]", # 02-29 St. Tib's Day
|
|
66
|
+
"[Mungday= ]", # 01-05 Chaos 5
|
|
67
|
+
"[Chaoflux= ]", # 02-19 Chaos 50
|
|
68
|
+
"[Mojoday= ]", # 03-19 Discord 5
|
|
69
|
+
"[Discoflux= ]", # 05-03 Discord 50
|
|
70
|
+
"[Syaday= ]", # 05-31 Confusion 5
|
|
71
|
+
"[Confuflux= ]", # 07-15 Confusion 50
|
|
72
|
+
"[Zaraday= ]", # 08-12 Bureaucracy 5
|
|
73
|
+
"[Bureflux= ]", # 09-26 Bureaucracy 50
|
|
74
|
+
"[Maladay= ]", # 10-24 The Aftermath 5
|
|
75
|
+
"[Afflux= ]" # 12-08 The Aftermath 50
|
|
76
|
+
],
|
|
77
|
+
|
|
78
|
+
"[Common_Week]"
|
|
79
|
+
]
|
|
80
|
+
]]
|
|
81
|
+
|
|
82
|
+
# @private
|
|
83
|
+
IndexOfWeek = [0, 1, 2, 3, 5, 4]
|
|
84
|
+
|
|
85
|
+
# Just or last sweetmorn
|
|
86
|
+
#
|
|
87
|
+
# @param [When::TM::TemporalPosition] date
|
|
88
|
+
# @param [nil] parameter (not used)
|
|
89
|
+
#
|
|
90
|
+
# @return [When::TM::TemporalPosition]
|
|
91
|
+
#
|
|
92
|
+
def sweetmorn(date, parameter=nil)
|
|
93
|
+
date = _to_date_for_note(date)
|
|
94
|
+
y,m,d = date.cal_date
|
|
95
|
+
date -= When::P1D if date.length(When::MONTH) == 74 && +d == 60
|
|
96
|
+
dow = ((m-1)*73+d*1-1) % 5
|
|
97
|
+
date -= When::P1D * dow unless dow == 0
|
|
98
|
+
date.events = [@days_of_week[0]]
|
|
99
|
+
date
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Erisian week
|
|
103
|
+
#
|
|
104
|
+
# @param [When::TM::CalDate] date
|
|
105
|
+
# @param [When::TM::CalDate] base
|
|
106
|
+
#
|
|
107
|
+
# @return [String]
|
|
108
|
+
#
|
|
109
|
+
def week(date, base=nil)
|
|
110
|
+
date = _to_date_for_note(date)
|
|
111
|
+
y,m,d = date.cal_date
|
|
112
|
+
dow = d*0 == 0 ? ((m-1)*73+d*1-1) % 5 : 5
|
|
113
|
+
length = (base || date).length(When::MONTH) == 73 ? 5 : 6
|
|
114
|
+
index = length == 5 ? dow : IndexOfWeek[dow]
|
|
115
|
+
{:value=>@days_of_week[dow], :position=>[index,length]}
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
#
|
|
119
|
+
# Week labels
|
|
120
|
+
#
|
|
121
|
+
# @param [When::TM::TemporalPosition] date
|
|
122
|
+
#
|
|
123
|
+
# @return [Array<When::CalendarNote::Week::DayOfWeek>]
|
|
124
|
+
#
|
|
125
|
+
def week_labels(date)
|
|
126
|
+
date = _to_date_for_note(date)
|
|
127
|
+
date.length(When::MONTH) == 73 ?
|
|
128
|
+
@days_of_week.child[0...5] :
|
|
129
|
+
@days_of_week.child[0...4] + [@days_of_week.child[5]] + [@days_of_week.child[4]]
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Holyday
|
|
133
|
+
#
|
|
134
|
+
# @param [When::TM::CalDate] date
|
|
135
|
+
#
|
|
136
|
+
# @return [String]
|
|
137
|
+
#
|
|
138
|
+
def holyday(date)
|
|
139
|
+
date = _to_date_for_note(date)
|
|
140
|
+
y, m, d = date.cal_date
|
|
141
|
+
index =
|
|
142
|
+
case +d
|
|
143
|
+
when 5 ; 1
|
|
144
|
+
when 50 ; 2
|
|
145
|
+
else ; d * 0 - 1
|
|
146
|
+
end
|
|
147
|
+
return nil if index == -1
|
|
148
|
+
When.CalendarNote('DiscordianWeek/Notes::day::Holyday::*')[(m-1)*2+index]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
#
|
|
152
|
+
# convert date to Discordian date
|
|
153
|
+
#
|
|
154
|
+
# @private
|
|
155
|
+
def _to_date_for_note(date)
|
|
156
|
+
date = When::Discordian ^ date unless date.frame.label.to_s == 'Discordian'
|
|
157
|
+
date
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
private
|
|
161
|
+
|
|
162
|
+
# object normalization
|
|
163
|
+
#
|
|
164
|
+
# @private
|
|
165
|
+
def _normalize(args=[], options={})
|
|
166
|
+
@event ||= 'sweetmorn'
|
|
167
|
+
super
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
module CalendarTypes
|
|
172
|
+
|
|
173
|
+
#
|
|
174
|
+
# Discordian Calendar
|
|
175
|
+
#
|
|
176
|
+
class Discordian < TableBased
|
|
177
|
+
|
|
178
|
+
# @private
|
|
179
|
+
Normal_IDS = (1..73).to_a
|
|
180
|
+
|
|
181
|
+
# @private
|
|
182
|
+
Long_IDS = (1..59).to_a + [When.Pair(59,1)] + (60..73).to_a
|
|
183
|
+
|
|
184
|
+
private
|
|
185
|
+
|
|
186
|
+
#
|
|
187
|
+
# Object Normalization
|
|
188
|
+
#
|
|
189
|
+
def _normalize(args=[], options={})
|
|
190
|
+
@label ||= 'Discordian'
|
|
191
|
+
@epoch_in_CE ||= -1166
|
|
192
|
+
@note ||= 'DiscordianWeek'
|
|
193
|
+
@engine ||= 'Gregorian'
|
|
194
|
+
@engine = When.Calendar(@engine)
|
|
195
|
+
@indices ||= [
|
|
196
|
+
When.Index('DiscordianWeekNotes::month::Month', {:unit =>5}),
|
|
197
|
+
When.Index({:branch=>{1=>When.M17n('Discordian::IntercalaryDay')[0]}})
|
|
198
|
+
]
|
|
199
|
+
@rule_table ||= {
|
|
200
|
+
365 => {'Length'=> [73]*5},
|
|
201
|
+
366 => {'Length'=> [74] + [73]*4}
|
|
202
|
+
}
|
|
203
|
+
super
|
|
204
|
+
end
|
|
205
|
+
|
|
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
|
+
#
|
|
214
|
+
# day arrangement pattern
|
|
215
|
+
#
|
|
216
|
+
def _ids_(date)
|
|
217
|
+
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
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|