when_exe 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|