lib/when_exe/region/world.rb in when_exe-0.3.4 vs lib/when_exe/region/world.rb in when_exe-0.3.5
- old
+ new
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
=begin
- Copyright (C) 2011-2013 Takashi SUGA
+ Copyright (C) 2011-2014 Takashi SUGA
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
=end
module When
@@ -10,171 +10,154 @@
class BasicTypes::M17n
WorldTerms = [self, [
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
"locale:[=en:, ja=ja:, alias]",
- "names:[WorldTerms]",
+ "names:[WorldTerms=]",
"[World=en:The_World_Calendar, 世界暦]"
]]
end
class TM::CalendarEra
World = [self, [
"namespace:[en=http://en.wikipedia.org/wiki/]",
- "area:[Common]",
+ "area:[Common=]",
["[BCE=en:BCE_(disambiguation), alias:BeforeCommonEra]0.1.1"],
["[CE=en:Common_Era, alias:CommonEra]1.1.1", "Calendar Epoch", "01-01-01^World"]
]]
end
- module CalendarTypes
+ #
+ # 世界暦の暦週
+ #
+ class CalendarNote::WorldWeek < CalendarNote
- #
- # 世界暦の暦週
- #
- class CalendarNote::WorldWeek < CalendarNote
+ NoteObjects = [When::BasicTypes::M17n, [
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
+ "locale:[=en:, ja=ja:, alias]",
+ "names:[World]",
- NoteObjects = [When::BasicTypes::M17n, [
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
- "locale:[=en:, ja=ja:, alias]",
- "names:[World]",
+ # 年の暦注 ----------------------------
+ [When::BasicTypes::M17n,
+ "names:[year]"
+ ],
- # 年の暦注 ----------------------------
+ # 月の暦注 ----------------------------
+ [When::BasicTypes::M17n,
+ "names:[month]",
[When::BasicTypes::M17n,
- "names:[year]"
- ],
+ "names:[Month]"
+ ]
+ ],
- # 月の暦注 ----------------------------
+ # 日の暦注 ----------------------------
+ [When::BasicTypes::M17n,
+ "names:[day]",
[When::BasicTypes::M17n,
- "names:[month]",
- [When::BasicTypes::M17n,
- "names:[Month]"
- ]
- ],
-
- # 日の暦注 ----------------------------
- [When::BasicTypes::M17n,
- "names:[day]",
- [When::BasicTypes::M17n,
- "names:[Week]",
- "[Sunday, 日曜日]",
- "[Monday, 月曜日]",
- "[Tuesday, 火曜日]",
- "[Wednesday, 水曜日]",
- "[Thursday, 木曜日]",
- "[Friday, 金曜日]",
- "[Saturday, 土曜日]",
- "[Worldsday, 無曜日]"
- ]
+ "names:[Week]",
+ "[Sunday, 日曜日]",
+ "[Monday, 月曜日]",
+ "[Tuesday, 火曜日]",
+ "[Wednesday, 水曜日]",
+ "[Thursday, 木曜日]",
+ "[Friday, 金曜日]",
+ "[Saturday, 土曜日]",
+ "[Worldsday, 無曜日]"
]
- ]]
+ ]
+ ]]
- # イベントの標準的な間隔を返す
- # @private
- def _delta(parameter=nil)
- return When::DurationP1W
- end
+ # イベントの標準的な間隔を返す
+ # @private
+ def _delta(parameter=nil)
+ return When::DurationP1W
+ end
- # @private
- def worldsday_delta(parameter=nil)
- return When::TM::PeriodDuration.new([0,0,7*26+1])
- end
+ # @private
+ def worldsday_delta(parameter=nil)
+ return When::TM::PeriodDuration.new([0,0,7*26+1])
+ end
- # 当日または直前の worldsday の日
- # @param date [When::TM::TemporalPosition]
- # @param parameter [nil] 未使用
- # @return [When::TM::TemporalPosition]
- #
- def worldsday(date, parameter=nil)
- event_name = 'worldsday'
- date = When.Calendar('World').jul_trans(date, {:events=>event_name})
- y,m,d = date.cal_date
- h, m = (m-1).divmod(6)
- return date if m == 5 && d == 31
- dow = [0, 31, 61, 91, 122, 152][m] + d
- dow += 182 if h == 1 && When.Calendar('World')._sum([y]) == 365
- date += When::TM::PeriodDuration.new([0,0,-dow])
- date.events = [event_name]
- date
- end
+ # 当日または直前の worldsday の日
+ # @param date [When::TM::TemporalPosition]
+ # @param parameter [nil] 未使用
+ # @return [When::TM::TemporalPosition]
+ #
+ def worldsday(date, parameter=nil)
+ event_name = 'worldsday'
+ date = When.Calendar('World').jul_trans(date, {:events=>event_name})
+ y,m,d = date.cal_date
+ h, m = (m-1).divmod(6)
+ return date if m == 5 && d == 31
+ dow = [0, 31, 61, 91, 122, 152][m] + d
+ dow += 182 if h == 1 && When.Calendar('World')._sum([y]) == 365
+ date += When::TM::PeriodDuration.new([0,0,-dow])
+ date.events = [event_name]
+ date
+ end
- # 当日または直前の week_day の日
- # @method week_day(date, parameter=nil)
- # @param date [When::TM::TemporalPosition]
- # @param parameter [nil] 未使用
- # @return [When::TM::TemporalPosition]
- # @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
+ # 当日または直前の week_day の日
+ # @method week_day(date, parameter=nil)
+ # @param date [When::TM::TemporalPosition]
+ # @param parameter [nil] 未使用
+ # @return [When::TM::TemporalPosition]
+ # @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
- # @private
- 7.times do |k|
- name = When.CalendarNote('WorldWeek/NoteObjects::day::Week')[k].to_s.downcase
- module_eval %Q{
- def #{name}(date, parameter=nil)
- event_name = 'from_#{name}'
- date = When.Calendar('World').jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
- y,m,d = date.cal_date
- dow = (m % 6 == 0 && d == 31) ? 7-#{k} : ([4,6,2][m % 3] + d - #{k}) % 7
- return date if dow == 0
- dow += 1 if d <= dow && (m == 1 || m == 7 && When.Calendar('World')._sum([y]) == 366)
- date += When::TM::PeriodDuration.new([0,0,-dow])
- date.events = [event_name]
- date
- end
+ # @private
+ 7.times do |k|
+ name = When.CalendarNote('WorldWeek/NoteObjects::day::Week')[k].to_s.downcase
+ module_eval %Q{
+ def #{name}(date, parameter=nil)
+ event_name = 'from_#{name}'
+ date = When.Calendar('World').jul_trans(date, {:events=>[event_name], :precision=>When::DAY})
+ y,m,d = date.cal_date
+ dow = (m % 6 == 0 && d == 31) ? 7-#{k} : ([4,6,2][m % 3] + d - #{k}) % 7
+ return date if dow == 0
+ dow += 1 if d <= dow && (m == 1 || m == 7 && When.Calendar('World')._sum([y]) == 366)
+ date += When::TM::PeriodDuration.new([0,0,-dow])
+ date.events = [event_name]
+ date
+ end
- alias :#{name}_delta :_delta
- }
- end
+ alias :#{name}_delta :_delta
+ }
+ end
- alias :week :sunday
+ alias :week :sunday
- # Enumeratorの生成
- #
- # @param [When::TM::TemporalPosition] first 始点
- # @param [Symbol] direction
- # [ :forward - 昇順 ]
- # [ :reverse - 降順 ]
- # @param [String] event イベント名
- # @param [Integer] count_limit 繰り返し回数(デフォルトは指定なし)
- #
- # @return [When::CalendarTypes::ShireWeek::Enumerator]
- #
- def enum_for(first, direction=:forward, event=nil, count_limit=nil)
- Enumerator.new(self, first, direction, event||@event, count_limit)
- end
- alias :to_enum :enum_for
+ # オブジェクトの正規化
+ # @private
+ def _normalize(args=[], options={})
+ @event ||= 'sunday'
+ super
+ end
- # オブジェクトの正規化
- # @private
- def _normalize(args=[], options={})
- @event ||= 'sunday'
- super
- end
+ #
+ # イベントを取得する Enumerator
+ #
+ class Enumerator < When::CalendarNote::Enumerator
#
- # イベントを取得する Enumerator
+ # 次のイベントを得る
#
- class Enumerator < CalendarNote::Enumerator
-
- #
- # 次のイベントを得る
- #
- # @return [When::TM::TemporalPosition]
- #
- def succ
- value = @current
- if @current==:first
- @first = event_eval(@first) if @delta.sign < 0
- @current = @first
- else
- @current = event_eval(@current + @delta)
- @current = event_eval(@current + @delta * 2) if @current.to_i == value.to_i
- end
- return value
+ # @return [When::TM::TemporalPosition]
+ #
+ def succ
+ value = @current
+ if @current==:first
+ @first = event_eval(@first) if @delta.sign < 0
+ @current = @first
+ else
+ @current = event_eval(@current + @delta)
+ @current = event_eval(@current + @delta * 2) if @current.to_i == value.to_i
end
+ return value
end
end
+ end
+ module CalendarTypes
#
# World calendar based on Gregorian calendar
#
World = [CyclicTableBased, {
'label' => When.Resource('_m:WorldTerms::World'),