zakuro 0.9.2 → 0.9.4

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/VERSION +1 -1
  4. data/doc/dropped_date.md +25 -0
  5. data/doc/operation/csv/month.csv +4 -5
  6. data/doc/operation/operation.xlsx +0 -0
  7. data/doc/vanished_date.md +26 -0
  8. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +26 -0
  9. data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +7 -1
  10. data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +8 -2
  11. data/lib/zakuro/calculation/era/gengou/internal/counter.rb +5 -5
  12. data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_list.rb +18 -5
  13. data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +24 -9
  14. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +7 -2
  15. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +7 -2
  16. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +13 -3
  17. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +15 -4
  18. data/lib/zakuro/calculation/era/gengou/named_scroll.rb +8 -2
  19. data/lib/zakuro/calculation/monthly/initialized_month.rb +4 -2
  20. data/lib/zakuro/calculation/monthly/meta/all_solar_term.rb +64 -0
  21. data/lib/zakuro/calculation/monthly/meta/meta_collector.rb +80 -0
  22. data/lib/zakuro/calculation/monthly/meta.rb +60 -0
  23. data/lib/zakuro/calculation/monthly/month.rb +119 -5
  24. data/lib/zakuro/calculation/monthly/operated_month.rb +7 -19
  25. data/lib/zakuro/calculation/option/dropped_date/location.rb +20 -24
  26. data/lib/zakuro/calculation/option/vanished_date/location.rb +9 -2
  27. data/lib/zakuro/calculation/range/abstract_full_range.rb +19 -2
  28. data/lib/zakuro/calculation/range/abstract_operation_range.rb +20 -2
  29. data/lib/zakuro/calculation/range/dated_full_range.rb +8 -3
  30. data/lib/zakuro/calculation/range/dated_operation_range.rb +4 -1
  31. data/lib/zakuro/calculation/range/medieval_annual_range.rb +1 -1
  32. data/lib/zakuro/calculation/range/named_full_range.rb +3 -1
  33. data/lib/zakuro/calculation/range/named_operation_range.rb +3 -1
  34. data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +2 -1
  35. data/lib/zakuro/calculation/range/transfer/year_boundary.rb +10 -8
  36. data/lib/zakuro/calculation/stella/solar/abstract_average.rb +8 -34
  37. data/lib/zakuro/calculation/summary/internal/option.rb +24 -5
  38. data/lib/zakuro/calculation/summary/western/range.rb +8 -1
  39. data/lib/zakuro/calculation/summary/western/single.rb +12 -5
  40. data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +1 -1
  41. data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +1 -1
  42. data/lib/zakuro/era/japan/gengou/alignment.rb +41 -2
  43. data/lib/zakuro/era/japan/gengou/resource/parser.rb +83 -25
  44. data/lib/zakuro/era/japan/gengou/resource/type.rb +81 -26
  45. data/lib/zakuro/era/japan/gengou/resource/validator.rb +100 -21
  46. data/lib/zakuro/era/japan/gengou/resource/yaml/set-001-until-south.yaml +1123 -375
  47. data/lib/zakuro/era/japan/gengou/resource/yaml/set-002-from-north.yaml +487 -163
  48. data/lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml +30 -10
  49. data/lib/zakuro/era/japan/gengou/resource.rb +16 -0
  50. data/lib/zakuro/era/japan/gengou.rb +11 -6
  51. data/lib/zakuro/operation/yaml/month.yaml +4 -36
  52. data/lib/zakuro/output/logger.rb +21 -3
  53. data/lib/zakuro/tools/gengou_range_comparer.rb +82 -0
  54. data/lib/zakuro/tools/remainder_comparer.rb +100 -0
  55. metadata +11 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eef9c974d34a357b894544e6fdd53aa5fd2b33e6586c82dd1358ffc899b1ea7b
4
- data.tar.gz: 190feb3886ad674687408879ee217a7a9e345c4c18d01df5ab933696ab8c531d
3
+ metadata.gz: fffb0d3903b07bc1c5b884bb73bef8a11ff65f5cfdb4c7d2a58df1c2777da633
4
+ data.tar.gz: c4a5ede6b55e073ac1b82b11c4b19a56a7ae7a518391bcde2c86a94461c61928
5
5
  SHA512:
