zakuro 0.9.0 → 0.9.2

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +50 -178
  3. data/VERSION +1 -1
  4. data/doc/condition.md +38 -0
  5. data/doc/dropped_date.md +41 -0
  6. data/doc/expection.md +119 -0
  7. data/doc/operation/csv/month.csv +4 -4
  8. data/doc/operation/operation.xlsx +0 -0
  9. data/doc/usage.md +120 -0
  10. data/doc/vanished_date.md +86 -0
  11. data/doc/version/daien.md +163 -0
  12. data/doc/version/genka.md +116 -0
  13. data/doc/version/gihou.md +172 -0
  14. data/doc/version/section/common_post_process.md +60 -0
  15. data/doc/version/section/common_pre_process.md +185 -0
  16. data/doc/version/section/const.md +45 -0
  17. data/doc/version/section/decimal.md +101 -0
  18. data/doc/version/section/lunisolar_calendar.md +55 -0
  19. data/doc/version/section/senmyou_november_1st.md +41 -0
  20. data/{lib/zakuro/version/senmyou/README.md → doc/version/senmyou.md} +15 -168
  21. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +58 -0
  22. data/lib/zakuro/calculation/era/gengou/abstract_scroll.rb +2 -2
  23. data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +5 -5
  24. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +1 -1
  25. data/lib/zakuro/calculation/monthly/first_day.rb +9 -1
  26. data/lib/zakuro/calculation/monthly/operated_month.rb +18 -1
  27. data/lib/zakuro/calculation/option/vanished_date/abstract_parameter.rb +40 -0
  28. data/lib/zakuro/calculation/option/vanished_date/location.rb +84 -0
  29. data/lib/zakuro/calculation/range/medieval_annual_range.rb +5 -3
  30. data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +1 -0
  31. data/lib/zakuro/calculation/stella/lunar/abstract_location.rb +6 -2
  32. data/lib/zakuro/calculation/stella/lunar/choukei_value.rb +14 -0
  33. data/lib/zakuro/calculation/summary/internal/option.rb +71 -9
  34. data/lib/zakuro/context/option.rb +17 -0
  35. data/lib/zakuro/context/version_class_resolver.rb +17 -1
  36. data/lib/zakuro/era/japan/calendar.rb +2 -2
  37. data/lib/zakuro/era/japan/gengou/resource/validator.rb +2 -2
  38. data/lib/zakuro/era/western/calendar.rb +5 -11
  39. data/lib/zakuro/era/western/date_text.rb +40 -0
  40. data/lib/zakuro/gateway/locale/date.rb +2 -2
  41. data/lib/zakuro/operation/month/validator.rb +7 -1
  42. data/lib/zakuro/operation/yaml/month.yaml +14 -14
  43. data/lib/zakuro/result/data/option/vanished_date/calculation.rb +45 -0
  44. data/lib/zakuro/result/data/option/vanished_date/option.rb +47 -0
  45. data/lib/zakuro/result/data/single_day.rb +2 -0
  46. data/lib/zakuro/version/daien/const/number.rb +2 -0
  47. data/lib/zakuro/version/daien/const/remainder.rb +7 -2
  48. data/lib/zakuro/version/daien/cycle/remainder.rb +38 -20
  49. data/lib/zakuro/version/daien/monthly/lunar_phase.rb +2 -4
  50. data/lib/zakuro/version/daien/option/dropped_date/parameter.rb +5 -3
  51. data/lib/zakuro/version/daien/option/vanished_date/parameter.rb +33 -0
  52. data/lib/zakuro/version/daien/stella/lunar/location.rb +5 -8
  53. data/lib/zakuro/version/genka/cycle/remainder.rb +6 -2
  54. data/lib/zakuro/version/genka/monthly/lunar_phase.rb +14 -3
  55. data/lib/zakuro/version/genka/option/vanished_date/parameter.rb +31 -0
  56. data/lib/zakuro/version/gihou/const/remainder.rb +1 -5
  57. data/lib/zakuro/version/gihou/cycle/remainder.rb +0 -26
  58. data/lib/zakuro/version/gihou/monthly/lunar_phase.rb +2 -4
  59. data/lib/zakuro/version/gihou/option/vanished_date/parameter.rb +31 -0
  60. data/lib/zakuro/version/gihou/stella/lunar/location.rb +5 -8
  61. data/lib/zakuro/version/senmyou/const/number.rb +3 -1
  62. data/lib/zakuro/version/senmyou/const/remainder.rb +4 -2
  63. data/lib/zakuro/version/senmyou/cycle/remainder.rb +17 -34
  64. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +5 -5
  65. data/lib/zakuro/version/senmyou/option/vanished_date/parameter.rb +33 -0
  66. data/lib/zakuro/version/senmyou/stella/lunar/location.rb +6 -8
  67. data/lib/zakuro/version/senmyou/stella/lunar/value.rb +9 -0
  68. metadata +25 -3
