when_exe 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -33
  3. data/bin/locales.rb +1 -1
  4. data/bin/make_ttl.rb.config +1 -1
  5. data/lib/when_exe.rb +27 -16
  6. data/lib/when_exe/basictypes.rb +772 -771
  7. data/lib/when_exe/calendartypes.rb +1485 -1453
  8. data/lib/when_exe/coordinates.rb +5 -0
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +147 -116
  11. data/lib/when_exe/core/extension.rb +499 -497
  12. data/lib/when_exe/ephemeris.rb +1952 -1951
  13. data/lib/when_exe/ephemeris/eclipse.rb +5 -4
  14. data/lib/when_exe/ephemeris/notes.rb +457 -421
  15. data/lib/when_exe/ephemeris/planets.rb +585 -585
  16. data/lib/when_exe/ephemeris/sun.rb +214 -214
  17. data/lib/when_exe/google_api.rb +153 -0
  18. data/lib/when_exe/icalendar.rb +1640 -1632
  19. data/lib/when_exe/inspect.rb +42 -20
  20. data/lib/when_exe/linkeddata.rb +28 -7
  21. data/lib/when_exe/locales/autoload.rb +2 -1
  22. data/lib/when_exe/locales/locale.rb +35 -15
  23. data/lib/when_exe/locales/zh.rb +77 -0
  24. data/lib/when_exe/mini_application.rb +3 -1
  25. data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
  26. data/lib/when_exe/parts/enumerator.rb +498 -486
  27. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  28. data/lib/when_exe/parts/timezone.rb +246 -241
  29. data/lib/when_exe/region/armenian.rb +55 -56
  30. data/lib/when_exe/region/babylonian.rb +406 -405
  31. data/lib/when_exe/region/bahai.rb +107 -106
  32. data/lib/when_exe/region/balinese.rb +624 -622
  33. data/lib/when_exe/region/chinese.rb +1071 -1026
  34. data/lib/when_exe/region/chinese/epochs.rb +28 -28
  35. data/lib/when_exe/region/chinese/notes.rb +219 -0
  36. data/lib/when_exe/region/chinese/twins.rb +803 -803
  37. data/lib/when_exe/region/christian.rb +21 -15
  38. data/lib/when_exe/region/coptic.rb +107 -106
  39. data/lib/when_exe/region/discordian.rb +218 -218
  40. data/lib/when_exe/region/east_asian.rb +1 -1
  41. data/lib/when_exe/region/french.rb +126 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +60 -58
  44. data/lib/when_exe/region/hanke_henry.rb +2 -2
  45. data/lib/when_exe/region/indian.rb +1225 -1222
  46. data/lib/when_exe/region/international_fixed.rb +96 -97
  47. data/lib/when_exe/region/iranian.rb +206 -203
  48. data/lib/when_exe/region/islamic.rb +102 -102
  49. data/lib/when_exe/region/japanese.rb +126 -71
  50. data/lib/when_exe/region/japanese/epochs.rb +426 -426
  51. data/lib/when_exe/region/japanese/notes.rb +101 -81
  52. data/lib/when_exe/region/japanese/residues.rb +1345 -1311
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -112
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +130 -131
  57. data/lib/when_exe/region/m17n.rb +114 -114
  58. data/lib/when_exe/region/martian.rb +258 -258
  59. data/lib/when_exe/region/mayan.rb +11 -8
  60. data/lib/when_exe/region/pax.rb +4 -5
  61. data/lib/when_exe/region/pope.rb +1 -1
  62. data/lib/when_exe/region/positivist.rb +100 -100
  63. data/lib/when_exe/region/residue.rb +162 -162
  64. data/lib/when_exe/region/roman.rb +333 -333
  65. data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
  66. data/lib/when_exe/region/shire.rb +222 -223
  67. data/lib/when_exe/region/symmetry.rb +50 -50
  68. data/lib/when_exe/region/thai.rb +336 -336
  69. data/lib/when_exe/region/tibetan.rb +315 -316
  70. data/lib/when_exe/region/tranquility.rb +207 -208
  71. data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
  72. data/lib/when_exe/region/vietnamese.rb +449 -440
  73. data/lib/when_exe/region/weekdate.rb +80 -80
  74. data/lib/when_exe/region/world.rb +170 -171
  75. data/lib/when_exe/region/world_season.rb +89 -89
  76. data/lib/when_exe/region/yerm.rb +3 -3
  77. data/lib/when_exe/region/zoroastrian.rb +205 -205
  78. data/lib/when_exe/timestandard.rb +708 -707
  79. data/lib/when_exe/tmduration.rb +338 -338
  80. data/lib/when_exe/tmobjects.rb +1356 -1356
  81. data/lib/when_exe/tmposition.rb +66 -31
  82. data/lib/when_exe/version.rb +16 -2
  83. data/test/examples/Residue.m17n +83 -83
  84. data/test/examples/Terms.m17n +2 -2
  85. data/test/test.rb +2 -2
  86. data/test/test/google_api.rb +65 -0
  87. data/test/test/linkeddata.rb +1 -1
  88. data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
  89. data/test/test/region/indian.rb +90 -85
  90. data/test/test/region/m17n.rb +7 -7
  91. data/test/test/region/mayan.rb +195 -195
  92. data/test/test/region/residue.rb +153 -153
  93. data/test/test/tmposition.rb +11 -1
  94. data/when_exe.gemspec +2 -2
  95. metadata +95 -8
  96. data/test/test.rb.config +0 -1
