when_exe 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/bin/locales.rb +2 -2
  2. data/bin/when.rb +2 -2
  3. data/lib/when_exe.rb +161 -55
  4. data/lib/when_exe/basictypes.rb +34 -26
  5. data/lib/when_exe/calendarnote.rb +654 -0
  6. data/lib/when_exe/calendartypes.rb +49 -474
  7. data/lib/when_exe/coordinates.rb +141 -34
  8. data/lib/when_exe/core/compatibility.rb +22 -2
  9. data/lib/when_exe/core/extension.rb +47 -3
  10. data/lib/when_exe/ephemeris.rb +82 -109
  11. data/lib/when_exe/googlecalendar.rb +1 -1
  12. data/lib/when_exe/icalendar.rb +26 -14
  13. data/lib/when_exe/inspect.rb +82 -68
  14. data/lib/when_exe/locales/af.rb +1 -1
  15. data/lib/when_exe/locales/ar.rb +1 -1
  16. data/lib/when_exe/locales/az.rb +1 -1
  17. data/lib/when_exe/locales/bg.rb +1 -1
  18. data/lib/when_exe/locales/bn.rb +1 -1
  19. data/lib/when_exe/locales/bs.rb +1 -1
  20. data/lib/when_exe/locales/ca.rb +1 -1
  21. data/lib/when_exe/locales/cs.rb +1 -1
  22. data/lib/when_exe/locales/cy.rb +1 -1
  23. data/lib/when_exe/locales/da.rb +1 -1
  24. data/lib/when_exe/locales/de.rb +1 -1
  25. data/lib/when_exe/locales/de_AT.rb +1 -1
  26. data/lib/when_exe/locales/de_CH.rb +1 -1
  27. data/lib/when_exe/locales/el.rb +1 -1
  28. data/lib/when_exe/locales/en.rb +1 -1
  29. data/lib/when_exe/locales/en_AU.rb +1 -1
  30. data/lib/when_exe/locales/en_CA.rb +1 -1
  31. data/lib/when_exe/locales/en_GB.rb +1 -1
  32. data/lib/when_exe/locales/en_IE.rb +1 -1
  33. data/lib/when_exe/locales/en_IN.rb +1 -1
  34. data/lib/when_exe/locales/en_NZ.rb +1 -1
  35. data/lib/when_exe/locales/en_US.rb +1 -1
  36. data/lib/when_exe/locales/eo.rb +1 -1
  37. data/lib/when_exe/locales/es.rb +1 -1
  38. data/lib/when_exe/locales/es_419.rb +1 -1
  39. data/lib/when_exe/locales/es_AR.rb +1 -1
  40. data/lib/when_exe/locales/es_CL.rb +1 -1
  41. data/lib/when_exe/locales/es_CO.rb +1 -1
  42. data/lib/when_exe/locales/es_CR.rb +1 -1
  43. data/lib/when_exe/locales/es_EC.rb +1 -1
  44. data/lib/when_exe/locales/es_MX.rb +1 -1
  45. data/lib/when_exe/locales/es_PA.rb +1 -1
  46. data/lib/when_exe/locales/es_PE.rb +1 -1
  47. data/lib/when_exe/locales/es_VE.rb +1 -1
  48. data/lib/when_exe/locales/et.rb +1 -1
  49. data/lib/when_exe/locales/eu.rb +1 -1
  50. data/lib/when_exe/locales/fa.rb +1 -1
  51. data/lib/when_exe/locales/fi.rb +1 -1
  52. data/lib/when_exe/locales/fr.rb +1 -1
  53. data/lib/when_exe/locales/fr_CA.rb +1 -1
  54. data/lib/when_exe/locales/fr_CH.rb +1 -1
  55. data/lib/when_exe/locales/gl.rb +1 -1
  56. data/lib/when_exe/locales/he.rb +1 -1
  57. data/lib/when_exe/locales/hi.rb +1 -1
  58. data/lib/when_exe/locales/hi_IN.rb +1 -1
  59. data/lib/when_exe/locales/hr.rb +1 -1
  60. data/lib/when_exe/locales/hu.rb +1 -1
  61. data/lib/when_exe/locales/id.rb +1 -1
  62. data/lib/when_exe/locales/is.rb +1 -1
  63. data/lib/when_exe/locales/it.rb +1 -1
  64. data/lib/when_exe/locales/it_CH.rb +1 -1
  65. data/lib/when_exe/locales/ja.rb +1 -1
  66. data/lib/when_exe/locales/kn.rb +1 -1
  67. data/lib/when_exe/locales/ko.rb +1 -1
  68. data/lib/when_exe/locales/lo.rb +1 -1
  69. data/lib/when_exe/locales/locales.rb +1 -1
  70. data/lib/when_exe/locales/lt.rb +1 -1
  71. data/lib/when_exe/locales/lv.rb +1 -1
  72. data/lib/when_exe/locales/mk.rb +1 -1
  73. data/lib/when_exe/locales/mn.rb +1 -1
  74. data/lib/when_exe/locales/ms.rb +1 -1
  75. data/lib/when_exe/locales/nb.rb +1 -1
  76. data/lib/when_exe/locales/ne.rb +1 -1
  77. data/lib/when_exe/locales/nl.rb +1 -1
  78. data/lib/when_exe/locales/nn.rb +1 -1
  79. data/lib/when_exe/locales/or.rb +1 -1
  80. data/lib/when_exe/locales/pl.rb +1 -1
  81. data/lib/when_exe/locales/pt.rb +1 -1
  82. data/lib/when_exe/locales/pt_BR.rb +1 -1
  83. data/lib/when_exe/locales/rm.rb +1 -1
  84. data/lib/when_exe/locales/ro.rb +1 -1
  85. data/lib/when_exe/locales/ru.rb +1 -1
  86. data/lib/when_exe/locales/sk.rb +1 -1
  87. data/lib/when_exe/locales/sl.rb +1 -1
  88. data/lib/when_exe/locales/sr.rb +1 -1
  89. data/lib/when_exe/locales/sv.rb +1 -1
  90. data/lib/when_exe/locales/sw.rb +1 -1
  91. data/lib/when_exe/locales/th.rb +1 -1
  92. data/lib/when_exe/locales/tl.rb +1 -1
  93. data/lib/when_exe/locales/tr.rb +1 -1
  94. data/lib/when_exe/locales/uk.rb +1 -1
  95. data/lib/when_exe/locales/ur.rb +1 -1
  96. data/lib/when_exe/locales/uz.rb +1 -1
  97. data/lib/when_exe/locales/vi.rb +1 -1
  98. data/lib/when_exe/locales/wo.rb +1 -1
  99. data/lib/when_exe/locales/zh_CN.rb +1 -1
  100. data/lib/when_exe/locales/zh_HK.rb +1 -1
  101. data/lib/when_exe/locales/zh_TW.rb +1 -1
  102. data/lib/when_exe/mini_application.rb +6 -2
  103. data/lib/when_exe/parts/enumerator.rb +13 -8
  104. data/lib/when_exe/parts/geometric_complex.rb +3 -5
  105. data/lib/when_exe/parts/locale.rb +185 -28
  106. data/lib/when_exe/parts/method_cash.rb +20 -10
  107. data/lib/when_exe/parts/resource.rb +154 -76
  108. data/lib/when_exe/parts/timezone.rb +11 -6
  109. data/lib/when_exe/region/bahai.rb +2 -2
  110. data/lib/when_exe/region/balinese.rb +296 -296
  111. data/lib/when_exe/region/chinese.rb +564 -564
  112. data/lib/when_exe/region/chinese_calendar.rb +5 -1
  113. data/lib/when_exe/region/chinese_epoch.rb +47 -102
  114. data/lib/when_exe/region/chinese_twin.rb +798 -0
  115. data/lib/when_exe/region/christian.rb +314 -338
  116. data/lib/when_exe/region/coptic.rb +88 -0
  117. data/lib/when_exe/region/ephemeric_notes.rb +322 -307
  118. data/lib/when_exe/region/french.rb +2 -2
  119. data/lib/when_exe/region/indian.rb +361 -272
  120. data/lib/when_exe/region/iranian.rb +2 -2
  121. data/lib/when_exe/region/islamic.rb +3 -3
  122. data/lib/when_exe/region/japanese.rb +1 -1
  123. data/lib/when_exe/region/japanese_notes.rb +165 -103
  124. data/lib/when_exe/region/japanese_residues.rb +56 -55
  125. data/lib/when_exe/region/japanese_twin.rb +228 -0
  126. data/lib/when_exe/region/javanese.rb +2 -2
  127. data/lib/when_exe/region/jewish.rb +2 -2
  128. data/lib/when_exe/region/korean.rb +4 -4
  129. data/lib/when_exe/region/m17n.rb +19 -19
  130. data/lib/when_exe/region/martian.rb +21 -9
  131. data/lib/when_exe/region/mayan.rb +19 -11
  132. data/lib/when_exe/region/moon.rb +7 -7
  133. data/lib/when_exe/region/nihon_shoki.rb +7 -7
  134. data/lib/when_exe/region/roman.rb +100 -100
  135. data/lib/when_exe/region/shire.rb +130 -147
  136. data/lib/when_exe/region/thai.rb +2 -2
  137. data/lib/when_exe/region/tibetan.rb +2 -2
  138. data/lib/when_exe/region/vietnamese.rb +383 -114
  139. data/lib/when_exe/region/world.rb +112 -129
  140. data/lib/when_exe/timestandard.rb +12 -1
  141. data/lib/when_exe/tmposition.rb +28 -14
  142. data/lib/when_exe/tmreference.rb +96 -93
  143. data/lib/when_exe/version.rb +1 -1
  144. data/test/examples/Terms.m17n +2 -2
  145. data/test/examples/sample.json +16 -0
  146. data/test/examples/sample.xml +1 -1
  147. data/test/test.rb +4 -0
  148. data/test/test/basictypes.rb +2 -2
  149. data/test/test/calendarnote.rb +69 -0
  150. data/test/test/calendartypes.rb +41 -1
  151. data/test/test/coordinates.rb +12 -1
  152. data/test/test/ephemeris.rb +13 -66
  153. data/test/test/icalendar.rb +3 -3
  154. data/test/test/inspect.rb +1 -1
  155. data/test/test/parts.rb +7 -4
  156. data/test/test/region/chinese.rb +45 -0
  157. data/test/test/region/coptic.rb +27 -0
  158. data/test/test/region/indian.rb +1 -1
  159. data/test/test/region/japanese.rb +4 -4
  160. data/test/test/region/jewish.rb +1 -1
  161. data/test/test/region/m17n.rb +7 -5
  162. data/test/test/region/residue.rb +2 -2
  163. data/test/test/region/vietnamese.rb +102 -0
  164. data/test/test/timestandard.rb +81 -0
  165. data/test/test/tmposition.rb +1 -1
  166. data/test/test/tmreference.rb +1 -1
  167. data/when_exe.gemspec +2 -2
  168. metadata +16 -7
