when_exe 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
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
  # 七十二候