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,964 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-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
+ require 'when_exe/region/japanese_residues'
9
+
10
+ class When::CalendarTypes::CalendarNote
11
+
12
+ #
13
+ # 日本暦注
14
+ #
15
+ class JapaneseNote < self
16
+
17
+ #
18
+ # 日本暦注の要素
19
+ #
20
+ class Notes < When::CalendarTypes::CalendarNote::NoteElement; end
21
+
22
+ NoteTypes = [
23
+ # 開始年 暦法 土用のオフセット
24
+ [-660, '儀鳳暦' ],
25
+ [ 454, '元嘉暦' ],
26
+ [ 697, '麟徳暦', (Rational( 4,15) + 244) / 1340 ], # 啓蟄 <-> 雨水
27
+ [ 764, '大衍暦', (Rational(13,30) + 531) / 3040 ],
28
+ [ 858, '五紀暦', (Rational( 4,15) + 244) / 1340 ],
29
+ [ 862, '宣明暦', (Rational( 1, 2) + 1468) / 8400 ],
30
+ [1685, ['timezone=32584.4/3600', '前貞享暦(節月)' ]],
31
+ [1687, ['timezone=32584.4/3600', '貞享暦(節月)' ]],
32
+ [1753, ['timezone=32584.4/3600', '前々宝暦暦(節月)']],
33
+ [1754, ['timezone=32584.4/3600', '前宝暦暦(節月)' ]],
34
+ [1755, ['timezone=32584.4/3600', '宝暦暦(節月)' ]],
35
+ [1771, ['timezone=32584.4/3600', '修正宝暦暦(節月)']],
36
+ [1798, ['timezone=32584.4/3600', '寛政暦(節月)' ]],
37
+ [1844, 'timezone=32584.4/3600'], # 京都平均太陽時の定朔定気法太陰太陽暦(天保暦の代用)
38
+ [1873, 'timezone=33539/3600' ], # 東京平均太陽時の定朔定気法太陰太陽暦
39
+ [1888, 'timezone=9'] # 日本標準時の定朔定気法太陰太陽暦
40
+ ].reverse
41
+
42
+ NoteObjects = [When::BasicTypes::M17n, [
43
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
44
+ "locale:[=ja:]",
45
+ "names:[日本暦注]",
46
+
47
+ # 年の暦注 ----------------------------
48
+ [When::BasicTypes::M17n,
49
+ "names:[年]",
50
+ [Notes, "label:[干支]", 'position:共通'], # 干支
51
+ # [Notes, "label:[干=ja:%E5%8D%81%E5%B9%B2]",
52
+ # 'position:共通'], # 干
53
+ # [Notes, "label:[支=ja:%E5%8D%81%E4%BA%8C%E6%94%AF]",
54
+ # 'position:共通'], # 支
55
+ [Notes, "label:[九星]", 'position:民間'], # 九星
56
+ [Notes, "label:[大歳壇=]", 'position:暦序'], # 干支
57
+ [Notes, "label:[納音]", 'position:暦序', 'suffix:是'], # 干支
58
+ [Notes, "label:[大歳=ja:%E5%A4%AA%E6%AD%B3%E7%A5%9E]",
59
+ 'position:暦序', 'suffix:在'], # 干支
60
+ [Notes, "label:[大将軍=ja:%E5%A4%A7%E5%B0%86%E8%BB%8D_(%E6%96%B9%E4%BD%8D%E7%A5%9E)]",
61
+ 'position:暦序', 'suffix:在'], # 支
62
+ [Notes, "label:[大陰=ja:%E5%A4%A7%E9%99%B0]",
63
+ 'position:暦序', 'suffix:在'], # 支
64
+ [Notes, "label:[歳徳=ja:%E6%AD%B3%E5%BE%B3%E7%A5%9E]",
65
+ 'position:暦序', 'suffix:在'], # 干
66
+ [Notes, "label:[歳刑=ja:%E6%AD%B3%E5%88%91%E7%A5%9E]",
67
+ 'position:暦序', 'suffix:在'], # 支
68
+ [Notes, "label:[歳破=ja:%E6%AD%B3%E7%A0%B4%E7%A5%9E]",
69
+ 'position:暦序', 'suffix:在'], # 支
70
+ [Notes, "label:[歳煞=ja:%E6%AD%B3%E6%AE%BA%E7%A5%9E]",
71
+ 'position:暦序', 'suffix:在'], # 支
72
+ [Notes, "label:[黄幡=ja:%E9%BB%84%E5%B9%A1%E7%A5%9E]",
73
+ 'position:暦序', 'suffix:在'], # 支
74
+ [Notes, "label:[豹尾=ja:%E8%B1%B9%E5%B0%BE%E7%A5%9E]",
75
+ 'position:暦序', 'suffix:在'], # 支
76
+ [Notes, "label:[歳次=]", 'position:暦序', 'suffix:-'], # 支
77
+ [Notes, "label:[金神]", 'position:仮名暦', 'suffix:在'] # 干
78
+ ],
79
+
80
+ # 月の暦注 ----------------------------
81
+ [When::BasicTypes::M17n,
82
+ "names:[月]",
83
+ [Notes, "label:[月名=ja:%E6%9C%88_(%E6%9A%A6)#.E6.97.A5.E6.9C.AC.E3.81.AE.E5.92.8C.E9.A2.A8.E6.9C.88.E5.90.8D]",
84
+ 'position:月建'], # 月の和名
85
+ # [Notes, "label:[干支]", 'position:共通'], # 干支
86
+ # [Notes, "label:[干=ja:%E5%8D%81%E5%B9%B2]",
87
+ # 'position:共通'], # 干
88
+ # [Notes, "label:[支=ja:%E5%8D%81%E4%BA%8C%E6%94%AF]",
89
+ # 'position:共通'], # 支
90
+ [Notes, "label:[九星]", 'position:民間'], # 九星
91
+ [Notes, "label:[月建=]", 'position:月建', 'suffix:-'], # 干支
92
+ [Notes, "label:[天道=]", 'position:月建', 'suffix:-'], # 干
93
+ [Notes, "label:[天徳=]", 'position:月建', 'suffix:在'], # 干
94
+ [Notes, "label:[月煞=]", 'position:月建', 'suffix:在'], # 干
95
+ [Notes, "label:[用時=]", 'position:月建'], # 干
96
+ [Notes, "label:[月徳=]", 'position:月建', 'suffix:在'], # 干
97
+ [Notes, "label:[月徳合=]", 'position:月建', 'suffix:在'], # 干
98
+ [Notes, "label:[月空=]", 'position:月建', 'suffix:在'], # 干
99
+ [Notes, "label:[三鏡=]", 'position:月建'], # 干
100
+ [Notes, "label:[土府=]", 'position:月建', 'suffix:在'], # 干
101
+ [Notes, "label:[土公=ja:%E5%9C%9F%E5%85%AC%E7%A5%9E]",
102
+ 'position:月建', 'suffix:在'] # 干
103
+ ],
104
+
105
+ # 日の暦注 ----------------------------
106
+ [When::BasicTypes::M17n,
107
+ "names:[日]",
108
+ [Notes, "label:[干支]", 'position:共通'], # 干支
109
+ # [Notes, "label:[干=ja:%E5%8D%81%E5%B9%B2]",
110
+ # 'position:共通'], # 干
111
+ # [Notes, "label:[支=ja:%E5%8D%81%E4%BA%8C%E6%94%AF]",
112
+ # 'position:共通'], # 支
113
+ [Notes, "label:[納音]", 'position:共通', 'suffix:是'], # 干支
114
+ [Notes, "label:[十二直]", 'position:共通'], # 支 節月
115
+ [Notes, "label:[七曜]", 'position:共通'], # 七曜
116
+ [Notes, "label:[廿八宿=ja:%E4%BA%8C%E5%8D%81%E5%85%AB%E5%AE%BF]",
117
+ 'position:共通'], # 廿八宿
118
+ [Notes, "label:[廿七宿=ja:%E4%BA%8C%E5%8D%81%E4%B8%83%E5%AE%BF]",
119
+ 'position:共通'], # 暦月 暦日
120
+ [Notes, "label:[九星]", 'position:民間'], # 九星
121
+ [Notes, "label:[六曜]", 'position:民間'], # 暦月 暦日
122
+ [Notes, "label:[祝祭日]", 'position:祝祭日'], # 暦月 暦日 (七曜)
123
+
124
+ [Notes, "label:[節中=]", 'position:時候'], # 太陽黄経
125
+ [Notes, "label:[廿四節気=ja:%E4%BA%8C%E5%8D%81%E5%9B%9B%E7%AF%80%E6%B0%97]",
126
+ 'position:時候'], # 太陽黄経
127
+ [Notes, "label:[七十二候]", 'position:時候'], # 太陽黄経
128
+ [Notes, "label:[六十卦=]", 'position:時候'], # 太陽黄経
129
+ [Notes, "label:[入梅]", 'position:雑節'], # 干 太陽黄経
130
+
131
+ [Notes, "label:[大禍=ja:%E5%A4%A7%E7%A6%8D%E6%97%A5#.E5.A4.A7.E7.A6.8D.E6.97.A5]",
132
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 支 節月
133
+ [Notes, "label:[滅門=ja:%E6%BB%85%E9%96%80%E6%97%A5#.E6.BB.85.E9.96.80.E6.97.A5]",
134
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 支 節月
135
+ [Notes, "label:[狼藉=ja:%E6%9A%A6%E6%B3%A8%E4%B8%8B%E6%AE%B5#.E7.8B.BC.E8.97.89.E6.97.A5]",
136
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 支 節月
137
+
138
+ [Notes, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 七曜 廿七宿
139
+ [Notes, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 七曜 廿七宿
140
+ [Notes, "label:[羅刹=]", 'position:中段 中段 上段 上段'], # 七曜 廿七宿
141
+
142
+ [Notes, "label:[大将軍=ja:%E5%A4%A7%E5%B0%86%E8%BB%8D_(%E6%96%B9%E4%BD%8D%E7%A5%9E)]",
143
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 干支 節年
144
+ [Notes, "label:[天一=ja:%E5%A4%A9%E4%B8%80%E7%A5%9E]",
145
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 干支
146
+ [Notes, "label:[土公=ja:%E5%9C%9F%E5%85%AC%E7%A5%9E]",
147
+ 'position:上段 上段 上段 上段'], # 干支
148
+ [Notes, "label:[歳下食=ja:%E6%AD%B3%E4%B8%8B%E9%A3%9F#.E6.AD.B3.E4.B8.8B.E9.A3.9F]",
149
+ 'position:上段 上段 上段 上段'], # 干支 節年
150
+ [Notes, "label:[忌遠行=]", 'position:上段 中段 上段 上段'], # 支 節月
151
+ [Notes, "label:[忌夜行=]", 'position:上段 中段 上段 上段'], # 支 節月
152
+ [Notes, "label:[下食時=ja:%E4%B8%8B%E9%A3%9F%E6%99%82#.E6.99.82.E4.B8.8B.E9.A3.9F]",
153
+ 'position:上段 上段 上段 上段'], # 支 節月 貞享暦で一部廃止
154
+ [Notes, "label:[天間=]", 'position:上段 中段 上段 中段上'], # 干支 節月
155
+ [Notes, "label:[不視病=]", 'position:上段 上段 上段 上段'], # 干
156
+ [Notes, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 干
157
+ [Notes, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 支
158
+ [Notes, "label:[社=ja:%E7%A4%BE%E6%97%A5]",
159
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 干 太陽黄経
160
+ [Notes, "label:[三伏]", 'position:中段 中段 中段 中段'], # 干 太陽黄経
161
+ [Notes, "label:[除手足甲=]", 'position:中段 中段 中段 中段'], # 晦(除手足甲)、支(片方のみ), 没滅凶会日×
162
+ [Notes, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 支 没滅凶会日×
163
+ [Notes, "label:[臘=ja:%E8%87%98%E6%97%A5]",
164
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 支 太陽黄経
165
+ [Notes, "label:[伐=]", 'position:上段 中段 中段 中段上', 'suffix:日'], # 干支
166
+ [Notes, "label:[五墓=ja:%E4%BA%94%E5%A2%93%E6%97%A5#.E4.BA.94.E5.A2.93.E6.97.A5]",
167
+ 'position:上段 上段 中段 中段下', 'suffix:日'], # 干支
168
+ [Notes, "label:[九虎=]", 'position:上段 中段 中段 中段上'], # 干支 節月
169
+ [Notes, "label:[八龍=]", 'position:上段 上段 中段 中段上'], # 干支 節月
170
+ [Notes, "label:[七鳥=]", 'position:上段 上段 中段 中段上'], # 干支 節月
171
+ [Notes, "label:[六蛇=]", 'position:上段 上段 中段 中段上'], # 干支 節月
172
+
173
+ [Notes, "label:[没=ja:%E6%B2%A1%E6%97%A5]",
174
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 太陽黄経
175
+ [Notes, "label:[日食]", 'position:中段 中段 中段 中段'], # 日食表
176
+ [Notes, "label:[滅=ja:%E6%BB%85%E6%97%A5]",
177
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 月の位相
178
+ [Notes, "label:[月食]", 'position:中段 中段 中段 中段'], # 月食表
179
+ [Notes, "label:[月相]", 'position:中段 中段 中段 中段'], # 月の位相
180
+ [Notes, "label:[土用事=ja:%E5%9C%9F%E7%94%A8]",
181
+ 'position:中段 中段 中段 中段'], # 太陽黄経
182
+ [Notes, "label:[伏龍=]", 'position:上段 上段 下段 下段', 'suffix:在'], # 太陽黄経
183
+
184
+ [Notes, "label:[凶会=ja:%E5%87%B6%E4%BC%9A%E6%97%A5#.E5.87.B6.E4.BC.9A.E6.97.A5]",
185
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
186
+ [Notes, "label:[大小歳=]", 'position:下段 下段 下段 下段'], # 干支 節月
187
+ [Notes, "label:[歳徳=ja:%E6%AD%B3%E5%BE%B3%E7%A5%9E]",
188
+ 'position:下段 下段 下段 下段',], # 干 節年 凶会日× ~合も
189
+ [Notes, "label:[天恩=ja:%E5%A4%A9%E6%81%A9%E6%97%A5#.E5.A4.A9.E6.81.A9.E6.97.A5]",
190
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 干支 節月 凶会日×
191
+ [Notes, "label:[天赦=ja:%E6%9A%A6%E6%B3%A8%E4%B8%8B%E6%AE%B5#.E5.A4.A9.E8.B5.A6.E6.97.A5]",
192
+ 'position:下段 下段 下段 下段'], # 干支 節月
193
+ [Notes, "label:[母倉=ja:%E6%AF%8D%E5%80%89%E6%97%A5#.E6.AF.8D.E5.80.89.E6.97.A5]",
194
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 支 節月 凶会日×
195
+ [Notes, "label:[月徳=]", 'position:下段 下段 下段 下段',], # 干 節月 凶会日× ~合も
196
+ [Notes, "label:[九坎=]", 'position:下段 下段 下段 下段'], # 支 節月
197
+ [Notes, "label:[帰忌=ja:%E5%B8%B0%E5%BF%8C%E6%97%A5#.E5.B8.B0.E5.BF.8C.E6.97.A5]",
198
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 支 節月
199
+ [Notes, "label:[血忌=ja:%E8%A1%80%E5%BF%8C%E6%97%A5#.E8.A1.80.E5.BF.8C.E6.97.A5]",
200
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 支 節月
201
+ [Notes, "label:[無翹=]", 'position:下段 下段 下段 下段'], # 支 節月
202
+ [Notes, "label:[厭=]", 'position:下段 下段 下段 下段'], # 支 節月
203
+ [Notes, "label:[重=ja:%E9%87%8D%E6%97%A5#.E9.87.8D.E6.97.A5]",
204
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 支
205
+ [Notes, "label:[復=ja:%E5%BE%A9%E6%97%A5#.E5.BE.A9.E6.97.A5]",
206
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 干 節月
207
+ [Notes, "label:[月煞=]", 'position:下段 下段 下段 下段', 'suffix:在'], # 支 節月
208
+ [Notes, "label:[往亡=ja:%E5%BE%80%E4%BA%A1%E6%97%A5#.E5.BE.80.E4.BA.A1.E6.97.A5]",
209
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 太陽黄経
210
+ [Notes, "label:[日遊=ja:%E6%97%A5%E9%81%8A%E7%A5%9E]",
211
+ 'position:最下段', 'suffix:在'], # 干支
212
+
213
+ [Notes, "label:[受死=ja:%E5%8F%97%E6%AD%BB%E6%97%A5#.E5.8F.97.E6.AD.BB.E6.97.A5]",
214
+ 'position:仮名暦', 'suffix:日'], # 支 節月
215
+ [Notes, "label:[彼岸]", 'position:仮名暦'], # 太陽黄経
216
+ [Notes, "label:[八専]", 'position:仮名暦'], # 干支
217
+ [Notes, "label:[金神間日=ja:%E9%87%91%E7%A5%9E#.E9.87.91.E7.A5.9E.E3.81.AE.E9.81.8A.E8.A1.8C.E3.83.BB.E9.96.93.E6.97.A5]",
218
+ 'position:仮名暦'], # 支 節月
219
+ [Notes, "label:[天火=ja:%E5%A4%A9%E7%81%AB%E6%97%A5#.E5.A4.A9.E7.81.AB.E6.97.A5]",
220
+ 'position:仮名暦', 'suffix:日'], # 支 節月
221
+ [Notes, "label:[地火=ja:%E5%9C%B0%E7%81%AB%E6%97%A5#.E5.9C.B0.E7.81.AB.E6.97.A5]",
222
+ 'position:仮名暦', 'suffix:日'], # 支 節月
223
+ [Notes, "label:[人火=]", 'position:仮名暦'], # 支 節月
224
+ [Notes, "label:[雷火=]", 'position:仮名暦'], # 支 節月
225
+ [Notes, "label:[赤舌=ja:%E8%B5%A4%E8%88%8C%E6%97%A5]",
226
+ 'position:仮名暦', 'suffix:日'], # 暦月 暦日
227
+ [Notes, "label:[十死=ja:%E5%8D%81%E6%AD%BB%E6%97%A5#.E5.8D.81.E6.AD.BB.E6.97.A5]",
228
+ 'position:仮名暦', 'suffix:日'], # 支 節月
229
+ [Notes, "label:[道虚=]", 'position:仮名暦', 'suffix:日'], # 暦日
230
+ [Notes, "label:[大明=ja:%E5%A4%A7%E6%98%8E%E6%97%A5#.E5.A4.A7.E6.98.8E.E6.97.A5]",
231
+ 'position:仮名暦', 'suffix:日'], # 干支
232
+ [Notes, "label:[赤口=ja:%E8%B5%A4%E5%8F%A3%E6%97%A5]",
233
+ 'position:仮名暦', 'suffix:日'], # 暦月 暦日
234
+ [Notes, "label:[甲子待=ja:%E7%94%B2%E5%AD%90]",
235
+ 'position:仮名暦'], # 干支
236
+ [Notes, "label:[庚申待]", 'position:仮名暦'], # 干支
237
+ [Notes, "label:[犯土]", 'position:仮名暦'], # 干支
238
+ [Notes, "label:[十方暮]", 'position:仮名暦'], # 干支
239
+ [Notes, "label:[一粒万倍=ja:%E4%B8%80%E7%B2%92%E4%B8%87%E5%80%8D%E6%97%A5]",
240
+ 'position:仮名暦', 'suffix:日'], # 支 節月
241
+ [Notes, "label:[天福=]", 'position:仮名暦'], # 支 節月
242
+ [Notes, "label:[地福=]", 'position:仮名暦'], # 支 節月
243
+ [Notes, "label:[地五福=]", 'position:仮名暦'], # 支 節月
244
+ [Notes, "label:[三隣亡]", 'position:仮名暦'], # 支 節月
245
+ [Notes, "label:[不成就=ja:%E4%B8%8D%E6%88%90%E5%B0%B1%E6%97%A5]",
246
+ 'position:仮名暦', 'suffix:日'], # 暦月 暦日/晦日
247
+
248
+ [Notes, "label:[三宝吉=]", 'position:上段 上段 上段 上段'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
249
+ [Notes, "label:[神吉=ja:%E7%A5%9E%E5%90%89%E6%97%A5#.E7.A5.9E.E5.90.89.E6.97.A5]",
250
+ 'position:上段 上段 中段 中段上', 'suffix:日'], # 干支 節月
251
+ [Notes, "label:[雑事吉=]", 'position:雑事吉'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
252
+ [Notes, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
253
+ ]
254
+ ]]
255
+
256
+ #
257
+ # 日本暦注用の NoteObjects の要素のための内部クラス
258
+ #
259
+ class Notes
260
+
261
+ # @private
262
+ attr_reader :label, :position, :suffix
263
+
264
+ # @private
265
+ def to_note_hash(note, dates=nil)
266
+ {
267
+ :note => self,
268
+ :value => case @suffix
269
+ when '是' ; [@label + '是-', note[/.$/]]
270
+ when '在' ; [@label + '在-', note]
271
+ when '-' ; [@label + '-', note]
272
+ else ; note
273
+ end,
274
+ :position => @position[@position.size == 1 ? 0 : dates.index_g]
275
+ }
276
+ end
277
+
278
+ private
279
+ # オブジェクトの正規化
280
+ #
281
+ def _normalize(args=[], options={})
282
+ @position = @position.split(/ /)
283
+ end
284
+ end
285
+
286
+ #
287
+ # 日本暦注計算に必要となる暦日や暦法をまとめた内部クラス
288
+ #
289
+ class Dates
290
+
291
+ # @private
292
+ attr_reader :year, :calendar, :doyo, :o_date, :m_date, :l_date, :s_date, :s_terms, :l_phases
293
+
294
+ # 具注暦の配置パターン
295
+ # @private
296
+ def index_g
297
+ return @index_g if @index_g
298
+ @index_g = (@year < 1004) ? 0 : # 御堂関白記(前期)以前
299
+ (@year < 1185) ? 1 : # 御堂関白記(後期)
300
+ (@year < 1338) ? 2 : # 鎌倉時代
301
+ 3 # 室町時代以降
302
+ end
303
+
304
+ # 七十二候パターン
305
+ # @private
306
+ def index_s
307
+ return @index_s if @index_s
308
+ @index_s = (@year < 1685) ? 1 : # 宣明暦式
309
+ (@year < 1755) ? 2 : # 貞享暦式
310
+ (@year < 1874) ? 3 : # 宝暦暦式
311
+ 4 # 略本暦式
312
+ end
313
+
314
+ # 初期設定
315
+ # @private
316
+ def initialize(date, year, calendar, doyo=nil)
317
+ case calendar
318
+ when Array # 日本製定朔平気法
319
+ l_calendar = When.Calendar('ChineseLuniSolar?' + calendar[0])
320
+ s_calendar = When.Calendar('Chinese::' + calendar[1])
321
+ when /timezone/ # 定朔定気法
322
+ l_calendar = When.Calendar('ChineseLuniSolar?' + calendar)
323
+ s_calendar = When.Calendar('ChineseSolar?' + calendar)
324
+ else # 中国製平定朔平気法
325
+ l_calendar = When.Calendar('Chinese::' + calendar)
326
+ s_calendar = When.Calendar('Chinese::' + calendar + '(節月)')
327
+ end
328
+
329
+ @year = year
330
+ @calendar = calendar
331
+ @doyo = doyo
332
+ @o_date = date
333
+ @l_date = l_calendar ^ date
334
+ @m_date = date.frame.kind_of?(When::CalendarTypes::Julian) ? @l_date : date
335
+ @s_date = s_calendar ^ date
336
+ @s_terms = When::CalendarTypes::CalendarNote::SolarTerms.new('formula'=>s_calendar.formula[0])
337
+ @l_phases = When::CalendarTypes::CalendarNote::LunarPhases.new('formula'=>l_calendar.formula[-1])
338
+ end
339
+ end
340
+
341
+ NoteMethods = [:year_notes, :month_notes, :day_notes]
342
+
343
+ # 暦注の計算
344
+ #
345
+ # @param [When::TM::TemporalPosition] date 暦注を計算する日時
346
+ # (date が When::TM::TemporalPosition でない場合、When::TM::TemporalPosition に変換して使用する)
347
+ # @param [Hash] options
348
+ # :indices, :notes およびその他のキー => {When::CalendarTypes::CalendarNote#notes} を参照
349
+ #
350
+ # @return [Hash] :notes が String の場合
351
+ # @return [Array<Hash>] 上記に該当せず、:indices が Integer の場合
352
+ # @return [Array<Array<Hash>>] 上記のいずれにも該当しない場合
353
+ # @note return 値の [Hash] の要素は下記の通り
354
+ # :note => 暦注要素 (When::CalendarTypes::JapaneseNote::Notes)
355
+ # :value => 暦注の値 (String or When::BasicTypes::M17n または、その Array)
356
+ # :position => 具注暦でのその暦注の配置場所(String)
357
+ #
358
+ def notes(date, options={})
359
+ dates, indices, notes, conditions, options = _parse(date, options)
360
+ _result(indices.map {|i|
361
+ next [] unless i <= dates.o_date.precision
362
+ send(NoteMethods[i-1], dates, notes[i-1], conditions)
363
+ }, options)
364
+ end
365
+
366
+ private
367
+
368
+ # オブジェクトの正規化
369
+ def _normalize(args=[], options={})
370
+ @prime ||= [%w(干支), %w(月名), %w(干支 六曜 廿四節気 祝祭日)]
371
+ super
372
+ end
373
+
374
+ # 年の暦注
375
+ def year_notes(dates, notes, conditions={})
376
+ _note_values(dates, notes, _all_keys[-3], _elements[-3]) do |dates, focused_notes, notes_hash|
377
+
378
+ root = When.Resource('_co:CommonResidue')
379
+
380
+ # 干支
381
+ residue = dates.m_date.most_significant_coordinate-4
382
+ notes_hash['干支'] = root['干支'][residue % 60]
383
+ notes_hash['干'] = root['干' ][residue % 10]
384
+ notes_hash['支'] = root['支' ][residue % 12]
385
+
386
+ # 九星
387
+ notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.year(dates.s_date.most_significant_coordinate-4)]
388
+
389
+ # その他
390
+ [notes_hash['干支'], notes_hash['干'], notes_hash['支']].each do |note|
391
+ note._year_notes(notes_hash, dates, conditions)
392
+ end
393
+ notes_hash
394
+ end
395
+ end
396
+
397
+ # 月の暦注
398
+ def month_notes(dates, notes, conditions={})
399
+ _note_values(dates, notes, _all_keys[-2], _elements[-2]) do |dates, focused_notes, notes_hash|
400
+
401
+ root = When.Resource('_co:CommonResidue')
402
+
403
+ # 干支
404
+ residue = dates.m_date.most_significant_coordinate*12+(dates.m_date.cal_date[1] * 1)+13
405
+ notes_hash['干支'] = root['干支'][residue % 60]
406
+ notes_hash['干'] = root['干' ][residue % 10]
407
+ notes_hash['支'] = root['支' ][residue % 12]
408
+
409
+ # 九星
410
+ notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.month(
411
+ dates.s_date.most_significant_coordinate*12+dates.s_date.cal_date[1]+13)]
412
+
413
+ # その他
414
+ [notes_hash['干支'], notes_hash['干'], notes_hash['支'], JapaneseLuniSolarNote].each do |note|
415
+ note._month_notes(notes_hash, dates, conditions)
416
+ end
417
+ notes_hash
418
+ end
419
+ end
420
+
421
+ # 日の暦注
422
+ def day_notes(dates, notes, conditions={})
423
+ _note_values(dates, notes, _all_keys[-1], _elements[-1]) do |dates, focused_notes, notes_hash|
424
+
425
+ root = When.Resource('_co:CommonResidue')
426
+
427
+ # 干支
428
+ residue = dates.s_date.to_i-11
429
+ notes_hash['干支'] = root['干支'][residue % 60]
430
+ notes_hash['干'] = root['干' ][residue % 10]
431
+ notes_hash['支'] = root['支' ][residue % 12]
432
+
433
+ # 七曜
434
+ notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
435
+
436
+ # 廿八宿
437
+ notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28] if dates.year >= 1685
438
+
439
+ # 九星
440
+ notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.o_date, dates.s_terms)]
441
+
442
+ # その他
443
+ [SolarTerms, LunarPhases, notes_hash['干支'], notes_hash['干'], notes_hash['支'],
444
+ JapaneseLuniSolarNote, JapaneseSolarNote].each do |note|
445
+ note._day_notes(notes_hash, dates, conditions)
446
+ end
447
+
448
+ # 廿七宿
449
+ notes_hash['廿七宿'] = root['宿'][notes_hash['廿七宿']] if notes_hash['廿七宿'].kind_of?(Integer)
450
+
451
+ # 廿四節気
452
+ notes_hash['廿四節気'] = 3 - notes_hash['廿四節気'] if dates.calendar == '麟徳暦' &&
453
+ [1,2].include?(notes_hash['廿四節気']) # 啓蟄 <-> 雨水
454
+ notes_hash['廿四節気'] = root['二十四節気::*'][(notes_hash['廿四節気']-3) % 24] if notes_hash['廿四節気'].kind_of?(Integer)
455
+ notes_hash
456
+ end
457
+ end
458
+
459
+ #
460
+ # 日本暦日情報オブジェクトの生成
461
+ #
462
+ def _to_date_for_note(date)
463
+ date = _to_japanese_date(date)
464
+ return nil unless date
465
+ year = date.most_significant_coordinate
466
+ NoteTypes.each do |type|
467
+ start, calendar, doyo = type
468
+ return Dates.new(date, year, calendar, doyo) if year >= start
469
+ end
470
+ nil
471
+ end
472
+
473
+ #
474
+ # 任意の暦を日本暦日に変換
475
+ #
476
+ def _to_japanese_date(date)
477
+ return date if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar) ||
478
+ date._attr[:query] && date._attr[:query]['area'].to_s == '日本'
479
+ (date^ When.era(:area=>'日本')).each do |list|
480
+ return list[0] if list[0]
481
+ end
482
+ nil
483
+ end
484
+ end
485
+
486
+ #
487
+ # 太陽暦の暦注・祝祭日
488
+ #
489
+ class JapaneseSolarNote < self
490
+
491
+ NotesList = {
492
+ [ 1, 1] => [[1868..1872, '元旦'], [1874..1948, '四方拝'], [1949..2100, '元日']],
493
+ [ 1, 3] => [[1874..1948, '元始祭']],
494
+ [ 1, 5] => [[1874..1948, '新年宴会']],
495
+ [ 1,-2] => [[2000..2100, '成人の日']],
496
+ [ 1,15] => [[1868..1872, '小正月'], [1949..1999, '成人の日']],
497
+ [ 1,29] => [[1873..1873, '神武天皇即位日']],
498
+ [ 1,30] => [[1874..1912, '孝明天皇祭']],
499
+ [ 2,11] => [[1874..1948, '紀元節'], [1967..2100, '建国記念の日']],
500
+ [ 3, 3] => [[1868..1872, '弥生節句']],
501
+ [ 3, 0] => [[1879..1948, '春季皇霊祭'], [1949..2100, '春分の日']],
502
+ [ 4, 3] => [[1874..1948, '神武天皇祭']],
503
+ [ 4,29] => [[1927..1948, '天長節'], [1949..1988, '天皇誕生日'], [1989..2006, 'みどりの日'], [2007..2100, '昭和の日']],
504
+ [ 5, 3] => [[1949..2100, '憲法記念日']],
505
+ [ 5, 4] => [[2007..2100, 'みどりの日']],
506
+ [ 5, 5] => [[1868..1872, '端午節句'], [1949..2100, 'こどもの日']],
507
+ [ 7, 7] => [[1868..1872, '七夕節句']],
508
+ [ 7,15] => [[1868..1872, 'お盆']],
509
+ [ 7,20] => [[1996..2002, '海の日']],
510
+ [ 7,-3] => [[2003..2100, '海の日']],
511
+ [ 7,30] => [[1913..1926, '明治天皇祭']],
512
+ [ 8, 1] => [[1868..1872, '田実節句']],
513
+ [ 8,31] => [[1913..1926, '天長節']],
514
+ [ 9, 9] => [[1868..1872, '重陽節句']],
515
+ [ 9,15] => [[1966..2002, '敬老の日']],
516
+ [ 9,-3] => [[2003..2100, '敬老の日']],
517
+ [ 9,17] => [[1874..1878, '神嘗祭']],
518
+ [ 9, 0] => [[1878..1947, '秋季皇霊祭'], [1948..2100, '秋分の日']],
519
+ [10,10] => [[1966..1999, '体育の日']],
520
+ [10,-2] => [[2000..2100, '体育の日']],
521
+ [10,17] => [[1879..1947, '神嘗祭']],
522
+ [10,31] => [[1913..1926, '天長節祝日']],
523
+ [11, 3] => [[1873..1911, '天長節'], [1927..1947, '明治節'], [1948..2100, '文化の日']],
524
+ [11,23] => [[1873..1947, '新嘗祭'], [1948..2100, '勤労感謝の日']],
525
+ [12,23] => [[1989..2100, '天皇誕生日']],
526
+ [12,25] => [[1927..1947, '大正天皇祭']]
527
+ }
528
+
529
+ class << self
530
+
531
+ # 日の暦注 - 祝祭日の計算
532
+ # @private
533
+ def _day_notes(notes, dates, conditions={})
534
+ # 明治維新以降のみ扱う
535
+ year = dates.o_date.most_significant_coordinate
536
+ return notes unless year >= 1868
537
+
538
+ # 春分の日と秋分の日を祝祭日に加える
539
+ long = {3=>0, 9=>180}[dates.o_date.cal_date[1]] if year >= 1878
540
+ if long
541
+ date = When.when?(dates.o_date.to_cal_date.to_s,
542
+ {:clock=>When.Clock(dates.s_date.frame.timezone[0]*86400)})
543
+ term = dates.s_terms.term(date.floor(When::MONTH,
544
+ When::DAY), [long,360]).cal_date[1..2]
545
+ list = NotesList.dup
546
+ list[term] = list[[term[0],0]]
547
+ else
548
+ list = NotesList
549
+ end
550
+
551
+ # 「国民の休日」制定以前
552
+ notes['祝祭日'] ||= _holiday(list, dates.o_date, '振替休日')
553
+ return notes if notes['祝祭日'] || year < 1988
554
+
555
+ # 「国民の休日」制定以後
556
+ duration = When.Duration('P1D')
557
+ [duration, -duration].each do |d|
558
+ return notes unless _holiday(list, dates.o_date + d)
559
+ end
560
+ notes['祝祭日'] = '国民の休日'
561
+ return notes
562
+ end
563
+
564
+ private
565
+
566
+ # 振替休日とハッピーマンデーを考慮した祝祭日
567
+ def _holiday(list, date, alternate=nil)
568
+ y = date.most_significant_coordinate
569
+ m, d = date.cal_date[1..2]
570
+
571
+ # 「振替休日」制定以前
572
+ note = _note(list, y, m, d)
573
+ return note if note || y < 1973
574
+
575
+ # 「振替休日」制定以降
576
+ case date.to_i % 7
577
+ when 0 # 月曜
578
+ # 振替休日
579
+ note = _note(list, y, m, d-1)
580
+ return alternate if note
581
+ # ハッピーマンデー
582
+ note = _note(list, y, m, -((d-1)/7 + 1))
583
+ return note if note
584
+ when 1,2 # 火曜・水曜
585
+ # 振替休日
586
+ return alternate if y >= 2007 && m == 5 && d == 6
587
+ end
588
+ end
589
+
590
+ # 振替休日とハッピーマンデーを考慮しない祝祭日
591
+ def _note(list, year, month, day)
592
+ year = [year, 2100].min
593
+ note = list[[month,day]]
594
+ return nil unless note
595
+ note.each do |range|
596
+ return range[1] if range[0].include?(year)
597
+ end
598
+ return nil
599
+ end
600
+ end
601
+ end
602
+
603
+ #
604
+ # 太陰太陽暦の暦注
605
+ #
606
+ class JapaneseLuniSolarNote < self
607
+
608
+ # 変換表 月日→27宿
609
+ StarMansions = [ # 正 2 3 4 5 6 7 8 9 10 11 12
610
+ [11, 13, 15, 17, 19, 21, 24, 0, 2, 4, 7, 9], # 0 : 本月本説 室12奎14胃16畢18參20鬼22張25角00氐02心04斗07虛10
611
+ [ 5, 3, 1, 25, 23, 21, 19, 16, 14, 11, 8, 7], # 1 : 本月異説 尾05房03亢01翼26星24鬼22參20昴17婁15室12女09斗07
612
+ [14, 16, 18, 20, 22, 24, 0, 3, 5, 7, 10, 12], # 2 : 閏月本説 婁15昴17觜19井21柳23張25角00房03尾05斗07危11壁13
613
+ [12, 14, 16, 18, 19, 21, 24, 0, 2, 5, 8, 10], # 3 : 閏月異説 壁13婁15昴17觜19參20鬼22張25角00氐02尾05女09危11
614
+ [14, 16, 18, 23, 22, 24, 0, 3, 5, 7, 8, 12] # 4 : 閏月本説(元) (星24) (女09)
615
+ ]
616
+
617
+ # 変換表 27宿→28宿
618
+ StarMansionIndex = (0..7).to_a + (9..27).to_a
619
+
620
+ # 七曜と27宿で決まる暦注
621
+ WeekDepended = {
622
+ # 日 月 火 水 木 金 土
623
+ '甘露' => [26, 17, 5, 22, 21, 3, 23], # 軫27 畢18 尾05 柳23 鬼22 房03 星24
624
+ '金剛峯' => [ 5, 8, 12, 16, 20, 24, 1], # 尾05 女09 壁13 昴17 井21 張25 亢01
625
+ '羅刹' => [15, 21, 25, 19, 2, 13, 22] # 胃16 鬼22 翼26 参20 氐02 奎14 柳23
626
+ }
627
+
628
+ # 六曜
629
+ Rokuyo = When.Resource('_m:JapaneseTerms::六曜')
630
+
631
+ # 月の暦注
632
+ # @private
633
+ def self._month_notes(notes, dates, conditions={})
634
+ # 月名
635
+ notes['月名'] ||= dates.o_date.name('month')
636
+ end
637
+
638
+ # 日の暦注
639
+ # @private
640
+ def self._day_notes(notes, dates, conditions={})
641
+ # 廿七宿
642
+ m, l = [1,0].map {|f| dates.m_date.cal_date[1] * f}
643
+ d = (StarMansions[l==1 ? (conditions[:i27]||0) :
644
+ (conditions[:n27]||0)][m-1] + dates.m_date.cal_date[2] - 1) % 27
645
+ notes['廿七宿'] ||= StarMansionIndex[d]
646
+
647
+ # 甘露 / 金剛峯 / 羅刹
648
+ w = (dates.m_date.to_i + 1) % 7
649
+ ['甘露', '金剛峯', '羅刹'].each do |c|
650
+ notes[c] = c if d == WeekDepended[c][w]
651
+ end
652
+
653
+ # 三宝吉・神吉・雑事吉
654
+ notes['神吉'] = notes['雑事吉'] = notes['三宝吉'] = nil if notes['没' ] || notes['滅' ]
655
+ notes['神吉'] = notes['雑事吉'] = nil if notes['日食'] || notes['月食'] || notes['往亡']
656
+ notes['三宝吉'] = nil if !notes['甘露'] && (notes['羅刹'] || notes['日食'] || notes['月食'])
657
+ notes['三宝吉'] = notes['甘露'] ? '三宝吉' : nil if /\+/ =~ notes['三宝吉'].to_s
658
+ notes['三宝吉'] = '三吉' if notes['三宝吉'] && dates.year >= 1185 # 鎌倉以降
659
+
660
+ # 除手足甲 & 道虚
661
+ y,m0,d0 = dates.m_date.cal_date
662
+ notes['道虚'] = '道虚' if d0 % 6 == 0
663
+ if (d0 == 29)
664
+ m1 = (dates.m_date + When.Duration('P1D')).cal_date[1]
665
+ unless m0 == m1
666
+ # 晦日
667
+ notes['除手足甲'] = '除手足甲' unless notes['没'] || notes['滅'] || notes['凶会']
668
+ notes['道虚'] = '道虚'
669
+ misoka = true if m % 6 == 0 # 『現代こよみ読み解き事典』 for 不成就日
670
+ end
671
+ end
672
+
673
+ # 仮名暦
674
+ notes['赤舌' ] ||= d0 == (m * 5 - 3) % 6 + 1 ? '赤舌' : nil
675
+ notes['赤口' ] ||= d0 == (m * 7 - 4) % 8 + 1 ? '赤口' : nil
676
+ notes['不成就'] ||= d0 % 8 == [6,3,2,1,4,5][m % 6] || misoka ? '不成就' : nil
677
+ notes['六曜' ] ||= Rokuyo[(m + d0) % 6] if dates.year >= 1873 # 明治改暦以降
678
+ notes
679
+ end
680
+ end
681
+
682
+ #
683
+ # 月の位相による暦注
684
+ #
685
+ class LunarPhases < LuniSolarPositions
686
+
687
+ Phases = {7.0=>'上弦', 8.0=>'上弦', 15.0=>'望', 22.0=>'下弦', 23.0=>'下弦'}
688
+
689
+ # 日の暦注
690
+ # @private
691
+ def self._day_notes(notes, dates, conditions={})
692
+ return notes unless dates.year < 1685
693
+ date = When.when?(dates.o_date.to_cal_date.to_s,
694
+ {:clock=>When.Clock(dates.l_date.frame.timezone[0]*86400)})
695
+ phase, metsu = dates.l_phases.position(date)
696
+ phase = Phases[phase]
697
+
698
+ # 滅
699
+ notes['滅'] = '滅' if metsu == 2
700
+
701
+ # 月相
702
+ notes['月相'] ||=
703
+ /弦/ !~ phase ? phase : dates.l_phases.position(date, 0.5)[0] % 15 == 8.0 ? phase : nil
704
+
705
+ # 月食
706
+ notes['月食'] = nil # 計算できないので、偽としておく
707
+ notes
708
+ end
709
+ end
710
+
711
+ #
712
+ # 太陽黄経による暦注
713
+ #
714
+ class SolarTerms < LuniSolarPositions
715
+
716
+ Notes12 = %w(正月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
717
+
718
+ Notes60_A = [
719
+ # +0
720
+ '侯小過外', # 315 : 正月
721
+ '侯需外', # 345 : 二月
722
+ '侯豫外', # 15 : 三月
723
+ '侯旅外', # 45 : 四月
724
+ '侯大有外', # 75 : 五月
725
+ '侯鼎外', # 105 : 六月
726
+ '侯常外', # 135 : 七月
727
+ '侯巽外', # 165 : 八月
728
+ '侯帰妹外', # 195 : 九月
729
+ '侯良外', # 225 : 十月
730
+ '侯未済外', # 255 : 十一月
731
+ '侯屯外' # 285 : 十二月
732
+ ]
733
+
734
+ Notes60_B = [
735
+ # +3 +9 +15 +21 +27
736
+ '大夫蒙', '卿益', '公漸', '辟泰', '侯需内', # 315 : 正月
737
+ '大夫随', '卿晋', '公解', '辟大壮', '侯豫内', # 345 : 二月
738
+ '大夫訟', '卿蠱', '公革', '辟夬', '侯旅内', # 15 : 三月
739
+ '大夫師', '卿比', '公小畜', '辟乾', '侯大有内', # 45 : 四月
740
+ '大夫家人', '卿井', '公咸', '辟女后', '侯鼎内', # 75 : 五月
741
+ '大夫豊', '卿渙', '公履', '辟遁', '侯常内', # 105 : 六月
742
+ '大夫節', '卿同人', '公損', '辟否', '侯巽内', # 135 : 七月
743
+ '大夫萃', '卿大畜', '公賁', '辟観', '侯帰妹内', # 165 : 八月
744
+ '大夫無妄', '卿明夷', '公因', '辟剥', '侯良内', # 195 : 九月
745
+ '大夫既済', '卿噬嗑', '公大過', '辟坤', '侯未済内', # 225 : 十月
746
+ '大不蹇', '卿頤', '公中孚', '辟復', '侯屯内', # 255 : 十一月
747
+ '大夫謙', '卿睽', '公升', '辟臨', '侯小過内' # 285 : 十二月
748
+ ]
749
+
750
+ Notes72 = [
751
+ # 宣明暦(中国) 宣明暦 貞享暦 宝暦暦・寛政暦 略本暦
752
+ # 315 : 正月
753
+ %w(東風解凍 東風解凍 東風解凍 東風解凍 東風解凍),
754
+ %w(蟄始振 蟄虫始振 梅花乃芳 黄鶯睍睆 黄鶯睍睆),
755
+ %w(魚上氷 魚上氷 魚上氷 魚上氷 魚上氷),
756
+ %w(獺祭魚 獺祭魚 土脈潤起 土脈潤起 土脉潤起),
757
+ %w(鴻雁来 鴻雁来 霞彩碧空 霞始靆 霞始靆),
758
+ %w(草木萌動 草木萌動 草木萌動 草木萌動 草木萌動),
759
+
760
+ # 345 : 二月
761
+ %w(桃始華 桃始華 蟄虫啓戸 蟄虫啓戸 蟄虫啓戸),
762
+ %w(倉庚鳴 倉庚鳴 寒雨間熟 桃始笑 桃始笑),
763
+ %w(鷹化為鳩 鷹化為鳩 菜虫化蝶 菜虫化蝶 菜虫化蝶),
764
+ %w(玄鳥至 玄鳥至 雀始巣 雀始巣 雀始巣),
765
+ %w(雷乃発声 雷乃発声 雷乃発声 桜始開 桜始開),
766
+ %w(始電 始電 桜始開桃始笑 雷乃発声 雷乃発声),
767
+
768
+ # 15 : 三月
769
+ %w(桐始華 桐始華 玄鳥至 玄鳥至 玄鳥至),
770
+ %w(田鼠化為鴑 田鼠化為鴑 鴻雁北 鴻雁北 鴻雁北),
771
+ %w(虹始見 虹始見 虹始見 虹始見 虹始見),
772
+ %w(萍始生 萍始生 葭始生 葭始生 葭始生),
773
+ %w(鳴鳩払其羽 鳴鳩払其羽 牡丹華 霜止出苗 霜止出苗),
774
+ %w(戴勝降桑 戴勝降桑 霜止出苗 牡丹華 牡丹華),
775
+
776
+ # 45 : 四月
777
+ %w(螻蟈鳴 螻蟈鳴 鵑始鳴 鼃始鳴 鼃始鳴),
778
+ %w(蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出),
779
+ %w(王瓜生 王瓜生 竹笋生 竹笋生 竹笋生),
780
+ %w(苦菜秀 苦菜秀 蚕起食桑 蚕起食桑 蚕起食桑),
781
+ %w(靡草死 靡草死 紅花栄 紅花栄 紅花栄),
782
+ %w(小暑至 小暑至 麦秋至 麦秋至 麦秋至),
783
+
784
+ # 75 : 五月
785
+ %w(蟷螂生 蟷螂生 螳螂生 螳螂生 螳螂生),
786
+ %w(鵙始鳴 鵙始鳴 腐草為螢 腐草為螢 腐草為螢),
787
+ %w(反舌無声 反舌無声 梅始黄 梅子黄 梅子黄),
788
+ %w(鹿角解 鹿角解 乃東枯 乃東枯 乃東枯),
789
+ %w(蝉始鳴 蝉始鳴 分龍雨 菖蒲華 菖蒲華),
790
+ %w(半夏生 半夏生 半夏生 半夏生 半夏生),
791
+
792
+ # 105 : 六月
793
+ %w(温風至 温風至 温風至 温風至 温風至),
794
+ %w(蟋蟀居壁 蟋蟀居壁 蓮始華 蓮始華 蓮始開),
795
+ %w(鷹乃学習 鷹乃学習 鷹乃学習 鷹乃学習 鷹乃学習),
796
+ %w(腐草為螢 腐草為螢 桐始結花 桐始結花 桐始結花),
797
+ %w(土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑),
798
+ %w(大雨時行 大雨時行 大雨時行 大雨時行 大雨時行),
799
+
800
+ # 135 : 七月
801
+ %w(涼風至 涼風至 涼風至 涼風至 涼風至),
802
+ %w(白露降 白露降 山沢浮雲 寒蝉鳴 寒蝉鳴),
803
+ %w(寒蝉鳴 寒蝉鳴 霧色已成 蒙霧升降 蒙霧升降),
804
+ %w(鷹乃祭鳥 鷹乃祭鳥 寒蝉鳴 綿柎開 綿柎開),
805
+ %w(天地始粛 天地始粛 天地始粛 天地始粛 天地始粛),
806
+ %w(禾乃登 禾乃登 禾乃登 禾乃登 禾乃登),
807
+
808
+ # 165 : 八月
809
+ %w(鴻雁来 鴻雁来 草露白 草露白 草露白),
810
+ %w(玄鳥帰 玄鳥帰 鶺鴒鳴 鶺鴒鳴 鶺鴒鳴),
811
+ %w(群鳥養羞 群鳥養羞 玄鳥去 玄鳥去 玄鳥去),
812
+ %w(雷乃収声 雷乃収声 鴻雁来 雷乃収声 雷乃収声),
813
+ %w(蟄虫坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸),
814
+ %w(水始涸 水始涸 水始涸 水始涸 水始涸),
815
+
816
+ # 195 : 九月
817
+ %w(鴻雁来賓 鴻雁来賓 棗栗零 鴻雁来 鴻雁来),
818
+ %w(雀入大水為蛤 雀入大水為蛤 蟋蟀在戸 菊花開 菊花開),
819
+ %w(菊有黄花 菊有黄花 菊花開 蟋蟀在戸 蟋蟀在戸),
820
+ %w(豺乃祭獣 豺祭獣 霜始降 霜始降 霜始降),
821
+ %w(草木黄落 草木黄落 蔦楓紅葉 霎時施 霎時施),
822
+ %w(蟄虫咸俯 蟄虫咸俯 鶯雛鳴 楓蔦黄 楓蔦黄),
823
+
824
+ # 225 : 十月
825
+ %w(水始氷 水始氷 山茶始開 山茶始開 山茶始開),
826
+ %w(地始凍 地始凍 地始凍 地始凍 地始凍),
827
+ %w(野鶏入大水為蜃 野鶏入大水為蜃 霎乃降 金盞香 金盞香),
828
+ %w(虹蔵不見 虹蔵不見 虹蔵不見 虹蔵不見 虹蔵不見),
829
+ %w(天気上騰地気下降 天気上騰地気下降 樹葉咸落 朔風払葉 朔風払葉),
830
+ %w(閉塞而成冬 閉塞成冬 橘始黄 橘始黄 橘始黄),
831
+
832
+ # 255 : 十一月
833
+ %w(鶡鳥不鳴 鶡鳥不鳴 閉塞成冬 閉塞成冬 閉塞成冬),
834
+ %w(虎始交 武始交 熊蟄穴 熊蟄穴 熊蟄穴),
835
+ %w(茘挺生 茘挺生 水仙開 鱖魚群 鱖魚群),
836
+ %w(蚯蚓結 蚯蚓結 乃東生 乃東生 乃東生),
837
+ %w(麋角解 麋角解 麋角解 麋角解 麋角解),
838
+ %w(水泉動 水泉動 雪下出麦 雪下出麦 雪下出麦),
839
+
840
+ # 285 : 十二月
841
+ %w(雁北嚮 雁北嚮 芹乃栄 芹乃栄 芹乃栄),
842
+ %w(鵲始巣 鵲始巣 風気乃行 水泉動 水泉動),
843
+ %w(野鶏始鴝 野鶏始鴝 雉始雊 雉始雊 雉始雊),
844
+ %w(鶏始乳 鶏始乳 款冬華 款冬華 款冬華),
845
+ %w(鷙鳥厲疾 鷙鳥厲疾 水沢腹堅 水沢腹堅 水沢腹堅),
846
+ %w(水沢腹堅 水沢腹堅 鶏始乳 鶏始乳 鶏始乳)
847
+ ]
848
+
849
+ # 日の暦注
850
+ # @private
851
+ def self._day_notes(notes, dates, conditions={})
852
+ date = When.when?(dates.o_date.to_cal_date.to_s,
853
+ {:clock=>When.Clock(dates.s_date.frame.timezone[0]*86400)})
854
+ longitude, motsu = dates.s_terms.position(date)
855
+
856
+ # 三伏 - 庚
857
+ #
858
+ # 初 : 夏至から 20..29
859
+ # 仲 : 夏至から 30..39
860
+ # 後 : 立秋から 0..9
861
+ if !notes['三伏'] && notes['干'].remainder == 6 # 庚
862
+ if 109 <= longitude && longitude <= 129 # 夏至から
863
+ term = dates.s_terms.term(date, [-270,360])
864
+ diff = dates.s_date.to_i - term.to_i
865
+ notes['三伏'] = '初伏' if 20 <= diff && diff <= 29
866
+ notes['三伏'] = '中伏' if 30 <= diff && diff <= 39
867
+ elsif longitude == 135 # 立秋
868
+ notes['三伏'] = '末伏'
869
+ elsif 136 <= longitude && longitude <= 144 # 立秋から
870
+ term = dates.s_terms.term(date, [-225,360])
871
+ diff = dates.s_date.to_i - term.to_i
872
+ notes['三伏'] = '末伏' if 0 < diff && diff <= 9
873
+ end
874
+ end
875
+
876
+ # 社 - 戊
877
+ #
878
+ # 春秋分から -5..4
879
+ if !notes['社'] && notes['干'].remainder == 4 # 戊
880
+ if (longitude + 5) % 180 < 10 # 春秋分の近傍
881
+ term = dates.s_terms.term(date - When.Duration('P6D'), [0,180])
882
+ diff = dates.s_date.to_i - term.to_i
883
+ notes['社'] = '社' if -5 <= diff && diff <= 4
884
+ end
885
+ end
886
+
887
+ # 臘 - 辰
888
+ #
889
+ # 大寒から -6..5
890
+ if !notes['臘'] && notes['支'].remainder == 4 # 辰
891
+ if (longitude - 339) % 360 < 12 # 大寒の近傍
892
+ term = dates.s_terms.term(date - When.Duration('P7D'), [345,360])
893
+ diff = dates.s_date.to_i - term.to_i
894
+ notes['臘'] = '臘' if -6 <= diff && diff <= 5
895
+ end
896
+ end
897
+
898
+ # 入梅 - 壬
899
+ #
900
+ # 芒種から 0..11
901
+ if !notes['入梅'] && notes['干'].remainder == 8 # 壬
902
+ if (longitude - 120) % 360 < 10 # 芒種の近傍
903
+ term = dates.s_terms.term(date - When.Duration('P1D'), [120,360])
904
+ diff = dates.s_date.to_i - term.to_i
905
+ notes['入梅'] = '入梅' if 0 <= diff && diff <= 11
906
+ end
907
+ end
908
+
909
+ # 土用事
910
+ unless notes['土用事']
911
+ _longitude, _motsu = dates.doyo ? dates.s_terms.position(date, -dates.doyo) : [longitude, motsu]
912
+ if _motsu != 0 && _longitude % 90 == 27
913
+ notes['土用事'] =
914
+ (dates.year < 697) ? '土用' : # 元嘉暦以前
915
+ (dates.year < 764) ? '土王' : # 麟徳暦
916
+ (dates.year < 1685) ? '土用事' : # 大衍暦~宣明暦
917
+ '土用入' # 貞享暦以降
918
+ end
919
+ end
920
+
921
+ # 没
922
+ if motsu == 0
923
+ notes['没'] = '没' if dates.year < 1685
924
+ return notes
925
+ end
926
+
927
+ # 伏龍
928
+ notes['伏龍'] ||= {
929
+ 315 => '庭内去堂', 15 => '門内百日', 115 => '東垣六十日',
930
+ 175 => '四隅百日', 275 => '竈内四十日'
931
+ }[longitude]
932
+
933
+ # 廿四節気
934
+ div, mod = longitude.divmod(15)
935
+ if mod == 0
936
+ notes['廿四節気'] = (div - 21) % 24
937
+ div, mod = notes['廿四節気'].divmod(2)
938
+ notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
939
+ end
940
+
941
+ # 六十卦
942
+ div, mod = longitude.divmod(30)
943
+ notes['六十卦'] ||= mod == 15 ? Notes60_A[(div - 10) % 12] : nil
944
+ div, mod = longitude.divmod(6)
945
+ notes['六十卦'] ||= mod == 0 ? Notes60_B[(div - 53) % 60] : nil
946
+
947
+ # 七十二候
948
+ div, mod = longitude.divmod(5)
949
+ notes['七十二候'] ||= mod == 0 ? Notes72[(div - 63) % 72][dates.index_s] : nil
950
+
951
+ # 彼岸
952
+ notes['彼岸'] ||= longitude % 180 == 2 ? '彼岸' : nil
953
+
954
+ # 往亡
955
+ month = dates.s_date.cal_date[1] - 1
956
+ div, mod = month.divmod(3)
957
+ notes['往亡'] ||= ((div+7)*(mod+1) + month * 30 + 314 - longitude) % 360 == 0 ? '往亡' : nil
958
+
959
+ # 日食
960
+ notes['日食'] = nil # 計算できないので、偽としておく
961
+ notes
962
+ end
963
+ end
964
+ end