when_exe 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +333 -212
- data/bin/make_ttl.rb +37 -0
- data/bin/make_ttl.rb.config +9 -0
- data/lib/when_exe.rb +923 -925
- data/lib/when_exe/calendarnote.rb +9 -5
- data/lib/when_exe/coordinates.rb +2437 -2446
- data/lib/when_exe/inspect.rb +1480 -1408
- data/lib/when_exe/linkeddata.rb +574 -0
- data/lib/when_exe/locales/akt.rb +177 -176
- data/lib/when_exe/locales/locale.rb +751 -751
- data/lib/when_exe/mini_application.rb +307 -307
- data/lib/when_exe/parts/resource.rb +1115 -1103
- data/lib/when_exe/region/chinese/epochs.rb +6 -5
- data/lib/when_exe/region/christian.rb +831 -829
- data/lib/when_exe/region/japanese.rb +93 -93
- data/lib/when_exe/region/japanese/notes.rb +1510 -1495
- data/lib/when_exe/region/japanese/residues.rb +13 -13
- data/lib/when_exe/tmposition.rb +2307 -2273
- data/lib/when_exe/tmreference.rb +1744 -1734
- data/lib/when_exe/version.rb +2 -2
- data/link_to_online_documents +1 -1
- data/test/scripts/3.ext.rb +6 -6
- data/test/scripts/3.rb +6 -6
- data/test/test.rb +76 -75
- data/test/test/icalendar.rb +883 -879
- data/test/test/linkeddata.rb +224 -0
- data/test/test/region/m17n.rb +193 -193
- data/when_exe.gemspec +3 -2
- metadata +13 -6
@@ -1,93 +1,93 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
Copyright (C) 2011-
|
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
|
-
class BasicTypes::M17n
|
10
|
-
|
11
|
-
Japanese = [self, [
|
12
|
-
"locale:[=en:, ja=ja:, alias=ja:]",
|
13
|
-
"names:[Japanese=]",
|
14
|
-
|
15
|
-
# Remarks
|
16
|
-
"[based on Research Project 22520700=http://suchowan.at.webry.info/201401/article_25.html," +
|
17
|
-
"典拠 - 科研22520700=]",
|
18
|
-
|
19
|
-
[self,
|
20
|
-
"names:[Month, 月=ja:%%<月_(暦)>]",
|
21
|
-
"[Month 1=, *正月=ja:%%<1月_(旧暦)>, 睦月 ]",
|
22
|
-
"[Month 2=, *二月=ja:%%<2月_(旧暦)>, 如月 ]",
|
23
|
-
"[Month 3=, *三月=ja:%%<3月_(旧暦)>, 弥生 ]",
|
24
|
-
"[Month 4=, *四月=ja:%%<4月_(旧暦)>, 卯月 ]",
|
25
|
-
"[Month 5=, *五月=ja:%%<5月_(旧暦)>, 皐月 ]",
|
26
|
-
"[Month 6=, *六月=ja:%%<6月_(旧暦)>, 水無月]",
|
27
|
-
"[Month 7=, *七月=ja:%%<7月_(旧暦)>, 文月 ]",
|
28
|
-
"[Month 8=, *八月=ja:%%<8月_(旧暦)>, 葉月 ]",
|
29
|
-
"[Month 9=, *九月=ja:%%<9月_(旧暦)>, 長月 ]",
|
30
|
-
"[Month 10=, *十月=ja:%%<10月_(旧暦)>, 神無月]",
|
31
|
-
"[Month 11=, *十一月=ja:%%<11月_(旧暦)>, 霜月 ]",
|
32
|
-
"[Month 12=, *十二月=ja:%%<
|
33
|
-
],
|
34
|
-
|
35
|
-
[self,
|
36
|
-
"names:[The_Tale_of_Genji, *源氏物語]",
|
37
|
-
"[Kiritsubo=, *桐壺]",
|
38
|
-
"[Hahakigi=, *帚木=ja:%%<帚木_(源氏物語)>]",
|
39
|
-
"[Utsusemi=, *空蝉=ja:%%<空蝉_(源氏物語)>]",
|
40
|
-
"[Yūgao=, *夕顔=ja:%%<夕顔_(源氏物語)>]",
|
41
|
-
"[Wakamurasaki=, *若紫]",
|
42
|
-
"[Suetsumuhana, *末摘花=ja:%%<末摘花_(源氏物語)>]",
|
43
|
-
"[Momiji no Ga=, *紅葉賀]",
|
44
|
-
"[Hana no En=, *花宴]",
|
45
|
-
"[Aoi=, *葵=ja:%%<葵_(源氏物語)>]",
|
46
|
-
"[Sakaki=, *賢木]",
|
47
|
-
"[Hana Chiru Sato=, *花散里]",
|
48
|
-
"[Suma=, *須磨=ja:%%<須磨_(源氏物語)>]",
|
49
|
-
"[Akashi=, *明石=ja:%%<明石_(源氏物語)>]",
|
50
|
-
"[Miotsukushi=, *澪標=ja:%%<澪標_(源氏物語)>]",
|
51
|
-
"[Yomogiu=, *蓬生]",
|
52
|
-
"[Sekiya=, *関屋=ja:%%<関屋_(源氏物語)>]",
|
53
|
-
"[E Awase=, *絵合]",
|
54
|
-
"[Matsukaze=, *松風=ja:%%<松風_(源氏物語)>]",
|
55
|
-
"[Usugumo=, *薄雲]",
|
56
|
-
"[Asagao=, *朝顔=ja:%%<朝顔_(源氏物語)>]",
|
57
|
-
"[Otome=, *少女=ja:%%<少女_(源氏物語)>]",
|
58
|
-
"[Tamakazura=, *玉鬘=ja:%%<玉鬘_(源氏物語)>]",
|
59
|
-
"[Hatsune=, *初音=ja:%%<初音_(源氏物語)>]",
|
60
|
-
"[Kochō=, *胡蝶=ja:%%<胡蝶_(源氏物語)>]",
|
61
|
-
"[Hotaru=, *蛍=ja:%%<蛍_(源氏物語)>]",
|
62
|
-
"[Tokonatsu=, *常夏]",
|
63
|
-
"[Kagaribi=, *篝火]",
|
64
|
-
"[Nowaki=, *野分=ja:%%<野分_(源氏物語)>]",
|
65
|
-
"[Miyuki=, *行幸=ja:%%<行幸_(源氏物語)>]",
|
66
|
-
"[Fujibakama=, *藤袴]",
|
67
|
-
"[Makibashira=, *真木柱]",
|
68
|
-
"[Mume ga E=, *梅枝]",
|
69
|
-
"[Fuji no Uraba=, *藤裏葉]",
|
70
|
-
"[Wakana=, *若菜=ja:%%<若菜_(源氏物語)>]",
|
71
|
-
"[Kashiwagi=, *柏木=ja:%%<柏木_(源氏物語)>]",
|
72
|
-
"[Yokobue=, *横笛=ja:%%<横笛_(源氏物語)>]",
|
73
|
-
"[Suzumushi=, *鈴虫]",
|
74
|
-
"[Yūgiri=, *夕霧=ja:%%<夕霧_(源氏物語)>]",
|
75
|
-
"[Minori=, *御法]",
|
76
|
-
"[Maboroshi=, *幻=ja:%%<幻_(源氏物語)>]",
|
77
|
-
"[Niō Miya=, *匂宮]",
|
78
|
-
"[Kōbai=, *紅梅=ja:%%<紅梅_(源氏物語)>]",
|
79
|
-
"[Takekawa=, *竹河]",
|
80
|
-
"[Hashihime=, *橋姫=ja:%%<橋姫_(源氏物語)>]",
|
81
|
-
"[Shī ga Moto=, *椎本]",
|
82
|
-
"[Agemaki=, *総角=ja:%%<総角_(源氏物語)>]",
|
83
|
-
"[Sawarabi=, *早蕨]",
|
84
|
-
"[Yadorigi=, *宿木]",
|
85
|
-
"[Azumaya=, *東屋]",
|
86
|
-
"[Ukifune, *浮舟=ja:%%<浮舟_(源氏物語)>]",
|
87
|
-
"[Kagerō=, *蜻蛉=ja:%%<蜻蛉_(源氏物語)>]",
|
88
|
-
"[Tenarai=, *手習]",
|
89
|
-
"[Yume no Ukihashi=, *夢浮橋]"
|
90
|
-
]
|
91
|
-
]]
|
92
|
-
end
|
93
|
-
end
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2015 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
|
+
class BasicTypes::M17n
|
10
|
+
|
11
|
+
Japanese = [self, [
|
12
|
+
"locale:[=en:, ja=ja:, alias=ja:]",
|
13
|
+
"names:[Japanese=]",
|
14
|
+
|
15
|
+
# Remarks
|
16
|
+
"[based on Research Project 22520700=http://suchowan.at.webry.info/201401/article_25.html," +
|
17
|
+
"典拠 - 科研22520700=]",
|
18
|
+
|
19
|
+
[self,
|
20
|
+
"names:[Month, 月=ja:%%<月_(暦)>]",
|
21
|
+
"[Month 1=, *正月=ja:%%<1月_(旧暦)>, 睦月 ]",
|
22
|
+
"[Month 2=, *二月=ja:%%<2月_(旧暦)>, 如月 ]",
|
23
|
+
"[Month 3=, *三月=ja:%%<3月_(旧暦)>, 弥生 ]",
|
24
|
+
"[Month 4=, *四月=ja:%%<4月_(旧暦)>, 卯月 ]",
|
25
|
+
"[Month 5=, *五月=ja:%%<5月_(旧暦)>, 皐月 ]",
|
26
|
+
"[Month 6=, *六月=ja:%%<6月_(旧暦)>, 水無月]",
|
27
|
+
"[Month 7=, *七月=ja:%%<7月_(旧暦)>, 文月 ]",
|
28
|
+
"[Month 8=, *八月=ja:%%<8月_(旧暦)>, 葉月 ]",
|
29
|
+
"[Month 9=, *九月=ja:%%<9月_(旧暦)>, 長月 ]",
|
30
|
+
"[Month 10=, *十月=ja:%%<10月_(旧暦)>, 神無月]",
|
31
|
+
"[Month 11=, *十一月=ja:%%<11月_(旧暦)>, 霜月 ]",
|
32
|
+
"[Month 12=, *十二月=ja:%%<12月_(旧暦)>, 師走 ]"
|
33
|
+
],
|
34
|
+
|
35
|
+
[self,
|
36
|
+
"names:[The_Tale_of_Genji, *源氏物語]",
|
37
|
+
"[Kiritsubo=, *桐壺]",
|
38
|
+
"[Hahakigi=, *帚木=ja:%%<帚木_(源氏物語)>]",
|
39
|
+
"[Utsusemi=, *空蝉=ja:%%<空蝉_(源氏物語)>]",
|
40
|
+
"[Yūgao=, *夕顔=ja:%%<夕顔_(源氏物語)>]",
|
41
|
+
"[Wakamurasaki=, *若紫]",
|
42
|
+
"[Suetsumuhana, *末摘花=ja:%%<末摘花_(源氏物語)>]",
|
43
|
+
"[Momiji no Ga=, *紅葉賀]",
|
44
|
+
"[Hana no En=, *花宴]",
|
45
|
+
"[Aoi=, *葵=ja:%%<葵_(源氏物語)>]",
|
46
|
+
"[Sakaki=, *賢木]",
|
47
|
+
"[Hana Chiru Sato=, *花散里]",
|
48
|
+
"[Suma=, *須磨=ja:%%<須磨_(源氏物語)>]",
|
49
|
+
"[Akashi=, *明石=ja:%%<明石_(源氏物語)>]",
|
50
|
+
"[Miotsukushi=, *澪標=ja:%%<澪標_(源氏物語)>]",
|
51
|
+
"[Yomogiu=, *蓬生]",
|
52
|
+
"[Sekiya=, *関屋=ja:%%<関屋_(源氏物語)>]",
|
53
|
+
"[E Awase=, *絵合]",
|
54
|
+
"[Matsukaze=, *松風=ja:%%<松風_(源氏物語)>]",
|
55
|
+
"[Usugumo=, *薄雲]",
|
56
|
+
"[Asagao=, *朝顔=ja:%%<朝顔_(源氏物語)>]",
|
57
|
+
"[Otome=, *少女=ja:%%<少女_(源氏物語)>]",
|
58
|
+
"[Tamakazura=, *玉鬘=ja:%%<玉鬘_(源氏物語)>]",
|
59
|
+
"[Hatsune=, *初音=ja:%%<初音_(源氏物語)>]",
|
60
|
+
"[Kochō=, *胡蝶=ja:%%<胡蝶_(源氏物語)>]",
|
61
|
+
"[Hotaru=, *蛍=ja:%%<蛍_(源氏物語)>]",
|
62
|
+
"[Tokonatsu=, *常夏]",
|
63
|
+
"[Kagaribi=, *篝火]",
|
64
|
+
"[Nowaki=, *野分=ja:%%<野分_(源氏物語)>]",
|
65
|
+
"[Miyuki=, *行幸=ja:%%<行幸_(源氏物語)>]",
|
66
|
+
"[Fujibakama=, *藤袴]",
|
67
|
+
"[Makibashira=, *真木柱]",
|
68
|
+
"[Mume ga E=, *梅枝]",
|
69
|
+
"[Fuji no Uraba=, *藤裏葉]",
|
70
|
+
"[Wakana=, *若菜=ja:%%<若菜_(源氏物語)>]",
|
71
|
+
"[Kashiwagi=, *柏木=ja:%%<柏木_(源氏物語)>]",
|
72
|
+
"[Yokobue=, *横笛=ja:%%<横笛_(源氏物語)>]",
|
73
|
+
"[Suzumushi=, *鈴虫]",
|
74
|
+
"[Yūgiri=, *夕霧=ja:%%<夕霧_(源氏物語)>]",
|
75
|
+
"[Minori=, *御法]",
|
76
|
+
"[Maboroshi=, *幻=ja:%%<幻_(源氏物語)>]",
|
77
|
+
"[Niō Miya=, *匂宮]",
|
78
|
+
"[Kōbai=, *紅梅=ja:%%<紅梅_(源氏物語)>]",
|
79
|
+
"[Takekawa=, *竹河]",
|
80
|
+
"[Hashihime=, *橋姫=ja:%%<橋姫_(源氏物語)>]",
|
81
|
+
"[Shī ga Moto=, *椎本]",
|
82
|
+
"[Agemaki=, *総角=ja:%%<総角_(源氏物語)>]",
|
83
|
+
"[Sawarabi=, *早蕨]",
|
84
|
+
"[Yadorigi=, *宿木]",
|
85
|
+
"[Azumaya=, *東屋]",
|
86
|
+
"[Ukifune, *浮舟=ja:%%<浮舟_(源氏物語)>]",
|
87
|
+
"[Kagerō=, *蜻蛉=ja:%%<蜻蛉_(源氏物語)>]",
|
88
|
+
"[Tenarai=, *手習]",
|
89
|
+
"[Yume no Ukihashi=, *夢浮橋]"
|
90
|
+
]
|
91
|
+
]]
|
92
|
+
end
|
93
|
+
end
|
@@ -1,1495 +1,1510 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
Copyright (C) 2012-
|
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/ephemeris/notes'
|
9
|
-
require 'when_exe/region/japanese/residues'
|
10
|
-
|
11
|
-
class When::CalendarNote
|
12
|
-
|
13
|
-
#
|
14
|
-
# 日本暦注
|
15
|
-
#
|
16
|
-
class Japanese < self
|
17
|
-
|
18
|
-
autoload :Eclipse, 'when_exe/region/japanese/eclipses'
|
19
|
-
|
20
|
-
#
|
21
|
-
# 日本暦注が使用する暦法
|
22
|
-
#
|
23
|
-
# @private
|
24
|
-
class Cal4Note
|
25
|
-
def initialize(calendar, solar)
|
26
|
-
@calendar = calendar
|
27
|
-
@solar = solar
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
#
|
32
|
-
# 日本暦注の要素
|
33
|
-
#
|
34
|
-
# @private
|
35
|
-
class Note < When::CalendarNote::NoteElement
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
# 日本暦注の要素
|
40
|
-
#
|
41
|
-
Notes = [When::BasicTypes::M17n, [
|
42
|
-
"locale:[=ja:, en=en:]",
|
43
|
-
"names:[日本暦注=]",
|
44
|
-
|
45
|
-
# 年の暦注 ----------------------------
|
46
|
-
[When::BasicTypes::M17n,
|
47
|
-
"names:[
|
48
|
-
[Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
|
49
|
-
# [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
|
50
|
-
# 'position:共通'], # 干
|
51
|
-
# [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
|
52
|
-
# 'position:共通'], # 支
|
53
|
-
[Note, 0x3800, "label:[廿八宿=ja:%%<二十八宿>]",
|
54
|
-
'position:共通'], # 1: 廿八宿
|
55
|
-
[Note, 0x3FFC, "label:[大歳壇=]", 'position:暦序'], # 2: 干支
|
56
|
-
[Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
|
57
|
-
[Note, 0xFFFC, "label:[納音]", 'position:暦序', 'suffix:是'], # 4: 干支
|
58
|
-
[Note, 0xFFFF, "label:[大歳=ja:%%<太歳神>]",
|
59
|
-
'position:暦序', 'suffix:在'], # 5: 干支
|
60
|
-
[Note, 0xFFFF, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
|
61
|
-
'position:暦序', 'suffix:在'], # 6: 支
|
62
|
-
[Note, 0xFFFF, "label:[大陰=ja:%%<太陰神>]",
|
63
|
-
'position:暦序', 'suffix:在'], # 7: 支
|
64
|
-
[Note, 0xFFFF, "label:[歳徳=ja:%%<歳徳神>]",
|
65
|
-
'position:暦序', 'suffix:在'], # 8: 干
|
66
|
-
[Note, 0xFFFF, "label:[歳刑=ja:%%<歳刑神>]",
|
67
|
-
'position:暦序', 'suffix:在'], # 9: 支
|
68
|
-
[Note, 0xFFFF, "label:[歳破=ja:%%<歳破神>]",
|
69
|
-
'position:暦序', 'suffix:在'], # 10: 支
|
70
|
-
[Note, 0xFFFF, "label:[歳煞=ja:%%<歳殺神>]",
|
71
|
-
'position:暦序', 'suffix:在'], # 11: 支
|
72
|
-
[Note, 0xFFFF, "label:[黄幡=ja:%%<黄幡神>]",
|
73
|
-
'position:暦序', 'suffix:在'], # 12: 支
|
74
|
-
[Note, 0xFFFF, "label:[豹尾=ja:%%<豹尾神>]",
|
75
|
-
'position:暦序', 'suffix:在'], # 13: 支
|
76
|
-
[Note, 0x0003, "label:[天道=]", 'position:暦序', 'suffix:-'], # 14: 支
|
77
|
-
[Note, 0x0003, "label:[人道=]", 'position:暦序', 'suffix:-'], # 15: 支
|
78
|
-
[Note, 0x3FFC, "label:[歳次=]", 'position:暦序', 'suffix:-'], # 16: 支
|
79
|
-
[Note, 0xF800, "label:[金神]", 'position:仮名暦', 'suffix:在'], # 17: 干
|
80
|
-
[Note, 0xFFFF, "label:[大小]", 'position:暦序'] # 18: 朔閏表
|
81
|
-
],
|
82
|
-
|
83
|
-
# 月の暦注 ----------------------------
|
84
|
-
[When::BasicTypes::M17n,
|
85
|
-
"names:[
|
86
|
-
[Note, 0xFFFF, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>, Month]",
|
87
|
-
'position:月建'], # 0: 月の和名
|
88
|
-
# [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 干支
|
89
|
-
# [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
|
90
|
-
# 'position:共通'], # 干
|
91
|
-
# [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
|
92
|
-
# 'position:共通'], # 支
|
93
|
-
[Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
|
94
|
-
'position:共通'], # 1: 廿八宿
|
95
|
-
[Note, 0xFFFC, "label:[月建=]", 'position:月建', 'suffix:-' ], # 2: 年の十干と暦月
|
96
|
-
[Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
|
97
|
-
[Note, 0x0003, "label:[天氣=]", 'position:月建', 'suffix:-' ], # 4: 暦月
|
98
|
-
[Note, 0x3FFF, "label:[天道=]", 'position:月建', 'suffix:-' ], # 5: 暦月
|
99
|
-
[Note, 0x0003, "label:[人道=]", 'position:月建', 'suffix:-' ], # 6: 暦月
|
100
|
-
[Note, 0x0003, "label:[月破=]", 'position:月建', 'suffix:在'], # 7: 暦月
|
101
|
-
[Note, 0x3FFC, "label:[天徳=]", 'position:月建', 'suffix:在'], # 8: 暦月
|
102
|
-
[Note, 0x3FFF, "label:[月煞=]", 'position:月建', 'suffix:在'], # 9: 暦月
|
103
|
-
[Note, 0x3FFF, "label:[用時=]", 'position:月建', 'suffix:-' ], # 10: 暦月
|
104
|
-
[Note, 0x3FFF, "label:[月徳=]", 'position:月建', 'suffix:在'], # 11: 暦月
|
105
|
-
[Note, 0x3FFC, "label:[月徳合=]", 'position:月建', 'suffix:在'], # 12: 暦月
|
106
|
-
[Note, 0x3FFC, "label:[月空=]", 'position:月建', 'suffix:在'], # 13: 暦月
|
107
|
-
[Note, 0x3FFF, "label:[三鏡=]", 'position:月建', 'suffix:-' ], # 14: 暦月
|
108
|
-
[Note, 0x3FFF, "label:[土府=]", 'position:月建', 'suffix:在'], # 15: 暦月
|
109
|
-
[Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
|
110
|
-
'position:月建', 'suffix:在'], # 16: 暦月
|
111
|
-
[Note, 0xFFFF, "label:[大小]", 'position:月建'] # 17: 朔閏表
|
112
|
-
],
|
113
|
-
|
114
|
-
# 日の暦注 ----------------------------
|
115
|
-
[When::BasicTypes::M17n,
|
116
|
-
"names:[
|
117
|
-
[Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
|
118
|
-
# [Note, 0x, "label:[干=ja:%%<十干>]",
|
119
|
-
# 'position:共通'], # 干
|
120
|
-
# [Note, 0x, "label:[支=ja:%%<十二支>]",
|
121
|
-
# 'position:共通'], # 支
|
122
|
-
[Note, 0x3FFF, "label:[納音]", 'position:共通', 'suffix:是'], # 1: 干支
|
123
|
-
[Note, 0xFFFF, "label:[十二直]", 'position:共通'], # 2: 支 節月
|
124
|
-
[Note, 0xFFFF, "label:[七曜]", 'position:共通'], # 3: 七曜
|
125
|
-
[Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
|
126
|
-
'position:共通'], # 4: 廿八宿
|
127
|
-
[Note, 0x07F8, "label:[廿七宿=ja:%%<二十八宿>]",
|
128
|
-
'position:共通'], # 5: 暦月 暦日
|
129
|
-
[Note, 0xC000, "label:[九星]", 'position:民間'], # 6: 九星
|
130
|
-
[Note, 0x8000, "label:[六曜]", 'position:民間'], # 7: 暦月 暦日
|
131
|
-
[Note, 0xE000, "label:[祝祭日]", 'position:祝祭日'], # 8: 暦月 暦日 (七曜)
|
132
|
-
[Note, 0xFFFF, "label:[廿四節気=ja:%%<二十四節気>]",
|
133
|
-
'position:時候'], # 9: 太陽黄経
|
134
|
-
[Note, 0xFFFF, "label:[節中=]", 'position:時候'], # 10: 太陽黄経
|
135
|
-
[Note, 0xFFFC, "label:[七十二候]", 'position:時候'], # 11: 太陽黄経
|
136
|
-
[Note, 0x3FFC, "label:[六十卦=]", 'position:時候'], # 12: 太陽黄経
|
137
|
-
[Note, 0xF800, "label:[節分]", 'position:雑節'], # 13: 立春からの日数
|
138
|
-
[Note, 0xF800, "label:[初午]", 'position:雑節'], # 14: 支 節月 or 暦月
|
139
|
-
[Note, 0xF800, "label:[八十八夜]", 'position:雑節'], # 15: 立春からの日数
|
140
|
-
[Note, 0xF800, "label:[入梅]", 'position:雑節'], # 16: 干 太陽黄経
|
141
|
-
[Note, 0xF800, "label:[半夏生]", 'position:雑節'], # 17: 干 太陽黄経
|
142
|
-
[Note, 0xF800, "label:[二百十日]", 'position:雑節'], # 18: 立春からの日数
|
143
|
-
[Note, 0xF800, "label:[二百廿日=ja:%%<二百二十日>]", 'position:雑節'], # 19: 立春からの日数
|
144
|
-
|
145
|
-
[Note, 0x3FFC, "label:[大禍=ja:%%<暦注下段>#%.<大禍日>]",
|
146
|
-
'position:上段 上段 欄外 欄外', 'suffix:日'], # 20: 支 節月
|
147
|
-
[Note, 0x3FFC, "label:[滅門=ja:%%<暦注下段>#%.<滅門日>]",
|
148
|
-
'position:上段 上段 欄外 欄外', 'suffix:日'], # 21: 支 節月
|
149
|
-
[Note, 0x3FFC, "label:[狼藉=ja:%%<暦注下段>#%.<狼藉日>]",
|
150
|
-
'position:上段 上段 欄外 欄外', 'suffix:日'], # 22: 支 節月
|
151
|
-
|
152
|
-
[Note, 0x07F8, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 23: 七曜 廿七宿
|
153
|
-
[Note, 0x07F8, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 24: 七曜 廿七宿
|
154
|
-
[Note, 0x07F8, "label:[羅刹=]", 'position:上段 上段 上段 上段'], # 25: 七曜 廿七宿
|
155
|
-
|
156
|
-
[Note, 0x3FFC, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
|
157
|
-
'position:上段 上段 上段 上段', 'suffix:-'], # 26: 干支 節年
|
158
|
-
[Note, 0xFFFC, "label:[天一=ja:%%<天一神>]",
|
159
|
-
'position:上段 上段 上段 上段', 'suffix:-'], # 27: 干支
|
160
|
-
[Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
|
161
|
-
'position:上段 上段 上段 上段', 'suffix:-'], # 28: 干支
|
162
|
-
[Note, 0x3FFC, "label:[歳下食=ja:%%<暦注下段>#%.<歳下食>]",
|
163
|
-
'position:上段 上段 上段 上段'], # 29: 干支 節年
|
164
|
-
[Note, 0x3FFC, "label:[忌遠行=]", 'position:上段 上段 上段 上段'], # 30: 支 節月
|
165
|
-
[Note, 0x3FFC, "label:[忌夜行=]", 'position:上段 上段 上段 上段'], # 31: 支 節月
|
166
|
-
[Note, 0x3FFC, "label:[下食時=ja:%%<暦注下段>#%.<時下食>]",
|
167
|
-
'position:上段 上段 上段 上段', 'suffix:-'], # 32: 支 節月 貞享暦で一部廃止
|
168
|
-
[Note, 0x3FFC, "label:[天間=]", 'position:上段 上段 上段 中段上'], # 33: 干支 節月
|
169
|
-
[Note, 0x3FFC, "label:[不視病=]", 'position:上段 上段 上段 上段'], # 34: 干
|
170
|
-
[Note, 0x3FFC, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 35: 干
|
171
|
-
[Note, 0x3FFC, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 36: 支
|
172
|
-
[Note, 0xFFFC, "label:[彼岸]", 'position:仮名暦'], # 37: 太陽黄経
|
173
|
-
[Note, 0xFFFF, "label:[社=ja:%%<社日>]",
|
174
|
-
'position:中段 中段 中段 中段', 'suffix:日'], # 38: 干 太陽黄経
|
175
|
-
[Note, 0xFFFF, "label:[三伏]", 'position:中段 中段 中段 中段'], # 39: 干 太陽黄経
|
176
|
-
[Note, 0x3FFC, "label:[除手足甲=]", 'position:中段 中段 中段 中段'], # 40: 晦(除手足甲)、支(片方のみ), 没滅凶会日×
|
177
|
-
[Note, 0x3FFC, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 41: 支 没滅凶会日×
|
178
|
-
[Note, 0x3FFD, "label:[臘=ja:%%<臘日>]",
|
179
|
-
'position:中段 中段 中段 中段', 'suffix:日'], # 42: 支 太陽黄経
|
180
|
-
[Note, 0x3FFC, "label:[伐=]", 'position:中段 中段 中段 中段上', 'suffix:日'], # 43: 干支
|
181
|
-
[Note, 0x3FFC, "label:[五墓=ja:%%<暦注下段>#%.<五墓日>]",
|
182
|
-
'position:中段 中段 中段 中段下', 'suffix:日'], # 44: 干支
|
183
|
-
[Note, 0x3FFC, "label:[六蛇=]", 'position:中段 中段 中段 中段上'], # 45: 干支 節月
|
184
|
-
[Note, 0x3FFC, "label:[七鳥=]", 'position:中段 中段 中段 中段上'], # 46: 干支 節月
|
185
|
-
[Note, 0x3FFC, "label:[八龍=]", 'position:中段 中段 中段 中段上'], # 47: 干支 節月
|
186
|
-
[Note, 0x3FFC, "label:[九虎=]", 'position:中段 中段 中段 中段上'], # 48: 干支 節月
|
187
|
-
[Note, 0x07FF, "label:[没=ja:%%<没日>]",
|
188
|
-
'position:中段 中段 中段 中段', 'suffix:日'], # 49: 太陽黄経
|
189
|
-
[Note, 0xFFF8, "label:[日食]", 'position:中段 中段 中段 中段'], # 50: 日食表
|
190
|
-
[Note, 0x07FC, "label:[滅=ja:%%<滅日>]",
|
191
|
-
'position:中段 中段 中段 中段', 'suffix:日'], # 51: 月の位相
|
192
|
-
[Note, 0xFFF8, "label:[月食]", 'position:中段 中段 中段 中段'], # 52: 月食表
|
193
|
-
[Note, 0xC7FD, "label:[月相]", 'position:中段 中段 中段 中段'], # 53: 月の位相
|
194
|
-
[Note, 0xFFFF, "label:[土用事=ja:%%<土用>]",
|
195
|
-
'position:中段 中段 中段 中段'], # 54: 太陽黄経
|
196
|
-
[Note, 0x3FF0, "label:[伏龍=]", 'position:上段 上段 下段 下段', 'suffix:在'], # 55: 太陽黄経
|
197
|
-
|
198
|
-
[Note, 0x3FFF, "label:[凶会=ja:%%<暦注下段>#%.<凶会日>]",
|
199
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 56: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
|
200
|
-
[Note, 0x3FFF, "label:[大小歳=]", 'position:下段 下段 下段 下段'], # 57: 干支 節月
|
201
|
-
[Note, 0x3FFC, "label:[歳徳=ja:%%<歳徳神>]",
|
202
|
-
'position:下段 下段 下段 下段'], # 58: 干 節年 凶会日× ~合も
|
203
|
-
[Note, 0x0003, "label:[天倉=]", 'position:古注'], # 59: 干支 節月
|
204
|
-
# [Note, 0x0003, "label:[天李=]", 'position:古注'], # 干支 節月?
|
205
|
-
[Note, 0x37FF, "label:[天恩=ja:%%<暦注下段>#%.<天恩日>]",
|
206
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 60: 干支 節月 凶会日×
|
207
|
-
[Note, 0xFFFF, "label:[天赦=ja:%%<暦注下段>#%.<天赦日>]",
|
208
|
-
'position:下段 下段 下段 下段'], # 61: 干支 節月
|
209
|
-
[Note, 0x37FF, "label:[母倉=ja:%%<暦注下段>#%.<母倉日>]",
|
210
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 62: 支 節月 凶会日×
|
211
|
-
[Note, 0x37FC, "label:[月徳=]", 'position:下段 下段 下段 下段'], # 63: 干 節月 凶会日× ~合も
|
212
|
-
[Note, 0x3FFF, "label:[九坎=]", 'position:下段 下段 下段 下段'], # 64: 支 節月
|
213
|
-
[Note, 0x3FFF, "label:[歸忌=ja:%%<暦注下段>#%.<帰忌日>]",
|
214
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 65: 支 節月
|
215
|
-
[Note, 0x3FFF, "label:[血忌=ja:%%<暦注下段>#%.<血忌日>]",
|
216
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 66: 支 節月
|
217
|
-
[Note, 0x3FFC, "label:[無翹=]", 'position:下段 下段 下段 下段'], # 67: 支 節月
|
218
|
-
[Note, 0x3FFF, "label:[厭=]", 'position:下段 下段 下段 下段'], # 68: 支 節月
|
219
|
-
[Note, 0x3FFC, "label:[重=ja:%%<暦注下段>#%.<重日>]",
|
220
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 69: 支
|
221
|
-
[Note, 0x3FFD, "label:[復=ja:%%<暦注下段>#%.<復日>]",
|
222
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 70: 干 節月
|
223
|
-
[Note, 0x3FFC, "label:[月煞=]", 'position:下段 下段 下段 下段'], # 71: 支 節月
|
224
|
-
[Note, 0x3FFF, "label:[往亡=ja:%%<暦注下段>#%.<往亡日>]",
|
225
|
-
'position:下段 下段 下段 下段', 'suffix:日'], # 72: 太陽黄経
|
226
|
-
[Note, 0x3FFF, "label:[日遊=ja:%%<日遊神>]",
|
227
|
-
'position:最下段', 'suffix:在'], # 73: 干支
|
228
|
-
[Note, 0x07FF, "label:[人神配当=]", 'position:最下段孟月', 'suffix:-'], # 74: 暦日
|
229
|
-
|
230
|
-
[Note, 0x3E00, "label:[受死=ja:%%<暦注下段>#%.<受死日>]",
|
231
|
-
'position:仮名暦', 'suffix:日'], # 75: 支 節月
|
232
|
-
[Note, 0xFFF0, "label:[八專]", 'position:仮名暦'], # 76: 干支
|
233
|
-
[Note, 0x3E00, "label:[八專間日=ja:%%<八専>]",
|
234
|
-
'position:仮名暦'], # 77: 干支
|
235
|
-
[Note, 0xC000, "label:[金神間日=ja:%%<金神>#%.<金神の遊行・間日>]",
|
236
|
-
'position:仮名暦'], # 78: 支 節月
|
237
|
-
[Note, 0xC000, "label:[金神遊行=ja:%%<金神>#%.<金神の遊行・間日>]",
|
238
|
-
'position:仮名暦'], # 79: 支 節月
|
239
|
-
[Note, 0x3FF0, "label:[天火=ja:%%<暦注下段>#%.<天火日>]",
|
240
|
-
'position:仮名暦', 'suffix:日'], # 80: 支 節月
|
241
|
-
[Note, 0x3FF0, "label:[地火=ja:%%<暦注下段>#%.<地火日>]",
|
242
|
-
'position:仮名暦', 'suffix:日'], # 81: 支 節月
|
243
|
-
[Note, 0x3800, "label:[人火=]", 'position:仮名暦'], # 82: 支 節月
|
244
|
-
[Note, 0x3800, "label:[雷火=]", 'position:仮名暦'], # 83: 支 節月
|
245
|
-
[Note, 0x3FF0, "label:[赤舌=ja:%%<赤舌日>]",
|
246
|
-
'position:仮名暦', 'suffix:日'], # 84: 暦月 暦日
|
247
|
-
[Note, 0x3E00, "label:[十死=ja:%%<暦注下段>#%.<十死日>]",
|
248
|
-
'position:仮名暦', 'suffix:日'], # 85: 支 節月
|
249
|
-
[Note, 0x3E00, "label:[道虚=]", 'position:仮名暦', 'suffix:日'], # 86: 暦日
|
250
|
-
[Note, 0x3E00, "label:[大明=ja:%%<暦注下段>#%.<大明日>]",
|
251
|
-
'position:仮名暦', 'suffix:日'], # 87: 干支
|
252
|
-
[Note, 0x0600, "label:[大赤=ja:%%<赤口日>]",
|
253
|
-
'position:仮名暦', 'suffix:日'], # 88: 暦月 暦日
|
254
|
-
[Note, 0xF800, "label:[甲子待=ja:%%<甲子>]",
|
255
|
-
'position:仮名暦'], # 89: 干支
|
256
|
-
[Note, 0xC000, "label:[己巳]", 'position:仮名暦'], # 90: 干支
|
257
|
-
[Note, 0xF800, "label:[庚申待]", 'position:仮名暦'], # 91: 干支
|
258
|
-
[Note, 0x3800, "label:[犯土]", 'position:仮名暦'], # 92: 干支
|
259
|
-
[Note, 0xF800, "label:[十方暮]", 'position:仮名暦'], # 93: 干支
|
260
|
-
[Note, 0xF800, "label:[一粒万倍=ja:%%<一粒万倍日>]",
|
261
|
-
'position:仮名暦', 'suffix:日'], # 94: 支 節月
|
262
|
-
[Note, 0x3800, "label:[天福=]", 'position:仮名暦'], # 95: 支 節月
|
263
|
-
[Note, 0x3800, "label:[地福=]", 'position:仮名暦'], # 96: 支 節月
|
264
|
-
[Note, 0x3800, "label:[地五福=]", 'position:仮名暦'], # 97: 支 節月
|
265
|
-
[Note, 0xB800, "label:[三隣亡]", 'position:仮名暦'], # 98: 支 節月
|
266
|
-
[Note, 0xF800, "label:[不成就=ja:%%<不成就日>]",
|
267
|
-
'position:仮名暦', 'suffix:日'], # 99: 暦月 暦日/晦日
|
268
|
-
[Note, 0x3800, "label:[鬼宿]", 'position:仮名暦'], #100: 廿八宿
|
269
|
-
[Note, 0x3800, "label:[金性=]", 'position:仮名暦'], #101: 支 節月 支 節年
|
270
|
-
[Note, 0x3FFF, "label:[三寶吉=http://kotobank.jp/word/%%<三宝吉日>]",
|
271
|
-
'position:上段 上段 上段 上段'], #102: 干支 節月
|
272
|
-
[Note, 0x3FFF, "label:[神吉=ja:%%<暦注下段>#%.<神吉日>]",
|
273
|
-
'position:上段 上段 中段 中段上', 'suffix:日'], #103: 干支 節月
|
274
|
-
[Note, 0x3FFF, "label:[雑事吉=]", 'position:雑事吉'], #104: 干支 節月
|
275
|
-
[Note, 0x3FFF, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'],#105: 干支 節月
|
276
|
-
]
|
277
|
-
]]
|
278
|
-
|
279
|
-
#
|
280
|
-
# 日本暦注の時代変遷
|
281
|
-
#
|
282
|
-
# @private
|
283
|
-
NoteTypes = (2...When::TM::CalendarEra::JapaneseSolar[2].size).to_a.map {|i|
|
284
|
-
calendars =
|
285
|
-
[When::TM::CalendarEra::JapaneseLuniSolar[2][i][2],
|
286
|
-
When::TM::CalendarEra::JapaneseSolar[2][i][2]].map {|epoch|
|
287
|
-
epoch =~ /\A(-?\d+)-(\d+)-(\d+)\^(.+)\z/
|
288
|
-
$4
|
289
|
-
}
|
290
|
-
[$2 == '01' ? $1.to_i : $1.to_i+1, Cal4Note.new(*calendars)]
|
291
|
-
}.reverse
|
292
|
-
|
293
|
-
# @private
|
294
|
-
NoteRange = [
|
295
|
-
# 開始 具注暦 七十二候 index mask
|
296
|
-
[-660, 0, 0], # ~ 696 0 : 0001
|
297
|
-
[ 697, 0, 0], # ~ 763 1 : 0002
|
298
|
-
[ 764, 0, 2], # ~ 800 2 : 0004
|
299
|
-
[ 801, 0, 2], # ~ 900 3 : 0008
|
300
|
-
[ 901, 0, 2], # ~1003 4 : 0010
|
301
|
-
[1004, 1, 2], # ~1047 5 : 0020
|
302
|
-
[1048, 1, 2], # ~1100 6 : 0040
|
303
|
-
[1101, 1, 2], # ~1184 7 : 0080
|
304
|
-
[1185, 2, 2], # ~1300 8 : 0100
|
305
|
-
[1301, 2, 2], # ~1337 9 : 0200
|
306
|
-
[1338, 3, 2], # ~1684 10 : 0400
|
307
|
-
[1685, 3, 3], # ~1754 11 : 0800
|
308
|
-
[1755, 3, 4], # ~1867 12 : 1000
|
309
|
-
[1868, 3, 4], # ~1872 13 : 2000
|
310
|
-
[1873, 3, 4], # ~1873 14 : 4000
|
311
|
-
[1874, 3, 5] # ~ 15 : 8000
|
312
|
-
]
|
313
|
-
|
314
|
-
# @private
|
315
|
-
NoteFocused = (0...NoteRange.size).to_a.map {|range|
|
316
|
-
(2..4).to_a.map {|cord|
|
317
|
-
notes = Notes[1][cord]
|
318
|
-
(2...notes.size).to_a.inject([]) {|focused,note|
|
319
|
-
focused << notes[note][2][/\[.+?[=\]]/][1..-2] if notes[note][1][range] == 1
|
320
|
-
focused
|
321
|
-
}
|
322
|
-
}
|
323
|
-
}
|
324
|
-
|
325
|
-
#
|
326
|
-
# 月の大小
|
327
|
-
#
|
328
|
-
# @private
|
329
|
-
MonthPattern = {
|
330
|
-
29 => '小',
|
331
|
-
30 => '大',
|
332
|
-
-28 => '平',
|
333
|
-
-29 => '閏',
|
334
|
-
-30 => '小',
|
335
|
-
-31 => '大'
|
336
|
-
}
|
337
|
-
|
338
|
-
#
|
339
|
-
# 日本暦注に対応するインデックス(整数値)
|
340
|
-
#
|
341
|
-
# @private
|
342
|
-
module Index
|
343
|
-
# @private
|
344
|
-
[[2,'Y'], [3,'M'], [4,'D']].map {|cord|
|
345
|
-
index, initial = cord
|
346
|
-
notes = Notes[1][index]
|
347
|
-
(notes.size-2).times {|no|
|
348
|
-
name = initial + notes[no+2][2][/\[.+?[=\]]/][1..-2]
|
349
|
-
mask = 'M' + name
|
350
|
-
const_set(name, no)
|
351
|
-
const_set(mask, 1<<no)
|
352
|
-
}
|
353
|
-
}
|
354
|
-
end
|
355
|
-
|
356
|
-
#
|
357
|
-
# 日本暦注が使用する暦法
|
358
|
-
#
|
359
|
-
# @private
|
360
|
-
class Cal4Note
|
361
|
-
attr_reader :calendar, :solar
|
362
|
-
|
363
|
-
def l_calendar
|
364
|
-
@l_calendar ||= When.Calendar(@calendar.kind_of?(String) ? @calendar.sub(/#\{\?.+?\}/, '') : @calendar)
|
365
|
-
end
|
366
|
-
|
367
|
-
def s_calendar
|
368
|
-
@s_calendar ||= When.Calendar(@solar.kind_of?(String) ? @solar.sub(/#\{\?.+?\}/, '?Clock=THS') : @solar)
|
369
|
-
end
|
370
|
-
|
371
|
-
def l_phases
|
372
|
-
@l_phases ||= Japanese::LunarPhases.new('formula'=>l_calendar.formula[-1])
|
373
|
-
end
|
374
|
-
|
375
|
-
def s_terms
|
376
|
-
@s_terms ||= Japanese::SolarTerms.new('formula'=>s_calendar.formula[0])
|
377
|
-
end
|
378
|
-
|
379
|
-
def s_terms2
|
380
|
-
@s_terms2 ||= @l_calendar.iri =~ /JapaneseTwin(.*?)::天保暦/ ?
|
381
|
-
Japanese::SolarTermsRevised.new('formula'=>s_calendar.formula[0]) : s_terms
|
382
|
-
end
|
383
|
-
|
384
|
-
def doyo
|
385
|
-
@doyo ||= (s_calendar.doyo ? s_calendar.doyo * 360.0 / s_calendar.formula[0].year_length : 0)
|
386
|
-
end
|
387
|
-
end
|
388
|
-
|
389
|
-
#
|
390
|
-
# 日本暦注用の Notes の要素のための内部クラス
|
391
|
-
#
|
392
|
-
# @private
|
393
|
-
class Note
|
394
|
-
|
395
|
-
attr_reader :label, :position, :suffix
|
396
|
-
|
397
|
-
def to_note_hash(note, dates=nil)
|
398
|
-
{
|
399
|
-
:note => self,
|
400
|
-
:value => case @suffix
|
401
|
-
when '是' ; [@label + '是-', note[/.\z/]]
|
402
|
-
when '在' ; [@label + '在-', note]
|
403
|
-
when '-' ; [@label + '-', note]
|
404
|
-
else ; note
|
405
|
-
end,
|
406
|
-
:position => @position[@position.size == 1 ? 0 : dates.index_g]
|
407
|
-
}
|
408
|
-
end
|
409
|
-
|
410
|
-
private
|
411
|
-
# オブジェクトの正規化
|
412
|
-
#
|
413
|
-
def _normalize(args=[], options={})
|
414
|
-
@position = @position.split(/ /)
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
|
-
#
|
419
|
-
# 日本暦注計算に必要となる暦日や暦法をまとめた内部クラス
|
420
|
-
#
|
421
|
-
# @private
|
422
|
-
class Dates
|
423
|
-
|
424
|
-
attr_reader :year, :precision, :cal4note, :range, :index_g, :index_s, :o_date, :l_date, :m_date, :s_date
|
425
|
-
|
426
|
-
# 初期設定
|
427
|
-
def initialize(date, year=date.most_significant_coordinate, precision=date.precision, cal4note=nil)
|
428
|
-
|
429
|
-
# 暦注パターン
|
430
|
-
if cal4note
|
431
|
-
# 年代による判定
|
432
|
-
(1...NoteRange.size).to_a.reverse.each do |i|
|
433
|
-
if year >= NoteRange[i][0]
|
434
|
-
@range = i
|
435
|
-
break
|
436
|
-
end
|
437
|
-
end
|
438
|
-
@range ||= 0
|
439
|
-
else
|
440
|
-
# 暦法による判定
|
441
|
-
cal4note = Cal4Note.new(date.frame, date.frame.twin)
|
442
|
-
@range =
|
443
|
-
case cal4note.l_calendar.formula[-1]
|
444
|
-
when When::Ephemeris::ChineseTrueLunation::JujiMethods ; 11 # 江戸時代の暦
|
445
|
-
when When::Ephemeris::ChineseTrueLunation
|
446
|
-
date.frame.twin =~ /戊寅|麟徳/ ? 1 : 10 # 唐代定朔暦(儀鳳暦 or 宣明暦)
|
447
|
-
when When::Ephemeris::MeanLunation ; 0 # 唐代以前平朔暦(元嘉暦)
|
448
|
-
else ; 15 # 現代の旧暦
|
449
|
-
end
|
450
|
-
end
|
451
|
-
|
452
|
-
# 具注暦の配置
|
453
|
-
@index_g = NoteRange[@range][1]
|
454
|
-
|
455
|
-
# 七十二候
|
456
|
-
@index_s = NoteRange[@range][2]
|
457
|
-
|
458
|
-
# その他の属性
|
459
|
-
@year = year
|
460
|
-
@precision = precision
|
461
|
-
@cal4note = cal4note
|
462
|
-
@o_date = date
|
463
|
-
@l_date = @cal4note.l_calendar ^ date
|
464
|
-
@m_date = date.frame.kind_of?(When::CalendarTypes::Christian) ? @l_date : @o_date
|
465
|
-
@s_date = @cal4note.s_calendar ^ date
|
466
|
-
end
|
467
|
-
end
|
468
|
-
|
469
|
-
NoteMethods = [:year_notes, :month_notes, :day_notes]
|
470
|
-
|
471
|
-
# 暦注の計算
|
472
|
-
#
|
473
|
-
# @param [When::TM::TemporalPosition] date 暦注を計算する日時
|
474
|
-
# (date が When::TM::TemporalPosition でない場合、When::TM::TemporalPosition に変換して使用する)
|
475
|
-
# @param [Hash] options
|
476
|
-
# @option options [Hash] :conditions 日本暦注固有の計算条件
|
477
|
-
# :n27 通常月の廿七宿配当 *0:本月本説, 1:本月異説, 2:閏月本説, 3:閏月異説, 4:閏月本説(元)
|
478
|
-
# :i27 閏月の廿七宿配当 同上
|
479
|
-
# :sai *false,'0':日本暦日総覧説 , true:wagoyomi.net説
|
480
|
-
# :shoyo *false:出力せず, true:暦定数が有理数の場合に出力
|
481
|
-
# :solar_eclipse -1:計算を行わない, *0:すべて出力, 1:夜日食は出力しない, 3:夜日食に加え南半球で主に見える日食も出力しない
|
482
|
-
# :lunar_eclipse -1:計算を行わない, *0:すべて出力, 1:昼月食は出力しない, 3:昼月食に加え半影月食も出力しない
|
483
|
-
# :kana *false:具注暦用の計算, true:江戸仮名暦用の計算
|
484
|
-
# (* がデフォルト)
|
485
|
-
#
|
486
|
-
# @note :indices, :notes およびその他のキー => {When::CalendarNote#notes} を参照
|
487
|
-
#
|
488
|
-
# @return [Hash] :notes が String の場合
|
489
|
-
# @return [Array<Hash>] 上記に該当せず、:indices が Integer の場合
|
490
|
-
# @return [Array<Array<Hash>>] 上記のいずれにも該当しない場合
|
491
|
-
# @note return 値の [Hash] の要素は下記の通り
|
492
|
-
#
|
493
|
-
# :note => 暦注要素 (When::CalendarTypes::Japanese::Note)
|
494
|
-
#
|
495
|
-
# :value => 暦注の値 (String or When::BasicTypes::M17n または、その Array)
|
496
|
-
#
|
497
|
-
# :position => 具注暦でのその暦注の配置場所(String)
|
498
|
-
#
|
499
|
-
def notes(date, options={})
|
500
|
-
dates, indices, notes, persistence, conditions, options = _parse_note(date, options)
|
501
|
-
NotesContainer.register(indices.map {|i|
|
502
|
-
next [] unless i <= dates.precision
|
503
|
-
send(NoteMethods[i-1], dates, notes[i-1], conditions)
|
504
|
-
}, persistence, date.to_i)
|
505
|
-
end
|
506
|
-
|
507
|
-
# 太陽の位置 => 日時
|
508
|
-
#
|
509
|
-
# @param [When::TM::TemporalPosition] date 探す基準とする日時
|
510
|
-
# @param [Array<Numeric>] parameter 太陽の位置の分子と分母( num, den)
|
511
|
-
#
|
512
|
-
# num 分子 (デフォルト 0 : 基準日時直後の春分)
|
513
|
-
#
|
514
|
-
# den 分母 (デフォルト 360 : 検索範囲の長さ)
|
515
|
-
#
|
516
|
-
# @param [String] parameter 太陽の位置の分子と分母("#{ num }/#{ den }" の形式, デフォルト 0(春分))
|
517
|
-
# @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
|
518
|
-
#
|
519
|
-
# @return [When::TM::CalDate] date またはその直後に太陽の位置が指定の値になる日時
|
520
|
-
#
|
521
|
-
def term(date, parameter=nil, precision=date.precision)
|
522
|
-
dates = _to_date_for_note(date)
|
523
|
-
result = dates.cal4note.s_terms.term(date, parameter)
|
524
|
-
patch = SolarTerms::Patch[result.to_i]
|
525
|
-
return result unless patch
|
526
|
-
num, den = parameter.kind_of?(String) ? parameter.split('/', 2) : parameter
|
527
|
-
num = (num || 0).to_f
|
528
|
-
den = (den || 360).to_f
|
529
|
-
diff = (num - patch[0] + 1) % den - 1
|
530
|
-
return result if diff == 0
|
531
|
-
patched = result + When::P1D * diff
|
532
|
-
result.cal_date[0..-2] = patched.cal_date[0..-2]
|
533
|
-
result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
|
534
|
-
result
|
535
|
-
end
|
536
|
-
|
537
|
-
# 月の位相 => 日時
|
538
|
-
#
|
539
|
-
# @param [When::TM::TemporalPosition] date 探す基準とする日時
|
540
|
-
# @param [Array<Numeric>] parameter 月の位相の分子と分母( num, den)
|
541
|
-
#
|
542
|
-
# num 分子 (デフォルト 0 : 基準日時直後の朔)
|
543
|
-
#
|
544
|
-
# den 分母 (デフォルト 30 : 検索範囲の長さ)
|
545
|
-
#
|
546
|
-
# @param [String] parameter 月の位相の分子と分母("#{ num }/#{ den }" の形式, デフォルト 0(朔))
|
547
|
-
# @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
|
548
|
-
#
|
549
|
-
# @return [When::TM::CalDate] date またはその直後に月の位相が指定の値になる日時
|
550
|
-
#
|
551
|
-
def phase(date, parameter=nil, precision=date.precision)
|
552
|
-
dates = _to_date_for_note(date)
|
553
|
-
note = dates.cal4note.l_phases
|
554
|
-
result = note.phase(date, parameter)
|
555
|
-
return result if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian)
|
556
|
-
|
557
|
-
time = note.phase(date, parameter, When::SYSTEM)
|
558
|
-
cn = note.formula.time_to_cn(time) % 1
|
559
|
-
case cn
|
560
|
-
when 0..0.0001, 0.9999..1 # 朔
|
561
|
-
return result if result.cal_date[-1] == 1
|
562
|
-
diff = result.cal_date[-1] < 15 ? -1 : +1
|
563
|
-
when 0.2..0.8 # 弦、望
|
564
|
-
return result unless note.formula.kind_of?(When::Ephemeris::ChineseTrueLunation)
|
565
|
-
return result if time.clk_time.universal_time >= When::TM::Duration::DAY/4 # 午前6時以降
|
566
|
-
diff = -1
|
567
|
-
else # その他
|
568
|
-
return result
|
569
|
-
end
|
570
|
-
|
571
|
-
patched = result + When::P1D * diff
|
572
|
-
result.cal_date[0..-2] = patched.cal_date[0..-2]
|
573
|
-
result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
|
574
|
-
result
|
575
|
-
end
|
576
|
-
|
577
|
-
private
|
578
|
-
|
579
|
-
# オブジェクトの正規化
|
580
|
-
def _normalize(args=[], options={})
|
581
|
-
@prime ||= [%w(干支), %w(月名), %w(七曜 干支 六曜 廿四節気 祝祭日)]
|
582
|
-
super
|
583
|
-
end
|
584
|
-
|
585
|
-
# 年の暦注
|
586
|
-
def year_notes(dates, notes, conditions={})
|
587
|
-
_note_values(dates, notes, _all_keys[-3], _elements[-3]) do |dates, focused_notes, notes_hash|
|
588
|
-
|
589
|
-
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-3]
|
590
|
-
root = When.Resource('_co:Common')
|
591
|
-
|
592
|
-
# 干支
|
593
|
-
residue = (dates.precision < When::DAY ? dates.o_date : dates.s_date).most_significant_coordinate - 4
|
594
|
-
notes_hash['干支'] = root['干支'][residue % 60]
|
595
|
-
notes_hash['干'] = root['干' ][residue % 10]
|
596
|
-
notes_hash['支'] = root['支' ][residue % 12]
|
597
|
-
|
598
|
-
# 廿八宿
|
599
|
-
notes_hash['廿八宿'] ||= root['宿'][(residue+18) % 28]
|
600
|
-
|
601
|
-
# 九星
|
602
|
-
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.year(residue)]
|
603
|
-
|
604
|
-
# 大小
|
605
|
-
unless notes_hash['大小']
|
606
|
-
year = dates.o_date.floor(When::YEAR)
|
607
|
-
month = year.floor(When::MONTH)
|
608
|
-
pattern = ''
|
609
|
-
while year == month
|
610
|
-
length = month.length(When::MONTH)
|
611
|
-
length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
|
612
|
-
pattern += '閏' if month[When::MONTH] * 0 == 1
|
613
|
-
pattern += MonthPattern[length] || '改'
|
614
|
-
month += When::P1M
|
615
|
-
end
|
616
|
-
notes_hash['大小'] = "#{pattern}(#{year.length(When::YEAR)})"
|
617
|
-
end
|
618
|
-
|
619
|
-
# その他
|
620
|
-
[notes_hash['干支'], notes_hash['干'], notes_hash['支']].each do |note|
|
621
|
-
note._year_notes(notes_hash, dates, conditions)
|
622
|
-
end
|
623
|
-
notes_hash
|
624
|
-
end
|
625
|
-
end
|
626
|
-
|
627
|
-
# 月の暦注
|
628
|
-
def month_notes(dates, notes, conditions={})
|
629
|
-
_note_values(dates, notes, _all_keys[-2], _elements[-2]) do |dates, focused_notes, notes_hash|
|
630
|
-
|
631
|
-
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-2]
|
632
|
-
root = When.Resource('_co:Common')
|
633
|
-
|
634
|
-
# 干支
|
635
|
-
residue = month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.m_date)
|
636
|
-
notes_hash['干支'] = root['干支'][residue % 60]
|
637
|
-
notes_hash['干'] = root['干' ][residue % 10]
|
638
|
-
notes_hash['支'] = root['支' ][residue % 12]
|
639
|
-
|
640
|
-
# 廿八宿
|
641
|
-
notes_hash['廿八宿'] ||= root['宿'][(residue+6) % 28]
|
642
|
-
|
643
|
-
# 九星
|
644
|
-
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.month(
|
645
|
-
month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.s_date))]
|
646
|
-
|
647
|
-
# 大小
|
648
|
-
unless notes_hash['大小']
|
649
|
-
length = dates.o_date.length(When::MONTH)
|
650
|
-
length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
|
651
|
-
notes_hash['大小'] = "#{dates.o_date[When::MONTH]*0==1 ? '閏' : ''}#{MonthPattern[length] || '改'}(#{length.abs})"
|
652
|
-
end
|
653
|
-
|
654
|
-
# その他
|
655
|
-
[notes_hash['干支'], notes_hash['干'], notes_hash['支'], JapaneseLuniSolarNote].each do |note|
|
656
|
-
note._month_notes(notes_hash, dates, conditions)
|
657
|
-
end
|
658
|
-
notes_hash
|
659
|
-
end
|
660
|
-
end
|
661
|
-
|
662
|
-
# 日の暦注
|
663
|
-
def day_notes(dates, notes, conditions={})
|
664
|
-
_note_values(dates, notes, _all_keys[-1], _elements[-1]) do |dates, focused_notes, notes_hash|
|
665
|
-
|
666
|
-
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-1]
|
667
|
-
root = When.Resource('_co:Common')
|
668
|
-
|
669
|
-
# 干支
|
670
|
-
residue = dates.s_date.to_i-11
|
671
|
-
notes_hash['干支'] = root['干支'][residue % 60]
|
672
|
-
notes_hash['干'] = root['干' ][residue % 10]
|
673
|
-
notes_hash['支'] = root['支' ][residue % 12]
|
674
|
-
|
675
|
-
# その他
|
676
|
-
[SolarTerms, LunarPhases, notes_hash['干支'], notes_hash['干'], notes_hash['支'],
|
677
|
-
JapaneseLuniSolarNote, JapaneseSolarNote].each do |note|
|
678
|
-
note._day_notes(notes_hash, dates, conditions)
|
679
|
-
end
|
680
|
-
|
681
|
-
# 七曜
|
682
|
-
notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
|
683
|
-
|
684
|
-
# 廿七宿
|
685
|
-
notes_hash['廿七宿'] = _residue27(notes_hash['廿七宿'], root)
|
686
|
-
|
687
|
-
# 廿八宿 / 鬼宿
|
688
|
-
notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28]
|
689
|
-
notes_hash['鬼宿'] ||= /鬼/ =~ notes_hash['廿八宿'].to_s ? '鬼宿' : nil
|
690
|
-
|
691
|
-
# 九星
|
692
|
-
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.s_date, dates.cal4note.s_terms)]
|
693
|
-
|
694
|
-
notes_hash
|
695
|
-
end
|
696
|
-
end
|
697
|
-
|
698
|
-
#
|
699
|
-
# 日本暦日情報オブジェクトの生成
|
700
|
-
#
|
701
|
-
# @note 対となる太陽暦のある太陰太陽暦はそのまま(太陰太陽暦,太陽暦)の対
|
702
|
-
# そうでなければ、採用する対を年代により選択する
|
703
|
-
#
|
704
|
-
def _to_date_for_note(date)
|
705
|
-
if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
|
706
|
-
return Dates.new(date) if date.frame.twin
|
707
|
-
o_date = date
|
708
|
-
else
|
709
|
-
o_date = self.class._to_japanese_date(date)
|
710
|
-
return nil unless o_date
|
711
|
-
end
|
712
|
-
year = o_date.most_significant_coordinate
|
713
|
-
NoteTypes.each do |line|
|
714
|
-
return Dates.new(o_date, year, date.precision, line[1]) if year >= line[0]
|
715
|
-
end
|
716
|
-
nil
|
717
|
-
end
|
718
|
-
|
719
|
-
#
|
720
|
-
# 任意の暦を日本年号付暦日に変換
|
721
|
-
#
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
#
|
739
|
-
#
|
740
|
-
#
|
741
|
-
def
|
742
|
-
date.
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
#
|
754
|
-
#
|
755
|
-
|
756
|
-
|
757
|
-
[
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
[
|
772
|
-
[
|
773
|
-
[
|
774
|
-
[
|
775
|
-
[
|
776
|
-
[
|
777
|
-
[
|
778
|
-
[
|
779
|
-
[
|
780
|
-
[
|
781
|
-
[
|
782
|
-
[
|
783
|
-
[
|
784
|
-
[
|
785
|
-
[
|
786
|
-
[
|
787
|
-
[
|
788
|
-
[
|
789
|
-
[
|
790
|
-
[
|
791
|
-
[
|
792
|
-
[
|
793
|
-
[
|
794
|
-
[
|
795
|
-
[11
|
796
|
-
[
|
797
|
-
[
|
798
|
-
[
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
['
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
notes['
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
notes['
|
953
|
-
notes['
|
954
|
-
notes['
|
955
|
-
notes['
|
956
|
-
notes
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
#
|
1078
|
-
'
|
1079
|
-
'
|
1080
|
-
'
|
1081
|
-
'
|
1082
|
-
'
|
1083
|
-
'
|
1084
|
-
'
|
1085
|
-
'
|
1086
|
-
'
|
1087
|
-
'
|
1088
|
-
'
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
#
|
1094
|
-
#
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
#
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
%w(
|
1112
|
-
%w(
|
1113
|
-
%w(
|
1114
|
-
%w(
|
1115
|
-
%w(
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
%w(
|
1120
|
-
%w(
|
1121
|
-
%w(
|
1122
|
-
%w(
|
1123
|
-
%w(
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
%w(
|
1128
|
-
%w(
|
1129
|
-
%w(
|
1130
|
-
%w(
|
1131
|
-
%w(
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
%w(
|
1136
|
-
%w(
|
1137
|
-
%w(
|
1138
|
-
%w(
|
1139
|
-
%w(
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
%w(
|
1144
|
-
%w(
|
1145
|
-
%w(
|
1146
|
-
%w(
|
1147
|
-
%w(
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
%w(
|
1152
|
-
%w(
|
1153
|
-
%w(
|
1154
|
-
%w(
|
1155
|
-
%w(
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
%w(
|
1160
|
-
%w(
|
1161
|
-
%w(
|
1162
|
-
%w(
|
1163
|
-
%w(
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
%w(
|
1168
|
-
%w(
|
1169
|
-
%w(
|
1170
|
-
%w(
|
1171
|
-
%w(
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
%w(
|
1176
|
-
%w(
|
1177
|
-
%w(
|
1178
|
-
%w(
|
1179
|
-
%w(
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
%w(
|
1184
|
-
%w(
|
1185
|
-
%w(
|
1186
|
-
%w(
|
1187
|
-
%w(
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
#
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
#
|
1244
|
-
#
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
notes['
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
|
1301
|
-
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
|
1329
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
#
|
1338
|
-
#
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
#
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1445
|
-
notes
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
#
|
1452
|
-
#
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
#
|
1477
|
-
#
|
1478
|
-
#
|
1479
|
-
#
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2012-2015 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/ephemeris/notes'
|
9
|
+
require 'when_exe/region/japanese/residues'
|
10
|
+
|
11
|
+
class When::CalendarNote
|
12
|
+
|
13
|
+
#
|
14
|
+
# 日本暦注
|
15
|
+
#
|
16
|
+
class Japanese < self
|
17
|
+
|
18
|
+
autoload :Eclipse, 'when_exe/region/japanese/eclipses'
|
19
|
+
|
20
|
+
#
|
21
|
+
# 日本暦注が使用する暦法
|
22
|
+
#
|
23
|
+
# @private
|
24
|
+
class Cal4Note
|
25
|
+
def initialize(calendar, solar)
|
26
|
+
@calendar = calendar
|
27
|
+
@solar = solar
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# 日本暦注の要素
|
33
|
+
#
|
34
|
+
# @private
|
35
|
+
class Note < When::CalendarNote::NoteElement
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# 日本暦注の要素
|
40
|
+
#
|
41
|
+
Notes = [When::BasicTypes::M17n, [
|
42
|
+
"locale:[=ja:, en=en:]",
|
43
|
+
"names:[日本暦注=]",
|
44
|
+
|
45
|
+
# 年の暦注 ----------------------------
|
46
|
+
[When::BasicTypes::M17n,
|
47
|
+
"names:[年, YearNote]",
|
48
|
+
[Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
|
49
|
+
# [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
|
50
|
+
# 'position:共通'], # 干
|
51
|
+
# [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
|
52
|
+
# 'position:共通'], # 支
|
53
|
+
[Note, 0x3800, "label:[廿八宿=ja:%%<二十八宿>]",
|
54
|
+
'position:共通'], # 1: 廿八宿
|
55
|
+
[Note, 0x3FFC, "label:[大歳壇=]", 'position:暦序'], # 2: 干支
|
56
|
+
[Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
|
57
|
+
[Note, 0xFFFC, "label:[納音]", 'position:暦序', 'suffix:是'], # 4: 干支
|
58
|
+
[Note, 0xFFFF, "label:[大歳=ja:%%<太歳神>]",
|
59
|
+
'position:暦序', 'suffix:在'], # 5: 干支
|
60
|
+
[Note, 0xFFFF, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
|
61
|
+
'position:暦序', 'suffix:在'], # 6: 支
|
62
|
+
[Note, 0xFFFF, "label:[大陰=ja:%%<太陰神>]",
|
63
|
+
'position:暦序', 'suffix:在'], # 7: 支
|
64
|
+
[Note, 0xFFFF, "label:[歳徳=ja:%%<歳徳神>]",
|
65
|
+
'position:暦序', 'suffix:在'], # 8: 干
|
66
|
+
[Note, 0xFFFF, "label:[歳刑=ja:%%<歳刑神>]",
|
67
|
+
'position:暦序', 'suffix:在'], # 9: 支
|
68
|
+
[Note, 0xFFFF, "label:[歳破=ja:%%<歳破神>]",
|
69
|
+
'position:暦序', 'suffix:在'], # 10: 支
|
70
|
+
[Note, 0xFFFF, "label:[歳煞=ja:%%<歳殺神>]",
|
71
|
+
'position:暦序', 'suffix:在'], # 11: 支
|
72
|
+
[Note, 0xFFFF, "label:[黄幡=ja:%%<黄幡神>]",
|
73
|
+
'position:暦序', 'suffix:在'], # 12: 支
|
74
|
+
[Note, 0xFFFF, "label:[豹尾=ja:%%<豹尾神>]",
|
75
|
+
'position:暦序', 'suffix:在'], # 13: 支
|
76
|
+
[Note, 0x0003, "label:[天道=]", 'position:暦序', 'suffix:-'], # 14: 支
|
77
|
+
[Note, 0x0003, "label:[人道=]", 'position:暦序', 'suffix:-'], # 15: 支
|
78
|
+
[Note, 0x3FFC, "label:[歳次=]", 'position:暦序', 'suffix:-'], # 16: 支
|
79
|
+
[Note, 0xF800, "label:[金神]", 'position:仮名暦', 'suffix:在'], # 17: 干
|
80
|
+
[Note, 0xFFFF, "label:[大小]", 'position:暦序'] # 18: 朔閏表
|
81
|
+
],
|
82
|
+
|
83
|
+
# 月の暦注 ----------------------------
|
84
|
+
[When::BasicTypes::M17n,
|
85
|
+
"names:[月, MonthNote]",
|
86
|
+
[Note, 0xFFFF, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>, Month]",
|
87
|
+
'position:月建'], # 0: 月の和名
|
88
|
+
# [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 干支
|
89
|
+
# [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
|
90
|
+
# 'position:共通'], # 干
|
91
|
+
# [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
|
92
|
+
# 'position:共通'], # 支
|
93
|
+
[Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
|
94
|
+
'position:共通'], # 1: 廿八宿
|
95
|
+
[Note, 0xFFFC, "label:[月建=]", 'position:月建', 'suffix:-' ], # 2: 年の十干と暦月
|
96
|
+
[Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
|
97
|
+
[Note, 0x0003, "label:[天氣=]", 'position:月建', 'suffix:-' ], # 4: 暦月
|
98
|
+
[Note, 0x3FFF, "label:[天道=]", 'position:月建', 'suffix:-' ], # 5: 暦月
|
99
|
+
[Note, 0x0003, "label:[人道=]", 'position:月建', 'suffix:-' ], # 6: 暦月
|
100
|
+
[Note, 0x0003, "label:[月破=]", 'position:月建', 'suffix:在'], # 7: 暦月
|
101
|
+
[Note, 0x3FFC, "label:[天徳=]", 'position:月建', 'suffix:在'], # 8: 暦月
|
102
|
+
[Note, 0x3FFF, "label:[月煞=]", 'position:月建', 'suffix:在'], # 9: 暦月
|
103
|
+
[Note, 0x3FFF, "label:[用時=]", 'position:月建', 'suffix:-' ], # 10: 暦月
|
104
|
+
[Note, 0x3FFF, "label:[月徳=]", 'position:月建', 'suffix:在'], # 11: 暦月
|
105
|
+
[Note, 0x3FFC, "label:[月徳合=]", 'position:月建', 'suffix:在'], # 12: 暦月
|
106
|
+
[Note, 0x3FFC, "label:[月空=]", 'position:月建', 'suffix:在'], # 13: 暦月
|
107
|
+
[Note, 0x3FFF, "label:[三鏡=]", 'position:月建', 'suffix:-' ], # 14: 暦月
|
108
|
+
[Note, 0x3FFF, "label:[土府=]", 'position:月建', 'suffix:在'], # 15: 暦月
|
109
|
+
[Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
|
110
|
+
'position:月建', 'suffix:在'], # 16: 暦月
|
111
|
+
[Note, 0xFFFF, "label:[大小]", 'position:月建'] # 17: 朔閏表
|
112
|
+
],
|
113
|
+
|
114
|
+
# 日の暦注 ----------------------------
|
115
|
+
[When::BasicTypes::M17n,
|
116
|
+
"names:[日, DayNote]",
|
117
|
+
[Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
|
118
|
+
# [Note, 0x, "label:[干=ja:%%<十干>]",
|
119
|
+
# 'position:共通'], # 干
|
120
|
+
# [Note, 0x, "label:[支=ja:%%<十二支>]",
|
121
|
+
# 'position:共通'], # 支
|
122
|
+
[Note, 0x3FFF, "label:[納音]", 'position:共通', 'suffix:是'], # 1: 干支
|
123
|
+
[Note, 0xFFFF, "label:[十二直]", 'position:共通'], # 2: 支 節月
|
124
|
+
[Note, 0xFFFF, "label:[七曜]", 'position:共通'], # 3: 七曜
|
125
|
+
[Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
|
126
|
+
'position:共通'], # 4: 廿八宿
|
127
|
+
[Note, 0x07F8, "label:[廿七宿=ja:%%<二十八宿>]",
|
128
|
+
'position:共通'], # 5: 暦月 暦日
|
129
|
+
[Note, 0xC000, "label:[九星]", 'position:民間'], # 6: 九星
|
130
|
+
[Note, 0x8000, "label:[六曜]", 'position:民間'], # 7: 暦月 暦日
|
131
|
+
[Note, 0xE000, "label:[祝祭日]", 'position:祝祭日'], # 8: 暦月 暦日 (七曜)
|
132
|
+
[Note, 0xFFFF, "label:[廿四節気=ja:%%<二十四節気>]",
|
133
|
+
'position:時候'], # 9: 太陽黄経
|
134
|
+
[Note, 0xFFFF, "label:[節中=]", 'position:時候'], # 10: 太陽黄経
|
135
|
+
[Note, 0xFFFC, "label:[七十二候]", 'position:時候'], # 11: 太陽黄経
|
136
|
+
[Note, 0x3FFC, "label:[六十卦=]", 'position:時候'], # 12: 太陽黄経
|
137
|
+
[Note, 0xF800, "label:[節分]", 'position:雑節'], # 13: 立春からの日数
|
138
|
+
[Note, 0xF800, "label:[初午]", 'position:雑節'], # 14: 支 節月 or 暦月
|
139
|
+
[Note, 0xF800, "label:[八十八夜]", 'position:雑節'], # 15: 立春からの日数
|
140
|
+
[Note, 0xF800, "label:[入梅]", 'position:雑節'], # 16: 干 太陽黄経
|
141
|
+
[Note, 0xF800, "label:[半夏生]", 'position:雑節'], # 17: 干 太陽黄経
|
142
|
+
[Note, 0xF800, "label:[二百十日]", 'position:雑節'], # 18: 立春からの日数
|
143
|
+
[Note, 0xF800, "label:[二百廿日=ja:%%<二百二十日>]", 'position:雑節'], # 19: 立春からの日数
|
144
|
+
|
145
|
+
[Note, 0x3FFC, "label:[大禍=ja:%%<暦注下段>#%.<大禍日>]",
|
146
|
+
'position:上段 上段 欄外 欄外', 'suffix:日'], # 20: 支 節月
|
147
|
+
[Note, 0x3FFC, "label:[滅門=ja:%%<暦注下段>#%.<滅門日>]",
|
148
|
+
'position:上段 上段 欄外 欄外', 'suffix:日'], # 21: 支 節月
|
149
|
+
[Note, 0x3FFC, "label:[狼藉=ja:%%<暦注下段>#%.<狼藉日>]",
|
150
|
+
'position:上段 上段 欄外 欄外', 'suffix:日'], # 22: 支 節月
|
151
|
+
|
152
|
+
[Note, 0x07F8, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 23: 七曜 廿七宿
|
153
|
+
[Note, 0x07F8, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 24: 七曜 廿七宿
|
154
|
+
[Note, 0x07F8, "label:[羅刹=]", 'position:上段 上段 上段 上段'], # 25: 七曜 廿七宿
|
155
|
+
|
156
|
+
[Note, 0x3FFC, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
|
157
|
+
'position:上段 上段 上段 上段', 'suffix:-'], # 26: 干支 節年
|
158
|
+
[Note, 0xFFFC, "label:[天一=ja:%%<天一神>]",
|
159
|
+
'position:上段 上段 上段 上段', 'suffix:-'], # 27: 干支
|
160
|
+
[Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
|
161
|
+
'position:上段 上段 上段 上段', 'suffix:-'], # 28: 干支
|
162
|
+
[Note, 0x3FFC, "label:[歳下食=ja:%%<暦注下段>#%.<歳下食>]",
|
163
|
+
'position:上段 上段 上段 上段'], # 29: 干支 節年
|
164
|
+
[Note, 0x3FFC, "label:[忌遠行=]", 'position:上段 上段 上段 上段'], # 30: 支 節月
|
165
|
+
[Note, 0x3FFC, "label:[忌夜行=]", 'position:上段 上段 上段 上段'], # 31: 支 節月
|
166
|
+
[Note, 0x3FFC, "label:[下食時=ja:%%<暦注下段>#%.<時下食>]",
|
167
|
+
'position:上段 上段 上段 上段', 'suffix:-'], # 32: 支 節月 貞享暦で一部廃止
|
168
|
+
[Note, 0x3FFC, "label:[天間=]", 'position:上段 上段 上段 中段上'], # 33: 干支 節月
|
169
|
+
[Note, 0x3FFC, "label:[不視病=]", 'position:上段 上段 上段 上段'], # 34: 干
|
170
|
+
[Note, 0x3FFC, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 35: 干
|
171
|
+
[Note, 0x3FFC, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 36: 支
|
172
|
+
[Note, 0xFFFC, "label:[彼岸]", 'position:仮名暦'], # 37: 太陽黄経
|
173
|
+
[Note, 0xFFFF, "label:[社=ja:%%<社日>]",
|
174
|
+
'position:中段 中段 中段 中段', 'suffix:日'], # 38: 干 太陽黄経
|
175
|
+
[Note, 0xFFFF, "label:[三伏]", 'position:中段 中段 中段 中段'], # 39: 干 太陽黄経
|
176
|
+
[Note, 0x3FFC, "label:[除手足甲=]", 'position:中段 中段 中段 中段'], # 40: 晦(除手足甲)、支(片方のみ), 没滅凶会日×
|
177
|
+
[Note, 0x3FFC, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 41: 支 没滅凶会日×
|
178
|
+
[Note, 0x3FFD, "label:[臘=ja:%%<臘日>]",
|
179
|
+
'position:中段 中段 中段 中段', 'suffix:日'], # 42: 支 太陽黄経
|
180
|
+
[Note, 0x3FFC, "label:[伐=]", 'position:中段 中段 中段 中段上', 'suffix:日'], # 43: 干支
|
181
|
+
[Note, 0x3FFC, "label:[五墓=ja:%%<暦注下段>#%.<五墓日>]",
|
182
|
+
'position:中段 中段 中段 中段下', 'suffix:日'], # 44: 干支
|
183
|
+
[Note, 0x3FFC, "label:[六蛇=]", 'position:中段 中段 中段 中段上'], # 45: 干支 節月
|
184
|
+
[Note, 0x3FFC, "label:[七鳥=]", 'position:中段 中段 中段 中段上'], # 46: 干支 節月
|
185
|
+
[Note, 0x3FFC, "label:[八龍=]", 'position:中段 中段 中段 中段上'], # 47: 干支 節月
|
186
|
+
[Note, 0x3FFC, "label:[九虎=]", 'position:中段 中段 中段 中段上'], # 48: 干支 節月
|
187
|
+
[Note, 0x07FF, "label:[没=ja:%%<没日>]",
|
188
|
+
'position:中段 中段 中段 中段', 'suffix:日'], # 49: 太陽黄経
|
189
|
+
[Note, 0xFFF8, "label:[日食]", 'position:中段 中段 中段 中段'], # 50: 日食表
|
190
|
+
[Note, 0x07FC, "label:[滅=ja:%%<滅日>]",
|
191
|
+
'position:中段 中段 中段 中段', 'suffix:日'], # 51: 月の位相
|
192
|
+
[Note, 0xFFF8, "label:[月食]", 'position:中段 中段 中段 中段'], # 52: 月食表
|
193
|
+
[Note, 0xC7FD, "label:[月相]", 'position:中段 中段 中段 中段'], # 53: 月の位相
|
194
|
+
[Note, 0xFFFF, "label:[土用事=ja:%%<土用>]",
|
195
|
+
'position:中段 中段 中段 中段'], # 54: 太陽黄経
|
196
|
+
[Note, 0x3FF0, "label:[伏龍=]", 'position:上段 上段 下段 下段', 'suffix:在'], # 55: 太陽黄経
|
197
|
+
|
198
|
+
[Note, 0x3FFF, "label:[凶会=ja:%%<暦注下段>#%.<凶会日>]",
|
199
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 56: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
|
200
|
+
[Note, 0x3FFF, "label:[大小歳=]", 'position:下段 下段 下段 下段'], # 57: 干支 節月
|
201
|
+
[Note, 0x3FFC, "label:[歳徳=ja:%%<歳徳神>]",
|
202
|
+
'position:下段 下段 下段 下段'], # 58: 干 節年 凶会日× ~合も
|
203
|
+
[Note, 0x0003, "label:[天倉=]", 'position:古注'], # 59: 干支 節月
|
204
|
+
# [Note, 0x0003, "label:[天李=]", 'position:古注'], # 干支 節月?
|
205
|
+
[Note, 0x37FF, "label:[天恩=ja:%%<暦注下段>#%.<天恩日>]",
|
206
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 60: 干支 節月 凶会日×
|
207
|
+
[Note, 0xFFFF, "label:[天赦=ja:%%<暦注下段>#%.<天赦日>]",
|
208
|
+
'position:下段 下段 下段 下段'], # 61: 干支 節月
|
209
|
+
[Note, 0x37FF, "label:[母倉=ja:%%<暦注下段>#%.<母倉日>]",
|
210
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 62: 支 節月 凶会日×
|
211
|
+
[Note, 0x37FC, "label:[月徳=]", 'position:下段 下段 下段 下段'], # 63: 干 節月 凶会日× ~合も
|
212
|
+
[Note, 0x3FFF, "label:[九坎=]", 'position:下段 下段 下段 下段'], # 64: 支 節月
|
213
|
+
[Note, 0x3FFF, "label:[歸忌=ja:%%<暦注下段>#%.<帰忌日>]",
|
214
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 65: 支 節月
|
215
|
+
[Note, 0x3FFF, "label:[血忌=ja:%%<暦注下段>#%.<血忌日>]",
|
216
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 66: 支 節月
|
217
|
+
[Note, 0x3FFC, "label:[無翹=]", 'position:下段 下段 下段 下段'], # 67: 支 節月
|
218
|
+
[Note, 0x3FFF, "label:[厭=]", 'position:下段 下段 下段 下段'], # 68: 支 節月
|
219
|
+
[Note, 0x3FFC, "label:[重=ja:%%<暦注下段>#%.<重日>]",
|
220
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 69: 支
|
221
|
+
[Note, 0x3FFD, "label:[復=ja:%%<暦注下段>#%.<復日>]",
|
222
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 70: 干 節月
|
223
|
+
[Note, 0x3FFC, "label:[月煞=]", 'position:下段 下段 下段 下段'], # 71: 支 節月
|
224
|
+
[Note, 0x3FFF, "label:[往亡=ja:%%<暦注下段>#%.<往亡日>]",
|
225
|
+
'position:下段 下段 下段 下段', 'suffix:日'], # 72: 太陽黄経
|
226
|
+
[Note, 0x3FFF, "label:[日遊=ja:%%<日遊神>]",
|
227
|
+
'position:最下段', 'suffix:在'], # 73: 干支
|
228
|
+
[Note, 0x07FF, "label:[人神配当=]", 'position:最下段孟月', 'suffix:-'], # 74: 暦日
|
229
|
+
|
230
|
+
[Note, 0x3E00, "label:[受死=ja:%%<暦注下段>#%.<受死日>]",
|
231
|
+
'position:仮名暦', 'suffix:日'], # 75: 支 節月
|
232
|
+
[Note, 0xFFF0, "label:[八專]", 'position:仮名暦'], # 76: 干支
|
233
|
+
[Note, 0x3E00, "label:[八專間日=ja:%%<八専>]",
|
234
|
+
'position:仮名暦'], # 77: 干支
|
235
|
+
[Note, 0xC000, "label:[金神間日=ja:%%<金神>#%.<金神の遊行・間日>]",
|
236
|
+
'position:仮名暦'], # 78: 支 節月
|
237
|
+
[Note, 0xC000, "label:[金神遊行=ja:%%<金神>#%.<金神の遊行・間日>]",
|
238
|
+
'position:仮名暦'], # 79: 支 節月
|
239
|
+
[Note, 0x3FF0, "label:[天火=ja:%%<暦注下段>#%.<天火日>]",
|
240
|
+
'position:仮名暦', 'suffix:日'], # 80: 支 節月
|
241
|
+
[Note, 0x3FF0, "label:[地火=ja:%%<暦注下段>#%.<地火日>]",
|
242
|
+
'position:仮名暦', 'suffix:日'], # 81: 支 節月
|
243
|
+
[Note, 0x3800, "label:[人火=]", 'position:仮名暦'], # 82: 支 節月
|
244
|
+
[Note, 0x3800, "label:[雷火=]", 'position:仮名暦'], # 83: 支 節月
|
245
|
+
[Note, 0x3FF0, "label:[赤舌=ja:%%<赤舌日>]",
|
246
|
+
'position:仮名暦', 'suffix:日'], # 84: 暦月 暦日
|
247
|
+
[Note, 0x3E00, "label:[十死=ja:%%<暦注下段>#%.<十死日>]",
|
248
|
+
'position:仮名暦', 'suffix:日'], # 85: 支 節月
|
249
|
+
[Note, 0x3E00, "label:[道虚=]", 'position:仮名暦', 'suffix:日'], # 86: 暦日
|
250
|
+
[Note, 0x3E00, "label:[大明=ja:%%<暦注下段>#%.<大明日>]",
|
251
|
+
'position:仮名暦', 'suffix:日'], # 87: 干支
|
252
|
+
[Note, 0x0600, "label:[大赤=ja:%%<赤口日>]",
|
253
|
+
'position:仮名暦', 'suffix:日'], # 88: 暦月 暦日
|
254
|
+
[Note, 0xF800, "label:[甲子待=ja:%%<甲子>]",
|
255
|
+
'position:仮名暦'], # 89: 干支
|
256
|
+
[Note, 0xC000, "label:[己巳]", 'position:仮名暦'], # 90: 干支
|
257
|
+
[Note, 0xF800, "label:[庚申待]", 'position:仮名暦'], # 91: 干支
|
258
|
+
[Note, 0x3800, "label:[犯土]", 'position:仮名暦'], # 92: 干支
|
259
|
+
[Note, 0xF800, "label:[十方暮]", 'position:仮名暦'], # 93: 干支
|
260
|
+
[Note, 0xF800, "label:[一粒万倍=ja:%%<一粒万倍日>]",
|
261
|
+
'position:仮名暦', 'suffix:日'], # 94: 支 節月
|
262
|
+
[Note, 0x3800, "label:[天福=]", 'position:仮名暦'], # 95: 支 節月
|
263
|
+
[Note, 0x3800, "label:[地福=]", 'position:仮名暦'], # 96: 支 節月
|
264
|
+
[Note, 0x3800, "label:[地五福=]", 'position:仮名暦'], # 97: 支 節月
|
265
|
+
[Note, 0xB800, "label:[三隣亡]", 'position:仮名暦'], # 98: 支 節月
|
266
|
+
[Note, 0xF800, "label:[不成就=ja:%%<不成就日>]",
|
267
|
+
'position:仮名暦', 'suffix:日'], # 99: 暦月 暦日/晦日
|
268
|
+
[Note, 0x3800, "label:[鬼宿]", 'position:仮名暦'], #100: 廿八宿
|
269
|
+
[Note, 0x3800, "label:[金性=]", 'position:仮名暦'], #101: 支 節月 支 節年
|
270
|
+
[Note, 0x3FFF, "label:[三寶吉=http://kotobank.jp/word/%%<三宝吉日>]",
|
271
|
+
'position:上段 上段 上段 上段'], #102: 干支 節月
|
272
|
+
[Note, 0x3FFF, "label:[神吉=ja:%%<暦注下段>#%.<神吉日>]",
|
273
|
+
'position:上段 上段 中段 中段上', 'suffix:日'], #103: 干支 節月
|
274
|
+
[Note, 0x3FFF, "label:[雑事吉=]", 'position:雑事吉'], #104: 干支 節月
|
275
|
+
[Note, 0x3FFF, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'],#105: 干支 節月
|
276
|
+
]
|
277
|
+
]]
|
278
|
+
|
279
|
+
#
|
280
|
+
# 日本暦注の時代変遷
|
281
|
+
#
|
282
|
+
# @private
|
283
|
+
NoteTypes = (2...When::TM::CalendarEra::JapaneseSolar[2].size).to_a.map {|i|
|
284
|
+
calendars =
|
285
|
+
[When::TM::CalendarEra::JapaneseLuniSolar[2][i][2],
|
286
|
+
When::TM::CalendarEra::JapaneseSolar[2][i][2]].map {|epoch|
|
287
|
+
epoch =~ /\A(-?\d+)-(\d+)-(\d+)\^(.+)\z/
|
288
|
+
$4
|
289
|
+
}
|
290
|
+
[$2 == '01' ? $1.to_i : $1.to_i+1, Cal4Note.new(*calendars)]
|
291
|
+
}.reverse
|
292
|
+
|
293
|
+
# @private
|
294
|
+
NoteRange = [
|
295
|
+
# 開始 具注暦 七十二候 index mask
|
296
|
+
[-660, 0, 0], # ~ 696 0 : 0001
|
297
|
+
[ 697, 0, 0], # ~ 763 1 : 0002
|
298
|
+
[ 764, 0, 2], # ~ 800 2 : 0004
|
299
|
+
[ 801, 0, 2], # ~ 900 3 : 0008
|
300
|
+
[ 901, 0, 2], # ~1003 4 : 0010
|
301
|
+
[1004, 1, 2], # ~1047 5 : 0020
|
302
|
+
[1048, 1, 2], # ~1100 6 : 0040
|
303
|
+
[1101, 1, 2], # ~1184 7 : 0080
|
304
|
+
[1185, 2, 2], # ~1300 8 : 0100
|
305
|
+
[1301, 2, 2], # ~1337 9 : 0200
|
306
|
+
[1338, 3, 2], # ~1684 10 : 0400
|
307
|
+
[1685, 3, 3], # ~1754 11 : 0800
|
308
|
+
[1755, 3, 4], # ~1867 12 : 1000
|
309
|
+
[1868, 3, 4], # ~1872 13 : 2000
|
310
|
+
[1873, 3, 4], # ~1873 14 : 4000
|
311
|
+
[1874, 3, 5] # ~ 15 : 8000
|
312
|
+
]
|
313
|
+
|
314
|
+
# @private
|
315
|
+
NoteFocused = (0...NoteRange.size).to_a.map {|range|
|
316
|
+
(2..4).to_a.map {|cord|
|
317
|
+
notes = Notes[1][cord]
|
318
|
+
(2...notes.size).to_a.inject([]) {|focused,note|
|
319
|
+
focused << notes[note][2][/\[.+?[=\]]/][1..-2] if notes[note][1][range] == 1
|
320
|
+
focused
|
321
|
+
}
|
322
|
+
}
|
323
|
+
}
|
324
|
+
|
325
|
+
#
|
326
|
+
# 月の大小
|
327
|
+
#
|
328
|
+
# @private
|
329
|
+
MonthPattern = {
|
330
|
+
29 => '小',
|
331
|
+
30 => '大',
|
332
|
+
-28 => '平',
|
333
|
+
-29 => '閏',
|
334
|
+
-30 => '小',
|
335
|
+
-31 => '大'
|
336
|
+
}
|
337
|
+
|
338
|
+
#
|
339
|
+
# 日本暦注に対応するインデックス(整数値)
|
340
|
+
#
|
341
|
+
# @private
|
342
|
+
module Index
|
343
|
+
# @private
|
344
|
+
[[2,'Y'], [3,'M'], [4,'D']].map {|cord|
|
345
|
+
index, initial = cord
|
346
|
+
notes = Notes[1][index]
|
347
|
+
(notes.size-2).times {|no|
|
348
|
+
name = initial + notes[no+2][2][/\[.+?[=\]]/][1..-2]
|
349
|
+
mask = 'M' + name
|
350
|
+
const_set(name, no)
|
351
|
+
const_set(mask, 1<<no)
|
352
|
+
}
|
353
|
+
}
|
354
|
+
end
|
355
|
+
|
356
|
+
#
|
357
|
+
# 日本暦注が使用する暦法
|
358
|
+
#
|
359
|
+
# @private
|
360
|
+
class Cal4Note
|
361
|
+
attr_reader :calendar, :solar
|
362
|
+
|
363
|
+
def l_calendar
|
364
|
+
@l_calendar ||= When.Calendar(@calendar.kind_of?(String) ? @calendar.sub(/#\{\?.+?\}/, '') : @calendar)
|
365
|
+
end
|
366
|
+
|
367
|
+
def s_calendar
|
368
|
+
@s_calendar ||= When.Calendar(@solar.kind_of?(String) ? @solar.sub(/#\{\?.+?\}/, '?Clock=THS') : @solar)
|
369
|
+
end
|
370
|
+
|
371
|
+
def l_phases
|
372
|
+
@l_phases ||= Japanese::LunarPhases.new('formula'=>l_calendar.formula[-1])
|
373
|
+
end
|
374
|
+
|
375
|
+
def s_terms
|
376
|
+
@s_terms ||= Japanese::SolarTerms.new('formula'=>s_calendar.formula[0])
|
377
|
+
end
|
378
|
+
|
379
|
+
def s_terms2
|
380
|
+
@s_terms2 ||= @l_calendar.iri =~ /JapaneseTwin(.*?)::天保暦/ ?
|
381
|
+
Japanese::SolarTermsRevised.new('formula'=>s_calendar.formula[0]) : s_terms
|
382
|
+
end
|
383
|
+
|
384
|
+
def doyo
|
385
|
+
@doyo ||= (s_calendar.doyo ? s_calendar.doyo * 360.0 / s_calendar.formula[0].year_length : 0)
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
#
|
390
|
+
# 日本暦注用の Notes の要素のための内部クラス
|
391
|
+
#
|
392
|
+
# @private
|
393
|
+
class Note
|
394
|
+
|
395
|
+
attr_reader :label, :position, :suffix
|
396
|
+
|
397
|
+
def to_note_hash(note, dates=nil)
|
398
|
+
{
|
399
|
+
:note => self,
|
400
|
+
:value => case @suffix
|
401
|
+
when '是' ; [@label + '是-', note[/.\z/]]
|
402
|
+
when '在' ; [@label + '在-', note]
|
403
|
+
when '-' ; [@label + '-', note]
|
404
|
+
else ; note
|
405
|
+
end,
|
406
|
+
:position => @position[@position.size == 1 ? 0 : dates.index_g]
|
407
|
+
}
|
408
|
+
end
|
409
|
+
|
410
|
+
private
|
411
|
+
# オブジェクトの正規化
|
412
|
+
#
|
413
|
+
def _normalize(args=[], options={})
|
414
|
+
@position = @position.split(/ /)
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
418
|
+
#
|
419
|
+
# 日本暦注計算に必要となる暦日や暦法をまとめた内部クラス
|
420
|
+
#
|
421
|
+
# @private
|
422
|
+
class Dates
|
423
|
+
|
424
|
+
attr_reader :year, :precision, :cal4note, :range, :index_g, :index_s, :o_date, :l_date, :m_date, :s_date
|
425
|
+
|
426
|
+
# 初期設定
|
427
|
+
def initialize(date, year=date.most_significant_coordinate, precision=date.precision, cal4note=nil)
|
428
|
+
|
429
|
+
# 暦注パターン
|
430
|
+
if cal4note
|
431
|
+
# 年代による判定
|
432
|
+
(1...NoteRange.size).to_a.reverse.each do |i|
|
433
|
+
if year >= NoteRange[i][0]
|
434
|
+
@range = i
|
435
|
+
break
|
436
|
+
end
|
437
|
+
end
|
438
|
+
@range ||= 0
|
439
|
+
else
|
440
|
+
# 暦法による判定
|
441
|
+
cal4note = Cal4Note.new(date.frame, date.frame.twin)
|
442
|
+
@range =
|
443
|
+
case cal4note.l_calendar.formula[-1]
|
444
|
+
when When::Ephemeris::ChineseTrueLunation::JujiMethods ; 11 # 江戸時代の暦
|
445
|
+
when When::Ephemeris::ChineseTrueLunation
|
446
|
+
date.frame.twin =~ /戊寅|麟徳/ ? 1 : 10 # 唐代定朔暦(儀鳳暦 or 宣明暦)
|
447
|
+
when When::Ephemeris::MeanLunation ; 0 # 唐代以前平朔暦(元嘉暦)
|
448
|
+
else ; 15 # 現代の旧暦
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
# 具注暦の配置
|
453
|
+
@index_g = NoteRange[@range][1]
|
454
|
+
|
455
|
+
# 七十二候
|
456
|
+
@index_s = NoteRange[@range][2]
|
457
|
+
|
458
|
+
# その他の属性
|
459
|
+
@year = year
|
460
|
+
@precision = precision
|
461
|
+
@cal4note = cal4note
|
462
|
+
@o_date = date
|
463
|
+
@l_date = @cal4note.l_calendar ^ date
|
464
|
+
@m_date = date.frame.kind_of?(When::CalendarTypes::Christian) ? @l_date : @o_date
|
465
|
+
@s_date = @cal4note.s_calendar ^ date
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
NoteMethods = [:year_notes, :month_notes, :day_notes]
|
470
|
+
|
471
|
+
# 暦注の計算
|
472
|
+
#
|
473
|
+
# @param [When::TM::TemporalPosition] date 暦注を計算する日時
|
474
|
+
# (date が When::TM::TemporalPosition でない場合、When::TM::TemporalPosition に変換して使用する)
|
475
|
+
# @param [Hash] options
|
476
|
+
# @option options [Hash] :conditions 日本暦注固有の計算条件
|
477
|
+
# :n27 通常月の廿七宿配当 *0:本月本説, 1:本月異説, 2:閏月本説, 3:閏月異説, 4:閏月本説(元)
|
478
|
+
# :i27 閏月の廿七宿配当 同上
|
479
|
+
# :sai *false,'0':日本暦日総覧説 , true:wagoyomi.net説
|
480
|
+
# :shoyo *false:出力せず, true:暦定数が有理数の場合に出力
|
481
|
+
# :solar_eclipse -1:計算を行わない, *0:すべて出力, 1:夜日食は出力しない, 3:夜日食に加え南半球で主に見える日食も出力しない
|
482
|
+
# :lunar_eclipse -1:計算を行わない, *0:すべて出力, 1:昼月食は出力しない, 3:昼月食に加え半影月食も出力しない
|
483
|
+
# :kana *false:具注暦用の計算, true:江戸仮名暦用の計算
|
484
|
+
# (* がデフォルト)
|
485
|
+
#
|
486
|
+
# @note :indices, :notes およびその他のキー => {When::CalendarNote#notes} を参照
|
487
|
+
#
|
488
|
+
# @return [Hash] :notes が String の場合
|
489
|
+
# @return [Array<Hash>] 上記に該当せず、:indices が Integer の場合
|
490
|
+
# @return [Array<Array<Hash>>] 上記のいずれにも該当しない場合
|
491
|
+
# @note return 値の [Hash] の要素は下記の通り
|
492
|
+
#
|
493
|
+
# :note => 暦注要素 (When::CalendarTypes::Japanese::Note)
|
494
|
+
#
|
495
|
+
# :value => 暦注の値 (String or When::BasicTypes::M17n または、その Array)
|
496
|
+
#
|
497
|
+
# :position => 具注暦でのその暦注の配置場所(String)
|
498
|
+
#
|
499
|
+
def notes(date, options={})
|
500
|
+
dates, indices, notes, persistence, conditions, options = _parse_note(date, options)
|
501
|
+
NotesContainer.register(indices.map {|i|
|
502
|
+
next [] unless i <= dates.precision
|
503
|
+
send(NoteMethods[i-1], dates, notes[i-1], conditions)
|
504
|
+
}, persistence, date.to_i)
|
505
|
+
end
|
506
|
+
|
507
|
+
# 太陽の位置 => 日時
|
508
|
+
#
|
509
|
+
# @param [When::TM::TemporalPosition] date 探す基準とする日時
|
510
|
+
# @param [Array<Numeric>] parameter 太陽の位置の分子と分母( num, den)
|
511
|
+
#
|
512
|
+
# num 分子 (デフォルト 0 : 基準日時直後の春分)
|
513
|
+
#
|
514
|
+
# den 分母 (デフォルト 360 : 検索範囲の長さ)
|
515
|
+
#
|
516
|
+
# @param [String] parameter 太陽の位置の分子と分母("#{ num }/#{ den }" の形式, デフォルト 0(春分))
|
517
|
+
# @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
|
518
|
+
#
|
519
|
+
# @return [When::TM::CalDate] date またはその直後に太陽の位置が指定の値になる日時
|
520
|
+
#
|
521
|
+
def term(date, parameter=nil, precision=date.precision)
|
522
|
+
dates = _to_date_for_note(date)
|
523
|
+
result = dates.cal4note.s_terms.term(date, parameter)
|
524
|
+
patch = SolarTerms::Patch[result.to_i]
|
525
|
+
return result unless patch
|
526
|
+
num, den = parameter.kind_of?(String) ? parameter.split('/', 2) : parameter
|
527
|
+
num = (num || 0).to_f
|
528
|
+
den = (den || 360).to_f
|
529
|
+
diff = (num - patch[0] + 1) % den - 1
|
530
|
+
return result if diff == 0
|
531
|
+
patched = result + When::P1D * diff
|
532
|
+
result.cal_date[0..-2] = patched.cal_date[0..-2]
|
533
|
+
result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
|
534
|
+
result
|
535
|
+
end
|
536
|
+
|
537
|
+
# 月の位相 => 日時
|
538
|
+
#
|
539
|
+
# @param [When::TM::TemporalPosition] date 探す基準とする日時
|
540
|
+
# @param [Array<Numeric>] parameter 月の位相の分子と分母( num, den)
|
541
|
+
#
|
542
|
+
# num 分子 (デフォルト 0 : 基準日時直後の朔)
|
543
|
+
#
|
544
|
+
# den 分母 (デフォルト 30 : 検索範囲の長さ)
|
545
|
+
#
|
546
|
+
# @param [String] parameter 月の位相の分子と分母("#{ num }/#{ den }" の形式, デフォルト 0(朔))
|
547
|
+
# @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
|
548
|
+
#
|
549
|
+
# @return [When::TM::CalDate] date またはその直後に月の位相が指定の値になる日時
|
550
|
+
#
|
551
|
+
def phase(date, parameter=nil, precision=date.precision)
|
552
|
+
dates = _to_date_for_note(date)
|
553
|
+
note = dates.cal4note.l_phases
|
554
|
+
result = note.phase(date, parameter)
|
555
|
+
return result if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian)
|
556
|
+
|
557
|
+
time = note.phase(date, parameter, When::SYSTEM)
|
558
|
+
cn = note.formula.time_to_cn(time) % 1
|
559
|
+
case cn
|
560
|
+
when 0..0.0001, 0.9999..1 # 朔
|
561
|
+
return result if result.cal_date[-1] == 1
|
562
|
+
diff = result.cal_date[-1] < 15 ? -1 : +1
|
563
|
+
when 0.2..0.8 # 弦、望
|
564
|
+
return result unless note.formula.kind_of?(When::Ephemeris::ChineseTrueLunation)
|
565
|
+
return result if time.clk_time.universal_time >= When::TM::Duration::DAY/4 # 午前6時以降
|
566
|
+
diff = -1
|
567
|
+
else # その他
|
568
|
+
return result
|
569
|
+
end
|
570
|
+
|
571
|
+
patched = result + When::P1D * diff
|
572
|
+
result.cal_date[0..-2] = patched.cal_date[0..-2]
|
573
|
+
result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
|
574
|
+
result
|
575
|
+
end
|
576
|
+
|
577
|
+
private
|
578
|
+
|
579
|
+
# オブジェクトの正規化
|
580
|
+
def _normalize(args=[], options={})
|
581
|
+
@prime ||= [%w(干支), %w(月名), %w(七曜 干支 六曜 廿四節気 祝祭日)]
|
582
|
+
super
|
583
|
+
end
|
584
|
+
|
585
|
+
# 年の暦注
|
586
|
+
def year_notes(dates, notes, conditions={})
|
587
|
+
_note_values(dates, notes, _all_keys[-3], _elements[-3]) do |dates, focused_notes, notes_hash|
|
588
|
+
|
589
|
+
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-3]
|
590
|
+
root = When.Resource('_co:Common')
|
591
|
+
|
592
|
+
# 干支
|
593
|
+
residue = (dates.precision < When::DAY ? dates.o_date : dates.s_date).most_significant_coordinate - 4
|
594
|
+
notes_hash['干支'] = root['干支'][residue % 60]
|
595
|
+
notes_hash['干'] = root['干' ][residue % 10]
|
596
|
+
notes_hash['支'] = root['支' ][residue % 12]
|
597
|
+
|
598
|
+
# 廿八宿
|
599
|
+
notes_hash['廿八宿'] ||= root['宿'][(residue+18) % 28]
|
600
|
+
|
601
|
+
# 九星
|
602
|
+
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.year(residue)]
|
603
|
+
|
604
|
+
# 大小
|
605
|
+
unless notes_hash['大小']
|
606
|
+
year = dates.o_date.floor(When::YEAR)
|
607
|
+
month = year.floor(When::MONTH)
|
608
|
+
pattern = ''
|
609
|
+
while year == month
|
610
|
+
length = month.length(When::MONTH)
|
611
|
+
length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
|
612
|
+
pattern += '閏' if month[When::MONTH] * 0 == 1
|
613
|
+
pattern += MonthPattern[length] || '改'
|
614
|
+
month += When::P1M
|
615
|
+
end
|
616
|
+
notes_hash['大小'] = "#{pattern}(#{year.length(When::YEAR)})"
|
617
|
+
end
|
618
|
+
|
619
|
+
# その他
|
620
|
+
[notes_hash['干支'], notes_hash['干'], notes_hash['支']].each do |note|
|
621
|
+
note._year_notes(notes_hash, dates, conditions)
|
622
|
+
end
|
623
|
+
notes_hash
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
# 月の暦注
|
628
|
+
def month_notes(dates, notes, conditions={})
|
629
|
+
_note_values(dates, notes, _all_keys[-2], _elements[-2]) do |dates, focused_notes, notes_hash|
|
630
|
+
|
631
|
+
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-2]
|
632
|
+
root = When.Resource('_co:Common')
|
633
|
+
|
634
|
+
# 干支
|
635
|
+
residue = month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.m_date)
|
636
|
+
notes_hash['干支'] = root['干支'][residue % 60]
|
637
|
+
notes_hash['干'] = root['干' ][residue % 10]
|
638
|
+
notes_hash['支'] = root['支' ][residue % 12]
|
639
|
+
|
640
|
+
# 廿八宿
|
641
|
+
notes_hash['廿八宿'] ||= root['宿'][(residue+6) % 28]
|
642
|
+
|
643
|
+
# 九星
|
644
|
+
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.month(
|
645
|
+
month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.s_date))]
|
646
|
+
|
647
|
+
# 大小
|
648
|
+
unless notes_hash['大小']
|
649
|
+
length = dates.o_date.length(When::MONTH)
|
650
|
+
length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
|
651
|
+
notes_hash['大小'] = "#{dates.o_date[When::MONTH]*0==1 ? '閏' : ''}#{MonthPattern[length] || '改'}(#{length.abs})"
|
652
|
+
end
|
653
|
+
|
654
|
+
# その他
|
655
|
+
[notes_hash['干支'], notes_hash['干'], notes_hash['支'], JapaneseLuniSolarNote].each do |note|
|
656
|
+
note._month_notes(notes_hash, dates, conditions)
|
657
|
+
end
|
658
|
+
notes_hash
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
# 日の暦注
|
663
|
+
def day_notes(dates, notes, conditions={})
|
664
|
+
_note_values(dates, notes, _all_keys[-1], _elements[-1]) do |dates, focused_notes, notes_hash|
|
665
|
+
|
666
|
+
focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-1]
|
667
|
+
root = When.Resource('_co:Common')
|
668
|
+
|
669
|
+
# 干支
|
670
|
+
residue = dates.s_date.to_i-11
|
671
|
+
notes_hash['干支'] = root['干支'][residue % 60]
|
672
|
+
notes_hash['干'] = root['干' ][residue % 10]
|
673
|
+
notes_hash['支'] = root['支' ][residue % 12]
|
674
|
+
|
675
|
+
# その他
|
676
|
+
[SolarTerms, LunarPhases, notes_hash['干支'], notes_hash['干'], notes_hash['支'],
|
677
|
+
JapaneseLuniSolarNote, JapaneseSolarNote].each do |note|
|
678
|
+
note._day_notes(notes_hash, dates, conditions)
|
679
|
+
end
|
680
|
+
|
681
|
+
# 七曜
|
682
|
+
notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
|
683
|
+
|
684
|
+
# 廿七宿
|
685
|
+
notes_hash['廿七宿'] = _residue27(notes_hash['廿七宿'], root)
|
686
|
+
|
687
|
+
# 廿八宿 / 鬼宿
|
688
|
+
notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28]
|
689
|
+
notes_hash['鬼宿'] ||= /鬼/ =~ notes_hash['廿八宿'].to_s ? '鬼宿' : nil
|
690
|
+
|
691
|
+
# 九星
|
692
|
+
notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.s_date, dates.cal4note.s_terms)]
|
693
|
+
|
694
|
+
notes_hash
|
695
|
+
end
|
696
|
+
end
|
697
|
+
|
698
|
+
#
|
699
|
+
# 日本暦日情報オブジェクトの生成
|
700
|
+
#
|
701
|
+
# @note 対となる太陽暦のある太陰太陽暦はそのまま(太陰太陽暦,太陽暦)の対
|
702
|
+
# そうでなければ、採用する対を年代により選択する
|
703
|
+
#
|
704
|
+
def _to_date_for_note(date)
|
705
|
+
if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
|
706
|
+
return Dates.new(date) if date.frame.twin
|
707
|
+
o_date = date
|
708
|
+
else
|
709
|
+
o_date = self.class._to_japanese_date(date)
|
710
|
+
return nil unless o_date
|
711
|
+
end
|
712
|
+
year = o_date.most_significant_coordinate
|
713
|
+
NoteTypes.each do |line|
|
714
|
+
return Dates.new(o_date, year, date.precision, line[1]) if year >= line[0]
|
715
|
+
end
|
716
|
+
nil
|
717
|
+
end
|
718
|
+
|
719
|
+
#
|
720
|
+
# 任意の暦を日本年号付暦日に変換
|
721
|
+
#
|
722
|
+
# @param When::TM::CalDate] date 変換元日付
|
723
|
+
#
|
724
|
+
# @return [When::TM::CalDate] 変換結果
|
725
|
+
#
|
726
|
+
def self._to_japanese_date(date)
|
727
|
+
return date if is_japanese_date?(date)
|
728
|
+
(date^ When.era(:area=>'日本')).each do |list|
|
729
|
+
return list[0] if list[0]
|
730
|
+
end
|
731
|
+
nil
|
732
|
+
end
|
733
|
+
|
734
|
+
#
|
735
|
+
# 日本年号付暦日か?
|
736
|
+
#
|
737
|
+
# @param When::TM::CalDate] date 確認する日付
|
738
|
+
#
|
739
|
+
# @return [Boolean] true YES / false NO
|
740
|
+
#
|
741
|
+
def self.is_japanese_date?(date)
|
742
|
+
date._attr[:query] && date._attr[:query]['area'].to_s =~ /日本/
|
743
|
+
end
|
744
|
+
|
745
|
+
#
|
746
|
+
# 廿七宿を Resudue 化
|
747
|
+
#
|
748
|
+
def _residue27(index, root)
|
749
|
+
return index unless index.kind_of?(Integer)
|
750
|
+
root['宿'][index]
|
751
|
+
end
|
752
|
+
|
753
|
+
#
|
754
|
+
# 月の干支
|
755
|
+
#
|
756
|
+
def month_stem_branch(date)
|
757
|
+
date.most_significant_coordinate*12+(date.cal_date[1] * 1) +
|
758
|
+
(date.frame.kind_of?(When::CalendarTypes::Christian) ? 12 : 13)
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
#
|
763
|
+
# 太陽暦の暦注・祝祭日
|
764
|
+
#
|
765
|
+
class JapaneseSolarNote < self
|
766
|
+
|
767
|
+
#
|
768
|
+
# 祝祭日一覧
|
769
|
+
#
|
770
|
+
NotesList = {
|
771
|
+
[ 1, 1] => [[1868..1872, '元旦'], [1874..1948, '四方拝'], [1949..2100, '元日']],
|
772
|
+
[ 1, 3] => [[1874..1948, '元始祭']],
|
773
|
+
[ 1, 5] => [[1874..1948, '新年宴会']],
|
774
|
+
[ 1,-2] => [[2000..2100, '成人の日']],
|
775
|
+
[ 1,15] => [[1868..1872, '小正月'], [1949..1999, '成人の日']],
|
776
|
+
[ 1,29] => [[1873..1873, '神武天皇即位日']],
|
777
|
+
[ 1,30] => [[1874..1912, '孝明天皇祭']],
|
778
|
+
[ 2,11] => [[1874..1948, '紀元節'], [1967..2100, '建国記念の日']],
|
779
|
+
[ 2,24] => [[1989..1989, '昭和天皇の大喪の礼']],
|
780
|
+
[ 3, 3] => [[1868..1872, '弥生節句']],
|
781
|
+
[ 3, 0] => [[1879..1948, '春季皇霊祭'], [1949..2100, '春分の日']],
|
782
|
+
[ 4, 3] => [[1874..1948, '神武天皇祭']],
|
783
|
+
[ 4,10] => [[1959..1959, '皇太子明仁親王の結婚の儀']],
|
784
|
+
[ 4,29] => [[1927..1948, '天長節'], [1949..1988, '天皇誕生日'], [1989..2006, 'みどりの日'], [2007..2100, '昭和の日']],
|
785
|
+
[ 5, 3] => [[1949..2100, '憲法記念日']],
|
786
|
+
[ 5, 4] => [[2007..2100, 'みどりの日']],
|
787
|
+
[ 5, 5] => [[1868..1872, '端午節句'], [1949..2100, 'こどもの日']],
|
788
|
+
[ 6, 9] => [[1993..1993, '皇太子徳仁親王の結婚の儀']],
|
789
|
+
[ 7, 7] => [[1868..1872, '七夕節句']],
|
790
|
+
[ 7,15] => [[1868..1872, 'お盆']],
|
791
|
+
[ 7,20] => [[1996..2002, '海の日']],
|
792
|
+
[ 7,-3] => [[2003..2100, '海の日']],
|
793
|
+
[ 7,30] => [[1913..1926, '明治天皇祭']],
|
794
|
+
[ 8, 1] => [[1868..1872, '田実節句']],
|
795
|
+
[ 8,11] => [[2016..2100, '山の日']],
|
796
|
+
[ 8,31] => [[1913..1926, '天長節']],
|
797
|
+
[ 9, 9] => [[1868..1872, '重陽節句']],
|
798
|
+
[ 9,15] => [[1966..2002, '敬老の日']],
|
799
|
+
[ 9,-3] => [[2003..2100, '敬老の日']],
|
800
|
+
[ 9,17] => [[1874..1878, '神嘗祭']],
|
801
|
+
[ 9, 0] => [[1878..1947, '秋季皇霊祭'], [1948..2100, '秋分の日']],
|
802
|
+
[10,10] => [[1966..1999, '体育の日']],
|
803
|
+
[10,-2] => [[2000..2100, '体育の日']],
|
804
|
+
[10,17] => [[1879..1947, '神嘗祭']],
|
805
|
+
[10,31] => [[1913..1926, '天長節祝日']],
|
806
|
+
[11, 3] => [[1873..1911, '天長節'], [1927..1947, '明治節'], [1948..2100, '文化の日']],
|
807
|
+
[11,10] => [[1915..1915, '即位の礼'], [1928..1928, '即位の礼']],
|
808
|
+
[11,12] => [[1990..1990, '即位の礼正殿の儀']],
|
809
|
+
[11,14] => [[1915..1915, '大嘗祭'], [1928..1928, '大嘗祭']],
|
810
|
+
[11,16] => [[1915..1915, '大饗第1日'], [1928..1928, '大饗第1日']],
|
811
|
+
[11,23] => [[1873..1947, '新嘗祭'], [1948..2100, '勤労感謝の日']],
|
812
|
+
[12,23] => [[1989..2100, '天皇誕生日']],
|
813
|
+
[12,25] => [[1927..1947, '大正天皇祭']]
|
814
|
+
}
|
815
|
+
|
816
|
+
# @private
|
817
|
+
Long = {3=>0, 9=>180}
|
818
|
+
|
819
|
+
class << self
|
820
|
+
|
821
|
+
# 日の暦注 - 祝祭日の計算
|
822
|
+
# @private
|
823
|
+
def _day_notes(notes, dates, conditions={})
|
824
|
+
# 明治維新以降の実暦日のみ扱う
|
825
|
+
return notes if dates.o_date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
|
826
|
+
year = dates.o_date.most_significant_coordinate
|
827
|
+
return notes unless year >= 1868
|
828
|
+
|
829
|
+
# 春分の日と秋分の日を祝祭日に加える
|
830
|
+
long = Long[dates.o_date.cal_date[1]] if year >= 1878
|
831
|
+
if long
|
832
|
+
date = When.when?(dates.o_date.to_cal_date.to_s,
|
833
|
+
{:frame=>dates.o_date.frame,
|
834
|
+
:clock=>dates.s_date.frame.time_basis})
|
835
|
+
term = dates.cal4note.s_terms.term(date.floor(When::MONTH,
|
836
|
+
When::DAY), [long,360]).cal_date[1..2]
|
837
|
+
list = NotesList.dup
|
838
|
+
list[term] = list[[term[0],0]]
|
839
|
+
else
|
840
|
+
list = NotesList
|
841
|
+
end
|
842
|
+
|
843
|
+
# 「国民の休日」制定以前
|
844
|
+
notes['祝祭日'] ||= _holiday(list, dates.o_date, '振替休日')
|
845
|
+
return notes if notes['祝祭日'] || year < 1988
|
846
|
+
|
847
|
+
# 「国民の休日」制定以後
|
848
|
+
duration = When.Duration('P1D')
|
849
|
+
[duration, -duration].each do |d|
|
850
|
+
return notes unless _holiday(list, dates.o_date + d)
|
851
|
+
end
|
852
|
+
notes['祝祭日'] = '国民の休日'
|
853
|
+
return notes
|
854
|
+
end
|
855
|
+
|
856
|
+
private
|
857
|
+
|
858
|
+
# 振替休日とハッピーマンデーを考慮した祝祭日
|
859
|
+
def _holiday(list, date, alternate=nil)
|
860
|
+
y = date.most_significant_coordinate
|
861
|
+
m, d = date.cal_date[1..2]
|
862
|
+
|
863
|
+
# 「振替休日」制定以前
|
864
|
+
note = _note(list, y, m, d)
|
865
|
+
return note if note || y < 1973
|
866
|
+
|
867
|
+
# 「振替休日」制定以降
|
868
|
+
case date.to_i % 7
|
869
|
+
when 0 # 月曜
|
870
|
+
# 振替休日
|
871
|
+
note = _note(list, y, m, d-1)
|
872
|
+
return alternate if note
|
873
|
+
# ハッピーマンデー
|
874
|
+
note = _note(list, y, m, -((d-1)/7 + 1))
|
875
|
+
return note if note
|
876
|
+
when 1,2 # 火曜・水曜
|
877
|
+
# 振替休日
|
878
|
+
return alternate if y >= 2007 && m == 5 && d == 6
|
879
|
+
end
|
880
|
+
end
|
881
|
+
|
882
|
+
# 振替休日とハッピーマンデーを考慮しない祝祭日
|
883
|
+
def _note(list, year, month, day)
|
884
|
+
return nil if day == 0
|
885
|
+
year = [year, 2100].min
|
886
|
+
note = list[[month,day]]
|
887
|
+
return nil unless note
|
888
|
+
note.each do |range|
|
889
|
+
return range[1] if range[0].include?(year)
|
890
|
+
end
|
891
|
+
return nil
|
892
|
+
end
|
893
|
+
end
|
894
|
+
end
|
895
|
+
|
896
|
+
#
|
897
|
+
# 太陰太陽暦の暦注
|
898
|
+
#
|
899
|
+
class JapaneseLuniSolarNote < self
|
900
|
+
|
901
|
+
# 変換表 月日→27宿
|
902
|
+
StarMansions = [ # 正 2 3 4 5 6 7 8 9 10 11 12
|
903
|
+
[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
|
904
|
+
[ 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
|
905
|
+
[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
|
906
|
+
[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
|
907
|
+
[14, 16, 18, 23, 22, 24, 0, 3, 5, 7, 8, 12] # 4 : 閏月本説(元) (星24) (女09)
|
908
|
+
]
|
909
|
+
|
910
|
+
# 変換表 27宿→28宿
|
911
|
+
StarMansionIndex = (0..7).to_a + (9..27).to_a
|
912
|
+
|
913
|
+
# 七曜と27宿で決まる暦注
|
914
|
+
WeekDepended = {
|
915
|
+
# 日 月 火 水 木 金 土
|
916
|
+
'甘露' => [26, 17, 5, 22, 21, 3, 23], # 軫27 畢18 尾05 柳23 鬼22 房03 星24
|
917
|
+
'金剛峯' => [ 5, 8, 12, 16, 20, 24, 1], # 尾05 女09 壁13 昴17 井21 張25 亢01
|
918
|
+
'羅刹' => [15, 21, 25, 19, 2, 13, 22] # 胃16 鬼22 翼26 参20 氐02 奎14 柳23
|
919
|
+
}
|
920
|
+
|
921
|
+
# 人神配当
|
922
|
+
HumanBody = %w(足大指 外踝 股内 腰 口 手 内踝 腕 尻 腰背
|
923
|
+
鼻柱 髪際 牙歯 胃管 遍身 胸 気街 股内 足 踝
|
924
|
+
足小指 足踝及胸、目下 肝及足 手陽明 足陽明 胸 膝 陰 膝晊 足跌)
|
925
|
+
|
926
|
+
# 月の暦注
|
927
|
+
# @private
|
928
|
+
def self._month_notes(notes, dates, conditions={})
|
929
|
+
# 月名
|
930
|
+
notes['月名'] ||= dates.o_date.name('month')
|
931
|
+
end
|
932
|
+
|
933
|
+
# 日の暦注
|
934
|
+
# @private
|
935
|
+
def self._day_notes(notes, dates, conditions={})
|
936
|
+
|
937
|
+
# 廿七宿
|
938
|
+
m, l = [1,0].map {|f| dates.m_date.cal_date[1] * f}
|
939
|
+
d = (StarMansions[l==1 ? (conditions[:i27]||0) :
|
940
|
+
(conditions[:n27]||0)][m-1] + dates.m_date.cal_date[2] - 1) % 27
|
941
|
+
notes['廿七宿'] ||= StarMansionIndex[d]
|
942
|
+
|
943
|
+
# 甘露 / 金剛峯 / 羅刹
|
944
|
+
w = (dates.m_date.to_i + 1) % 7
|
945
|
+
['甘露', '金剛峯', '羅刹'].each do |c|
|
946
|
+
notes[c] = c if d == WeekDepended[c][w]
|
947
|
+
end
|
948
|
+
|
949
|
+
# 三寶吉・神吉・雑事吉・小字注 (凶会日は表引きの時点で抑制済み)
|
950
|
+
notes['神吉'] = notes['雑事吉'] = notes['三寶吉'] = notes['小字注'] = nil if notes['没'] || notes['滅']
|
951
|
+
notes['神吉'] = notes['雑事吉'] = nil if notes['往亡']
|
952
|
+
notes['神吉'] = notes['三寶吉'] = nil if notes['月食']
|
953
|
+
notes['小字注'] = nil if notes['日食'] || notes['月食']
|
954
|
+
notes['小字注'] = nil if notes['九坎'] && dates.range==5 # 11世紀後半
|
955
|
+
notes['三寶吉'] = nil if notes['羅刹']
|
956
|
+
notes['三寶吉'] = notes['甘露'] ? '三寶吉' : nil if /\+/ =~ notes['三寶吉'].to_s
|
957
|
+
notes['三寶吉'] = '三吉' if notes['三寶吉'] && dates.range >= 8 # 鎌倉以降
|
958
|
+
|
959
|
+
# 除手足甲 & 道虚・人神配当
|
960
|
+
y,m0,d0 = dates.m_date.cal_date
|
961
|
+
misoka = m0 != (dates.m_date + When.Duration('P1D')).cal_date[1] if d0 == 29
|
962
|
+
notes['除手足甲'] = '除手足甲' if ([6,16,30].include?(d0) || misoka) && !(conditions[:kana] || notes['没'] || notes['滅'] || notes['凶会'])
|
963
|
+
notes['道虚'] = '道虚' if d0 % 6 == 0 || misoka
|
964
|
+
notes['人神配当'] = HumanBody[d0-1]
|
965
|
+
|
966
|
+
# 仮名暦
|
967
|
+
notes['赤舌' ] ||= d0 == (m * 5 - 3) % 6 + 1 ? '赤舌' : nil
|
968
|
+
notes['大赤' ] ||= d0 % 8 == (m * 7 - 3) % 8 ? '大赤' : nil
|
969
|
+
notes['不成就'] ||= d0 % 8 == [6,3,2,1,4,5][m % 6] || (misoka && m % 6 == 0) ? '不成就' : nil # 『現代こよみ読み解き事典』 for 不成就日
|
970
|
+
notes['六曜' ] ||= When::RokuyoWeek.rokuyo_value(m, d0)
|
971
|
+
notes
|
972
|
+
end
|
973
|
+
end
|
974
|
+
|
975
|
+
#
|
976
|
+
# 月の位相による暦注
|
977
|
+
#
|
978
|
+
class Japanese::LunarPhases < LunarPhases
|
979
|
+
|
980
|
+
# 日の暦注
|
981
|
+
# @private
|
982
|
+
def self._day_notes(notes, dates, conditions={})
|
983
|
+
date = When.when?(dates.o_date.to_cal_date.to_s,
|
984
|
+
{:frame=>dates.o_date.frame,
|
985
|
+
:clock=>dates.l_date.frame.time_basis})
|
986
|
+
phase, metsu = dates.cal4note.l_phases.position(date)
|
987
|
+
|
988
|
+
# 滅
|
989
|
+
notes['滅'] = metsu == 2 && dates.range < 11 ? '滅' : nil
|
990
|
+
|
991
|
+
# 月相
|
992
|
+
unless notes['月相']
|
993
|
+
# イベントの判定
|
994
|
+
formula = dates.cal4note.l_phases.formula
|
995
|
+
clock = formula.kind_of?(When::Ephemeris::ChineseTrueLunation) &&
|
996
|
+
(5..25).include?(dates.l_date.cal_date[2]) ?
|
997
|
+
When.Clock(-21600) : # 唐代暦法の望弦は午前6時を日の境界とする
|
998
|
+
dates.l_date.frame._time_basis[-1] # その他(進朔も考慮した時刻)
|
999
|
+
odate = When.when?(dates.o_date.to_cal_date.to_s, {:frame=>dates.o_date.frame, :clock=>clock})
|
1000
|
+
phases = formula.phase_range(odate)
|
1001
|
+
thitis = phases.map {|phase| (phase % 1) * 30.0}
|
1002
|
+
note = if thitis[0] >= thitis[1]
|
1003
|
+
dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) || conditions[:shoyo] ? '朔' : nil
|
1004
|
+
else
|
1005
|
+
range = thitis[0]...thitis[1]
|
1006
|
+
range.include?( 7.5) ? '上弦' :
|
1007
|
+
range.include?(15.0) ? '望' :
|
1008
|
+
range.include?(22.5) ? '下弦' : nil
|
1009
|
+
end
|
1010
|
+
|
1011
|
+
# 結果の反映
|
1012
|
+
if conditions[:shoyo]
|
1013
|
+
# :shoyo が true ならイベント時刻も返す
|
1014
|
+
notes['月相'] = if note
|
1015
|
+
etime = formula._to_seed_type(formula.cn_to_time((phases[1] * 4).floor / 4.0), odate)
|
1016
|
+
if formula.respond_to?(:lunation_length) && formula.lunation_length.kind_of?(Rational)
|
1017
|
+
shoyo = etime.clk_time.universal_time
|
1018
|
+
shoyo += When::TM::Duration::DAY if (0...clock.universal_time).include?(shoyo)
|
1019
|
+
shoyo = (shoyo / When::TM::Duration::DAY * formula.denominator * 1000 + 0.5).floor / 1000.0
|
1020
|
+
shoyo = shoyo.to_i if shoyo == shoyo.to_i
|
1021
|
+
"#{note}(#{shoyo}/#{formula.denominator})"
|
1022
|
+
else
|
1023
|
+
etime.events = [note]
|
1024
|
+
etime
|
1025
|
+
end
|
1026
|
+
else
|
1027
|
+
nil
|
1028
|
+
end
|
1029
|
+
else
|
1030
|
+
# :shoyo が false ならイベン名のみ返す
|
1031
|
+
notes['月相'] = note
|
1032
|
+
end
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
# 月食
|
1036
|
+
unless notes['月食'] && notes['神吉'] && notes['三寶吉'] && notes['小字注']
|
1037
|
+
level = (conditions[:lunar_eclipse]||0).to_i
|
1038
|
+
if level == -1
|
1039
|
+
note = nil
|
1040
|
+
else
|
1041
|
+
key = dates.m_date.to_s[/\(.+\z/]
|
1042
|
+
if key
|
1043
|
+
note, = Japanese::Eclipse::Eclipses[key.gsub(/[()]/,'')]
|
1044
|
+
elsif dates.o_date.location &&
|
1045
|
+
dates.o_date.frame.kind_of?(When::CalendarTypes::Christian)
|
1046
|
+
info = dates.o_date.location.lunar_eclipse(date..date)
|
1047
|
+
note = '月' + Japanese::Eclipse.eclipse_summary(info[0]) unless info.empty?
|
1048
|
+
end
|
1049
|
+
if note
|
1050
|
+
note.sub!(/\*.*\z/, '')
|
1051
|
+
note = nil unless /月/ =~ note
|
1052
|
+
note = nil if level[0] == 1 && /昼/ =~ note
|
1053
|
+
note = nil if level[1] == 1 && /^\(/ =~ note
|
1054
|
+
end
|
1055
|
+
end
|
1056
|
+
notes['月食'] = note
|
1057
|
+
end
|
1058
|
+
|
1059
|
+
notes
|
1060
|
+
end
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
#
|
1064
|
+
# 太陽黄経による暦注
|
1065
|
+
#
|
1066
|
+
class Japanese::SolarTerms < SolarTerms
|
1067
|
+
|
1068
|
+
Notes12 = %w(正月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
|
1069
|
+
|
1070
|
+
Notes10 = [
|
1071
|
+
%w(初伏 初伏),
|
1072
|
+
%w(仲伏 中伏),
|
1073
|
+
%w(後伏 末伏)]
|
1074
|
+
|
1075
|
+
Notes60_A = [
|
1076
|
+
# +0
|
1077
|
+
'侯小過外', # 315 : 正月
|
1078
|
+
'侯需外', # 345 : 二月
|
1079
|
+
'侯豫外', # 15 : 三月
|
1080
|
+
'侯旅外', # 45 : 四月
|
1081
|
+
'侯大有外', # 75 : 五月
|
1082
|
+
'侯鼎外', # 105 : 六月
|
1083
|
+
'侯恆外', # 135 : 七月
|
1084
|
+
'侯巽外', # 165 : 八月
|
1085
|
+
'侯歸妹外', # 195 : 九月
|
1086
|
+
'侯艮外', # 225 : 十月
|
1087
|
+
'侯未濟外', # 255 : 十一月
|
1088
|
+
'侯屯外' # 285 : 十二月
|
1089
|
+
]
|
1090
|
+
|
1091
|
+
Notes60_B = [
|
1092
|
+
# +3 +9 +15 +21 +27
|
1093
|
+
'大夫蒙', '卿益', '公漸', '辟泰', '侯需内', # 315 : 正月
|
1094
|
+
'大夫随', '卿晋', '公解', '辟大壯', '侯豫内', # 345 : 二月
|
1095
|
+
'大夫訟', '卿蠱', '公革', '辟夬', '侯旅内', # 15 : 三月
|
1096
|
+
'大夫師', '卿比', '公小畜', '辟乾', '侯大有内', # 45 : 四月
|
1097
|
+
'大夫家人', '卿井', '公咸', '辟姤', '侯鼎内', # 75 : 五月
|
1098
|
+
'大夫豊', '卿渙', '公履', '辟遯', '侯恆内', # 105 : 六月
|
1099
|
+
'大夫節', '卿同人', '公損', '辟否', '侯巽内', # 135 : 七月
|
1100
|
+
'大夫萃', '卿大畜', '公賁', '辟観', '侯歸妹内', # 165 : 八月
|
1101
|
+
'大夫無妄', '卿明夷', '公困', '辟剥', '侯艮内', # 195 : 九月
|
1102
|
+
'大夫既濟', '卿噬嗑', '公大過', '辟坤', '侯未濟内', # 225 : 十月
|
1103
|
+
'大不蹇', '卿頤', '公中孚', '辟復', '侯屯内', # 255 : 十一月
|
1104
|
+
'大夫謙', '卿睽', '公升', '辟臨', '侯小過内' # 285 : 十二月
|
1105
|
+
]
|
1106
|
+
|
1107
|
+
Notes72 = [
|
1108
|
+
# 儀鳳暦 宣明暦(中国) 宣明暦 貞享暦 宝暦暦・寛政暦 略本暦
|
1109
|
+
# 315 : 正月
|
1110
|
+
%w(雞始乳 東風解凍 東風解凍 東風解凍 東風解凍 東風解凍),
|
1111
|
+
%w(東風解凍 蟄始振 蟄虫始振 梅花乃芳 黄鶯睍睆 黄鶯睍睆),
|
1112
|
+
%w(蟄蟲始振 魚上氷 魚上氷 魚上氷 魚上氷 魚上氷),
|
1113
|
+
%w(魚上冰 獺祭魚 獺祭魚 土脈潤起 土脈潤起 土脉潤起),
|
1114
|
+
%w(獺祭魚 鴻雁来 鴻雁来 霞彩碧空 霞始靆 霞始靆),
|
1115
|
+
%w(鴻雁來 草木萌動 草木萌動 草木萌動 草木萌動 草木萌動),
|
1116
|
+
|
1117
|
+
# 345 : 二月
|
1118
|
+
%w(始雨水 桃始華 桃始華 蟄虫啓戸 蟄虫啓戸 蟄虫啓戸),
|
1119
|
+
%w(桃始花 倉庚鳴 倉庚鳴 寒雨間熟 桃始笑 桃始笑),
|
1120
|
+
%w(倉庚鳴 鷹化爲鳩 鷹化爲鳩 菜虫化蝶 菜虫化蝶 菜虫化蝶),
|
1121
|
+
%w(鷹化爲鳩 玄鳥至 玄鳥至 雀始巣 雀始巣 雀始巣),
|
1122
|
+
%w(玄鳥至 雷乃發聲 雷乃發聲 雷乃発声 桜始開 桜始開),
|
1123
|
+
%w(雷始發聲 始電 始電 桜始開桃始笑 雷乃発声 雷乃発声),
|
1124
|
+
|
1125
|
+
# 15 : 三月
|
1126
|
+
%w(始雷 桐始華 桐始華 玄鳥至 玄鳥至 玄鳥至),
|
1127
|
+
%w(蟄蟲咸動 田鼠化爲鴑 田鼠化爲鴑 鴻雁北 鴻雁北 鴻雁北),
|
1128
|
+
%w(蟄蟲啓戸 虹始見 虹始見 虹始見 虹始見 虹始見),
|
1129
|
+
%w(桐始華 萍始生 萍始生 葭始生 葭始生 葭始生),
|
1130
|
+
%w(田鼠化爲鴑 鳴鳩拂其羽 鳴鳩拂其羽 牡丹華 霜止出苗 霜止出苗),
|
1131
|
+
%w(虹始見 戴勝降于桑 戴勝降于桑 霜止出苗 牡丹華 牡丹華),
|
1132
|
+
|
1133
|
+
# 45 : 四月
|
1134
|
+
%w(萍始生 螻蟈鳴 螻蟈鳴 鵑始鳴 鼃始鳴 鼃始鳴),
|
1135
|
+
%w(戴勝降于桑 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出),
|
1136
|
+
%w(螻蟈鳴 王瓜生 王瓜生 竹笋生 竹笋生 竹笋生),
|
1137
|
+
%w(蚯蚓出 苦菜秀 苦菜秀 蚕起食桑 蚕起食桑 蚕起食桑),
|
1138
|
+
%w(王瓜生 靡草死 靡草死 紅花栄 紅花栄 紅花栄),
|
1139
|
+
%w(苦菜秀 小暑至 小暑至 麦秋至 麦秋至 麦秋至),
|
1140
|
+
|
1141
|
+
# 75 : 五月
|
1142
|
+
%w(靡草死 螳蜋生 螳蜋生 螳螂生 螳螂生 螳螂生),
|
1143
|
+
%w(小暑至 鵙始鳴 鵙始鳴 腐草為螢 腐草為螢 腐草為螢),
|
1144
|
+
%w(螳螂生 反舌無聲 反舌無聲 梅始黄 梅子黄 梅子黄),
|
1145
|
+
%w(鵙始鳴 鹿角解 鹿角解 乃東枯 乃東枯 乃東枯),
|
1146
|
+
%w(反舌無聲 蜩始鳴 蜩始鳴 分龍雨 菖蒲華 菖蒲華),
|
1147
|
+
%w(鹿角解 半夏生 半夏生 半夏生 半夏生 半夏生),
|
1148
|
+
|
1149
|
+
# 105 : 六月
|
1150
|
+
%w(蟬始鳴 温風至 温風至 温風至 温風至 温風至),
|
1151
|
+
%w(半夏生 蟋蟀居壁 蟋蟀居壁 蓮始華 蓮始華 蓮始開),
|
1152
|
+
%w(木槿榮 鷹乃學習 鷹乃學習 鷹乃学習 鷹乃学習 鷹乃学習),
|
1153
|
+
%w(温風至 腐草爲螢 腐草爲螢 桐始結花 桐始結花 桐始結花),
|
1154
|
+
%w(蟋蟀居壁 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑),
|
1155
|
+
%w(鷹乃學習 大雨時行 大雨時行 大雨時行 大雨時行 大雨時行),
|
1156
|
+
|
1157
|
+
# 135 : 七月
|
1158
|
+
%w(腐草爲螢 涼風至 涼風至 涼風至 涼風至 涼風至),
|
1159
|
+
%w(土潤溽暑 白露降 白露降 山沢浮雲 寒蝉鳴 寒蝉鳴),
|
1160
|
+
%w(涼風至 寒蟬鳴 寒蟬鳴 霧色已成 蒙霧升降 蒙霧升降),
|
1161
|
+
%w(白露降 鷹乃祭鳥 鷹乃祭鳥 寒蝉鳴 綿柎開 綿柎開),
|
1162
|
+
%w(寒蟬鳴 天地始肅 天地始肅 天地始粛 天地始粛 天地始粛),
|
1163
|
+
%w(鷹祭鳥 禾乃登 禾乃登 禾乃登 禾乃登 禾乃登),
|
1164
|
+
|
1165
|
+
# 165 : 八月
|
1166
|
+
%w(天地始肅 鴻雁来 鴻雁来 草露白 草露白 草露白),
|
1167
|
+
%w(暴風至 玄鳥歸 玄鳥歸 鶺鴒鳴 鶺鴒鳴 鶺鴒鳴),
|
1168
|
+
%w(鴻雁來 群鳥養羞 群鳥養羞 玄鳥去 玄鳥去 玄鳥去),
|
1169
|
+
%w(玄鳥歸 雷乃收聲 雷乃收聲 鴻雁来 雷乃収声 雷乃収声),
|
1170
|
+
%w(羣鳥養羞 蟄蟲坏戸 蟄蟲坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸),
|
1171
|
+
%w(雷始收聲 水始涸 水始涸 水始涸 水始涸 水始涸),
|
1172
|
+
|
1173
|
+
# 195 : 九月
|
1174
|
+
%w(蟄蟲坏戸 鴻雁來賓 鴻雁來賓 棗栗零 鴻雁来 鴻雁来),
|
1175
|
+
%w(陰氣方盛 雀入大水爲蛤 雀入大水爲蛤 蟋蟀在戸 菊花開 菊花開),
|
1176
|
+
%w(陽氣始衰 菊有黄花 菊有黄花 菊花開 蟋蟀在戸 蟋蟀在戸),
|
1177
|
+
%w(水始涸 豺乃祭獸 豺乃祭獸 霜始降 霜始降 霜始降),
|
1178
|
+
%w(鴻雁來賓 草木黄落 草木黄落 蔦楓紅葉 霎時施 霎時施),
|
1179
|
+
%w(雀入水爲蛤 蟄蟲咸俯 蟄蟲咸俯 鶯雛鳴 楓蔦黄 楓蔦黄),
|
1180
|
+
|
1181
|
+
# 225 : 十月
|
1182
|
+
%w(菊有黄花 水始冰 水始冰 山茶始開 山茶始開 山茶始開),
|
1183
|
+
%w(豺祭獣 地始凍 地始凍 地始凍 地始凍 地始凍),
|
1184
|
+
%w(水始冰 野雞入大水爲蜃 野雞入大水爲蜃 霎乃降 金盞香 金盞香),
|
1185
|
+
%w(地始凍 虹藏不見 虹藏不見 虹蔵不見 虹蔵不見 虹蔵不見),
|
1186
|
+
%w(野雞入水爲蜃 天氣上騰地氣下降 天氣上騰地氣下降 樹葉咸落 朔風払葉 朔風払葉),
|
1187
|
+
%w(虹藏不見 閉塞而成冬 閉塞而成冬 橘始黄 橘始黄 橘始黄),
|
1188
|
+
|
1189
|
+
# 255 : 十一月
|
1190
|
+
%w(冰益壯 鶡鳥不鳴 鶡鳥不鳴 閉塞成冬 閉塞成冬 閉塞成冬),
|
1191
|
+
%w(地始坼 虎始交 虎始交 熊蟄穴 熊蟄穴 熊蟄穴),
|
1192
|
+
%w(鶡鳥不鳴 茘挺生 茘挺生 水仙開 鱖魚群 鱖魚群),
|
1193
|
+
%w(虎始交 蚯蚓結 蚯蚓結 乃東生 乃東生 乃東生),
|
1194
|
+
%w(芒始生 麋角解 麋角解 麋角解 麋角解 麋角解),
|
1195
|
+
%w(茘挺生 水泉動 水泉動 雪下出麦 雪下出麦 雪下出麦),
|
1196
|
+
|
1197
|
+
# 285 : 十二月
|
1198
|
+
%w(蚯蚓結 雁北郷 雁北郷 芹乃栄 芹乃栄 芹乃栄),
|
1199
|
+
%w(麋角解 鵲始巣 鵲始巣 風気乃行 水泉動 水泉動),
|
1200
|
+
%w(水泉動 野雞始鴝 野雞始鴝 雉始雊 雉始雊 雉始雊),
|
1201
|
+
%w(雁北郷 雞始乳 雞始乳 款冬華 款冬華 款冬華),
|
1202
|
+
%w(鵲始巣 鷙鳥厲疾 鷙鳥厲疾 水沢腹堅 水沢腹堅 水沢腹堅),
|
1203
|
+
%w(雉始雊 水澤腹堅 水澤腹堅 鶏始乳 鶏始乳 鶏始乳)
|
1204
|
+
]
|
1205
|
+
|
1206
|
+
# 計算結果の修正
|
1207
|
+
# @private
|
1208
|
+
Patch = {
|
1209
|
+
2039054 => [149.0, 1], # 貞観12(0870).07.17 [149.0, 0] 没
|
1210
|
+
2039055 => [150.0, 0], # 貞観12(0870).07.18 [150.0, 1] 処暑
|
1211
|
+
|
1212
|
+
2107233 => [ 29.0, 1], # 天喜05(1057).03.10 [ 29.0, 0] 没
|
1213
|
+
2107234 => [ 30.0, 0], # 天喜05(1057).03.11 [ 30.0, 1] 穀雨
|
1214
|
+
|
1215
|
+
2160437 => [269.0, 0], # 建仁02(1202).10=29 [270.0, 1] 冬至
|
1216
|
+
2160438 => [270.0, 1], # 建仁02(1202).11.01 [271.0, 1]
|
1217
|
+
2160439 => [271.0, 1], # 建仁02(1202).11.02 [272.0, 1]
|
1218
|
+
2160440 => [272.0, 1], # 建仁02(1202).11.03 [272.0, 0] 没
|
1219
|
+
|
1220
|
+
2175412 => [269.0, 1], # 寛元01(1243).11.03 [269.0, 0] 没
|
1221
|
+
2175413 => [270.0, 0], # 寛元01(1243).11.04 [270.0, 1] 冬至
|
1222
|
+
|
1223
|
+
2189200 => [179.0, 0], # 弘安04(1281).07=30 [180.0, 1] 秋分
|
1224
|
+
2189201 => [180.0, 1], # 弘安04(1281).08.01 [181.0, 1]
|
1225
|
+
2189202 => [181.0, 1], # 弘安04(1281).08.02 [181.0, 0] 没
|
1226
|
+
|
1227
|
+
2243577 => [136.0, 0], # 永享02(1430).07.11 [136.0, 1] (立秋の翌日)
|
1228
|
+
2243578 => [136.0, 1], # 永享02(1430).07.12 [137.0, 1]
|
1229
|
+
2243579 => [137.0, 1], # 永享02(1430).07.13 [138.0, 1]
|
1230
|
+
2243580 => [138.0, 1], # 永享02(1430).07.14 [139.0, 1]
|
1231
|
+
2243581 => [139.0, 1], # 永享02(1430).07.15 [140.0, 1]
|
1232
|
+
2243582 => [140.0, 1], # 永享02(1430).07.16 [141.0, 1]
|
1233
|
+
2243583 => [141.0, 1], # 永享02(1430).07.17 [142.0, 1]
|
1234
|
+
2243584 => [142.0, 1], # 永享02(1430).07.18 [143.0, 1]
|
1235
|
+
2243585 => [143.0, 1], # 永享02(1430).07.19 [144.0, 1]
|
1236
|
+
2243586 => [144.0, 1], # 永享02(1430).07.20 [145.0, 1]
|
1237
|
+
2243587 => [145.0, 1], # 永享02(1430).07.21 [146.0, 1]
|
1238
|
+
2243588 => [146.0, 1], # 永享02(1430).07.22 [147.0, 1]
|
1239
|
+
2243589 => [147.0, 1], # 永享02(1430).07.23 [148.0, 1]
|
1240
|
+
2243590 => [148.0, 1], # 永享02(1430).07.24 [149.0, 1]
|
1241
|
+
2243591 => [149.0, 1], # 永享02(1430).07.25 [149.0, 0] 没 (処暑の前日)
|
1242
|
+
|
1243
|
+
2311770 => [ 29.0, 1], # 元和03(1617).03.18 [ 29.0, 0] 没
|
1244
|
+
2311771 => [ 30.0, 0], # 元和03(1617).03.19 [ 30.0, 1] 穀雨
|
1245
|
+
|
1246
|
+
2396062 => [314.0, 0], # 弘化04(1847).12.30 [315.0, 1] 立春 (計算誤差の補正)
|
1247
|
+
2396063 => [315.0, 1], # 弘化05(1848).01.01 [315.0, 0] 没
|
1248
|
+
|
1249
|
+
2397583 => [ 15.0, 1], # 嘉永05(1852).02=15 [ 14.0, 0] 没
|
1250
|
+
2397584 => [ 16.0, 0] # 嘉永05(1852).02=16 [ 15.0, 1] 清明 (計算誤差の補正)
|
1251
|
+
}
|
1252
|
+
|
1253
|
+
class << self
|
1254
|
+
# テスト用の属性
|
1255
|
+
attr_writer :patch
|
1256
|
+
private :patch=
|
1257
|
+
|
1258
|
+
# 日の暦注
|
1259
|
+
# @private
|
1260
|
+
def _day_notes(notes, dates, conditions={})
|
1261
|
+
date = When.when?(dates.o_date.to_cal_date.to_s,
|
1262
|
+
{:frame=>dates.o_date.frame,
|
1263
|
+
:clock=>dates.s_date.frame._time_basis[0]})
|
1264
|
+
patch = (@patch || Patch)[date.to_i] unless dates.o_date.frame.respond_to?(:twin) &&
|
1265
|
+
dates.o_date.frame.twin
|
1266
|
+
longitude, motsu = patch ? patch : dates.cal4note.s_terms.position(date)
|
1267
|
+
|
1268
|
+
# 三伏 - 庚
|
1269
|
+
#
|
1270
|
+
# 初 : 夏至から 20..29
|
1271
|
+
# 仲 : 夏至から 30..39
|
1272
|
+
# 後 : 立秋から 0..9
|
1273
|
+
if !notes['三伏'] && notes['干'].remainder == 6 # 庚
|
1274
|
+
index = dates.range >= 11 ? 1 : 0
|
1275
|
+
if 109 <= longitude && longitude <= 129 # 夏至から
|
1276
|
+
term = dates.cal4note.s_terms.term(date, [-270,360])
|
1277
|
+
diff = dates.s_date.to_i - term.to_i
|
1278
|
+
notes['三伏'] = Notes10[0][index] if 20 <= diff && diff <= 29
|
1279
|
+
notes['三伏'] = Notes10[1][index] if 30 <= diff && diff <= 39
|
1280
|
+
elsif longitude == 135 # 立秋
|
1281
|
+
notes['三伏'] = Notes10[2][index]
|
1282
|
+
elsif 136 <= longitude && longitude <= 144 # 立秋から
|
1283
|
+
term = dates.cal4note.s_terms.term(date, [-225,360])
|
1284
|
+
diff = dates.s_date.to_i - term.to_i
|
1285
|
+
notes['三伏'] = Notes10[2][index] if 0 < diff && diff <= 9
|
1286
|
+
end
|
1287
|
+
end
|
1288
|
+
|
1289
|
+
# 社 - 戊
|
1290
|
+
#
|
1291
|
+
# 春秋分から -5..4
|
1292
|
+
if !notes['社'] && notes['干'].remainder == 4 # 戊
|
1293
|
+
if (longitude + 5) % 180 < 10 # 春秋分の近傍
|
1294
|
+
term = dates.cal4note.s_terms.term(date - When.Duration('P5D'), [0,180])
|
1295
|
+
diff = dates.s_date.to_i - term.to_i
|
1296
|
+
notes['社'] = '社' if -5 <= diff && diff <= 4
|
1297
|
+
end
|
1298
|
+
end
|
1299
|
+
|
1300
|
+
# 臘 - 辰
|
1301
|
+
#
|
1302
|
+
# 大寒から -6..5
|
1303
|
+
if !notes['臘'] && notes['支'].remainder == 4 # 辰
|
1304
|
+
if (longitude - 339) % 360 < 12 # 大寒の近傍
|
1305
|
+
term = dates.cal4note.s_terms.term(date - When.Duration('P6D'), [345,360])
|
1306
|
+
diff = dates.s_date.to_i - term.to_i
|
1307
|
+
notes['臘'] = '臘' if -6 <= diff && diff <= 5
|
1308
|
+
end
|
1309
|
+
end
|
1310
|
+
|
1311
|
+
# 土用事
|
1312
|
+
unless notes['土用事']
|
1313
|
+
_longitude, _motsu = dates.cal4note.s_terms2.instance_of?(self) && dates.cal4note.doyo == 0 ? [longitude, motsu] :
|
1314
|
+
dates.cal4note.s_terms2.position(date, -dates.cal4note.doyo)
|
1315
|
+
if _motsu != 0 && _longitude % 90 == 27
|
1316
|
+
notes['土用事'] =
|
1317
|
+
begin
|
1318
|
+
event_name =
|
1319
|
+
case dates.range
|
1320
|
+
when 0 ; '土用' # 元嘉暦以前
|
1321
|
+
when 1 ; '土王' # 麟徳暦
|
1322
|
+
when 2..10 ; '土用事' # 大衍暦~宣明暦
|
1323
|
+
else ; '土用入' # 貞享暦以降
|
1324
|
+
end
|
1325
|
+
if conditions[:shoyo]
|
1326
|
+
dates.cal4note.s_terms2.event_time(date, event_name, [27-dates.cal4note.doyo, 90])
|
1327
|
+
else
|
1328
|
+
event_name
|
1329
|
+
end
|
1330
|
+
end
|
1331
|
+
end
|
1332
|
+
end
|
1333
|
+
|
1334
|
+
# 入梅 - 壬
|
1335
|
+
#
|
1336
|
+
# 貞享2(1685)~ 芒種から 1..10 日の壬の日
|
1337
|
+
# 元文5(1740)~ 芒種から 0..9 日の壬の日
|
1338
|
+
# 明治9(1876)~ 太陽黄経80度
|
1339
|
+
unless notes['入梅']
|
1340
|
+
if dates.year >= 1876
|
1341
|
+
notes['入梅'] = '入梅' if longitude == 80 && motsu == 1
|
1342
|
+
elsif notes['干'].remainder == 8 # 壬
|
1343
|
+
if (longitude - 75) % 360 <= 10 # 芒種の近傍
|
1344
|
+
term = dates.cal4note.s_terms.term(date - When.Duration('P11D'), [75,360])
|
1345
|
+
diff = dates.s_date.to_i - term.to_i
|
1346
|
+
diff += 1 if dates.year >= 1740
|
1347
|
+
notes['入梅'] = '入梅' if dates.range >= 11 && 1 <= diff && diff <= 10
|
1348
|
+
end
|
1349
|
+
end
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
# 半夏生
|
1353
|
+
#
|
1354
|
+
# 太陽黄経100度
|
1355
|
+
notes['半夏生'] ||= '半夏生' if longitude == 100 && motsu == 1
|
1356
|
+
|
1357
|
+
# 立春を起算日とする雑節
|
1358
|
+
#
|
1359
|
+
unless notes['節分'] && notes['八十八夜'] && notes['二百十日'] && notes['二百廿日']
|
1360
|
+
term = dates.cal4note.s_terms.term(date + When.Duration('P3D'), [-45,360])
|
1361
|
+
case dates.s_date.to_i - term.to_i
|
1362
|
+
when -1 ; notes['節分'] ||= '節分'
|
1363
|
+
when 87 ; notes['八十八夜'] ||= '八十八夜'
|
1364
|
+
when 209 ; notes['二百十日'] ||= '二百十日'
|
1365
|
+
when 219 ; notes['二百廿日'] ||= '二百廿日'
|
1366
|
+
end
|
1367
|
+
end
|
1368
|
+
|
1369
|
+
# 日食
|
1370
|
+
unless notes['日食'] && notes['小字注']
|
1371
|
+
level = (conditions[:solar_eclipse]||0).to_i
|
1372
|
+
if level == -1
|
1373
|
+
note = nil
|
1374
|
+
else
|
1375
|
+
key = dates.m_date.to_s[/\(.+\z/]
|
1376
|
+
if key
|
1377
|
+
note, = Japanese::Eclipse::Eclipses[key.gsub(/[()]/,'')]
|
1378
|
+
elsif dates.o_date.location &&
|
1379
|
+
dates.o_date.frame.kind_of?(When::CalendarTypes::Christian)
|
1380
|
+
info = dates.o_date.location.solar_eclipse(date..date)
|
1381
|
+
note = '日' + Japanese::Eclipse.eclipse_summary(info[0]) unless info.empty?
|
1382
|
+
end
|
1383
|
+
if note
|
1384
|
+
note.sub!(/\*.*\z/, '')
|
1385
|
+
note = nil unless /日/ =~ note
|
1386
|
+
note = nil if level[0] == 1 && /夜/ =~ note
|
1387
|
+
note = nil if level[1] == 1 && /^\(/ =~ note
|
1388
|
+
end
|
1389
|
+
end
|
1390
|
+
notes['日食'] = note
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
# 没
|
1394
|
+
if motsu == 0
|
1395
|
+
notes['没'] = dates.range < 11 ? '没' : nil
|
1396
|
+
return notes unless patch
|
1397
|
+
else
|
1398
|
+
notes['没'] = nil
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
# 廿四節気
|
1402
|
+
div, mod = longitude.divmod(15)
|
1403
|
+
if mod == 0
|
1404
|
+
note = (div - 21) % 24
|
1405
|
+
div, mod = note.divmod(2)
|
1406
|
+
notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
|
1407
|
+
notes['廿四節気'] ||=
|
1408
|
+
begin
|
1409
|
+
residue = When.Resource(dates.range == 1 ? '_co:Common?V=0618' : '_co:Common')['二十四節気::*'][(note-3) % 24]
|
1410
|
+
if conditions[:shoyo]
|
1411
|
+
dates.cal4note.s_terms.event_time(date, residue.label, [0,15])
|
1412
|
+
else
|
1413
|
+
residue
|
1414
|
+
end
|
1415
|
+
end
|
1416
|
+
end
|
1417
|
+
|
1418
|
+
# 七十二候
|
1419
|
+
div, mod = longitude.divmod(5)
|
1420
|
+
notes['七十二候'] ||= mod == 0 ? Notes72[(div - 63) % 72][dates.index_s] : nil
|
1421
|
+
|
1422
|
+
# 往亡
|
1423
|
+
unless notes['往亡'] && notes['神吉'] && notes['雑事吉']
|
1424
|
+
month = dates.s_date.cal_date[-2] - 1
|
1425
|
+
day = dates.s_date.cal_date[-1] - 1
|
1426
|
+
div, mod = month.divmod(3)
|
1427
|
+
deg = (div+7)*(mod+1) + month * 30 + 314
|
1428
|
+
notes['往亡'] = (dates.range < 11 ? (deg - longitude) % 360 == 0 : # 没を含まない
|
1429
|
+
(deg - 315 ) % 30 == day)? '往亡' : nil # 没を含む
|
1430
|
+
end
|
1431
|
+
|
1432
|
+
# 伏龍
|
1433
|
+
notes['伏龍'] ||= {
|
1434
|
+
315 => '庭内去堂', 15 => '門内百日', 115 => '東垣六十日',
|
1435
|
+
175 => '四隅百日', 275 => '竈内四十日'
|
1436
|
+
}[longitude]
|
1437
|
+
|
1438
|
+
# 六十卦
|
1439
|
+
div, mod = longitude.divmod(30)
|
1440
|
+
notes['六十卦'] ||= mod == 15 ? Notes60_A[(div - 10) % 12] : nil
|
1441
|
+
div, mod = longitude.divmod(6)
|
1442
|
+
notes['六十卦'] ||= mod == 0 ? Notes60_B[(div - 53) % 60] : nil
|
1443
|
+
|
1444
|
+
# 彼岸
|
1445
|
+
unless notes['彼岸']
|
1446
|
+
if dates.range < 11
|
1447
|
+
notes['彼岸'] = '彼岸' if longitude % 180 == 2 # 宣明暦以前(没を除いて3日後)
|
1448
|
+
else
|
1449
|
+
term = dates.cal4note.s_terms.term(date - When.Duration('P7D'), [0,180]) # 近傍の春秋分
|
1450
|
+
case dates.s_date.to_i - term.to_i
|
1451
|
+
when 2 ; notes['彼岸'] = '彼岸' if dates.range == 11 # 貞享暦(没を含めて3日後)
|
1452
|
+
when -5 ; notes['彼岸'] = '彼岸' if longitude > 180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(春-6日前))
|
1453
|
+
when -1 ; notes['彼岸'] = '彼岸' if longitude <= 180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(秋-2日前)
|
1454
|
+
when -3 ; notes['彼岸'] = '彼岸' if dates.year >= 1844 # 天保暦以降(秋-4日前)
|
1455
|
+
end
|
1456
|
+
end
|
1457
|
+
notes['彼岸'] = nil unless notes['彼岸'] == '彼岸'
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
notes
|
1461
|
+
end
|
1462
|
+
end
|
1463
|
+
end
|
1464
|
+
|
1465
|
+
#
|
1466
|
+
# 太陽黄経による暦注
|
1467
|
+
#
|
1468
|
+
class Japanese::SolarTermsRevised < Japanese::SolarTerms
|
1469
|
+
|
1470
|
+
# 土用策
|
1471
|
+
DoyoShift = When::TM::PeriodDuration.new([0,0,12.1747411317])
|
1472
|
+
|
1473
|
+
# 日付に対応する座標
|
1474
|
+
#
|
1475
|
+
# @param [When::TM::TemporalPosition] date 日付
|
1476
|
+
# @param [Numeric] delta 周期の補正(土用の時刻の補正に使用,デフォルト 0)
|
1477
|
+
#
|
1478
|
+
# @return [Array<Integer>] Array< Integer, 0 or 1 or 2 >
|
1479
|
+
#
|
1480
|
+
# [Integer] 対応する座標
|
1481
|
+
#
|
1482
|
+
# [0 or 1 or 2] 座標の進み(0 なら 没, 2 なら滅)
|
1483
|
+
#
|
1484
|
+
def position(date, delta=0)
|
1485
|
+
return super if date.most_significant_coordinate >= 1869
|
1486
|
+
date = date.floor
|
1487
|
+
p0, p1 = [date, date.succ].map {|d| (30.0 * @formula.time_to_cn(d-DoyoShift) - @margin + 12).floor}
|
1488
|
+
[p1 % @den, p1 - p0]
|
1489
|
+
end
|
1490
|
+
|
1491
|
+
#
|
1492
|
+
# イベント日付(時刻付)
|
1493
|
+
#
|
1494
|
+
# @private
|
1495
|
+
def event_time(date, event_name, event)
|
1496
|
+
return super if date.most_significant_coordinate >= 1869
|
1497
|
+
etime = term(date + When.Duration('P3D'), [-15,30], When::SYSTEM) + DoyoShift
|
1498
|
+
if formula.respond_to?(:year_length) && formula.denominator && formula.denominator < 100000
|
1499
|
+
fraction = etime.clk_time.local_time
|
1500
|
+
fraction += When::TM::Duration::DAY * (etime.to_i - date.to_i)
|
1501
|
+
fraction = (fraction / When::TM::Duration::DAY * formula.denominator * 1000 + 0.5).floor / 1000.0
|
1502
|
+
fraction = fraction.to_i if fraction == fraction.to_i
|
1503
|
+
event_name + "(#{fraction}/#{formula.denominator})"
|
1504
|
+
else
|
1505
|
+
etime.events = [event_name]
|
1506
|
+
etime
|
1507
|
+
end
|
1508
|
+
end
|
1509
|
+
end
|
1510
|
+
end
|