when_exe 0.3.5 → 0.3.6
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/irb.rc +1 -0
- data/bin/locales.rb +8 -6
- data/bin/when.rb +1 -1
- data/lib/when_exe.rb +231 -146
- data/lib/when_exe/basictypes.rb +108 -18
- data/lib/when_exe/calendarnote.rb +263 -116
- data/lib/when_exe/calendartypes.rb +413 -22
- data/lib/when_exe/coordinates.rb +58 -36
- data/lib/when_exe/core/compatibility.rb +8 -6
- data/lib/when_exe/core/extension.rb +40 -15
- data/lib/when_exe/ephemeris.rb +20 -19
- data/lib/when_exe/{region → ephemeris}/moon.rb +4 -4
- data/lib/when_exe/{region/ephemeric_notes.rb → ephemeris/notes.rb} +25 -6
- data/lib/when_exe/{region → ephemeris}/planets.rb +0 -0
- data/lib/when_exe/{region → ephemeris}/sun.rb +7 -3
- data/lib/when_exe/{region → ephemeris}/v50.rb +0 -0
- data/lib/when_exe/googlecalendar.rb +2 -2
- data/lib/when_exe/icalendar.rb +3 -3
- data/lib/when_exe/inspect.rb +130 -70
- data/lib/when_exe/locales/af.rb +2 -2
- data/lib/when_exe/locales/akt.rb +176 -0
- data/lib/when_exe/locales/ar.rb +2 -2
- data/lib/when_exe/locales/{locales.rb → autoload.rb} +6 -2
- data/lib/when_exe/locales/az.rb +2 -2
- data/lib/when_exe/locales/bg.rb +2 -2
- data/lib/when_exe/locales/bn.rb +2 -2
- data/lib/when_exe/locales/bs.rb +2 -2
- data/lib/when_exe/locales/ca.rb +2 -2
- data/lib/when_exe/locales/cs.rb +2 -2
- data/lib/when_exe/locales/cy.rb +2 -2
- data/lib/when_exe/locales/da.rb +2 -2
- data/lib/when_exe/locales/de.rb +2 -2
- data/lib/when_exe/locales/de_AT.rb +2 -2
- data/lib/when_exe/locales/de_CH.rb +2 -2
- data/lib/when_exe/locales/el.rb +2 -2
- data/lib/when_exe/locales/en.rb +2 -2
- data/lib/when_exe/locales/en_AU.rb +2 -2
- data/lib/when_exe/locales/en_CA.rb +2 -2
- data/lib/when_exe/locales/en_GB.rb +2 -2
- data/lib/when_exe/locales/en_IE.rb +2 -2
- data/lib/when_exe/locales/en_IN.rb +3 -3
- data/lib/when_exe/locales/en_NZ.rb +2 -2
- data/lib/when_exe/locales/en_US.rb +2 -2
- data/lib/when_exe/locales/en_ZA.rb +88 -0
- data/lib/when_exe/locales/encoding_conversion.rb +126 -0
- data/lib/when_exe/locales/eo.rb +2 -2
- data/lib/when_exe/locales/es.rb +2 -2
- data/lib/when_exe/locales/es_419.rb +2 -2
- data/lib/when_exe/locales/es_AR.rb +2 -2
- data/lib/when_exe/locales/es_CL.rb +2 -2
- data/lib/when_exe/locales/es_CO.rb +2 -2
- data/lib/when_exe/locales/es_CR.rb +2 -2
- data/lib/when_exe/locales/es_EC.rb +2 -2
- data/lib/when_exe/locales/es_MX.rb +2 -2
- data/lib/when_exe/locales/es_PA.rb +2 -2
- data/lib/when_exe/locales/es_PE.rb +2 -2
- data/lib/when_exe/locales/es_US.rb +84 -0
- data/lib/when_exe/locales/es_VE.rb +2 -2
- data/lib/when_exe/locales/et.rb +2 -2
- data/lib/when_exe/locales/eu.rb +2 -2
- data/lib/when_exe/locales/fa.rb +2 -2
- data/lib/when_exe/locales/fi.rb +3 -3
- data/lib/when_exe/locales/fr.rb +2 -2
- data/lib/when_exe/locales/fr_CA.rb +2 -2
- data/lib/when_exe/locales/fr_CH.rb +2 -2
- data/lib/when_exe/locales/gl.rb +2 -2
- data/lib/when_exe/locales/he.rb +3 -3
- data/lib/when_exe/locales/hi.rb +2 -2
- data/lib/when_exe/locales/hi_IN.rb +2 -2
- data/lib/when_exe/locales/hr.rb +2 -2
- data/lib/when_exe/locales/hu.rb +6 -5
- data/lib/when_exe/locales/iast.rb +90 -0
- data/lib/when_exe/locales/id.rb +2 -2
- data/lib/when_exe/locales/is.rb +2 -2
- data/lib/when_exe/locales/it.rb +2 -2
- data/lib/when_exe/locales/it_CH.rb +2 -2
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/kn.rb +2 -2
- data/lib/when_exe/locales/ko.rb +2 -2
- data/lib/when_exe/locales/links.rb +3 -3
- data/lib/when_exe/locales/lo.rb +2 -2
- data/lib/when_exe/{parts → locales}/locale.rb +77 -49
- data/lib/when_exe/locales/lt.rb +6 -2
- data/lib/when_exe/locales/lv.rb +2 -2
- data/lib/when_exe/locales/mk.rb +2 -2
- data/lib/when_exe/locales/mn.rb +2 -2
- data/lib/when_exe/locales/ms.rb +2 -2
- data/lib/when_exe/locales/nb.rb +2 -2
- data/lib/when_exe/locales/ne.rb +2 -2
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/nn.rb +2 -2
- data/lib/when_exe/locales/or.rb +2 -2
- data/lib/when_exe/locales/pl.rb +2 -2
- data/lib/when_exe/locales/pt.rb +2 -2
- data/lib/when_exe/locales/pt_BR.rb +2 -2
- data/lib/when_exe/locales/rm.rb +2 -2
- data/lib/when_exe/locales/ro.rb +2 -2
- data/lib/when_exe/locales/ru.rb +2 -2
- data/lib/when_exe/locales/sk.rb +2 -2
- data/lib/when_exe/locales/sl.rb +2 -2
- data/lib/when_exe/locales/sr.rb +2 -2
- data/lib/when_exe/locales/sv.rb +2 -2
- data/lib/when_exe/locales/sw.rb +2 -2
- data/lib/when_exe/locales/ta.rb +95 -0
- data/lib/when_exe/locales/th.rb +2 -2
- data/lib/when_exe/locales/tl.rb +3 -3
- data/lib/when_exe/locales/tr.rb +2 -2
- data/lib/when_exe/locales/transliteration_table.rb +62 -0
- data/lib/when_exe/locales/uk.rb +15 -15
- data/lib/when_exe/locales/ur.rb +2 -2
- data/lib/when_exe/locales/uz.rb +2 -2
- data/lib/when_exe/locales/vi.rb +2 -2
- data/lib/when_exe/locales/wo.rb +2 -2
- data/lib/when_exe/locales/zh_CN.rb +2 -2
- data/lib/when_exe/locales/zh_HK.rb +15 -15
- data/lib/when_exe/locales/zh_TW.rb +2 -2
- data/lib/when_exe/locales/zh_YUE.rb +77 -0
- data/lib/when_exe/mini_application.rb +22 -12
- data/lib/when_exe/parts/geometric_complex.rb +16 -1
- data/lib/when_exe/parts/method_cash.rb +184 -238
- data/lib/when_exe/parts/resource.rb +65 -16
- data/lib/when_exe/region/armenian.rb +56 -0
- data/lib/when_exe/region/bahai.rb +13 -13
- data/lib/when_exe/region/balinese.rb +33 -35
- data/lib/when_exe/region/chinese.rb +82 -78
- data/lib/when_exe/region/{chinese_calendar.rb → chinese/calendars.rb} +59 -40
- data/lib/when_exe/region/{chinese_epoch.rb → chinese/epochs.rb} +3 -4
- data/lib/when_exe/region/{chinese_twin.rb → chinese/twins.rb} +48 -51
- data/lib/when_exe/region/christian.rb +236 -127
- data/lib/when_exe/region/coptic.rb +9 -10
- data/lib/when_exe/region/dee.rb +48 -0
- data/lib/when_exe/region/discordian.rb +225 -0
- data/lib/when_exe/region/far_east.rb +2 -6
- data/lib/when_exe/region/french.rb +7 -17
- data/lib/when_exe/region/geologicalage.rb +0 -1
- data/lib/when_exe/region/goddess.rb +58 -0
- data/lib/when_exe/region/indian.rb +323 -231
- data/lib/when_exe/region/iranian.rb +159 -22
- data/lib/when_exe/region/islamic.rb +7 -9
- data/lib/when_exe/region/japanese.rb +14 -803
- data/lib/when_exe/region/japanese/calendars.rb +397 -0
- data/lib/when_exe/region/japanese/epochs.rb +426 -0
- data/lib/when_exe/region/{nihon_shoki.rb → japanese/nihon_shoki.rb} +0 -2
- data/lib/when_exe/region/{japanese_notes.rb → japanese/notes.rb} +179 -150
- data/lib/when_exe/region/japanese/residues.rb +1306 -0
- data/lib/when_exe/region/{japanese_twin.rb → japanese/twins.rb} +12 -15
- data/lib/when_exe/region/javanese.rb +16 -14
- data/lib/when_exe/region/jewish.rb +8 -9
- data/lib/when_exe/region/korean.rb +146 -35
- data/lib/when_exe/region/m17n.rb +8 -10
- data/lib/when_exe/region/martian.rb +44 -16
- data/lib/when_exe/region/mayan.rb +12 -10
- data/lib/when_exe/region/pope.rb +0 -1
- data/lib/when_exe/region/residue.rb +4 -5
- data/lib/when_exe/region/roman.rb +20 -24
- data/lib/when_exe/region/ryukyu.rb +3 -4
- data/lib/when_exe/region/shire.rb +97 -94
- data/lib/when_exe/region/symmetry.rb +50 -0
- data/lib/when_exe/region/thai.rb +164 -56
- data/lib/when_exe/region/tibetan.rb +86 -86
- data/lib/when_exe/region/vietnamese.rb +9 -12
- data/lib/when_exe/region/weekdate.rb +80 -0
- data/lib/when_exe/region/world.rb +65 -70
- data/lib/when_exe/region/yerm.rb +98 -0
- data/lib/when_exe/region/zoroastrian.rb +203 -0
- data/lib/when_exe/timestandard.rb +4 -4
- data/lib/when_exe/tmobjects.rb +1 -3
- data/lib/when_exe/tmposition.rb +13 -12
- data/lib/when_exe/tmreference.rb +11 -10
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +3 -3
- data/test/examples/Residue.m17n +1 -1
- data/test/examples/Terms.m17n +1 -1
- data/test/test.rb +2 -1
- data/test/test/basictypes.rb +18 -2
- data/test/test/calendarnote.rb +1 -1
- data/test/test/calendartypes.rb +1 -1
- data/test/test/coordinates.rb +7 -7
- data/test/test/{region → ephemeris}/moon.rb +0 -0
- data/test/test/{region → ephemeris}/planets.rb +0 -0
- data/test/test/{region → ephemeris}/sun.rb +0 -0
- data/test/test/parts.rb +8 -13
- data/test/test/region/christian.rb +245 -0
- data/test/test/region/french.rb +16 -16
- data/test/test/region/iran.rb +34 -34
- data/test/test/region/japanese.rb +6 -4
- data/test/test/region/m17n.rb +8 -7
- data/test/test/region/mayan.rb +12 -12
- data/test/test/region/residue.rb +20 -4
- data/test/test/region/thai.rb +25 -3
- data/test/test/region/yerm.rb +146 -0
- metadata +39 -20
- data/lib/when_exe/region/japanese_residues.rb +0 -1212
- data/test/test/region/civil.rb +0 -124
@@ -5,18 +5,12 @@
|
|
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
|
7
7
|
|
8
|
-
require 'when_exe/region/
|
8
|
+
require 'when_exe/region/chinese/calendars'
|
9
9
|
|
10
10
|
module When
|
11
11
|
|
12
12
|
module CalendarTypes
|
13
13
|
|
14
|
-
_Indices = [
|
15
|
-
Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
|
16
|
-
:trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
|
17
|
-
Coordinates::DefaultDayIndex
|
18
|
-
]
|
19
|
-
|
20
14
|
_year1884 = {
|
21
15
|
'Years' => 1,
|
22
16
|
'Months' => 13,
|
@@ -36,7 +30,8 @@ module When
|
|
36
30
|
|
37
31
|
# 欽授暦 1544 - 1788
|
38
32
|
Vietnamese1544 = [PatternTableBasedLuniSolar, {
|
39
|
-
'origin_of_MSC'=>1544, 'origin_of_LSC'=>2285027, 'indices'=>
|
33
|
+
'origin_of_MSC'=>1544, 'origin_of_LSC'=>2285027, 'indices'=> ChineseIndices,
|
34
|
+
'before' => 'Chinese0939', 'after' => 'Vietnamese1789',
|
40
35
|
'rule_table'=> %w( AbCdEFgHiJkL aAbCdEfGHiJKl
|
41
36
|
aBcdEfGHIjKL abCdeFgHIiJKL abCdeFgHiJKL aBcDefGhIjKL AbCdEffGhIjKl
|
42
37
|
|
@@ -97,7 +92,8 @@ module When
|
|
97
92
|
|
98
93
|
# 西山朝の暦 1789-1801
|
99
94
|
Vietnamese1789 = [PatternTableBasedLuniSolar, {
|
100
|
-
'origin_of_MSC'=>1789, 'origin_of_LSC'=>2374505, 'indices'=>
|
95
|
+
'origin_of_MSC'=>1789, 'origin_of_LSC'=>2374505, 'indices'=> ChineseIndices,
|
96
|
+
'before' => 'Vietnamese1544', 'after' => 'Vietnamese1631',
|
101
97
|
'rule_table'=> %w( ABcDeeFgHiJkL AbCDefGhIjKl
|
102
98
|
AbCDeFgHiJkL aBcDdEFgHiJkL aBcdEFgHIjKl AbcDeFgHIJkL aBbcDeFgHIjKL
|
103
99
|
aBcDefgHIjKL AbCdEffgHiJKL aBCdeFghIjKL aBCdEfGhIjkL AbCdDEfGhIjKl
|
@@ -108,7 +104,8 @@ module When
|
|
108
104
|
|
109
105
|
# 萬全暦 1631-1812
|
110
106
|
Vietnamese1631 = [PatternTableBasedLuniSolar, {
|
111
|
-
'origin_of_MSC'=>1631, 'origin_of_LSC'=>2316802, 'indices'=>
|
107
|
+
'origin_of_MSC'=>1631, 'origin_of_LSC'=>2316802, 'indices'=> ChineseIndices,
|
108
|
+
'before' => 'Vietnamese1544', 'after' => 'Vietnamese1813',
|
112
109
|
'rule_table'=> %w(
|
113
110
|
ABcDeFgHiJklL AbCDeFgHiJkL aBcDeFGhIjKl AbcDeFGhHIjKl AbcDeFgHIjKL
|
114
111
|
aBcdEfgHIjKL AbCddEfgHiJKL AbCdeFghIjKL AbCDefGhiJkL AaBCdEfGhIjkL
|
@@ -156,7 +153,8 @@ module When
|
|
156
153
|
|
157
154
|
# 協紀暦以降 1813-2030
|
158
155
|
Vietnamese1813 = [PatternTableBasedLuniSolarExtended, {
|
159
|
-
'origin_of_MSC'=>1813, 'origin_of_LSC'=>2383276, 'indices'=>
|
156
|
+
'origin_of_MSC'=>1813, 'origin_of_LSC'=>2383276, 'indices'=> ChineseIndices,
|
157
|
+
'before' => 'Vietnamese1631', 'after' => 'ChineseLuniSolar?time_basis=+07',
|
160
158
|
'rule_table'=> %w( AbCdefGhIJKl ABbCdefGhIJkL ABcdEfgHiJkL
|
161
159
|
ABcDeFfgHiJkL AbCDeFgHijKl AbCDeFGhIjkL aBcDdEFgHIjKl aBcDeFgHIJkL
|
162
160
|
abCdeFgHIJkL AbCcdeFgHIjKL AbCdefGhIjKL AbCdEfgGhIjKL AbCdEfgHiJkL
|
@@ -223,7 +221,6 @@ module When
|
|
223
221
|
'VSL' => {'A'=>'1073', 'B'=>'1075', 'C'=>'1137.09', 'D'=>'1140.01', 'E'=>'1225.06'}},
|
224
222
|
'DN'=>{'KDVNT' => {'Z'=>'Chinese1645', },
|
225
223
|
'LDNK' => {'Z'=>'Vietnamese1813'}}}, self, [
|
226
|
-
"namespace:[ja=http://ja.wikipedia.org/wiki/, en=http://en.wikipedia.org/wiki/]",
|
227
224
|
"locale:[=ja:, en=en:, alias]",
|
228
225
|
'area:[ベトナム#{?LY=LY}#{&DN=DN}=ja:%%<元号>#%.<ベトナム>,Vietnam#{?LY=LY}#{&DN=DN}=en:Vietnam]',
|
229
226
|
[self,
|
@@ -0,0 +1,80 @@
|
|
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
|
+
WeekDate = [self, [
|
13
|
+
"locale:[=en:, ja]",
|
14
|
+
"names:[WeekDate=en:ISO_week_date, 暦週=]",
|
15
|
+
[self, "names:[week]"] + (1...100).to_a.map {|m| "Week #{m}"},
|
16
|
+
]]
|
17
|
+
end
|
18
|
+
|
19
|
+
module CalendarTypes
|
20
|
+
|
21
|
+
#
|
22
|
+
# Week Date Calendar
|
23
|
+
#
|
24
|
+
class WeekDate < TableBased
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
#
|
29
|
+
# Object Normalization
|
30
|
+
#
|
31
|
+
def _normalize(args=[], options={})
|
32
|
+
@label ||= 'WeekDate'
|
33
|
+
@period ||= 7 # length of week
|
34
|
+
@first ||= 0 # first day of week
|
35
|
+
@margin ||= 3 # first day of year
|
36
|
+
@strftime ||= @period < 10 ? '%Y-W%m-%q' : '%Y-W%m-%d'
|
37
|
+
@engine ||= 'Gregorian'
|
38
|
+
@engine = When.Calendar(@engine)
|
39
|
+
@indices ||= [
|
40
|
+
When.Index('WeekDate::week'),
|
41
|
+
When::Coordinates::DefaultDayIndex
|
42
|
+
]
|
43
|
+
@rule_table ||= _generate_rule
|
44
|
+
raise ArgumentError, 'Too many weeks in a year' if @rule_table.keys.max / @period >= 100
|
45
|
+
super
|
46
|
+
end
|
47
|
+
|
48
|
+
# 年初の通日
|
49
|
+
#
|
50
|
+
# @param [Array<Numeric>] date ( 年 )
|
51
|
+
#
|
52
|
+
# @return [Integer] 年初の通日
|
53
|
+
#
|
54
|
+
def _sdn_(date)
|
55
|
+
year = +date[0] - @engine.origin_of_MSC
|
56
|
+
sdn0 = @margin + @engine._coordinates_to_number(year, 0, 0)
|
57
|
+
sdn1 = @first + @period * sdn0.div(@period)
|
58
|
+
sdn1 -= @period if sdn1 > sdn0
|
59
|
+
sdn1
|
60
|
+
end
|
61
|
+
|
62
|
+
# @private
|
63
|
+
def _generate_rule
|
64
|
+
hash = {}
|
65
|
+
_week_number_range.each do |length|
|
66
|
+
hash[@period * length] = {'Length'=>[@period] * length}
|
67
|
+
end
|
68
|
+
hash
|
69
|
+
end
|
70
|
+
|
71
|
+
# @private
|
72
|
+
def _week_number_range
|
73
|
+
return 52..53 if @engine.kind_of?(When::CalendarTypes::Christian)
|
74
|
+
starts = (0..19).to_a.map {|year| @engine._coordinates_to_number(year, 0, 0)}
|
75
|
+
lengths = (0..18).to_a.map {|year| starts[year+1] - starts[year]}
|
76
|
+
(lengths.min / @period)..((lengths.max + @period - 1) / @period)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -9,31 +9,22 @@ module When
|
|
9
9
|
|
10
10
|
class BasicTypes::M17n
|
11
11
|
|
12
|
-
|
13
|
-
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
12
|
+
World = [self, [
|
14
13
|
"locale:[=en:, ja=ja:, alias]",
|
15
|
-
"names:[
|
14
|
+
"names:[World=]",
|
16
15
|
"[World=en:The_World_Calendar, 世界暦]"
|
17
16
|
]]
|
18
17
|
end
|
19
18
|
|
20
|
-
class TM::CalendarEra
|
21
|
-
|
22
|
-
World = [self, [
|
23
|
-
"namespace:[en=http://en.wikipedia.org/wiki/]",
|
24
|
-
"area:[Common=]",
|
25
|
-
["[BCE=en:BCE_(disambiguation), alias:BeforeCommonEra]0.1.1"],
|
26
|
-
["[CE=en:Common_Era, alias:CommonEra]1.1.1", "Calendar Epoch", "01-01-01^World"]
|
27
|
-
]]
|
28
|
-
end
|
29
|
-
|
30
19
|
#
|
31
20
|
# 世界暦の暦週
|
32
21
|
#
|
33
|
-
class CalendarNote::WorldWeek < CalendarNote
|
22
|
+
class CalendarNote::WorldWeek < CalendarNote::Week
|
34
23
|
|
35
|
-
|
36
|
-
|
24
|
+
#
|
25
|
+
# 暦注要素の定義
|
26
|
+
#
|
27
|
+
Notes = [When::BasicTypes::M17n, [
|
37
28
|
"locale:[=en:, ja=ja:, alias]",
|
38
29
|
"names:[World]",
|
39
30
|
|
@@ -55,32 +46,40 @@ module When
|
|
55
46
|
"names:[day]",
|
56
47
|
[When::BasicTypes::M17n,
|
57
48
|
"names:[Week]",
|
58
|
-
"[Sunday, 日曜日]",
|
59
|
-
"[Monday, 月曜日]",
|
60
|
-
"[Tuesday, 火曜日]",
|
61
|
-
"[Wednesday, 水曜日]",
|
62
|
-
"[Thursday, 木曜日]",
|
63
|
-
"[Friday, 金曜日]",
|
64
|
-
"[Saturday, 土曜日]",
|
65
|
-
"[Worldsday, 無曜日]"
|
66
|
-
]
|
49
|
+
[DayOfWeek, "label:[Sunday, 日曜日]", {'delta'=>7}],
|
50
|
+
[DayOfWeek, "label:[Monday, 月曜日]", {'delta'=>7}],
|
51
|
+
[DayOfWeek, "label:[Tuesday, 火曜日]", {'delta'=>7}],
|
52
|
+
[DayOfWeek, "label:[Wednesday, 水曜日]", {'delta'=>7}],
|
53
|
+
[DayOfWeek, "label:[Thursday, 木曜日]", {'delta'=>7}],
|
54
|
+
[DayOfWeek, "label:[Friday, 金曜日]", {'delta'=>7}],
|
55
|
+
[DayOfWeek, "label:[Saturday, 土曜日]", {'delta'=>7}],
|
56
|
+
[DayOfWeek, "label:[Worldsday, 無曜日]", {'delta'=>183}],
|
57
|
+
],
|
58
|
+
|
59
|
+
"[Standard_Week]"
|
67
60
|
]
|
68
61
|
]]
|
69
62
|
|
70
|
-
# イベントの標準的な間隔を返す
|
71
63
|
# @private
|
72
|
-
|
73
|
-
return When::DurationP1W
|
74
|
-
end
|
64
|
+
FirstDayOfWeek = [0, 3, 5] * 4
|
75
65
|
|
76
66
|
# @private
|
77
|
-
|
78
|
-
|
79
|
-
|
67
|
+
ExtraDayInYear = {
|
68
|
+
[ 6, 31] => 7,
|
69
|
+
[12, 31] => 7
|
70
|
+
}
|
71
|
+
|
72
|
+
# @private
|
73
|
+
WeekLength = {
|
74
|
+
[ 6, 30] => 7,
|
75
|
+
[ 6, 31] => 8,
|
76
|
+
[12, 30] => 8,
|
77
|
+
[12, 31] => 8
|
78
|
+
}
|
80
79
|
|
81
80
|
# 当日または直前の worldsday の日
|
82
|
-
# @param
|
83
|
-
# @param
|
81
|
+
# @param [When::TM::TemporalPosition] date
|
82
|
+
# @param [nil] parameter 未使用
|
84
83
|
# @return [When::TM::TemporalPosition]
|
85
84
|
#
|
86
85
|
def worldsday(date, parameter=nil)
|
@@ -98,14 +97,14 @@ module When
|
|
98
97
|
|
99
98
|
# 当日または直前の week_day の日
|
100
99
|
# @method week_day(date, parameter=nil)
|
101
|
-
# @param
|
102
|
-
# @param
|
100
|
+
# @param [When::TM::TemporalPosition] date
|
101
|
+
# @param [nil] parameter 未使用
|
103
102
|
# @return [When::TM::TemporalPosition]
|
104
103
|
# @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
|
105
104
|
|
106
105
|
# @private
|
107
106
|
7.times do |k|
|
108
|
-
name = When.CalendarNote('WorldWeek/
|
107
|
+
name = When.CalendarNote('WorldWeek/Notes::day::Week')[k].to_s.downcase
|
109
108
|
module_eval %Q{
|
110
109
|
def #{name}(date, parameter=nil)
|
111
110
|
event_name = 'from_#{name}'
|
@@ -118,12 +117,35 @@ module When
|
|
118
117
|
date.events = [event_name]
|
119
118
|
date
|
120
119
|
end
|
121
|
-
|
122
|
-
alias :#{name}_delta :_delta
|
123
120
|
}
|
124
121
|
end
|
125
122
|
|
126
|
-
|
123
|
+
#
|
124
|
+
# この日は何曜?
|
125
|
+
#
|
126
|
+
# @param [When::TM::TemporalPosition] date
|
127
|
+
# @param [When::TM::CalDate] base (not used)
|
128
|
+
#
|
129
|
+
# @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
|
130
|
+
#
|
131
|
+
def week(date, base=nil)
|
132
|
+
date = _to_date_for_note(date)
|
133
|
+
y, m, d = date.cal_date
|
134
|
+
index = ExtraDayInYear[[m,d]] || (FirstDayOfWeek[m-1] + d - 1) % 7
|
135
|
+
length = WeekLength[[m, date.length(When::MONTH)]] || 7
|
136
|
+
{:value=>@days_of_week[index], :position=>[index, length]}
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# 暦日を当該暦注計算用クラスに変換
|
141
|
+
#
|
142
|
+
# @private
|
143
|
+
def _to_date_for_note(date)
|
144
|
+
date = When::World ^ date unless date.frame.equal?(When::World)
|
145
|
+
date
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
127
149
|
|
128
150
|
# オブジェクトの正規化
|
129
151
|
# @private
|
@@ -131,29 +153,6 @@ module When
|
|
131
153
|
@event ||= 'sunday'
|
132
154
|
super
|
133
155
|
end
|
134
|
-
|
135
|
-
#
|
136
|
-
# イベントを取得する Enumerator
|
137
|
-
#
|
138
|
-
class Enumerator < When::CalendarNote::Enumerator
|
139
|
-
|
140
|
-
#
|
141
|
-
# 次のイベントを得る
|
142
|
-
#
|
143
|
-
# @return [When::TM::TemporalPosition]
|
144
|
-
#
|
145
|
-
def succ
|
146
|
-
value = @current
|
147
|
-
if @current==:first
|
148
|
-
@first = event_eval(@first) if @delta.sign < 0
|
149
|
-
@current = @first
|
150
|
-
else
|
151
|
-
@current = event_eval(@current + @delta)
|
152
|
-
@current = event_eval(@current + @delta * 2) if @current.to_i == value.to_i
|
153
|
-
end
|
154
|
-
return value
|
155
|
-
end
|
156
|
-
end
|
157
156
|
end
|
158
157
|
|
159
158
|
module CalendarTypes
|
@@ -161,13 +160,9 @@ module When
|
|
161
160
|
# World calendar based on Gregorian calendar
|
162
161
|
#
|
163
162
|
World = [CyclicTableBased, {
|
164
|
-
'label' =>
|
165
|
-
'origin_of_LSC'
|
166
|
-
'
|
167
|
-
Coordinates::Index.new({:unit =>12, :trunk=>When.Resource('_m:CalendarTerms::Month::*')}),
|
168
|
-
Coordinates::DefaultDayIndex
|
169
|
-
],
|
170
|
-
'rule_table' => {
|
163
|
+
'label' => 'World::World',
|
164
|
+
'origin_of_LSC' => 1721060,
|
165
|
+
'rule_table' => {
|
171
166
|
'T' => {'Rule' =>['LC', 'SC', 'SC', 'SC']},
|
172
167
|
'SC' => {'Rule' =>[365]*4 + [366, 365, 365, 365]*24},
|
173
168
|
'LC' => {'Rule' =>[366, 365, 365, 365]*25},
|
@@ -0,0 +1,98 @@
|
|
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
|
+
=begin
|
9
|
+
References
|
10
|
+
|
11
|
+
(1) http://calendars.wikia.com/wiki/Yerm_Lunar_Calendar
|
12
|
+
(2) http://www.hermetic.ch/cal_stud/palmen/yerm1.htm
|
13
|
+
=end
|
14
|
+
|
15
|
+
module When
|
16
|
+
|
17
|
+
class BasicTypes::M17n
|
18
|
+
|
19
|
+
Yerm = [self, [
|
20
|
+
"locale:[=en:, ja]",
|
21
|
+
"names:[Yerm=]",
|
22
|
+
"[YermLunar=http://calendars.wikia.com/wiki/Yerm_Lunar_Calendar, ヤーム=]",
|
23
|
+
|
24
|
+
[Coordinates::Residue, "label:[yerm=]", "divisor:52", "year:0", "format:[%s=]"] +
|
25
|
+
(1..52).to_a.map {|y| [Coordinates::Residue, "label:[Yerm #{y}=]", "remainder:#{y-1}"]},
|
26
|
+
[self, "names:[month]"] + (1..17).to_a.map {|m| "Month #{m}"},
|
27
|
+
[self, "names:[night]"] + (1..30).to_a.map {|m| "Night #{m}"}
|
28
|
+
]]
|
29
|
+
end
|
30
|
+
|
31
|
+
module CalendarTypes
|
32
|
+
|
33
|
+
#
|
34
|
+
# Yerm Lunar Calendar
|
35
|
+
#
|
36
|
+
class Yerm < CyclicTableBased
|
37
|
+
|
38
|
+
#
|
39
|
+
# Analyze notation with crescent
|
40
|
+
#
|
41
|
+
# @param [String] source Notation with crescents
|
42
|
+
# @param [Array<Integer>] Upper default elements (default - today's Yerm date)
|
43
|
+
#
|
44
|
+
# @return [String] Notation with hyphens
|
45
|
+
#
|
46
|
+
def self.parse(source, abbr=nil)
|
47
|
+
c, y, m, d = abbr || (When::Yerm^When.today).cal_date
|
48
|
+
case source
|
49
|
+
when /^(-?\d+)[-\(](\d+)\((\d+)\((\d+)$/; c, y, m, d = [$1, $2, $3, $4]
|
50
|
+
when /^(-?\d+)-(\d+)\((\d+)$/ ; c, y, m, d = [$1, $2, $3 ]
|
51
|
+
when /^(-?\d+)-(\d+)$/ ; c, y, m, d = [$1, $2 ]
|
52
|
+
when /^(-?\d+)-$/ ; c, y, m, d = [$1 ]
|
53
|
+
when /^(\d+)\((\d+)\((\d+)$/ ; y, m, d = [ $1, $2, $3]
|
54
|
+
when /^(\d+)\((\d+)$/ ; m, d = [ $1, $2]
|
55
|
+
when /^(\d+)$/ ; d = $1
|
56
|
+
|
57
|
+
when /^(\d+)\)(\d+)\)(\d+)[-\)](-?\d+)$/; c, y, m, d = [$4, $3, $2, $1]
|
58
|
+
when /^(\d+)\)(\d+)-(-?\d+)$/ ; c, y, m, d = [$3, $2, $1 ]
|
59
|
+
when /^(\d+)-(-\d+)$/ ; c, y, m, d = [$2, $1 ]
|
60
|
+
when /^(-\d+)$/ ; c, y, m, d = [$1 ]
|
61
|
+
when /^(\d+)\)(\d+)\)(\d+)$/ ; y, m, d = [ $3, $2, $1]
|
62
|
+
when /^(\d+)\)(\d+)$/ ; m, d = [ $2, $1]
|
63
|
+
else ; c, y, m, d = [ ]
|
64
|
+
end
|
65
|
+
|
66
|
+
ordered = [c, y, m, d]
|
67
|
+
ordered.pop until ordered.last
|
68
|
+
raise ArgumentError, "can't parse #{source}" if ordered.empty? || ordered.include?(nil)
|
69
|
+
ordered.map {|n| n.to_s}.join('-')
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
#
|
75
|
+
# Object Normalization
|
76
|
+
#
|
77
|
+
def _normalize(args=[], options={})
|
78
|
+
@label ||= 'Yerm::YermLunar'
|
79
|
+
@origin_of_LSC ||= 1948379 - 25101 # 622-05-16 Base Cycle = No.1
|
80
|
+
@note ||= [['_m:Yerm::yerm'],
|
81
|
+
['_m:Calendar::Month'],
|
82
|
+
['_co:Common::Week', '_n:Ephemeris/Notes::day::Moon_Age']]
|
83
|
+
@indices ||= [
|
84
|
+
When.Index('Yerm::yerm', {:unit =>52}),
|
85
|
+
When.Index('Yerm::month'),
|
86
|
+
When.Index('Yerm::night')
|
87
|
+
]
|
88
|
+
@rule_table ||= {
|
89
|
+
'T' => {'Rule' =>['L', 'L', 'S'] * 17 + ['L']},
|
90
|
+
'L' => {'Length'=>[30, 29] * 8 + [30]},
|
91
|
+
'S' => {'Length'=>[30, 29] * 7 + [30]}
|
92
|
+
}
|
93
|
+
@strftime = @strftime && @strftime.upcase == 'REVERSE' ? '%d)%m)%y' : '%y(%m(%d'
|
94
|
+
super
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,203 @@
|
|
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
|
+
=begin
|
9
|
+
|
10
|
+
References
|
11
|
+
|
12
|
+
(1) http://en.wikipedia.org/wiki/Zoroastrian_calendar
|
13
|
+
(2) http://www.moonwise.co.uk/year/1375zoroastrian.htm
|
14
|
+
(3) http://www.zoroastrian.org/articles/nowruz.htm
|
15
|
+
|
16
|
+
=end
|
17
|
+
|
18
|
+
module When
|
19
|
+
class BasicTypes::M17n
|
20
|
+
|
21
|
+
Zoroastrian = [self, [
|
22
|
+
"locale:[=en:, ja=ja:, ar=ar:, alias=ja:]",
|
23
|
+
"names:[Zoroastrian=]",
|
24
|
+
"[Zoroastrian=en:Zoroastrian_calendar#The_reckoning_of_years, ゾロアスター暦= ]",
|
25
|
+
"[Qadimi=en:Zoroastrian_calendar#The_Qadimi_calendar , カディミ暦= ]",
|
26
|
+
"[Shahanshahi=en:Zoroastrian_calendar#The_Shahanshahi_calendar, シャハンシャヒ暦=]",
|
27
|
+
"[Fasli=en:Zoroastrian_calendar#The_Fasli_calendar , ファスリ暦= ]"
|
28
|
+
]]
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# ゾロアスター暦の暦注
|
33
|
+
#
|
34
|
+
class CalendarNote::Zoroastrian < CalendarNote
|
35
|
+
|
36
|
+
Notes = [When::BasicTypes::M17n, [
|
37
|
+
"locale:[=en:]",
|
38
|
+
"names:[Zoroastrian]",
|
39
|
+
|
40
|
+
# 年の暦注 ----------------------------
|
41
|
+
[When::BasicTypes::M17n,
|
42
|
+
"names:[year]",
|
43
|
+
],
|
44
|
+
|
45
|
+
# 月の暦注 ----------------------------
|
46
|
+
[When::BasicTypes::M17n,
|
47
|
+
"names:[month]",
|
48
|
+
[When::BasicTypes::M17n,
|
49
|
+
"names:[Month]",
|
50
|
+
"[Fravardin= ]",
|
51
|
+
"[Ardibehest= ]",
|
52
|
+
"[Khordad= ]",
|
53
|
+
"[Tir= ]",
|
54
|
+
"[Amardad= ]",
|
55
|
+
"[Shehrevar= ]",
|
56
|
+
"[Meher= ]",
|
57
|
+
"[Avan= ]",
|
58
|
+
"[Adar= ]",
|
59
|
+
"[Dae= ]",
|
60
|
+
"[Bahman= ]",
|
61
|
+
"[Aspandarmad= ]",
|
62
|
+
"[Gatha Days= ]"
|
63
|
+
]
|
64
|
+
],
|
65
|
+
|
66
|
+
# 日の暦注 ----------------------------
|
67
|
+
[When::BasicTypes::M17n,
|
68
|
+
"names:[day]",
|
69
|
+
[When::BasicTypes::M17n,
|
70
|
+
"names:[divinity]",
|
71
|
+
"[Hormazd= ]", # 01
|
72
|
+
"[Bahman= ]", # 02
|
73
|
+
"[Ardibehest= ]", # 03
|
74
|
+
"[Shehrevar= ]", # 04
|
75
|
+
"[Aspandarmad= ]", # 05
|
76
|
+
"[Khordad= ]", # 06
|
77
|
+
"[Amardad= ]", # 07
|
78
|
+
"[Daepadar= ]", # 08
|
79
|
+
"[Adar= ]", # 09
|
80
|
+
"[Avan= ]", # 10
|
81
|
+
"[Khorshed= ]", # 11
|
82
|
+
"[Mohor= ]", # 12
|
83
|
+
"[Tir= ]", # 13
|
84
|
+
"[Gosh= ]", # 14
|
85
|
+
"[Daepmeher= ]", # 15
|
86
|
+
"[Meher= ]", # 16
|
87
|
+
"[Srosh= ]", # 17
|
88
|
+
"[Rashne= ]", # 18
|
89
|
+
"[Fravardin= ]", # 19
|
90
|
+
"[Behram= ]", # 20
|
91
|
+
"[Ram= ]", # 21
|
92
|
+
"[Govad= ]", # 22
|
93
|
+
"[Daepdin= ]", # 23
|
94
|
+
"[Din= ]", # 24
|
95
|
+
"[Ashishvangh= ]", # 25
|
96
|
+
"[Ashtad= ]", # 26
|
97
|
+
"[Asman= ]", # 27
|
98
|
+
"[Zamyad= ]", # 28
|
99
|
+
"[Mahrespand= ]", # 29
|
100
|
+
"[Aneran= ]", # 30
|
101
|
+
"[Ahunavad= ]", # 31
|
102
|
+
"[Ushtavad= ]", # 32
|
103
|
+
"[Spentomad= ]", # 33
|
104
|
+
"[Vohukhshathra= ]", # 34
|
105
|
+
"[Vahishtoist= ]", # 35
|
106
|
+
"[intercalary day=]" # 36
|
107
|
+
]
|
108
|
+
]
|
109
|
+
]]
|
110
|
+
|
111
|
+
# 暦注 - 日の名前
|
112
|
+
#
|
113
|
+
# @param [When::TM::CalDate] date
|
114
|
+
#
|
115
|
+
# @return [String]
|
116
|
+
#
|
117
|
+
def divinity(date)
|
118
|
+
y, m, d = date.cal_date
|
119
|
+
When.CalendarNote('Zoroastrian/Notes::day::divinity::*')[m <= 12 ? d-1 : d+29]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
module CalendarTypes
|
124
|
+
|
125
|
+
#
|
126
|
+
# Zoroastrian Calendar
|
127
|
+
#
|
128
|
+
Zoroastrian = [CyclicTableBased, {
|
129
|
+
'label' => 'Zoroastrian::Zoroastrian',
|
130
|
+
'indices' => [
|
131
|
+
When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
|
132
|
+
When::Coordinates::DefaultDayIndex
|
133
|
+
],
|
134
|
+
'origin_of_MSC' => 1,
|
135
|
+
'origin_of_LSC' => 1952063 + 5 - 365 * 1020,
|
136
|
+
'epoch_in_CE' => 31,
|
137
|
+
'rule_table' => {
|
138
|
+
'T' => {'Rule' =>[365]},
|
139
|
+
365 => {'Length'=>[30]*12+[5]}
|
140
|
+
},
|
141
|
+
'note' => 'Zoroastrian'
|
142
|
+
}]
|
143
|
+
|
144
|
+
#
|
145
|
+
# Qadimi Calendar
|
146
|
+
#
|
147
|
+
Qadimi = [CyclicTableBased, {
|
148
|
+
'label' => 'Zoroastrian::Qadimi',
|
149
|
+
'indices' => [
|
150
|
+
When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
|
151
|
+
When::Coordinates::DefaultDayIndex
|
152
|
+
],
|
153
|
+
'origin_of_MSC' => 1,
|
154
|
+
'origin_of_LSC' => 1952063,
|
155
|
+
'epoch_in_CE' => 31,
|
156
|
+
'rule_table' => {
|
157
|
+
'T' => {'Rule' =>[365]},
|
158
|
+
365 => {'Length'=>[30]*12+[5]}
|
159
|
+
},
|
160
|
+
'note' => 'Zoroastrian'
|
161
|
+
}]
|
162
|
+
|
163
|
+
#
|
164
|
+
# Shahanshahi Calendar
|
165
|
+
#
|
166
|
+
Shahanshahi = [CyclicTableBased, {
|
167
|
+
'label' => 'Zoroastrian::Shahanshahi',
|
168
|
+
'indices' => [
|
169
|
+
When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
|
170
|
+
When::Coordinates::DefaultDayIndex
|
171
|
+
],
|
172
|
+
'origin_of_MSC' => 1,
|
173
|
+
'origin_of_LSC' => 1952063 + 30,
|
174
|
+
'epoch_in_CE' => 31,
|
175
|
+
'rule_table' => {
|
176
|
+
'T' => {'Rule' =>[365]},
|
177
|
+
365 => {'Length'=>[30]*12+[5]}
|
178
|
+
},
|
179
|
+
'note' => 'Zoroastrian'
|
180
|
+
}]
|
181
|
+
|
182
|
+
#
|
183
|
+
# Fasli Calendar
|
184
|
+
#
|
185
|
+
Fasli = [{'Epoch'=>{
|
186
|
+
'ZRE'=>{'origin_of_MSC'=>1737},
|
187
|
+
'YZ' =>{'origin_of_MSC'=>-630}
|
188
|
+
}}, Bahai, {
|
189
|
+
'label' => 'Zoroastrian::Fasli',
|
190
|
+
'indices' => [
|
191
|
+
When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
|
192
|
+
When::Coordinates::DefaultDayIndex
|
193
|
+
],
|
194
|
+
'origin_of_MSC' => -630,
|
195
|
+
'epoch_in_CE' => 0,
|
196
|
+
'rule_table' => {
|
197
|
+
365 => {'Length'=>[30] * 12 + [5]},
|
198
|
+
366 => {'Length'=>[30] * 12 + [6]}
|
199
|
+
},
|
200
|
+
'note' => 'Zoroastrian'
|
201
|
+
}]
|
202
|
+
end
|
203
|
+
end
|