@@ -3,8 +3,10 @@
3
3
  require_relative '../../../context/option'
4
4
  require_relative '../../../result/data/option/dropped_date/option'
5
5
  require_relative '../../../result/data/solar_term'
6
+ require_relative '../../../result/data/option/vanished_date/option'
6
7
 
7
8
  require_relative '../../option/dropped_date/location'
9
+ require_relative '../../option/vanished_date/location'
8
10
 
9
11
  # :nodoc:
10
12
  module Zakuro
@@ -26,6 +28,8 @@ module Zakuro
26
28
  # @return [Hash<String, Result::Data::Option::AbstractOption>] オプション結果
27
29
  #
28
30
  def create(month:, day:)
31
+ # TODO: refactor
32
+
29
33
  options = {}
30
34
  context = month.context
31
35
 
@@ -38,6 +42,15 @@ module Zakuro
38
42
  options[Context::Option::DROPPED_DATE_KEY] = option
39
43
  end
40
44
 
45
+ if context.option.vanished_date?
46
+ remainder = day.remainder
47
+ average_remainder = month.first_day.average_remainder
48
+ option = vanished_date(
49
+ context: context, remainder: remainder, average_remainder: average_remainder
50
+ )
51
+ options[Context::Option::VANISHED_DATE_KEY] = option
52
+ end
53
+
41
54
  options
42
55
  end
43
56
 
@@ -53,10 +66,7 @@ module Zakuro
53
66
  # @return [Result::Data::Option::DroppedDate::Option] 没日
54
67
  #
55
68
  def dropped_date(context:, remainder:, solar_terms:)
56
- option = Result::Data::Option::DroppedDate::Option.new(
57
- matched: false,
58
- calculation: Result::Data::Option::DroppedDate::Calculation.new
59
- )
69
+ option = Result::Data::Option::DroppedDate::Option.new
60
70
 
61
71
  return option if remainder.invalid?
62
72
 
@@ -68,23 +78,24 @@ module Zakuro
68
78
 
69
79
  dropped_date = location.get
70
80
 
71
- return option unless remainder.day == dropped_date.day
72
-
73
- dropped_date_option(location: location)
81
+ dropped_date_option(
82
+ matched: remainder.day == dropped_date.day, location: location
83
+ )
74
84
  end
75
85
 
76
86
  #
77
87
  # 没日オプション値を生成する
78
88
  #
89
+ # @param [True, False] matched 没日有無
79
90
  # @param [Calculation::Option::DroppedDate::Location] location 没日位置
80
91
  #
81
92
  # @return [Result::Data::Option::DroppedDate::Option] 没日オプション値
82
93
  #
83
- def dropped_date_option(location:)
94
+ def dropped_date_option(matched:, location:)
84
95
  dropped_date = location.get
85
96
  solar_term = location.solar_term
