when_exe 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. data/bin/locales.rb +2 -2
  2. data/bin/when.rb +2 -2
  3. data/lib/when_exe.rb +161 -55
  4. data/lib/when_exe/basictypes.rb +34 -26
  5. data/lib/when_exe/calendarnote.rb +654 -0
  6. data/lib/when_exe/calendartypes.rb +49 -474
  7. data/lib/when_exe/coordinates.rb +141 -34
  8. data/lib/when_exe/core/compatibility.rb +22 -2
  9. data/lib/when_exe/core/extension.rb +47 -3
  10. data/lib/when_exe/ephemeris.rb +82 -109
  11. data/lib/when_exe/googlecalendar.rb +1 -1
  12. data/lib/when_exe/icalendar.rb +26 -14
  13. data/lib/when_exe/inspect.rb +82 -68
  14. data/lib/when_exe/locales/af.rb +1 -1
  15. data/lib/when_exe/locales/ar.rb +1 -1
  16. data/lib/when_exe/locales/az.rb +1 -1
  17. data/lib/when_exe/locales/bg.rb +1 -1
  18. data/lib/when_exe/locales/bn.rb +1 -1
  19. data/lib/when_exe/locales/bs.rb +1 -1
  20. data/lib/when_exe/locales/ca.rb +1 -1
  21. data/lib/when_exe/locales/cs.rb +1 -1
  22. data/lib/when_exe/locales/cy.rb +1 -1
  23. data/lib/when_exe/locales/da.rb +1 -1
  24. data/lib/when_exe/locales/de.rb +1 -1
  25. data/lib/when_exe/locales/de_AT.rb +1 -1
  26. data/lib/when_exe/locales/de_CH.rb +1 -1
  27. data/lib/when_exe/locales/el.rb +1 -1
  28. data/lib/when_exe/locales/en.rb +1 -1
  29. data/lib/when_exe/locales/en_AU.rb +1 -1
  30. data/lib/when_exe/locales/en_CA.rb +1 -1
  31. data/lib/when_exe/locales/en_GB.rb +1 -1
  32. data/lib/when_exe/locales/en_IE.rb +1 -1
  33. data/lib/when_exe/locales/en_IN.rb +1 -1
  34. data/lib/when_exe/locales/en_NZ.rb +1 -1
  35. data/lib/when_exe/locales/en_US.rb +1 -1
  36. data/lib/when_exe/locales/eo.rb +1 -1
  37. data/lib/when_exe/locales/es.rb +1 -1
  38. data/lib/when_exe/locales/es_419.rb +1 -1
  39. data/lib/when_exe/locales/es_AR.rb +1 -1
  40. data/lib/when_exe/locales/es_CL.rb +1 -1
  41. data/lib/when_exe/locales/es_CO.rb +1 -1
  42. data/lib/when_exe/locales/es_CR.rb +1 -1
  43. data/lib/when_exe/locales/es_EC.rb +1 -1
  44. data/lib/when_exe/locales/es_MX.rb +1 -1
  45. data/lib/when_exe/locales/es_PA.rb +1 -1
  46. data/lib/when_exe/locales/es_PE.rb +1 -1
  47. data/lib/when_exe/locales/es_VE.rb +1 -1
  48. data/lib/when_exe/locales/et.rb +1 -1
  49. data/lib/when_exe/locales/eu.rb +1 -1
  50. data/lib/when_exe/locales/fa.rb +1 -1
  51. data/lib/when_exe/locales/fi.rb +1 -1
  52. data/lib/when_exe/locales/fr.rb +1 -1
  53. data/lib/when_exe/locales/fr_CA.rb +1 -1
  54. data/lib/when_exe/locales/fr_CH.rb +1 -1
  55. data/lib/when_exe/locales/gl.rb +1 -1
  56. data/lib/when_exe/locales/he.rb +1 -1
  57. data/lib/when_exe/locales/hi.rb +1 -1
  58. data/lib/when_exe/locales/hi_IN.rb +1 -1
  59. data/lib/when_exe/locales/hr.rb +1 -1
  60. data/lib/when_exe/locales/hu.rb +1 -1
  61. data/lib/when_exe/locales/id.rb +1 -1
  62. data/lib/when_exe/locales/is.rb +1 -1
  63. data/lib/when_exe/locales/it.rb +1 -1
  64. data/lib/when_exe/locales/it_CH.rb +1 -1
  65. data/lib/when_exe/locales/ja.rb +1 -1
  66. data/lib/when_exe/locales/kn.rb +1 -1
  67. data/lib/when_exe/locales/ko.rb +1 -1
  68. data/lib/when_exe/locales/lo.rb +1 -1
  69. data/lib/when_exe/locales/locales.rb +1 -1
  70. data/lib/when_exe/locales/lt.rb +1 -1
  71. data/lib/when_exe/locales/lv.rb +1 -1
  72. data/lib/when_exe/locales/mk.rb +1 -1
  73. data/lib/when_exe/locales/mn.rb +1 -1
  74. data/lib/when_exe/locales/ms.rb +1 -1
  75. data/lib/when_exe/locales/nb.rb +1 -1
  76. data/lib/when_exe/locales/ne.rb +1 -1
  77. data/lib/when_exe/locales/nl.rb +1 -1
  78. data/lib/when_exe/locales/nn.rb +1 -1
  79. data/lib/when_exe/locales/or.rb +1 -1
  80. data/lib/when_exe/locales/pl.rb +1 -1
  81. data/lib/when_exe/locales/pt.rb +1 -1
  82. data/lib/when_exe/locales/pt_BR.rb +1 -1
  83. data/lib/when_exe/locales/rm.rb +1 -1
  84. data/lib/when_exe/locales/ro.rb +1 -1
  85. data/lib/when_exe/locales/ru.rb +1 -1
  86. data/lib/when_exe/locales/sk.rb +1 -1
  87. data/lib/when_exe/locales/sl.rb +1 -1
  88. data/lib/when_exe/locales/sr.rb +1 -1
  89. data/lib/when_exe/locales/sv.rb +1 -1
  90. data/lib/when_exe/locales/sw.rb +1 -1
  91. data/lib/when_exe/locales/th.rb +1 -1
  92. data/lib/when_exe/locales/tl.rb +1 -1
  93. data/lib/when_exe/locales/tr.rb +1 -1
  94. data/lib/when_exe/locales/uk.rb +1 -1
  95. data/lib/when_exe/locales/ur.rb +1 -1
  96. data/lib/when_exe/locales/uz.rb +1 -1
  97. data/lib/when_exe/locales/vi.rb +1 -1
  98. data/lib/when_exe/locales/wo.rb +1 -1
  99. data/lib/when_exe/locales/zh_CN.rb +1 -1
  100. data/lib/when_exe/locales/zh_HK.rb +1 -1
  101. data/lib/when_exe/locales/zh_TW.rb +1 -1
  102. data/lib/when_exe/mini_application.rb +6 -2
  103. data/lib/when_exe/parts/enumerator.rb +13 -8
  104. data/lib/when_exe/parts/geometric_complex.rb +3 -5
  105. data/lib/when_exe/parts/locale.rb +185 -28
  106. data/lib/when_exe/parts/method_cash.rb +20 -10
  107. data/lib/when_exe/parts/resource.rb +154 -76
  108. data/lib/when_exe/parts/timezone.rb +11 -6
  109. data/lib/when_exe/region/bahai.rb +2 -2
  110. data/lib/when_exe/region/balinese.rb +296 -296
  111. data/lib/when_exe/region/chinese.rb +564 -564
  112. data/lib/when_exe/region/chinese_calendar.rb +5 -1
  113. data/lib/when_exe/region/chinese_epoch.rb +47 -102
  114. data/lib/when_exe/region/chinese_twin.rb +798 -0
  115. data/lib/when_exe/region/christian.rb +314 -338
  116. data/lib/when_exe/region/coptic.rb +88 -0
  117. data/lib/when_exe/region/ephemeric_notes.rb +322 -307
  118. data/lib/when_exe/region/french.rb +2 -2
  119. data/lib/when_exe/region/indian.rb +361 -272
  120. data/lib/when_exe/region/iranian.rb +2 -2
  121. data/lib/when_exe/region/islamic.rb +3 -3
  122. data/lib/when_exe/region/japanese.rb +1 -1
  123. data/lib/when_exe/region/japanese_notes.rb +165 -103
  124. data/lib/when_exe/region/japanese_residues.rb +56 -55
  125. data/lib/when_exe/region/japanese_twin.rb +228 -0
  126. data/lib/when_exe/region/javanese.rb +2 -2
  127. data/lib/when_exe/region/jewish.rb +2 -2
  128. data/lib/when_exe/region/korean.rb +4 -4
  129. data/lib/when_exe/region/m17n.rb +19 -19
  130. data/lib/when_exe/region/martian.rb +21 -9
  131. data/lib/when_exe/region/mayan.rb +19 -11
  132. data/lib/when_exe/region/moon.rb +7 -7
  133. data/lib/when_exe/region/nihon_shoki.rb +7 -7
  134. data/lib/when_exe/region/roman.rb +100 -100
  135. data/lib/when_exe/region/shire.rb +130 -147
  136. data/lib/when_exe/region/thai.rb +2 -2
  137. data/lib/when_exe/region/tibetan.rb +2 -2
  138. data/lib/when_exe/region/vietnamese.rb +383 -114
  139. data/lib/when_exe/region/world.rb +112 -129
  140. data/lib/when_exe/timestandard.rb +12 -1
  141. data/lib/when_exe/tmposition.rb +28 -14
  142. data/lib/when_exe/tmreference.rb +96 -93
  143. data/lib/when_exe/version.rb +1 -1
  144. data/test/examples/Terms.m17n +2 -2
  145. data/test/examples/sample.json +16 -0
  146. data/test/examples/sample.xml +1 -1
  147. data/test/test.rb +4 -0
  148. data/test/test/basictypes.rb +2 -2
  149. data/test/test/calendarnote.rb +69 -0
  150. data/test/test/calendartypes.rb +41 -1
  151. data/test/test/coordinates.rb +12 -1
  152. data/test/test/ephemeris.rb +13 -66
  153. data/test/test/icalendar.rb +3 -3
  154. data/test/test/inspect.rb +1 -1
  155. data/test/test/parts.rb +7 -4
  156. data/test/test/region/chinese.rb +45 -0
  157. data/test/test/region/coptic.rb +27 -0
  158. data/test/test/region/indian.rb +1 -1
  159. data/test/test/region/japanese.rb +4 -4
  160. data/test/test/region/jewish.rb +1 -1
  161. data/test/test/region/m17n.rb +7 -5
  162. data/test/test/region/residue.rb +2 -2
  163. data/test/test/region/vietnamese.rb +102 -0
  164. data/test/test/timestandard.rb +81 -0
  165. data/test/test/tmposition.rb +1 -1
  166. data/test/test/tmreference.rb +1 -1
  167. data/when_exe.gemspec +2 -2
  168. metadata +16 -7
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2011-2013 Takashi SUGA
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -11,7 +11,7 @@ module When
11
11
  IranianTerms = [self, [
12
12
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/, ar=http://ar.wikipedia.org/wiki/]",
13
13
  "locale:[=en:, ja=ja:, ar=ar:, alias=ja:]",
14
- "names:[IranianTerms]",
14
+ "names:[IranianTerms=]",
15
15
  "[SolarHejri=en:Iranian_calendars#Modern_calendar_.28Solar_Hejri.29, ヘジラ太陽暦=ja:%%<イラン暦>]",
16
16
 
17
17
  [self,
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2011-2013 Takashi SUGA
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -11,7 +11,7 @@ module When
11
11
  IslamicTerms = [self, [
12
12
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/, ar=http://ar.wikipedia.org/wiki/]",
13
13
  "locale:[=en:, ja=ja:, ar=ar:, alias]",
14
- "names:[IslamicTerms]",
14
+ "names:[IslamicTerms=]",
15
15
  "[TabularIslamic=en:Islamic_calendar, イスラーム暦=ja:ヒジュラ暦]",
16
16
  "[EphemerisBasedIslamic=en:Islamic_calendar, イスラーム暦=ja:ヒジュラ暦]",
17
17
 
@@ -38,7 +38,7 @@ module When
38
38
  # ヒジュラ紀元
39
39
  Hijra = [self, [
40
40
  "namespace:[en=http://en.wikipedia.org/wiki/]",
41
- "area:[Islamic]",
41
+ "area:[Islamic=]",
42
42
  ["[AfterHijra=en:Islamic_calendar,*alias:AH]1.1.1", "Calendar Epoch", "01-01-01^TabularIslamic"],
43
43
  ]]
44
44
  end
@@ -12,7 +12,7 @@ module When
12
12
  JapaneseTerms = [self, [
13
13
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
14
14
  "locale:[=en:, ja=ja:, alias]",
15
- "names:[JapaneseTerms]",
15
+ "names:[JapaneseTerms=]",
16
16
 
17
17
  [self,
18
18
  "names:[Month, 月=ja:%%<月_(暦)>]",
@@ -8,61 +8,7 @@
8
8
  require 'when_exe/region/ephemeric_notes'
9
9
  require 'when_exe/region/japanese_residues'
10
10
 
11
-
12
- class When::TM::CalendarEra
13
-
14
- kyoto = '?time_basis=(LAT?long=135.4520E&lat=35.0117N)'
15
- tokyo = '?time_basis=+09:18:59'
16
- jst = '?time_basis=+09:00&intercalary_span=3'
17
-
18
- # Japanese Luni-Solar Calendar Series for JapaneseNote
19
- JapaneseLuniSolarSeries = [self, [
20
- 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
21
- 'locale:[=en:, ja=ja:, alias]',
22
- 'area:[JapaneseLuniSolarSeries=, 日本の暦月=]',
23
- ['[平朔儀鳳暦=]-660.01.01', '@F', "-660-01-01^Chinese::平朔儀鳳暦"],
24
- ['[元嘉暦]454.01.01', '@CR', "454-01-01^Chinese::元嘉暦"],
25
- ['[儀鳳暦]697.01.01', '@CR', "697-01-01^Chinese::麟徳暦"],
26
- ['[大衍暦]764.01.01', '@CR', "764-01-01^Chinese::大衍暦"],
27
- ['[五紀暦]858.01.01', '@CR', "858-01-01^Chinese::五紀暦"],
28
- ['[宣明暦]862.01.01', '@CR', "862-01-01^Chinese::宣明暦"],
29
- ['[前貞享暦=]1685.01.01', '@CR', "1685-01-01^ChineseLuniSolar#{kyoto}"],
30
- ['[貞享暦]1687.01.01', '@CR', "1687-01-01^ChineseLuniSolar#{kyoto}"],
31
- ['[貞享補暦A=]1753.01.01', '@CR', "1753-01-01^ChineseLuniSolar#{kyoto}"],
32
- ['[貞享補暦B=]1754.01.01', '@CR', "1754-01-01^ChineseLuniSolar#{kyoto}"],
33
- ['[宝暦暦]1755.01.01', '@CR', "1755-01-01^ChineseLuniSolar#{kyoto}"],
34
- ['[修正宝暦暦=]1771.01.01', '@CR', "1771-01-01^ChineseLuniSolar#{kyoto}"],
35
- ['[寛政暦]1798.01.01', '@CR', "1798-01-01^ChineseLuniSolar#{kyoto}"],
36
- ['[天保暦]1844.01.01', '@CR', "1844-01-01^ChineseLuniSolar#{kyoto}"], # 京都平均太陽時
37
- ['[JLSA=,旧暦A=]1872.12.03','@CR', "1872-12-03^ChineseLuniSolar#{tokyo}"], # 東京平均太陽時
38
- ['[JLSB=,旧暦B=]1887.11.18','@CR', "1887-11-18^ChineseLuniSolar#{jst}"] # 日本標準時
39
- ]]
40
-
41
- # Japanese Solar Calendar Series for JapaneseNote
42
- JapaneseSolarSeries = [self, [
43
- 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
44
- 'locale:[=en:, ja=ja:, alias]',
45
- 'area:[JapaneseSolarSeries=, 日本の節月=]',
46
- ['[平朔儀鳳暦=]-661.01.01', '@F', "-661-01-01^Chinese::平朔儀鳳暦(節月)"], # 年の始めに遡って開始(実際は12.22)
47
- ['[元嘉暦]454.01.12', '@CR', "454-01-12^Chinese::元嘉暦(節月)"],
48
- ['[儀鳳暦]696.12.27', '@CR', "696-12-27^Chinese::麟徳暦(節月)"],
49
- ['[大衍暦]764.01.06', '@CR', "764-01-06^Chinese::大衍暦(節月)"],
50
- ['[五紀暦]857.12.19', '@CR', "857-12-19^Chinese::五紀暦(節月)"],
51
- ['[宣明暦]862.01.03', '@CR', "862-01-03^Chinese::宣明暦(節月)"],
52
- ['[前貞享暦=]1685.01.01', '@CR', "1685-01-01^Chinese::前貞享暦(節月)"],
53
- ['[貞享暦]1687.01.08', '@CR', "1687-01-08^Chinese::貞享暦(節月)"],
54
- ['[貞享補暦A=]1752.12.30', '@CR', "1752-12-30^Chinese::貞享補暦A(節月)"],
55
- ['[貞享補暦B=]1753.12.19', '@CR', "1753-12-19^Chinese::貞享補暦B(節月)"],
56
- ['[宝暦暦]1755.01.07', '@CR', "1755-01-07^Chinese::宝暦暦(節月)"],
57
- ['[修正宝暦暦=]1771.01.11', '@CR', "1771-01-11^Chinese::修正宝暦暦(節月)"],
58
- ['[寛政暦]1798.01.12', '@CR', "1798-01-12^Chinese::寛政暦(節月)"],
59
- ['[天保暦]1844.01.14', '@CR', "1844-01-14^ChineseSolar#{kyoto}"], # 京都平均太陽時
60
- ['[JSA=,旧暦A=]1872.11.26', '@CR', "1872-11-26^ChineseSolar#{tokyo}"], # 東京平均太陽時
61
- ['[JSB=,旧暦B=]1887.11.26', '@CR', "1887-11-26^ChineseSolar#{jst}"] # 日本標準時
62
- ]]
63
- end
64
-
65
- class When::CalendarTypes::CalendarNote
11
+ class When::CalendarNote
66
12
 
67
13
  #
68
14
  # 日本暦注
@@ -84,7 +30,7 @@ class When::CalendarTypes::CalendarNote
84
30
  # 日本暦注の要素
85
31
  #
86
32
  # @private
87
- class Note < When::CalendarTypes::CalendarNote::NoteElement
33
+ class Note < When::CalendarNote::NoteElement
88
34
  end
89
35
 
90
36
  #
@@ -92,7 +38,7 @@ class When::CalendarTypes::CalendarNote
92
38
  #
93
39
  NoteObjects = [When::BasicTypes::M17n, [
94
40
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
95
- "locale:[=ja:]",
41
+ "locale:[=ja:, en=en:]",
96
42
  "names:[日本暦注]",
97
43
 
98
44
  # 年の暦注 ----------------------------
@@ -136,7 +82,7 @@ class When::CalendarTypes::CalendarNote
136
82
  # 月の暦注 ----------------------------
137
83
  [When::BasicTypes::M17n,
138
84
  "names:[月]",
139
- [Note, 0xFFFF, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>]",
85
+ [Note, 0xFFFF, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>, Month]",
140
86
  'position:月建'], # 0: 月の和名
141
87
  # [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 干支
142
88
  # [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
@@ -203,7 +149,7 @@ class When::CalendarTypes::CalendarNote
203
149
 
204
150
  [Note, 0x07F8, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 22: 七曜 廿七宿
205
151
  [Note, 0x07F8, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 23: 七曜 廿七宿
206
- [Note, 0x07F8, "label:[羅刹=]", 'position:中段 中段 上段 上段'], # 24: 七曜 廿七宿
152
+ [Note, 0x07F8, "label:[羅刹=]", 'position:上段 上段 上段 上段'], # 24: 七曜 廿七宿
207
153
 
208
154
  [Note, 0x3FFC, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
209
155
  'position:上段 上段 上段 上段', 'suffix:-'], # 25: 干支 節年
@@ -213,11 +159,11 @@ class When::CalendarTypes::CalendarNote
213
159
  'position:上段 上段 上段 上段', 'suffix:-'], # 27: 干支
214
160
  [Note, 0x3FFC, "label:[歳下食=ja:%%<暦注下段>#%.<歳下食>]",
215
161
  'position:上段 上段 上段 上段'], # 28: 干支 節年
216
- [Note, 0x3FFC, "label:[忌遠行=]", 'position:上段 中段 上段 上段'], # 29: 支 節月
217
- [Note, 0x3FFC, "label:[忌夜行=]", 'position:上段 中段 上段 上段'], # 30: 支 節月
162
+ [Note, 0x3FFC, "label:[忌遠行=]", 'position:上段 上段 上段 上段'], # 29: 支 節月
163
+ [Note, 0x3FFC, "label:[忌夜行=]", 'position:上段 上段 上段 上段'], # 30: 支 節月
218
164
  [Note, 0x3FFC, "label:[下食時=ja:%%<暦注下段>#%.<時下食>]",
219
165
  'position:上段 上段 上段 上段', 'suffix:-'], # 31: 支 節月 貞享暦で一部廃止
220
- [Note, 0x3FFC, "label:[天間=]", 'position:上段 中段 上段 中段上'], # 32: 干支 節月
166
+ [Note, 0x3FFC, "label:[天間=]", 'position:上段 上段 上段 中段上'], # 32: 干支 節月
221
167
  [Note, 0x3FFC, "label:[不視病=]", 'position:上段 上段 上段 上段'], # 33: 干
222
168
  [Note, 0x3FFC, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 34: 干
223
169
  [Note, 0x3FFC, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 35: 支
@@ -229,13 +175,13 @@ class When::CalendarTypes::CalendarNote
229
175
  [Note, 0x3FFC, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 40: 支 没滅凶会日×
230
176
  [Note, 0x3FFD, "label:[臘=ja:%%<臘日>]",
231
177
  'position:中段 中段 中段 中段', 'suffix:日'], # 41: 支 太陽黄経
232
- [Note, 0x3FFC, "label:[伐=]", 'position:上段 中段 中段 中段上', 'suffix:日'], # 42: 干支
178
+ [Note, 0x3FFC, "label:[伐=]", 'position:中段 中段 中段 中段上', 'suffix:日'], # 42: 干支
233
179
  [Note, 0x3FFC, "label:[五墓=ja:%%<暦注下段>#%.<五墓日>]",
234
- 'position:上段 上段 中段 中段下', 'suffix:日'], # 43: 干支
235
- [Note, 0x3FFC, "label:[六蛇=]", 'position:上段 上段 中段 中段上'], # 44: 干支 節月
236
- [Note, 0x3FFC, "label:[七鳥=]", 'position:上段 上段 中段 中段上'], # 45: 干支 節月
237
- [Note, 0x3FFC, "label:[八龍=]", 'position:上段 上段 中段 中段上'], # 46: 干支 節月
238
- [Note, 0x3FFC, "label:[九虎=]", 'position:上段 中段 中段 中段上'], # 47: 干支 節月
180
+ 'position:中段 中段 中段 中段下', 'suffix:日'], # 43: 干支
181
+ [Note, 0x3FFC, "label:[六蛇=]", 'position:中段 中段 中段 中段上'], # 44: 干支 節月
182
+ [Note, 0x3FFC, "label:[七鳥=]", 'position:中段 中段 中段 中段上'], # 45: 干支 節月
183
+ [Note, 0x3FFC, "label:[八龍=]", 'position:中段 中段 中段 中段上'], # 46: 干支 節月
184
+ [Note, 0x3FFC, "label:[九虎=]", 'position:中段 中段 中段 中段上'], # 47: 干支 節月
239
185
  [Note, 0x07FF, "label:[没=ja:%%<没日>]",
240
186
  'position:中段 中段 中段 中段', 'suffix:日'], # 48: 太陽黄経
241
187
  [Note, 0xFFF8, "label:[日食]", 'position:中段 中段 中段 中段'], # 49: 日食表
@@ -323,6 +269,7 @@ class When::CalendarTypes::CalendarNote
323
269
  'position:上段 上段 中段 中段上', 'suffix:日'], #100: 干支 節月
324
270
  [Note, 0x3FFF, "label:[雑事吉=]", 'position:雑事吉'], #101: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
325
271
  [Note, 0x07FF, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'],#102: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
272
+ [Note, 0x3800, "label:[鬼宿]", 'position:仮名暦'], #103: 廿八宿
326
273
  ]
327
274
  ]]
328
275
 
@@ -468,6 +415,7 @@ class When::CalendarTypes::CalendarNote
468
415
  cal4note = Cal4Note.new(date.frame, date.frame.twin)
469
416
  @range =
470
417
  case cal4note.l_calendar.formula[-1]
418
+ when When::Ephemeris::ChineseTrueLunation::JujiMethods ; 11 # 江戸時代の暦
471
419
  when When::Ephemeris::ChineseTrueLunation
472
420
  date.frame.twin =~ /戊寅|麟徳/ ? 1 : 10 # 唐代定朔暦(儀鳳暦 or 宣明暦)
473
421
  when When::Ephemeris::MeanLunation ; 0 # 唐代以前平朔暦(元嘉暦)
@@ -487,7 +435,7 @@ class When::CalendarTypes::CalendarNote
487
435
  @cal4note = cal4note
488
436
  @o_date = date
489
437
  @l_date = @cal4note.l_calendar ^ date
490
- @m_date = date.frame.kind_of?(When::CalendarTypes::Julian) ? @l_date : @o_date
438
+ @m_date = date.frame.kind_of?(When::CalendarTypes::Christian) ? @l_date : @o_date
491
439
  @s_date = @cal4note.s_calendar ^ date
492
440
  end
493
441
  end
@@ -499,7 +447,7 @@ class When::CalendarTypes::CalendarNote
499
447
  # @param [When::TM::TemporalPosition] date 暦注を計算する日時
500
448
  # (date が When::TM::TemporalPosition でない場合、When::TM::TemporalPosition に変換して使用する)
501
449
  # @param [Hash] options
502
- # :indices, :notes およびその他のキー => {When::CalendarTypes::CalendarNote#notes} を参照
450
+ # :indices, :notes およびその他のキー => {When::CalendarNote#notes} を参照
503
451
  #
504
452
  # @return [Hash] :notes が String の場合
505
453
  # @return [Array<Hash>] 上記に該当せず、:indices が Integer の場合
@@ -510,18 +458,91 @@ class When::CalendarTypes::CalendarNote
510
458
  # :position => 具注暦でのその暦注の配置場所(String)
511
459
  #
512
460
  def notes(date, options={})
513
- dates, indices, notes, conditions, options = _parse_note(date, options)
514
- _result(indices.map {|i|
461
+ dates, indices, notes, persistence, conditions, options = _parse_note(date, options)
462
+ Notes.register(indices.map {|i|
515
463
  next [] unless i <= dates.precision
516
464
  send(NoteMethods[i-1], dates, notes[i-1], conditions)
517
- }, options)
465
+ }, persistence, date.to_i)
466
+ end
467
+
468
+ # 太陽の位置 => 日時
469
+ #
470
+ # @param [When::TM::TemporalPosition] date 探す基準とする日時
471
+ # @param [Array<Numeric>] parameter 太陽の位置の分子と分母( num, den)
472
+ #
473
+ # num 分子 (デフォルト 0 : 基準日時直後の春分)
474
+ #
475
+ # den 分母 (デフォルト 360 : 検索範囲の長さ)
476
+ #
477
+ # @param [String] parameter 太陽の位置の分子と分母("#{ num }/#{ den }" の形式)
478
+ # @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
479
+ # @param [When::TM::Calendar] frame 暦法(ダミー)
480
+ #
481
+ # @return [When::TM::CalDate] date またはその直後に太陽の位置が指定の値になる日時
482
+ #
483
+ def term(date, parameter=nil, precision=date.precision, frame=nil)
484
+ dates = _to_date_for_note(date)
485
+ result = dates.cal4note.s_terms.term(date, parameter)
486
+ patch = SolarTerms::Patch[result.to_i]
487
+ return result unless patch
488
+ num, den = parameter.kind_of?(String) ? parameter.split(/\//, 2) : parameter
489
+ num = (num || 0).to_f
490
+ den = (den || 360).to_f
491
+ diff = (num - patch[0] + 1) % den - 1
492
+ return result if diff == 0
493
+ patched = result + When::DurationP1D * diff
494
+ result.cal_date[0..-2] = patched.cal_date[0..-2]
495
+ result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
496
+ result
497
+ end
498
+
499
+ # 月の位相 => 日時
500
+ #
501
+ # @param [When::TM::TemporalPosition] date 探す基準とする日時
502
+ # @param [Array<Numeric>] parameter 月の位相の分子と分母( num, den)
503
+ #
504
+ # num 分子 (デフォルト 0 : 基準日時直後の朔)
505
+ #
506
+ # den 分母 (デフォルト 30 : 検索範囲の長さ)
507
+ #
508
+ # @param [String] parameter 月の位相の分子と分母("#{ num }/#{ den }" の形式)
509
+ # @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
510
+ # @param [When::TM::Calendar] frame 暦法(ダミー)
511
+ #
512
+ # @return [When::TM::CalDate] date またはその直後に月の位相が指定の値になる日時
513
+ #
514
+ def phase(date, parameter=nil, precision=date.precision, frame=nil)
515
+ dates = _to_date_for_note(date)
516
+ note = dates.cal4note.l_phases
517
+ result = note.phase(date, parameter)
518
+ return result if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian)
519
+ num, den = parameter.kind_of?(String) ? parameter.split(/\//, 2) : parameter
520
+ num = (num || 0).to_f
521
+ den = (den || 30).to_f
522
+ return result unless den == 30
523
+ case num % 30
524
+ when 0 # 朔
525
+ return result if result.cal_date[-1] == 1
526
+ diff = result.cal_date[-1] < 15 ? -1 : +1
527
+ when 5..25 # 弦、望
528
+ return result unless note.formula.kind_of?(When::Ephemeris::ChineseTrueLunation)
529
+ time = result.kind_of?(When::TM::DateAndTime) ? result : note.phase(date, [num,den], When::SYSTEM)
530
+ return result if time.clk_time.universal_time >= When::TM::Duration::DAY/4 # 午前6時以降
531
+ diff = -1
532
+ else # その他
533
+ return result
534
+ end
535
+ patched = result + When::DurationP1D * diff
536
+ result.cal_date[0..-2] = patched.cal_date[0..-2]
537
+ result.cal_date[-1] = When::Coordinates::Pair.new(patched.cal_date[-1], -diff)
538
+ result
518
539
  end
519
540
 
520
541
  private
521
542
 
522
543
  # オブジェクトの正規化
523
544
  def _normalize(args=[], options={})
524
- @prime ||= [%w(干支), %w(月名), %w(干支 六曜 廿四節気 祝祭日)]
545
+ @prime ||= [%w(干支), %w(月名), %w(七曜 干支 六曜 廿四節気 祝祭日)]
525
546
  super
526
547
  end
527
548
 
@@ -551,7 +572,7 @@ class When::CalendarTypes::CalendarNote
551
572
  pattern = ''
552
573
  while year == month
553
574
  length = month.length(When::MONTH)
554
- length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) # 太陽暦
575
+ length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
555
576
  pattern += '閏' if month[When::MONTH] * 0 == 1
556
577
  pattern += MonthPattern[length] || '改'
557
578
  month += When::DurationP1M
@@ -590,7 +611,7 @@ class When::CalendarTypes::CalendarNote
590
611
  # 大小
591
612
  unless notes_hash['大小']
592
613
  length = dates.o_date.length(When::MONTH)
593
- length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) # 太陽暦
614
+ length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) # 太陽暦
594
615
  notes_hash['大小'] = "#{dates.o_date[When::MONTH]*0==1 ? '閏' : ''}#{MonthPattern[length] || '改'}(#{length.abs})"
595
616
  end
596
617
 
@@ -607,7 +628,7 @@ class When::CalendarTypes::CalendarNote
607
628
  _note_values(dates, notes, _all_keys[-1], _elements[-1]) do |dates, focused_notes, notes_hash|
608
629
 
609
630
  focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-1]
610
- root = When.Resource(dates.range == 1 ? '_co:CommonResidue?V=0618' : '_co:CommonResidue')
631
+ root = When.Resource('_co:CommonResidue')
611
632
 
612
633
  # 干支
613
634
  residue = dates.s_date.to_i-11
@@ -621,17 +642,15 @@ class When::CalendarTypes::CalendarNote
621
642
  note._day_notes(notes_hash, dates, conditions)
622
643
  end
623
644
 
624
- # 廿四節気
625
- notes_hash['廿四節気'] = _residue24(notes_hash['廿四節気'], root, dates)
626
-
627
645
  # 七曜
628
646
  notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
629
647
 
630
648
  # 廿七宿
631
649
  notes_hash['廿七宿'] = _residue27(notes_hash['廿七宿'], root)
632
650
 
633
- # 廿八宿
651
+ # 廿八宿 / 鬼宿
634
652
  notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28]
653
+ notes_hash['鬼宿'] ||= /鬼/ =~ notes_hash['廿八宿'].to_s ? '鬼宿' : nil
635
654
 
636
655
  # 九星
637
656
  notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.s_date, dates.cal4note.s_terms)]
@@ -672,14 +691,6 @@ class When::CalendarTypes::CalendarNote
672
691
  nil
673
692
  end
674
693
 
675
- #
676
- # 廿四節気を Resudue 化
677
- #
678
- def _residue24(index, root, dates)
679
- return index unless index.kind_of?(Integer)
680
- root['二十四節気::*'][(index-3) % 24]
681
- end
682
-
683
694
  #
684
695
  # 廿七宿を Resudue 化
685
696
  #
@@ -693,7 +704,7 @@ class When::CalendarTypes::CalendarNote
693
704
  #
694
705
  def month_stem_branch(date)
695
706
  date.most_significant_coordinate*12+(date.cal_date[1] * 1) +
696
- (date.frame.kind_of?(When::CalendarTypes::Julian) ? 12 : 13)
707
+ (date.frame.kind_of?(When::CalendarTypes::Christian) ? 12 : 13)
697
708
  end
698
709
  end
699
710
 
@@ -923,21 +934,49 @@ class When::CalendarTypes::CalendarNote
923
934
  phase, metsu = dates.cal4note.l_phases.position(date)
924
935
 
925
936
  # 滅
926
- notes['滅'] = '滅' if metsu == 2
937
+ notes['滅'] = metsu == 2 && dates.range < 11 ? '滅' : nil
927
938
 
928
939
  # 月相
929
940
  unless notes['月相']
930
- date = When.when?(dates.o_date.to_cal_date.to_s,
931
- {:frame=>dates.o_date.frame,
932
- :clock=>dates.l_date.frame.formula[-1].kind_of?(When::Ephemeris::ChineseTrueLunation) ?
933
- When.Clock(-21600) : dates.l_date.frame.time_basis})
934
- range = dates.cal4note.l_phases.formula.thiti_range(date)
935
- notes['月相'] = if range
941
+ # イベントの判定
942
+ formula = dates.cal4note.l_phases.formula
943
+ clock = formula.kind_of?(When::Ephemeris::ChineseTrueLunation) &&
944
+ (5..25).include?(dates.l_date.cal_date[2]) ?
945
+ When.Clock(-21600) : # 唐代暦法の望弦は午前6時を日の境界とする
946
+ dates.l_date.frame._time_basis[-1] # その他(進朔も考慮した時刻)
947
+ odate = When.when?(dates.o_date.to_cal_date.to_s, {:frame=>dates.o_date.frame, :clock=>clock})
948
+ phases = formula.phase_range(odate)
949
+ thitis = phases.map {|phase| (phase % 1) * 30.0}
950
+ note = if thitis[0] >= thitis[1]
951
+ dates.o_date.frame.kind_of?(When::CalendarTypes::Christian) || conditions[:shoyo] ? '朔' : nil
952
+ else
953
+ range = thitis[0]...thitis[1]
936
954
  range.include?( 7.5) ? '上弦' :
937
955
  range.include?(15.0) ? '望' :
938
956
  range.include?(22.5) ? '下弦' : nil
957
+ end
958
+
959
+ # 結果の反映
960
+ if conditions[:shoyo]
961
+ # :shoyo が true ならイベント時刻も返す
962
+ notes['月相'] = if note
963
+ etime = formula._to_seed_type(formula.cn_to_time((phases[1] * 4).floor / 4.0), odate)
964
+ if formula.respond_to?(:lunation_length) && formula.lunation_length.kind_of?(Rational)
965
+ shoyo = etime.clk_time.universal_time
966
+ shoyo += When::TM::Duration::DAY if (0...clock.universal_time).include?(shoyo)
967
+ shoyo = (shoyo / When::TM::Duration::DAY * formula.denominator * 1000 + 0.5).floor / 1000.0
968
+ shoyo = shoyo.to_i if shoyo == shoyo.to_i
969
+ "#{note}(#{shoyo}/#{formula.denominator})"
970
+ else
971
+ etime.events = [note]
972
+ etime
973
+ end
974
+ else
975
+ nil
976
+ end
939
977
  else
940
- dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) ? '朔' : nil
978
+ # :shoyo false ならイベン名のみ返す
979
+ notes['月相'] = note
941
980
  end
942
981
  end
943
982
 
@@ -1141,7 +1180,7 @@ class When::CalendarTypes::CalendarNote
1141
1180
  def _day_notes(notes, dates, conditions={})
1142
1181
  date = When.when?(dates.o_date.to_cal_date.to_s,
1143
1182
  {:frame=>dates.o_date.frame,
1144
- :clock=>dates.s_date.frame.time_basis})
1183
+ :clock=>dates.s_date.frame._time_basis[0]})
1145
1184
  patch = (@patch || Patch)[date.to_i] unless dates.o_date.frame.respond_to?(:twin) &&
1146
1185
  dates.o_date.frame.twin
1147
1186
  longitude, motsu = patch ? patch : dates.cal4note.s_terms.position(date)
@@ -1239,16 +1278,39 @@ class When::CalendarTypes::CalendarNote
1239
1278
 
1240
1279
  # 没
1241
1280
  if motsu == 0
1242
- notes['没'] = '没' if dates.range < 11
1281
+ notes['没'] = dates.range < 11 ? '没' : nil
1243
1282
  return notes unless patch
1283
+ else
1284
+ notes['没'] = nil
1244
1285
  end
1245
1286
 
1246
1287
  # 廿四節気
1247
1288
  div, mod = longitude.divmod(15)
1248
1289
  if mod == 0
1249
- notes['廿四節気'] = (div - 21) % 24
1250
- div, mod = notes['廿四節気'].divmod(2)
1251
- notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
1290
+ note = (div - 21) % 24
1291
+ div, mod = note.divmod(2)
1292
+ notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
1293
+ notes['廿四節気'] ||=
1294
+ begin
1295
+ root = When.Resource(dates.range == 1 ? '_co:CommonResidue?V=0618' : '_co:CommonResidue')
1296
+ residue = root['二十四節気::*'][(note-3) % 24]
1297
+ if conditions[:shoyo]
1298
+ formula = dates.cal4note.s_terms.formula
1299
+ etime = dates.cal4note.s_terms.term(date - When.Duration('P3D'), [0,15], When::SYSTEM)
1300
+ if formula.respond_to?(:year_length) && formula.denominator
1301
+ shoyo = etime.clk_time.universal_time
1302
+ shoyo += When::TM::Duration::DAY * (etime.to_i - date.to_i)
1303
+ shoyo = (shoyo / When::TM::Duration::DAY * formula.denominator * 1000 + 0.5).floor / 1000.0
1304
+ shoyo = shoyo.to_i if shoyo == shoyo.to_i
1305
+ residue.label + "(#{shoyo}/#{formula.denominator})"
1306
+ else
1307
+ etime.events = [residue.label]
1308
+ etime
1309
+ end
1310
+ else
1311
+ residue
1312
+ end
1313
+ end
1252
1314
  end
1253
1315
 
1254
1316
  # 七十二候