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.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/irb.rc +5 -0
- data/bin/locales.rb +2 -2
- data/bin/when.rb +16 -0
- data/bin/when.rb.config +7 -0
- data/lib/when_exe.rb +616 -14
- data/lib/when_exe/basictypes.rb +615 -0
- data/lib/when_exe/calendartypes.rb +1700 -0
- data/lib/when_exe/coordinates.rb +1936 -0
- data/lib/when_exe/core/compatibility.rb +54 -0
- data/lib/when_exe/core/duration.rb +72 -72
- data/lib/when_exe/core/extension.rb +382 -0
- data/lib/when_exe/ephemeris.rb +1845 -0
- data/lib/when_exe/googlecalendar.rb +140 -0
- data/lib/when_exe/icalendar.rb +1587 -0
- data/lib/when_exe/inspect.rb +1237 -0
- data/lib/when_exe/locales/af.rb +90 -0
- data/lib/when_exe/locales/ar.rb +145 -0
- data/lib/when_exe/locales/az.rb +90 -0
- data/lib/when_exe/locales/bg.rb +90 -0
- data/lib/when_exe/locales/bn.rb +94 -0
- data/lib/when_exe/locales/bs.rb +121 -0
- data/lib/when_exe/locales/ca.rb +92 -0
- data/lib/when_exe/locales/cs.rb +107 -0
- data/lib/when_exe/locales/cy.rb +150 -0
- data/lib/when_exe/locales/da.rb +84 -0
- data/lib/when_exe/locales/de.rb +92 -0
- data/lib/when_exe/locales/de_AT.rb +92 -0
- data/lib/when_exe/locales/de_CH.rb +92 -0
- data/lib/when_exe/locales/el.rb +93 -0
- data/lib/when_exe/locales/en.rb +88 -0
- data/lib/when_exe/locales/en_AU.rb +88 -0
- data/lib/when_exe/locales/en_CA.rb +88 -0
- data/lib/when_exe/locales/en_GB.rb +88 -0
- data/lib/when_exe/locales/en_IN.rb +88 -0
- data/lib/when_exe/locales/en_NZ.rb +88 -0
- data/lib/when_exe/locales/eo.rb +89 -0
- data/lib/when_exe/locales/es.rb +84 -0
- data/lib/when_exe/locales/es_419.rb +84 -0
- data/lib/when_exe/locales/es_AR.rb +84 -0
- data/lib/when_exe/locales/es_CL.rb +84 -0
- data/lib/when_exe/locales/es_CO.rb +84 -0
- data/lib/when_exe/locales/es_MX.rb +84 -0
- data/lib/when_exe/locales/es_PE.rb +85 -0
- data/lib/when_exe/locales/es_VE.rb +84 -0
- data/lib/when_exe/locales/et.rb +94 -0
- data/lib/when_exe/locales/eu.rb +95 -0
- data/lib/when_exe/locales/fa.rb +80 -0
- data/lib/when_exe/locales/fi.rb +89 -0
- data/lib/when_exe/locales/fr.rb +88 -0
- data/lib/when_exe/locales/fr_CA.rb +88 -0
- data/lib/when_exe/locales/fr_CH.rb +88 -0
- data/lib/when_exe/locales/gl.rb +81 -0
- data/lib/when_exe/locales/he.rb +84 -0
- data/lib/when_exe/locales/hi.rb +80 -0
- data/lib/when_exe/locales/hi_IN.rb +84 -0
- data/lib/when_exe/locales/hr.rb +128 -0
- data/lib/when_exe/locales/hu.rb +84 -0
- data/lib/when_exe/locales/id.rb +89 -0
- data/lib/when_exe/locales/is.rb +89 -0
- data/lib/when_exe/locales/it.rb +87 -0
- data/lib/when_exe/locales/it_CH.rb +87 -0
- data/lib/when_exe/locales/ja.rb +78 -0
- data/lib/when_exe/locales/kn.rb +86 -0
- data/lib/when_exe/locales/ko.rb +78 -0
- data/lib/when_exe/locales/links.rb +2342 -0
- data/lib/when_exe/locales/lo.rb +123 -0
- data/lib/when_exe/locales/locales.rb +91 -0
- data/lib/when_exe/locales/lt.rb +111 -0
- data/lib/when_exe/locales/lv.rb +118 -0
- data/lib/when_exe/locales/mk.rb +93 -0
- data/lib/when_exe/locales/mn.rb +80 -0
- data/lib/when_exe/locales/nb.rb +81 -0
- data/lib/when_exe/locales/ne.rb +81 -0
- data/lib/when_exe/locales/nl.rb +92 -0
- data/lib/when_exe/locales/nn.rb +73 -0
- data/lib/when_exe/locales/or.rb +84 -0
- data/lib/when_exe/locales/pl.rb +128 -0
- data/lib/when_exe/locales/pt.rb +88 -0
- data/lib/when_exe/locales/pt_BR.rb +88 -0
- data/lib/when_exe/locales/rm.rb +143 -0
- data/lib/when_exe/locales/ro.rb +105 -0
- data/lib/when_exe/locales/ru.rb +128 -0
- data/lib/when_exe/locales/sk.rb +109 -0
- data/lib/when_exe/locales/sl.rb +122 -0
- data/lib/when_exe/locales/sr.rb +122 -0
- data/lib/when_exe/locales/sv.rb +83 -0
- data/lib/when_exe/locales/sw.rb +89 -0
- data/lib/when_exe/locales/th.rb +78 -0
- data/lib/when_exe/locales/tl.rb +99 -0
- data/lib/when_exe/locales/tr.rb +96 -0
- data/lib/when_exe/locales/uk.rb +128 -0
- data/lib/when_exe/locales/uz.rb +128 -0
- data/lib/when_exe/locales/vi.rb +94 -0
- data/lib/when_exe/locales/wo.rb +82 -0
- data/lib/when_exe/locales/zh_CN.rb +77 -0
- data/lib/when_exe/locales/zh_HK.rb +77 -0
- data/lib/when_exe/locales/zh_TW.rb +77 -0
- data/lib/when_exe/mini_application.rb +252 -0
- data/lib/when_exe/parts/enumerator.rb +472 -0
- data/lib/when_exe/parts/geometric_complex.rb +379 -0
- data/lib/when_exe/parts/locale.rb +513 -0
- data/lib/when_exe/parts/method_cash.rb +207 -0
- data/lib/when_exe/parts/resource.rb +806 -0
- data/lib/when_exe/parts/timezone.rb +182 -0
- data/lib/when_exe/region/bahai.rb +145 -0
- data/lib/when_exe/region/balinese.rb +627 -0
- data/lib/when_exe/region/chinese.rb +896 -0
- data/lib/when_exe/region/chinese_calendar.rb +919 -0
- data/lib/when_exe/region/chinese_epoch.rb +1245 -0
- data/lib/when_exe/region/christian.rb +644 -0
- data/lib/when_exe/region/far_east.rb +192 -0
- data/lib/when_exe/region/french.rb +66 -0
- data/lib/when_exe/region/geologicalage.rb +639 -0
- data/lib/when_exe/region/indian.rb +1066 -0
- data/lib/when_exe/region/iranian.rb +66 -0
- data/lib/when_exe/region/islamic.rb +105 -0
- data/lib/when_exe/region/japanese.rb +851 -0
- data/lib/when_exe/region/japanese_notes.rb +964 -0
- data/lib/when_exe/region/japanese_residues.rb +1149 -0
- data/lib/when_exe/region/javanese.rb +228 -0
- data/lib/when_exe/region/jewish.rb +127 -0
- data/lib/when_exe/region/korean.rb +267 -0
- data/lib/when_exe/region/m17n.rb +115 -0
- data/lib/when_exe/region/martian.rb +215 -0
- data/lib/when_exe/region/mayan.rb +122 -0
- data/lib/when_exe/region/moon.rb +333 -0
- data/lib/when_exe/region/nihon_shoki.rb +73 -0
- data/lib/when_exe/region/planets.rb +585 -0
- data/lib/when_exe/region/pope.rb +298 -0
- data/lib/when_exe/region/residue.rb +229 -0
- data/lib/when_exe/region/roman.rb +325 -0
- data/lib/when_exe/region/ryukyu.rb +98 -0
- data/lib/when_exe/region/shire.rb +254 -0
- data/lib/when_exe/region/sun.rb +210 -0
- data/lib/when_exe/region/thai.rb +227 -0
- data/lib/when_exe/region/tibetan.rb +233 -0
- data/lib/when_exe/region/v50.rb +111 -0
- data/lib/when_exe/region/vietnamese.rb +173 -0
- data/lib/when_exe/region/world.rb +197 -0
- data/lib/when_exe/timestandard.rb +547 -0
- data/lib/when_exe/tmduration.rb +330 -330
- data/lib/when_exe/tmobjects.rb +1295 -0
- data/lib/when_exe/tmposition.rb +1955 -0
- data/lib/when_exe/tmreference.rb +1547 -0
- data/lib/when_exe/version.rb +10 -3
- data/link_to_online_documents +4 -0
- data/test/examples/JapanHolidays.ics +456 -0
- data/test/examples/Millennium.ics +17 -0
- data/test/examples/NewYork.ics +61 -0
- data/test/examples/Residue.m17n +135 -0
- data/test/examples/Spatial.m17n +179 -0
- data/test/examples/Terms.m17n +39 -0
- data/test/examples/Test.ics +53 -0
- data/test/examples/USA-DST.ics +61 -0
- data/test/examples/geometric_complex.rb +41 -0
- data/test/examples/sample.xml +14 -0
- data/test/examples/today.rb +61 -0
- data/test/test.rb +54 -19
- data/test/test.rb.config +1 -0
- data/test/test/basictypes.rb +368 -0
- data/test/test/calendartypes.rb +57 -0
- data/test/test/coordinates.rb +380 -0
- data/test/test/ephemeris.rb +127 -0
- data/test/test/googlecalendar.rb +167 -0
- data/test/test/icalendar.rb +848 -0
- data/test/test/inspect.rb +115 -0
- data/test/test/parts.rb +480 -0
- data/test/test/region/chinese.rb +161 -0
- data/test/test/region/french.rb +33 -0
- data/test/test/region/geologicalage.rb +14 -0
- data/test/test/region/indian.rb +55 -0
- data/test/test/region/iran.rb +54 -0
- data/test/test/region/islamic.rb +18 -0
- data/test/test/region/japanese.rb +62 -0
- data/test/test/region/jewish.rb +61 -0
- data/test/test/region/m17n.rb +181 -0
- data/test/test/region/mayan.rb +78 -0
- data/test/test/region/moon.rb +14 -0
- data/test/test/region/planets.rb +14 -0
- data/test/test/region/residue.rb +123 -0
- data/test/test/region/sun.rb +14 -0
- data/test/test/region/thai.rb +94 -0
- data/test/test/region/tibetan.rb +30 -0
- data/test/test/tmobjects.rb +356 -57
- data/test/test/tmposition.rb +237 -0
- data/test/test/tmreference.rb +95 -0
- data/when_exe.gemspec +2 -2
- metadata +187 -7
- data/doc/COPYING +0 -31
- data/doc/COPYING.ja +0 -25
- 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
|