@@ -1,225 +1,225 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2014 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
-
10
- class TM::CalendarEra
11
-
12
- # Japanese Luni-Solar Calendar Series for Japanese Note
13
- JapaneseLuniSolar = [{}, self, [
14
- 'locale:[=ja:, en=en:]',
15
- 'area:[日本の暦月=, *JapaneseLuniSolar=]',
16
- ['[平朔儀鳳暦=]-660.01.01', '@F', '-660-01-01^JapaneseTwin::平朔儀鳳暦'],
17
- ['[元嘉暦]454.01.01', '@CR', '454-01-01^ChineseTwin::元嘉暦'],
18
- ['[儀鳳暦]697.01.01', '@CR', '697-01-01^ChineseTwin::麟徳暦'],
19
- ['[大衍暦]764.01.01', '@CR', '764-01-01^ChineseTwin::大衍暦'],
20
- ['[五紀暦]858.01.01', '@CR', '858-01-01^ChineseTwin::五紀暦'],
21
- ['[宣明暦]862.01.01', '@CR', '862-01-01^ChineseTwin::宣明暦'],
22
- ['[貞享乙丑暦=]1685.01.01', '@CR', '1685-01-01^JapaneseTwin::貞享乙丑暦'],
23
- ['[貞享暦]1687.01.01', '@CR', '1687-01-01^JapaneseTwin::貞享暦' ],
24
- ['[宝暦癸酉暦=]1753.01.01', '@CR', '1753-01-01^JapaneseTwin::宝暦癸酉暦'],
25
- ['[宝暦甲戌暦=]1754.01.01', '@CR', '1754-01-01^JapaneseTwin::宝暦甲戌暦'],
26
- ['[宝暦暦]1755.01.01', '@CR', '1755-01-01^JapaneseTwin::宝暦暦' ],
27
- ['[修正宝暦暦=]1771.01.01', '@CR', '1771-01-01^JapaneseTwin::修正宝暦暦'],
28
- ['[寛政暦]1798.01.01', '@CR', '1798-01-01^JapaneseTwin::寛政暦' ], # 京都平均太陽時
29
- ['[寛政丁亥暦=]1827.01.01', '@CR', '1827-01-01^JapaneseTwin::寛政丁亥暦'], # 京都平均太陽時
30
- ['[天保暦]1844.01.01', '@CR', '1844-01-01^JapaneseTwin#{?Clock=Clock}::天保暦'], # 京都真太陽時
31
- ['[旧々暦=,*JSO=]1872.12.03','@CR', '1872-12-03^JapaneseTwin::旧々暦' ], # 東京平均太陽時
32
- ['[旧暦,*JS=]1887.11.18', '@CR', '1887-11-18^JapaneseTwin::旧暦' ] # 日本標準時
33
- ]]
34
-
35
- # Japanese Solar Calendar Series for Japanese Note
36
- JapaneseSolar = [{}, self, [
37
- 'locale:[=ja:, en=en:]',
38
- 'area:[日本の節月=, *JapaneseSolar=]',
39
- ['[平朔儀鳳暦=]-661.01.01', '@F', '-661-01-01^JapaneseTwin::平朔儀鳳暦(節月)'], # 年の始めに遡って開始(実際は12.22)
40
- ['[元嘉暦]454.01.12', '@CR', '454-01-12^ChineseTwin::元嘉暦(節月)'],
41
- ['[儀鳳暦]696.12.27', '@CR', '696-12-27^ChineseTwin::麟徳暦(節月)'],
42
- ['[大衍暦]764.01.06', '@CR', '764-01-06^ChineseTwin::大衍暦(節月)'],
43
- ['[五紀暦]857.12.19', '@CR', '857-12-19^ChineseTwin::五紀暦(節月)'],
44
- ['[宣明暦]862.01.03', '@CR', '862-01-03^ChineseTwin::宣明暦(節月)'],
45
- ['[貞享乙丑暦=]1685.01.01', '@CR', '1685-01-01^JapaneseTwin::貞享乙丑暦(節月)'],
46
- ['[貞享暦]1687.01.08', '@CR', '1687-01-08^JapaneseTwin::貞享暦(節月)' ],
47
- ['[宝暦癸酉暦=]1752.12.30', '@CR', '1752-12-30^JapaneseTwin::宝暦癸酉暦(節月)'],
48
- ['[宝暦甲戌暦=]1753.12.19', '@CR', '1753-12-19^JapaneseTwin::宝暦甲戌暦(節月)'],
49
- ['[宝暦暦]1755.01.07', '@CR', '1755-01-07^JapaneseTwin::宝暦暦(節月)' ],
50
- ['[修正宝暦暦=]1771.01.11', '@CR', '1771-01-11^JapaneseTwin::修正宝暦暦(節月)'],
51
- ['[寛政暦]1798.01.12', '@CR', '1798-01-12^JapaneseTwin::寛政暦(節月)' ],
52
- ['[寛政丁亥暦=]1826.12.22', '@CR', '1826-12-22^JapaneseTwin::寛政丁亥暦(節月)'],
53
- ['[天保暦]1844.01.14', '@CR', '1844-01-14^JapaneseTwin#{?Clock=Clock}::天保暦(節月)'], # 京都真太陽時
54
- ['[旧々暦=,*JSO=]1872.11.26','@CR', '1872-11-26^JapaneseTwin::旧々暦(節月)' ], # 東京平均太陽時
55
- ['[旧暦,*JS=]1887.11.26', '@CR', '1887-11-26^JapaneseTwin::旧暦(節月)' ] # 日本標準時
56
- ]]
57
- end
58
-
59
- module CalendarTypes
60
-
61
- _japanese_common = {
62
- 'year_delta' => 1, # 冬至年の変化率 / (10^(-6)日/年)
63
- 'year_span' => 1, # 冬至年の改訂周期 / 年
64
- 'lunation_length' => 29.530590, # 朔実(朔望月)
65
- 'lunar_mean_motion' => 13.36875, # 月平行(恒星天に対する月の平均運動 / 日)
66
- 'anomalistic_month_length' => 27.5546, # 転終(近点月)
67
- 'anomaly_method' => 'c', # (経朔-定朔)の計算方法(a:差分, b:微分, c:幾何学的補正)
68
- 'anomaly_precision' => 1e-5, # c 方式 での収束判定誤差 / 日
69
- 'lunar_unit' => 0.1, # 太陰遅速計算用招差法定数の時間の単位(限)
70
- 'solar_weight' => 1, # (経朔-定朔)の計算で用いる実行差での太陽盈縮の重み(0:非考慮,1:考慮)
71
- 'm' => [ # 太陰遅速計算用招差法定数
72
- [ 0 ... 72.65342, 0, [-0, -1173_1000, +3_7000, +400]],
73
- [ 72.65342...137.773, 137.773, [-0, -1324_0000, +5_2000, +500]],
74
- [137.773 ...202.89258, 137.773, [+0, +1324_0000, -5_2000, -500]],
75
- [202.89258.. 275.546, 275.546, [+0, +1173_1000, -3_7000, -400]]
76
- ],
77
- 's' => [ # 太陽盈縮計算用招差法定数
78
- [ 0 ... 89.25392, 0, [0, +436_0000, -2_0000, -34]],
79
- [ 89.25392 ...182.620848, 182.620848, [0, +411_9800, -1_7640, -31]],
80
- [182.620848...275.987776, 182.620848, [0, -411_9800, +1_7640, +31]],
81
- [275.987776.. 365.241696, 365.241696, [0, -436_0000, +2_0000, +34]]
82
- ]
83
- }
84
-
85
- JapaneseTwin = [{}, When::BasicTypes::M17n, ChineseSolar.twin('JapaneseTwin', [
86
- "locale:[=ja:, en=en:, alias]",
87
- "area:[日本,Japan]",
88
-
89
- [ChineseLuniSolar,
90
- 'name:[平朔儀鳳暦=]',
91
- 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
92
- ],
93
-
94
- [ChineseLuniSolar,
95
- 'name:[貞享乙丑暦=]',
96
- {'formula'=>['12S', '1L'].map {|f| [
97
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
98
- 'formula' => f,
99
- 'day_epoch' => 2336111 + 7.675, # 暦元天正冬至のユリウス日
100
- 'year_epoch' => 1684, # 暦元の西暦年
101
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
102
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
103
- 'lunation_shift' => 2.779 - 0.015, # 閏應(暦元前経朔から暦元天正冬至までの日数)
104
- 'anomalistic_month_shift' => 22.72 - 0.015 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
105
- })]
106
- }
107
- }
108
- ],
109
-
110
- [ChineseLuniSolar,
111
- 'name:[貞享暦]',
112
- {'formula'=>['12S', '1L'].map {|f| [
113
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
114
- 'formula' => f,
115
- 'day_epoch' => 2336111 + 7.69 , # 暦元天正冬至のユリウス日
116
- 'year_epoch' => 1684, # 暦元の西暦年
117
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
118
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
119
- 'lunation_shift' => 2.779, # 閏應(暦元前経朔から暦元天正冬至までの日数)
120
- 'anomalistic_month_shift' => 22.72 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
121
- })]
122
- }
123
- }
124
- ],
125
-
126
- [ChineseLuniSolar,
127
- 'name:[宝暦癸酉暦=]',
128
- {'formula'=>['12S', '1L'].map {|f| [
129
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
130
- 'formula' => f,
131
- 'day_epoch' => 2336111 + 7.9038,# 暦元天正冬至のユリウス日
132
- 'year_epoch' => 1684, # 暦元の西暦年
133
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
134
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
135
- 'lunation_shift' => 2.779 + 0.2138, # 閏應(暦元前経朔から暦元天正冬至までの日数)
136
- 'anomalistic_month_shift' => 22.72 + 0.2138 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
137
- })]
138
- }
139
- }
140
- ],
141
-
142
- [ChineseLuniSolar,
143
- 'name:[宝暦甲戌暦=]',
144
- {'formula'=>['12S', '1L'].map {|f| [
145
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
146
- 'formula' => f,
147
- 'day_epoch' => 2336111 + 7.6223,# 暦元天正冬至のユリウス日
148
- 'year_epoch' => 1684, # 暦元の西暦年
149
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
150
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
151
- 'lunation_shift' => 2.779 - 0.0677, # 閏應(暦元前経朔から暦元天正冬至までの日数)
152
- 'anomalistic_month_shift' => 22.72 - 0.0677 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
153
- })]
154
- }
155
- }
156
- ],
157
-
158
- [ChineseLuniSolar,
159
- 'name:[宝暦暦]',
160
- {'formula'=>['12S', '1L'].map {|f| [
161
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
162
- 'formula' => f,
163
- 'day_epoch' => 2361671 + 14.536, # 暦元天正冬至のユリウス日
164
- 'year_epoch' => 1754, # 暦元の西暦年
165
- 'year_length' => 365.241556, # 暦元の冬至年 / 日
166
- 'anomalistic_year_shift' => 6.455, # 暦應(冬至から近日点通過までの日数)
167
- 'lunation_shift' => 25.654, # 閏應(暦元前経朔から暦元天正冬至までの日数)
168
- 'anomalistic_month_shift' => 18.88, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
169
- 's' => ChineseSolar.change_unit(365.241556 / 365.241696, _japanese_common['s'])
170
- })]
171
- }
172
- }
173
- ],
174
-
175
- [ChineseLuniSolar,
176
- 'name:[修正宝暦暦=]',
177
- {'formula'=>['12S', '1L'].map {|f| [
178
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
179
- 'formula' => f,
180
- 'day_epoch' => 2361671 + 14.681, # 暦元天正冬至のユリウス日
181
- 'year_epoch' => 1754, # 暦元の西暦年
182
- 'year_length' => 365.241626, # 暦元の冬至年 / 日
183
- 'anomalistic_year_shift' => 7.42, # 暦應(冬至から近日点通過までの日数)
184
- 'lunation_shift' => 25.82, # 閏應(暦元前経朔から暦元天正冬至までの日数)
185
- 'anomalistic_month_shift' => 19.307, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
186
- 's' => ChineseSolar.change_unit(365.241626 / 365.241696, _japanese_common['s'])
187
- })]
188
- }
189
- }
190
- ],
191
-
192
- [ChineseLuniSolar,
193
- 'name:[寛政暦]',
194
- 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
195
- {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=1000',
196
- 'Formula']}
197
- ],
198
-
199
- [ChineseLuniSolar,
200
- 'name:[寛政丁亥暦=]',
201
- 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
202
- {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=10',
203
- 'Formula']}
204
- ],
205
-
206
- [ChineseLuniSolar,
207
- 'name:[天保暦]',
208
- 'time_basis:#{Clock:LAT}?long=135.4520E&lat=35.0117N',
209
- 'intercalary_span:3'
210
- ],
211
-
212
- [ChineseLuniSolar,
213
- 'name:[旧々暦=]',
214
- 'time_basis:+09:18:59',
215
- 'intercalary_span:3'
216
- ],
217
-
218
- [ChineseLuniSolar,
219
- 'name:[旧暦]',
220
- 'time_basis:+09:00',
221
- 'intercalary_span:3'
222
- ]
223
- ])]
224
- end
225
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014-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
+
10
+ class TM::CalendarEra
11
+
12
+ # Historical Japanese Luni-Solar Calendar for Japanese Note
13
+ JapaneseLuniSolar = [{}, self, [
14
+ 'locale:[=ja:, en=en:, zh=zh:, alias]',
15
+ 'area:[日本の暦月=, (Auto selected) JapaneseLuniSolar=, 被在日本使用陰陽曆=, *JapaneseLuniSolar=]',
16
+ ['[平朔儀鳳暦=]01.01.01', '@F', '001-01-01^JapaneseTwin::平朔儀鳳暦'], # 西暦が正になるところから開始(実際は-659.01.01)
17
+ ['[元嘉暦]454.01.01', '@CR', '454-01-01^ChineseTwin::元嘉暦', '697-01-01='],
18
+ ['[儀鳳暦]697.01.01', '@CR', '697-01-01^ChineseTwin::麟徳暦'],
19
+ ['[大衍暦]764.01.01', '@CR', '764-01-01^ChineseTwin::大衍暦'],
20
+ ['[五紀暦]858.01.01', '@CR', '858-01-01^ChineseTwin::五紀暦'],
21
+ ['[宣明暦]862.01.01', '@CR', '862-01-01^ChineseTwin::宣明暦'],
22
+ ['[貞享乙丑暦=]1685.01.01', '@CR', '1685-01-01^JapaneseTwin::貞享乙丑暦'],
23
+ ['[貞享暦]1687.01.01', '@CR', '1687-01-01^JapaneseTwin::貞享暦' ],
24
+ ['[宝暦癸酉暦=]1753.01.01', '@CR', '1753-01-01^JapaneseTwin::宝暦癸酉暦'],
25
+ ['[宝暦甲戌暦=]1754.01.01', '@CR', '1754-01-01^JapaneseTwin::宝暦甲戌暦'],
26
+ ['[宝暦暦]1755.01.01', '@CR', '1755-01-01^JapaneseTwin::宝暦暦' ],
27
+ ['[修正宝暦暦=]1771.01.01', '@CR', '1771-01-01^JapaneseTwin::修正宝暦暦'],
28
+ ['[寛政暦]1798.01.01', '@CR', '1798-01-01^JapaneseTwin::寛政暦' ], # 京都平均太陽時
29
+ ['[寛政丁亥暦=]1827.01.01', '@CR', '1827-01-01^JapaneseTwin::寛政丁亥暦'], # 京都平均太陽時
30
+ ['[天保暦]1844.01.01', '@CR', '1844-01-01^JapaneseTwin#{?Clock=Clock}::天保暦'], # 京都真太陽時
31
+ ['[旧々暦=,*JLSO=]1872.12.03','@CR','1872-12-03^JapaneseTwin::旧々暦' ], # 東京平均太陽時
32
+ ['[旧暦,*JLS=]1887.11.18', '@CR','1887-11-18^JapaneseTwin::旧暦' ] # 日本標準時
33
+ ]]
34
+
35
+ # Historical Japanese Solar Calendar for Japanese Note
36
+ JapaneseSolar = [{}, self, [
37
+ 'locale:[=ja:, en=en:, zh=zh, alias]',
38
+ 'area:[日本の節月=, (Auto selected) JapaneseSolar=, 被在日本使用陽曆=, *JapaneseSolar=]',
39
+ ['[平朔儀鳳暦=]01.01.01', '@F', '001-01-01^JapaneseTwin::平朔儀鳳暦(節月)'], # 年の始めに遡って開始
40
+ ['[元嘉暦]454.01.12', '@CR', '454-01-12^ChineseTwin::元嘉暦(節月)'],
41
+ ['[儀鳳暦]696.12.27', '@CR', '696-12-27^ChineseTwin::麟徳暦(節月)'],
42
+ ['[大衍暦]764.01.06', '@CR', '764-01-06^ChineseTwin::大衍暦(節月)'],
43
+ ['[五紀暦]857.12.19', '@CR', '857-12-19^ChineseTwin::五紀暦(節月)'],
44
+ ['[宣明暦]862.01.03', '@CR', '862-01-03^ChineseTwin::宣明暦(節月)'],
45
+ ['[貞享乙丑暦=]1685.01.01', '@CR', '1685-01-01^JapaneseTwin::貞享乙丑暦(節月)'],
46
+ ['[貞享暦]1687.01.08', '@CR', '1687-01-08^JapaneseTwin::貞享暦(節月)' ],
47
+ ['[宝暦癸酉暦=]1752.12.30', '@CR', '1752-12-30^JapaneseTwin::宝暦癸酉暦(節月)'],
48
+ ['[宝暦甲戌暦=]1753.12.19', '@CR', '1753-12-19^JapaneseTwin::宝暦甲戌暦(節月)'],
49
+ ['[宝暦暦]1755.01.07', '@CR', '1755-01-07^JapaneseTwin::宝暦暦(節月)' ],
50
+ ['[修正宝暦暦=]1771.01.11', '@CR', '1771-01-11^JapaneseTwin::修正宝暦暦(節月)', '1798.01.12='],
51
+ ['[寛政暦]1798.01.12', '@CR', '1798-01-12^JapaneseTwin::寛政暦(節月)' ],
52
+ ['[寛政丁亥暦=]1826.12.22', '@CR', '1826-12-22^JapaneseTwin::寛政丁亥暦(節月)'],
53
+ ['[天保暦]1844.01.14', '@CR', '1844-01-14^JapaneseTwin#{?Clock=Clock}::天保暦(節月)'], # 京都真太陽時
54
+ ['[旧々暦=,*JSO=]1872.11.26','@CR', '1872-11-26^JapaneseTwin::旧々暦(節月)' ], # 東京平均太陽時
55
+ ['[旧暦,*JS=]1887.11.26', '@CR', '1887-11-26^JapaneseTwin::旧暦(節月)' ] # 日本標準時
56
+ ]]
57
+ end
58
+
59
+ module CalendarTypes
60
+
61
+ _japanese_common = {
62
+ 'year_delta' => 1, # 冬至年の変化率 / (10^(-6)日/年)
63
+ 'year_span' => 1, # 冬至年の改訂周期 / 年
64
+ 'lunation_length' => 29.530590, # 朔実(朔望月)
65
+ 'lunar_mean_motion' => 13.36875, # 月平行(恒星天に対する月の平均運動 / 日)
66
+ 'anomalistic_month_length' => 27.5546, # 転終(近点月)
67
+ 'anomaly_method' => 'c', # (経朔-定朔)の計算方法(a:差分, b:微分, c:幾何学的補正)
68
+ 'anomaly_precision' => 1e-5, # c 方式 での収束判定誤差 / 日
69
+ 'lunar_unit' => 0.1, # 太陰遅速計算用招差法定数の時間の単位(限)
70
+ 'solar_weight' => 1, # (経朔-定朔)の計算で用いる実行差での太陽盈縮の重み(0:非考慮,1:考慮)
71
+ 'm' => [ # 太陰遅速計算用招差法定数
72
+ [ 0 ... 72.65342, 0, [-0, -1173_1000, +3_7000, +400]],
73
+ [ 72.65342...137.773, 137.773, [-0, -1324_0000, +5_2000, +500]],
74
+ [137.773 ...202.89258, 137.773, [+0, +1324_0000, -5_2000, -500]],
75
+ [202.89258.. 275.546, 275.546, [+0, +1173_1000, -3_7000, -400]]
76
+ ],
77
+ 's' => [ # 太陽盈縮計算用招差法定数
78
+ [ 0 ... 89.25392, 0, [0, +436_0000, -2_0000, -34]],
79
+ [ 89.25392 ...182.620848, 182.620848, [0, +411_9800, -1_7640, -31]],
80
+ [182.620848...275.987776, 182.620848, [0, -411_9800, +1_7640, +31]],
81
+ [275.987776.. 365.241696, 365.241696, [0, -436_0000, +2_0000, +34]]
82
+ ]
83
+ }
84
+
85
+ JapaneseTwin = [{}, When::BasicTypes::M17n, ChineseSolar.twin('JapaneseTwin', [
86
+ "locale:[=ja:, en=en:, alias]",
87
+ "area:[日本,Japan]",
88
+
89
+ [ChineseLuniSolar,
90
+ 'name:[平朔儀鳳暦=]',
91
+ 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
92
+ ],
93
+
94
+ [ChineseLuniSolar,
95
+ 'name:[貞享乙丑暦=]',
96
+ {'formula'=>['12S', '1L'].map {|f| [
97
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
98
+ 'formula' => f,
99
+ 'day_epoch' => 2336111 + 7.675, # 暦元天正冬至のユリウス日
100
+ 'year_epoch' => 1684, # 暦元の西暦年
101
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
102
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
103
+ 'lunation_shift' => 2.779 - 0.015, # 閏應(暦元前経朔から暦元天正冬至までの日数)
104
+ 'anomalistic_month_shift' => 22.72 - 0.015 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
105
+ })]
106
+ }
107
+ }
108
+ ],
109
+
110
+ [ChineseLuniSolar,
111
+ 'name:[貞享暦]',
112
+ {'formula'=>['12S', '1L'].map {|f| [
113
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
114
+ 'formula' => f,
115
+ 'day_epoch' => 2336111 + 7.69 , # 暦元天正冬至のユリウス日
116
+ 'year_epoch' => 1684, # 暦元の西暦年
117
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
118
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
119
+ 'lunation_shift' => 2.779, # 閏應(暦元前経朔から暦元天正冬至までの日数)
120
+ 'anomalistic_month_shift' => 22.72 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
121
+ })]
122
+ }
123
+ }
124
+ ],
125
+
126
+ [ChineseLuniSolar,
127
+ 'name:[宝暦癸酉暦=]',
128
+ {'formula'=>['12S', '1L'].map {|f| [
129
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
130
+ 'formula' => f,
131
+ 'day_epoch' => 2336111 + 7.9038,# 暦元天正冬至のユリウス日
132
+ 'year_epoch' => 1684, # 暦元の西暦年
133
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
134
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
135
+ 'lunation_shift' => 2.779 + 0.2138, # 閏應(暦元前経朔から暦元天正冬至までの日数)
136
+ 'anomalistic_month_shift' => 22.72 + 0.2138 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
137
+ })]
138
+ }
139
+ }
140
+ ],
141
+
142
+ [ChineseLuniSolar,
143
+ 'name:[宝暦甲戌暦=]',
144
+ {'formula'=>['12S', '1L'].map {|f| [
145
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
146
+ 'formula' => f,
147
+ 'day_epoch' => 2336111 + 7.6223,# 暦元天正冬至のユリウス日
148
+ 'year_epoch' => 1684, # 暦元の西暦年
149
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
150
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
151
+ 'lunation_shift' => 2.779 - 0.0677, # 閏應(暦元前経朔から暦元天正冬至までの日数)
152
+ 'anomalistic_month_shift' => 22.72 - 0.0677 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
153
+ })]
154
+ }
155
+ }
156
+ ],
157
+
158
+ [ChineseLuniSolar,
159
+ 'name:[宝暦暦]',
160
+ {'formula'=>['12S', '1L'].map {|f| [
161
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
162
+ 'formula' => f,
163
+ 'day_epoch' => 2361671 + 14.536, # 暦元天正冬至のユリウス日
164
+ 'year_epoch' => 1754, # 暦元の西暦年
165
+ 'year_length' => 365.241556, # 暦元の冬至年 / 日
166
+ 'anomalistic_year_shift' => 6.455, # 暦應(冬至から近日点通過までの日数)
167
+ 'lunation_shift' => 25.654, # 閏應(暦元前経朔から暦元天正冬至までの日数)
168
+ 'anomalistic_month_shift' => 18.88, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
169
+ 's' => ChineseSolar.change_unit(365.241556 / 365.241696, _japanese_common['s'])
170
+ })]
171
+ }
172
+ }
173
+ ],
174
+
175
+ [ChineseLuniSolar,
176
+ 'name:[修正宝暦暦=]',
177
+ {'formula'=>['12S', '1L'].map {|f| [
178
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
179
+ 'formula' => f,
180
+ 'day_epoch' => 2361671 + 14.681, # 暦元天正冬至のユリウス日
181
+ 'year_epoch' => 1754, # 暦元の西暦年
182
+ 'year_length' => 365.241626, # 暦元の冬至年 / 日
183
+ 'anomalistic_year_shift' => 7.42, # 暦應(冬至から近日点通過までの日数)
184
+ 'lunation_shift' => 25.82, # 閏應(暦元前経朔から暦元天正冬至までの日数)
185
+ 'anomalistic_month_shift' => 19.307, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
186
+ 's' => ChineseSolar.change_unit(365.241626 / 365.241696, _japanese_common['s'])
187
+ })]
188
+ }
189
+ }
190
+ ],
191
+
192
+ [ChineseLuniSolar,
193
+ 'name:[寛政暦]',
194
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
195
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=1000',
196
+ 'Formula']}
197
+ ],
198
+
199
+ [ChineseLuniSolar,
200
+ 'name:[寛政丁亥暦=]',
201
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
202
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=10',
203
+ 'Formula']}
204
+ ],
205
+
206
+ [ChineseLuniSolar,
207
+ 'name:[天保暦]',
208
+ 'time_basis:#{Clock:LAT}?long=135.4520E&lat=35.0117N',
209
+ 'intercalary_span:3'
210
+ ],
211
+
212
+ [ChineseLuniSolar,
213
+ 'name:[旧々暦=]',
214
+ 'time_basis:+09:18:59',
215
+ 'intercalary_span:3'
216
+ ],
217
+
218
+ [ChineseLuniSolar,
219
+ 'name:[旧暦]',
220
+ 'time_basis:+09:00',
221
+ 'intercalary_span:3'
222
+ ]
223
+ ])]
224
+ end
225
+ end
@@ -1,112 +1,112 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2014 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
- class When::CalendarNote
9
-
10
- #
11
- # 標準の暦注 + 六曜
12
- #
13
- CommonWithRokuyo = [['_m:Calendar::Month'], ['Common::Week', '_n:RokuyoWeek/Notes::day::Rokuyo']]
14
-
15
- #
16
- # 六曜
17
- #
18
- class RokuyoWeek < Week
19
-
20
- #
21
- # 暦注要素の定義
22
- #
23
- Notes = [When::BasicTypes::M17n, [
24
- "locale:[=en:, ja=ja:, alias]",
25
- "names:[Rokuyo=]",
26
-
27
- # 日の暦注 ----------------------------
28
- [When::BasicTypes::M17n,
29
- "names:[day]",
30
- [When::BasicTypes::M17n,
31
- "names:[Rokuyo=, 六曜]",
32
- [DayOfWeek, "label:[Taian=, *大安]", {'delta'=>6}],
33
- [DayOfWeek, "label:[Shakko=, *赤口]", {'delta'=>6}],
34
- [DayOfWeek, "label:[Sensho=, *先勝]", {'delta'=>6}],
35
- [DayOfWeek, "label:[Tomobiki=, *友引]", {'delta'=>6}],
36
- [DayOfWeek, "label:[Sembu=, *先負]", {'delta'=>6}],
37
- [DayOfWeek, "label:[Butsumetsu=, *仏滅]", {'delta'=>6}]
38
- ]
39
- ]
40
- ]]
41
-
42
- #
43
- # この日は何曜?
44
- #
45
- # @param [When::TM::TemporalPosition] date
46
- # @param [When::TM::CalDate] base (not used)
47
- #
48
- # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
49
- #
50
- def rokuyo(date, base=nil)
51
- date = _to_date_for_note(date)
52
- y, m, d = date.cal_date
53
- index = rokuyo_index(m,d)
54
- {:value=>@days_of_week[index], :position=>[index, 6]}
55
- end
56
- alias :week :rokuyo
57
-
58
- # @private
59
- def rokuyo_value(m,d)
60
- @days_of_week[rokuyo_index(m,d)]
61
- end
62
-
63
- # @private
64
- def rokuyo_index(m,d)
65
- (m*1 + d) % 6
66
- end
67
-
68
- # @private
69
- def taian(date, base=nil)
70
- count = 0
71
- d0 = d1 = _to_date_for_note(date)
72
- r0 = r1 = nil
73
- loop do
74
- y,m,d = d1.cal_date
75
- r1 = rokuyo_index(m,d)
76
- break if r1 == 0
77
- if r0 && r1 > r0
78
- r1 = r0
79
- count -= 1
80
- break
81
- end
82
- d0 = d1
83
- r0 = r1
84
- d1 = d0 - When::P1D
85
- count += 1
86
- end
87
- date -= count if count > 0
88
- date.events = [@days_of_week[r1]]
89
- date
90
- end
91
-
92
- #
93
- # 暦日を太陰太陽暦日に変換
94
- #
95
- # @private
96
- def _to_date_for_note(date)
97
- return date if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
98
- return When::Japanese ^ date if date.most_significant_coordinate >= 1873
99
- return Japanese._to_japanese_date(date)
100
- end
101
-
102
- private
103
-
104
- # オブジェクトの正規化
105
- # @private
106
- def _normalize(args=[], options={})
107
- @days_of_week ||= When.CalendarNote("RokuyoWeek/Notes::day::Rokuyo")
108
- @event ||= 'taian'
109
- super
110
- end
111
- end
112
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014 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
+ class When::CalendarNote
9
+
10
+ #
11
+ # 標準の暦注 + 六曜
12
+ #
13
+ CommonWithRokuyo = [['_m:Calendar::Month'], ['Common::Week', '_n:RokuyoWeek/Notes::day::Rokuyo']]
14
+
15
+ #
16
+ # 六曜
17
+ #
18
+ class RokuyoWeek < Week
19
+
20
+ #
21
+ # 暦注要素の定義
22
+ #
23
+ Notes = [When::BasicTypes::M17n, [
24
+ "locale:[=en:, ja=ja:, zh=ja:, alias]",
25
+ "names:[Rokuyo=]",
26
+
27
+ # 日の暦注 ----------------------------
28
+ [When::BasicTypes::M17n,
29
+ "names:[day]",
30
+ [When::BasicTypes::M17n,
31
+ "names:[Rokuyo=, 六曜, 六曜=zh:%%<六曜>]",
32
+ [DayOfWeek, "label:[Taian=, *大安, 大安]", {'delta'=>6}],
33
+ [DayOfWeek, "label:[Shakko=, *赤口, 赤口]", {'delta'=>6}],
34
+ [DayOfWeek, "label:[Sensho=, *先勝, 先勝]", {'delta'=>6}],
35
+ [DayOfWeek, "label:[Tomobiki=, *友引, 友引]", {'delta'=>6}],
36
+ [DayOfWeek, "label:[Sembu=, *先負, 先負]", {'delta'=>6}],
37
+ [DayOfWeek, "label:[Butsumetsu=, *仏滅, 仏滅]", {'delta'=>6}]
38
+ ]
39
+ ]
40
+ ]]
41
+
42
+ #
43
+ # この日は何曜?
44
+ #
45
+ # @param [When::TM::TemporalPosition] date
46
+ # @param [When::TM::CalDate] base (not used)
47
+ #
48
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
49
+ #
50
+ def rokuyo(date, base=nil)
51
+ date = _to_date_for_note(date)
52
+ y, m, d = date.cal_date
53
+ index = rokuyo_index(m,d)
54
+ {:value=>@days_of_week[index], :position=>[index, 6]}
55
+ end
56
+ alias :week :rokuyo
57
+
58
+ # @private
59
+ def rokuyo_value(m,d)
60
+ @days_of_week[rokuyo_index(m,d)]
61
+ end
62
+
63
+ # @private
64
+ def rokuyo_index(m,d)
65
+ (m*1 + d) % 6
66
+ end
67
+
68
+ # @private
69
+ def taian(date, base=nil)
70
+ count = 0
71
+ d0 = d1 = _to_date_for_note(date)
72
+ r0 = r1 = nil
73
+ loop do
74
+ y,m,d = d1.cal_date
75
+ r1 = rokuyo_index(m,d)
76
+ break if r1 == 0
77
+ if r0 && r1 > r0
78
+ r1 = r0
79
+ count -= 1
80
+ break
81
+ end
82
+ d0 = d1
83
+ r0 = r1
84
+ d1 = d0 - When::P1D
85
+ count += 1
86
+ end
87
+ date -= count if count > 0
88
+ date.events = [@days_of_week[r1]]
89
+ date
90
+ end
91
+
92
+ #
93
+ # 暦日を太陰太陽暦日に変換
94
+ #
95
+ # @private
96
+ def _to_date_for_note(date)
97
+ return date if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
98
+ return When::Japanese ^ date if date.most_significant_coordinate >= 1873
99
+ return Japanese._to_japanese_date(date)
100
+ end
101
+
102
+ private
103
+
104
+ # オブジェクトの正規化
105
+ # @private
106
+ def _normalize(args=[], options={})
107
+ @days_of_week ||= When.CalendarNote("RokuyoWeek/Notes::day::Rokuyo")
108
+ @event ||= 'taian'
109
+ super
110
+ end
111
+ end
112
+ end