6
- metadata.gz: 0741d6b76105d9d68fb7ecd871020e960069e8c4db157731c516262ee9ff402a269321e9ca977036e04aaa33a9567f372d10263b8b6067929d449cbb6c0a4bb3
7
- data.tar.gz: e804acf9242d08991f4a6eb92e8f72604b60fc00895257014e87535511bd4cac5a3563fb87cb0bf25fef478e8784c908d76d4953c56343b3ca81e212aee127a2
6
+ metadata.gz: d2084bedda00006b2724616daaa6088e9034dd6e878d0ef145801a5da1ffd6e22af953ea812b24efcc996593a3ec0e7c49c368b8105f2a9b5d44efe9a91ff573
7
+ data.tar.gz: b960ab267ecb7667817c780b86b01ec4aac15a0d9f6ebde3a64c01cfd94d0343a9a37550ad9f98ea55a566102bcd426971e0d7ae1864a0a4af807a9414d4a8fd
data/README.md CHANGED
@@ -109,7 +109,7 @@ Or install it yourself as:
109
109
  |項目 |有無|
110
110
  |:----|:----|
111
111
  |[没日](./doc/dropped_date.md)|✓|
112
- |滅日|-|
112
+ |[滅日](./doc/vanished_date.md)|✓|
113
113
 
114
114
  # 例外
115
115
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.9.4
data/doc/dropped_date.md CHANGED
@@ -132,3 +132,28 @@ p.2055-2056
132
132
  #### 没余上限
133
133
 
134
134
  `策餘` (15943)
135
+
136
+
137
+ # 備考
138
+
139
+ ## 二十四節気の引き当て
140
+ 『日本暦日便覧』により、対応する二十四節気nは大余を基準に引き当てる
141
+
142
+ * 二十四節気nの大余 <= 当日の大余(定朔 + 日数 - 1) < 二十四節気n + 1の大余
143
+ * 例外として、定朔の小余と秒が0の場合に限り、次のように計算する
144
+ * 二十四節気nの大余 <= 当日の大余(定朔 + 日数 - 1) < (二十四節気n + 1の大余) + 1
145
+ * 下記計算結果によりこのようになった
146
+ * 貞観12年7月18日
147
+ * 天喜5年3月11日
148
+ * 寛元1年11月4日
149
+ * 永享2年7月26日
150
+ * 元和3年3月19日
151
+
152
+ ## 『日本暦日原典』との照合
153
+ 『日本暦日便覧』は初版を参考にしているものと思われるが、当ライブラリは第四版に準拠するため、次のような相違が見られる
154
+
155
+ | 西暦日 | 和暦日(初版) | 和暦日(第四版) | 備考 |
156
+ | ---------- | ---------------- | ---------------- | ------------------ |
157
+ | 0807-11-29 | 大同2年10月27日 | 大同2年10月26日 | 第四版のみ注釈あり |
158
+ | 0810-12-17 | 弘仁1年11月18日 | 弘仁1年11月17日 | 第四版のみ注釈あり |
159
+ | 0823-12-05 | 弘仁14年10月30日 | 弘仁14年10月29日 | 初版のみ注釈あり |
@@ -95,7 +95,7 @@
95
95
  ,125-1-a,-,125-1-1,125,-,779-4-21,宝亀 10年 4 大 辛未 7-1700,-,-,true,次月大小,-,-,小,大,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
96
96
  ,125-1-1,-,-,125,1,779-5-20,宝亀 10年 5 小 辛丑 36-2820,計算では36庚子であるが続日本紀4月に庚子の記事があるから進朔して37辛丑,5月朔のユリウス暦日は5月21日となる。,-,true,朔日相違,-,-,大,小,-,-,-,-,-,-,庚子,辛丑,779-5-20,779-5-21,36,37,1,1,-,-,-
97
97
  ,125-2-a,-,125-2-1,125,-,779-12-13,宝亀 10年 11 大 丁卯 3-54,-,-,true,次月大小,-,-,小,大,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
98
- ,125-2-1,-,-,125,2,780-1-11,宝亀 10年 12 大 丁酉 32-2481,計算では32丙申であるが翌月の正月が続日本紀によると丁卯朔となっているから,12月丁酉朔にしないと12月が31日になる。したがって12月朔のユリウス暦日は1月12日。,-,true,朔日相違,-,-,大,小,-,-,-,-,-,-,丙申,丁酉,780-1-11,780-1-12,32,33,1,1,-,-,-
98
+ ,125-2-1,-,-,125,2,780-1-11,宝亀 10年 12 大 丁酉 32-2481,計算では32丙申であるが翌月の正月が続日本紀によると丁卯朔となっているから,12月丁酉朔にしないと12月が31日になる。したがって12月朔のユリウス暦日は1月12日。,-,true,朔日相違,-,-,大,大,-,-,-,-,-,-,丙申,丁酉,780-1-11,780-1-12,32,33,1,1,-,-,-
99
99
  ,125-3-1,-,-,125,3,780-2-10,宝亀 11年 1 小 丁卯 2-1828,計算では2丙寅,続日本紀は正月朔丁卯,したがって正月朔のユリウス暦日は2月11日。,-,true,朔日相違,-,-,大,小,-,-,-,-,-,-,丙寅,丁卯,780-2-10,780-2-11,2,3,1,1,-,-,-
