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.
Files changed (193) hide show
  1. data/LICENSE.ja.txt +25 -25
  2. data/LICENSE.txt +31 -31
  3. data/bin/irb.rc +5 -0
  4. data/bin/locales.rb +2 -2
  5. data/bin/when.rb +16 -0
  6. data/bin/when.rb.config +7 -0
  7. data/lib/when_exe.rb +616 -14
  8. data/lib/when_exe/basictypes.rb +615 -0
  9. data/lib/when_exe/calendartypes.rb +1700 -0
  10. data/lib/when_exe/coordinates.rb +1936 -0
  11. data/lib/when_exe/core/compatibility.rb +54 -0
  12. data/lib/when_exe/core/duration.rb +72 -72
  13. data/lib/when_exe/core/extension.rb +382 -0
  14. data/lib/when_exe/ephemeris.rb +1845 -0
  15. data/lib/when_exe/googlecalendar.rb +140 -0
  16. data/lib/when_exe/icalendar.rb +1587 -0
  17. data/lib/when_exe/inspect.rb +1237 -0
  18. data/lib/when_exe/locales/af.rb +90 -0
  19. data/lib/when_exe/locales/ar.rb +145 -0
  20. data/lib/when_exe/locales/az.rb +90 -0
  21. data/lib/when_exe/locales/bg.rb +90 -0
  22. data/lib/when_exe/locales/bn.rb +94 -0
  23. data/lib/when_exe/locales/bs.rb +121 -0
  24. data/lib/when_exe/locales/ca.rb +92 -0
  25. data/lib/when_exe/locales/cs.rb +107 -0
  26. data/lib/when_exe/locales/cy.rb +150 -0
  27. data/lib/when_exe/locales/da.rb +84 -0
  28. data/lib/when_exe/locales/de.rb +92 -0
  29. data/lib/when_exe/locales/de_AT.rb +92 -0
  30. data/lib/when_exe/locales/de_CH.rb +92 -0
  31. data/lib/when_exe/locales/el.rb +93 -0
  32. data/lib/when_exe/locales/en.rb +88 -0
  33. data/lib/when_exe/locales/en_AU.rb +88 -0
  34. data/lib/when_exe/locales/en_CA.rb +88 -0
  35. data/lib/when_exe/locales/en_GB.rb +88 -0
  36. data/lib/when_exe/locales/en_IN.rb +88 -0
  37. data/lib/when_exe/locales/en_NZ.rb +88 -0
  38. data/lib/when_exe/locales/eo.rb +89 -0
  39. data/lib/when_exe/locales/es.rb +84 -0
  40. data/lib/when_exe/locales/es_419.rb +84 -0
  41. data/lib/when_exe/locales/es_AR.rb +84 -0
  42. data/lib/when_exe/locales/es_CL.rb +84 -0
  43. data/lib/when_exe/locales/es_CO.rb +84 -0
  44. data/lib/when_exe/locales/es_MX.rb +84 -0
  45. data/lib/when_exe/locales/es_PE.rb +85 -0
  46. data/lib/when_exe/locales/es_VE.rb +84 -0
  47. data/lib/when_exe/locales/et.rb +94 -0
  48. data/lib/when_exe/locales/eu.rb +95 -0
  49. data/lib/when_exe/locales/fa.rb +80 -0
  50. data/lib/when_exe/locales/fi.rb +89 -0
  51. data/lib/when_exe/locales/fr.rb +88 -0
  52. data/lib/when_exe/locales/fr_CA.rb +88 -0
  53. data/lib/when_exe/locales/fr_CH.rb +88 -0
  54. data/lib/when_exe/locales/gl.rb +81 -0
  55. data/lib/when_exe/locales/he.rb +84 -0
  56. data/lib/when_exe/locales/hi.rb +80 -0
  57. data/lib/when_exe/locales/hi_IN.rb +84 -0
  58. data/lib/when_exe/locales/hr.rb +128 -0
  59. data/lib/when_exe/locales/hu.rb +84 -0
  60. data/lib/when_exe/locales/id.rb +89 -0
  61. data/lib/when_exe/locales/is.rb +89 -0
  62. data/lib/when_exe/locales/it.rb +87 -0
  63. data/lib/when_exe/locales/it_CH.rb +87 -0
  64. data/lib/when_exe/locales/ja.rb +78 -0
  65. data/lib/when_exe/locales/kn.rb +86 -0
  66. data/lib/when_exe/locales/ko.rb +78 -0
  67. data/lib/when_exe/locales/links.rb +2342 -0
  68. data/lib/when_exe/locales/lo.rb +123 -0
  69. data/lib/when_exe/locales/locales.rb +91 -0
  70. data/lib/when_exe/locales/lt.rb +111 -0
  71. data/lib/when_exe/locales/lv.rb +118 -0
  72. data/lib/when_exe/locales/mk.rb +93 -0
  73. data/lib/when_exe/locales/mn.rb +80 -0
  74. data/lib/when_exe/locales/nb.rb +81 -0
  75. data/lib/when_exe/locales/ne.rb +81 -0
  76. data/lib/when_exe/locales/nl.rb +92 -0
  77. data/lib/when_exe/locales/nn.rb +73 -0
  78. data/lib/when_exe/locales/or.rb +84 -0
  79. data/lib/when_exe/locales/pl.rb +128 -0
  80. data/lib/when_exe/locales/pt.rb +88 -0
  81. data/lib/when_exe/locales/pt_BR.rb +88 -0
  82. data/lib/when_exe/locales/rm.rb +143 -0
  83. data/lib/when_exe/locales/ro.rb +105 -0
  84. data/lib/when_exe/locales/ru.rb +128 -0
  85. data/lib/when_exe/locales/sk.rb +109 -0
  86. data/lib/when_exe/locales/sl.rb +122 -0
  87. data/lib/when_exe/locales/sr.rb +122 -0
  88. data/lib/when_exe/locales/sv.rb +83 -0
  89. data/lib/when_exe/locales/sw.rb +89 -0
  90. data/lib/when_exe/locales/th.rb +78 -0
  91. data/lib/when_exe/locales/tl.rb +99 -0
  92. data/lib/when_exe/locales/tr.rb +96 -0
  93. data/lib/when_exe/locales/uk.rb +128 -0
  94. data/lib/when_exe/locales/uz.rb +128 -0
  95. data/lib/when_exe/locales/vi.rb +94 -0
  96. data/lib/when_exe/locales/wo.rb +82 -0
  97. data/lib/when_exe/locales/zh_CN.rb +77 -0
  98. data/lib/when_exe/locales/zh_HK.rb +77 -0
  99. data/lib/when_exe/locales/zh_TW.rb +77 -0
  100. data/lib/when_exe/mini_application.rb +252 -0
  101. data/lib/when_exe/parts/enumerator.rb +472 -0
  102. data/lib/when_exe/parts/geometric_complex.rb +379 -0
  103. data/lib/when_exe/parts/locale.rb +513 -0
  104. data/lib/when_exe/parts/method_cash.rb +207 -0
  105. data/lib/when_exe/parts/resource.rb +806 -0
  106. data/lib/when_exe/parts/timezone.rb +182 -0
  107. data/lib/when_exe/region/bahai.rb +145 -0
  108. data/lib/when_exe/region/balinese.rb +627 -0
  109. data/lib/when_exe/region/chinese.rb +896 -0
  110. data/lib/when_exe/region/chinese_calendar.rb +919 -0
  111. data/lib/when_exe/region/chinese_epoch.rb +1245 -0
  112. data/lib/when_exe/region/christian.rb +644 -0
  113. data/lib/when_exe/region/far_east.rb +192 -0
  114. data/lib/when_exe/region/french.rb +66 -0
  115. data/lib/when_exe/region/geologicalage.rb +639 -0
  116. data/lib/when_exe/region/indian.rb +1066 -0
  117. data/lib/when_exe/region/iranian.rb +66 -0
  118. data/lib/when_exe/region/islamic.rb +105 -0
  119. data/lib/when_exe/region/japanese.rb +851 -0
  120. data/lib/when_exe/region/japanese_notes.rb +964 -0
  121. data/lib/when_exe/region/japanese_residues.rb +1149 -0
  122. data/lib/when_exe/region/javanese.rb +228 -0
  123. data/lib/when_exe/region/jewish.rb +127 -0
  124. data/lib/when_exe/region/korean.rb +267 -0
  125. data/lib/when_exe/region/m17n.rb +115 -0
  126. data/lib/when_exe/region/martian.rb +215 -0
  127. data/lib/when_exe/region/mayan.rb +122 -0
  128. data/lib/when_exe/region/moon.rb +333 -0
  129. data/lib/when_exe/region/nihon_shoki.rb +73 -0
  130. data/lib/when_exe/region/planets.rb +585 -0
  131. data/lib/when_exe/region/pope.rb +298 -0
  132. data/lib/when_exe/region/residue.rb +229 -0
  133. data/lib/when_exe/region/roman.rb +325 -0
  134. data/lib/when_exe/region/ryukyu.rb +98 -0
  135. data/lib/when_exe/region/shire.rb +254 -0
  136. data/lib/when_exe/region/sun.rb +210 -0
  137. data/lib/when_exe/region/thai.rb +227 -0
  138. data/lib/when_exe/region/tibetan.rb +233 -0
  139. data/lib/when_exe/region/v50.rb +111 -0
  140. data/lib/when_exe/region/vietnamese.rb +173 -0
  141. data/lib/when_exe/region/world.rb +197 -0
  142. data/lib/when_exe/timestandard.rb +547 -0
  143. data/lib/when_exe/tmduration.rb +330 -330
  144. data/lib/when_exe/tmobjects.rb +1295 -0
  145. data/lib/when_exe/tmposition.rb +1955 -0
  146. data/lib/when_exe/tmreference.rb +1547 -0
  147. data/lib/when_exe/version.rb +10 -3
  148. data/link_to_online_documents +4 -0
  149. data/test/examples/JapanHolidays.ics +456 -0
  150. data/test/examples/Millennium.ics +17 -0
  151. data/test/examples/NewYork.ics +61 -0
  152. data/test/examples/Residue.m17n +135 -0
  153. data/test/examples/Spatial.m17n +179 -0
  154. data/test/examples/Terms.m17n +39 -0
  155. data/test/examples/Test.ics +53 -0
  156. data/test/examples/USA-DST.ics +61 -0
  157. data/test/examples/geometric_complex.rb +41 -0
  158. data/test/examples/sample.xml +14 -0
  159. data/test/examples/today.rb +61 -0
  160. data/test/test.rb +54 -19
  161. data/test/test.rb.config +1 -0
  162. data/test/test/basictypes.rb +368 -0
  163. data/test/test/calendartypes.rb +57 -0
  164. data/test/test/coordinates.rb +380 -0
  165. data/test/test/ephemeris.rb +127 -0
  166. data/test/test/googlecalendar.rb +167 -0
  167. data/test/test/icalendar.rb +848 -0
  168. data/test/test/inspect.rb +115 -0
  169. data/test/test/parts.rb +480 -0
  170. data/test/test/region/chinese.rb +161 -0
  171. data/test/test/region/french.rb +33 -0
  172. data/test/test/region/geologicalage.rb +14 -0
  173. data/test/test/region/indian.rb +55 -0
  174. data/test/test/region/iran.rb +54 -0
  175. data/test/test/region/islamic.rb +18 -0
  176. data/test/test/region/japanese.rb +62 -0
  177. data/test/test/region/jewish.rb +61 -0
  178. data/test/test/region/m17n.rb +181 -0
  179. data/test/test/region/mayan.rb +78 -0
  180. data/test/test/region/moon.rb +14 -0
  181. data/test/test/region/planets.rb +14 -0
  182. data/test/test/region/residue.rb +123 -0
  183. data/test/test/region/sun.rb +14 -0
  184. data/test/test/region/thai.rb +94 -0
  185. data/test/test/region/tibetan.rb +30 -0
  186. data/test/test/tmobjects.rb +356 -57
  187. data/test/test/tmposition.rb +237 -0
  188. data/test/test/tmreference.rb +95 -0
  189. data/when_exe.gemspec +2 -2
  190. metadata +187 -7
  191. data/doc/COPYING +0 -31
  192. data/doc/COPYING.ja +0 -25
  193. 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