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,896 @@
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
+
10
+ class BasicTypes::M17n
11
+
12
+ ChineseTerms = [self, [
13
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
14
+ "locale:[=ja:, en=en:, alias]",
15
+ "names:[ChineseTerms]",
16
+ "[中国太陽暦(節月)=ja:%E4%BA%8C%E5%8D%81%E5%9B%9B%E7%AF%80%E6%B0%97#.E6.9A.A6.E6.9C.88.E3.81.A8.E7.AF.80.E6.9C.88, *ChineseSolar=en:Solar_term]",
17
+ "[中国太陰太陽暦=ja:%E4%B8%AD%E5%9B%BD%E6%9A%A6, *ChineseLuniSolar=en:Chinese_calendar]",
18
+ "[彝暦=ja:%E3%82%A4%E6%97%8F, *Yi=en:Yi_people]",
19
+
20
+ [self,
21
+ "names:[月=ja:%E6%9C%88_(%E6%9A%A6), *Month]",
22
+ "[正月, 1st Month= ]",
23
+ "[二月, 2nd Month= ]",
24
+ "[三月, 3rd Month= ]",
25
+ "[四月, 4th Month= ]",
26
+ "[五月, 5th Month= ]",
27
+ "[六月, 6th Month= ]",
28
+ "[七月, 7th Month= ]",
29
+ "[八月, 8th Month= ]",
30
+ "[九月, 9th Month= ]",
31
+ "[十月, 10th Month=]",
32
+ "[十一月, 11th Month=]",
33
+ "[十二月, 12th Month=]"
34
+ ],
35
+
36
+ [self,
37
+ "names:[月=ja:%E6%9C%88_(%E6%9A%A6), *MonthA]",
38
+ "[一月, 1st Month= ]",
39
+ "[二月, 2nd Month= ]",
40
+ "[三月, 3rd Month= ]",
41
+ "[四月, 4th Month= ]",
42
+ "[五月, 5th Month= ]",
43
+ "[六月, 6th Month= ]",
44
+ "[七月, 7th Month= ]",
45
+ "[八月, 8th Month= ]",
46
+ "[九月, 9th Month= ]",
47
+ "[十月, 10th Month=]",
48
+ "[正月, New Year Month=]",
49
+ "[臘月, 12th Month=]"
50
+ ],
51
+
52
+ [self,
53
+ "names:[月=ja:%E6%9C%88_(%E6%9A%A6), *MonthB]",
54
+ "[建寅月, 3rd Month= ]",
55
+ "[建卯月, 4th Month= ]",
56
+ "[建辰月, 5th Month= ]",
57
+ "[建巳月, 6th Month= ]",
58
+ "[建午月, 7th Month= ]",
59
+ "[建未月, 8th Month= ]",
60
+ "[建申月, 9th Month= ]",
61
+ "[建酉月, 10th Month ]",
62
+ "[建戌月, 11th Month ]",
63
+ "[建亥月, 12th Month=]",
64
+ "[建子月, 1st Month= ]",
65
+ "[建丑月, 2nd Month= ]"
66
+ ]
67
+ ]]
68
+
69
+ YiTerms = [self, [
70
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
71
+ "locale:[=ja:, en=en:, alias]",
72
+ "names:[YiTerms]",
73
+
74
+ [self,
75
+ "names:[月=ja:%E6%9C%88_(%E6%9A%A6), *Month]",
76
+ "[木公月, 1st Month= ]",
77
+ "[木母月, 2nd Month= ]",
78
+ "[火公月, 3rd Month= ]",
79
+ "[火母月, 4th Month= ]",
80
+ "[土公月, 5th Month= ]",
81
+ "[土母月, 6th Month= ]",
82
+ "[銅公月, 7th Month= ]",
83
+ "[銅母月, 8th Month= ]",
84
+ "[水公月, 9th Month= ]",
85
+ "[水母月, 10th Month=]",
86
+ "[過年日, end of year days=]"
87
+ ]
88
+ ]]
89
+ end
90
+
91
+ module Coordinates
92
+
93
+ # Yi years
94
+ Yi = [When::BasicTypes::M17n, [
95
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
96
+ "locale:[=ja:, en=en:, alias]",
97
+ "names:[Yi]",
98
+
99
+ [Residue,
100
+ "label:[YearName]", "divisor:8", "year:0",
101
+ [Residue, "label:[東北之年=, NorthEastYear=]", "remainder: 0"],
102
+ [Residue, "label:[東方之年=, EastYear= ]", "remainder: 1"],
103
+ [Residue, "label:[東南之年=, SouthEastYear=]", "remainder: 2"],
104
+ [Residue, "label:[南方之年=, SouthYear= ]", "remainder: 3"],
105
+ [Residue, "label:[西南之年=, SouthWestYear=]", "remainder: 4"],
106
+ [Residue, "label:[西方之年=, WestYear= ]", "remainder: 5"],
107
+ [Residue, "label:[西北之年=, NorthWestYear=]", "remainder: 6"],
108
+ [Residue, "label:[北方之年=, NorthYear= ]", "remainder: 7"]
109
+ ]
110
+ ]]
111
+ end
112
+
113
+ module Ephemeris
114
+
115
+ #
116
+ # Chinese Luni-Solar Calendar Formula for True Lunation Type
117
+ #
118
+ class ChineseTrueLunation < MeanLunation
119
+
120
+ # 太陽の位置補正表
121
+ # @return [Array<Array< 入気定日加減数, 朓朒数, 損益率, 損益率増分 >>]
122
+ attr_reader :s
123
+
124
+ # 月の位置補正表
125
+ # @return [Array<Array< 区間の時間/分, 損益率 >>]
126
+ attr_reader :m
127
+
128
+ # 近点月
129
+ # @return [Numeric]
130
+ attr_reader :anomalistic_month_length
131
+
132
+ # 元期の近点離隔
133
+ # @return [Numeric]
134
+ attr_reader :anomalistic_month_shift
135
+
136
+ private
137
+
138
+ # 周期番号 -> 日時
139
+ #
140
+ # @param [Numeric] cn 周期番号
141
+ #
142
+ # @return [Numeric] ユリウス日
143
+ #
144
+ def cn_to_time_(cn, time0=nil)
145
+ time = super
146
+ return time unless @formula == '1L'
147
+ t = time - @day_epoch
148
+ time + (delta_s(t.divmod(@year_length)[1]) + delta_m(t.divmod(@anomalistic_month_length)[1])).to_r / @denominator
149
+ end
150
+
151
+ #
152
+ # 朔の日時の太陽運動の不斉による補正
153
+ #
154
+ # @param [Numeric] t 直前の冬至からの日数
155
+ #
156
+ # @return [Numeric] 補正量 / @denominator
157
+ #
158
+ def delta_s(t)
159
+
160
+ tt = t
161
+
162
+ t0, a, b, c = nil
163
+ @s.each do |v|
164
+ t0, a, b, c = v
165
+ break if t <= t0
166
+ t -= t0
167
+ end
168
+
169
+ # 24気からの日数 (大余, 小余)
170
+ t, dt = t.divmod(1)
171
+ dt = (dt * @denominator).to_i
172
+
173
+ # 損益率
174
+ b0 = (b + c * t).to_i
175
+
176
+ # 朓朒数
177
+ a0 = (a + b * t + c * t * (t-1.0)/2).to_i
178
+
179
+ # 補正値
180
+ a0 + (b0.to_f * dt / @denominator + 0.5).floor
181
+ end
182
+
183
+ #
184
+ # 朔の日時の月運動の不斉による補正
185
+ #
186
+ # @param [Numeric] t 直前の遠/近地点からの日数
187
+ #
188
+ # @return [Numeric] 補正量 / @denominator
189
+ #
190
+ def delta_m(t)
191
+
192
+ tt = t
193
+
194
+ t *= @denominator
195
+ a0 = b0 = t0 = 0
196
+ @m.each do |v|
197
+ t0, b0 = v
198
+ break if t <= t0
199
+ t -= t0
200
+ a0 += b0
201
+ end
202
+
203
+ # 補正値
204
+ a0 + (b0.to_f * t.to_i / t0.to_i + 0.5).floor
205
+ end
206
+
207
+ # オブジェクトの正規化
208
+ def _normalize(args=[], options={})
209
+ super
210
+ if @formula == '1L'
211
+ @anomalistic_month_length = @anomalistic_month_length.to_r
212
+ @anomalistic_month_shift = (@anomalistic_month_shift||0).to_r
213
+ (0...@s.size).each do |i|
214
+ @s[i-1][1,0] = @year_length / @s.size + (@s[i][0]-@s[i-1][0]) / @denominator
215
+ end
216
+ (0...@s.size).each do |i|
217
+ @s[i].shift
218
+ end
219
+ end
220
+ end
221
+ end
222
+ end
223
+
224
+ module CalendarTypes
225
+
226
+ #
227
+ # Chinese Solar Calendar
228
+ #
229
+ class ChineseSolar < EphemerisBasedSolar
230
+
231
+ private
232
+
233
+ # オブジェクトの正規化
234
+ #
235
+ # @formula = 太陽黄経の計算に用いるEphemeris
236
+ #
237
+ def _normalize(args=[], options={})
238
+ @label ||= When.Resource('_m:ChineseTerms::ChineseSolar')
239
+ @formula ||= ['Formula']
240
+ @formula = Array(@formula)
241
+ @formula *= 2 if @formula.length == 1
242
+ @formula[0] += (@formula[0] =~ /\?/ ? '&' : '?') + 'formula=12S' if @formula[0].kind_of?(String)
243
+ @formula[1] += (@formula[1] =~ /\?/ ? '&' : '?') + 'formula=1L' if @formula[1].kind_of?(String)
244
+ @timezone ||= 0
245
+ @note ||= When.CalendarNote('ChineseNotes')
246
+ @indices ||= [
247
+ When::Coordinates::Index.new({:trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
248
+ When::Coordinates::Index.new
249
+ ]
250
+ super
251
+ end
252
+ end
253
+
254
+ #
255
+ # Chinese Luni-Solar Calendar
256
+ #
257
+ class ChineseLuniSolar < EphemerisBasedLuniSolar
258
+
259
+ private
260
+
261
+ # オブジェクトの正規化
262
+ #
263
+ # @cycle_offset = 雨水の場合 -1
264
+ # @formula = 太陽黄経および月の位相の計算に用いるEphemeris
265
+ # @timezone[1] = 進朔量
266
+ #
267
+ def _normalize(args=[], options={})
268
+ @label ||= When.Resource('_m:ChineseTerms::ChineseLuniSolar')
269
+ @formula ||= ['Formula']
270
+ @formula = Array(@formula)
271
+ @formula *= 2 if @formula.length == 1
272
+ @formula[0] += (@formula[0] =~ /\?/ ? '&' : '?') + 'formula=12S' if @formula[0].kind_of?(String)
273
+ @formula[1] += (@formula[1] =~ /\?/ ? '&' : '?') + 'formula=1L' if @formula[1].kind_of?(String)
274
+ @vernal_month ||= 2
275
+ @cycle_offset ||= @vernal_month - 3
276
+ @base_month ||= 11
277
+ @intercalary_span ||= 12
278
+ @intercalary_span = @intercalary_span.to_i
279
+ @intercalary_month = (@intercalary_month.to_i - @base_month) % 12 + 1 if @intercalary_month
280
+ @timezone ||= 0
281
+ @note ||= When.CalendarNote('ChineseNotes')
282
+ @indices ||= [
283
+ When::Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
284
+ :trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
285
+ When::Coordinates::Index.new
286
+ ]
287
+ super
288
+ end
289
+
290
+ # 正月の通月
291
+ #
292
+ # @param [Integer] y 年
293
+ #
294
+ # @return [Numeric] 正月の通月
295
+ #
296
+ def _new_year_month_(y)
297
+ return _base_month(y) if @base_month == 1
298
+ intercalary = 0
299
+ _ids([y-1]).each do |v|
300
+ unless v.branch == 0
301
+ intercalary = v.trunk
302
+ break
303
+ end
304
+ end
305
+ _base_month(y) - @base_month + (intercalary>=@base_month ? 14 : 13)
306
+ end
307
+
308
+ # 天正冬至月の通月
309
+ #
310
+ # @param [Integer] y 年
311
+ #
312
+ # @return [Numeric] 天正冬至月の通月
313
+ #
314
+ def _base_month_(y)
315
+ (Residue.mod((@formula[0].cn_to_time(12*(y-1) + @base_month - @vernal_month) +
316
+ 0.5 + @timezone[0]).floor) {|m|
317
+ _new_month(m)
318
+ })[0]
319
+ end
320
+
321
+ # 暦年の翻訳表の取得
322
+ #
323
+ # @param [Array<Numeric>] date ( 年 )
324
+ #
325
+ # @return [When::Coordinates::Pair] 暦年の翻訳表
326
+ #
327
+ def _ids_(date)
328
+ y = +date[0]
329
+ return _base_ids(y) if @base_month == 1
330
+ (_base_ids(y).dup.delete_if {|v| v.trunk >= @base_month}) + (_base_ids(y+1).dup.delete_if {|v| v.trunk < @base_month})
331
+ end
332
+
333
+ # 天正冬至月から1年分の翻訳表の取得
334
+ #
335
+ # @param [Numeric] y 年
336
+ #
337
+ # @return [When::Coordinates::Pair]
338
+ # 天正冬至月から1年分の翻訳表
339
+ #
340
+ def _base_ids_(y)
341
+ _intercalary_pattern(y,12)[1..-1].inject([Pair._force_pair(@base_month, 0)]) do |base_ids, flag|
342
+ base_ids << (flag ? Pair._force_pair(base_ids[-1].trunk, 1) : Pair._force_pair(base_ids[-1].trunk % 12 + 1, 0))
343
+ end
344
+ end
345
+
346
+ # 天正冬至月から1年分の閏月のパターンの取得
347
+ #
348
+ # @param [Numeric] y 年
349
+ #
350
+ # @return [Boolean]
351
+ # [ true - 閏月である ]
352
+ # [ false - 閏月でない ]
353
+ #
354
+ def _intercalary_pattern(y, n)
355
+ m0 = _base_month(y)
356
+ m1 = _base_month(y + n/12.0)
357
+ return Array.new(n, false) if m1-m0 == n
358
+ return Array.new(n+1) {|i| i==@intercalary_month} if @intercalary_month # for 四分暦
359
+ return _intercalary_pattern(y, n/2) + _intercalary_pattern(y + n/24.0, n/2) if n > @intercalary_span
360
+ flags = Array.new(n+1, false)
361
+ n.times do |i|
362
+ m0 += 1
363
+ if _intercalary?(m0)
364
+ flags[i+1] = true
365
+ return flags
366
+ end
367
+ end
368
+ raise ArgumentError, "Intercalary month not found"
369
+ end
370
+
371
+ # 指定の月の中気の有無
372
+ #
373
+ # @param [Numeric] m 通月
374
+ #
375
+ # @return [Boolean]
376
+ # [ true - 中気無し ]
377
+ # [ false - 中気有り ]
378
+ #
379
+ def _intercalary?(m)
380
+ e = _new_month(m+1) - 1
381
+ d = Residue.mod(e) {|n| _new_epoch(n)}
382
+ e - d[1] < _new_month(m)
383
+ end
384
+ end
385
+
386
+ Chinese = [When::BasicTypes::M17n, [
387
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
388
+ "locale:[=ja:, en=en:, alias]",
389
+ "area:[中国,China]",
390
+
391
+ [ChineseLuniSolar,
392
+ 'name:[黄帝暦]',
393
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1228331',
394
+ 'intercalary_month:12'
395
+ ],
396
+
397
+ [ChineseLuniSolar,
398
+ 'name:[顓頊暦]',
399
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1171396&longitude_shift=-1/8',
400
+ 'timezone:0,+12',
401
+ 'intercalary_month:9'
402
+ ],
403
+
404
+ [ChineseLuniSolar,
405
+ 'name:[夏暦]',
406
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1328411',
407
+ 'intercalary_month:12'
408
+ ],
409
+
410
+ [ChineseLuniSolar,
411
+ 'name:[殷暦]',
412
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1149071',
413
+ 'intercalary_month:12'
414
+ ],
415
+
416
+ [ChineseLuniSolar,
417
+ 'name:[周暦]',
418
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1128251',
419
+ 'intercalary_month:12'
420
+ ],
421
+
422
+ [ChineseLuniSolar,
423
+ 'name:[魯暦]',
424
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1048991',
425
+ 'intercalary_month:12'
426
+ ],
427
+
428
+ [ChineseLuniSolar,
429
+ 'name:[太初暦]',
430
+ 'formula:MeanLunation?year_length=562120/1539&lunation_length=2392/81&day_epoch=1683431'
431
+ ],
432
+
433
+ [ChineseLuniSolar,
434
+ 'name:[四分暦]',
435
+ 'formula:MeanLunation?year_length=1461/4&lunation_length=27759/940&day_epoch=1662611'
436
+ ],
437
+
438
+ [ChineseLuniSolar,
439
+ 'name:[乾象暦]',
440
+ 'formula:MeanLunation?year_length=215130/589&lunation_length=43026/1457&day_epoch=-898129'
441
+ ],
442
+
443
+ [ChineseLuniSolar,
444
+ 'name:[景初暦]',
445
+ 'formula:MeanLunation?year_length=673150/1843&lunation_length=134630/4559&day_epoch=+330191'
446
+ ],
447
+
448
+ [ChineseLuniSolar,
449
+ 'name:[三紀暦]',
450
+ 'formula:MeanLunation?year_length=895220/2451&lunation_length=179044/6063&day_epoch=-28760989'
451
+ ],
452
+
453
+ [ChineseLuniSolar,
454
+ 'name:[玄始暦]',
455
+ 'formula:MeanLunation?year_length=2629759/7200&lunation_length=2629759/89052&day_epoch=-20568349'
456
+ ],
457
+
458
+ [ChineseLuniSolar,
459
+ 'name:[元嘉暦]',
460
+ 'formula:MeanLunation?year_length=111035/304&lunation_length=22207/752&day_epoch=-200089&longitude_shift=-1/12' # 春分の1ヶ月前
461
+ ],
462
+
463
+ [ChineseLuniSolar,
464
+ 'name:[大明暦]',
465
+ 'formula:MeanLunation?year_length=14423804/39491&lunation_length=116321/3939&day_epoch=-17080189'
466
+ ],
467
+
468
+ [ChineseLuniSolar,
469
+ 'name:[正光暦]',
470
+ 'formula:MeanLunation?year_length=2213377/6060&lunation_length=2213377/74952&day_epoch=-59357929'
471
+ ],
472
+
473
+ [ChineseLuniSolar,
474
+ 'name:[興和暦]',
475
+ 'formula:MeanLunation?year_length=6158017/16860&lunation_length=6158017/208530&day_epoch=-105462049'
476
+ ],
477
+
478
+ [ChineseLuniSolar,
479
+ 'name:[天保暦]',
480
+ 'formula:MeanLunation?year_length=8641687/23660&lunation_length=8641687/292635&day_epoch=-38447089'
481
+ ],
482
+
483
+ [ChineseLuniSolar,
484
+ 'name:[天和暦]',
485
+ 'formula:MeanLunation?year_length=8568631/23460&lunation_length=8568631/290160&day_epoch=-317950249'
486
+ ],
487
+
488
+ [ChineseLuniSolar,
489
+ 'name:[大象暦]',
490
+ 'formula:MeanLunation?year_length=4745247/12992&lunation_length=1581749/53563&day_epoch=-13244449'
491
+ ],
492
+
493
+ [ChineseLuniSolar,
494
+ 'name:[開皇暦]',
495
+ 'formula:MeanLunation?year_length=37605463/102960&lunation_length=5372209/181920&day_epoch=-1506155749'
496
+ ],
497
+
498
+ [ChineseLuniSolar,
499
+ 'name:[大業暦]',
500
+ 'formula:MeanLunation?year_length=15573963/42640&lunation_length=33783/1144&day_epoch=-519493909'
501
+ ],
502
+
503
+ [ChineseLuniSolar,
504
+ 'name:[儀鳳暦]',
505
+ 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
506
+ ],
507
+
508
+ [ChineseLuniSolar,
509
+ 'name:[麟徳暦]',
510
+ {'formula'=>['12S', '1L'].map {|f|
511
+ Ephemeris::ChineseTrueLunation.new({
512
+ 'formula' => f,
513
+ 'day_epoch' => -96608689,
514
+ 'year_length' => '122357/335',
515
+ 'lunation_length' => '39571/1340',
516
+ 'anomalistic_month_length' => '443077/16080', # 27.0 + (743.0+1.0/12)/1340,
517
+ 's' => [
518
+ [ 0.0, 0, +3.9546, -0.0372], # 冬至
519
+ [ -722.0, +54, +3.4091, -0.0372], # 大寒
520
+ [-1340.0, +100, +2.8636, -0.0372], # 小寒
521
+ [-1854.0, +138, +2.3181, +0.0372], # 立春
522
+ [-2368.0, +176, +2.8636, +0.0372], # 雨水
523
+ [-2986.0, +222, +3.4091, +0.0372], # 啓蟄
524
+ [-3708.0, +276, -3.7220, +0.0329], # 春分
525
+ [-2986.0, +222, -3.2086, +0.0329], # 清明
526
+ [-2368.0, +176, -2.6952, +0.0329], # 穀雨
527
+ [-1854.0, +138, -2.1818, -0.0329], # 立夏
528
+ [-1340.0, +100, -2.6952, -0.0329], # 小満
529
+ [ -722.0, +54, -3.2086, -0.0329], # 芒種
530
+ [ 0.0, 0, -3.7220, +0.0329], # 夏至
531
+ [ +722.0, -54, -3.2086, +0.0329], # 小暑
532
+ [+1340.0, -100, -2.6952, +0.0329], # 大暑
533
+ [+1854.0, -138, -2.1818, -0.0329], # 立秋
534
+ [+2368.0, -176, -2.6952, -0.0329], # 処暑
535
+ [+2986.0, -222, -3.2086, -0.0329], # 白露
536
+ [+3708.0, -276, +3.9546, -0.0372], # 秋分
537
+ [+2986.0, -222, +3.4091, -0.0372], # 寒露
538
+ [+2368.0, -176, +2.8636, -0.0372], # 霜降
539
+ [+1854.0, -138, +2.3181, +0.0372], # 立冬
540
+ [+1340.0, -100, +2.8636, +0.0372], # 小雪
541
+ [ +722.0, -54, +3.4091, +0.0372], # 大雪
542
+ ],
543
+ 'm' => [
544
+ [1340.0, -134], # 1日
545
+ [1340.0, -117], # 2日
546
+ [1340.0, -99], # 3日
547
+ [1340.0, -78], # 4日
548
+ [1340.0, -56], # 5日
549
+ [1340.0, -33], # 6日
550
+ [1191.0, -9], # 7日
551
+ [ 149.0, 0], # 7日
552
+ [1340.0, +14], # 8日
553
+ [1340.0, +38], # 9日
554
+ [1340.0, +62], # 10日
555
+ [1340.0, +85], # 11日
556
+ [1340.0, +104], # 12日
557
+ [1340.0, +121], # 13日
558
+ [1042.0, +102], # 14日
559
+ [ 298.0, +29], # 14日
560
+ [1340.0, +128], # 15日
561
+ [1340.0, +115], # 16日
562
+ [1340.0, +95], # 17日
563
+ [1340.0, +74], # 18日
564
+ [1340.0, +52], # 19日
565
+ [1340.0, +28], # 20日
566
+ [ 892.0, +4], # 21日
567
+ [ 448.0, 0], # 21日
568
+ [1340.0, -20], # 22日
569
+ [1340.0, -44], # 23日
570
+ [1340.0, -68], # 24日
571
+ [1340.0, -89], # 25日
572
+ [1340.0, -108], # 26日
573
+ [1340.0, -125], # 27日
574
+ [ 743.0+1.0/12, -71] # 28日
575
+ ]
576
+ })
577
+ }}
578
+ ],
579
+
580
+ [ChineseLuniSolar,
581
+ 'name:[大衍暦]',
582
+ 'timezone:0,+6',
583
+ {'formula'=>['12S', '1L'].map {|f|
584
+ Ephemeris::ChineseTrueLunation.new({
585
+ 'formula' => f,
586
+ 'day_epoch' => -35412747829,
587
+ 'year_length' => '1110343/3040',
588
+ 'lunation_length' => '89773/3040',
589
+ 'anomalistic_month_length' => '6701279/243200', # 27.0 +(1685.0+79.0/80)/3040,
590
+ 'anomalistic_month_shift' => '1/2',
591
+ 's' => [
592
+ [ 0.0, 0, +13.4524, -0.1886], # 冬至
593
+ [-2353.0, +176, +10.5564, -0.1634], # 大寒
594
+ [-4198.0, +314, +8.0408, -0.1446], # 小寒
595
+ [-5588.0, +418, +5.8160, -0.1318], # 立春
596
+ [-6564.0, +491, +3.7987, -0.1240], # 雨水
597
+ [-7152.0, +535, +1.9265, -0.1240], # 啓蟄
598
+ [-7366.0, +551, -0.2048, -0.1178], # 春分
599
+ [-7152.0, +535, -1.9968, -0.1190], # 清明
600
+ [-6564.0, +491, -3.7956, -0.1240], # 穀雨
601
+ [-5588.0, +418, -5.6626, -0.1324], # 立夏
602
+ [-4198.0, +314, -7.6555, -0.1436], # 小満
603
+ [-2353.0, +176, -9.9405, -0.1436], # 芒種
604
+ [ 0.0, 0, -12.0819, +0.1436], # 夏至
605
+ [+2353.0, -176, -9.7018, +0.1324], # 小暑
606
+ [+4198.0, -314, -7.5450, +0.1240], # 大暑
607
+ [+5588.0, -418, -5.5634, +0.1190], # 立秋
608
+ [+6564.0, -491, -3.7038, +0.1178], # 処暑
609
+ [+7152.0, -535, -1.8954, +0.1178], # 白露
610
+ [+7366.0, -551, +0.1783, +0.1240], # 秋分
611
+ [+7152.0, -535, +2.0042, +0.1318], # 寒露
612
+ [+6564.0, -491, +3.8950, +0.1446], # 霜降
613
+ [+5588.0, -418, +5.9214, +0.1634], # 立冬
614
+ [+4198.0, -314, +8.1610, +0.1886], # 小雪
615
+ [+2353.0, -176, +10.9010, +0.1886], # 大雪
616
+ ],
617
+ 'm' => [
618
+ [3040.0, +297], # 1日
619
+ [3040.0, +259], # 2日
620
+ [3040.0, +220], # 3日
621
+ [3040.0, +180], # 4日
622
+ [3040.0, +139], # 5日
623
+ [3040.0, +97], # 6日
624
+ [2701.0, +48], # 7日
625
+ [ 339.0, -6], # 7日
626
+ [3040.0, -64], # 8日
627
+ [3040.0, -106], # 9日
628
+ [3040.0, -148], # 10日
629
+ [3040.0, -189], # 11日
630
+ [3040.0, -229], # 12日
631
+ [3040.0, -267], # 13日
632
+ [2363.0, -231], # 14日
633
+ [ 677.0, -66], # 14日
634
+ [3040.0, -289], # 15日
635
+ [3040.0, -250], # 16日
636
+ [3040.0, -211], # 17日
637
+ [3040.0, -171], # 18日
638
+ [3040.0, -130], # 19日
639
+ [3040.0, -87], # 20日
640
+ [2024.0, -36], # 21日
641
+ [1016.0, +18], # 21日
642
+ [3040.0, +73], # 22日
643
+ [3040.0, +116], # 23日
644
+ [3040.0, +157], # 24日
645
+ [3040.0, +198], # 25日
646
+ [3040.0, +237], # 26日
647
+ [3040.0, +276], # 27日
648
+ [1686.0, +165] # 28日
649
+ ]
650
+ })
651
+ }}
652
+ ],
653
+
654
+ [ChineseLuniSolar,
655
+ 'name:[五紀暦]',
656
+ 'timezone:0,+6',
657
+ {'formula'=>['12S', '1L'].map {|f|
658
+ Ephemeris::ChineseTrueLunation.new({
659
+ 'formula' => f,
660
+ 'day_epoch' => -96608689,
661
+ 'year_length' => '122357/335',
662
+ 'lunation_length' => '39571/1340',
663
+ 'anomalistic_month_length' => '1366156/49580', # 27.0 + (743.0+5.0/37)/1340,
664
+ 's' => [
665
+ [ 0.0, 0, +5.9668, -0.0843], # 冬至
666
+ [-1037.0, +78, +4.6652, -0.0721], # 大寒
667
+ [-1850.0, +139, +3.5656, -0.0653], # 小寒
668
+ [-2463.0, +185, +2.5583, -0.0590], # 立春
669
+ [-2893.0, +217, +1.6375, -0.0532], # 雨水
670
+ [-3152.0, +236, +0.8384, -0.0532], # 啓蟄
671
+ [-3246.0, +243, -0.0972, -0.0505], # 春分
672
+ [-3152.0, +236, -0.8480, -0.0534], # 清明
673
+ [-2893.0, +217, -1.6517, -0.0561], # 穀雨
674
+ [-2463.0, +185, -2.5057, -0.0584], # 立夏
675
+ [-1850.0, +139, -3.3781, -0.0643], # 小満
676
+ [-1037.0, +78, -4.3954, -0.0643], # 芒種
677
+ [ 0.0, 0, -5.3592, +0.0643], # 夏至
678
+ [+1037.0, -78, -4.2877, +0.0584], # 小暑
679
+ [+1850.0, -139, -3.3459, +0.0561], # 大暑
680
+ [+2463.0, -185, -2.4475, +0.0534], # 立秋
681
+ [+2893.0, -217, -1.5966, +0.0505], # 処暑
682
+ [+3152.0, -236, -0.8185, +0.0505], # 白露
683
+ [+3246.0, -243, +0.0858, +0.0532], # 秋分
684
+ [+3152.0, -236, +0.8505, +0.0590], # 寒露
685
+ [+2893.0, -217, +1.6943, +0.0653], # 霜降
686
+ [+2463.0, -185, +2.6205, +0.0721], # 立冬
687
+ [+1850.0, -139, +3.6007, +0.0843], # 小雪
688
+ [+1037.0, -78, +4.8330, +0.0843], # 大雪
689
+ ],
690
+ 'm' => [
691
+ [1340.0, -135], # 1日
692
+ [1340.0, -117], # 2日
693
+ [1340.0, -99], # 3日
694
+ [1340.0, -78], # 4日
695
+ [1340.0, -56], # 5日
696
+ [1340.0, -33], # 6日
697
+ [1191.0, -8], # 7日
698
+ [ 149.0, +1], # 7日
699
+ [1340.0, +14], # 8日
700
+ [1340.0, +38], # 9日
701
+ [1340.0, +62], # 10日
702
+ [1340.0, +85], # 11日
703
+ [1340.0, +103], # 12日
704
+ [1340.0, +118], # 13日
705
+ [1042.0, +105], # 14日
706
+ [ 298.0, +30], # 14日
707
+ [1340.0, +128], # 15日
708
+ [1340.0, +115], # 16日
709
+ [1340.0, +95], # 17日
710
+ [1340.0, +74], # 18日
711
+ [1340.0, +52], # 19日
712
+ [1340.0, +28], # 20日
713
+ [ 892.0, +6], # 21日
714
+ [ 448.0, -3], # 21日
715
+ [1340.0, -20], # 22日
716
+ [1340.0, -42], # 23日
717
+ [1340.0, -65], # 24日
718
+ [1340.0, -89], # 25日
719
+ [1340.0, -109], # 26日
720
+ [1340.0, -125], # 27日
721
+ [ 743.0+5.0/37, -75] # 28日
722
+ ]
723
+ })
724
+ }}
725
+ ],
726
+
727
+ [ChineseLuniSolar,
728
+ 'name:[宣明暦]',
729
+ 'timezone:0,+6',
730
+ {'formula'=>['12S', '1L'].map {|f|
731
+ Ephemeris::ChineseTrueLunation.new({
732
+ 'formula' => f,
733
+ 'day_epoch' => -2580308749,
734
+ 'year_length' => '3068055/8400',
735
+ 'lunation_length' => '248057/8400',
736
+ 'anomalistic_month_length' => '23145819/840000', # 27.0 + 4658.19 / 8400,
737
+ 'anomalistic_month_shift' => '1/2',
738
+ 's' => [
739
+ [ 0.0, 0, +33.4511, -0.3695], # 冬至
740
+ [ -6000.0, +449, +28.0389, -0.3606], # 大寒
741
+ [-11000.0, +823, +22.6998, -0.3519], # 小寒
742
+ [-15000.0, +1122, +17.8923, -0.4068], # 立春
743
+ [-18000.0, +1346, +11.7966, -0.3998], # 雨水
744
+ [-19800.0, +1481, +5.7986, -0.3998], # 啓蟄
745
+ [-20400.0, +1526, -0.2433, -0.3779], # 春分
746
+ [-19800.0, +1481, -6.1254, -0.3634], # 清明
747
+ [-18000.0, +1346, -12.2048, -0.2987], # 穀雨
748
+ [-15000.0, +1122, -16.9060, -0.2919], # 立夏
749
+ [-11000.0, +823, -21.5362, -0.2854], # 小満
750
+ [ -6000.0, +449, -26.0498, -0.2854], # 芒種
751
+ [ 0.0, 0, -30.3119, +0.2854], # 夏至
752
+ [ +6000.0, -449, -25.8126, +0.2919], # 小暑
753
+ [+11000.0, -823, -21.2454, +0.2987], # 大暑
754
+ [+15000.0, -1122, -17.0296, +0.3634], # 立秋
755
+ [+18000.0, -1346, -11.4744, +0.3779], # 処暑
756
+ [+19800.0, -1481, -5.6429, +0.3779], # 白露
757
+ [+20400.0, -1526, +0.1432, +0.3998], # 秋分
758
+ [+19800.0, -1481, +6.1488, +0.4068], # 寒露
759
+ [+18000.0, -1346, +12.6336, +0.3519], # 霜降
760
+ [+15000.0, -1122, +17.8043, +0.3606], # 立冬
761
+ [+11000.0, -823, +23.0590, +0.3695], # 小雪
762
+ [ +6000.0, -449, +28.4618, +0.3695], # 大雪
763
+ ],
764
+ 'm' => [
765
+ [ 8400.0, +830], # 進1日
766
+ [ 8400.0, +726], # 2日
767
+ [ 8400.0, +606], # 3日
768
+ [ 8400.0, +471], # 4日
769
+ [ 8400.0, +337], # 5日
770
+ [ 8400.0, +202], # 6日
771
+ [ 7465.0, +53], # 7日
772
+ [ 935.0, -7], # 7日
773
+ [ 8400.0, -82], # 8日
774
+ [ 8400.0, -224], # 9日
775
+ [ 8400.0, -366], # 10日
776
+ [ 8400.0, -509], # 11日
777
+ [ 8400.0, -643], # 12日
778
+ [ 8400.0, -748], # 13日
779
+ [ 6529.095, -646], # 14日
780
+ [ 8400.0, -830], # 退1日
781
+ [ 8400.0, -726], # 2日
782
+ [ 8400.0, -598], # 3日
783
+ [ 8400.0, -464], # 4日
784
+ [ 8400.0, -329], # 5日
785
+ [ 8400.0, -195], # 6日
786
+ [ 7465.0, -53], # 7日
787
+ [ 935.0, +7], # 7日
788
+ [ 8400.0, +82], # 8日
789
+ [ 8400.0, +225], # 9日
790
+ [ 8400.0, +366], # 10日
791
+ [ 8400.0, +501], # 11日
792
+ [ 8400.0, +628], # 12日
793
+ [ 8400.0, +740], # 13日
794
+ [ 6529.095, +646] # 14日
795
+ ]
796
+ })
797
+ }}
798
+ ],
799
+
800
+ [ChineseSolar,
801
+ 'name:[前貞享暦(節月)]',
802
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.675000&year_epoch=1684&year_length=365.241696&year_delta=1'
803
+ ],
804
+
805
+ [ChineseSolar,
806
+ 'name:[貞享暦(節月)]',
807
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.689990&year_epoch=1684&year_length=365.241696&year_delta=1'
808
+ ],
809
+
810
+ [ChineseSolar,
811
+ 'name:[前々宝暦暦(節月)]',
812
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.903800&year_epoch=1684&year_length=365.241696&year_delta=1'
813
+ ],
814
+
815
+ [ChineseSolar,
816
+ 'name:[前宝暦暦(節月)]',
817
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.622300&year_epoch=1684&year_length=365.241696&year_delta=1'
818
+ ],
819
+
820
+ [ChineseSolar,
821
+ 'name:[宝暦暦(節月)]',
822
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.622100&year_epoch=1684&year_length=365.241696&year_delta=1'
823
+ ],
824
+
825
+ [ChineseSolar,
826
+ 'name:[修正宝暦暦(節月)]',
827
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.762200&year_epoch=1684&year_length=365.241766&year_delta=1'
828
+ ],
829
+
830
+ [ChineseSolar,
831
+ 'name:[寛政暦(節月)]',
832
+ 'formula:VariableYearLengthMethod?day_epoch=2336118.720200&year_epoch=1684&year_length=365.242360&year_delta=0'
833
+ ]
834
+ ].inject([]) {|list, cal|
835
+ if cal.kind_of?(Array) && cal[0] == ChineseLuniSolar
836
+ twin = cal.dup
837
+ twin[0..1] = [ChineseSolar, cal[1].sub(/\]/, '(節月)]')]
838
+ list << cal << twin
839
+ else
840
+ list << cal
841
+ end
842
+ }]
843
+
844
+ #
845
+ # 太平天国 2.1.1-3.2.30
846
+ #
847
+ TenrekiA = [CyclicTableBased, {
848
+ 'origin_of_LSC' => 2397523,
849
+ 'origin_of_MSC' => 1852,
850
+ 'indices' => [
851
+ When::Coordinates::Index.new({:unit =>12, :trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
852
+ When::Coordinates::Index.new
853
+ ],
854
+ 'rule_table' => {
855
+ 'T' => {'Rule' =>[365]},
856
+ 365 => {'Length'=>[31,30]*5 + [30]*2}
857
+ }
858
+ }]
859
+
860
+ #
861
+ # 太平天国 3.3.1-
862
+ #
863
+ TenrekiB = [CyclicTableBased, {
864
+ 'origin_of_LSC' => 2397522,
865
+ 'origin_of_MSC' => 1852,
866
+ 'indices' => [
867
+ When::Coordinates::Index.new({:unit =>12, :trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
868
+ When::Coordinates::Index.new({:shift => 1})
869
+ ],
870
+ 'rule_table' => {
871
+ 'T' => {'Rule' =>[366]},
872
+ 366 => {'Length'=>[31,30]*6}
873
+ },
874
+ 'note' => 'DefaultNotes'
875
+ }]
876
+
877
+ #
878
+ # 彝
879
+ #
880
+ Yi = [CyclicTableBased, {
881
+ 'label' => When.Resource('_m:ChineseTerms::Yi'),
882
+ 'origin_of_LSC' => 1721431,
883
+ 'origin_of_MSC' => 1,
884
+ 'indices' => [
885
+ When::Coordinates::Index.new({:unit =>11, :trunk=>When.Resource('_m:YiTerms::Month::*')}),
886
+ When::Coordinates::Index.new
887
+ ],
888
+ 'rule_table' => {
889
+ 'T' => {'Rule' =>[365, 365, 365, 366]},
890
+ 365 => {'Length'=>[36]*10 + [5]},
891
+ 366 => {'Length'=>[36]*10 + [6]}
892
+ },
893
+ 'note' => 'YiNotes'
894
+ }]
895
+ end
896
+ end