100
100
  ,125-4-a,-,125-4-1,125,-,780-3-11,宝亀 11年 2 大 丙申 32-954,-,-,true,次月大小,-,-,小,大,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
101
101
  ,125-4-1,-,-,125,4,780-4-9,宝亀 11年 3 小 丙寅 1-2852,計算では1乙丑,続日本紀は3月朔丙寅,したがって3月朔のユリウス暦日は4月10日。,日本暦日原典の誤り。「したがって正月朔」ではなく「したがって3月朔」,true,朔日相違,-,-,大,小,-,-,-,-,-,-,乙丑,丙寅,780-4-9,780-4-10,1,2,1,1,-,-,-
@@ -351,7 +351,7 @@
351
351
  ,211-1-1,-,-,211,1,1037-4-18,長暦 1年 4 小 甲辰 39-5736,"計算は39癸卯であるが, 行親記により甲辰, 4月甲辰朔のユリウス暦日は4月19日。",-,true,朔日相違,-,-,大,小,-,-,-,-,-,-,癸卯,甲辰,1037-4-18,1037-4-19,39,40,1,1,-,-,-
352
352
  ,215-1-a,-,215-1-2,215,-,1050-10-19,永承 5年 10 小 乙卯 51-7981,-,変更なし,false,次月大小,-,-,小,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
353
353
  ,215-1-0,215-1-2,-,215,-,1050-11-17,永承 5年 閏10 小 甲申 20-5089,-,-,true,朔旦冬至,11月,閏10月,大,小,0,-,-,-,1050-12-17,-,-,-,-,-,-,-,-,-,-,-,-
354
- ,215-1-1,215-1-2,-,215,1,1050-12-17,永承 5年 11 大 癸丑 50-1948,-,-,true,朔旦冬至,閏11月,11月,大,大,-,0,-,-,-,1050-12-17,甲寅,癸丑,1050-12-17,1050-12-16,50,49,-1,-1,-,-,-
354
+ ,215-1-1,215-1-2,-,215,1,1050-12-17,永承 5年 11 大 癸丑 50-1948,-,-,true,朔旦冬至,閏11月,11月,大,大,-,0,-,-,-,1050-11-17,甲寅,癸丑,1050-12-17,1050-12-16,50,49,-1,-1,-,-,-
355
355
  ,215-1-2,-,-,215,1,1051-1-16,永承 5年 12 大 癸未 20-6665,"朔旦冬至にするために, 計算では閏11月であるが, 閏10月に変更された。そのためには中気のない月を閏月にするという規則に合わせるため, 11月朔を50甲寅から癸丑にする必要がある。それにつれて12月は甲申を癸未にしないと11月が31日になってしまう。11月癸丑朔のユリウス暦日は12月16日。12月癸丑朔は1月15日となる。(管見記84, 江次第, 扶桑略記などによる)。",-,true,朔旦冬至,-,-,小,大,-,-,-,-,-,-,甲申,癸未,1051-1-16,1051-1-15,20,19,-1,-1,-,-,-
356
356
  ,220-1-a,-,220-1-1,220,-,1063-9-25,康平 6年 9 大 己亥 35-2001,-,-,true,次月大小,-,-,小,大,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
357
357
  ,220-1-1,-,-,220,1,1063-10-24,康平 6年 10 小 己巳 4-6004,"計算は4戊辰, 扶桑略記により己巳とする。10月己巳朔のユリウス暦日は10月25日。",-,true,朔日相違,-,-,大,小,-,-,-,-,-,-,戊辰,己巳,1063-10-24,1063-10-25,4,5,1,1,-,-,-
@@ -431,9 +431,8 @@
431
431
  ,311-3-1,-,-,311,3,1338-9-15,延元 3年 8 大 壬辰 29-103,"計算では29癸巳, 実夏公記ほか(大日本史料第6編の5)により壬辰, 8月壬辰朔のユリウス暦日は9月14日となる。これは章首のあとの閏8月を避けたものである。(大治4, 西暦1129年の注参照)",-,true,閏8月回避,閏8月,8月,小,大,-,18,-,-,-,1338-8-16,癸巳,壬辰,1338-9-15,1338-9-14,29,28,-1,-1,-,-,-
432
432
  ,313-1-a,-,313-1-1,313,-,1343-12-18,興国 4年 12 小 癸巳 29-814,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
433
433
  ,313-1-1,-,-,313,1,1344-1-17,興国 5年 1 大 壬戌 59-6335,"計算は59癸亥, 園太暦・師守記など(大日本史料第6編の8)により壬戌, 正月壬戌朔のユリウス暦日は1月16日。小余が進朔限に近く, 進朔すべきをしなかった司暦の誤りか。",-,true,進朔なし,-,-,小,大,-,-,-,-,-,-,癸亥,壬戌,1344-1-17,1344-1-16,59,58,-1,-1,-,-,-