86
97
  Result::Data::Option::DroppedDate::Option.new(
87
- matched: true,
98
+ matched: matched,
88
99
  calculation: Result::Data::Option::DroppedDate::Calculation.new(
89
100
  remainder: dropped_date.format,
90
101
  solar_term: Result::Data::SolarTerm.new(
@@ -94,6 +105,57 @@ module Zakuro
94
105
  )
95
106
  )
96
107
  end
108
+
109
+ #
110
+ # 滅日を求める
111
+ #
112
+ # @param [Context::Context] context 暦コンテキスト
113
+ # @param [Cycle::AbstractRemainder] remainder 当日和暦日
114
+ # @param [Cycle::AbstractRemainder] average_remainder 経朔
115
+ #
116
+ # @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
117
+ #
118
+ def vanished_date(context:, remainder:, average_remainder:)
119
+ return Result::Data::Option::VanishedDate::Option.new if average_remainder.invalid?
120
+
121
+ location = Calculation::Option::VanishedDate::Location.new(
122
+ context: context, average_remainder: average_remainder
123
+ )
124
+
125
+ unless location.exist?
126
+ # 結果確認のため経朔だけは設定する
127
+ return Result::Data::Option::VanishedDate::Option.new(
128
+ calculation: Result::Data::Option::VanishedDate::Calculation.new(
129
+ average_remainder: average_remainder
130
+ )
131
+ )
132
+ end
133
+
134
+ vanished_date = location.get
135
+
136
+ vanished_date_option(
137
+ matched: remainder.day == vanished_date.day, location: location
138
+ )
139
+ end
140
+
141
+ #
142
+ # 滅日オプション値を生成する
143
+ #
144
+ # @param [True, False] matched 滅日有無
145
+ # @param [Calculation::Option::VanishedDate::Location] location 滅日位置
146
+ #
147
+ # @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
148
+ #
149
+ def vanished_date_option(matched:, location:)
150
+ vanished_date = location.get
151
+ Result::Data::Option::VanishedDate::Option.new(
152
+ matched: matched,
153
+ calculation: Result::Data::Option::VanishedDate::Calculation.new(
154
+ remainder: vanished_date.format,
155
+ average_remainder: location.average_remainder
156
+ )
157
+ )
158
+ end
97
159
  end
98
160
  end
99
161
  end
@@ -16,6 +16,9 @@ module Zakuro
16
16
  # @return [String] 没日オプションキー名
17
17
  DROPPED_DATE_KEY = 'dropped_date'
18
18
 
19
+ # @return [String] 滅日オプションキー名
20
+ VANISHED_DATE_KEY = 'vanished_date'
21
+
19
22
  # @return [Hash<String, Object>] オプション値
20
23
  attr_reader :hash
21
24
  # @return [String] デフォルト暦名
@@ -82,6 +85,20 @@ module Zakuro
82
85
  false
83
86
  end
84
87
 
88
+ #
89
+ # 滅日か
90
+ #
91
+ # @return [True] 滅日あり
92
+ # @return [False] 滅日なし
93
+ #
94
+ def vanished_date?
95
+ value = @hash[VANISHED_DATE_KEY]
96
+
97
+ return true if value.is_a?(TrueClass)
98
+
99
+ false
100
+ end
101
+
85
102
  class << self
86
103
  #
87
104
  # 暦名を返す
@@ -4,21 +4,25 @@ require_relative '../version/genka/cycle/remainder'
4
4
  require_relative '../version/genka/cycle/solar_term'
5
5
  require_relative '../version/genka/range/annual_range'
6
6
  require_relative '../version/genka/option/dropped_date/parameter'
7
+ require_relative '../version/genka/option/vanished_date/parameter'
7
8
 
8
9
  require_relative '../version/gihou/cycle/remainder'
9
10
  require_relative '../version/gihou/cycle/solar_term'
10
11
  require_relative '../version/gihou/range/annual_range'
11
12
  require_relative '../version/gihou/option/dropped_date/parameter'
13
+ require_relative '../version/gihou/option/vanished_date/parameter'
12
14
 
13
15
  require_relative '../version/daien/cycle/remainder'
14
16
  require_relative '../version/daien/cycle/solar_term'
15
17
  require_relative '../version/daien/range/annual_range'
16
18
  require_relative '../version/daien/option/dropped_date/parameter'
19
+ require_relative '../version/daien/option/vanished_date/parameter'
17
20
 
18
21
  require_relative '../version/senmyou/cycle/remainder'
19
22
  require_relative '../version/senmyou/cycle/solar_term'
20
23
  require_relative '../version/senmyou/range/annual_range'
21
24
  require_relative '../version/senmyou/option/dropped_date/parameter'
25
+ require_relative '../version/senmyou/option/vanished_date/parameter'
22
26
 
23
27
  # :nodoc:
24
28
  module Zakuro
@@ -36,7 +40,8 @@ module Zakuro
36
40
  'remainder' => 'Zakuro::$VERSION::Cycle::Remainder',
37
41
  'solar_term' => 'Zakuro::$VERSION::Cycle::SolarTerm',
38
42
  'annual_range' => 'Zakuro::$VERSION::Range::AnnualRange',
39
- 'dropped_date_parameter' => 'Zakuro::$VERSION::Option::DroppedDate::Parameter'
43
+ 'dropped_date_parameter' => 'Zakuro::$VERSION::Option::DroppedDate::Parameter',
44
+ 'vanished_date_parameter' => 'Zakuro::$VERSION::Option::VanishedDate::Parameter'
40
45
  }.freeze
