zakuro 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) 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 +1 -1
  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 +1 -1
  10. data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +6 -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 +12 -5
  13. data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +9 -3
  14. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +3 -2
  15. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +4 -2
  16. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +5 -3
  17. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +9 -4
  18. data/lib/zakuro/calculation/era/gengou/named_scroll.rb +5 -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 +60 -5
  24. data/lib/zakuro/calculation/monthly/operated_month.rb +5 -19
  25. data/lib/zakuro/calculation/option/dropped_date/location.rb +12 -23
  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 +3 -1
  30. data/lib/zakuro/calculation/range/dated_operation_range.rb +3 -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/specifier/single_day.rb +1 -1
  39. data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +1 -1
  40. data/lib/zakuro/era/japan/gengou/alignment.rb +14 -2
  41. data/lib/zakuro/era/japan/gengou/resource/parser.rb +83 -25
  42. data/lib/zakuro/era/japan/gengou/resource/type.rb +81 -26
  43. data/lib/zakuro/era/japan/gengou/resource/validator.rb +100 -21
  44. data/lib/zakuro/era/japan/gengou/resource/yaml/set-001-until-south.yaml +1123 -375
  45. data/lib/zakuro/era/japan/gengou/resource/yaml/set-002-from-north.yaml +487 -163
  46. data/lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml +30 -10
  47. data/lib/zakuro/era/japan/gengou/resource.rb +16 -0
  48. data/lib/zakuro/era/japan/gengou.rb +7 -4
  49. data/lib/zakuro/operation/yaml/month.yaml +1 -1
  50. data/lib/zakuro/output/logger.rb +21 -3
  51. data/lib/zakuro/tools/remainder_comparer.rb +97 -0
  52. metadata +6 -2
@@ -5,16 +5,24 @@ last_year:
5
5
  japan: 7981
6
6
  western: 9999
7
7
  last_date:
8
- japan: 令和7981年12月31日
9
- western: '9999-12-31'
8
+ calculation:
9
+ japan: ''
10
+ western: ''
11
+ operation:
12
+ japan: 令和7981年12月31日
13
+ western: '9999-12-31'
10
14
  list:
11
15
  - name: 明治
12
16
  start_year:
13
17
  japan: 1
14
18
  western: 1868
15
19
  start_date:
16
- japan: 明治01年09月08日
17
- western: '1868-10-23'
20
+ calculation:
21
+ japan: ''
22
+ western: ''
23
+ operation:
24
+ japan: 明治01年09月08日
25
+ western: '1868-10-23'
18
26
  disuse:
19
27
  new_year_date: '1868-1-25'
20
28
  note: ''
@@ -23,8 +31,12 @@ list:
23
31
  japan: 1
24
32
  western: 1912
25
33
  start_date:
26
- japan: 大正01年07月30日
27
- western: '1912-7-30'
34
+ calculation:
35
+ japan: ''
36
+ western: ''
37
+ operation:
38
+ japan: 大正01年07月30日
39
+ western: '1912-7-30'
28
40
  disuse:
29
41
  new_year_date: '1912-1-1'
30
42
  note: ''
@@ -33,8 +45,12 @@ list:
33
45
  japan: 1
34
46
  western: 1926
35
47
  start_date:
36
- japan: 昭和01年12月25日
37
- western: '1926-12-25'
48
+ calculation:
49
+ japan: ''
50
+ western: ''
51
+ operation:
52
+ japan: 昭和01年12月25日
53
+ western: '1926-12-25'
38
54
  disuse:
39
55
  new_year_date: '1926-1-1'
40
56
  note: ''
@@ -43,8 +59,12 @@ list:
43
59
  japan: 1
44
60
  western: 2019
45
61
  start_date:
46
- japan: 令和01年05月01日
47
- western: '2019-5-1'
62
+ calculation:
63
+ japan: ''
64
+ western: ''
65
+ operation:
66
+ japan: 令和01年05月01日
67
+ western: '2019-5-1'
48
68
  disuse:
49
69
  new_year_date: '2019-1-1'
50
70
  note: ''
@@ -27,6 +27,22 @@ module Zakuro
27
27
  __dir__
28
28
  ))
29
29
  ].freeze
30
+
31
+ # @return [Array<Set>] 元号セット情報リスト(運用値)
32
+ OPERATED_LIST = [
33
+ Parser.run(filepath: File.expand_path(
34
+ './resource/yaml/set-001-until-south.yaml',
35
+ __dir__
36
+ ), operated: true),
37
+ Parser.run(filepath: File.expand_path(
38
+ './resource/yaml/set-002-from-north.yaml',
39
+ __dir__
40
+ ), operated: true),
41
+ Parser.run(filepath: File.expand_path(
42
+ './resource/yaml/set-003-modern.yaml',
43
+ __dir__
44
+ ), operated: true)
45
+ ].freeze
30
46
  end
