when_exe 0.2.100 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/irb.rc +5 -0
- data/bin/locales.rb +2 -2
- data/bin/when.rb +16 -0
- data/bin/when.rb.config +7 -0
- data/lib/when_exe.rb +616 -14
- data/lib/when_exe/basictypes.rb +615 -0
- data/lib/when_exe/calendartypes.rb +1700 -0
- data/lib/when_exe/coordinates.rb +1936 -0
- data/lib/when_exe/core/compatibility.rb +54 -0
- data/lib/when_exe/core/duration.rb +72 -72
- data/lib/when_exe/core/extension.rb +382 -0
- data/lib/when_exe/ephemeris.rb +1845 -0
- data/lib/when_exe/googlecalendar.rb +140 -0
- data/lib/when_exe/icalendar.rb +1587 -0
- data/lib/when_exe/inspect.rb +1237 -0
- data/lib/when_exe/locales/af.rb +90 -0
- data/lib/when_exe/locales/ar.rb +145 -0
- data/lib/when_exe/locales/az.rb +90 -0
- data/lib/when_exe/locales/bg.rb +90 -0
- data/lib/when_exe/locales/bn.rb +94 -0
- data/lib/when_exe/locales/bs.rb +121 -0
- data/lib/when_exe/locales/ca.rb +92 -0
- data/lib/when_exe/locales/cs.rb +107 -0
- data/lib/when_exe/locales/cy.rb +150 -0
- data/lib/when_exe/locales/da.rb +84 -0
- data/lib/when_exe/locales/de.rb +92 -0
- data/lib/when_exe/locales/de_AT.rb +92 -0
- data/lib/when_exe/locales/de_CH.rb +92 -0
- data/lib/when_exe/locales/el.rb +93 -0
- data/lib/when_exe/locales/en.rb +88 -0
- data/lib/when_exe/locales/en_AU.rb +88 -0
- data/lib/when_exe/locales/en_CA.rb +88 -0
- data/lib/when_exe/locales/en_GB.rb +88 -0
- data/lib/when_exe/locales/en_IN.rb +88 -0
- data/lib/when_exe/locales/en_NZ.rb +88 -0
- data/lib/when_exe/locales/eo.rb +89 -0
- data/lib/when_exe/locales/es.rb +84 -0
- data/lib/when_exe/locales/es_419.rb +84 -0
- data/lib/when_exe/locales/es_AR.rb +84 -0
- data/lib/when_exe/locales/es_CL.rb +84 -0
- data/lib/when_exe/locales/es_CO.rb +84 -0
- data/lib/when_exe/locales/es_MX.rb +84 -0
- data/lib/when_exe/locales/es_PE.rb +85 -0
- data/lib/when_exe/locales/es_VE.rb +84 -0
- data/lib/when_exe/locales/et.rb +94 -0
- data/lib/when_exe/locales/eu.rb +95 -0
- data/lib/when_exe/locales/fa.rb +80 -0
- data/lib/when_exe/locales/fi.rb +89 -0
- data/lib/when_exe/locales/fr.rb +88 -0
- data/lib/when_exe/locales/fr_CA.rb +88 -0
- data/lib/when_exe/locales/fr_CH.rb +88 -0
- data/lib/when_exe/locales/gl.rb +81 -0
- data/lib/when_exe/locales/he.rb +84 -0
- data/lib/when_exe/locales/hi.rb +80 -0
- data/lib/when_exe/locales/hi_IN.rb +84 -0
- data/lib/when_exe/locales/hr.rb +128 -0
- data/lib/when_exe/locales/hu.rb +84 -0
- data/lib/when_exe/locales/id.rb +89 -0
- data/lib/when_exe/locales/is.rb +89 -0
- data/lib/when_exe/locales/it.rb +87 -0
- data/lib/when_exe/locales/it_CH.rb +87 -0
- data/lib/when_exe/locales/ja.rb +78 -0
- data/lib/when_exe/locales/kn.rb +86 -0
- data/lib/when_exe/locales/ko.rb +78 -0
- data/lib/when_exe/locales/links.rb +2342 -0
- data/lib/when_exe/locales/lo.rb +123 -0
- data/lib/when_exe/locales/locales.rb +91 -0
- data/lib/when_exe/locales/lt.rb +111 -0
- data/lib/when_exe/locales/lv.rb +118 -0
- data/lib/when_exe/locales/mk.rb +93 -0
- data/lib/when_exe/locales/mn.rb +80 -0
- data/lib/when_exe/locales/nb.rb +81 -0
- data/lib/when_exe/locales/ne.rb +81 -0
- data/lib/when_exe/locales/nl.rb +92 -0
- data/lib/when_exe/locales/nn.rb +73 -0
- data/lib/when_exe/locales/or.rb +84 -0
- data/lib/when_exe/locales/pl.rb +128 -0
- data/lib/when_exe/locales/pt.rb +88 -0
- data/lib/when_exe/locales/pt_BR.rb +88 -0
- data/lib/when_exe/locales/rm.rb +143 -0
- data/lib/when_exe/locales/ro.rb +105 -0
- data/lib/when_exe/locales/ru.rb +128 -0
- data/lib/when_exe/locales/sk.rb +109 -0
- data/lib/when_exe/locales/sl.rb +122 -0
- data/lib/when_exe/locales/sr.rb +122 -0
- data/lib/when_exe/locales/sv.rb +83 -0
- data/lib/when_exe/locales/sw.rb +89 -0
- data/lib/when_exe/locales/th.rb +78 -0
- data/lib/when_exe/locales/tl.rb +99 -0
- data/lib/when_exe/locales/tr.rb +96 -0
- data/lib/when_exe/locales/uk.rb +128 -0
- data/lib/when_exe/locales/uz.rb +128 -0
- data/lib/when_exe/locales/vi.rb +94 -0
- data/lib/when_exe/locales/wo.rb +82 -0
- data/lib/when_exe/locales/zh_CN.rb +77 -0
- data/lib/when_exe/locales/zh_HK.rb +77 -0
- data/lib/when_exe/locales/zh_TW.rb +77 -0
- data/lib/when_exe/mini_application.rb +252 -0
- data/lib/when_exe/parts/enumerator.rb +472 -0
- data/lib/when_exe/parts/geometric_complex.rb +379 -0
- data/lib/when_exe/parts/locale.rb +513 -0
- data/lib/when_exe/parts/method_cash.rb +207 -0
- data/lib/when_exe/parts/resource.rb +806 -0
- data/lib/when_exe/parts/timezone.rb +182 -0
- data/lib/when_exe/region/bahai.rb +145 -0
- data/lib/when_exe/region/balinese.rb +627 -0
- data/lib/when_exe/region/chinese.rb +896 -0
- data/lib/when_exe/region/chinese_calendar.rb +919 -0
- data/lib/when_exe/region/chinese_epoch.rb +1245 -0
- data/lib/when_exe/region/christian.rb +644 -0
- data/lib/when_exe/region/far_east.rb +192 -0
- data/lib/when_exe/region/french.rb +66 -0
- data/lib/when_exe/region/geologicalage.rb +639 -0
- data/lib/when_exe/region/indian.rb +1066 -0
- data/lib/when_exe/region/iranian.rb +66 -0
- data/lib/when_exe/region/islamic.rb +105 -0
- data/lib/when_exe/region/japanese.rb +851 -0
- data/lib/when_exe/region/japanese_notes.rb +964 -0
- data/lib/when_exe/region/japanese_residues.rb +1149 -0
- data/lib/when_exe/region/javanese.rb +228 -0
- data/lib/when_exe/region/jewish.rb +127 -0
- data/lib/when_exe/region/korean.rb +267 -0
- data/lib/when_exe/region/m17n.rb +115 -0
- data/lib/when_exe/region/martian.rb +215 -0
- data/lib/when_exe/region/mayan.rb +122 -0
- data/lib/when_exe/region/moon.rb +333 -0
- data/lib/when_exe/region/nihon_shoki.rb +73 -0
- data/lib/when_exe/region/planets.rb +585 -0
- data/lib/when_exe/region/pope.rb +298 -0
- data/lib/when_exe/region/residue.rb +229 -0
- data/lib/when_exe/region/roman.rb +325 -0
- data/lib/when_exe/region/ryukyu.rb +98 -0
- data/lib/when_exe/region/shire.rb +254 -0
- data/lib/when_exe/region/sun.rb +210 -0
- data/lib/when_exe/region/thai.rb +227 -0
- data/lib/when_exe/region/tibetan.rb +233 -0
- data/lib/when_exe/region/v50.rb +111 -0
- data/lib/when_exe/region/vietnamese.rb +173 -0
- data/lib/when_exe/region/world.rb +197 -0
- data/lib/when_exe/timestandard.rb +547 -0
- data/lib/when_exe/tmduration.rb +330 -330
- data/lib/when_exe/tmobjects.rb +1295 -0
- data/lib/when_exe/tmposition.rb +1955 -0
- data/lib/when_exe/tmreference.rb +1547 -0
- data/lib/when_exe/version.rb +10 -3
- data/link_to_online_documents +4 -0
- data/test/examples/JapanHolidays.ics +456 -0
- data/test/examples/Millennium.ics +17 -0
- data/test/examples/NewYork.ics +61 -0
- data/test/examples/Residue.m17n +135 -0
- data/test/examples/Spatial.m17n +179 -0
- data/test/examples/Terms.m17n +39 -0
- data/test/examples/Test.ics +53 -0
- data/test/examples/USA-DST.ics +61 -0
- data/test/examples/geometric_complex.rb +41 -0
- data/test/examples/sample.xml +14 -0
- data/test/examples/today.rb +61 -0
- data/test/test.rb +54 -19
- data/test/test.rb.config +1 -0
- data/test/test/basictypes.rb +368 -0
- data/test/test/calendartypes.rb +57 -0
- data/test/test/coordinates.rb +380 -0
- data/test/test/ephemeris.rb +127 -0
- data/test/test/googlecalendar.rb +167 -0
- data/test/test/icalendar.rb +848 -0
- data/test/test/inspect.rb +115 -0
- data/test/test/parts.rb +480 -0
- data/test/test/region/chinese.rb +161 -0
- data/test/test/region/french.rb +33 -0
- data/test/test/region/geologicalage.rb +14 -0
- data/test/test/region/indian.rb +55 -0
- data/test/test/region/iran.rb +54 -0
- data/test/test/region/islamic.rb +18 -0
- data/test/test/region/japanese.rb +62 -0
- data/test/test/region/jewish.rb +61 -0
- data/test/test/region/m17n.rb +181 -0
- data/test/test/region/mayan.rb +78 -0
- data/test/test/region/moon.rb +14 -0
- data/test/test/region/planets.rb +14 -0
- data/test/test/region/residue.rb +123 -0
- data/test/test/region/sun.rb +14 -0
- data/test/test/region/thai.rb +94 -0
- data/test/test/region/tibetan.rb +30 -0
- data/test/test/tmobjects.rb +356 -57
- data/test/test/tmposition.rb +237 -0
- data/test/test/tmreference.rb +95 -0
- data/when_exe.gemspec +2 -2
- metadata +187 -7
- data/doc/COPYING +0 -31
- data/doc/COPYING.ja +0 -25
- data/doc/document_url +0 -1
@@ -0,0 +1,182 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2013 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
|
+
#
|
9
|
+
# 本ライブラリのための諸々の部品
|
10
|
+
#
|
11
|
+
module When::Parts
|
12
|
+
|
13
|
+
#
|
14
|
+
# TZInfo::Timezone クラスを本ライブラリから使用するためのラッパークラス
|
15
|
+
#
|
16
|
+
class Timezone
|
17
|
+
|
18
|
+
class << self
|
19
|
+
include Resource::Pool
|
20
|
+
|
21
|
+
# @private
|
22
|
+
alias :_get :[]
|
23
|
+
|
24
|
+
# オブジェクト参照
|
25
|
+
#
|
26
|
+
# @param [String] label 識別名 ( "America/New_York" など)
|
27
|
+
#
|
28
|
+
# @return [When::Parts::Timezone] 時間帯オブジェクト
|
29
|
+
#
|
30
|
+
def [](label)
|
31
|
+
ref = _get(label)
|
32
|
+
return ref if ref
|
33
|
+
self[label] = self.new(label)
|
34
|
+
end
|
35
|
+
alias :get :[]
|
36
|
+
|
37
|
+
# TZInfo でサポートしている Timezone の連想配列
|
38
|
+
#
|
39
|
+
# @return [Hash] { String => TZInfo::CountryTimezone }
|
40
|
+
# [ String - 時間帯ID ]
|
41
|
+
# [ TZInfo::CountryTimezone - 時間帯オブジェクト(proxy for autoload) ]
|
42
|
+
#
|
43
|
+
def tz_info
|
44
|
+
zones = {}
|
45
|
+
TZInfo::Country.all.each do |c|
|
46
|
+
c.zone_info.each do |z|
|
47
|
+
zones[z.identifier] ||= {}
|
48
|
+
zones[z.identifier][c.code] = z
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
list = {}
|
53
|
+
zones.each_pair do |id, hash|
|
54
|
+
if hash.keys.size == 1
|
55
|
+
list[id] = hash[hash.keys[0]]
|
56
|
+
else
|
57
|
+
hash.each_pair do |c, z|
|
58
|
+
list["#{id}(#{c})"] = z
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
list
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# ラップしている TZInfo::Timezone インスタンス
|
67
|
+
# @return [TZInfo::Timezone]
|
68
|
+
attr_reader :timezone
|
69
|
+
|
70
|
+
# 標準時間帯の時計
|
71
|
+
# @return [When::TM::Clock]
|
72
|
+
attr_reader :standard
|
73
|
+
|
74
|
+
# 夏時間帯の時計
|
75
|
+
# @return [When::TM::Clock]
|
76
|
+
attr_reader :daylight
|
77
|
+
|
78
|
+
# 夏時間帯と標準時間帯の時間差
|
79
|
+
# @return [When::TM:IntervalLength]
|
80
|
+
attr_reader :difference
|
81
|
+
|
82
|
+
# ユニーク識別名
|
83
|
+
# @return [String]
|
84
|
+
def label
|
85
|
+
@timezone.identifier
|
86
|
+
end
|
87
|
+
|
88
|
+
# 時分秒のインデクス
|
89
|
+
# @return [Array<When::Coordinates::Index>]
|
90
|
+
attr_reader :indices
|
91
|
+
|
92
|
+
# オブジェクト生成
|
93
|
+
#
|
94
|
+
# @param [String] identifier 識別名 ( "America/New_York" など)
|
95
|
+
#
|
96
|
+
def initialize(identifier)
|
97
|
+
@timezone = TZInfo::Timezone.get(identifier)
|
98
|
+
unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
|
99
|
+
if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
|
100
|
+
TZInfo::TimeOrDateTime.class_eval %Q{
|
101
|
+
alias :_to_datetime :to_datetime
|
102
|
+
::Rational
|
103
|
+
def to_datetime
|
104
|
+
unless @datetime
|
105
|
+
u = usec
|
106
|
+
s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
|
107
|
+
@datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
|
108
|
+
end
|
109
|
+
@datetime
|
110
|
+
end
|
111
|
+
}
|
112
|
+
else
|
113
|
+
TZInfo::TimeOrDateTime.class_eval %Q{
|
114
|
+
alias :_to_datetime :to_datetime
|
115
|
+
def to_datetime
|
116
|
+
@datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
|
117
|
+
end
|
118
|
+
}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
std, dst = _offsets(Time.now.to_i)
|
122
|
+
@standard = When::TM::Clock.new({:zone=>std, :tz_prop=>self})
|
123
|
+
if std == dst
|
124
|
+
@daylight = @standard
|
125
|
+
@difference = 0
|
126
|
+
else
|
127
|
+
@daylight = When::TM::Clock.new({:zone=>dst, :tz_prop=>self})
|
128
|
+
@difference = @standard.universal_time - @daylight.universal_time
|
129
|
+
end
|
130
|
+
@indices = When::Coordinates::DefaultTimeIndex
|
131
|
+
end
|
132
|
+
|
133
|
+
# @private
|
134
|
+
def _daylight(zdate=nil)
|
135
|
+
if block_given?
|
136
|
+
zdate = yield(@standard.dup.tap{|clock| clock.tz_prop = nil})
|
137
|
+
now = zdate.to_time.to_i
|
138
|
+
clocks = _offsets(now).map {|clock| When::TM::Clock.new({:zone=>clock, :tz_prop=>self})}
|
139
|
+
flags = clocks.map {|z| @timezone.period_for_utc(yield(z.dup.tap{|clock| clock.tz_prop = nil}).to_time.to_i).dst? }
|
140
|
+
return nil if flags[0] && !flags[1]
|
141
|
+
(flags[0] || flags[1]) ? clocks[1] : clocks[0]
|
142
|
+
else
|
143
|
+
now = zdate.to_time.to_i
|
144
|
+
period = @timezone.period_for_utc(now)
|
145
|
+
unless period.dst?
|
146
|
+
offset = _offsets(now)
|
147
|
+
period = @timezone.period_for_utc(now-(offset[1]-offset[0]))
|
148
|
+
end
|
149
|
+
When::TM::Clock.new({:zone=>period.utc_total_offset, :tz_prop=>self})
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
# @private
|
154
|
+
def _need_validate
|
155
|
+
true
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def _offsets(time)
|
161
|
+
now = @timezone.period_for_utc(time)
|
162
|
+
past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
|
163
|
+
future = @timezone.period_for_utc(now.utc_end) if now.utc_end
|
164
|
+
std = now.utc_offset
|
165
|
+
dst = now.utc_total_offset
|
166
|
+
[past, future].each do |period|
|
167
|
+
next unless period
|
168
|
+
std = period.utc_offset if std > period.utc_offset
|
169
|
+
dst = period.utc_total_offset if dst < period.utc_total_offset
|
170
|
+
end
|
171
|
+
[std, dst]
|
172
|
+
end
|
173
|
+
|
174
|
+
# その他のメソッド
|
175
|
+
# When::Parts::GeometricComplex で定義されていないメソッドは
|
176
|
+
# 処理を first (type: When::TM::(Temporal)Position) に委譲する
|
177
|
+
#
|
178
|
+
def method_missing(name, *args, &block)
|
179
|
+
timezone.send(name.to_sym, *args, &block)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2013 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
|
+
class BasicTypes::M17n
|
10
|
+
|
11
|
+
BahaiTerms = [self, [
|
12
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/, ar=http://ar.wikipedia.org/wiki/]",
|
13
|
+
"locale:[=en:, ar=ar:, alias=en:]",
|
14
|
+
"names:[BahaiTerms]",
|
15
|
+
"[Bahai=en:Bah%C3%A1%27%C3%AD_calendar, ja:バハーイー暦=ja:%E3%83%90%E3%83%8F%E3%83%BC%E3%82%A4%E3%83%BC%E6%95%99]",
|
16
|
+
|
17
|
+
[self,
|
18
|
+
"names:[Month, 月=ja:%E6%9C%88_(%E6%9A%A6)]",
|
19
|
+
"[Bahá=, بهاء=, Splendour= ]", # 1
|
20
|
+
"[Jalál=, جلال=, Glory= ]", # 2
|
21
|
+
"[Jamál=, جمال=, Beauty= ]", # 3
|
22
|
+
"[‘Aẓamat=, عظمة=, Grandeur= ]", # 4
|
23
|
+
"[Núr=, نور=, Light= ]", # 5
|
24
|
+
"[Raḥmat=, رحمة=, Mercy= ]", # 6
|
25
|
+
"[Kalimát=, كلمات=, Words= ]", # 7
|
26
|
+
"[Kamál=, كمال=, Perfection= ]", # 8
|
27
|
+
"[Asmá’=, اسماء=, Names= ]", # 9
|
28
|
+
"[‘Izzat=, عزة=, Might= ]", # 10
|
29
|
+
"[Mashíyyat=, عزة=, Will= ]", # 11
|
30
|
+
"[‘Ilm=, علم=, Knowledge= ]", # 12
|
31
|
+
"[Qudrat=, قدرة=, Power= ]", # 13
|
32
|
+
"[Qawl=, قول=, Speech= ]", # 14
|
33
|
+
"[Masá’il=, مسائل=, Questions= ]", # 15
|
34
|
+
"[Sharaf=, شرف=, Honour= ]", # 16
|
35
|
+
"[Sulṭán=, سلطان=, Sovereignty=]", # 17
|
36
|
+
"[Mulk=, ملك=, Dominion= ]", # 18
|
37
|
+
"[‘Alá’=, علاء=, Loftiness= ]", # 19
|
38
|
+
"[%0sAyyám-i-Há=en:Ayy%C3%A1m-i-H%C3%A1, %0sايام الهاء=, %0sThe Days of Há=]" # Intercalary days
|
39
|
+
]
|
40
|
+
]]
|
41
|
+
end
|
42
|
+
|
43
|
+
module Coordinates
|
44
|
+
|
45
|
+
# Bahai years
|
46
|
+
Bahai = [When::BasicTypes::M17n, [
|
47
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/, ar=http://ar.wikipedia.org/wiki/]",
|
48
|
+
"locale:[=en:, ar=ar:, alias=en:]",
|
49
|
+
"names:[Bahai]",
|
50
|
+
|
51
|
+
[Residue,
|
52
|
+
"label:[YearName]", "divisor:19", "year:1",
|
53
|
+
[Residue, "label:[Alif=, ألف=, A= ]", "remainder: 0"],
|
54
|
+
[Residue, "label:[Bá=, باء=, B= ]", "remainder: 1"],
|
55
|
+
[Residue, "label:[Ab=, أب=, Father= ]", "remainder: 2"],
|
56
|
+
[Residue, "label:[Dál=, دﺍﻝ=, D= ]", "remainder: 3"],
|
57
|
+
[Residue, "label:[Báb=, باب=, Gate= ]", "remainder: 4"],
|
58
|
+
[Residue, "label:[Váv=, وﺍو=, V= ]", "remainder: 5"],
|
59
|
+
[Residue, "label:[Abad=, أبد=, Eternity= ]", "remainder: 6"],
|
60
|
+
[Residue, "label:[Jád=, جاد=, Generosity= ]", "remainder: 7"],
|
61
|
+
[Residue, "label:[Bahá'=, بهاء=, Splendour= ]", "remainder: 8"],
|
62
|
+
[Residue, "label:[Ḥubb=, حب=, Love= ]", "remainder: 9"],
|
63
|
+
[Residue, "label:[Bahháj=, بهاج=, Delightful= ]", "remainder: 10"],
|
64
|
+
[Residue, "label:[Javáb=, جواب=, Answer= ]", "remainder: 11"],
|
65
|
+
[Residue, "label:[Aḥad=, احد=, Single= ]", "remainder: 12"],
|
66
|
+
[Residue, "label:[Vahháb=, بهاء=, Bountiful= ]", "remainder: 13"],
|
67
|
+
[Residue, "label:[Vidád=, وداد=, Affection= ]", "remainder: 14"],
|
68
|
+
[Residue, "label:[Badí‘=, بدیع=, Beginning= ]", "remainder: 15"],
|
69
|
+
[Residue, "label:[Bahí=, بهي=, Luminous= ]", "remainder: 16"],
|
70
|
+
[Residue, "label:[Abhá=, ابهى=, Most Luminous=]", "remainder: 17"],
|
71
|
+
[Residue, "label:[Váḥid=, واحد=, Unity= ]", "remainder: 18"]
|
72
|
+
]
|
73
|
+
]]
|
74
|
+
end
|
75
|
+
|
76
|
+
module CalendarTypes
|
77
|
+
|
78
|
+
#
|
79
|
+
# Bahá'í Calendar
|
80
|
+
#
|
81
|
+
class Bahai < TableBased
|
82
|
+
|
83
|
+
# 年初の通日 - グレゴリオ暦の3月21日を春分とする
|
84
|
+
#
|
85
|
+
# @param [Array<Numeric>] date ( 年 )
|
86
|
+
#
|
87
|
+
# @return [Numeric] 年初の通日
|
88
|
+
#
|
89
|
+
def gregorian_equinox(date)
|
90
|
+
@engine._coordinates_to_number(+date[0], 2, 20)
|
91
|
+
end
|
92
|
+
|
93
|
+
# 年初の通日 - 太陽の天文学的な位置による春分に基づく
|
94
|
+
#
|
95
|
+
# @param [Array<Numeric>] date ( 年 )
|
96
|
+
#
|
97
|
+
# @return [Numeric] 年初の通日
|
98
|
+
#
|
99
|
+
def ephemeris_equinox(date)
|
100
|
+
equinox_time = @engine.cn_to_time(+date[0])
|
101
|
+
equinox_date = (equinox_time + 0.5 + @engine.long/360.0).floor
|
102
|
+
sun_set_time = @engine.sun_set(equinox_date)
|
103
|
+
(sun_set_time <= equinox_time) ? equinox_date+1 : equinox_date
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
ID = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18=,19'
|
109
|
+
|
110
|
+
#
|
111
|
+
# オブジェクトの正規化
|
112
|
+
#
|
113
|
+
def _normalize(args=[], options={})
|
114
|
+
@label ||= When.Resource('_m:BahaiTerms::Bahai')
|
115
|
+
|
116
|
+
@indices ||= [
|
117
|
+
When::Coordinates::Index.new({:unit =>19}),
|
118
|
+
When::Coordinates::Index.new({:unit =>19}),
|
119
|
+
When::Coordinates::Index.new({:trunk=>When.Resource('_m:BahaiTerms::Month::*'),
|
120
|
+
:branch=>{+1=>When.Resource('_m:BahaiTerms::Month::*')[19]}}),
|
121
|
+
When::Coordinates::Index.new
|
122
|
+
]
|
123
|
+
@index_of_MSC ||= 2
|
124
|
+
@origin_of_MSC ||= -1844 + 19*19
|
125
|
+
@rule_table ||= {
|
126
|
+
365 => {'Length'=>[19] * 18 + [4, 19], 'IDs'=>ID},
|
127
|
+
366 => {'Length'=>[19] * 18 + [5, 19], 'IDs'=>ID}
|
128
|
+
}
|
129
|
+
@note ||= 'BahaiNotes'
|
130
|
+
|
131
|
+
super
|
132
|
+
|
133
|
+
@engine ||= @location ?
|
134
|
+
When::Ephemeris::Formula.new({:formula=>'1S', :location=>@location}) :
|
135
|
+
When.Calendar('Gregorian')
|
136
|
+
|
137
|
+
case @engine
|
138
|
+
when When::Ephemeris::Formula; instance_eval('class << self; alias :_sdn_ :ephemeris_equinox; end')
|
139
|
+
when When::TM::Calendar ; instance_eval('class << self; alias :_sdn_ :gregorian_equinox; end')
|
140
|
+
else ; raise ArgumentError, 'Engine not specified'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,627 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2013 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
|
+
class BasicTypes::M17n
|
10
|
+
|
11
|
+
BalineseTerms = [self, [
|
12
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
13
|
+
"locale:[=en:, ja=ja:, alias]",
|
14
|
+
"names:[BalineseTerms]",
|
15
|
+
"[BalineseLuniSolar=, バリ・サカ暦=]",
|
16
|
+
"[Tenganan=, テンガナン暦=]",
|
17
|
+
|
18
|
+
[self,
|
19
|
+
"names:[IntercalaryMonth=en:Intercalation, 閏月]",
|
20
|
+
"[%s Suklapaksa=, %s 白分= ]",
|
21
|
+
"[%s Krsnapaksa=, %s 黒分= ]",
|
22
|
+
"[Mala %s Suklapaksa=, 閏%s 白分=]",
|
23
|
+
"[Mala %s Krsnapaksa=, 閏%s 黒分=]"
|
24
|
+
],
|
25
|
+
|
26
|
+
[self,
|
27
|
+
"names:[IntercalaryDay=en:Intercalation, 閏日=ja:%E9%96%8F]",
|
28
|
+
"[Double %s=, 欠= ]"
|
29
|
+
],
|
30
|
+
|
31
|
+
[self,
|
32
|
+
"names:[HinduMonth=, ヒンドゥ月=]",
|
33
|
+
"[Kelima=, 5月=]",
|
34
|
+
"[Kenem=, 6月=]",
|
35
|
+
"[Kepitu=, 7月=]",
|
36
|
+
"[Kewulu=, 8月=]",
|
37
|
+
"[Kesanga=, 9月=]",
|
38
|
+
"[Kedasa=, 10月=]",
|
39
|
+
"[Jiyestha=, 11月=]",
|
40
|
+
"[Sadha=, 12月=]",
|
41
|
+
"[Kasa=, 1月=]",
|
42
|
+
"[Karo=, 2月=]",
|
43
|
+
"[Ketiga=, 3月=]",
|
44
|
+
"[Kapat=, 4月=]"
|
45
|
+
],
|
46
|
+
|
47
|
+
[self,
|
48
|
+
"names:[TengananMonth=, テンガナン月=]",
|
49
|
+
"[Kelima=, 5月=]",
|
50
|
+
"[Kanem=, 6月=]",
|
51
|
+
"[Kepitu=, 7月=]",
|
52
|
+
"[Kolu=, 8月=]",
|
53
|
+
"[Kesanga=, 9月=]",
|
54
|
+
"[Kedasa=, 10月=]",
|
55
|
+
"[Desta=, 11月=]",
|
56
|
+
"[Sadda=, 12月=]",
|
57
|
+
"[Kasa=, 1月=]",
|
58
|
+
"[Karo=, 2月=]",
|
59
|
+
"[Ketiga=, 3月=]",
|
60
|
+
"[Kapat=, 4月=]",
|
61
|
+
"[Kapat Sep=, 閏4月=]"
|
62
|
+
]
|
63
|
+
]]
|
64
|
+
end
|
65
|
+
|
66
|
+
module Coordinates
|
67
|
+
|
68
|
+
# Balinese Residues
|
69
|
+
|
70
|
+
#
|
71
|
+
# ウク周期
|
72
|
+
#
|
73
|
+
class Wuku < Residue
|
74
|
+
# 2日週
|
75
|
+
Dwiwara = [ 0, 1, 1, 1, 1, 1, 0,
|
76
|
+
1, 0, 0, 0, 1, 0, 1,
|
77
|
+
0, 1, 0, 1, 0, 1, 0,
|
78
|
+
0, 0, 1, 0, 1, 1, 1,
|
79
|
+
1, 1, 0, 0, 0, 0, 0]
|
80
|
+
# 10日週
|
81
|
+
Dasawara = [ 0, 1, 2, 3, 4, 3, 5,
|
82
|
+
6, 7, 8, 5, 3, 9, 2,
|
83
|
+
9, 4, 9, 1, 5, 1, 8,
|
84
|
+
7, 8, 1, 7, 2, 4, 4,
|
85
|
+
4, 6, 7, 0, 7, 0, 0]
|
86
|
+
# Watek
|
87
|
+
Watek = [ 0, 1, 2, 3, 4, 3, 5,
|
88
|
+
6, 7, 8, 5, 3, 9,10,
|
89
|
+
9, 4, 9, 1, 5, 1,11,
|
90
|
+
7, 8, 1, 7,10, 4, 4,
|
91
|
+
4, 6, 7, 0, 7, 0, 0]
|
92
|
+
|
93
|
+
# 2日週
|
94
|
+
# @return [When::BasicTypes::M17n]
|
95
|
+
def dwiwara
|
96
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Dwiwara'][Dwiwara[@remainder % 35]]
|
97
|
+
end
|
98
|
+
|
99
|
+
# 4日週
|
100
|
+
# @return [When::BasicTypes::M17n]
|
101
|
+
def tjaturwara
|
102
|
+
index = (@remainder + 137) % 210
|
103
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Tjaturwara'][index >= 208 ? 2 : (index-1) % 4]
|
104
|
+
end
|
105
|
+
|
106
|
+
# 8日週
|
107
|
+
# @return [When::BasicTypes::M17n]
|
108
|
+
def astawara
|
109
|
+
index = (@remainder + 137) % 210
|
110
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Astawara'][index >= 208 ? 6 : (index-1) % 8]
|
111
|
+
end
|
112
|
+
|
113
|
+
# 9日週
|
114
|
+
# @return [When::BasicTypes::M17n]
|
115
|
+
def sangawara
|
116
|
+
index = @remainder - 3
|
117
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Sangawara'][index < 0 ? 0 : index % 9]
|
118
|
+
end
|
119
|
+
|
120
|
+
# 10日週
|
121
|
+
# @return [When::BasicTypes::M17n]
|
122
|
+
def dasawara
|
123
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Dasawara'][Dasawara[@remainder % 35]]
|
124
|
+
end
|
125
|
+
|
126
|
+
# Watek
|
127
|
+
# @return [When::BasicTypes::M17n]
|
128
|
+
def watek
|
129
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['Watek'][Watek[@remainder % 35]]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class TM::CalendarEra
|
135
|
+
|
136
|
+
#
|
137
|
+
# バリのサカ暦
|
138
|
+
#
|
139
|
+
Balinese = [self, [
|
140
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
141
|
+
"locale:[=en:, ja=ja:, alias]",
|
142
|
+
"period:[BalineseLuniSolar=, バリ・サカ暦=]",
|
143
|
+
["[BSE=, サカ暦=, alias:Balinese_Saka_Era]1886-07<13", "Calendar Epoch", "1886-07<13^BalineseLuniSolar1965",
|
144
|
+
"1892-07-04^BalineseLuniSolar1971",
|
145
|
+
"1914-07-08^BalineseLuniSolar1993",
|
146
|
+
"1921-06<10^BalineseLuniSolar2000",
|
147
|
+
"1924-07<14^BalineseLuniSolar2003", '+Infinity']
|
148
|
+
]]
|
149
|
+
end
|
150
|
+
|
151
|
+
module CalendarTypes
|
152
|
+
|
153
|
+
#
|
154
|
+
# Balinese Luni-Solar Calendar
|
155
|
+
#
|
156
|
+
class BalineseLuniSolar < HinduLuniSolar
|
157
|
+
|
158
|
+
# protected
|
159
|
+
|
160
|
+
# 朔望日 -> 年・月・日
|
161
|
+
#
|
162
|
+
# @param [Numeric] tithi 朔望日(月の位相 / (CIRCLE/30))
|
163
|
+
#
|
164
|
+
# @return [Array<Numeric>] ( y, m, d )
|
165
|
+
# [ y - 年(Integer) ]
|
166
|
+
# [ m - 月(When::Coordinates::Pair) ]
|
167
|
+
# [ d - 日(Integer) ]
|
168
|
+
#
|
169
|
+
def _tithi_to_coordinates(tithi)
|
170
|
+
@tabular._encode(@tabular._number_to_coordinates(tithi.to_i))
|
171
|
+
end
|
172
|
+
|
173
|
+
# 日時要素の翻訳表の取得
|
174
|
+
#
|
175
|
+
# @overload _ids_(date)
|
176
|
+
# @param [Array<Numeric>] date ( 年 )
|
177
|
+
# @return [Array<When::Coordinates::Pair>] 1年の月の配置の翻訳表
|
178
|
+
#
|
179
|
+
# @overload _ids_(date)
|
180
|
+
# @param [Array<Numeric>] date ( 年 月 )
|
181
|
+
# @return [Array<When::Coordinates::Pair>] 1月の日の配置の翻訳表
|
182
|
+
# @note 月は 0 始まりの通番
|
183
|
+
#
|
184
|
+
def _ids_(date)
|
185
|
+
y, m = date
|
186
|
+
m ? super : @tabular._ids(date)
|
187
|
+
end
|
188
|
+
|
189
|
+
private
|
190
|
+
|
191
|
+
# オブジェクトの正規化
|
192
|
+
#
|
193
|
+
# @tabular = 19年7閏のパターンを与える tithi に対する Calendar
|
194
|
+
# @formula[-1] = 位相の計算に用いる月の Ephemeris
|
195
|
+
#
|
196
|
+
def _normalize(args=[], options={})
|
197
|
+
|
198
|
+
intercalary_month = When.Resource('_m:BalineseTerms::IntercalaryMonth::*')
|
199
|
+
intercalary_day = When.Resource('_m:BalineseTerms::IntercalaryDay::*')
|
200
|
+
month_index = Coordinates::Index.new({:branch=>{ 0 => intercalary_month[0], # 白分
|
201
|
+
+0.5 => intercalary_month[1], # 黒分
|
202
|
+
+1 => intercalary_month[2], # 閏白分
|
203
|
+
+1.5 => intercalary_month[3]}, # 閏黒分
|
204
|
+
:trunk=>When.Resource('_m:BalineseTerms::HinduMonth::*'),
|
205
|
+
:shift=>+8})
|
206
|
+
|
207
|
+
@tabular = CyclicTableBased.new({
|
208
|
+
'indices' => [month_index, Coordinates::Index.new],
|
209
|
+
'rule_table' => @rule_table
|
210
|
+
})
|
211
|
+
|
212
|
+
@formula = [Ephemeris::MeanLunation.new(
|
213
|
+
{
|
214
|
+
'day_epoch' => @day_epoch,
|
215
|
+
'longitude_shift' => '-1/12', # 雨水
|
216
|
+
'long' => 360.0 / 63 * @day_border.to_i,
|
217
|
+
'formula' => '2L',
|
218
|
+
'year_length' => '222075/608',
|
219
|
+
'lunation_length' => '945/32'
|
220
|
+
})]
|
221
|
+
|
222
|
+
@indices = [month_index, Coordinates::Index.new({:branch=>{-2=>intercalary_day[0]}})]
|
223
|
+
|
224
|
+
@note = When.CalendarNote(@note || 'BalineseNote')
|
225
|
+
|
226
|
+
@timezone ||= 0
|
227
|
+
super
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
intercalary_pattern_1 = {# 17 18 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
232
|
+
'T' => {'Rule' =>[ 'N','N','D','N','N','S','N','N','D','N','S','N','N','D','N','N','S','N','S']},
|
233
|
+
'N' => {'Length' =>[15]*24, 'IDs' => '10,10<,11,11<,12,12<,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
234
|
+
'D' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,11=,11>,12,12<,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
235
|
+
'S' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,12,12<,12=,12>,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'}
|
236
|
+
}
|
237
|
+
|
238
|
+
intercalary_pattern_2 = {# 17 18 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
239
|
+
'T' => {'Rule' =>[ 'N','S','N','N','D','N','3','N','N','1','N','N','D','N','N','K','N','2','N']},
|
240
|
+
'N' => {'Length' =>[15]*24, 'IDs' => '10,10<,11,11<,12,12<,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
241
|
+
'K' => {'Length' =>[15]*26, 'IDs' => '10,10<,10=,10>,11,11<,12,12<,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
242
|
+
'D' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,11=,11>,12,12<,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
243
|
+
'S' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,12,12<,12=,12>,1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
244
|
+
'1' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,12,12<,1,1<,1=,1>,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
245
|
+
'2' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,12,12<,1,1<,2,2<,2=,2>,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'},
|
246
|
+
'3' => {'Length' =>[15]*26, 'IDs' => '10,10<,11,11<,12,12<,1,1<,2,2<,3,3<,3=,3>,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<'}
|
247
|
+
}
|
248
|
+
|
249
|
+
BalineseLuniSolar1965 = [BalineseLuniSolar, {
|
250
|
+
'day_epoch' => 1749594, # CE78-02-16
|
251
|
+
'day_border' => 0, # Friday
|
252
|
+
'rule_table' => intercalary_pattern_1
|
253
|
+
}]
|
254
|
+
|
255
|
+
BalineseLuniSolar1971 = [BalineseLuniSolar, {
|
256
|
+
'day_epoch' => 1749594, # CE78-02-16
|
257
|
+
'day_border' => -23, # Wednesday
|
258
|
+
'rule_table' => intercalary_pattern_1
|
259
|
+
}]
|
260
|
+
|
261
|
+
BalineseLuniSolar1993 = [BalineseLuniSolar, {
|
262
|
+
'day_epoch' => 1749594, # CE78-02-16
|
263
|
+
'day_border' => -23, # Wednesday
|
264
|
+
'rule_table' => intercalary_pattern_2
|
265
|
+
}]
|
266
|
+
|
267
|
+
BalineseLuniSolar2000 = [BalineseLuniSolar, {
|
268
|
+
'day_epoch' => 1749593, # CE78-02-15
|
269
|
+
'day_border' => -23, # Tuesday
|
270
|
+
'rule_table' => intercalary_pattern_2
|
271
|
+
}]
|
272
|
+
|
273
|
+
BalineseLuniSolar2003 = [BalineseLuniSolar, {
|
274
|
+
'day_epoch' => 1749593, # CE78-02-15
|
275
|
+
'day_border' => -23, # Tuesday
|
276
|
+
'rule_table' => intercalary_pattern_1
|
277
|
+
}]
|
278
|
+
|
279
|
+
#
|
280
|
+
# Tenganan Calendar
|
281
|
+
#
|
282
|
+
Tenganan = [CyclicTableBased, {
|
283
|
+
'label' => When.Resource('_m:BalineseTerms::Tenganan'),
|
284
|
+
'origin_of_LSC' => 1095 * 1573 - 381,
|
285
|
+
'origin_of_MSC' => 1,
|
286
|
+
'indices' => [
|
287
|
+
When::Coordinates::Index.new({:trunk=>When.Resource('_m:BalineseTerms::TengananMonth::*')}),
|
288
|
+
When::Coordinates::Index.new
|
289
|
+
],
|
290
|
+
'rule_table' => {
|
291
|
+
'T' => {'Rule' =>[360, 379, 356]},
|
292
|
+
360 => {'Length'=>[30] * 12},
|
293
|
+
379 => {'Length'=>[30] * 6 + [26] * 2 + [30] * 4 + [27]},
|
294
|
+
356 => {'Length'=>[30] * 6 + [28] * 2 + [30] * 4 }
|
295
|
+
}
|
296
|
+
}]
|
297
|
+
|
298
|
+
#
|
299
|
+
# バリ暦の暦注
|
300
|
+
#
|
301
|
+
class CalendarNote::BalineseNote < CalendarNote
|
302
|
+
|
303
|
+
NoteObjects = [When::BasicTypes::M17n, [
|
304
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
305
|
+
"locale:[=en:, ja=ja:, alias]",
|
306
|
+
"names:[Balinese]",
|
307
|
+
|
308
|
+
# 年の暦注 ----------------------------
|
309
|
+
[When::BasicTypes::M17n,
|
310
|
+
"names:[year]"
|
311
|
+
],
|
312
|
+
|
313
|
+
# 月の暦注 ----------------------------
|
314
|
+
[When::BasicTypes::M17n,
|
315
|
+
"names:[month]",
|
316
|
+
[When::BasicTypes::M17n,
|
317
|
+
"names:[Month]"
|
318
|
+
]
|
319
|
+
],
|
320
|
+
|
321
|
+
# 日の暦注 ----------------------------
|
322
|
+
[When::BasicTypes::M17n,
|
323
|
+
"names:[day]",
|
324
|
+
|
325
|
+
[When::BasicTypes::M17n,
|
326
|
+
"names:[Hari=, 日名=]",
|
327
|
+
|
328
|
+
[When::BasicTypes::M17n,
|
329
|
+
"names:[Suklapaksa=, 白分=]",
|
330
|
+
"[Lidi= ]",
|
331
|
+
"[Kuda= ]",
|
332
|
+
"[Kidang= ]",
|
333
|
+
"[Macan= ]",
|
334
|
+
"[Kucing= ]",
|
335
|
+
"[Sampi= ]",
|
336
|
+
"[Kerbau= ]",
|
337
|
+
"[Tikus= ]",
|
338
|
+
"[Debu= ]",
|
339
|
+
"[Anjing= ]",
|
340
|
+
"[Naga= ]",
|
341
|
+
"[Kambing=]",
|
342
|
+
"[Mayang= ]",
|
343
|
+
"[Gajah= ]",
|
344
|
+
"[Singa= ]"
|
345
|
+
],
|
346
|
+
|
347
|
+
[When::BasicTypes::M17n,
|
348
|
+
"names:[Krsnapaksa=, 黒分=]",
|
349
|
+
"[Ikan= ]",
|
350
|
+
"[Lilin= ]",
|
351
|
+
"[Ulung= ]",
|
352
|
+
"[Kelapa= ]",
|
353
|
+
"[Banteng=]",
|
354
|
+
"[Hantu= ]",
|
355
|
+
"[Areng= ]",
|
356
|
+
"[Udang= ]",
|
357
|
+
"[Semudra=]",
|
358
|
+
"[Pare= ]",
|
359
|
+
"[Madu= ]",
|
360
|
+
"[Kala= ]",
|
361
|
+
"[Ular= ]",
|
362
|
+
"[Padi= ]",
|
363
|
+
"[Ulat= ]"
|
364
|
+
]
|
365
|
+
],
|
366
|
+
|
367
|
+
[When::BasicTypes::M17n,
|
368
|
+
"names:[Dwiwara=, 2日週=]",
|
369
|
+
"[Menga=]", # 0
|
370
|
+
"[Pepet=]" # 1
|
371
|
+
],
|
372
|
+
|
373
|
+
[When::Coordinates::Residue,
|
374
|
+
"label:[Triwara=, 3日週=]", "divisor:3", "day:2",
|
375
|
+
[When::Coordinates::Residue, "label:[Pasah= ]", "remainder: 0"],
|
376
|
+
[When::Coordinates::Residue, "label:[Gelang Tegeh=]", "remainder: 1"],
|
377
|
+
[When::Coordinates::Residue, "label:[Kajeng= ]", "remainder: 2"]
|
378
|
+
],
|
379
|
+
|
380
|
+
[When::BasicTypes::M17n,
|
381
|
+
"names:[Tjaturwara=, 4日週=]",
|
382
|
+
"[Sri= ]",
|
383
|
+
"[Laba= ]",
|
384
|
+
"[Jaya= ]",
|
385
|
+
"[Menala=]"
|
386
|
+
],
|
387
|
+
|
388
|
+
[When::Coordinates::Residue,
|
389
|
+
"label:[Pantjawara=, 5日週=]", "divisor:5", "day:1",
|
390
|
+
[When::Coordinates::Residue, "label:[Paing= ]", "remainder: 0"],
|
391
|
+
[When::Coordinates::Residue, "label:[Pon= ]", "remainder: 1"],
|
392
|
+
[When::Coordinates::Residue, "label:[Wage= ]", "remainder: 2"],
|
393
|
+
[When::Coordinates::Residue, "label:[Kliwon=]", "remainder: 3"],
|
394
|
+
[When::Coordinates::Residue, "label:[Umanis=]", "remainder: 4"]
|
395
|
+
],
|
396
|
+
|
397
|
+
[When::Coordinates::Residue,
|
398
|
+
"label:[Perinkelan=, 六曜=]", "divisor:6", "day:2",
|
399
|
+
[When::Coordinates::Residue, "label:[Tungleh=]", "remainder: 0"],
|
400
|
+
[When::Coordinates::Residue, "label:[Aryang= ]", "remainder: 1"],
|
401
|
+
[When::Coordinates::Residue, "label:[Urukung=]", "remainder: 2"],
|
402
|
+
[When::Coordinates::Residue, "label:[Paniron=]", "remainder: 3"],
|
403
|
+
[When::Coordinates::Residue, "label:[Was= ]", "remainder: 4"],
|
404
|
+
[When::Coordinates::Residue, "label:[Maulu= ]", "remainder: 5"]
|
405
|
+
],
|
406
|
+
|
407
|
+
[When::Coordinates::Residue,
|
408
|
+
"label:[Sadwara=, 6日週=]", "divisor:6", "day:2",
|
409
|
+
[When::Coordinates::Residue, "label:[Mina= ]", "remainder: 0"],
|
410
|
+
[When::Coordinates::Residue, "label:[Taru= ]", "remainder: 1"],
|
411
|
+
[When::Coordinates::Residue, "label:[Sato= ]", "remainder: 2"],
|
412
|
+
[When::Coordinates::Residue, "label:[Patra=]", "remainder: 3"],
|
413
|
+
[When::Coordinates::Residue, "label:[Wong= ]", "remainder: 4"],
|
414
|
+
[When::Coordinates::Residue, "label:[Paksi=]", "remainder: 5"]
|
415
|
+
],
|
416
|
+
|
417
|
+
[When::Coordinates::Residue,
|
418
|
+
"label:[Septawara=, 7日週=]", "divisor:7", "day:6",
|
419
|
+
[When::Coordinates::Residue, "label:[Reditē= ]", "remainder: 0"],
|
420
|
+
[When::Coordinates::Residue, "label:[Coma= ]", "remainder: 1"],
|
421
|
+
[When::Coordinates::Residue, "label:[Anggara= ]", "remainder: 2"],
|
422
|
+
[When::Coordinates::Residue, "label:[Buda= ]", "remainder: 3"],
|
423
|
+
[When::Coordinates::Residue, "label:[Wraspati= ]", "remainder: 4"],
|
424
|
+
[When::Coordinates::Residue, "label:[Sukra= ]", "remainder: 5"],
|
425
|
+
[When::Coordinates::Residue, "label:[Saniscara=]", "remainder: 6"]
|
426
|
+
],
|
427
|
+
|
428
|
+
[When::BasicTypes::M17n,
|
429
|
+
"names:[Astawara=, 8日週=]",
|
430
|
+
"[Sri= ]",
|
431
|
+
"[Indra= ]",
|
432
|
+
"[Guru= ]",
|
433
|
+
"[Yama= ]",
|
434
|
+
"[Ludra= ]",
|
435
|
+
"[Brahma=]",
|
436
|
+
"[Kala= ]",
|
437
|
+
"[Uma= ]"
|
438
|
+
],
|
439
|
+
|
440
|
+
[When::BasicTypes::M17n,
|
441
|
+
"names:[Sangawara=, 9日週=]",
|
442
|
+
"[Dangu= ]",
|
443
|
+
"[Jangur= ]",
|
444
|
+
"[Gigis= ]",
|
445
|
+
"[Nohan= ]",
|
446
|
+
"[Ogan= ]",
|
447
|
+
"[Erangan=]",
|
448
|
+
"[Urungan=]",
|
449
|
+
"[Tulus= ]",
|
450
|
+
"[Dadi= ]"
|
451
|
+
],
|
452
|
+
|
453
|
+
[When::BasicTypes::M17n,
|
454
|
+
"names:[Dasawara=, 10日週=]",
|
455
|
+
"[Sri ]", # 0
|
456
|
+
"[Pati ]", # 1
|
457
|
+
"[Raja ]", # 2
|
458
|
+
"[Manuh ]", # 3
|
459
|
+
"[Duka ]", # 4
|
460
|
+
"[Manusa ]", # 5
|
461
|
+
"[Raksasa]", # 6
|
462
|
+
"[Suka ]", # 7
|
463
|
+
"[Dewa ]", # 8
|
464
|
+
"[Pandita]" # 9
|
465
|
+
],
|
466
|
+
|
467
|
+
[When::Coordinates::Residue,
|
468
|
+
"label:[Ingkel=]", "divisor:42", "day:20",
|
469
|
+
[When::Coordinates::Residue, "label:[Wong= ]", "remainder: 0"],
|
470
|
+
[When::Coordinates::Residue, "label:[Sato= ]", "remainder: 7"],
|
471
|
+
[When::Coordinates::Residue, "label:[Mina= ]", "remainder: 14"],
|
472
|
+
[When::Coordinates::Residue, "label:[Manuk=]", "remainder: 21"],
|
473
|
+
[When::Coordinates::Residue, "label:[Taru= ]", "remainder: 28"],
|
474
|
+
[When::Coordinates::Residue, "label:[Buku= ]", "remainder: 35"]
|
475
|
+
],
|
476
|
+
|
477
|
+
[When::BasicTypes::M17n,
|
478
|
+
"names:[Watek=]",
|
479
|
+
"[Suku-Gajah= ]", # 0
|
480
|
+
"[Gajah-Lembu= ]", # 1
|
481
|
+
"[Watu-Lembu= ]", # 2
|
482
|
+
"[Wong-Lembu= ]", # 3
|
483
|
+
"[Buta-Uler= ]", # 4
|
484
|
+
"[Gajah-Lintah=]", # 5
|
485
|
+
"[Suku-Uler= ]", # 6
|
486
|
+
"[Watu-Lintah= ]", # 7
|
487
|
+
"[Buta-Lintah= ]", # 8
|
488
|
+
"[Wong-Gajah= ]", # 9
|
489
|
+
"[Watu-Uler= ]", # 10
|
490
|
+
"[Buta-Gajah= ]" # 11
|
491
|
+
],
|
492
|
+
|
493
|
+
[When::Coordinates::Residue,
|
494
|
+
"label:[Lintang=]", "divisor:35", "day:6",
|
495
|
+
[When::Coordinates::Residue, "label:[Gajah= ]", "remainder: 0"],
|
496
|
+
[When::Coordinates::Residue, "label:[Kiriman= ]", "remainder: 1"],
|
497
|
+
[When::Coordinates::Residue, "label:[Jong Sarat= ]", "remainder: 2"],
|
498
|
+
[When::Coordinates::Residue, "label:[Tiwa-Tiwa= ]", "remainder: 3"],
|
499
|
+
[When::Coordinates::Residue, "label:[Sangkatikel= ]", "remainder: 4"],
|
500
|
+
[When::Coordinates::Residue, "label:[Bubu bolong= ]", "remainder: 5"],
|
501
|
+
[When::Coordinates::Residue, "label:[Sungenge= ]", "remainder: 6"],
|
502
|
+
[When::Coordinates::Residue, "label:[Uluku= ]", "remainder: 7"],
|
503
|
+
[When::Coordinates::Residue, "label:[Pedati= ]", "remainder: 8"],
|
504
|
+
[When::Coordinates::Residue, "label:[Kuda= ]", "remainder: 9"],
|
505
|
+
[When::Coordinates::Residue, "label:[Gajah-Mina= ]", "remainder: 10"],
|
506
|
+
[When::Coordinates::Residue, "label:[Bade= ]", "remainder: 11"],
|
507
|
+
[When::Coordinates::Residue, "label:[Maglut= ]", "remainder: 12"],
|
508
|
+
[When::Coordinates::Residue, "label:[Paglangan= ]", "remainder: 13"],
|
509
|
+
[When::Coordinates::Residue, "label:[Kala Sungsang= ]", "remainder: 14"],
|
510
|
+
[When::Coordinates::Residue, "label:[Kukus= ]", "remainder: 15"],
|
511
|
+
[When::Coordinates::Residue, "label:[Asu= ]", "remainder: 16"],
|
512
|
+
[When::Coordinates::Residue, "label:[Kartika= ]", "remainder: 17"],
|
513
|
+
[When::Coordinates::Residue, "label:[Naga= ]", "remainder: 18"],
|
514
|
+
[When::Coordinates::Residue, "label:[Banyakangrem= ]", "remainder: 19"],
|
515
|
+
[When::Coordinates::Residue, "label:[Ru= ]", "remainder: 20"],
|
516
|
+
[When::Coordinates::Residue, "label:[Patrem= ]", "remainder: 21"],
|
517
|
+
[When::Coordinates::Residue, "label:[Lembu= ]", "remainder: 22"],
|
518
|
+
[When::Coordinates::Residue, "label:[Dpat= ]", "remainder: 23"],
|
519
|
+
[When::Coordinates::Residue, "label:[Tangis= ]", "remainder: 24"],
|
520
|
+
[When::Coordinates::Residue, "label:[Salar Ukur= ]", "remainder: 25"],
|
521
|
+
[When::Coordinates::Residue, "label:[Prahu Pgat= ]", "remainder: 26"],
|
522
|
+
[When::Coordinates::Residue, "label:[Pwuhu atarung= ]", "remainder: 27"],
|
523
|
+
[When::Coordinates::Residue, "label:[Lawean= ]", "remainder: 28"],
|
524
|
+
[When::Coordinates::Residue, "label:[Kelapa= ]", "remainder: 29"],
|
525
|
+
[When::Coordinates::Residue, "label:[Yuyu= ]", "remainder: 30"],
|
526
|
+
[When::Coordinates::Residue, "label:[Lumbung= ]", "remainder: 31"],
|
527
|
+
[When::Coordinates::Residue, "label:[Kumba= ]", "remainder: 32"],
|
528
|
+
[When::Coordinates::Residue, "label:[Udang= ]", "remainder: 33"],
|
529
|
+
[When::Coordinates::Residue, "label:[Bgoong= ]", "remainder: 34"]
|
530
|
+
],
|
531
|
+
|
532
|
+
[When::Coordinates::Wuku,
|
533
|
+
"label:[Wuku=]", "divisor:210", "day:146",
|
534
|
+
[When::Coordinates::Wuku, "label:[Sinta= ]", "remainder: 0"],
|
535
|
+
[When::Coordinates::Wuku, "label:[Landep= ]", "remainder: 7"],
|
536
|
+
[When::Coordinates::Wuku, "label:[Ukir= ]", "remainder: 14"],
|
537
|
+
[When::Coordinates::Wuku, "label:[Kurantir= ]", "remainder: 21"],
|
538
|
+
[When::Coordinates::Wuku, "label:[Tulu= ]", "remainder: 28"],
|
539
|
+
[When::Coordinates::Wuku, "label:[Gumbreg= ]", "remainder: 35"],
|
540
|
+
[When::Coordinates::Wuku, "label:[Wariga= ]", "remainder: 42"],
|
541
|
+
[When::Coordinates::Wuku, "label:[Warigadian= ]", "remainder: 49"],
|
542
|
+
[When::Coordinates::Wuku, "label:[Julungwangi= ]", "remainder: 56"],
|
543
|
+
[When::Coordinates::Wuku, "label:[Sungsang= ]", "remainder: 63"],
|
544
|
+
[When::Coordinates::Wuku, "label:[Dunggulan= ]", "remainder: 70"],
|
545
|
+
[When::Coordinates::Wuku, "label:[Kuningan= ]", "remainder: 77"],
|
546
|
+
[When::Coordinates::Wuku, "label:[Langkir= ]", "remainder: 84"],
|
547
|
+
[When::Coordinates::Wuku, "label:[Medangsiya= ]", "remainder: 91"],
|
548
|
+
[When::Coordinates::Wuku, "label:[Pujut= ]", "remainder: 98"],
|
549
|
+
[When::Coordinates::Wuku, "label:[Pahang= ]", "remainder:105"],
|
550
|
+
[When::Coordinates::Wuku, "label:[Krulut= ]", "remainder:112"],
|
551
|
+
[When::Coordinates::Wuku, "label:[Merakih= ]", "remainder:119"],
|
552
|
+
[When::Coordinates::Wuku, "label:[Tambir= ]", "remainder:126"],
|
553
|
+
[When::Coordinates::Wuku, "label:[Medangkungan=]", "remainder:133"],
|
554
|
+
[When::Coordinates::Wuku, "label:[Matal= ]", "remainder:140"],
|
555
|
+
[When::Coordinates::Wuku, "label:[Uye= ]", "remainder:147"],
|
556
|
+
[When::Coordinates::Wuku, "label:[Menail= ]", "remainder:154"],
|
557
|
+
[When::Coordinates::Wuku, "label:[Prangbakat= ]", "remainder:161"],
|
558
|
+
[When::Coordinates::Wuku, "label:[Bala= ]", "remainder:168"],
|
559
|
+
[When::Coordinates::Wuku, "label:[Ugu= ]", "remainder:175"],
|
560
|
+
[When::Coordinates::Wuku, "label:[Wayang= ]", "remainder:182"],
|
561
|
+
[When::Coordinates::Wuku, "label:[Kelawu= ]", "remainder:189"],
|
562
|
+
[When::Coordinates::Wuku, "label:[Dukut= ]", "remainder:196"],
|
563
|
+
[When::Coordinates::Wuku, "label:[Watugunung= ]", "remainder:203"]
|
564
|
+
]
|
565
|
+
]
|
566
|
+
]]
|
567
|
+
|
568
|
+
#
|
569
|
+
# When::Coordinates::Residue へ処理を委譲する暦注
|
570
|
+
#
|
571
|
+
# @private
|
572
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day::*'].each do |cood|
|
573
|
+
case cood
|
574
|
+
when Coordinates::Residue
|
575
|
+
module_eval %Q{
|
576
|
+
def #{cood.label.to_s.downcase}(date, parameter=nil)
|
577
|
+
When.CalendarNote('BalineseNote/NoteObjects')['day']['#{cood.label.to_s}'] % date
|
578
|
+
end
|
579
|
+
}
|
580
|
+
when BasicTypes::M17n
|
581
|
+
module_eval %Q{
|
582
|
+
def #{cood.to_s.downcase}(date, parameter=nil)
|
583
|
+
(When.CalendarNote('BalineseNote/NoteObjects')['day']['Wuku'] % date).#{cood.to_s.downcase}
|
584
|
+
end
|
585
|
+
}
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
#
|
590
|
+
# 任意の暦をバリ暦日に変換
|
591
|
+
#
|
592
|
+
# @private
|
593
|
+
def _to_date_for_note(date)
|
594
|
+
return date if date.frame.kind_of?(When::CalendarTypes::BalineseLuniSolar)
|
595
|
+
(date ^ When.era(:period=>'BalineseLuniSolar')).each do |list|
|
596
|
+
return list[0] if list[0]
|
597
|
+
end
|
598
|
+
nil
|
599
|
+
end
|
600
|
+
|
601
|
+
# バリ暦日の「日名」
|
602
|
+
#
|
603
|
+
# @param [When::TM::TemporalPosition] date 「日名」を求める日付
|
604
|
+
# @param [nil] parameter 未使用
|
605
|
+
#
|
606
|
+
# @return [When::BasicTypes::M17n] 「日名」(欠日の場合は2日分を'/'で連結)
|
607
|
+
#
|
608
|
+
def hari(date, parameter=nil)
|
609
|
+
y, m, d = _to_date_for_note(date).cal_date
|
610
|
+
thiti = [d * 1 - 1]
|
611
|
+
thiti[0] += 15 unless [0,1,nil].include?(m * 0)
|
612
|
+
thiti << (thiti[0] + 1) % 30 if d * 0 == -2
|
613
|
+
table = When.CalendarNote('BalineseNote/NoteObjects')['day']['Hari']
|
614
|
+
thiti.map {|t| table[t / 15][t % 15]}.join('/')
|
615
|
+
end
|
616
|
+
|
617
|
+
private
|
618
|
+
|
619
|
+
# オブジェクトの正規化
|
620
|
+
def _normalize(args=[], options={})
|
621
|
+
@event = 'hari'
|
622
|
+
@prime ||= [%w(Month), %w(Pantjawara Perinkelan Septawara Wuku)]
|
623
|
+
super
|
624
|
+
end
|
625
|
+
end
|
626
|
+
end
|
627
|
+
end
|