41
46
 
42
47
  #
@@ -86,6 +91,17 @@ module Zakuro
86
91
  )
87
92
  end
88
93
 
94
+ #
95
+ # 滅日引数を返す
96
+ #
97
+ # @return [Class] 没日引数クラス
98
+ #
99
+ def vanished_date_parameter
100
+ self.class.get_class(
101
+ version_name: @version_name, class_name: 'vanished_date_parameter'
102
+ )
103
+ end
104
+
89
105
  class << self
90
106
  #
91
107
  # 該当の暦のクラスを取得する
@@ -98,7 +98,7 @@ module Zakuro
98
98
  # @return [Calendar] 年月日情報(和暦)
99
99
  #
100
100
  def parse(regex: FORMAT, text: '')
101
- return Calendar.new unless valid_date_string(regex: regex, text: text)
101
+ return Calendar.new unless valid_date_text(regex: regex, text: text)
102
102
 
103
103
  matched = text.match(regex)
104
104
 
@@ -120,7 +120,7 @@ module Zakuro
120
120
  # @return [True] 正しい
121
121
  # @return [True] 正しくない
122
122
  #
123
- def valid_date_string(regex: FORMAT, text: '')
123
+ def valid_date_text(regex: FORMAT, text: '')
124
124
  return false unless text
125
125
 
126
126
  matched = text.match(regex)
@@ -315,7 +315,7 @@ module Zakuro
315
315
  # @return [False] 正しくない
316
316
  #
317
317
  def japan?
318
- Japan::Calendar.valid_date_string(text: japan)
318
+ Japan::Calendar.valid_date_text(text: japan)
319
319
  end
320
320
 
321
321
  #
@@ -325,7 +325,7 @@ module Zakuro
325
325
  # @return [False] 正しくない
326
326
  #
327
327
  def western?
328
- Western::Calendar.valid_date_string(text: western)
328
+ Western::Calendar.valid_date_text(text: western)
329
329
  end
330
330
  end
331
331
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative './date_text'
4
+
3
5
  require 'date'
4
6
 
5
7
  # :nodoc:
@@ -402,9 +404,7 @@ module Zakuro
402
404
  # @raise [ArgumentError] 引数エラー
403
405
  #
404
406
  def parse(text: '', type: Type::DEFAULT)
405
- unless valid_date_string(text: text, type: type)
406
- raise ArgumentError, "invalid date string: #{text}"
407
- end
407
+ raise ArgumentError, "invalid date string: #{text}" unless valid_date_text(text: text)
408
408
 
409
409
  start = DATE_START.fetch(type, DATE_START[Type::DEFAULT])
410
410
  date = Date.parse(text, start)
@@ -423,14 +423,8 @@ module Zakuro
423
423
  # @return [True] 正しい
424
424
  # @return [True] 正しくない
425
425
  #
426
- def valid_date_string(text: '', type: Type::DEFAULT)
427
- start = DATE_START.fetch(type, DATE_START[Type::DEFAULT])
428
- begin
429
- Date.parse(text, start)
430
- rescue ArgumentError => _e
431
- return false
432
- end
433
- true
426
+ def valid_date_text(text: '')
427
+ DateText.validate(text: text)
434
428
  end
435
429
  end