31
47
  end
32
48
  end
@@ -26,13 +26,15 @@ module Zakuro
26
26
  # @param [Integer] line 行番号
27
27
  # @param [Western::Calendar] start_date 開始日
28
28
  # @param [Western::Calendar] last_date 終了日
29
+ # @param [True, False] operated 運用値設定
29
30
  #
30
31
  # @return [Array<LinearGengou>] 該当行の元号
31
32
  #
32
33
  def line(line: FIRST_LINE,
33
- start_date: Western::Calendar.new, last_date: Western::Calendar.new)
34
+ start_date: Western::Calendar.new, last_date: Western::Calendar.new,
35
+ operated: false)
34
36
  Alignment.get(
35
- line: line, start_date: start_date, last_date: last_date
37
+ line: line, start_date: start_date, last_date: last_date, operated: operated
36
38
  )
37
39
  end
38
40
 
@@ -42,11 +44,12 @@ module Zakuro
42
44
  # @param [Integer] line 行番号
43
45
  # @param [Western::Calendar] start_date 開始日
44
46
  # @param [Western::Calendar] last_date 終了日
47
+ # @param [True, False] operated 運用値設定
45
48
  #
46
49
  # @return [Array<LinearGengou>] 該当行の元号
47
50
  #
48
- def line_by_name(line: FIRST_LINE, name:)
49
- Alignment.get_by_name(line: line, name: name)
51
+ def line_by_name(line: FIRST_LINE, name:, operated: false)
52
+ Alignment.get_by_name(line: line, name: name, operated: operated)
50
53
  end
51
54
  end
52
55
  end
@@ -3091,7 +3091,7 @@
3091
3091
  dest: "-"
3092
3092
  days:
3093
3093
  src: 大
3094
- dest:
3094
+ dest:
3095
3095
  solar_term:
3096
3096
  src:
3097
3097
  index: "-"
@@ -9,6 +9,7 @@ module Zakuro
9
9
  # @note 本番では使用しない
10
10
  #
11
11
  class Logger
12
+ # @return [Hash<Symbol, Integer>] ログレベル
12
13
  LEVELS = {
13
14
  none: -1,
14
15
  debug: 0,
@@ -17,6 +18,7 @@ module Zakuro
17
18
  error: 3
18
19
  }.freeze
19
20
 
21
+ # @return [Integer] 現在ログレベル
20
22
  LEVEL = LEVELS[:none]
21
23
 
22
24
  # @return [String] 呼び出し位置
@@ -32,7 +34,9 @@ module Zakuro
32
34
  # @param [String] messages メッセージ
33
35
  #
34
36
  def debug(*messages)
35
- return if LEVEL < LEVELS[:debug]
37
+ return if none?
38
+
39
+ return if LEVEL >= LEVELS[:debug]
36
40
 
37
41
  output('DEBUG', *messages)
38
42
  end
@@ -43,7 +47,9 @@ module Zakuro
43
47
  # @param [String] messages メッセージ
44
48
  #
45
49
  def info(*messages)
46
- return if LEVEL < LEVELS[:info]
50
+ return if none?
51
+
52
+ return if LEVEL >= LEVELS[:info]
47
53
 
48
54
  output('INFO', *messages)
49
55
  end
@@ -55,7 +61,9 @@ module Zakuro
55
61
  # @param [String] messages メッセージ
56
62
  #
57
63
  def error(error, *messages)
58
- return if LEVEL < LEVELS[:error]
64
+ return if none?
65
+
66
+ return if LEVEL >= LEVELS[:error]
59
67
 
60
68
  output('ERROR', *messages)
61
69
  output('ERROR', error.message)
@@ -64,6 +72,16 @@ module Zakuro
64
72
 
65
73
  private
66
74
 
75
+ #
76
+ # 出力なしか
77
+ #
78
+ # @return [True] 出力なし
79
+ # @return [False] 出力あり
80
+ #
81
+ def none?
82
+ LEVEL < LEVELS[:debug]
83
+ end
84
+
67
85
  #
68
86
  # 標準出力を行う
