when_exe 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -33
  3. data/bin/locales.rb +1 -1
  4. data/bin/make_ttl.rb.config +1 -1
  5. data/lib/when_exe.rb +27 -16
  6. data/lib/when_exe/basictypes.rb +772 -771
  7. data/lib/when_exe/calendartypes.rb +1485 -1453
  8. data/lib/when_exe/coordinates.rb +5 -0
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +147 -116
  11. data/lib/when_exe/core/extension.rb +499 -497
  12. data/lib/when_exe/ephemeris.rb +1952 -1951
  13. data/lib/when_exe/ephemeris/eclipse.rb +5 -4
  14. data/lib/when_exe/ephemeris/notes.rb +457 -421
  15. data/lib/when_exe/ephemeris/planets.rb +585 -585
  16. data/lib/when_exe/ephemeris/sun.rb +214 -214
  17. data/lib/when_exe/google_api.rb +153 -0
  18. data/lib/when_exe/icalendar.rb +1640 -1632
  19. data/lib/when_exe/inspect.rb +42 -20
  20. data/lib/when_exe/linkeddata.rb +28 -7
  21. data/lib/when_exe/locales/autoload.rb +2 -1
  22. data/lib/when_exe/locales/locale.rb +35 -15
  23. data/lib/when_exe/locales/zh.rb +77 -0
  24. data/lib/when_exe/mini_application.rb +3 -1
  25. data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
  26. data/lib/when_exe/parts/enumerator.rb +498 -486
  27. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  28. data/lib/when_exe/parts/timezone.rb +246 -241
  29. data/lib/when_exe/region/armenian.rb +55 -56
  30. data/lib/when_exe/region/babylonian.rb +406 -405
  31. data/lib/when_exe/region/bahai.rb +107 -106
  32. data/lib/when_exe/region/balinese.rb +624 -622
  33. data/lib/when_exe/region/chinese.rb +1071 -1026
  34. data/lib/when_exe/region/chinese/epochs.rb +28 -28
  35. data/lib/when_exe/region/chinese/notes.rb +219 -0
  36. data/lib/when_exe/region/chinese/twins.rb +803 -803
  37. data/lib/when_exe/region/christian.rb +21 -15
  38. data/lib/when_exe/region/coptic.rb +107 -106
  39. data/lib/when_exe/region/discordian.rb +218 -218
  40. data/lib/when_exe/region/east_asian.rb +1 -1
  41. data/lib/when_exe/region/french.rb +126 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +60 -58
  44. data/lib/when_exe/region/hanke_henry.rb +2 -2
  45. data/lib/when_exe/region/indian.rb +1225 -1222
  46. data/lib/when_exe/region/international_fixed.rb +96 -97
  47. data/lib/when_exe/region/iranian.rb +206 -203
  48. data/lib/when_exe/region/islamic.rb +102 -102
  49. data/lib/when_exe/region/japanese.rb +126 -71
  50. data/lib/when_exe/region/japanese/epochs.rb +426 -426
  51. data/lib/when_exe/region/japanese/notes.rb +101 -81
  52. data/lib/when_exe/region/japanese/residues.rb +1345 -1311
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -112
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +130 -131
  57. data/lib/when_exe/region/m17n.rb +114 -114
  58. data/lib/when_exe/region/martian.rb +258 -258
  59. data/lib/when_exe/region/mayan.rb +11 -8
  60. data/lib/when_exe/region/pax.rb +4 -5
  61. data/lib/when_exe/region/pope.rb +1 -1
  62. data/lib/when_exe/region/positivist.rb +100 -100
  63. data/lib/when_exe/region/residue.rb +162 -162
  64. data/lib/when_exe/region/roman.rb +333 -333
  65. data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
  66. data/lib/when_exe/region/shire.rb +222 -223
  67. data/lib/when_exe/region/symmetry.rb +50 -50
  68. data/lib/when_exe/region/thai.rb +336 -336
  69. data/lib/when_exe/region/tibetan.rb +315 -316
  70. data/lib/when_exe/region/tranquility.rb +207 -208
  71. data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
  72. data/lib/when_exe/region/vietnamese.rb +449 -440
  73. data/lib/when_exe/region/weekdate.rb +80 -80
  74. data/lib/when_exe/region/world.rb +170 -171
  75. data/lib/when_exe/region/world_season.rb +89 -89
  76. data/lib/when_exe/region/yerm.rb +3 -3
  77. data/lib/when_exe/region/zoroastrian.rb +205 -205
  78. data/lib/when_exe/timestandard.rb +708 -707
  79. data/lib/when_exe/tmduration.rb +338 -338
  80. data/lib/when_exe/tmobjects.rb +1356 -1356
  81. data/lib/when_exe/tmposition.rb +66 -31
  82. data/lib/when_exe/version.rb +16 -2
  83. data/test/examples/Residue.m17n +83 -83
  84. data/test/examples/Terms.m17n +2 -2
  85. data/test/test.rb +2 -2
  86. data/test/test/google_api.rb +65 -0
  87. data/test/test/linkeddata.rb +1 -1
  88. data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
  89. data/test/test/region/indian.rb +90 -85
  90. data/test/test/region/m17n.rb +7 -7
  91. data/test/test/region/mayan.rb +195 -195
  92. data/test/test/region/residue.rb +153 -153
  93. data/test/test/tmposition.rb +11 -1
  94. data/when_exe.gemspec +2 -2
  95. metadata +95 -8
  96. data/test/test.rb.config +0 -1