436
430
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module Zakuro
5
+ #
6
+ # Western 西暦
7
+ #
8
+ module Western
9
+ #
10
+ # DateText 日付文字列
11
+ #
12
+ module DateText
13
+ # @return [Regexp] ハイフン区切り
14
+ HYPHEN = /^[0-9]{1,5}-[0-9]{1,2}-[0-9]{1,2}$/.freeze
15
+ # @return [Regexp] スラッシュ区切り
16
+ SLASH = %r{^[0-9]{1,5}/[0-9]{1,2}/[0-9]{1,2}$}.freeze
17
+
18
+ #
19
+ # 有効な日付文字列か検証する
20
+ #
21
+ # * 従来は Date.parse で日付文字列を検証していた
22
+ # * [貞観4年3月20日] のような文字列でも有効扱いになっていた
23
+ # * [20] [20日] のように2桁の数字が含まれると有効な日付扱いされる
24
+ # * 特定のフォーマットのみ受け付けるように改変した
25
+ #
26
+ # @param [String] text 文字列
27
+ #
28
+ # @return [True] 有効
29
+ # @return [True] 無効
30
+ #
31
+ def self.validate(text: '')
32
+ return true if HYPHEN.match(text)
33
+
34
+ return true if SLASH.match(text)
35
+
36
+ false
37
+ end
38
+ end
39
+ end
40
+ end
@@ -112,12 +112,12 @@ module Zakuro
112
112
  # @param [String] text 日付文字列
113
113
  #
114
114
  def parse_text(text:)
115
- if Western::Calendar.valid_date_string(text: text)
115
+ if Western::Calendar.valid_date_text(text: text)
116
116
  @western_date = Western::Calendar.parse(text: text)
117
117
  return
118
118
  end
119
119
 
120
- return unless Japan::Calendar.valid_date_string(text: text)
120
+ return unless Japan::Calendar.valid_date_text(text: text)
121
121
 
122
122
  @japan_date = Japan::Calendar.parse(text: text)
123
123
  end
@@ -136,7 +136,13 @@ module Zakuro
136
136
  def western_date?(str: '')
137
137
  return Western::Calendar.new if str == EMPTY_STRING
138
138
 
139
- Western::Calendar.valid_date_string(text: str)
139
+ # 1316-11-16/1317-4-13
140
+ dates = str.split('/')
141
+ dates.each do |date|
142
+ return true if Western::Calendar.valid_date_text(text: date)
143
+ end
144
+
145
+ false
140
146
  end
141
147
  end
142
148
  end
@@ -11697,11 +11697,11 @@
11697
11697
  diffs:
11698
11698
  month:
11699
11699
  number:
11700
- src: "-"
11701
- dest: "-"
11700
+ src: '8'
11701
+ dest: '7'
11702
11702
  leaped:
11703
- src: "-"
11704
- dest: "-"
11703
+ src: 'false'
11704
+ dest: 'true'
11705
11705
  days:
11706
11706
  src: 大
11707
11707
  dest: 小
@@ -11730,11 +11730,11 @@
11730
11730
  diffs:
11731
11731
  month:
11732
11732
  number:
11733
- src: "-"
11734
- dest: "-"
11733
+ src: '8'
11734
+ dest: '8'
11735
11735
  leaped:
11736
- src: "-"
11737
- dest: "-"
11736
+ src: 'true'
11737
+ dest: 'false'
11738
11738
  days:
11739
11739
  src: 大
11740
11740
  dest: 大
@@ -15070,10 +15070,10 @@
15070
15070
  diffs:
15071
15071
  month:
15072
15072
  number:
15073
- src: '11'
15073
+ src: '12'
15074
15074
  dest: '11'
15075
15075
  leaped:
15076
- src: 'true'
15076
+ src: 'false'
15077
15077
  dest: 'false'
15078
15078
  days:
15079
15079
  src: 大
@@ -15102,11 +15102,11 @@
15102
15102
  diffs:
15103
15103
  month:
15104
15104
  number:
15105
- src: "-"
15106
- dest: "-"
15105
+ src: '12'
15106
+ dest: '12'
15107
15107
  leaped:
15108
- src: "-"
15109
- dest: "-"
15108
+ src: 'true'
15109
+ dest: 'false'
15110
15110
  days:
15111
15111
  src: 大