69
87
  #
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../output/logger'
4
+
5
+ require_relative '../calculation/cycle/abstract_remainder'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ #
10
+ # Tools 汎用メソッド群
11
+ #
12
+ module Tools
13
+ #
14
+ # RemainderComparer 大余小余比較
15
+ #
16
+ module RemainderComparer
17
+ LOGGER = Output::Logger.new(location: 'RemainderComparer')
18
+
19
+ class << self
20
+ #
21
+ # 大余を基準に範囲チェックをする
22
+ #
23
+ # 次のパターンで用いる
24
+ # 1. 月内(当月朔日から当月末日(来月朔日の前日)の間)に二十四節気があるか
25
+ # * target: 二十四節気
26
+ # * start: 当月朔日
27
+ # * last: 次月朔日
28
+ # 2. ある二十四節気に対象の日があるか
29
+ # * target: 対象の日
30
+ # * start: 二十四節気
31
+ # * last: 次の二十四節気
32
+ #
33
+ # @param [Calcuration::Cycle::AbstractRemainder] target 対象日
34
+ # @param [Calcuration::Cycle::AbstractRemainder] start 範囲開始
35
+ # @param [Calcuration::Cycle::AbstractRemainder] last 範囲終了
36
+ #
37
+ # @return [True] 対象日がある
38
+ # @return [False] 対象日がない
39
+ #
40
+ def in_range?(target:, start:, last:)
41
+ # 『日本暦日便覧』では下記5日を没日ありとしている
42
+ # これは二十四節気の小余と秒が0の場合に限って、範囲を翌日にずらすことを指している
43
+ #
44
+ # * 貞観12年7月18日
45
+ # * 天喜5年3月11日
46
+ # * 寛元1年11月4日
47
+ # * 永享2年7月26日
48
+ # * 元和3年3月19日
49
+ #
50
+ last_day = last.only_day? ? last.day + 1 : last.day
51
+ in_range_day?(target: target.day, start: start.day, last: last_day)
52
+ end
53
+
54
+ #
55
+ # 大余を基準に範囲チェックをする
56
+ #
57
+ # @param [Calcuration::Cycle::AbstractRemainder] target 対象日
58
+ # @param [Calcuration::Cycle::AbstractRemainder] start 範囲開始
59
+ # @param [Integer] limit 大余上限
60
+ #
61
+ # @return [True] 対象日がある
62
+ # @return [False] 対象日がない
63
+ #
64
+ def in_limit?(target:, start:, limit:)
65
+ last_day = start.add_day(limit).day
66
+
67
+ in_range_day?(target: target.day, start: start.day, last: last_day)
68
+ end
69
+
70
+ private
71
+
72
+ #
73
+ # 大余を基準に範囲チェックをする
74
+ #
75
+ # @note 大余60で一巡するため 以下2パターンがある
76
+ # * start <= last : (二十四節気) >= start && (二十四節気) < last
77
+ # * start > last : (二十四節気) >= start || (二十四節気) < last
78
+ #
79
+ # @param [Integer] target 対象日
80
+ # @param [Integer] start 範囲開始
81
+ # @param [Integer] last 範囲終了
82
+ #
83
+ # @return [True] 対象日がある
84
+ # @return [False] 対象日がない
85
+ #
86
+ def in_range_day?(target:, start:, last:)
87
+ start_over = (target >= start)
88
+ last_under = (target < last)
89
+
90
+ return start_over && last_under if start <= last
91
+
92
+ start_over || last_under
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zakuro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - pldb
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-29 00:00:00.000000000 Z
11
+ date: 2023-03-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: mainly lunar solar calendar
14
14
  email:
@@ -86,6 +86,9 @@ files:
86
86
  - lib/zakuro/calculation/monthly/const.rb
87
87
  - lib/zakuro/calculation/monthly/first_day.rb
88
88
  - lib/zakuro/calculation/monthly/initialized_month.rb
89
+ - lib/zakuro/calculation/monthly/meta.rb
90
+ - lib/zakuro/calculation/monthly/meta/all_solar_term.rb
91
+ - lib/zakuro/calculation/monthly/meta/meta_collector.rb
89
92
  - lib/zakuro/calculation/monthly/month.rb
90
93
  - lib/zakuro/calculation/monthly/month_label.rb
91
94
  - lib/zakuro/calculation/monthly/operated_month.rb
@@ -181,6 +184,7 @@ files:
181
184
  - lib/zakuro/result/operation/month/annotation.rb
182
185
  - lib/zakuro/result/operation/month/history.rb
183
186
  - lib/zakuro/result/result.rb
187
+ - lib/zakuro/tools/remainder_comparer.rb
184
188
  - lib/zakuro/tools/stringifier.rb
185
189
  - lib/zakuro/tools/typeconv.rb
186
190
  - lib/zakuro/tools/typeof.rb