@@ -1,80 +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
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014-2015 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ module When
9
+
10
+ class BasicTypes::M17n
11
+
12
+ WeekDate = [self, [
13
+ "locale:[=en:, ja, zh]",
14
+ "names:[WeekDate=en:ISO_week_date, 暦週=, 曆週=]",
15
+ [self, "names:[week, 週, 星期]"] + (1...100).to_a.map {|m| "[Week #{m}=, ja:第#{m}週=, zh:第#{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
@@ -1,171 +1,170 @@
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
- World = [self, [
13
- "locale:[=en:, ja=ja:, alias]",
14
- "names:[World=]",
15
- "[World=en:The_World_Calendar, 世界暦]"
16
- ]]
17
- end
18
-
19
- #
20
- # 世界暦の暦週
21
- #
22
- class CalendarNote::WorldWeek < CalendarNote::Week
23
-
24
- #
25
- # 暦注要素の定義
26
- #
27
- Notes = [When::BasicTypes::M17n, [
28
- "locale:[=en:, ja=ja:, alias]",
29
- "names:[World]",
30
-
31
- # 年の暦注 ----------------------------
32
- [When::BasicTypes::M17n,
33
- "names:[year]"
34
- ],
35
-
36
- # 月の暦注 ----------------------------
37
- [When::BasicTypes::M17n,
38
- "names:[month]",
39
- [When::BasicTypes::M17n,
40
- "names:[Month]"
41
- ]
42
- ],
43
-
44
- # 日の暦注 ----------------------------
45
- [When::BasicTypes::M17n,
46
- "names:[day]",
47
- [When::BasicTypes::M17n,
48
- "names:[Week]",
49
- [DayOfWeek, "label:[Sunday, 日曜日, /date/day_names/0]", {'delta'=>7}],
50
- [DayOfWeek, "label:[Monday, 月曜日, /date/day_names/1]", {'delta'=>7}],
51
- [DayOfWeek, "label:[Tuesday, 火曜日, /date/day_names/2]", {'delta'=>7}],
52
- [DayOfWeek, "label:[Wednesday, 水曜日, /date/day_names/3]", {'delta'=>7}],
53
- [DayOfWeek, "label:[Thursday, 木曜日, /date/day_names/4]", {'delta'=>7}],
54
- [DayOfWeek, "label:[Friday, 金曜日, /date/day_names/5]", {'delta'=>7}],
55
- [DayOfWeek, "label:[Saturday, 土曜日, /date/day_names/6]", {'delta'=>7}],
56
- [DayOfWeek, "label:[Worldsday=en:The_World_Calendar#Features, 週外日=]", {'delta'=>366}],
57
- ],
58
-
59
- "[Common_Week=]"
60
- ]
61
- ]]
62
-
63
- # @private
64
- FirstDayOfWeek = [0, 3, 5] * 4
65
-
66
- # @private
67
- ExtraDayInYear = {
68
- [ 6, 31] => 7,
69
- [12, 31] => 7
70
- }
71
-
72
- # @private
73
- WeekLength = {
74
- [ 5, 31] => 8,
75
- [ 6, 31] => 8,
76
- [11, 31] => 8,
77
- [12, 31] => 8
78
- }
79
-
80
- # 当日または直前の worldsday の日
81
- # @param [When::TM::TemporalPosition] date
82
- # @param [nil] parameter 未使用
83
- # @return [When::TM::TemporalPosition]
84
- #
85
- def worldsday(date, parameter=nil)
86
- event_name = 'worldsday'
87
- date = When.Calendar('World').jul_trans(date, {:events=>event_name})
88
- y,m,d = date.cal_date
89
- h, m = (m-1).divmod(6)
90
- return date if m == 5 && d == 31
91
- dow = [0, 31, 61, 91, 122, 152][m] + d
92
- dow += 182 if h == 1 && When.Calendar('World')._sum([y]) == 365
93
- date += When::TM::PeriodDuration.new([0,0,-dow])
94
- date.events = [event_name]
95
- date
96
- end
97
-
98
- # 当日または直前の week_day の日
99
- # @method week_day(date, parameter=nil)
100
- # @param [When::TM::TemporalPosition] date
101
- # @param [nil] parameter 未使用
102
- # @return [When::TM::TemporalPosition]
103
- # @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
104
-
105
- # @private
106
- 7.times do |k|
107
- name = When.CalendarNote('WorldWeek/Notes::day::Week')[k].to_s.downcase
108
- module_eval %Q{
109
- def #{name}(date, parameter=nil)
110
- event_name = 'from_#{name}'
111
- date = When.Calendar('World').jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
112
- y,m,d = date.cal_date
113
- dow = (m % 6 == 0 && d == 31) ? 7-#{k} : ([4,6,2][m % 3] + d - #{k}) % 7
114
- return date if dow == 0
115
- dow += 1 if d <= dow && (m == 1 || m == 7 && When.Calendar('World')._sum([y]) == 366)
116
- date += When::TM::PeriodDuration.new([0,0,-dow])
117
- date.events = [event_name]
118
- date
119
- end
120
- }
121
- end
122
-
123
- #
124
- # この日は何曜?
125
- #
126
- # @param [When::TM::TemporalPosition] date
127
- # @param [When::TM::CalDate] base
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, (base||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
149
-
150
- # オブジェクトの正規化
151
- # @private
152
- def _normalize(args=[], options={})
153
- @event ||= 'sunday'
154
- super
155
- end
156
- end
157
-
158
- module CalendarTypes
159
- #
160
- # World calendar based on Gregorian calendar
161
- #
162
- World = [SolarYearTableBased, {
163
- 'label' => 'World::World',
164
- 'rule_table' => {
165
- 365 => {'Length'=>[31,30,30]*3 + [31,30,31]},
166
- 366 => {'Length'=>[31,30,30,31,30,31] *2}
167
- },
168
- 'note' => 'WorldWeek'
169
- }]
170
- end
171
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2015 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ module When
9
+
10
+ class BasicTypes::M17n
11
+
12
+ World = [self, [
13
+ "locale:[=en:, ja=ja:, zh=zh:, alias]",
14
+ "names:[World=en:The_World_Calendar, 世界暦, 世界曆]"
15
+ ]]
16
+ end
17
+
18
+ #
19
+ # 世界暦の暦週
20
+ #
21
+ class CalendarNote::WorldWeek < CalendarNote::Week
22
+
23
+ #
24
+ # 暦注要素の定義
25
+ #
26
+ Notes = [When::BasicTypes::M17n, [
27
+ "locale:[=en:, ja=ja:, alias]",
28
+ "names:[World, 世界暦]",
29
+
30
+ # 年の暦注 ----------------------------
31
+ [When::BasicTypes::M17n,
32
+ "names:[note for year=, 年の暦注=, *year]"
33
+ ],
34
+
35
+ # 月の暦注 ----------------------------
36
+ [When::BasicTypes::M17n,
37
+ "names:[note for month=, 月の暦注=, *month]",
38
+ [When::BasicTypes::M17n,
39
+ "names:[month name=en:Month, 月の名前=ja:%%<月_(暦)>, zh:該月的名稱=, *alias:Month=]"
40
+ ]
41
+ ],
42
+
43
+ # 日の暦注 ----------------------------
44
+ [When::BasicTypes::M17n,
45
+ "names:[note for day=, 日の暦注=, *day]",
46
+ [When::BasicTypes::M17n,
47
+ "names:[Week, 週, zh:星期]",
48
+ [DayOfWeek, "label:[Sunday, 日曜日, /date/day_names/0]", {'delta'=>7}],
49
+ [DayOfWeek, "label:[Monday, 月曜日, /date/day_names/1]", {'delta'=>7}],
50
+ [DayOfWeek, "label:[Tuesday, 火曜日, /date/day_names/2]", {'delta'=>7}],
51
+ [DayOfWeek, "label:[Wednesday, 水曜日, /date/day_names/3]", {'delta'=>7}],
52
+ [DayOfWeek, "label:[Thursday, 木曜日, /date/day_names/4]", {'delta'=>7}],
53
+ [DayOfWeek, "label:[Friday, 金曜日, /date/day_names/5]", {'delta'=>7}],
54
+ [DayOfWeek, "label:[Saturday, 土曜日, /date/day_names/6]", {'delta'=>7}],
55
+ [DayOfWeek, "label:[Worldsday=en:The_World_Calendar#Features, 週外日=]", {'delta'=>366}],
56
+ ],
57
+
58
+ "[Common_Week=]"
59
+ ]
60
+ ]]
61
+
62
+ # @private
63
+ FirstDayOfWeek = [0, 3, 5] * 4
64
+
65
+ # @private
66
+ ExtraDayInYear = {
67
+ [ 6, 31] => 7,
68
+ [12, 31] => 7
69
+ }
70
+
71
+ # @private
72
+ WeekLength = {
73
+ [ 5, 31] => 8,
74
+ [ 6, 31] => 8,
75
+ [11, 31] => 8,
76
+ [12, 31] => 8
77
+ }
78
+
79
+ # 当日または直前の worldsday の日
80
+ # @param [When::TM::TemporalPosition] date
81
+ # @param [nil] parameter 未使用
82
+ # @return [When::TM::TemporalPosition]
83
+ #
84
+ def worldsday(date, parameter=nil)
85
+ event_name = 'worldsday'
86
+ date = When.Calendar('World').jul_trans(date, {:events=>event_name})
87
+ y,m,d = date.cal_date
88
+ h, m = (m-1).divmod(6)
89
+ return date if m == 5 && d == 31
90
+ dow = [0, 31, 61, 91, 122, 152][m] + d
91
+ dow += 182 if h == 1 && When.Calendar('World')._sum([y]) == 365
92
+ date += When::TM::PeriodDuration.new([0,0,-dow])
93
+ date.events = [event_name]
94
+ date
95
+ end
96
+
97
+ # 当日または直前の week_day の日
98
+ # @method week_day(date, parameter=nil)
99
+ # @param [When::TM::TemporalPosition] date
100
+ # @param [nil] parameter 未使用
101
+ # @return [When::TM::TemporalPosition]
102
+ # @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
103
+
104
+ # @private
105
+ 7.times do |k|
106
+ name = When.CalendarNote('WorldWeek/Notes::day::Week')[k].to_s.downcase
107
+ module_eval %Q{
108
+ def #{name}(date, parameter=nil)
109
+ event_name = 'from_#{name}'
110
+ date = When.Calendar('World').jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
111
+ y,m,d = date.cal_date
112
+ dow = (m % 6 == 0 && d == 31) ? 7-#{k} : ([4,6,2][m % 3] + d - #{k}) % 7
113
+ return date if dow == 0
114
+ dow += 1 if d <= dow && (m == 1 || m == 7 && When.Calendar('World')._sum([y]) == 366)
115
+ date += When::TM::PeriodDuration.new([0,0,-dow])
116
+ date.events = [event_name]
117
+ date
118
+ end
119
+ }
120
+ end
121
+
122
+ #
123
+ # この日は何曜?
124
+ #
125
+ # @param [When::TM::TemporalPosition] date
126
+ # @param [When::TM::CalDate] base
127
+ #
128
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
129
+ #
130
+ def week(date, base=nil)
131
+ date = _to_date_for_note(date)
132
+ y, m, d = date.cal_date
133
+ index = ExtraDayInYear[[m,d]] || (FirstDayOfWeek[m-1] + d - 1) % 7
134
+ length = WeekLength[[m, (base||date).length(When::MONTH)]] || 7
135
+ {:value=>@days_of_week[index], :position=>[index, length]}
136
+ end
137
+
138
+ #
139
+ # 暦日を当該暦注計算用クラスに変換
140
+ #
141
+ # @private
142
+ def _to_date_for_note(date)
143
+ date = When::World ^ date unless date.frame.equal?(When::World)
144
+ date
145
+ end
146
+
147
+ private
148
+
149
+ # オブジェクトの正規化
150
+ # @private
151
+ def _normalize(args=[], options={})
152
+ @event ||= 'sunday'
153
+ super
154
+ end
155
+ end
156
+
157
+ module CalendarTypes
158
+ #
159
+ # World calendar based on Gregorian calendar
160
+ #
161
+ World = [SolarYearTableBased, {
162
+ 'label' => 'World',
163
+ 'rule_table' => {
164
+ 365 => {'Length'=>[31,30,30]*3 + [31,30,31]},
165
+ 366 => {'Length'=>[31,30,30,31,30,31] *2}
166
+ },
167
+ 'note' => 'WorldWeek'
168
+ }]
169
+ end
170
+ end