434
- ,318-1-a,-,318-1-1,318,-,1357-7-18,正平 12年 7 小 甲戌 10-1300,-,-,true,次月大小,-,-,大,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
435
- ,318-1-0,318-1-1,-,318,-,1357-8-16,正平 12年 閏7 癸卯 39-5146,-,-,true,閏8月回避,8月,閏7月,小,小,18,-,-,-,1357-9-15,-,-,-,-,-,-,-,-,-,-,-,-
436
- ,318-1-1,-,-,318,1,1357-9-15,正平 12年 8 大 壬申 9-357,"計算では9癸酉であるが, 章首のあとの閏8月を避けるため壬申に変え閏7月にしたもの。(大日本史料第6編の21)8月壬申朔のユリウス暦日は9月14日となる。",-,true,閏8月回避,閏8月,8月,大,大,-,18,-,-,-,1357-8-16,癸酉,壬申,1357-9-15,1357-9-14,9,8,-1,-1,-,-,-
434
+ ,318-1-0,318-1-1,-,318,-,1357-8-16,正平 12年 7 小 癸卯 39-5146,-,-,true,閏8月回避,8月,閏7月,大,小,18,-,-,-,1357-9-15,-,-,-,-,-,-,-,-,-,-,-,-
435
+ ,318-1-1,-,-,318,1,1357-9-15,正平 12年 8 壬申 9-357,"計算では9癸酉であるが, 章首のあとの閏8月を避けるため壬申に変え閏7月にしたもの。(大日本史料第6編の21)8月壬申朔のユリウス暦日は9月14日となる。",-,true,閏8月回避,閏8月,8月,小,大,-,18,-,-,-,1357-8-16,癸酉,壬申,1357-9-15,1357-9-14,9,8,-1,-1,-,-,-
437
436
  ,323-1-a,-,323-1-1,323,-,1373-10-17,文中 2年 10 小 己巳 5-473,-,変更なし,false,次月大小,-,-,小,小,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
438
437
  ,323-1-0,323-0-1,-,323,-,1373-11-15,文中 2年 閏10 小 戊戌 34-4924,-,-,true,朔旦冬至,11月,閏10月,大,小,0,-,-,-,1373-12-15,-,-,-,-,-,-,-,-,-,-,-,-
439
438
  ,323-1-1,323-0-1,-,323,1,1373-12-15,文中 2年 11 大 丁卯 4-1834,"計算では4戊辰, 実施暦は丁卯, 11月丁卯朔のユリウス暦日は12月14日である。",-,true,朔旦冬至,閏11月,11月,大,大,-,0,-,-,-,-,戊辰,丁卯,1373-12-15,1373-12-14,4,3,-1,-1,-,-,-
Binary file
data/doc/vanished_date.md CHANGED
@@ -84,3 +84,29 @@ p.2055-2056
84
84
  #### 小余倍率
85
85
 
86
86
  `倍参伍` (2 * 3 * 5) = 30
87
+
88
+ # 備考
89
+
90
+ ## 前月経朔の引き当て
91
+ 『日本暦日便覧』により、前月からの経朔で計算するパターンがある
92
+
93
+ | 天平神護3年3月1日 | 寛平3年5月1日 | 長寛2年11月1日 | 貞治4年閏9月1日 | 永正2年10月1日 | 寛文7年1月1日 |
94
+ | 宝亀6年2月1日 | 天延3年12月1日 | 仁安3年11月1日 | 応安6年9月1日 | 永正10年9月1日 | 延宝2年12月1日 |
95
+ | 承和2年12月1日 | 永観1年11月1日 | 安元2年10月1日 | 永徳1年8月1日 | 天文11年10月1日 | 天和2年11月1日 |
96
+ | 承和10年11月1日 | 正暦2年10月1日 | 元久1年7月1日 | 康応1年7月1日 | 天文19年9月1日 | |
97
+ | 仁寿1年10月1日 | 長保1年9月1日 | 建暦2年6月1日 | 応永4年6月1日 | 永禄1年8月1日 | |
98
+ | 貞観1年9月1日 | 寛弘4年8月1日 | 延慶1年11月1日 | 応永12年5月1日 | 永禄9年8月1日 | |
99
+ | 貞観9年8月1日 | 長和4年7月1日 | 正和1年11月1日 | 応永20年4月1日 | 天正2年7月1日 | |
100
+ | 貞観17年7月1日 | 康平3年7月1日 | 正和5年閏10月1日 | 延徳1年12月1日 | 天正10年6月1日 | |
101
+ | 元慶7年6月1日 | 治暦4年6月1日 | 元応2年10月1日 | 明応6年11月1日 | 天正18年5月1日 | |
102
+
103
+ もし当月の経朔で計算できない場合は、前月からの経朔で計算している
104
+
105
+ ## 『日本暦日原典』との照合
106
+ 『日本暦日便覧』は初版を参考にしているものと思われるが、当ライブラリは第四版に準拠するため、次のような相違が見られる
107
+
108
+ | 西暦日 | 和暦日(初版) | 和暦日(第四版) | 備考 |
109
+ | ---------- | ---------------- | ---------------- | ----------------------------------------------- |
110
+ | 0807-11-27 | 大同2年10月24日 | 大同2年10月23日 | 第四版のみ注釈あり |
111
+ | 0823-12-03 | 弘仁14年10月27日 | 弘仁14年10月26日 | 初版のみ注釈あり |
112
+ | 0794-06-21 | 延暦13年5月19日 | 延暦13年5月18日 | 初版/第四版の注釈相違。第四版では運用値に寄せる |
@@ -163,6 +163,22 @@ module Zakuro
163
163
  clone.set(day: sum_day, minute: sum_minute, second: sum_second)