15112
15112
  dest: 大
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module Zakuro
5
+ #
6
+ # Result 演算結果
7
+ #
8
+ module Result
9
+ #
10
+ # データ部
11
+ #
12
+ module Data
13
+ #
14
+ # Option オプション
15
+ #
16
+ module Option
17
+ #
18
+ # VanishedDate 滅日
19
+ #
20
+ module VanishedDate
21
+ #
22
+ # Calculation 演算値
23
+ #
24
+ class Calculation
25
+ # @return [String] 大余小余(滅余)
26
+ attr_reader :remainder
27
+ # @return [String] 経朔
28
+ attr_reader :average_remainder
29
+
30
+ #
31
+ # 初期化
32
+ #
33
+ # @param [String] remainder 大余小余(滅余)
34
+ # @param [String] average_remainder 経朔
35
+ #
36
+ def initialize(remainder: '', average_remainder: '')
37
+ @remainder = remainder
38
+ @average_remainder = average_remainder
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../abstract_option'
4
+
5
+ require_relative './calculation'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ #
10
+ # Result 演算結果
11
+ #
12
+ module Result
13
+ #
14
+ # データ部
15
+ #
16
+ module Data
17
+ #
18
+ # Option オプション
19
+ #
20
+ module Option
21
+ #
22
+ # VanishedDate 滅日
23
+ #
24
+ module VanishedDate
25
+ #
26
+ # Option 滅日集約
27
+ #
28
+ class Option < AbstractOption
29
+ # @return [Calculation] 演算値
30
+ attr_reader :calculation
31
+
32
+ #
33
+ # 初期化
34
+ #
35
+ # @param [True, False] matched オプション値有無
36
+ # @param [Calculation] calculation 演算値
37
+ #
38
+ def initialize(matched: false, calculation: Calculation.new)
39
+ super(matched: matched)
40
+ @calculation = calculation
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -6,6 +6,8 @@ require_relative './option/abstract_option'
6
6
 
7
7
  require_relative './option/dropped_date/option'
8
8
 
9
+ require_relative './option/vanished_date/option'
10
+
9
11
  require_relative 'year'
10
12
 
11
13
  require_relative 'month'
@@ -38,6 +38,8 @@ module Zakuro
38
38
  REMAINDER_ALL_YEAR = 15_943
39
39
  # @return [Integer] 旬周(60日) DAY * 60
40
40
  SIXTY_DAYS = 182_400
41
+ # @return [Integer] 朔虚分: (30 * 3040) % (29 * 3040 + 1613)
42
+ REMAINDER_IDEAL_MONTH = 1427
41
43
  end
42
44
 
43
45
  #
@@ -29,6 +29,12 @@ module Zakuro
29
29
  #
30
30
  # @return [Cycle::Remainder] 弦(1分=80秒)
31
31
  QUARTER = Cycle::Remainder.new(day: 7, minute: 1163, second: 6)
32
+
33
+ # @return [Cycle::Remainder] 有没判定
34
+ DROPPED_DATE_LIMIT = Cycle::Remainder.new(day: 0, minute: 2375, second: 17)
35
+
36
+ # @return [Cycle::Remainder] 有滅判定
37
+ VANISHED_DATE_LIMIT = Cycle::Remainder.new(day: 0, minute: 1427, second: 0)
32
38
  end
33
39
 
34
40
  #
@@ -44,8 +50,7 @@ module Zakuro
44
50
  # * 0.25 * 80(1分=80秒) = 20
45
51
  #
46
52
  # @return [Cycle::LunarRemainder] 弦(1分=80秒)
47
- # TODO: 秒が20では通らない。少なくとも0.01247は必要になる
48
- QUARTER = Cycle::LunarRemainder.new(day: 7, minute: 1163, second: 20.01247)
53
+ QUARTER = Cycle::LunarRemainder.new(day: 7, minute: 1163, second: 20)
49
54
  end
50
55
  end
51
56
  end
@@ -32,19 +32,6 @@ module Zakuro
32
32
  super(base_day: Const::Number::Cycle::DAY, base_minute: MINUTE,
33
33
  day: day, minute: minute, second: second, total: total)
34
34
  end
35
-
36
- #
37
- # 特定の文字フォーマットにして出力する
38
- #
39
- # @param [String] form フォーマット(大余、小余、秒それぞれを%dで指定する)
40
- #
41
- # @return [String] フォーマットした結果
42
- #
43
- def format(form: '%d-%d')
44
- return '' if invalid?
45
-
46
- super(form, @day, @minute, @second)
47
- end
48
35
  end
49
36
 
50
37
  #