@@ -40,7 +40,7 @@ module When::Coordinates
40
40
  # 日の九星のインデックス
41
41
  #
42
42
  # @param [When::TM::TemporalPosition] date 節月による日付
43
- # @param [When::CalendarTypes::CalendarNote::JapaneseNote::SolarTerms] s_terms
43
+ # @param [When::CalendarNote::JapaneseNote::SolarTerms] s_terms
44
44
  #
45
45
  # @return [Integer]
46
46
  #
@@ -69,7 +69,7 @@ module When::Coordinates
69
69
  #
70
70
  class Stem < Residue
71
71
 
72
- Notes = {
72
+ Rules = {
73
73
  '歳徳' => %w(東宮甲 西宮庚 南宮丙 北宮壬 南宮丙 東宮甲 西宮庚 南宮丙 北宮壬 南宮丙),
74
74
  '金神' => %w(午未申酉 辰巳 子丑寅卯午未 寅卯戌亥 子丑申酉)
75
75
  }
@@ -78,8 +78,8 @@ module When::Coordinates
78
78
  # 年の十干で決まる暦注
79
79
  # @private
80
80
  def _year_notes(notes={}, dates=nil, conditions={})
81
- notes['歳徳'] ||= Notes['歳徳'][@remainder]
82
- notes['金神'] ||= Notes['金神'][@remainder % 5]
81
+ notes['歳徳'] ||= Rules['歳徳'][@remainder]
82
+ notes['金神'] ||= Rules['金神'][@remainder % 5]
83
83
  notes
84
84
  end
85
85
 
@@ -124,7 +124,7 @@ module When::Coordinates
124
124
  #
125
125
  class Branch < Residue
126
126
 
127
- Notes = {
127
+ Rules = {
128
128
  '大將軍' => %w(酉 酉 子 子 子 卯 卯 卯 午 午 午 酉),
129
129
  '大陰' => %w(戌 亥 子 丑 寅 卯 辰 巳 午 未 申 酉),
130
130
 
@@ -158,18 +158,18 @@ module When::Coordinates
158
158
  # 年の十二支で決まる暦注
159
159
  # @private
160
160
  def _year_notes(notes={}, dates=nil, conditions={})
161
- notes['大將軍'] ||= Notes['大將軍'][@remainder]
162
- notes['大陰' ] ||= Notes['大陰' ][@remainder]
163
- notes['歳刑' ] ||= Notes['歳刑' ][@remainder]
164
- notes['歳破' ] ||= Notes['破' ][@remainder]
165
- notes['歳煞' ] ||= Notes['煞' ][@remainder % 4]
166
- notes['黄幡' ] ||= Notes['黄幡' ][@remainder]
167
- notes['豹尾' ] ||= Notes['豹尾' ][@remainder]
161
+ notes['大將軍'] ||= Rules['大將軍'][@remainder]
162
+ notes['大陰' ] ||= Rules['大陰' ][@remainder]
163
+ notes['歳刑' ] ||= Rules['歳刑' ][@remainder]
164
+ notes['歳破' ] ||= Rules['破' ][@remainder]
165
+ notes['歳煞' ] ||= Rules['煞' ][@remainder % 4]
166
+ notes['黄幡' ] ||= Rules['黄幡' ][@remainder]
167
+ notes['豹尾' ] ||= Rules['豹尾' ][@remainder]
168
168
  if dates.range < 2
169
- notes['天道'] ||= Notes['天道' ][@remainder % 6]
170
- notes['人道'] ||= Notes['人道' ][@remainder % 6]
169
+ notes['天道'] ||= Rules['天道' ][@remainder % 6]
170
+ notes['人道'] ||= Rules['人道' ][@remainder % 6]
171
171
  else
172
- notes['歳次'] ||= Notes['歳次' ][@remainder]
172
+ notes['歳次'] ||= Rules['歳次' ][@remainder]
173
173
  end
174
174
  notes
175
175
  end
@@ -179,22 +179,22 @@ module When::Coordinates
179
179
  # @private
180
180
  def _month_notes(notes={}, dates=nil, conditions={})
181
181
  if dates.range < 2
182
- notes['天氣'] ||= Notes['天氣' ][@remainder] + '行'
183
- notes['天道'] ||= Notes['天道' ][@remainder % 6]
184
- notes['人道'] ||= Notes['人道' ][@remainder % 6]
185
- notes['月破'] ||= Notes['破' ][@remainder]
182
+ notes['天氣'] ||= Rules['天氣' ][@remainder] + '行'
183
+ notes['天道'] ||= Rules['天道' ][@remainder % 6]
184
+ notes['人道'] ||= Rules['人道' ][@remainder % 6]
185
+ notes['月破'] ||= Rules['破' ][@remainder]
186
186
  else
187
- notes['天道'] ||= Notes['天氣' ][@remainder] + '行'
187
+ notes['天道'] ||= Rules['天氣' ][@remainder] + '行'
188
188
  end
189
- notes['天徳' ] ||= Notes['天徳' ][@remainder]
190
- notes['月煞' ] ||= Notes['煞' ][@remainder % 4]
191
- notes['用時' ] ||= Notes['用時' ][@remainder % 3]
192
- notes['月徳' ] ||= Notes['月徳' ][@remainder % 4]
193
- notes['月徳合'] ||= Notes['月徳合'][@remainder % 4]
194
- notes['月空' ] ||= Notes['月空' ][@remainder % 4]
195
- notes['三鏡' ] ||= Notes['三鏡' ][@remainder]
196
- notes['土府' ] ||= Notes['土府' ][@remainder]
197
- notes['土公' ] ||= Notes['土公' ][@remainder]
189
+ notes['天徳' ] ||= Rules['天徳' ][@remainder]
190
+ notes['月煞' ] ||= Rules['煞' ][@remainder % 4]
191
+ notes['用時' ] ||= Rules['用時' ][@remainder % 3]
192
+ notes['月徳' ] ||= Rules['月徳' ][@remainder % 4]
193
+ notes['月徳合'] ||= Rules['月徳合'][@remainder % 4]
194
+ notes['月空' ] ||= Rules['月空' ][@remainder % 4]
195
+ notes['三鏡' ] ||= Rules['三鏡' ][@remainder]
196
+ notes['土府' ] ||= Rules['土府' ][@remainder]
197
+ notes['土公' ] ||= Rules['土公' ][@remainder]
198
198
  notes
199
199
  end
200
200
 
@@ -205,10 +205,10 @@ module When::Coordinates
205
205
 
206
206
  # 節月
207
207
  month = dates.s_date.cal_date[1]
208
- born = Notes['三禍'][month-1] + '年'
208
+ born = Rules['三禍'][month-1] + '年'
209
209
 
210
210
  # 具注暦(元嘉暦以来)
211
- notes['十二直'] ||= Notes['十二直'][(@remainder-month-1) % 12]
211
+ notes['十二直'] ||= Rules['十二直'][(@remainder-month-1) % 12]
212
212
  notes['歸忌' ] ||= @remainder == (month % 3) ? '歸忌' : nil
213
213
  notes['血忌' ] ||= @remainder == [1,7,2,8,3,9,4,10,5,11,6,0][month-1] ? '血忌' : nil
214
214
  notes['九坎' ] ||= @remainder == [4,1,10,7,3,0,9,6,2,11,8,5][month-1] ? '九坎' : nil
@@ -225,7 +225,7 @@ module When::Coordinates
225
225
  notes['狼藉' ] ||= @remainder == (dates.range >= 14 ? ((month-1) % 4) * 3 : # - wikipedia 「天火」におなじ
226
226
  [0,3,6,6,0,3,9,9,3,3,6,9][month-1]) ? born + '狼藉' : nil # %w(...酉..午.子...)
227
227
  notes['滅門' ] ||= @remainder == (month * 7 + 10) % 12 ? born + '滅門' : nil
228
- notes['下食時'] ||= @remainder == [7,10,4,2,6,0,8,9,5,11,1,3][month-1] ? Notes['下食時'][month-1] : nil
228
+ notes['下食時'] ||= @remainder == [7,10,4,2,6,0,8,9,5,11,1,3][month-1] ? Rules['下食時'][month-1] : nil
229
229
  notes['下食時'] = dates.range < 11 ? notes['下食時' ].sub(/\+/, '') : nil if /\+/ =~ notes['下食時'].to_s # '+' は貞享改暦以降記さない
230
230
  notes['無翹' ] ||= @remainder == (12-month) % 12 ? '無翹' : nil
231
231
  notes['不弔人'] ||= [4,6].include?(@remainder) ? '不弔人' : nil # 不断
@@ -266,9 +266,9 @@ module When::Coordinates
266
266
  # @private
267
267
  def _year_notes(notes={}, dates=nil, conditions={})
268
268
  unless dates.range < 2
269
- notes['大歳壇'] ||= '干' + Notes['大歳壇干'][(@remainder / 2) % 5] + '支' + Notes['大歳壇支'][@remainder % 12]
269
+ notes['大歳壇'] ||= '干' + Rules['大歳壇干'][(@remainder / 2) % 5] + '支' + Rules['大歳壇支'][@remainder % 12]
270
270
  end
271
- notes['納音'] ||= Notes['納音'][@remainder / 2]
271
+ notes['納音'] ||= Rules['納音'][@remainder / 2]
272
272
  notes['大歳'] ||= self
273
273
  notes
274
274
  end
@@ -289,36 +289,37 @@ module When::Coordinates
289
289
  year, month = dates.s_date.cal_date
290
290
 
291
291
  # 具注暦(元嘉暦以来)
292
- notes['納音'] ||= Notes['納音'][@remainder / 2]
293
- notes['日遊'] ||= dates.range < 2 ? Notes['日遊'][@remainder] :
292
+ notes['納音'] ||= Rules['納音'][@remainder / 2]
293
+ notes['日遊'] ||= dates.range < 2 ? Rules['日遊'][@remainder] :
294
294
  [4,5,14,15,24,25,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,54,55].include?(@remainder) ? '内' : nil
295
295
  notes['天赦'] ||= @remainder == [14,30,44,00][(month-1)/3] ? '天赦' : nil
296
296
 
297
297
  # 宣明暦以前は節月、貞享暦以後は暦月
298
- m = dates.range < 11 ? month : (dates.m_date.cal_date[1] * 1)
298
+ # m = dates.range < 11 ? month : (dates.m_date.cal_date[1] * 1)
299
+ m = month
299
300
  # 凶会日
300
- kue = Notes['凶会'][m-1][@remainder]
301
+ kue = Rules['凶会'][m-1][@remainder]
301
302
  # 貞享暦で廃止された凶会日を除外
302
303
  kue = dates.range < 11 ? kue.sub(/\+/, '') : nil if /\+/ =~ kue
303
304
  notes['凶会'] = kue
304
305
 
305
306
  # 凶会日に省略される吉日
306
- _notes_without_kue(notes, month, dates.range < 2 ? '歳' : '大歳', (conditions[:sai]||0).to_s) unless notes['凶会']
307
+ _notes_without_kue(notes, month, dates.range < 2 ? '歳' : '大歳', conditions[:sai] ? conditions[:sai].to_s != '0' : nil) unless notes['凶会']
307
308
 
308
309
  # 具注暦(大衍暦以来)
309
310
  notes['天一'] ||= begin
310
- note = Notes['天一'][@remainder]
311
+ note = Rules['天一'][@remainder]
311
312
  dates.range >= 15 ? note.dup.sub!(/天上始/, '天上') :
312
313
  dates.range >= 11 ? note : note.dup.sub!(/始/, '')
313
314
  end
314
- notes['土公'] ||= Notes['土公'][@remainder]
315
+ notes['土公'] ||= Rules['土公'][@remainder]
315
316
  notes['五墓'] ||= [4,22,28,31,37].include?(@remainder) ? '五墓' : nil
316
317
  notes['伐' ] ||= [6,12,14,15,17,19,20,21,23,28,49,58].include?(@remainder) ? '伐' : nil
317
318
 
318
319
  # 節年に依存する暦注
319
320
  div, mod = @remainder.divmod(12)
320
- base_dir = Notes['環'][year % 12]
321
- move_dir = Notes['遊'][div]
321
+ base_dir = Rules['環'][year % 12]
322
+ move_dir = Rules['遊'][div]
322
323
  unless base_dir == move_dir
323
324
  event = '遊' + move_dir if mod == 0
324
325
  event = '環' + base_dir if mod == 5
@@ -334,51 +335,51 @@ module When::Coordinates
334
335
  notes['六蛇'] ||= (month-1) / 3 == 3 && [48,59].include?(@remainder) ? '六蛇' : nil
335
336
 
336
337
  # 宣明暦以前は節月、貞享暦以後は暦月?
337
- notes['三寶吉'], notes['神吉'], notes['雑事吉'], notes['小字注'] = Notes['吉事注'][m-1][@remainder]
338
+ notes['三寶吉'], notes['神吉'], notes['雑事吉'], notes['小字注'] = Rules['吉事注'][m-1][@remainder]
338
339
 
339
340
  # 仮名暦
340
341
  unless notes['金神遊行']
341
342
  div, mod = @remainder.divmod(12)
342
- note = (2..6).include?(mod) ? '平素' + Notes['平素遊行'][div] : ''
343
- range, dir = Notes['四季遊行'][(month-1) / 3]
343
+ note = (2..6).include?(mod) ? '平素' + Rules['平素遊行'][div] : ''
344
+ range, dir = Rules['四季遊行'][(month-1) / 3]
344
345
  note += range.include?(@remainder) ? '四季' + dir : ''
345
346
  notes['金神遊行'] = note == '' ? nil : note
346
347
  end
347
348
  notes['甲子待'] ||= @remainder == 0 ? '甲子待' : nil
348
349
  notes['己巳' ] ||= @remainder == 5 ? '己巳' : nil
349
350
  notes['庚申待'] ||= @remainder == 56 ? '庚申待' : nil
350
- notes['大明' ] ||= [5,6,7,8,9,13,15,18,20,23,28,31,38,40,41,42,43,45,46,47,52,54,55,56,57].include?(@remainder) ? '大明' : nil
351
351
  notes['犯土' ] ||= [7,8,9,10,11].include?(@remainder) ? '大犯土' : {6 =>'大犯土始', 12=>'大犯土終', 13=>'犯土間日'}[@remainder]
352
352
  notes['犯土' ] ||= [15,16,17,18,19].include?(@remainder) ? '小犯土' : {14=>'小犯土始', 20=>'小犯土終'}[@remainder]
353
353
  notes['十方暮'] ||= [21,22,23,24,25,26,27,28].include?(@remainder) ? '十方暮' : {20=>'十方暮始', 29=>'十方暮終'}[@remainder]
354
354
  unless notes['八專']
355
- note = Notes['八專'][@remainder]
355
+ note = Rules['八專'][@remainder]
356
356
  note = note.sub('始','入') if note && (9..10).include?(dates.range)
357
357
  notes['八專'] = note
358
358
  end
359
- notes['八專間日'] ||= [49,52,54,58,59].include?(@remainder) ? '八專間日' : nil
359
+ notes['八專間日'] ||= [49,52,54,58].include?(@remainder) ? '八專間日' : nil
360
360
  end
361
361
 
362
362
  private
363
363
 
364
364
  def _notes_without_kue(notes, month, daisai, variation)
365
365
  notes['天恩'] ||= [0,3,9].include?(@remainder / 5) ? '天恩' : nil
366
+ notes['大明'] ||= [5,6,7,8,9,13,15,18,20,23,28,31,38,40,41,42,43,45,46,47,52,54,55,56,57].include?(@remainder) ? '大明' : nil
366
367
 
367
368
  return notes if notes['大小歳']
368
369
 
369
- unless variation == '0'
370
- note = Notes['大小歳差分'][[month, @remainder]]
370
+ if variation
371
+ note = Rules['大小歳差分'][[month, @remainder]]
371
372
  if note
372
373
  notes['大小歳'] = daisai + note
373
374
  return
374
375
  end
375
376
  end
376
377
 
377
- index = Notes['大小歳'][0].map {|pattern|
378
+ index = Rules['大小歳'][0].map {|pattern|
378
379
  k = 4.times {|i|
379
- break i if Notes['大小歳'][1][@remainder] =~ pattern[i]
380
+ break i if Rules['大小歳'][1][@remainder] =~ pattern[i]
380
381
  }
381
- k == 4 ? nil : Notes['大小歳'][2][(k+(month-1)/3) % 4]
382
+ k == 4 ? nil : Rules['大小歳'][2][(k+(month-1)/3) % 4]
382
383
  }
383
384
  notes['大小歳'] = (index[0] ? '大小歳' + index[0] : '') +
384
385
  (index[1] ? daisai + index[1] : '') +
@@ -386,7 +387,7 @@ module When::Coordinates
386
387
  notes.delete('大小歳') if notes['大小歳'] == ''
387
388
  end
388
389
 
389
- Notes = {
390
+ Rules = {
390
391
  '大歳壇干' => %w(木 火 土 金 水),
391
392
  '大歳壇支' => %w(水 土 木 木 土 火 火 土 金 金 土 水),
392
393
  '納音' => %w(海中金 爐中火 大林木 路傍土 釼鋒金 山頭火 澗下水 城頭土 白鑞金 楊柳木
@@ -0,0 +1,228 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ module When
9
+
10
+ class TM::CalendarEra
11
+
12
+ # Japanese Luni-Solar Calendar Series for JapaneseNote
13
+ JapaneseLuniSolarSeries = [self, [
14
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
15
+ 'locale:[=en:, ja=ja:, alias]',
16
+ 'area:[JapaneseLuniSolarSeries=, 日本の暦月=]',
17
+ ['[平朔儀鳳暦=]-660.01.01', '@F', "-660-01-01^JapaneseTwin::平朔儀鳳暦"],
18
+ ['[元嘉暦]454.01.01', '@CR', "454-01-01^ChineseTwin::元嘉暦"],
19
+ ['[儀鳳暦]697.01.01', '@CR', "697-01-01^ChineseTwin::麟徳暦"],
20
+ ['[大衍暦]764.01.01', '@CR', "764-01-01^ChineseTwin::大衍暦"],
21
+ ['[五紀暦]858.01.01', '@CR', "858-01-01^ChineseTwin::五紀暦"],
22
+ ['[宣明暦]862.01.01', '@CR', "862-01-01^ChineseTwin::宣明暦"],
23
+ ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦"],
24
+ ['[貞享暦]1687.01.01', '@CR', "1687-01-01^JapaneseTwin::貞享暦" ],
25
+ ['[宝暦癸酉暦=]1753.01.01', '@CR', "1753-01-01^JapaneseTwin::宝暦癸酉暦"],
26
+ ['[宝暦甲戌暦=]1754.01.01', '@CR', "1754-01-01^JapaneseTwin::宝暦甲戌暦"],
27
+ ['[宝暦暦]1755.01.01', '@CR', "1755-01-01^JapaneseTwin::宝暦暦" ],
28
+ ['[修正宝暦暦=]1771.01.01', '@CR', "1771-01-01^JapaneseTwin::修正宝暦暦"],
29
+ ['[寛政暦]1798.01.01', '@CR', "1798-01-01^JapaneseTwin::寛政暦" ], # 京都平均太陽時
30
+ ['[寛政丁亥暦]1827.01.01', '@CR', "1827-01-01^JapaneseTwin::寛政丁亥暦"], # 京都平均太陽時
31
+ ['[天保暦]1844.01.01', '@CR', "1844-01-01^JapaneseTwin::天保暦" ], # 京都真太陽時
32
+ ['[JLSO=,旧々暦=]1872.12.03','@CR', "1872-12-03^JapaneseTwin::旧々暦" ], # 東京平均太陽時
33
+ ['[JLS=,旧暦]1887.11.18', '@CR', "1887-11-18^JapaneseTwin::旧暦" ] # 日本標準時
34
+ ]]
35
+
36
+ # Japanese Solar Calendar Series for JapaneseNote
37
+ JapaneseSolarSeries = [self, [
38
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
39
+ 'locale:[=en:, ja=ja:, alias]',
40
+ 'area:[JapaneseSolarSeries=, 日本の節月=]',
41
+ ['[平朔儀鳳暦=]-661.01.01', '@F', "-661-01-01^JapaneseTwin::平朔儀鳳暦(節月)"], # 年の始めに遡って開始(実際は12.22)
42
+ ['[元嘉暦]454.01.12', '@CR', "454-01-12^ChineseTwin::元嘉暦(節月)"],
43
+ ['[儀鳳暦]696.12.27', '@CR', "696-12-27^ChineseTwin::麟徳暦(節月)"],
44
+ ['[大衍暦]764.01.06', '@CR', "764-01-06^ChineseTwin::大衍暦(節月)"],
45
+ ['[五紀暦]857.12.19', '@CR', "857-12-19^ChineseTwin::五紀暦(節月)"],
46
+ ['[宣明暦]862.01.03', '@CR', "862-01-03^ChineseTwin::宣明暦(節月)"],
47
+ ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦(節月)"],
48
+ ['[貞享暦]1687.01.08', '@CR', "1687-01-08^JapaneseTwin::貞享暦(節月)" ],
49
+ ['[宝暦癸酉暦=]1752.12.30', '@CR', "1752-12-30^JapaneseTwin::宝暦癸酉暦(節月)"],
50
+ ['[宝暦甲戌暦=]1753.12.19', '@CR', "1753-12-19^JapaneseTwin::宝暦甲戌暦(節月)"],
51
+ ['[宝暦暦]1755.01.07', '@CR', "1755-01-07^JapaneseTwin::宝暦暦(節月)" ],
52
+ ['[修正宝暦暦=]1771.01.11', '@CR', "1771-01-11^JapaneseTwin::修正宝暦暦(節月)"],
53
+ ['[寛政暦]1798.01.12', '@CR', "1798-01-12^JapaneseTwin::寛政暦(節月)" ],
54
+ ['[寛政丁亥暦]1826.12.22', '@CR', "1826-12-22^JapaneseTwin::寛政丁亥暦(節月)"],
55
+ ['[天保暦]1844.01.14', '@CR', "1844-01-14^JapaneseTwin::天保暦(節月)" ], # 京都真太陽時
56
+ ['[JSO=,旧々暦=]1872.11.26', '@CR', "1872-11-26^JapaneseTwin::旧々暦(節月)" ], # 東京平均太陽時
57
+ ['[JS=,旧暦]1887.11.26', '@CR', "1887-11-26^JapaneseTwin::旧暦(節月)" ] # 日本標準時
58
+ ]]
59
+ end
60
+
61
+ module CalendarTypes
62
+
63
+ _japanese_common = {
64
+ 'year_delta' => 1, # 冬至年の変化率 / (10^(-6)日/年)
65
+ 'year_span' => 1, # 冬至年の改訂周期 / 年
66
+ 'lunation_length' => 29.530590, # 朔実(朔望月)
67
+ 'lunar_mean_motion' => 13.36875, # 月平行(恒星天に対する月の平均運動 / 日)
68
+ 'anomalistic_month_length' => 27.5546, # 転終(近点月)
69
+ 'anomaly_method' => 'c', # (経朔-定朔)の計算方法(a:差分, b:微分, c:幾何学的補正)
70
+ 'anomaly_precision' => 1e-5, # c 方式 での収束判定誤差 / 日
71
+ 'lunar_unit' => 0.1, # 太陰遅速計算用招差法定数の時間の単位(限)
72
+ 'solar_weight' => 1, # (経朔-定朔)の計算で用いる実行差での太陽盈縮の重み(0:非考慮,1:考慮)
73
+ 'm' => [ # 太陰遅速計算用招差法定数
74
+ [ 0 ... 72.65342, 0, [-0, -1173_1000, +3_7000, +400]],
75
+ [ 72.65342...137.773, 137.773, [-0, -1324_0000, +5_2000, +500]],
76
+ [137.773 ...202.89258, 137.773, [+0, +1324_0000, -5_2000, -500]],
77
+ [202.89258.. 275.546, 275.546, [+0, +1173_1000, -3_7000, -400]]
78
+ ],
79
+ 's' => [ # 太陽盈縮計算用招差法定数
80
+ [ 0 ... 89.25392, 0, [0, +436_0000, -2_0000, -34]],
81
+ [ 89.25392 ...182.620848, 182.620848, [0, +411_9800, -1_7640, -31]],
82
+ [182.620848...275.987776, 182.620848, [0, -411_9800, +1_7640, +31]],
83
+ [275.987776.. 365.241696, 365.241696, [0, -436_0000, +2_0000, +34]]
84
+ ]
85
+ }
86
+
87
+ JapaneseTwin = [{}, When::BasicTypes::M17n, ChineseSolar.twin('JapaneseTwin', [
88
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
89
+ "locale:[=ja:, en=en:, alias]",
90
+ "area:[日本,Japan]",
91
+
92
+ [ChineseLuniSolar,
93
+ 'name:[平朔儀鳳暦=]',
94
+ 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
95
+ ],
96
+
97
+ [ChineseLuniSolar,
98
+ 'name:[貞享乙丑暦=]',
99
+ {'formula'=>['12S', '1L'].map {|f| [
100
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
101
+ 'formula' => f,
102
+ 'day_epoch' => 2336111 + 7.675, # 暦元天正冬至のユリウス日
103
+ 'year_epoch' => 1684, # 暦元の西暦年
104
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
105
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
106
+ 'lunation_shift' => 2.779 - 0.015, # 閏應(暦元前経朔から暦元天正冬至までの日数)
107
+ 'anomalistic_month_shift' => 22.72 - 0.015 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
108
+ })]
109
+ }
110
+ }
111
+ ],
112
+
113
+ [ChineseLuniSolar,
114
+ 'name:[貞享暦]',
115
+ {'formula'=>['12S', '1L'].map {|f| [
116
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
117
+ 'formula' => f,
118
+ 'day_epoch' => 2336111 + 7.69 , # 暦元天正冬至のユリウス日
119
+ 'year_epoch' => 1684, # 暦元の西暦年
120
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
121
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
122
+ 'lunation_shift' => 2.779, # 閏應(暦元前経朔から暦元天正冬至までの日数)
123
+ 'anomalistic_month_shift' => 22.72 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
124
+ })]
125
+ }
126
+ }
127
+ ],
128
+
129
+ [ChineseLuniSolar,
130
+ 'name:[宝暦癸酉暦=]',
131
+ {'formula'=>['12S', '1L'].map {|f| [
132
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
133
+ 'formula' => f,
134
+ 'day_epoch' => 2336111 + 7.9038,# 暦元天正冬至のユリウス日
135
+ 'year_epoch' => 1684, # 暦元の西暦年
136
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
137
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
138
+ 'lunation_shift' => 2.779 + 0.2138, # 閏應(暦元前経朔から暦元天正冬至までの日数)
139
+ 'anomalistic_month_shift' => 22.72 + 0.2138 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
140
+ })]
141
+ }
142
+ }
143
+ ],
144
+
145
+ [ChineseLuniSolar,
146
+ 'name:[宝暦甲戌暦=]',
147
+ {'formula'=>['12S', '1L'].map {|f| [
148
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
149
+ 'formula' => f,
150
+ 'day_epoch' => 2336111 + 7.6223,# 暦元天正冬至のユリウス日
151
+ 'year_epoch' => 1684, # 暦元の西暦年
152
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
153
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
154
+ 'lunation_shift' => 2.779 - 0.0677, # 閏應(暦元前経朔から暦元天正冬至までの日数)
155
+ 'anomalistic_month_shift' => 22.72 - 0.0677 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
156
+ })]
157
+ }
158
+ }
159
+ ],
160
+
161
+ [ChineseLuniSolar,
162
+ 'name:[宝暦暦]',
163
+ {'formula'=>['12S', '1L'].map {|f| [
164
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
165
+ 'formula' => f,
166
+ 'day_epoch' => 2361671 + 14.536, # 暦元天正冬至のユリウス日
167
+ 'year_epoch' => 1754, # 暦元の西暦年
168
+ 'year_length' => 365.241556, # 暦元の冬至年 / 日
169
+ 'anomalistic_year_shift' => 6.455, # 暦應(冬至から近日点通過までの日数)
170
+ 'lunation_shift' => 25.654, # 閏應(暦元前経朔から暦元天正冬至までの日数)
171
+ 'anomalistic_month_shift' => 18.88, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
172
+ 's' => ChineseSolar.change_unit(365.241556 / 365.241696, _japanese_common['s'])
173
+ })]
174
+ }
175
+ }
176
+ ],
177
+
178
+ [ChineseLuniSolar,
179
+ 'name:[修正宝暦暦=]',
180
+ {'formula'=>['12S', '1L'].map {|f| [
181
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
182
+ 'formula' => f,
183
+ 'day_epoch' => 2361671 + 14.681, # 暦元天正冬至のユリウス日
184
+ 'year_epoch' => 1754, # 暦元の西暦年
185
+ 'year_length' => 365.241626, # 暦元の冬至年 / 日
186
+ 'anomalistic_year_shift' => 7.42, # 暦應(冬至から近日点通過までの日数)
187
+ 'lunation_shift' => 25.82, # 閏應(暦元前経朔から暦元天正冬至までの日数)
188
+ 'anomalistic_month_shift' => 19.307, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
189
+ 's' => ChineseSolar.change_unit(365.241626 / 365.241696, _japanese_common['s'])
190
+ })]
191
+ }
192
+ }
193
+ ],
194
+
195
+ [ChineseLuniSolar,
196
+ 'name:[寛政暦]',
197
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
198
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=1000',
199
+ 'Formula']}
200
+ ],
201
+
202
+ [ChineseLuniSolar,
203
+ 'name:[寛政丁亥暦]',
204
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
205
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=10',
206
+ 'Formula']}
207
+ ],
208
+
209
+ [ChineseLuniSolar,
210
+ 'name:[天保暦]',
211
+ 'time_basis:LAT?long=135.4520E&lat=35.0117N',
212
+ 'intercalary_span:3'
213
+ ],
214
+
215
+ [ChineseLuniSolar,
216
+ 'name:[旧々暦=]',
217
+ 'time_basis:+09:18:59',
218
+ 'intercalary_span:3'
219
+ ],
220
+
221
+ [ChineseLuniSolar,
222
+ 'name:[旧暦]',
223
+ 'time_basis:+09:00',
224
+ 'intercalary_span:3'
225
+ ]
226
+ ])]
227
+ end
228
+ end