164
164
  end
165
165
 
166
+ #
167
+ # (非破壊的に)大余のみを加算する
168
+ #
169
+ # @param [Integer] term 他の大余
170
+ #
171
+ # @return [AbstractRemainder] 加算結果
172
+ #
173
+ def add_day(term)
174
+ sum_day = day + term
175
+ sum_day, sum_minute, sum_second = carry(
176
+ sum_day, minute, second
177
+ )
178
+
179
+ clone.set(day: sum_day, minute: sum_minute, second: sum_second)
180
+ end
181
+
166
182
  #
167
183
  # (破壊的に)加算する
168
184
  #
@@ -438,6 +454,16 @@ module Zakuro
438
454
  self
439
455
  end
440
456
 
457
+ #
458
+ # 大余のみか
459
+ #
460
+ # @return [True] 大余のみ
461
+ # @return [False] 小余、秒あり
462
+ #
463
+ def only_day?
464
+ minute.zero? && second.zero?
465
+ end
466
+
441
467
  #
442
468
  # 特定の文字フォーマットにして出力する
443
469
  #
@@ -47,6 +47,12 @@ module Zakuro
47
47
  23 => :taisetsu
48
48
  }.freeze
49
49
 
50
+ # @return [Integer] 開始番号
51
+ FIRST_INDEX = 0
52
+
53
+ # @return [Integer] 終了番号
54
+ LAST_INDEX = 23
55
+
50
56
  #
51
57
  # 初期化
52
58
  #
@@ -141,7 +147,7 @@ module Zakuro
141
147
  #
142
148
  def prev_term
143
149
  @index -= 1
144
- @index = 23 if index.negative?
150
+ @index = ORDER.size - 1 if index.negative?
145
151
 
146
152
  remainder.sub(average)
147
153
  end
@@ -19,9 +19,15 @@ module Zakuro
19
19
  #
20
20
  # @param [Western::Calendar] start_date 西暦開始日(最大範囲)
21
21
  # @param [Western::Calendar] last_date 西暦終了日(最大範囲)
22
+ # @param [True, False] operated 運用値設定
23
+ # @param [True, False] restored 運用値から計算値に戻すか
22
24
  #
23
- def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
24
- range = Reserve::DatedRange.new(start_date: start_date, last_date: last_date)
25
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new,
26
+ operated: false, restored: false)
27
+ range = Reserve::DatedRange.new(
28
+ start_date: start_date, last_date: last_date, operated: operated,
29
+ restored: restored
30
+ )
25
31
  super(range: range)
26
32
  end
27
33
  end
@@ -41,8 +41,8 @@ module Zakuro
41
41
  japan_year: INVALID_YEAR)
42
42
  @gengou = gengou
43
43
  @japan_year = japan_year
44
- @japan_year = gengou.both_start_year.japan if @japan_year == INVALID_YEAR
45
- @western_year = gengou.both_start_year.western
44
+ @japan_year = gengou.start_year.japan if @japan_year == INVALID_YEAR
45
+ @western_year = gengou.start_year.western
46
46
 
47
47
  @start_date = start_date.clone
48
48
  @last_date = last_date.clone
@@ -58,7 +58,7 @@ module Zakuro
58
58
  def japan_start_date
59
59
  return Japan::Calendar.new if gengou.invalid?
60
60
 
61
- gengou.both_start_date.japan
61
+ gengou.start_date.japan
62
62
  end
63
63
 
64
64
  #
@@ -187,7 +187,7 @@ module Zakuro
187
187
  def select_valid_date
188
188
  return if gengou.invalid?
189
189
 