@@ -66,18 +53,49 @@ module Zakuro
66
53
  super(base_day: Const::Number::Cycle::DAY, base_minute: MINUTE,
67
54
  day: day, minute: minute, second: second, total: total)
68
55
  end
56
+ end
57
+
58
+ #
59
+ # DroppedRemainder 没日の計算向け時刻情報(没余)
60
+ #
61
+ class DroppedRemainder < Calculation::Cycle::AbstractRemainder
62
+ # @return [Integer] 分(1分=24秒)
63
+ MINUTE = 24
69
64
 
70
65
  #
71
- # 特定の文字フォーマットにして出力する
72
- #
73
- # @param [String] form フォーマット(大余、小余、秒それぞれを%dで指定する)
66
+ # 初期化
74
67
  #
75
- # @return [String] フォーマットした結果
68
+ # @param [Integer] day 大余("日"に相当)
69
+ # @param [Integer] minute 小余("分"に相当)
70
+ # @param [Integer] second 秒
71
+ # @param [Integer] total 繰り上げなしの小余
76
72
  #
77
- def format(form: '%d-%d')
78
- return '' if invalid?
73
+ def initialize(day: -1, minute: -1, second: -1, total: -1)
74
+ # 小余 = 通余
75
+ super(base_day: Const::Number::Derivation::REMAINDER_ALL_YEAR, base_minute: MINUTE,
76
+ day: day, minute: minute, second: second, total: total)
77
+ end
78
+ end
79
+
80
+ #
81
+ # VanishedRemainder 滅日の計算向け時刻情報(滅余)
82
+ #
83
+ class VanishedRemainder < Calculation::Cycle::AbstractRemainder
84
+ # @return [Integer] 分(1分=24秒)
85
+ MINUTE = 24
79
86
 
80
- super(form, @day, @minute, @second)
87
+ #
88
+ # 初期化
89
+ #
90
+ # @param [Integer] day 大余("日"に相当)
91
+ # @param [Integer] minute 小余("分"に相当)
92
+ # @param [Integer] second 秒
93
+ # @param [Integer] total 繰り上げなしの小余
94
+ #
95
+ def initialize(day: -1, minute: -1, second: -1, total: -1)
96
+ # 小余 = 朔虚分
97
+ super(base_day: Const::Number::Derivation::REMAINDER_IDEAL_MONTH, base_minute: MINUTE,
98
+ day: day, minute: minute, second: second, total: total)
81
99
  end
82
100
  end
83
101
  end
@@ -64,7 +64,7 @@ module Zakuro
64
64
  # NOTE: 大衍暦では進朔しない
65
65
  # adjusted.up_on_new_moon!
66
66
 
67
- debug("result: #{adjusted.format}")
67
+ debug("result: #{adjusted.format(form: '%d-%d.%.5f')}")
68
68
 
69
69
  adjusted
70
70
  end
@@ -92,9 +92,7 @@ module Zakuro
92
92
 
93
93
  remainder = lunar_location.adjusted_remainder
94
94
 
95
- # debug("[lunar]remainder.format: #{remainder.format(form: '%d-%d-%.5f')}")
96
- # debug("[lunar]remainder.day: #{remainder.day}")
97
- # debug("[lunar]remainder.minute: #{remainder.minute}")
95
+ debug("[lunar]remainder.format: #{remainder.format(form: '%d-%d-%.5f')}")
98
96
 
99
97
  Lunar::Value.get(remainder: remainder)
100
98
  end
@@ -9,9 +9,9 @@ require_relative '../../cycle/remainder'
9
9
  # :nodoc:
10
10
  module Zakuro
11
11
  # :nodoc:
12
- module Senmyou
12
+ module Daien
13
13
  # :nodoc:
14
- module Daien
14
+ module Option
15
15
  # :nodoc:
16
16
  module DroppedDate
17
17
  #
@@ -22,7 +22,9 @@ module Zakuro
22
22
  # 初期化
23
23
  #
24
24
  def initialize
25
- super(valid: false)
25
+ super(valid: true, year: Const::Number::Cycle::YEAR,
26
+ limit: Const::Remainder::Solar::DROPPED_DATE_LIMIT,
27
+ remainder_class: Cycle::DroppedRemainder)
26
28
  end
27
29
  end
28
30
  end