when_exe 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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