190
- @start_date = gengou.both_start_date.western.clone if start_date.invalid?
190
+ @start_date = gengou.start_date.western.clone if start_date.invalid?
191
191
  @last_date = gengou.last_date.clone if last_date.invalid?
192
192
  end
193
193
 
@@ -197,7 +197,7 @@ module Zakuro
197
197
  # @return [Western::Calendar]設定された元号の開始日
198
198
  #
199
199
  def native_start_date
200
- gengou.both_start_date.western
200
+ gengou.start_date.western
201
201
  end
202
202
 
203
203
  #
@@ -33,6 +33,12 @@ module Zakuro
33
33
  attr_reader :start_date
34
34
  # @return [Western::Calendar] 終了日
35
35
  attr_reader :last_date
36
+ # @return [True] 運用値あり
37
+ # @return [False] 運用値なし
38
+ attr_reader :operated
39
+ # @return [True] 運用値から計算値に戻す
40
+ # @return [False] 運用値から計算値に戻さない
41
+ attr_reader :restored
36
42
  # @return [Array<Japan::Alignment::LinearGengou>] 予約元号一覧
37
43
  attr_reader :list
38
44
 
@@ -42,12 +48,16 @@ module Zakuro
42
48
  # @param [Integer] index n行目元号
43
49
  # @param [Western::Calendar] start_date 開始日
44
50
  # @param [Western::Calendar] last_date 終了日
51
+ # @param [True, False] operated 運用値設定
52
+ # @param [True, False] restored 運用値から計算値に戻すか
45
53
  #
46
54
  def initialize(index:, start_date: Western::Calendar.new,
47
- last_date: Western::Calendar)
55
+ last_date: Western::Calendar, operated: false, restored: false)
48
56
  @index = index
49
57
  @start_date = start_date.clone
50
58
  @last_date = last_date.clone
59
+ @operated = operated
60
+ @restored = restored
51
61
  @list = []
52
62
 
53
63
  update
@@ -106,7 +116,7 @@ module Zakuro
106
116
  def japan_start_date
107
117
  return Japan::Calendar.new if invalid?
108
118
 
109
- list[0].gengou.both_start_date.japan.clone
119
+ list[0].gengou.start_date.japan.clone
110
120
  end
111
121
 
112
122
  #
@@ -117,7 +127,7 @@ module Zakuro
117
127
  def western_start_date
118
128
  return Western::Calendar.new if invalid?
119
129
 
120
- list[0].gengou.both_start_date.western.clone
130
+ list[0].gengou.start_date.western.clone
121
131
  end
122
132
 
123
133
  #
@@ -139,7 +149,7 @@ module Zakuro
139
149
  def western_start_year
140
150
  return INVALID_YEAR if invalid?
141
151
 
142
- list[0].gengou.both_start_year.western.clone
152
+ list[0].gengou.start_year.western.clone
143
153
  end
144
154
 
145
155
  #
@@ -210,7 +220,10 @@ module Zakuro
210
220
  # @return [Array<Japan::Alignment::LinearGengou>] 元号
211
221
  #
212
222
  def line(start_date:, last_date:)
213
- Japan::Gengou.line(line: index, start_date: start_date, last_date: last_date)
223
+ Japan::Gengou.line(
224
+ line: index, start_date: start_date, last_date: last_date, operated: operated,
225
+ restored: restored
226
+ )
214
227
  end
215
228
 
216
229
  #
@@ -26,14 +26,23 @@ module Zakuro
26
26
  #
27
27
  # @param [Western::Calendar] start_date 西暦開始日
28
28
  # @param [Western::Calendar] last_date 西暦終了日
29
+ # @param [True, False] operated 運用値設定
30
+ # @param [True, False] restored 運用値から計算値に戻すか
29
31
  #
30
- def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
32
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new,
33
+ operated: false, restored: false)
31
34
  last_date = start_date.clone if last_date.invalid?
32
35
 
33
- @first_list = DatedList.new(first: true, start_date: start_date, last_date: last_date)
34
- @second_list = DatedList.new(first: false, start_date: start_date, last_date: last_date)
36
+ @first_list = DatedList.new(
37
+ first: true, start_date: start_date, last_date: last_date, operated: operated,
38
+ restored: restored
39
+ )
40
+ @second_list = DatedList.new(
41
+ first: false, start_date: start_date, last_date: last_date, operated: operated,
42
+ restored: restored
43
+ )
35
44
 
36
- renew(last_date: last_date)
45
+ renew(last_date: last_date, operated: operated, restored: restored)
37
46
  end
38
47
 
39
48
  #
@@ -41,16 +50,22 @@ module Zakuro
41
50
  # 含まれる最初の元号が別の行にまたがっている場合に開始日を前倒しする
42
51
  #
