zakuro 0.9.0 → 0.9.2

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