43
52
  # @param [Western::Calendar] last_date 西暦終了日
53
+ # @param [True, False] operated 運用値設定
54
+ # @param [True, False] restored 運用値から計算値に戻すか
44
55
  #
45
- def renew(last_date: Western::Calendar.new)
56
+ def renew(last_date: Western::Calendar.new, operated: false, restored: false)
46
57
  start_date = native_start_date
47
58
 
48
59
  return if start_date.invalid?
49
60
 
50
- @first_list = DatedList.new(first: true, start_date: start_date,
51
- last_date: last_date)
52
- @second_list = DatedList.new(first: false, start_date: start_date,
53
- last_date: last_date)
61
+ @first_list = DatedList.new(
62
+ first: true, start_date: start_date, last_date: last_date,
63
+ operated: operated, restored: restored
64
+ )
65
+ @second_list = DatedList.new(
66
+ first: false, start_date: start_date, last_date: last_date,
67
+ operated: operated, restored: restored
68
+ )
54
69
  end
55
70
 
56
71
  #
@@ -21,13 +21,18 @@ module Zakuro
21
21
  # @param [True, False] first true:1行目元号, false:2行目元号
22
22
  # @param [Western::Calendar] start_date 開始日
23
23
  # @param [Western::Calendar] last_date 終了日
24
+ # @param [True, False] operated 運用値設定
25
+ # @param [True, False] restored 運用値から計算値に戻すか
24
26
  #
25
27
  def initialize(first: true, start_date: Western::Calendar.new,
26
- last_date: Western::Calendar)
28
+ last_date: Western::Calendar, operated: false, restored: false)
27
29
  @index = parse_index(first: first)
28
30
  @start_date = start_date.clone
29
31
  @last_date = last_date.invalid? ? start_date.clone : last_date.clone
30
- super(index: @index, start_date: start_date, last_date: last_date)
32
+ super(
33
+ index: @index, start_date: start_date, last_date: last_date, operated: operated,
34
+ restored: restored
35
+ )
31
36
  end
32
37
 
33
38
  #
@@ -19,9 +19,14 @@ module Zakuro
19
19
  #
20
20
  # @param [Western::Calendar] start_date 西暦開始日
21
21
  # @param [Western::Calendar] last_date 西暦終了日
22
+ # @param [True, False] operated 運用値設定
23
+ # @param [True, False] restored 運用値から計算値に戻すか
22
24
  #
23
- def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
24
- super(start_date: start_date, last_date: last_date)
25
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new,
26
+ operated: false, restored: false)
27
+ super(
28
+ start_date: start_date, last_date: last_date, operated: operated, restored: restored
29
+ )
25
30
  end
26
31
  end
27
32
  end
@@ -24,14 +24,22 @@ module Zakuro
24
24
  # @param [True, False] first true:1行目元号, false:2行目元号
25
25
  # @param [String] start_name 開始元号名
26
26
  # @param [String] last_name 終了元号名
27
+ # @param [True, False] operated 運用値設定
28
+ # @param [True, False] restored 運用値から計算値に戻すか
27
29
  #
28
- def initialize(first: true, start_name: INVALID_NAME, last_name: INVALID_NAME)
30
+ def initialize(first: true, start_name: INVALID_NAME, last_name: INVALID_NAME,
31
+ operated: false, restored: false)
29
32
  @index = parse_index(first: first)
30
33
  @start_date = Western::Calendar.new
31
34
  @last_date = Western::Calendar.new
35
+ @operated = operated
36
+ @restored = restored
32
37
 
33
38
  locate(start_name: start_name, last_name: last_name)
34
- super(index: index, start_date: start_date, last_date: last_date)
39
+ super(
40
+ index: index, start_date: start_date, last_date: last_date, operated: operated,
41
+ restored: restored
42
+ )
35
43
  end
36
44
 
37
45
  private
@@ -107,7 +115,9 @@ module Zakuro
107
115
  # @return [Array<Japan::Alignment::LinearGengou>] 元号
108
116
  #
109
117
  def line_by_name(name:)
110
- Japan::Gengou.line_by_name(line: index, name: name)
118
+ Japan::Gengou.line_by_name(
119
+ line: index, name: name, operated: operated, restored: restored
120
+ )
111
121
  end
112
122
 
113
123
  #
@@ -23,15 +23,26 @@ module Zakuro
23
23
  #
24
24
  # @param [String] start_name 開始元号名
25
25
  # @param [String] last_name 終了元号名
26
+ # @param [True, False] operated 運用値設定
27
+ # @param [True, False] restored 運用値から計算値に戻すか
26
28
  #
27
- def initialize(start_name: INVALID_NAME, last_name: INVALID_NAME)
28
- @first_list = NamedList.new(first: true, start_name: start_name, last_name: last_name)
29
- @second_list = NamedList.new(first: false, start_name: start_name, last_name: last_name)
29
+ def initialize(start_name: INVALID_NAME, last_name: INVALID_NAME,
30
+ operated: false, restored: false)
31
+ @first_list = NamedList.new(
32
+ first: true, start_name: start_name, last_name: last_name, operated: operated,
33
+ restored: restored
34
+ )
35
+ @second_list = NamedList.new(
36
+ first: false, start_name: start_name, last_name: last_name, operated: operated,
37
+ restored: restored
38
+ )
30
39
 
31
40
  start_date = western_start_date
32
41
  last_date = western_last_date
33
42
 
34
- super(start_date: start_date, last_date: last_date)
43
+ super(
44
+ start_date: start_date, last_date: last_date, operated: operated, restored: restored
45
+ )
35
46
  end
36
47
 
37
48
  #
@@ -19,9 +19,15 @@ module Zakuro
19
19
  #
20
20
  # @param [String] start_name 開始元号名
21
21
  # @param [String] last_name 終了元号名
22
+ # @param [True, False] operated 運用値設定
23
+ # @param [True, False] restored 運用値から計算値に戻すか
22
24
  #
23
- def initialize(start_name: INVALID_NAME, last_name: INVALID_NAME)
24
- range = Reserve::NamedRange.new(start_name: start_name, last_name: last_name)
25
+ def initialize(start_name: INVALID_NAME, last_name: INVALID_NAME,
26
+ operated: false, restored: false)
27
+ range = Reserve::NamedRange.new(
28
+ start_name: start_name, last_name: last_name, operated: operated,
29
+ restored: restored
30
+ )
25
31
  super(range: range)
26
32
  end
27
33
  end
@@ -31,11 +31,13 @@ module Zakuro
31
31
  # @param [FirstDay] first_day 月初日(朔日)
32
32
  # @param [True, False] is_last_year 昨年の月/今年の月
33
33
  # @param [Integer] phase_index 月齢(朔月、上弦、望月、下弦)
34
+ # @param [Meta] meta 付加情報
34
35
  #
35
36
  def initialize(context:, month_label: MonthLabel.new, solar_terms: [],
36
- first_day: FirstDay.new, is_last_year: false, phase_index: -1)
37
+ first_day: FirstDay.new, is_last_year: false, phase_index: -1,
38
+ meta: Meta.new)
37
39
  super(context: context, month_label: month_label, solar_terms: solar_terms,
38
- first_day: first_day)
40
+ first_day: first_day, meta: meta)
39
41
  @is_last_year = is_last_year
40
42
  @phase_index = phase_index
41
43
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module Zakuro
5
+ # :nodoc:
6
+ module Calculation
7
+ # :nodoc:
8
+ module Monthly
9
+ #
10
+ # AllSolarTerm 月内の全ての二十四節気
11
+ #
12
+ module AllSolarTerm
13
+ class << self
14
+ #
15
+ # 取得する
16
+ #
17
+ # @param [Monthly::Month] before_month 前月
18
+ # @param [Monthly::Month] current_month 当月
19
+ #
20
+ # @return [Array<Cycle::AbstractSolarTerm>] その月の全ての二十四節気
21
+ #
22
+ def get(before_month:, current_month:)
23
+ remainder = current_month.remainder
24
+ solar_terms = current_month.solar_terms
25
+ before_solar_terms = before_month.solar_terms
26
+
27
+ resolve(
28
+ remainder: remainder, solar_terms: solar_terms,
29
+ before_solar_terms: before_solar_terms
30
+ )
31
+ end
32
+
33
+ private
34
+
35
+ #
36
+ # 前月を使用して解決する
37
+ #
38
+ # @param [Cycle::AbstractRemainder] remainder 月初日の大余小余
39
+ # @param [Array<Cycle::AbstractSolarTerm>] solar_terms その月の二十四節気
40
+ # @param [Array<Cycle::AbstractSolarTerm>] before_solar_terms 前月の二十四節気
41
+ #
42
+ # @return [Array<Cycle::AbstractSolarTerm>] その月の全ての二十四節気
43
+ #
44
+ def resolve(remainder:, solar_terms: [], before_solar_terms: [])
45
+ all_solar_terms = solar_terms.clone.each(&:clone)
46
+
47
+ return all_solar_terms if all_solar_terms.empty?
48
+
49
+ first = all_solar_terms[0].clone
50
+
51
+ return all_solar_terms if before_solar_terms.size.zero?
52
+
53
+ # 最初の二十四節気が月初日と同日であれば何もしない
54
+ return all_solar_terms if first.remainder.day == remainder.day
55
+
56
+ all_solar_terms.unshift(before_solar_terms[-1].clone)
57
+
58
+ all_solar_terms
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end