when_exe 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. data/LICENSE.ja.txt +25 -25
  2. data/LICENSE.txt +31 -31
  3. data/bin/locales.rb +2 -1
  4. data/bin/when.rb.config +1 -1
  5. data/lib/when_exe.rb +70 -48
  6. data/lib/when_exe/basictypes.rb +99 -65
  7. data/lib/when_exe/calendartypes.rb +40 -178
  8. data/lib/when_exe/coordinates.rb +156 -62
  9. data/lib/when_exe/core/compatibility.rb +10 -0
  10. data/lib/when_exe/core/extension.rb +40 -0
  11. data/lib/when_exe/ephemeris.rb +112 -50
  12. data/lib/when_exe/icalendar.rb +125 -91
  13. data/lib/when_exe/inspect.rb +100 -48
  14. data/lib/when_exe/locales/ar.rb +48 -48
  15. data/lib/when_exe/locales/bg.rb +1 -1
  16. data/lib/when_exe/locales/bs.rb +4 -2
  17. data/lib/when_exe/locales/ca.rb +1 -1
  18. data/lib/when_exe/locales/en_CA.rb +3 -4
  19. data/lib/when_exe/locales/en_IE.rb +88 -0
  20. data/lib/when_exe/locales/en_US.rb +87 -0
  21. data/lib/when_exe/locales/es_CR.rb +84 -0
  22. data/lib/when_exe/locales/es_EC.rb +85 -0
  23. data/lib/when_exe/locales/es_PA.rb +85 -0
  24. data/lib/when_exe/locales/fr.rb +39 -39
  25. data/lib/when_exe/locales/hu.rb +15 -14
  26. data/lib/when_exe/locales/it.rb +1 -1
  27. data/lib/when_exe/locales/ja.rb +2 -2
  28. data/lib/when_exe/locales/locales.rb +7 -0
  29. data/lib/when_exe/locales/lt.rb +21 -19
  30. data/lib/when_exe/locales/ms.rb +84 -0
  31. data/lib/when_exe/locales/nl.rb +2 -2
  32. data/lib/when_exe/locales/ru.rb +1 -1
  33. data/lib/when_exe/locales/uk.rb +1 -1
  34. data/lib/when_exe/locales/ur.rb +84 -0
  35. data/lib/when_exe/mini_application.rb +44 -43
  36. data/lib/when_exe/parts/enumerator.rb +3 -3
  37. data/lib/when_exe/parts/geometric_complex.rb +6 -1
  38. data/lib/when_exe/parts/locale.rb +49 -18
  39. data/lib/when_exe/parts/method_cash.rb +61 -0
  40. data/lib/when_exe/parts/resource.rb +221 -106
  41. data/lib/when_exe/parts/timezone.rb +70 -33
  42. data/lib/when_exe/region/bahai.rb +2 -2
  43. data/lib/when_exe/region/balinese.rb +40 -43
  44. data/lib/when_exe/region/chinese.rb +93 -33
  45. data/lib/when_exe/region/chinese_calendar.rb +117 -1
  46. data/lib/when_exe/region/chinese_epoch.rb +65 -10
  47. data/lib/when_exe/region/christian.rb +97 -2
  48. data/lib/when_exe/region/ephemeric_notes.rb +353 -0
  49. data/lib/when_exe/region/french.rb +1 -1
  50. data/lib/when_exe/region/geologicalage.rb +171 -171
  51. data/lib/when_exe/region/indian.rb +18 -14
  52. data/lib/when_exe/region/iranian.rb +1 -1
  53. data/lib/when_exe/region/japanese.rb +49 -12
  54. data/lib/when_exe/region/japanese_notes.rb +838 -507
  55. data/lib/when_exe/region/japanese_residues.rb +724 -662
  56. data/lib/when_exe/region/javanese.rb +7 -7
  57. data/lib/when_exe/region/mayan.rb +19 -17
  58. data/lib/when_exe/region/nihon_shoki.rb +3 -3
  59. data/lib/when_exe/region/residue.rb +29 -28
  60. data/lib/when_exe/region/shire.rb +2 -2
  61. data/lib/when_exe/region/tibetan.rb +87 -5
  62. data/lib/when_exe/region/world.rb +1 -1
  63. data/lib/when_exe/timestandard.rb +85 -7
  64. data/lib/when_exe/tmobjects.rb +32 -4
  65. data/lib/when_exe/tmposition.rb +104 -55
  66. data/lib/when_exe/tmreference.rb +157 -60
  67. data/lib/when_exe/version.rb +2 -2
  68. data/test/examples/JapanHolidays.ics +3 -3
  69. data/test/examples/JapanHolidaysRFC6350.ics +499 -0
  70. data/test/examples/Residue.m17n +3 -2
  71. data/test/examples/Spatial.m17n +3 -3
  72. data/test/examples/USA-DST.ics +27 -27
  73. data/test/examples/today.rb +1 -1
  74. data/test/test.rb +4 -2
  75. data/test/test/basictypes.rb +40 -15
  76. data/test/test/coordinates.rb +9 -4
  77. data/test/test/icalendar.rb +24 -14
  78. data/test/test/inspect.rb +5 -3
  79. data/test/test/parts.rb +11 -2
  80. data/test/test/region/chinese.rb +4 -4
  81. data/test/test/region/civil.rb +124 -0
  82. data/test/test/region/geologicalage.rb +5 -2
  83. data/test/test/region/indian.rb +2 -0
  84. data/test/test/region/japanese.rb +156 -1
  85. data/test/test/region/jewish.rb +3 -3
  86. data/test/test/region/m17n.rb +9 -9
  87. data/test/test/region/mayan.rb +122 -5
  88. data/test/test/region/residue.rb +1 -1
  89. data/test/test/tmobjects.rb +27 -64
  90. data/test/test/tmposition.rb +48 -1
  91. data/test/test/tmreference.rb +66 -4
  92. data/when_exe.gemspec +1 -1
  93. metadata +15 -6
@@ -448,7 +448,7 @@ module When
448
448
  #
449
449
  # @return [Integer, When::TM::DateAndTime] 日の出の日時
450
450
  #
451
- def sun_rise(sdn, height=nil)
451
+ def sunrise(sdn, height=nil)
452
452
  t = sdn.to_i - @long / 360.0 - 0.25
453
453
  p = _mean_sun(t) + P * (t - Ep) / @civil_days
454
454
  _to_seed_type(t - asin(tand(@lat)*tan(asin(sinc(p)*sinc(Ob)))) / CIRCLE, sdn)
@@ -462,7 +462,7 @@ module When
462
462
  #
463
463
  # @return [Integer, When::TM::DateAndTime] 日の入りの日時
464
464
  #
465
- def sun_set(sdn, height=nil)
465
+ def sunset(sdn, height=nil)
466
466
  t = sdn.to_i - @long / 360.0 + 0.25
467
467
  p = _mean_sun(t) + P * (t - Ep) / @civil_days
468
468
  _to_seed_type(t + asin(tand(@lat)*tan(asin(sinc(p)*sinc(Ob)))) / CIRCLE, sdn)
@@ -525,7 +525,7 @@ module When
525
525
 
526
526
  class TM::CalendarEra
527
527
 
528
- Indian = [self, [
528
+ IndianNationalSolar = [self, [
529
529
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
530
530
  "locale:[=en:, ja=ja:, alias]",
531
531
  "area:[IndianNationalSolar=en:Indian_national_calendar, インド国定暦]",
@@ -570,8 +570,8 @@ module When
570
570
  def _new_month_(m)
571
571
  new_month_time = @formula[0].cn_to_time(m + @cycle_offset)
572
572
  new_month_date = (new_month_time + 0.5 + @formula[0].long/360.0).floor
573
- sun_rise_time = @formula[0].sun_rise(new_month_date)
574
- (sun_rise_time <= new_month_time) ? new_month_date : new_month_date-1
573
+ sunrise_time = @formula[0].sunrise(new_month_date)
574
+ (sunrise_time <= new_month_time) ? new_month_date : new_month_date-1
575
575
  end
576
576
 
577
577
  private
@@ -597,7 +597,7 @@ module When
597
597
  formula = @formula || HinduLuniSolar::Formula[$1]
598
598
  if formula.kind_of?(String)
599
599
  formula += (formula =~ /\?/) ? '&' : '?'
600
- @formula = [When.Resource("_ep:#{formula}location=#{@location}&formula=12S")]
600
+ @formula = [When.Resource("_ep:#{formula}location=(#{@location})&formula=12S")]
601
601
  end
602
602
  @indices ||= [
603
603
  Coordinates::Index.new({:trunk=>When.Resource('_m:IndianTerms::SolarMonth::*'),
@@ -640,8 +640,8 @@ module When
640
640
  def _new_month_(m)
641
641
  new_moon_time = @formula[-1].cn_to_time(m)
642
642
  new_moon_date = (new_moon_time + 0.5 + @formula[-1].long/360.0).floor
643
- sun_rise_time = @formula[-1].sun_rise(new_moon_date)
644
- (sun_rise_time >= new_moon_time) ? new_moon_date : new_moon_date+1
643
+ sunrise_time = @formula[-1].sunrise(new_moon_date)
644
+ (sunrise_time >= new_moon_time) ? new_moon_date : new_moon_date+1
645
645
  end
646
646
 
647
647
  # 年初の通月
@@ -745,7 +745,7 @@ module When
745
745
  formula += (formula =~ /\?/) ? '&' : '?'
746
746
  @formula = When.Resource(["_ep:#{formula}formula=12S",
747
747
  "_ep:#{formula}formula=30L->12S",
748
- "_ep:#{formula}location=#{@location}&formula=2L"])
748
+ "_ep:#{formula}location=(#{@location})&formula=2L"])
749
749
  end
750
750
  intercalary_month = When.Resource('_m:IndianTerms::IntercalaryMonth::*')
751
751
  intercalary_day = When.Resource('_m:IndianTerms::IntercalaryDay::*')
@@ -942,17 +942,21 @@ module When
942
942
  @o_date = date
943
943
  clock = date.clock
944
944
  frame = date.frame if date.frame.kind_of?(When::CalendarTypes::HinduLuniSolar)
945
- @l_date = (clock && frame) ? date :
946
- (frame || When.Calendar('HinduLuniSolar?note=HinduNote')).jul_trans(date, {:clock=>clock||'+05:30'})
945
+ @l_date = (frame || When.Calendar('HinduLuniSolar?note=HinduNote')).jul_trans(date.to_i, {:clock=>'+05:30'})
947
946
  @root = When.CalendarNote('HinduNote/NoteObjects')['day']
948
947
  @formula = @l_date.frame.formula[-1]
949
- @iri = @formula.iri.gsub(/%3A%3A/, '::')
950
- @rises = [@formula.sun_rise(@l_date), @formula.sun_rise(@l_date+When.Duration('P1D'))]
948
+ @iri = @formula.iri
949
+ @rises = [@formula.sunrise(@l_date), @formula.sunrise(@l_date+When.Duration('P1D'))]
951
950
  end
952
951
 
953
952
  # その他のメソッドは @l_date に移譲する
954
953
  def method_missing(name, *args, &block)
955
- @l_date.send(name.to_sym, *args, &block)
954
+ self.class.module_eval %Q{
955
+ def #{name}(*args, &block)
956
+ @l_date.send("#{name}", *args, &block)
957
+ end
958
+ } unless When::Parts::MethodCash.escape(name)
959
+ @l_date.send(name, *args, &block)
956
960
  end
957
961
  end
958
962
 
@@ -56,7 +56,7 @@ module When
56
56
  'origin_of_MSC' => -621,
57
57
  'epoch_in_CE' => 0,
58
58
  'cycle_offset' => 0,
59
- 'timezone' => 12 + 3 + Rational(1,2),
59
+ 'time_basis' => '+15:30',
60
60
  'rule_table' => {
61
61
  365 => {'Length'=>[31] * 6 + [30] * 5 + [29]},
62
62
  366 => {'Length'=>[31] * 6 + [30] * 6}
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2011-2013 Takashi SUGA
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -427,8 +427,45 @@ module When
427
427
  aBCdEfGhIjkL AbCDeFgHhIjKl aBCdEfGHiJkL abCdEfGHIjKl AbcDeEfGHiJKl
428
428
  AbCdefGHiJKL aBcDefgHiJKL aBCddEfgHiJKl ABCdeFghIjKL aBCdEfGhIjjKl
429
429
  ABcDEfGhIjkL aBcDEfGHiJkL )
430
- }
431
- ]
430
+ }
431
+ ]
432
+
433
+ #
434
+ # 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表
435
+ #
436
+ Japanese0764 = [PatternTableBasedLuniSolar, {
437
+ 'origin_of_MSC'=>764, 'origin_of_LSC'=>2000146,
438
+ 'indices'=> [
439
+ Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
440
+ :trunk=>When.Resource('_m:JapaneseTerms::Month::*')}),
441
+ Coordinates::DefaultDayIndex
442
+ ],
443
+ 'note' => 'JapaneseNote',
444
+ 'rule_table'=> %w( aBCdEfGhiJkL aBCdEFgHiJjkL
445
+ aBCdEfGHiJkL abCdEfGHiJKl AbcDeFfGHiJKl AbCdeFghIJKL aBcdEfgHiJKL
446
+ aBCcDefgHiJKl ABCdeFgHijKL aBcDEfGhIjkKL aBcDEfGhIjkL AbcDEfGHiJkL
447
+ aBcdEfGHhIJkL aBcdEfgHIJkL AbCDefghIJKl ABcDeefGhIJKL aBcDefgHiJKL
448
+ aBcDeFgHijKl AAbCDeFghIjKl ABcDeFGhIjkL aBcDeFGhIiJKl aBcDeFgHIJkL
449
+ aBcdEfgHIjKL AbCdeeFgHiJKL aBCdefGhIjKL AbCdEfgHiJkL ABcCdEfGhiJkL
450
+ AbCDeFgHijKl ABcDeFgHIjKkl AbCdEfGHiJkL aBcdEfGHiJKL abCdeFgGHiJKL
451
+ abCdeFgHiJKL aBcDefGhIjKL AbCdEefGhiJKL aBCdEfgHiJkL aBCdEfGhIjKl
452
+
453
+ AaBcDeFGhIjKl AbcDEfGHiJkL aBcdEfGHiJJkL aBcdEfGhIJKl AbCdeFghIJKL
454
+ aBcDefFghIJKL aBcDefGhIjKl ABcDEfgHijKL aBbCDeFgHiJkL aBcDeFGhIJkl
455
+ AbcDeFGhIJkLl AbcDeFgHIJkL aBcdEfGhIJKl AbCdeFggHIjKL AbCdeFghIjKL
456
+ ABcDefGhiJKl AbCDdEfGhIjkL AbCDeFgHiJkL aBcDeFgHIjKl AabCdEFgHIjKl
457
+ AbcDeFgHIjKL aBcdEfgHIiJKL aBcdEfgHIjKL aBCdeFghIjKL AbCdEfGghIjKl
458
+ ABCdEfGhiJkL aBCdEfGHiJkL AbccDEfGHiJkL abCdEfGHiJKl AbcDEfgHiJKLl
459
+ AbcDefGHiJKL AbcdEfgHiJKL aBCdeFggHiJKl ABcDeFghIjKL aBCdEfGhiJkL
460
+ aBCdEeFGhIjkL aBcDeFGhIJkL abCdEfGHiJKl AabCdeFGhIJKl AbcDefGhIJKl
461
+ ABcdEfgHiIJkL ABcdEfgHiJKl ABcDeFghIjKl ABcDEfGgHijKl AbCDeFgHIjKl
462
+ aBcDeFGhIJkL abCcDeFgHIJkL abCdeFgHIJkL AbcDefGhIJkLL AbcDefGhIjKL
463
+
464
+ AbCdEfgHiJkL AbCDeFghHiJkL AbCdEFghIjKl AbCdEFgHiJKL abcDdEfGHiJKl
465
+ aBcdEfGHIjKL abCdeFgHIjKL AbbCdeFgHiJKL aBcDefGhIjKL AbCdEfgHiJJkL
466
+ aBCdEfgHiJkL)
467
+ }
468
+ ]
432
469
  end
433
470
 
434
471
  class TM::CalendarEra
@@ -436,10 +473,10 @@ module When
436
473
  #
437
474
  # 日本の年号
438
475
  #
439
- Japanese = [self, [
476
+ Japanese = [{}, self, [
440
477
  "namespace:[ja=http://ja.wikipedia.org/wiki/, en=http://en.wikipedia.org/wiki/]",
441
478
  "locale:[=ja:, en=en:, alias]",
442
- "area:[日本=ja:%%<元号>#%.<日本>,Japan=en:Regnal_year#Japanese]",
479
+ 'area:[日本#{?V=V}=ja:%%<元号>#%.<日本>,Japan#{?V=V}=en:Regnal_year#Japanese]',
443
480
  [self,
444
481
  "period:[飛鳥時代]",
445
482
  ["[推古]1", "@A", "name=[推古];0593-01-01^Japanese"],
@@ -468,7 +505,7 @@ module When
468
505
  ["[天平感宝]1", "@FE", " 0749-04-14"],
469
506
  ["[天平勝宝]1", "@A", "name=[孝謙];0749-07-02"],
470
507
  ["[天平宝字]1", "@FE", " 0757-08-18",
471
- "name=[淳仁];0758-08-01", ""],
508
+ "name=[淳仁];0758-08-01", '0764-01-01^Japanese#{V}', ""],
472
509
  ["[天平神護]1", "@A", "name=[称徳];0765-01-07"],
473
510
  ["[神護景雲]1", "@FE", " 0767-08-16"],
474
511
  ["[宝亀]1", "[代始・祥瑞]", "name=[光仁];0770-10-01"],
@@ -477,7 +514,7 @@ module When
477
514
  ],
478
515
  [self,
479
516
  "period:[平安時代]",
480
- ["[延暦]13", "", "name=[桓武];0794-10-22^Japanese"],
517
+ ["[延暦]13", "", 'name=[桓武];0794-10-22^Japanese#{V}'],
481
518
  ["[大同]1", "@A", "name=[平城];0806-05-18"],
482
519
  ["[弘仁]1", "@A", "name=[嵯峨];0810-09-19"],
483
520
  ["[天長]1", "@A", "name=[淳和];0824-01-05"],
@@ -486,7 +523,7 @@ module When
486
523
  ["[仁寿]1", "[代始・祥瑞]", "name=[文徳];0851-04-28"],
487
524
  ["[斉衡]1", "@FE", " 0854-11-30"],
488
525
  ["[天安]1", "@FE", " 0857-02-21"],
489
- ["[貞観]1", "@A", "name=[清和];0859-04-15"],
526
+ ["[貞観]1", "@A", "name=[清和];0859-04-15", "0862-01-01^Japanese", ""],
490
527
  ["[元慶]1", "[代始・祥瑞]", "name=[陽成];0877-04-16"],
491
528
  ["[仁和]1", "@A", "name=[光孝];0885-02-21"],
492
529
  ["[寛平]1", "@A", "name=[宇多];0889-04-27"],
@@ -497,8 +534,8 @@ module When
497
534
  ["[天慶]1", "@ND", " 0938-05-22"],
498
535
  ["[天暦]1", "@A", "name=[村上];0947-04-22"],
499
536
  ["[天徳]1", "@ND", " 0957-10-27"],
500
- ["[応和]1", "[災異・革年]", " 0961-02-16"],
501
- ["[康保]1", "[災異・革年]", " 0964-07-10"],
537
+ ["[応和]1", "[災異・革年]", " 0961-02-16"],
538
+ ["[康保]1", "[災異・革年]", " 0964-07-10"],
502
539
  ["[安和]1", "@A", "name=[冷泉];0968-08-13"],
503
540
  ["[天禄]1", "@A", "name=[円融];0970-03-25"],
504
541
  ["[天延]1", "@ND", " 0973-12-20"],
@@ -647,7 +684,7 @@ module When
647
684
  ],
648
685
  [self,
649
686
  "period:[持明院統]",
650
- ["[元徳]3", "", "name=;1331-08-09^Japanese",
687
+ ["[元徳]3", "", " name=;1331-08-09^Japanese",
651
688
  "name=[光厳];1331-09-20", ""],
652
689
  ["[正慶]1", "@A", " 1332-04-28", "1333-05-18"]
653
690
  ],
@@ -714,7 +751,7 @@ module When
714
751
  "period:[江戸時代]",
715
752
  ["[慶長]8", "", "name=[後陽成];1603-02-12^Japanese",
716
753
  "name=[後水尾];1611-03-27", ""],
717
- ["[元和]1", "[代始・災異]"," 1615-07-13"],
754
+ ["[元和]1", "[代始・災異]"," 1615-07-13"],
718
755
  ["[寛永]1", "@IY", " 1624-02-30",
719
756
  "name=[明正];1629-11-08", ""],
720
757
  ["[正保]1", "@A", "name=[後光明];1644-12-16"],
@@ -1,12 +1,67 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2012-2013 Takashi SUGA
3
+ Copyright (C) 2012-2014 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
7
7
 
8
+ require 'when_exe/region/ephemeric_notes'
8
9
  require 'when_exe/region/japanese_residues'
9
10
 
11
+
12
+ class When::TM::CalendarEra
13
+
14
+ kyoto = '?time_basis=(LAT?long=135.4520E&lat=35.0117N)'
15
+ tokyo = '?time_basis=+09:18:59'
16
+ jst = '?time_basis=+09:00&intercalary_span=3'
17
+
18
+ # Japanese Luni-Solar Calendar Series for JapaneseNote
19
+ JapaneseLuniSolarSeries = [self, [
20
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
21
+ 'locale:[=en:, ja=ja:, alias]',
22
+ 'area:[JapaneseLuniSolarSeries=, 日本の暦月=]',
23
+ ['[平朔儀鳳暦=]-660.01.01', '@F', "-660-01-01^Chinese::平朔儀鳳暦"],
24
+ ['[元嘉暦]454.01.01', '@CR', "454-01-01^Chinese::元嘉暦"],
25
+ ['[儀鳳暦]697.01.01', '@CR', "697-01-01^Chinese::麟徳暦"],
26
+ ['[大衍暦]764.01.01', '@CR', "764-01-01^Chinese::大衍暦"],
27
+ ['[五紀暦]858.01.01', '@CR', "858-01-01^Chinese::五紀暦"],
28
+ ['[宣明暦]862.01.01', '@CR', "862-01-01^Chinese::宣明暦"],
29
+ ['[前貞享暦=]1685.01.01', '@CR', "1685-01-01^ChineseLuniSolar#{kyoto}"],
30
+ ['[貞享暦]1687.01.01', '@CR', "1687-01-01^ChineseLuniSolar#{kyoto}"],
31
+ ['[貞享補暦A=]1753.01.01', '@CR', "1753-01-01^ChineseLuniSolar#{kyoto}"],
32
+ ['[貞享補暦B=]1754.01.01', '@CR', "1754-01-01^ChineseLuniSolar#{kyoto}"],
33
+ ['[宝暦暦]1755.01.01', '@CR', "1755-01-01^ChineseLuniSolar#{kyoto}"],
34
+ ['[修正宝暦暦=]1771.01.01', '@CR', "1771-01-01^ChineseLuniSolar#{kyoto}"],
35
+ ['[寛政暦]1798.01.01', '@CR', "1798-01-01^ChineseLuniSolar#{kyoto}"],
36
+ ['[天保暦]1844.01.01', '@CR', "1844-01-01^ChineseLuniSolar#{kyoto}"], # 京都平均太陽時
37
+ ['[JLSA=,旧暦A=]1872.12.03','@CR', "1872-12-03^ChineseLuniSolar#{tokyo}"], # 東京平均太陽時
38
+ ['[JLSB=,旧暦B=]1887.11.18','@CR', "1887-11-18^ChineseLuniSolar#{jst}"] # 日本標準時
39
+ ]]
40
+
41
+ # Japanese Solar Calendar Series for JapaneseNote
42
+ JapaneseSolarSeries = [self, [
43
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
44
+ 'locale:[=en:, ja=ja:, alias]',
45
+ 'area:[JapaneseSolarSeries=, 日本の節月=]',
46
+ ['[平朔儀鳳暦=]-661.01.01', '@F', "-661-01-01^Chinese::平朔儀鳳暦(節月)"], # 年の始めに遡って開始(実際は12.22)
47
+ ['[元嘉暦]454.01.12', '@CR', "454-01-12^Chinese::元嘉暦(節月)"],
48
+ ['[儀鳳暦]696.12.27', '@CR', "696-12-27^Chinese::麟徳暦(節月)"],
49
+ ['[大衍暦]764.01.06', '@CR', "764-01-06^Chinese::大衍暦(節月)"],
50
+ ['[五紀暦]857.12.19', '@CR', "857-12-19^Chinese::五紀暦(節月)"],
51
+ ['[宣明暦]862.01.03', '@CR', "862-01-03^Chinese::宣明暦(節月)"],
52
+ ['[前貞享暦=]1685.01.01', '@CR', "1685-01-01^Chinese::前貞享暦(節月)"],
53
+ ['[貞享暦]1687.01.08', '@CR', "1687-01-08^Chinese::貞享暦(節月)"],
54
+ ['[貞享補暦A=]1752.12.30', '@CR', "1752-12-30^Chinese::貞享補暦A(節月)"],
55
+ ['[貞享補暦B=]1753.12.19', '@CR', "1753-12-19^Chinese::貞享補暦B(節月)"],
56
+ ['[宝暦暦]1755.01.07', '@CR', "1755-01-07^Chinese::宝暦暦(節月)"],
57
+ ['[修正宝暦暦=]1771.01.11', '@CR', "1771-01-11^Chinese::修正宝暦暦(節月)"],
58
+ ['[寛政暦]1798.01.12', '@CR', "1798-01-12^Chinese::寛政暦(節月)"],
59
+ ['[天保暦]1844.01.14', '@CR', "1844-01-14^ChineseSolar#{kyoto}"], # 京都平均太陽時
60
+ ['[JSA=,旧暦A=]1872.11.26', '@CR', "1872-11-26^ChineseSolar#{tokyo}"], # 東京平均太陽時
61
+ ['[JSB=,旧暦B=]1887.11.26', '@CR', "1887-11-26^ChineseSolar#{jst}"] # 日本標準時
62
+ ]]
63
+ end
64
+
10
65
  class When::CalendarTypes::CalendarNote
11
66
 
12
67
  #
@@ -14,31 +69,27 @@ class When::CalendarTypes::CalendarNote
14
69
  #
15
70
  class JapaneseNote < self
16
71
 
72
+ #
73
+ # 日本暦注が使用する暦法
74
+ #
75
+ # @private
76
+ class Cal4Note
77
+ def initialize(calendar, solar)
78
+ @calendar = calendar
79
+ @solar = solar
80
+ end
81
+ end
82
+
17
83
  #
18
84
  # 日本暦注の要素
19
85
  #
20
- class Notes < When::CalendarTypes::CalendarNote::NoteElement; end
21
-
22
- NoteTypes = [
23
- # 開始年 暦法 土用のオフセット
24
- [-660, '儀鳳暦' ],
25
- [ 454, '元嘉暦' ],
26
- [ 697, '麟徳暦', (Rational( 4,15) + 244) / 1340 ], # 啓蟄 <-> 雨水
27
- [ 764, '大衍暦', (Rational(13,30) + 531) / 3040 ],
28
- [ 858, '五紀暦', (Rational( 4,15) + 244) / 1340 ],
29
- [ 862, '宣明暦', (Rational( 1, 2) + 1468) / 8400 ],
30
- [1685, ['timezone=32584.4/3600', '前貞享暦(節月)' ]],
31
- [1687, ['timezone=32584.4/3600', '貞享暦(節月)' ]],
32
- [1753, ['timezone=32584.4/3600', '前々宝暦暦(節月)']],
33
- [1754, ['timezone=32584.4/3600', '前宝暦暦(節月)' ]],
34
- [1755, ['timezone=32584.4/3600', '宝暦暦(節月)' ]],
35
- [1771, ['timezone=32584.4/3600', '修正宝暦暦(節月)']],
36
- [1798, ['timezone=32584.4/3600', '寛政暦(節月)' ]],
37
- [1844, 'timezone=32584.4/3600'], # 京都平均太陽時の定朔定気法太陰太陽暦(天保暦の代用)
38
- [1873, 'timezone=33539/3600' ], # 東京平均太陽時の定朔定気法太陰太陽暦
39
- [1888, 'timezone=9'] # 日本標準時の定朔定気法太陰太陽暦
40
- ].reverse
86
+ # @private
87
+ class Note < When::CalendarTypes::CalendarNote::NoteElement
88
+ end
41
89
 
90
+ #
91
+ # 日本暦注の要素
92
+ #
42
93
  NoteObjects = [When::BasicTypes::M17n, [
43
94
  "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
44
95
  "locale:[=ja:]",
@@ -47,221 +98,329 @@ class When::CalendarTypes::CalendarNote
47
98
  # 年の暦注 ----------------------------
48
99
  [When::BasicTypes::M17n,
49
100
  "names:[年]",
50
- [Notes, "label:[干支]", 'position:共通'], # 干支
51
- # [Notes, "label:[干=ja:%%<十干>]",
52
- # 'position:共通'], #
53
- # [Notes, "label:[支=ja:%%<十二支>]",
54
- # 'position:共通'], #
55
- [Notes, "label:[九星]", 'position:民間'], # 九星
56
- [Notes, "label:[大歳壇=]", 'position:暦序'], # 干支
57
- [Notes, "label:[納音]", 'position:暦序', 'suffix:是'], # 干支
58
- [Notes, "label:[大歳=ja:%%<太歳神>]",
59
- 'position:暦序', 'suffix:在'], # 干支
60
- [Notes, "label:[大将軍=ja:%%<大将軍_(方位神)>]",
61
- 'position:暦序', 'suffix:在'], #
62
- [Notes, "label:[大陰=ja:%%<太陰神>]",
63
- 'position:暦序', 'suffix:在'], # 支
64
- [Notes, "label:[歳徳=ja:%%<歳徳神>]",
65
- 'position:暦序', 'suffix:在'], #
66
- [Notes, "label:[歳刑=ja:%%<歳刑神>]",
67
- 'position:暦序', 'suffix:在'], #
68
- [Notes, "label:[歳破=ja:%%<歳破神>]",
69
- 'position:暦序', 'suffix:在'], # 支
70
- [Notes, "label:[歳煞=ja:%%<歳煞神>]",
71
- 'position:暦序', 'suffix:在'], # 支
72
- [Notes, "label:[黄幡=ja:%%<黄幡神>]",
73
- 'position:暦序', 'suffix:在'], # 支
74
- [Notes, "label:[豹尾=ja:%%<豹尾神>]",
75
- 'position:暦序', 'suffix:在'], # 支
76
- [Notes, "label:[歳次=]", 'position:暦序', 'suffix:-'], # 支
77
- [Notes, "label:[金神]", 'position:仮名暦', 'suffix:在'] #
101
+ [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
102
+ # [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
103
+ # 'position:共通'], #
104
+ # [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
105
+ # 'position:共通'], #
106
+ [Note, 0x3800, "label:[廿八宿=ja:%%<二十八宿>]",
107
+ 'position:共通'], # 1: 廿八宿
108
+ [Note, 0x3FFC, "label:[大歳壇=]", 'position:暦序'], # 2: 干支
109
+ [Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
110
+ [Note, 0xFFFC, "label:[納音]", 'position:暦序', 'suffix:是'], # 4: 干支
111
+ [Note, 0xFFFF, "label:[大歳=ja:%%<太歳神>]",
112
+ 'position:暦序', 'suffix:在'], # 5: 干支
113
+ [Note, 0xFFFF, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
114
+ 'position:暦序', 'suffix:在'], # 6:
115
+ [Note, 0xFFFF, "label:[大陰=ja:%%<太陰神>]",
116
+ 'position:暦序', 'suffix:在'], # 7:
117
+ [Note, 0xFFFF, "label:[歳徳=ja:%%<歳徳神>]",
118
+ 'position:暦序', 'suffix:在'], # 8:
119
+ [Note, 0xFFFF, "label:[歳刑=ja:%%<歳刑神>]",
120
+ 'position:暦序', 'suffix:在'], # 9:
121
+ [Note, 0xFFFF, "label:[歳破=ja:%%<歳破神>]",
122
+ 'position:暦序', 'suffix:在'], # 10:
123
+ [Note, 0xFFFF, "label:[歳煞=ja:%%<歳煞神>]",
124
+ 'position:暦序', 'suffix:在'], # 11:
125
+ [Note, 0xFFFF, "label:[黄幡=ja:%%<黄幡神>]",
126
+ 'position:暦序', 'suffix:在'], # 12:
127
+ [Note, 0xFFFF, "label:[豹尾=ja:%%<豹尾神>]",
128
+ 'position:暦序', 'suffix:在'], # 13: 支
129
+ [Note, 0x0003, "label:[天道=]", 'position:暦序', 'suffix:-'], # 14: 支
130
+ [Note, 0x0003, "label:[人道=]", 'position:暦序', 'suffix:-'], # 15: 支
131
+ [Note, 0x3FFC, "label:[歳次=]", 'position:暦序', 'suffix:-'], # 16: 支
132
+ [Note, 0xF800, "label:[金神]", 'position:仮名暦', 'suffix:在'], # 17: 干
133
+ [Note, 0xFFFF, "label:[大小]", 'position:暦序'] # 18: 朔閏表
78
134
  ],
79
135
 
80
136
  # 月の暦注 ----------------------------
81
137
  [When::BasicTypes::M17n,
82
138
  "names:[月]",
83
- [Notes, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>]",
84
- 'position:月建'], # 月の和名
85
- # [Notes, "label:[干支]", 'position:共通'], # 干支
86
- # [Notes, "label:[干=ja:%%<十干>]",
87
- # 'position:共通'], #
88
- # [Notes, "label:[支=ja:%%<十二支>]",
89
- # 'position:共通'], #
90
- [Notes, "label:[九星]", 'position:民間'], # 九星
91
- [Notes, "label:[月建=]", 'position:月建', 'suffix:-'], # 干支
92
- [Notes, "label:[天道=]", 'position:月建', 'suffix:-'], #
93
- [Notes, "label:[天徳=]", 'position:月建', 'suffix:在'], #
94
- [Notes, "label:[月煞=]", 'position:月建', 'suffix:在'], #
95
- [Notes, "label:[用時=]", 'position:月建'], #
96
- [Notes, "label:[月徳=]", 'position:月建', 'suffix:在'], #
97
- [Notes, "label:[月徳合=]", 'position:月建', 'suffix:在'], #
98
- [Notes, "label:[月空=]", 'position:月建', 'suffix:在'], #
99
- [Notes, "label:[三鏡=]", 'position:月建'], #
100
- [Notes, "label:[土府=]", 'position:月建', 'suffix:在'], #
101
- [Notes, "label:[土公=ja:%%<土公神>]",
102
- 'position:月建', 'suffix:在'] #
139
+ [Note, 0xFFFF, "label:[月名=ja:%%<月_(暦)>#%.<日本の和風月名>]",
140
+ 'position:月建'], # 0: 月の和名
141
+ # [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 干支
142
+ # [Note, 0xFFFF, "label:[干=ja:%%<十干>]",
143
+ # 'position:共通'], #
144
+ # [Note, 0xFFFF, "label:[支=ja:%%<十二支>]",
145
+ # 'position:共通'], #
146
+ [Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
147
+ 'position:共通'], # 1: 廿八宿
148
+ [Note, 0xFFFC, "label:[月建=]", 'position:月建', 'suffix:-' ], # 2: 年の十干と暦月
149
+ [Note, 0xC000, "label:[九星]", 'position:民間'], # 3: 九星
150
+ [Note, 0x0003, "label:[天氣=]", 'position:月建', 'suffix:-' ], # 4: 暦月
151
+ [Note, 0x3FFF, "label:[天道=]", 'position:月建', 'suffix:-' ], # 5: 暦月
152
+ [Note, 0x0003, "label:[人道=]", 'position:月建', 'suffix:-' ], # 6: 暦月
153
+ [Note, 0x0003, "label:[月破=]", 'position:月建', 'suffix:在'], # 7: 暦月
154
+ [Note, 0x3FFC, "label:[天徳=]", 'position:月建', 'suffix:在'], # 8: 暦月
155
+ [Note, 0x3FFF, "label:[月煞=]", 'position:月建', 'suffix:在'], # 9: 暦月
156
+ [Note, 0x3FFF, "label:[用時=]", 'position:月建', 'suffix:-' ], # 10: 暦月
157
+ [Note, 0x3FFF, "label:[月徳=]", 'position:月建', 'suffix:在'], # 11: 暦月
158
+ [Note, 0x3FFC, "label:[月徳合=]", 'position:月建', 'suffix:在'], # 12: 暦月
159
+ [Note, 0x3FFC, "label:[月空=]", 'position:月建', 'suffix:在'], # 13: 暦月
160
+ [Note, 0x3FFF, "label:[三鏡=]", 'position:月建', 'suffix:-' ], # 14: 暦月
161
+ [Note, 0x3FFF, "label:[土府=]", 'position:月建', 'suffix:在'], # 15: 暦月
162
+ [Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
163
+ 'position:月建', 'suffix:在'], # 16: 暦月
164
+ [Note, 0xFFFF, "label:[大小]", 'position:月建'] # 17: 朔閏表
103
165
  ],
104
166
 
105
167
  # 日の暦注 ----------------------------
106
168
  [When::BasicTypes::M17n,
107
169
  "names:[日]",
108
- [Notes, "label:[干支]", 'position:共通'], # 干支
109
- # [Notes, "label:[干=ja:%%<十干>]",
110
- # 'position:共通'], #
111
- # [Notes, "label:[支=ja:%%<十二支>]",
112
- # 'position:共通'], #
113
- [Notes, "label:[納音]", 'position:共通', 'suffix:是'], # 干支
114
- [Notes, "label:[十二直]", 'position:共通'], # 支 節月
115
- [Notes, "label:[七曜]", 'position:共通'], # 七曜
116
- [Notes, "label:[廿八宿=ja:%%<二十八宿>]",
117
- 'position:共通'], # 廿八宿
118
- [Notes, "label:[廿七宿=ja:%%<二十八宿>]",
119
- 'position:共通'], # 暦月 暦日
120
- [Notes, "label:[九星]", 'position:民間'], # 九星
121
- [Notes, "label:[六曜]", 'position:民間'], # 暦月 暦日
122
- [Notes, "label:[祝祭日]", 'position:祝祭日'], # 暦月 暦日 (七曜)
123
-
124
- [Notes, "label:[節中=]", 'position:時候'], # 太陽黄経
125
- [Notes, "label:[廿四節気=ja:%%<二十四節気>]",
126
- 'position:時候'], # 太陽黄経
127
- [Notes, "label:[七十二候]", 'position:時候'], # 太陽黄経
128
- [Notes, "label:[六十卦=]", 'position:時候'], # 太陽黄経
129
- [Notes, "label:[入梅]", 'position:雑節'], # 太陽黄経
130
-
131
- [Notes, "label:[大禍=ja:%%<暦注下段>#%.<大禍日>]",
132
- 'position:上段 上段 欄外 欄外', 'suffix:日'], # 節月
133
- [Notes, "label:[滅門=ja:%%<暦注下段>#%.<滅門日>]",
134
- 'position:上段 上段 欄外 欄外', 'suffix:日'], # 支 節月
135
- [Notes, "label:[狼藉=ja:%%<暦注下段>#%.<狼藉日>]",
136
- 'position:上段 上段 欄外 欄外', 'suffix:日'], # 支 節月
137
-
138
- [Notes, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 七曜 廿七宿
139
- [Notes, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 七曜 廿七宿
140
- [Notes, "label:[羅刹=]", 'position:中段 中段 上段 上段'], # 七曜 廿七宿
141
-
142
- [Notes, "label:[大将軍=ja:%%<大将軍_(方位神)>]",
143
- 'position:上段 上段 上段 上段', 'suffix:-'], # 干支 節年
144
- [Notes, "label:[天一=ja:%%<天一神>]",
145
- 'position:上段 上段 上段 上段', 'suffix:-'], # 干支
146
- [Notes, "label:[土公=ja:%%<土公神>]",
147
- 'position:上段 上段 上段 上段'], # 干支
148
- [Notes, "label:[歳下食=ja:%%<暦注下段>#%.<歳下食>]",
149
- 'position:上段 上段 上段 上段'], # 干支 節年
150
- [Notes, "label:[忌遠行=]", 'position:上段 中段 上段 上段'], # 支 節月
151
- [Notes, "label:[忌夜行=]", 'position:上段 中段 上段 上段'], # 節月
152
- [Notes, "label:[下食時=ja:%%<暦注下段>#%.<時下食>]",
153
- 'position:上段 上段 上段 上段'], # 節月 貞享暦で一部廃止
154
- [Notes, "label:[天間=]", 'position:上段 中段 上段 中段上'], # 干支 節月
155
- [Notes, "label:[不視病=]", 'position:上段 上段 上段 上段'], #
156
- [Notes, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 干
157
- [Notes, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 支
158
- [Notes, "label:[社=ja:%%<社日>]",
159
- 'position:中段 中段 中段 中段', 'suffix:日'], # 干 太陽黄経
160
- [Notes, "label:[三伏]", 'position:中段 中段 中段 中段'], # 干 太陽黄経
161
- [Notes, "label:[除手足甲=]", 'position:中段 中段 中段 中段'], # 晦(除手足甲)、支(片方のみ), 没滅凶会日×
162
- [Notes, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 没滅凶会日×
163
- [Notes, "label:[臘=ja:%%<臘日>]",
164
- 'position:中段 中段 中段 中段', 'suffix:日'], # 太陽黄経
165
- [Notes, "label:[伐=]", 'position:上段 中段 中段 中段上', 'suffix:日'], # 干支
166
- [Notes, "label:[五墓=ja:%%<暦注下段>#%.<五墓日>]",
167
- 'position:上段 上段 中段 中段下', 'suffix:日'], # 干支
168
- [Notes, "label:[九虎=]", 'position:上段 中段 中段 中段上'], # 干支 節月
169
- [Notes, "label:[八龍=]", 'position:上段 上段 中段 中段上'], # 干支 節月
170
- [Notes, "label:[七鳥=]", 'position:上段 上段 中段 中段上'], # 干支 節月
171
- [Notes, "label:[六蛇=]", 'position:上段 上段 中段 中段上'], # 干支 節月
172
-
173
- [Notes, "label:[没=ja:%%<没日>]",
174
- 'position:中段 中段 中段 中段', 'suffix:日'], # 太陽黄経
175
- [Notes, "label:[日食]", 'position:中段 中段 中段 中段'], # 日食表
176
- [Notes, "label:[滅=ja:%%<滅日]",
177
- 'position:中段 中段 中段 中段', 'suffix:日'], # 月の位相
178
- [Notes, "label:[月食]", 'position:中段 中段 中段 中段'], # 月食表
179
- [Notes, "label:[月相]", 'position:中段 中段 中段 中段'], # 月の位相
180
- [Notes, "label:[土用事=ja:%%<土用>]",
181
- 'position:中段 中段 中段 中段'], # 太陽黄経
182
- [Notes, "label:[伏龍=]", 'position:上段 上段 下段 下段', 'suffix:在'], # 太陽黄経
183
-
184
- [Notes, "label:[凶会=ja:%%<暦注下段>#%.<凶会日>]",
185
- 'position:下段 下段 下段 下段', 'suffix:日'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
186
- [Notes, "label:[大小歳=]", 'position:下段 下段 下段 下段'], # 干支 節月
187
- [Notes, "label:[歳徳=ja:%%<歳徳神>]",
188
- 'position:下段 下段 下段 下段',], # 干 節年 凶会日× ~合も
189
- [Notes, "label:[天恩=ja:%%<暦注下段>#%.<天恩日>]",
190
- 'position:下段 下段 下段 下段', 'suffix:日'], # 干支 節月 凶会日×
191
- [Notes, "label:[天赦=ja:%%<暦注下段>#%.<天赦日>]",
192
- 'position:下段 下段 下段 下段'], # 干支 節月
193
- [Notes, "label:[母倉=ja:%%<暦注下段>#%.<母倉日>]",
194
- 'position:下段 下段 下段 下段', 'suffix:日'], # 支 節月 凶会日×
195
- [Notes, "label:[月徳=]", 'position:下段 下段 下段 下段',], # 干 節月 凶会日× ~合も
196
- [Notes, "label:[九坎=]", 'position:下段 下段 下段 下段'], # 節月
197
- [Notes, "label:[帰忌=ja:%%<暦注下段>#%.<帰忌日>]",
198
- 'position:下段 下段 下段 下段', 'suffix:日'], # 節月
199
- [Notes, "label:[血忌=ja:%%<暦注下段>#%.<血忌日>]",
200
- 'position:下段 下段 下段 下段', 'suffix:日'], # 支 節月
201
- [Notes, "label:[無翹=]", 'position:下段 下段 下段 下段'], # 節月
202
- [Notes, "label:[厭=]", 'position:下段 下段 下段 下段'], # 支 節月
203
- [Notes, "label:[重=ja:%%<暦注下段>#%.<重日>]",
204
- 'position:下段 下段 下段 下段', 'suffix:日'], # 支
205
- [Notes, "label:[復=ja:%%<暦注下段>#%.<復日>]",
206
- 'position:下段 下段 下段 下段', 'suffix:日'], # 節月
207
- [Notes, "label:[月煞=]", 'position:下段 下段 下段 下段', 'suffix:在'], # 支 節月
208
- [Notes, "label:[往亡=ja:%%<暦注下段>#%.<往亡日>]",
209
- 'position:下段 下段 下段 下段', 'suffix:日'], # 太陽黄経
210
- [Notes, "label:[日遊=ja:%%<日遊神>]",
211
- 'position:最下段', 'suffix:在'], # 干支
212
-
213
- [Notes, "label:[受死=ja:%%<暦注下段>#%.<受死日>]",
214
- 'position:仮名暦', 'suffix:日'], # 支 節月
215
- [Notes, "label:[彼岸]", 'position:仮名暦'], # 太陽黄経
216
- [Notes, "label:[八専]", 'position:仮名暦'], # 干支
217
- [Notes, "label:[金神間日=ja:%%<金神>#%.<金神の遊行・間日>]",
218
- 'position:仮名暦'], # 節月
219
- [Notes, "label:[天火=ja:%%<暦注下段>#%.<天火日>]",
220
- 'position:仮名暦', 'suffix:日'], # 支 節月
221
- [Notes, "label:[地火=ja:%%<暦注下段>#%.<地火日>]",
222
- 'position:仮名暦', 'suffix:日'], # 節月
223
- [Notes, "label:[人火=]", 'position:仮名暦'], # 支 節月
224
- [Notes, "label:[雷火=]", 'position:仮名暦'], # 節月
225
- [Notes, "label:[赤舌=ja:%%<赤舌日>]",
226
- 'position:仮名暦', 'suffix:日'], # 暦月 暦日
227
- [Notes, "label:[十死=ja:%%<暦注下段>#%.<十死日>]",
228
- 'position:仮名暦', 'suffix:日'], # 支 節月
229
- [Notes, "label:[道虚=]", 'position:仮名暦', 'suffix:日'], # 暦日
230
- [Notes, "label:[大明=ja:%%<暦注下段>#%.<大明日>]",
231
- 'position:仮名暦', 'suffix:日'], # 干支
232
- [Notes, "label:[赤口=ja:%%<赤口日>]",
233
- 'position:仮名暦', 'suffix:日'], # 暦月 暦日
234
- [Notes, "label:[甲子待=ja:%%<甲子>]",
235
- 'position:仮名暦'], # 干支
236
- [Notes, "label:[庚申待]", 'position:仮名暦'], # 干支
237
- [Notes, "label:[犯土]", 'position:仮名暦'], # 干支
238
- [Notes, "label:[十方暮]", 'position:仮名暦'], # 干支
239
- [Notes, "label:[一粒万倍=ja:%%<一粒万倍日>]",
240
- 'position:仮名暦', 'suffix:日'], # 支 節月
241
- [Notes, "label:[天福=]", 'position:仮名暦'], # 節月
242
- [Notes, "label:[地福=]", 'position:仮名暦'], # 支 節月
243
- [Notes, "label:[地五福=]", 'position:仮名暦'], # 節月
244
- [Notes, "label:[三隣亡]", 'position:仮名暦'], # 支 節月
245
- [Notes, "label:[不成就=ja:%%<不成就日>]",
246
- 'position:仮名暦', 'suffix:日'], # 暦月 暦日/晦日
247
-
248
- [Notes, "label:[三宝吉=]", 'position:上段 上段 上段 上段'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
249
- [Notes, "label:[神吉=ja:%%<暦注下段>#%.<神日>]",
250
- 'position:上段 上段 中段 中段上', 'suffix:日'], # 干支 節月
251
- [Notes, "label:[雑事吉=]", 'position:雑事吉'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
252
- [Notes, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'], # 干支 節月(宣明暦以前)/暦月(貞享暦以降)
170
+ [Note, 0xFFFF, "label:[干支]", 'position:共通'], # 0: 干支
171
+ # [Note, 0x, "label:[干=ja:%%<十干>]",
172
+ # 'position:共通'], #
173
+ # [Note, 0x, "label:[支=ja:%%<十二支>]",
174
+ # 'position:共通'], #
175
+ [Note, 0x3FFF, "label:[納音]", 'position:共通', 'suffix:是'], # 1: 干支
176
+ [Note, 0xFFFF, "label:[十二直]", 'position:共通'], # 2: 支 節月
177
+ [Note, 0xFFFF, "label:[七曜]", 'position:共通'], # 3: 七曜
178
+ [Note, 0xF800, "label:[廿八宿=ja:%%<二十八宿>]",
179
+ 'position:共通'], # 4: 廿八宿
180
+ [Note, 0x07F8, "label:[廿七宿=ja:%%<二十八宿>]",
181
+ 'position:共通'], # 5: 暦月 暦日
182
+ [Note, 0xC000, "label:[九星]", 'position:民間'], # 6: 九星
183
+ [Note, 0x8000, "label:[六曜]", 'position:民間'], # 7: 暦月 暦日
184
+ [Note, 0xE000, "label:[祝祭日]", 'position:祝祭日'], # 8: 暦月 暦日 (七曜)
185
+ [Note, 0xFFFF, "label:[廿四節気=ja:%%<二十四節気>]",
186
+ 'position:時候'], # 9: 太陽黄経
187
+ [Note, 0xFFFF, "label:[節中=]", 'position:時候'], # 10: 太陽黄経
188
+ [Note, 0xFFFC, "label:[七十二候]", 'position:時候'], # 11: 太陽黄経
189
+ [Note, 0x3FFC, "label:[六十卦=]", 'position:時候'], # 12: 太陽黄経
190
+ [Note, 0xF800, "label:[節分]", 'position:雑節'], # 13: 立春からの日数
191
+ [Note, 0xF800, "label:[初午]", 'position:雑節'], # 14: 支 節月 or 暦月
192
+ [Note, 0xF800, "label:[八十八夜]", 'position:雑節'], # 15: 立春からの日数
193
+ [Note, 0xF800, "label:[入梅]", 'position:雑節'], # 16: 干 太陽黄経
194
+ [Note, 0xF800, "label:[二百十日]", 'position:雑節'], # 17: 立春からの日数
195
+ [Note, 0xF800, "label:[二百廿日]", 'position:雑節'], # 18: 立春からの日数
196
+
197
+ [Note, 0x3FFC, "label:[大禍=ja:%%<暦注下段>#%.<大禍日>]",
198
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 19: 支 節月
199
+ [Note, 0x3FFC, "label:[滅門=ja:%%<暦注下段>#%.<滅門日>]",
200
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 20: 支 節月
201
+ [Note, 0x3FFC, "label:[狼藉=ja:%%<暦注下段>#%.<狼藉日>]",
202
+ 'position:上段 上段 欄外 欄外', 'suffix:日'], # 21: 支 節月
203
+
204
+ [Note, 0x07F8, "label:[甘露=]", 'position:上段 上段 上段 上段', 'suffix:日'], # 22: 七曜 廿七宿
205
+ [Note, 0x07F8, "label:[金剛峯=]", 'position:上段 上段 上段 上段'], # 23: 七曜 廿七宿
206
+ [Note, 0x07F8, "label:[羅刹=]", 'position:中段 中段 上段 上段'], # 24: 七曜 廿七宿
207
+
208
+ [Note, 0x3FFC, "label:[大將軍=ja:%%<大将軍_(方位神)>]",
209
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 25: 干支 節年
210
+ [Note, 0xFFFC, "label:[天一=ja:%%<天一神>]",
211
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 26: 干支
212
+ [Note, 0x3FFC, "label:[土公=ja:%%<土公神>]",
213
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 27: 干支
214
+ [Note, 0x3FFC, "label:[歳下食=ja:%%<暦注下段>#%.<歳下食>]",
215
+ 'position:上段 上段 上段 上段'], # 28: 干支 節年
216
+ [Note, 0x3FFC, "label:[忌遠行=]", 'position:上段 中段 上段 上段'], # 29: 節月
217
+ [Note, 0x3FFC, "label:[忌夜行=]", 'position:上段 中段 上段 上段'], # 30: 支 節月
218
+ [Note, 0x3FFC, "label:[下食時=ja:%%<暦注下段>#%.<時下食>]",
219
+ 'position:上段 上段 上段 上段', 'suffix:-'], # 31: 節月 貞享暦で一部廃止
220
+ [Note, 0x3FFC, "label:[天間=]", 'position:上段 中段 上段 中段上'], # 32: 干支 節月
221
+ [Note, 0x3FFC, "label:[不視病=]", 'position:上段 上段 上段 上段'], # 33:
222
+ [Note, 0x3FFC, "label:[不問疾=]", 'position:上段 上段 上段 上段'], # 34:
223
+ [Note, 0x3FFC, "label:[不弔人=]", 'position:上段 上段 上段 上段'], # 35:
224
+ [Note, 0xFFFC, "label:[彼岸]", 'position:仮名暦'], # 36: 太陽黄経
225
+ [Note, 0xFFFF, "label:[社=ja:%%<社日>]",
226
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 37: 太陽黄経
227
+ [Note, 0xFFFF, "label:[三伏]", 'position:中段 中段 中段 中段'], # 38: 干 太陽黄経
228
+ [Note, 0x3FFC, "label:[除手足甲=]", 'position:中段 中段 中段 中段'], # 39: 晦(除手足甲)、支(片方のみ), 没滅凶会日×
229
+ [Note, 0x3FFC, "label:[沐浴=]", 'position:中段 中段 中段 中段'], # 40: 支 没滅凶会日×
230
+ [Note, 0x3FFD, "label:[臘=ja:%%<臘日>]",
231
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 41: 支 太陽黄経
232
+ [Note, 0x3FFC, "label:[伐=]", 'position:上段 中段 中段 中段上', 'suffix:日'], # 42: 干支
233
+ [Note, 0x3FFC, "label:[五墓=ja:%%<暦注下段>#%.<五墓日>]",
234
+ 'position:上段 上段 中段 中段下', 'suffix:日'], # 43: 干支
235
+ [Note, 0x3FFC, "label:[六蛇=]", 'position:上段 上段 中段 中段上'], # 44: 干支 節月
236
+ [Note, 0x3FFC, "label:[七鳥=]", 'position:上段 上段 中段 中段上'], # 45: 干支 節月
237
+ [Note, 0x3FFC, "label:[八龍=]", 'position:上段 上段 中段 中段上'], # 46: 干支 節月
238
+ [Note, 0x3FFC, "label:[九虎=]", 'position:上段 中段 中段 中段上'], # 47: 干支 節月
239
+ [Note, 0x07FF, "label:[没=ja:%%<没日>]",
240
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 48: 太陽黄経
241
+ [Note, 0xFFF8, "label:[日食]", 'position:中段 中段 中段 中段'], # 49: 日食表
242
+ [Note, 0x07FC, "label:[滅=ja:%%<滅日]",
243
+ 'position:中段 中段 中段 中段', 'suffix:日'], # 50: 月の位相
244
+ [Note, 0xFFF8, "label:[月食]", 'position:中段 中段 中段 中段'], # 51: 月食表
245
+ [Note, 0xC7FD, "label:[月相]", 'position:中段 中段 中段 中段'], # 52: 月の位相
246
+ [Note, 0xFFFF, "label:[土用事=ja:%%<土用>]",
247
+ 'position:中段 中段 中段 中段'], # 53: 太陽黄経
248
+ [Note, 0x3FF0, "label:[伏龍=]", 'position:上段 上段 下段 下段', 'suffix:在'], # 54: 太陽黄経
249
+
250
+ [Note, 0x3FFF, "label:[凶会=ja:%%<暦注下段>#%.<凶会日>]",
251
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 55: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
252
+ [Note, 0x3FFF, "label:[大小歳=]", 'position:下段 下段 下段 下段'], # 56: 干支 節月
253
+ [Note, 0x3FFC, "label:[歳徳=ja:%%<歳徳神>]",
254
+ 'position:下段 下段 下段 下段'], # 57: 干 節年 凶会日× ~合も
255
+ [Note, 0x0003, "label:[天倉=]", 'position:古注'], # 58: 干支 節月
256
+ # [Note, 0x0003, "label:[天李=]", 'position:古注'], # 干支 節月?
257
+ [Note, 0x37FF, "label:[天恩=ja:%%<暦注下段>#%.<天恩日>]",
258
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 59: 干支 節月 凶会日×
259
+ [Note, 0xFFFF, "label:[天赦=ja:%%<暦注下段>#%.<天赦日>]",
260
+ 'position:下段 下段 下段 下段'], # 60: 干支 節月
261
+ [Note, 0x37FF, "label:[母倉=ja:%%<暦注下段>#%.<母倉日>]",
262
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 61: 支 節月 凶会日×
263
+ [Note, 0x37FC, "label:[月徳=]", 'position:下段 下段 下段 下段'], # 62: 節月 凶会日× ~合も
264
+ [Note, 0x3FFF, "label:[九坎=]", 'position:下段 下段 下段 下段'], # 63: 支 節月
265
+ [Note, 0x3FFF, "label:[歸忌=ja:%%<暦注下段>#%.<帰忌日>]",
266
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 64: 節月
267
+ [Note, 0x3FFF, "label:[血忌=ja:%%<暦注下段>#%.<血忌日>]",
268
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 65: 節月
269
+ [Note, 0x3FFC, "label:[無翹=]", 'position:下段 下段 下段 下段'], # 66: 支 節月
270
+ [Note, 0x3FFF, "label:[厭=]", 'position:下段 下段 下段 下段'], # 67: 支 節月
271
+ [Note, 0x3FFC, "label:[重=ja:%%<暦注下段>#%.<重日>]",
272
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 68: 支
273
+ [Note, 0x3FFD, "label:[復=ja:%%<暦注下段>#%.<復日>]",
274
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 69: 干 節月
275
+ [Note, 0x3FFC, "label:[月煞=]", 'position:下段 下段 下段 下段'], # 70: 支 節月
276
+ [Note, 0x3FFF, "label:[往亡=ja:%%<暦注下段>#%.<往亡日>]",
277
+ 'position:下段 下段 下段 下段', 'suffix:日'], # 71: 太陽黄経
278
+ [Note, 0x3FFF, "label:[日遊=ja:%%<日遊神>]",
279
+ 'position:最下段', 'suffix:在'], # 72: 干支
280
+ [Note, 0x07FF, "label:[人神配当=]", 'position:最下段孟月', 'suffix:-'], # 73: 暦日
281
+
282
+ [Note, 0x3E00, "label:[受死=ja:%%<暦注下段>#%.<受死日>]",
283
+ 'position:仮名暦', 'suffix:日'], # 74: 支 節月
284
+ [Note, 0xFFF0, "label:[八專]", 'position:仮名暦'], # 75: 干支
285
+ [Note, 0x3E00, "label:[八專間日=ja:%%<八専>]",
286
+ 'position:仮名暦'], # 76: 干支
287
+ [Note, 0xC000, "label:[金神間日=ja:%%<金神>#%.<金神の遊行・間日>]",
288
+ 'position:仮名暦'], # 77: 支 節月
289
+ [Note, 0xC000, "label:[金神遊行=ja:%%<金神>#%.<金神の遊行・間日>]",
290
+ 'position:仮名暦'], # 78: 支 節月
291
+ [Note, 0x3FF0, "label:[天火=ja:%%<暦注下段>#%.<天火日>]",
292
+ 'position:仮名暦', 'suffix:日'], # 79: 支 節月
293
+ [Note, 0x3FF0, "label:[地火=ja:%%<暦注下段>#%.<地火日>]",
294
+ 'position:仮名暦', 'suffix:日'], # 80: 支 節月
295
+ [Note, 0x3800, "label:[人火=]", 'position:仮名暦'], # 81: 支 節月
296
+ [Note, 0x3800, "label:[雷火=]", 'position:仮名暦'], # 82: 支 節月
297
+ [Note, 0x3FF0, "label:[赤舌=ja:%%<赤舌日>]",
298
+ 'position:仮名暦', 'suffix:日'], # 83: 暦月 暦日
299
+ [Note, 0x3E00, "label:[十死=ja:%%<暦注下段>#%.<十死日>]",
300
+ 'position:仮名暦', 'suffix:日'], # 84: 支 節月
301
+ [Note, 0x3E00, "label:[道虚=]", 'position:仮名暦', 'suffix:日'], # 85: 暦日
302
+ [Note, 0x3E00, "label:[大明=ja:%%<暦注下段>#%.<大明日>]",
303
+ 'position:仮名暦', 'suffix:日'], # 86: 干支
304
+ [Note, 0x0600, "label:[大赤=ja:%%<赤口日>]",
305
+ 'position:仮名暦', 'suffix:日'], # 87: 暦月 暦日
306
+ [Note, 0xF800, "label:[甲子待=ja:%%<甲子>]",
307
+ 'position:仮名暦'], # 88: 干支
308
+ [Note, 0xC000, "label:[己巳]", 'position:仮名暦'], # 89: 干支
309
+ [Note, 0xF800, "label:[庚申待]", 'position:仮名暦'], # 90: 干支
310
+ [Note, 0x3800, "label:[犯土]", 'position:仮名暦'], # 91: 干支
311
+ [Note, 0xF800, "label:[十方暮]", 'position:仮名暦'], # 92: 干支
312
+ [Note, 0xF800, "label:[一粒万倍=ja:%%<一粒万倍日>]",
313
+ 'position:仮名暦', 'suffix:日'], # 93: 節月
314
+ [Note, 0x3800, "label:[天福=]", 'position:仮名暦'], # 94: 節月
315
+ [Note, 0x3800, "label:[地福=]", 'position:仮名暦'], # 95: 支 節月
316
+ [Note, 0x3800, "label:[地五福=]", 'position:仮名暦'], # 96: 支 節月
317
+ [Note, 0xB800, "label:[三隣亡]", 'position:仮名暦'], # 97: 支 節月
318
+ [Note, 0xF800, "label:[不成就=ja:%%<不成就日>]",
319
+ 'position:仮名暦', 'suffix:日'], # 98: 暦月 暦日/晦日
320
+ [Note, 0x3FFF, "label:[三寶吉=ja:%%<三宝吉>]",
321
+ 'position:上段 上段 上段 上段'], # 99: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
322
+ [Note, 0x3FFF, "label:[神吉=ja:%%<暦注下段>#%.<神日>]",
323
+ 'position:上段 上段 中段 中段上', 'suffix:日'], #100: 干支 節月
324
+ [Note, 0x3FFF, "label:[雑事吉=]", 'position:雑事吉'], #101: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
325
+ [Note, 0x07FF, "label:[小字注=]", 'position:下段小字 下段小字 下段小字 下段小字'],#102: 干支 節月(宣明暦以前)/暦月(貞享暦以降)
253
326
  ]
254
327
  ]]
255
328
 
329
+ #
330
+ # 日本暦注の時代変遷
331
+ #
332
+ # @private
333
+ NoteTypes = (3...When::TM::CalendarEra::JapaneseSolarSeries[1].size).to_a.map {|i|
334
+ calendars =
335
+ [When::TM::CalendarEra::JapaneseLuniSolarSeries[1][i][2],
336
+ When::TM::CalendarEra::JapaneseSolarSeries[1][i][2]].map {|epoch|
337
+ epoch =~ /^(-?\d+)-(\d+)-(\d+)\^(.+)$/
338
+ $4
339
+ }
340
+ [$2 == '01' ? $1.to_i : $1.to_i+1, Cal4Note.new(*calendars)]
341
+ }.reverse
342
+
343
+ # @private
344
+ NoteRange = [
345
+ # 開始 具注暦 七十二候 index mask
346
+ [-660, 0, 0], # ~ 696 0 : 0001
347
+ [ 697, 0, 0], # ~ 763 1 : 0002
348
+ [ 764, 0, 2], # ~ 800 2 : 0004
349
+ [ 801, 0, 2], # ~ 900 3 : 0008
350
+ [ 901, 0, 2], # ~1003 4 : 0010
351
+ [1004, 1, 2], # ~1047 5 : 0020
352
+ [1048, 1, 2], # ~1100 6 : 0040
353
+ [1101, 1, 2], # ~1184 7 : 0080
354
+ [1185, 2, 2], # ~1300 8 : 0100
355
+ [1301, 2, 2], # ~1337 9 : 0200
356
+ [1338, 3, 2], # ~1684 10 : 0400
357
+ [1685, 3, 3], # ~1754 11 : 0800
358
+ [1755, 3, 4], # ~1867 12 : 1000
359
+ [1868, 3, 4], # ~1872 13 : 2000
360
+ [1873, 3, 4], # ~1873 14 : 4000
361
+ [1874, 3, 5] # ~ 15 : 8000
362
+ ]
363
+
364
+ # @private
365
+ NoteFocused = (0...NoteRange.size).to_a.map {|range|
366
+ (3..5).to_a.map {|cord|
367
+ notes = NoteObjects[1][cord]
368
+ (2...notes.size).to_a.inject([]) {|focused,note|
369
+ focused << notes[note][2][/\[.+?[=\]]/][1..-2] if notes[note][1][range] == 1
370
+ focused
371
+ }
372
+ }
373
+ }
374
+
375
+ #
376
+ # 月の大小
377
+ #
378
+ # @private
379
+ MonthPattern = {
380
+ 29 => '小',
381
+ 30 => '大',
382
+ -28 => '平',
383
+ -29 => '閏',
384
+ -30 => '小',
385
+ -31 => '大'
386
+ }
387
+
388
+ #
389
+ # 日本暦注が使用する暦法
390
+ #
391
+ # @private
392
+ class Cal4Note
393
+ attr_reader :calendar, :solar
394
+
395
+ def l_calendar
396
+ @l_calendar ||= When.Calendar(@calendar)
397
+ end
398
+
399
+ def s_calendar
400
+ @s_calendar ||= When.Calendar(@solar)
401
+ end
402
+
403
+ def l_phases
404
+ @l_phases ||= JapaneseNote::LunarPhases.new('formula'=>l_calendar.formula[-1])
405
+ end
406
+
407
+ def s_terms
408
+ @s_terms ||= JapaneseNote::SolarTerms.new('formula'=>s_calendar.formula[0])
409
+ end
410
+
411
+ def doyo
412
+ s_calendar.doyo
413
+ end
414
+ end
415
+
256
416
  #
257
417
  # 日本暦注用の NoteObjects の要素のための内部クラス
258
418
  #
259
- class Notes
419
+ # @private
420
+ class Note
260
421
 
261
- # @private
262
422
  attr_reader :label, :position, :suffix
263
423
 
264
- # @private
265
424
  def to_note_hash(note, dates=nil)
266
425
  {
267
426
  :note => self,
@@ -286,55 +445,50 @@ class When::CalendarTypes::CalendarNote
286
445
  #
287
446
  # 日本暦注計算に必要となる暦日や暦法をまとめた内部クラス
288
447
  #
448
+ # @private
289
449
  class Dates
290
450
 
291
- # @private
292
- attr_reader :year, :calendar, :doyo, :o_date, :m_date, :l_date, :s_date, :s_terms, :l_phases
293
-
294
- # 具注暦の配置パターン
295
- # @private
296
- def index_g
297
- return @index_g if @index_g
298
- @index_g = (@year < 1004) ? 0 : # 御堂関白記(前期)以前
299
- (@year < 1185) ? 1 : # 御堂関白記(後期)
300
- (@year < 1338) ? 2 : # 鎌倉時代
301
- 3 # 室町時代以降
302
- end
303
-
304
- # 七十二候パターン
305
- # @private
306
- def index_s
307
- return @index_s if @index_s
308
- @index_s = (@year < 1685) ? 1 : # 宣明暦式
309
- (@year < 1755) ? 2 : # 貞享暦式
310
- (@year < 1874) ? 3 : # 宝暦暦式
311
- 4 # 略本暦式
312
- end
451
+ attr_reader :year, :precision, :cal4note, :range, :index_g, :index_s, :o_date, :l_date, :m_date, :s_date
313
452
 
314
453
  # 初期設定
315
- # @private
316
- def initialize(date, year, calendar, doyo=nil)
317
- case calendar
318
- when Array # 日本製定朔平気法
319
- l_calendar = When.Calendar('ChineseLuniSolar?' + calendar[0])
320
- s_calendar = When.Calendar('Chinese::' + calendar[1])
321
- when /timezone/ # 定朔定気法
322
- l_calendar = When.Calendar('ChineseLuniSolar?' + calendar)
323
- s_calendar = When.Calendar('ChineseSolar?' + calendar)
324
- else # 中国製平定朔平気法
325
- l_calendar = When.Calendar('Chinese::' + calendar)
326
- s_calendar = When.Calendar('Chinese::' + calendar + '(節月)')
454
+ def initialize(date, year=date.most_significant_coordinate, precision=date.precision, cal4note=nil)
455
+
456
+ # 暦注パターン
457
+ if cal4note
458
+ # 年代による判定
459
+ (1...NoteRange.size).to_a.reverse.each do |i|
460
+ if year >= NoteRange[i][0]
461
+ @range = i
462
+ break
463
+ end
464
+ end
465
+ @range ||= 0
466
+ else
467
+ # 暦法による判定
468
+ cal4note = Cal4Note.new(date.frame, date.frame.twin)
469
+ @range =
470
+ case cal4note.l_calendar.formula[-1]
471
+ when When::Ephemeris::ChineseTrueLunation
472
+ date.frame.twin =~ /戊寅|麟徳/ ? 1 : 10 # 唐代定朔暦(儀鳳暦 or 宣明暦)
473
+ when When::Ephemeris::MeanLunation ; 0 # 唐代以前平朔暦(元嘉暦)
474
+ else ; 15 # 現代の旧暦
475
+ end
327
476
  end
328
477
 
329
- @year = year
330
- @calendar = calendar
331
- @doyo = doyo
332
- @o_date = date
333
- @l_date = l_calendar ^ date
334
- @m_date = date.frame.kind_of?(When::CalendarTypes::Julian) ? @l_date : date
335
- @s_date = s_calendar ^ date
336
- @s_terms = When::CalendarTypes::CalendarNote::SolarTerms.new('formula'=>s_calendar.formula[0])
337
- @l_phases = When::CalendarTypes::CalendarNote::LunarPhases.new('formula'=>l_calendar.formula[-1])
478
+ # 具注暦の配置
479
+ @index_g = NoteRange[@range][1]
480
+
481
+ # 七十二候
482
+ @index_s = NoteRange[@range][2]
483
+
484
+ # その他の属性
485
+ @year = year
486
+ @precision = precision
487
+ @cal4note = cal4note
488
+ @o_date = date
489
+ @l_date = @cal4note.l_calendar ^ date
490
+ @m_date = date.frame.kind_of?(When::CalendarTypes::Julian) ? @l_date : @o_date
491
+ @s_date = @cal4note.s_calendar ^ date
338
492
  end
339
493
  end
340
494
 
@@ -351,14 +505,14 @@ class When::CalendarTypes::CalendarNote
351
505
  # @return [Array<Hash>] 上記に該当せず、:indices が Integer の場合
352
506
  # @return [Array<Array<Hash>>] 上記のいずれにも該当しない場合
353
507
  # @note return 値の [Hash] の要素は下記の通り
354
- # :note => 暦注要素 (When::CalendarTypes::JapaneseNote::Notes)
508
+ # :note => 暦注要素 (When::CalendarTypes::JapaneseNote::Note)
355
509
  # :value => 暦注の値 (String or When::BasicTypes::M17n または、その Array)
356
510
  # :position => 具注暦でのその暦注の配置場所(String)
357
511
  #
358
512
  def notes(date, options={})
359
- dates, indices, notes, conditions, options = _parse(date, options)
513
+ dates, indices, notes, conditions, options = _parse_note(date, options)
360
514
  _result(indices.map {|i|
361
- next [] unless i <= dates.o_date.precision
515
+ next [] unless i <= dates.precision
362
516
  send(NoteMethods[i-1], dates, notes[i-1], conditions)
363
517
  }, options)
364
518
  end
@@ -375,16 +529,35 @@ class When::CalendarTypes::CalendarNote
375
529
  def year_notes(dates, notes, conditions={})
376
530
  _note_values(dates, notes, _all_keys[-3], _elements[-3]) do |dates, focused_notes, notes_hash|
377
531
 
532
+ focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-3]
378
533
  root = When.Resource('_co:CommonResidue')
379
534
 
380
535
  # 干支
381
- residue = dates.o_date.most_significant_coordinate-4
536
+ residue = (dates.precision < When::DAY ? dates.o_date : dates.s_date).most_significant_coordinate - 4
382
537
  notes_hash['干支'] = root['干支'][residue % 60]
383
538
  notes_hash['干'] = root['干' ][residue % 10]
384
539
  notes_hash['支'] = root['支' ][residue % 12]
385
540
 
541
+ # 廿八宿
542
+ notes_hash['廿八宿'] ||= root['宿'][(residue+18) % 28]
543
+
386
544
  # 九星
387
- notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.year(dates.s_date.most_significant_coordinate-4)]
545
+ notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.year(residue)]
546
+
547
+ # 大小
548
+ unless notes_hash['大小']
549
+ year = dates.o_date.floor(When::YEAR)
550
+ month = year.floor(When::MONTH)
551
+ pattern = ''
552
+ while year == month
553
+ length = month.length(When::MONTH)
554
+ length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) # 太陽暦
555
+ pattern += '閏' if month[When::MONTH] * 0 == 1
556
+ pattern += MonthPattern[length] || '改'
557
+ month += When::DurationP1M
558
+ end
559
+ notes_hash['大小'] = "#{pattern}(#{year.length(When::YEAR)})"
560
+ end
388
561
 
389
562
  # その他
390
563
  [notes_hash['干支'], notes_hash['干'], notes_hash['支']].each do |note|
@@ -398,17 +571,28 @@ class When::CalendarTypes::CalendarNote
398
571
  def month_notes(dates, notes, conditions={})
399
572
  _note_values(dates, notes, _all_keys[-2], _elements[-2]) do |dates, focused_notes, notes_hash|
400
573
 
574
+ focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-2]
401
575
  root = When.Resource('_co:CommonResidue')
402
576
 
403
577
  # 干支
404
- residue = dates.o_date.most_significant_coordinate*12+(dates.m_date.cal_date[1] * 1)+13
578
+ residue = month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.m_date)
405
579
  notes_hash['干支'] = root['干支'][residue % 60]
406
580
  notes_hash['干'] = root['干' ][residue % 10]
407
581
  notes_hash['支'] = root['支' ][residue % 12]
408
582
 
583
+ # 廿八宿
584
+ notes_hash['廿八宿'] ||= root['宿'][(residue+6) % 28]
585
+
409
586
  # 九星
410
587
  notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.month(
411
- dates.s_date.most_significant_coordinate*12+dates.s_date.cal_date[1]+13)]
588
+ month_stem_branch(dates.precision < When::DAY ? dates.o_date : dates.s_date))]
589
+
590
+ # 大小
591
+ unless notes_hash['大小']
592
+ length = dates.o_date.length(When::MONTH)
593
+ length = -length if dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) # 太陽暦
594
+ notes_hash['大小'] = "#{dates.o_date[When::MONTH]*0==1 ? '閏' : ''}#{MonthPattern[length] || '改'}(#{length.abs})"
595
+ end
412
596
 
413
597
  # その他
414
598
  [notes_hash['干支'], notes_hash['干'], notes_hash['支'], JapaneseLuniSolarNote].each do |note|
@@ -422,7 +606,8 @@ class When::CalendarTypes::CalendarNote
422
606
  def day_notes(dates, notes, conditions={})
423
607
  _note_values(dates, notes, _all_keys[-1], _elements[-1]) do |dates, focused_notes, notes_hash|
424
608
 
425
- root = When.Resource('_co:CommonResidue')
609
+ focused_notes[0..-1] = focused_notes & NoteFocused[dates.range][-1]
610
+ root = When.Resource(dates.range == 1 ? '_co:CommonResidue?V=0618' : '_co:CommonResidue')
426
611
 
427
612
  # 干支
428
613
  residue = dates.s_date.to_i-11
@@ -430,28 +615,27 @@ class When::CalendarTypes::CalendarNote
430
615
  notes_hash['干'] = root['干' ][residue % 10]
431
616
  notes_hash['支'] = root['支' ][residue % 12]
432
617
 
433
- # 七曜
434
- notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
435
-
436
- # 廿八宿
437
- notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28] if dates.year >= 1685
438
-
439
- # 九星
440
- notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.o_date, dates.s_terms)]
441
-
442
618
  # その他
443
619
  [SolarTerms, LunarPhases, notes_hash['干支'], notes_hash['干'], notes_hash['支'],
444
620
  JapaneseLuniSolarNote, JapaneseSolarNote].each do |note|
445
621
  note._day_notes(notes_hash, dates, conditions)
446
622
  end
447
623
 
624
+ # 廿四節気
625
+ notes_hash['廿四節気'] = _residue24(notes_hash['廿四節気'], root, dates)
626
+
627
+ # 七曜
628
+ notes_hash['七曜'] ||= root['Week'][dates.s_date.to_i % 7]
629
+
448
630
  # 廿七宿
449
- notes_hash['廿七宿'] = root['宿'][notes_hash['廿七宿']] if notes_hash['廿七宿'].kind_of?(Integer)
631
+ notes_hash['廿七宿'] = _residue27(notes_hash['廿七宿'], root)
632
+
633
+ # 廿八宿
634
+ notes_hash['廿八宿'] ||= root['宿'][(dates.s_date.to_i+11) % 28]
635
+
636
+ # 九星
637
+ notes_hash['九星'] ||= root['九星'][When::Coordinates::Kyusei.day(dates.s_date, dates.cal4note.s_terms)]
450
638
 
451
- # 廿四節気
452
- notes_hash['廿四節気'] = 3 - notes_hash['廿四節気'] if dates.calendar == '麟徳暦' &&
453
- [1,2].include?(notes_hash['廿四節気']) # 啓蟄 <-> 雨水
454
- notes_hash['廿四節気'] = root['二十四節気::*'][(notes_hash['廿四節気']-3) % 24] if notes_hash['廿四節気'].kind_of?(Integer)
455
639
  notes_hash
456
640
  end
457
641
  end
@@ -459,28 +643,58 @@ class When::CalendarTypes::CalendarNote
459
643
  #
460
644
  # 日本暦日情報オブジェクトの生成
461
645
  #
646
+ # @note 対となる太陽暦のある太陰太陽暦はそのまま(太陰太陽暦,太陽暦)の対
647
+ # そうでなければ、採用する対を年代により選択する
648
+ #
462
649
  def _to_date_for_note(date)
463
- date = _to_japanese_date(date)
464
- return nil unless date
465
- year = date.most_significant_coordinate
466
- NoteTypes.each do |type|
467
- start, calendar, doyo = type
468
- return Dates.new(date, year, calendar, doyo) if year >= start
650
+ if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
651
+ return Dates.new(date) if date.frame.twin
652
+ o_date = date
653
+ else
654
+ o_date = _to_japanese_date(date)
655
+ return nil unless o_date
656
+ end
657
+ year = o_date.most_significant_coordinate
658
+ NoteTypes.each do |line|
659
+ return Dates.new(o_date, year, date.precision, line[1]) if year >= line[0]
469
660
  end
470
661
  nil
471
662
  end
472
663
 
473
664
  #
474
- # 任意の暦を日本暦日に変換
665
+ # 任意の暦を日本年号付暦日に変換
475
666
  #
476
667
  def _to_japanese_date(date)
477
- return date if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar) ||
478
- date._attr[:query] && date._attr[:query]['area'].to_s == '日本'
668
+ return date if date._attr[:query] && date._attr[:query]['area'].to_s =~ /日本/
479
669
  (date^ When.era(:area=>'日本')).each do |list|
480
670
  return list[0] if list[0]
481
671
  end
482
672
  nil
483
673
  end
674
+
675
+ #
676
+ # 廿四節気を Resudue 化
677
+ #
678
+ def _residue24(index, root, dates)
679
+ return index unless index.kind_of?(Integer)
680
+ root['二十四節気::*'][(index-3) % 24]
681
+ end
682
+
683
+ #
684
+ # 廿七宿を Resudue 化
685
+ #
686
+ def _residue27(index, root)
687
+ return index unless index.kind_of?(Integer)
688
+ root['宿'][index]
689
+ end
690
+
691
+ #
692
+ # 月の干支
693
+ #
694
+ def month_stem_branch(date)
695
+ date.most_significant_coordinate*12+(date.cal_date[1] * 1) +
696
+ (date.frame.kind_of?(When::CalendarTypes::Julian) ? 12 : 13)
697
+ end
484
698
  end
485
699
 
486
700
  #
@@ -488,6 +702,9 @@ class When::CalendarTypes::CalendarNote
488
702
  #
489
703
  class JapaneseSolarNote < self
490
704
 
705
+ #
706
+ # 祝祭日一覧
707
+ #
491
708
  NotesList = {
492
709
  [ 1, 1] => [[1868..1872, '元旦'], [1874..1948, '四方拝'], [1949..2100, '元日']],
493
710
  [ 1, 3] => [[1874..1948, '元始祭']],
@@ -497,13 +714,16 @@ class When::CalendarTypes::CalendarNote
497
714
  [ 1,29] => [[1873..1873, '神武天皇即位日']],
498
715
  [ 1,30] => [[1874..1912, '孝明天皇祭']],
499
716
  [ 2,11] => [[1874..1948, '紀元節'], [1967..2100, '建国記念の日']],
717
+ [ 2,24] => [[1989..1989, '昭和天皇の大喪の礼']],
500
718
  [ 3, 3] => [[1868..1872, '弥生節句']],
501
719
  [ 3, 0] => [[1879..1948, '春季皇霊祭'], [1949..2100, '春分の日']],
502
720
  [ 4, 3] => [[1874..1948, '神武天皇祭']],
721
+ [ 4,10] => [[1959..1959, '皇太子明仁親王の結婚の儀']],
503
722
  [ 4,29] => [[1927..1948, '天長節'], [1949..1988, '天皇誕生日'], [1989..2006, 'みどりの日'], [2007..2100, '昭和の日']],
504
723
  [ 5, 3] => [[1949..2100, '憲法記念日']],
505
724
  [ 5, 4] => [[2007..2100, 'みどりの日']],
506
725
  [ 5, 5] => [[1868..1872, '端午節句'], [1949..2100, 'こどもの日']],
726
+ [ 6, 9] => [[1993..1993, '皇太子徳仁親王の結婚の儀']],
507
727
  [ 7, 7] => [[1868..1872, '七夕節句']],
508
728
  [ 7,15] => [[1868..1872, 'お盆']],
509
729
  [ 7,20] => [[1996..2002, '海の日']],
@@ -521,27 +741,36 @@ class When::CalendarTypes::CalendarNote
521
741
  [10,17] => [[1879..1947, '神嘗祭']],
522
742
  [10,31] => [[1913..1926, '天長節祝日']],
523
743
  [11, 3] => [[1873..1911, '天長節'], [1927..1947, '明治節'], [1948..2100, '文化の日']],
744
+ [11,10] => [[1915..1915, '即位の礼'], [1928..1928, '即位の礼']],
745
+ [11,12] => [[1990..1990, '即位の礼正殿の儀']],
746
+ [11,14] => [[1915..1915, '大嘗祭'], [1928..1928, '大嘗祭']],
747
+ [11,16] => [[1915..1915, '大饗第1日'], [1928..1928, '大饗第1日']],
524
748
  [11,23] => [[1873..1947, '新嘗祭'], [1948..2100, '勤労感謝の日']],
525
749
  [12,23] => [[1989..2100, '天皇誕生日']],
526
750
  [12,25] => [[1927..1947, '大正天皇祭']]
527
751
  }
528
752
 
753
+ # @private
754
+ Long = {3=>0, 9=>180}
755
+
529
756
  class << self
530
757
 
531
758
  # 日の暦注 - 祝祭日の計算
532
759
  # @private
533
760
  def _day_notes(notes, dates, conditions={})
534
- # 明治維新以降のみ扱う
761
+ # 明治維新以降の実暦日のみ扱う
762
+ return notes if dates.o_date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
535
763
  year = dates.o_date.most_significant_coordinate
536
764
  return notes unless year >= 1868
537
765
 
538
766
  # 春分の日と秋分の日を祝祭日に加える
539
- long = {3=>0, 9=>180}[dates.o_date.cal_date[1]] if year >= 1878
767
+ long = Long[dates.o_date.cal_date[1]] if year >= 1878
540
768
  if long
541
769
  date = When.when?(dates.o_date.to_cal_date.to_s,
542
- {:clock=>When.Clock(dates.s_date.frame.timezone[0]*86400)})
543
- term = dates.s_terms.term(date.floor(When::MONTH,
544
- When::DAY), [long,360]).cal_date[1..2]
770
+ {:frame=>dates.o_date.frame,
771
+ :clock=>dates.s_date.frame.time_basis})
772
+ term = dates.cal4note.s_terms.term(date.floor(When::MONTH,
773
+ When::DAY), [long,360]).cal_date[1..2]
545
774
  list = NotesList.dup
546
775
  list[term] = list[[term[0],0]]
547
776
  else
@@ -589,6 +818,7 @@ class When::CalendarTypes::CalendarNote
589
818
 
590
819
  # 振替休日とハッピーマンデーを考慮しない祝祭日
591
820
  def _note(list, year, month, day)
821
+ return nil if day == 0
592
822
  year = [year, 2100].min
593
823
  note = list[[month,day]]
594
824
  return nil unless note
@@ -625,6 +855,11 @@ class When::CalendarTypes::CalendarNote
625
855
  '羅刹' => [15, 21, 25, 19, 2, 13, 22] # 胃16 鬼22 翼26 参20 氐02 奎14 柳23
626
856
  }
627
857
 
858
+ # 人神配当
859
+ HumanBody = %w(足大指 外踝 股内 腰 口 手 内踝 腕 尻 腰背
860
+ 鼻柱 髪際 牙歯 胃管 遍身 胸 気街 股内 足 踝
861
+ 足小指 足踝及胸、目下 肝及足 手陽明 足陽明 胸 膝 陰 膝晊 足跌)
862
+
628
863
  # 六曜
629
864
  Rokuyo = When.Resource('_m:JapaneseTerms::六曜')
630
865
 
@@ -638,6 +873,7 @@ class When::CalendarTypes::CalendarNote
638
873
  # 日の暦注
639
874
  # @private
640
875
  def self._day_notes(notes, dates, conditions={})
876
+
641
877
  # 廿七宿
642
878
  m, l = [1,0].map {|f| dates.m_date.cal_date[1] * f}
643
879
  d = (StarMansions[l==1 ? (conditions[:i27]||0) :
@@ -650,31 +886,25 @@ class When::CalendarTypes::CalendarNote
650
886
  notes[c] = c if d == WeekDepended[c][w]
651
887
  end
652
888
 
653
- # 三宝吉・神吉・雑事吉
654
- notes['神吉'] = notes['雑事吉'] = notes['三宝吉'] = nil if notes['没' ] || notes['滅' ]
655
- notes['神吉'] = notes['雑事吉'] = nil if notes['日食'] || notes['月食'] || notes['往亡']
656
- notes['三宝吉'] = nil if !notes['甘露'] && (notes['羅刹'] || notes['日食'] || notes['月食'])
657
- notes['三宝吉'] = notes['甘露'] ? '三宝吉' : nil if /\+/ =~ notes['三宝吉'].to_s
658
- notes['三宝吉'] = '三吉' if notes['三宝吉'] && dates.year >= 1185 # 鎌倉以降
889
+ # 三寶吉・神吉・雑事吉
890
+ notes['神吉'] = notes['雑事吉'] = notes['三寶吉'] = nil if notes['没' ] || notes['滅' ]
891
+ notes['神吉'] = notes['雑事吉'] = nil if notes['日食'] || notes['月食'] || notes['往亡']
892
+ notes['三寶吉'] = nil if !notes['甘露'] && (notes['羅刹'] || notes['日食'] || notes['月食'])
893
+ notes['三寶吉'] = notes['甘露'] ? '三寶吉' : nil if /\+/ =~ notes['三寶吉'].to_s
894
+ notes['三寶吉'] = '三吉' if notes['三寶吉'] && dates.range >= 8 # 鎌倉以降
659
895
 
660
- # 除手足甲 & 道虚
896
+ # 除手足甲 & 道虚・人神配当
661
897
  y,m0,d0 = dates.m_date.cal_date
662
- notes['道虚'] = '道虚' if d0 % 6 == 0
663
- if (d0 == 29)
664
- m1 = (dates.m_date + When.Duration('P1D')).cal_date[1]
665
- unless m0 == m1
666
- # 晦日
667
- notes['除手足甲'] = '除手足甲' unless notes['没'] || notes['滅'] || notes['凶会']
668
- notes['道虚'] = '道虚'
669
- misoka = true if m % 6 == 0 # 『現代こよみ読み解き事典』 for 不成就日
670
- end
671
- end
898
+ misoka = m0 != (dates.m_date + When.Duration('P1D')).cal_date[1] if d0 == 29
899
+ notes['除手足甲'] = '除手足甲' if ([6,16,30].include?(d0) || misoka) && !(notes['没'] || notes['滅'] || notes['凶会'])
900
+ notes['道虚'] = '道虚' if d0 % 6 == 0 || misoka
901
+ notes['人神配当'] = HumanBody[d0-1]
672
902
 
673
903
  # 仮名暦
674
904
  notes['赤舌' ] ||= d0 == (m * 5 - 3) % 6 + 1 ? '赤舌' : nil
675
- notes['赤口' ] ||= d0 == (m * 7 - 4) % 8 + 1 ? '赤口' : nil
676
- notes['不成就'] ||= d0 % 8 == [6,3,2,1,4,5][m % 6] || misoka ? '不成就' : nil
677
- notes['六曜' ] ||= Rokuyo[(m + d0) % 6] if dates.year >= 1873 # 明治改暦以降
905
+ notes['大赤' ] ||= d0 % 8 == (m * 7 - 3) % 8 ? '大赤' : nil
906
+ notes['不成就'] ||= d0 % 8 == [6,3,2,1,4,5][m % 6] || (misoka && m % 6 == 0) ? '不成就' : nil # 『現代こよみ読み解き事典』 for 不成就日
907
+ notes['六曜' ] ||= Rokuyo[(m + d0) % 6]
678
908
  notes
679
909
  end
680
910
  end
@@ -682,25 +912,34 @@ class When::CalendarTypes::CalendarNote
682
912
  #
683
913
  # 月の位相による暦注
684
914
  #
685
- class LunarPhases < LuniSolarPositions
686
-
687
- Phases = {7.0=>'上弦', 8.0=>'上弦', 15.0=>'望', 22.0=>'下弦', 23.0=>'下弦'}
915
+ class JapaneseNote::LunarPhases < LunarPhases
688
916
 
689
917
  # 日の暦注
690
918
  # @private
691
919
  def self._day_notes(notes, dates, conditions={})
692
- return notes unless dates.year < 1685
693
920
  date = When.when?(dates.o_date.to_cal_date.to_s,
694
- {:clock=>When.Clock(dates.l_date.frame.timezone[0]*86400)})
695
- phase, metsu = dates.l_phases.position(date)
696
- phase = Phases[phase]
921
+ {:frame=>dates.o_date.frame,
922
+ :clock=>dates.l_date.frame.time_basis})
923
+ phase, metsu = dates.cal4note.l_phases.position(date)
697
924
 
698
925
  # 滅
699
926
  notes['滅'] = '滅' if metsu == 2
700
927
 
701
928
  # 月相
702
- notes['月相'] ||=
703
- /弦/ !~ phase ? phase : dates.l_phases.position(date, 0.5)[0] % 15 == 8.0 ? phase : nil
929
+ unless notes['月相']
930
+ date = When.when?(dates.o_date.to_cal_date.to_s,
931
+ {:frame=>dates.o_date.frame,
932
+ :clock=>dates.l_date.frame.formula[-1].kind_of?(When::Ephemeris::ChineseTrueLunation) ?
933
+ When.Clock(-21600) : dates.l_date.frame.time_basis})
934
+ range = dates.cal4note.l_phases.formula.thiti_range(date)
935
+ notes['月相'] = if range
936
+ range.include?( 7.5) ? '上弦' :
937
+ range.include?(15.0) ? '望' :
938
+ range.include?(22.5) ? '下弦' : nil
939
+ else
940
+ dates.o_date.frame.kind_of?(When::CalendarTypes::Julian) ? '朔' : nil
941
+ end
942
+ end
704
943
 
705
944
  # 月食
706
945
  notes['月食'] = nil # 計算できないので、偽としておく
@@ -711,10 +950,15 @@ class When::CalendarTypes::CalendarNote
711
950
  #
712
951
  # 太陽黄経による暦注
713
952
  #
714
- class SolarTerms < LuniSolarPositions
953
+ class JapaneseNote::SolarTerms < SolarTerms
715
954
 
716
955
  Notes12 = %w(正月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
717
956
 
957
+ Notes10 = [
958
+ %w(初伏 初伏),
959
+ %w(仲伏 中伏),
960
+ %w(後伏 末伏)]
961
+
718
962
  Notes60_A = [
719
963
  # +0
720
964
  '侯小過外', # 315 : 正月
@@ -723,242 +967,329 @@ class When::CalendarTypes::CalendarNote
723
967
  '侯旅外', # 45 : 四月
724
968
  '侯大有外', # 75 : 五月
725
969
  '侯鼎外', # 105 : 六月
726
- '侯常外', # 135 : 七月
970
+ '侯恆外', # 135 : 七月
727
971
  '侯巽外', # 165 : 八月
728
- '侯帰妹外', # 195 : 九月
729
- '侯良外', # 225 : 十月
730
- '侯未済外', # 255 : 十一月
972
+ '侯歸妹外', # 195 : 九月
973
+ '侯艮外', # 225 : 十月
974
+ '侯未濟外', # 255 : 十一月
731
975
  '侯屯外' # 285 : 十二月
732
976
  ]
733
977
 
734
978
  Notes60_B = [
735
979
  # +3 +9 +15 +21 +27
736
980
  '大夫蒙', '卿益', '公漸', '辟泰', '侯需内', # 315 : 正月
737
- '大夫随', '卿晋', '公解', '辟大壮', '侯豫内', # 345 : 二月
981
+ '大夫随', '卿晋', '公解', '辟大壯', '侯豫内', # 345 : 二月
738
982
  '大夫訟', '卿蠱', '公革', '辟夬', '侯旅内', # 15 : 三月
739
983
  '大夫師', '卿比', '公小畜', '辟乾', '侯大有内', # 45 : 四月
740
- '大夫家人', '卿井', '公咸', '辟女后', '侯鼎内', # 75 : 五月
741
- '大夫豊', '卿渙', '公履', '辟遁', '侯常内', # 105 : 六月
984
+ '大夫家人', '卿井', '公咸', '辟姤', '侯鼎内', # 75 : 五月
985
+ '大夫豊', '卿渙', '公履', '辟遯', '侯恆内', # 105 : 六月
742
986
  '大夫節', '卿同人', '公損', '辟否', '侯巽内', # 135 : 七月
743
- '大夫萃', '卿大畜', '公賁', '辟観', '侯帰妹内', # 165 : 八月
744
- '大夫無妄', '卿明夷', '公因', '辟剥', '侯良内', # 195 : 九月
745
- '大夫既済', '卿噬嗑', '公大過', '辟坤', '侯未済内', # 225 : 十月
987
+ '大夫萃', '卿大畜', '公賁', '辟観', '侯歸妹内', # 165 : 八月
988
+ '大夫無妄', '卿明夷', '公困', '辟剥', '侯艮内', # 195 : 九月
989
+ '大夫既濟', '卿噬嗑', '公大過', '辟坤', '侯未濟内', # 225 : 十月
746
990
  '大不蹇', '卿頤', '公中孚', '辟復', '侯屯内', # 255 : 十一月
747
991
  '大夫謙', '卿睽', '公升', '辟臨', '侯小過内' # 285 : 十二月
748
992
  ]
749
993
 
750
994
  Notes72 = [
751
- # 宣明暦(中国) 宣明暦 貞享暦 宝暦暦・寛政暦 略本暦
995
+ # 儀鳳暦 宣明暦(中国) 宣明暦 貞享暦 宝暦暦・寛政暦 略本暦
752
996
  # 315 : 正月
753
- %w(東風解凍 東風解凍 東風解凍 東風解凍 東風解凍),
754
- %w(蟄始振 蟄虫始振 梅花乃芳 黄鶯睍睆 黄鶯睍睆),
755
- %w(魚上氷 魚上氷 魚上氷 魚上氷 魚上氷),
756
- %w(獺祭魚 獺祭魚 土脈潤起 土脈潤起 土脉潤起),
757
- %w(鴻雁来 鴻雁来 霞彩碧空 霞始靆 霞始靆),
758
- %w(草木萌動 草木萌動 草木萌動 草木萌動 草木萌動),
997
+ %w(雞始乳 東風解凍 東風解凍 東風解凍 東風解凍 東風解凍),
998
+ %w(東風解凍 蟄始振 蟄虫始振 梅花乃芳 黄鶯睍睆 黄鶯睍睆),
999
+ %w(蟄蟲始振 魚上氷 魚上氷 魚上氷 魚上氷 魚上氷),
1000
+ %w(魚上冰 獺祭魚 獺祭魚 土脈潤起 土脈潤起 土脉潤起),
1001
+ %w(獺祭魚 鴻雁来 鴻雁来 霞彩碧空 霞始靆 霞始靆),
1002
+ %w(鴻雁來 草木萌動 草木萌動 草木萌動 草木萌動 草木萌動),
759
1003
 
760
1004
  # 345 : 二月
761
- %w(桃始華 桃始華 蟄虫啓戸 蟄虫啓戸 蟄虫啓戸),
762
- %w(倉庚鳴 倉庚鳴 寒雨間熟 桃始笑 桃始笑),
763
- %w(鷹化為鳩 鷹化為鳩 菜虫化蝶 菜虫化蝶 菜虫化蝶),
764
- %w(玄鳥至 玄鳥至 雀始巣 雀始巣 雀始巣),
765
- %w(雷乃発声 雷乃発声 雷乃発声 桜始開 桜始開),
766
- %w(始電 始電 桜始開桃始笑 雷乃発声 雷乃発声),
1005
+ %w(始雨水 桃始華 桃始華 蟄虫啓戸 蟄虫啓戸 蟄虫啓戸),
1006
+ %w(桃始花 倉庚鳴 倉庚鳴 寒雨間熟 桃始笑 桃始笑),
1007
+ %w(倉庚鳴 鷹化爲鳩 鷹化爲鳩 菜虫化蝶 菜虫化蝶 菜虫化蝶),
1008
+ %w(鷹化爲鳩 玄鳥至 玄鳥至 雀始巣 雀始巣 雀始巣),
1009
+ %w(玄鳥至 雷乃發聲 雷乃發聲 雷乃発声 桜始開 桜始開),
1010
+ %w(雷始發聲 始電 始電 桜始開桃始笑 雷乃発声 雷乃発声),
767
1011
 
768
1012
  # 15 : 三月
769
- %w(桐始華 桐始華 玄鳥至 玄鳥至 玄鳥至),
770
- %w(田鼠化為鴑 田鼠化為鴑 鴻雁北 鴻雁北 鴻雁北),
771
- %w(虹始見 虹始見 虹始見 虹始見 虹始見),
772
- %w(萍始生 萍始生 葭始生 葭始生 葭始生),
773
- %w(鳴鳩払其羽 鳴鳩払其羽 牡丹華 霜止出苗 霜止出苗),
774
- %w(戴勝降桑 戴勝降桑 霜止出苗 牡丹華 牡丹華),
1013
+ %w(始雷 桐始華 桐始華 玄鳥至 玄鳥至 玄鳥至),
1014
+ %w(蟄蟲咸動 田鼠化爲鴑 田鼠化爲鴑 鴻雁北 鴻雁北 鴻雁北),
1015
+ %w(蟄蟲啓戸 虹始見 虹始見 虹始見 虹始見 虹始見),
1016
+ %w(桐始華 萍始生 萍始生 葭始生 葭始生 葭始生),
1017
+ %w(田鼠化爲鴑 鳴鳩拂其羽 鳴鳩拂其羽 牡丹華 霜止出苗 霜止出苗),
1018
+ %w(虹始見 戴勝降于桑 戴勝降于桑 霜止出苗 牡丹華 牡丹華),
775
1019
 
776
1020
  # 45 : 四月
777
- %w(螻蟈鳴 螻蟈鳴 鵑始鳴 鼃始鳴 鼃始鳴),
778
- %w(蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出),
779
- %w(王瓜生 王瓜生 竹笋生 竹笋生 竹笋生),
780
- %w(苦菜秀 苦菜秀 蚕起食桑 蚕起食桑 蚕起食桑),
781
- %w(靡草死 靡草死 紅花栄 紅花栄 紅花栄),
782
- %w(小暑至 小暑至 麦秋至 麦秋至 麦秋至),
783
-
1021
+ %w(萍始生 螻蟈鳴 螻蟈鳴 鵑始鳴 鼃始鳴 鼃始鳴),
1022
+ %w(戴勝降于桑 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出 蚯蚓出),
1023
+ %w(螻蟈鳴 王瓜生 王瓜生 竹笋生 竹笋生 竹笋生),
1024
+ %w(蚯蚓出 苦菜秀 苦菜秀 蚕起食桑 蚕起食桑 蚕起食桑),
1025
+ %w(王瓜生 靡草死 靡草死 紅花栄 紅花栄 紅花栄),
1026
+ %w(苦菜秀 小暑至 小暑至 麦秋至 麦秋至 麦秋至),
1027
+
784
1028
  # 75 : 五月
785
- %w(蟷螂生 蟷螂生 螳螂生 螳螂生 螳螂生),
786
- %w(鵙始鳴 鵙始鳴 腐草為螢 腐草為螢 腐草為螢),
787
- %w(反舌無声 反舌無声 梅始黄 梅子黄 梅子黄),
788
- %w(鹿角解 鹿角解 乃東枯 乃東枯 乃東枯),
789
- %w(蝉始鳴 蝉始鳴 分龍雨 菖蒲華 菖蒲華),
790
- %w(半夏生 半夏生 半夏生 半夏生 半夏生),
1029
+ %w(靡草死 螳蜋生 螳蜋生 螳螂生 螳螂生 螳螂生),
1030
+ %w(小暑至 鵙始鳴 鵙始鳴 腐草為螢 腐草為螢 腐草為螢),
1031
+ %w(螳螂生 反舌無聲 反舌無聲 梅始黄 梅子黄 梅子黄),
1032
+ %w(鵙始鳴 鹿角解 鹿角解 乃東枯 乃東枯 乃東枯),
1033
+ %w(反舌無聲 蜩始鳴 蜩始鳴 分龍雨 菖蒲華 菖蒲華),
1034
+ %w(鹿角解 半夏生 半夏生 半夏生 半夏生 半夏生),
791
1035
 
792
1036
  # 105 : 六月
793
- %w(温風至 温風至 温風至 温風至 温風至),
794
- %w(蟋蟀居壁 蟋蟀居壁 蓮始華 蓮始華 蓮始開),
795
- %w(鷹乃学習 鷹乃学習 鷹乃学習 鷹乃学習 鷹乃学習),
796
- %w(腐草為螢 腐草為螢 桐始結花 桐始結花 桐始結花),
797
- %w(土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑),
798
- %w(大雨時行 大雨時行 大雨時行 大雨時行 大雨時行),
1037
+ %w(蟬始鳴 温風至 温風至 温風至 温風至 温風至),
1038
+ %w(半夏生 蟋蟀居壁 蟋蟀居壁 蓮始華 蓮始華 蓮始開),
1039
+ %w(木槿榮 鷹乃學習 鷹乃學習 鷹乃学習 鷹乃学習 鷹乃学習),
1040
+ %w(温風至 腐草爲螢 腐草爲螢 桐始結花 桐始結花 桐始結花),
1041
+ %w(蟋蟀居壁 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑 土潤溽暑),
1042
+ %w(鷹乃學習 大雨時行 大雨時行 大雨時行 大雨時行 大雨時行),
799
1043
 
800
1044
  # 135 : 七月
801
- %w(涼風至 涼風至 涼風至 涼風至 涼風至),
802
- %w(白露降 白露降 山沢浮雲 寒蝉鳴 寒蝉鳴),
803
- %w(寒蝉鳴 寒蝉鳴 霧色已成 蒙霧升降 蒙霧升降),
804
- %w(鷹乃祭鳥 鷹乃祭鳥 寒蝉鳴 綿柎開 綿柎開),
805
- %w(天地始粛 天地始粛 天地始粛 天地始粛 天地始粛),
806
- %w(禾乃登 禾乃登 禾乃登 禾乃登 禾乃登),
1045
+ %w(腐草爲螢 涼風至 涼風至 涼風至 涼風至 涼風至),
1046
+ %w(土潤溽暑 白露降 白露降 山沢浮雲 寒蝉鳴 寒蝉鳴),
1047
+ %w(涼風至 寒蟬鳴 寒蟬鳴 霧色已成 蒙霧升降 蒙霧升降),
1048
+ %w(白露降 鷹乃祭鳥 鷹乃祭鳥 寒蝉鳴 綿柎開 綿柎開),
1049
+ %w(寒蟬鳴 天地始肅 天地始肅 天地始粛 天地始粛 天地始粛),
1050
+ %w(鷹祭鳥 禾乃登 禾乃登 禾乃登 禾乃登 禾乃登),
807
1051
 
808
1052
  # 165 : 八月
809
- %w(鴻雁来 鴻雁来 草露白 草露白 草露白),
810
- %w(玄鳥帰 玄鳥帰 鶺鴒鳴 鶺鴒鳴 鶺鴒鳴),
811
- %w(群鳥養羞 群鳥養羞 玄鳥去 玄鳥去 玄鳥去),
812
- %w(雷乃収声 雷乃収声 鴻雁来 雷乃収声 雷乃収声),
813
- %w(蟄虫坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸),
814
- %w(水始涸 水始涸 水始涸 水始涸 水始涸),
1053
+ %w(天地始肅 鴻雁来 鴻雁来 草露白 草露白 草露白),
1054
+ %w(暴風至 玄鳥歸 玄鳥歸 鶺鴒鳴 鶺鴒鳴 鶺鴒鳴),
1055
+ %w(鴻雁來 群鳥養羞 群鳥養羞 玄鳥去 玄鳥去 玄鳥去),
1056
+ %w(玄鳥歸 雷乃收聲 雷乃收聲 鴻雁来 雷乃収声 雷乃収声),
1057
+ %w(羣鳥養羞 蟄蟲坏戸 蟄蟲坏戸 蟄虫坏戸 蟄虫坏戸 蟄虫坏戸),
1058
+ %w(雷始收聲 水始涸 水始涸 水始涸 水始涸 水始涸),
815
1059
 
816
1060
  # 195 : 九月
817
- %w(鴻雁来賓 鴻雁来賓 棗栗零 鴻雁来 鴻雁来),
818
- %w(雀入大水為蛤 雀入大水為蛤 蟋蟀在戸 菊花開 菊花開),
819
- %w(菊有黄花 菊有黄花 菊花開 蟋蟀在戸 蟋蟀在戸),
820
- %w(豺乃祭獣 豺祭獣 霜始降 霜始降 霜始降),
821
- %w(草木黄落 草木黄落 蔦楓紅葉 霎時施 霎時施),
822
- %w(蟄虫咸俯 蟄虫咸俯 鶯雛鳴 楓蔦黄 楓蔦黄),
1061
+ %w(蟄蟲坏戸 鴻雁來賓 鴻雁來賓 棗栗零 鴻雁来 鴻雁来),
1062
+ %w(陰氣方盛 雀入大水爲蛤 雀入大水爲蛤 蟋蟀在戸 菊花開 菊花開),
1063
+ %w(陽氣始衰 菊有黄花 菊有黄花 菊花開 蟋蟀在戸 蟋蟀在戸),
1064
+ %w(水始涸 豺乃祭獸 豺乃祭獸 霜始降 霜始降 霜始降),
1065
+ %w(鴻雁來賓 草木黄落 草木黄落 蔦楓紅葉 霎時施 霎時施),
1066
+ %w(雀入水爲蛤 蟄蟲咸俯 蟄蟲咸俯 鶯雛鳴 楓蔦黄 楓蔦黄),
823
1067
 
824
1068
  # 225 : 十月
825
- %w(水始氷 水始氷 山茶始開 山茶始開 山茶始開),
826
- %w(地始凍 地始凍 地始凍 地始凍 地始凍),
827
- %w(野鶏入大水為蜃 野鶏入大水為蜃 霎乃降 金盞香 金盞香),
828
- %w(虹蔵不見 虹蔵不見 虹蔵不見 虹蔵不見 虹蔵不見),
829
- %w(天気上騰地気下降 天気上騰地気下降 樹葉咸落 朔風払葉 朔風払葉),
830
- %w(閉塞而成冬 閉塞成冬 橘始黄 橘始黄 橘始黄),
1069
+ %w(菊有黄花 水始冰 水始冰 山茶始開 山茶始開 山茶始開),
1070
+ %w(豺祭獣 地始凍 地始凍 地始凍 地始凍 地始凍),
1071
+ %w(水始冰 野雞入大水爲蜃 野雞入大水爲蜃 霎乃降 金盞香 金盞香),
1072
+ %w(地始凍 虹藏不見 虹藏不見 虹蔵不見 虹蔵不見 虹蔵不見),
1073
+ %w(野雞入水爲蜃 天氣上騰地氣下降 天氣上騰地氣下降 樹葉咸落 朔風払葉 朔風払葉),
1074
+ %w(虹藏不見 閉塞而成冬 閉塞而成冬 橘始黄 橘始黄 橘始黄),
831
1075
 
832
1076
  # 255 : 十一月
833
- %w(鶡鳥不鳴 鶡鳥不鳴 閉塞成冬 閉塞成冬 閉塞成冬),
834
- %w(虎始交 武始交 熊蟄穴 熊蟄穴 熊蟄穴),
835
- %w(茘挺生 茘挺生 水仙開 鱖魚群 鱖魚群),
836
- %w(蚯蚓結 蚯蚓結 乃東生 乃東生 乃東生),
837
- %w(麋角解 麋角解 麋角解 麋角解 麋角解),
838
- %w(水泉動 水泉動 雪下出麦 雪下出麦 雪下出麦),
1077
+ %w(冰益壯 鶡鳥不鳴 鶡鳥不鳴 閉塞成冬 閉塞成冬 閉塞成冬),
1078
+ %w(地始坼 虎始交 虎始交 熊蟄穴 熊蟄穴 熊蟄穴),
1079
+ %w(鶡鳥不鳴 茘挺生 茘挺生 水仙開 鱖魚群 鱖魚群),
1080
+ %w(虎始交 蚯蚓結 蚯蚓結 乃東生 乃東生 乃東生),
1081
+ %w(芒始生 麋角解 麋角解 麋角解 麋角解 麋角解),
1082
+ %w(茘挺生 水泉動 水泉動 雪下出麦 雪下出麦 雪下出麦),
839
1083
 
840
1084
  # 285 : 十二月
841
- %w(雁北嚮 雁北嚮 芹乃栄 芹乃栄 芹乃栄),
842
- %w(鵲始巣 鵲始巣 風気乃行 水泉動 水泉動),
843
- %w(野鶏始鴝 野鶏始鴝 雉始雊 雉始雊 雉始雊),
844
- %w(鶏始乳 鶏始乳 款冬華 款冬華 款冬華),
845
- %w(鷙鳥厲疾 鷙鳥厲疾 水沢腹堅 水沢腹堅 水沢腹堅),
846
- %w(水沢腹堅 水沢腹堅 鶏始乳 鶏始乳 鶏始乳)
1085
+ %w(蚯蚓結 雁北郷 雁北郷 芹乃栄 芹乃栄 芹乃栄),
1086
+ %w(麋角解 鵲始巣 鵲始巣 風気乃行 水泉動 水泉動),
1087
+ %w(水泉動 野雞始鴝 野雞始鴝 雉始雊 雉始雊 雉始雊),
1088
+ %w(雁北郷 雞始乳 雞始乳 款冬華 款冬華 款冬華),
1089
+ %w(鵲始巣 鷙鳥厲疾 鷙鳥厲疾 水沢腹堅 水沢腹堅 水沢腹堅),
1090
+ %w(雉始雊 水澤腹堅 水澤腹堅 鶏始乳 鶏始乳 鶏始乳)
847
1091
  ]
848
1092
 
849
- # 日の暦注
1093
+ # 計算結果の修正
850
1094
  # @private
851
- def self._day_notes(notes, dates, conditions={})
852
- date = When.when?(dates.o_date.to_cal_date.to_s,
853
- {:clock=>When.Clock(dates.s_date.frame.timezone[0]*86400)})
854
- longitude, motsu = dates.s_terms.position(date)
1095
+ Patch = {
1096
+ 2039054 => [149.0, 1], # 貞観12(0870).07.17 [149.0, 0] 没
1097
+ 2039055 => [150.0, 0], # 貞観12(0870).07.18 [150.0, 1] 処暑
1098
+
1099
+ 2107233 => [ 29.0, 1], # 天喜05(1057).03.10 [ 29.0, 0] 没
1100
+ 2107234 => [ 30.0, 0], # 天喜05(1057).03.11 [ 30.0, 1] 穀雨
1101
+
1102
+ 2160437 => [269.0, 0], # 建仁02(1202).10=29 [270.0, 1] 冬至
1103
+ 2160438 => [270.0, 1], # 建仁02(1202).11.01 [271.0, 1]
1104
+ 2160439 => [271.0, 1], # 建仁02(1202).11.02 [272.0, 1]
1105
+ 2160440 => [272.0, 1], # 建仁02(1202).11.03 [272.0, 0] 没
1106
+
1107
+ 2175412 => [269.0, 1], # 寛元01(1243).11.03 [269.0, 0] 没
1108
+ 2175413 => [270.0, 0], # 寛元01(1243).11.04 [270.0, 1] 冬至
1109
+
1110
+ 2189200 => [179.0, 0], # 弘安04(1281).07=30 [180.0, 1] 秋分
1111
+ 2189201 => [180.0, 1], # 弘安04(1281).08.01 [181.0, 1]
1112
+ 2189202 => [181.0, 1], # 弘安04(1281).08.02 [181.0, 0] 没
1113
+
1114
+ 2243577 => [136.0, 0], # 永享02(1430).07.11 [136.0, 1] (立秋の翌日)
1115
+ 2243578 => [136.0, 1], # 永享02(1430).07.12 [137.0, 1]
1116
+ 2243579 => [137.0, 1], # 永享02(1430).07.13 [138.0, 1]
1117
+ 2243580 => [138.0, 1], # 永享02(1430).07.14 [139.0, 1]
1118
+ 2243581 => [139.0, 1], # 永享02(1430).07.15 [140.0, 1]
1119
+ 2243582 => [140.0, 1], # 永享02(1430).07.16 [141.0, 1]
1120
+ 2243583 => [141.0, 1], # 永享02(1430).07.17 [142.0, 1]
1121
+ 2243584 => [142.0, 1], # 永享02(1430).07.18 [143.0, 1]
1122
+ 2243585 => [143.0, 1], # 永享02(1430).07.19 [144.0, 1]
1123
+ 2243586 => [144.0, 1], # 永享02(1430).07.20 [145.0, 1]
1124
+ 2243587 => [145.0, 1], # 永享02(1430).07.21 [146.0, 1]
1125
+ 2243588 => [146.0, 1], # 永享02(1430).07.22 [147.0, 1]
1126
+ 2243589 => [147.0, 1], # 永享02(1430).07.23 [148.0, 1]
1127
+ 2243590 => [148.0, 1], # 永享02(1430).07.24 [149.0, 1]
1128
+ 2243591 => [149.0, 1], # 永享02(1430).07.25 [149.0, 0] 没 (処暑の前日)
1129
+
1130
+ 2311770 => [ 29.0, 1], # 元和03(1617).03.18 [ 29.0, 0] 没
1131
+ 2311771 => [ 30.0, 0] # 元和03(1617).03.19 [ 30.0, 1] 穀雨
1132
+ }
855
1133
 
856
- # 三伏 - 庚
857
- #
858
- # : 夏至から 20..29
859
- # : 夏至から 30..39
860
- # 後 : 立秋から 0..9
861
- if !notes['三伏'] && notes['干'].remainder == 6 # 庚
862
- if 109 <= longitude && longitude <= 129 # 夏至から
863
- term = dates.s_terms.term(date, [-270,360])
864
- diff = dates.s_date.to_i - term.to_i
865
- notes['三伏'] = '初伏' if 20 <= diff && diff <= 29
866
- notes['三伏'] = '中伏' if 30 <= diff && diff <= 39
867
- elsif longitude == 135 # 立秋
868
- notes['三伏'] = '末伏'
869
- elsif 136 <= longitude && longitude <= 144 # 立秋から
870
- term = dates.s_terms.term(date, [-225,360])
871
- diff = dates.s_date.to_i - term.to_i
872
- notes['三伏'] = '末伏' if 0 < diff && diff <= 9
873
- end
874
- end
1134
+ class << self
1135
+ # テスト用の属性
1136
+ attr_writer :patch
1137
+ private :patch=
875
1138
 
876
- # 社 - 戊
877
- #
878
- # 春秋分から -5..4
879
- if !notes['社'] && notes['干'].remainder == 4 # 戊
880
- if (longitude + 5) % 180 < 10 # 春秋分の近傍
881
- term = dates.s_terms.term(date - When.Duration('P6D'), [0,180])
882
- diff = dates.s_date.to_i - term.to_i
883
- notes['社'] = '社' if -5 <= diff && diff <= 4
1139
+ # 日の暦注
1140
+ # @private
1141
+ def _day_notes(notes, dates, conditions={})
1142
+ date = When.when?(dates.o_date.to_cal_date.to_s,
1143
+ {:frame=>dates.o_date.frame,
1144
+ :clock=>dates.s_date.frame.time_basis})
1145
+ patch = (@patch || Patch)[date.to_i] unless dates.o_date.frame.respond_to?(:twin) &&
1146
+ dates.o_date.frame.twin
1147
+ longitude, motsu = patch ? patch : dates.cal4note.s_terms.position(date)
1148
+
1149
+ # 三伏 - 庚
1150
+ #
1151
+ # 初 : 夏至から 20..29
1152
+ # 仲 : 夏至から 30..39
1153
+ # 後 : 立秋から 0..9
1154
+ if !notes['三伏'] && notes['干'].remainder == 6 # 庚
1155
+ index = dates.range >= 11 ? 1 : 0
1156
+ if 109 <= longitude && longitude <= 129 # 夏至から
1157
+ term = dates.cal4note.s_terms.term(date, [-270,360])
1158
+ diff = dates.s_date.to_i - term.to_i
1159
+ notes['三伏'] = Notes10[0][index] if 20 <= diff && diff <= 29
1160
+ notes['三伏'] = Notes10[1][index] if 30 <= diff && diff <= 39
1161
+ elsif longitude == 135 # 立秋
1162
+ notes['三伏'] = Notes10[2][index]
1163
+ elsif 136 <= longitude && longitude <= 144 # 立秋から
1164
+ term = dates.cal4note.s_terms.term(date, [-225,360])
1165
+ diff = dates.s_date.to_i - term.to_i
1166
+ notes['三伏'] = Notes10[2][index] if 0 < diff && diff <= 9
1167
+ end
884
1168
  end
885
- end
886
1169
 
887
- # -
888
- #
889
- # 大寒から -6..5
890
- if !notes[''] && notes[''].remainder == 4 #
891
- if (longitude - 339) % 360 < 12 # 大寒の近傍
892
- term = dates.s_terms.term(date - When.Duration('P7D'), [345,360])
893
- diff = dates.s_date.to_i - term.to_i
894
- notes[''] = '' if -6 <= diff && diff <= 5
1170
+ # -
1171
+ #
1172
+ # 春秋分から -5..4
1173
+ if !notes[''] && notes[''].remainder == 4 #
1174
+ if (longitude + 5) % 180 < 10 # 春秋分の近傍
1175
+ term = dates.cal4note.s_terms.term(date - When.Duration('P5D'), [0,180])
1176
+ diff = dates.s_date.to_i - term.to_i
1177
+ notes[''] = '' if -5 <= diff && diff <= 4
1178
+ end
895
1179
  end
896
- end
897
1180
 
898
- # 入梅 -
899
- #
900
- # 芒種から 0..11
901
- if !notes['入梅'] && notes[''].remainder == 8 #
902
- if (longitude - 120) % 360 < 10 # 芒種の近傍
903
- term = dates.s_terms.term(date - When.Duration('P1D'), [120,360])
904
- diff = dates.s_date.to_i - term.to_i
905
- notes['入梅'] = '入梅' if 0 <= diff && diff <= 11
1181
+ # -
1182
+ #
1183
+ # 大寒から -6..5
1184
+ if !notes[''] && notes[''].remainder == 4 #
1185
+ if (longitude - 339) % 360 < 12 # 大寒の近傍
1186
+ term = dates.cal4note.s_terms.term(date - When.Duration('P6D'), [345,360])
1187
+ diff = dates.s_date.to_i - term.to_i
1188
+ notes[''] = '' if -6 <= diff && diff <= 5
1189
+ end
906
1190
  end
907
- end
908
1191
 
909
- # 土用事
910
- unless notes['土用事']
911
- _longitude, _motsu = dates.doyo ? dates.s_terms.position(date, -dates.doyo) : [longitude, motsu]
912
- if _motsu != 0 && _longitude % 90 == 27
913
- notes['土用事'] =
914
- (dates.year < 697) ? '土用' : # 元嘉暦以前
915
- (dates.year < 764) ? '土王' : # 麟徳暦
916
- (dates.year < 1685) ? '土用事' : # 大衍暦~宣明暦
917
- '土用入' # 貞享暦以降
1192
+ # 土用事
1193
+ unless notes['土用事']
1194
+ _longitude, _motsu = dates.cal4note.doyo ? dates.cal4note.s_terms.position(date, -dates.cal4note.doyo) :
1195
+ [longitude, motsu]
1196
+ if _motsu != 0 && _longitude % 90 == 27
1197
+ notes['土用事'] =
1198
+ case dates.range
1199
+ when 0 ; '土用' # 元嘉暦以前
1200
+ when 1 ; '土王' # 麟徳暦
1201
+ when 2..10 ; '土用事' # 大衍暦~宣明暦
1202
+ else ; '土用入' # 貞享暦以降
1203
+ end
1204
+ end
918
1205
  end
919
- end
920
1206
 
921
- #
922
- if motsu == 0
923
- notes['没'] = '没' if dates.year < 1685
924
- return notes
925
- end
1207
+ # 入梅 - 壬
1208
+ #
1209
+ # 貞享2(1685)~ 芒種から 1..10 日の壬の日
1210
+ # 元文5(1740)~ 芒種から 0..9 日の壬の日
1211
+ # 明治9(1876)~ 太陽黄経80度
1212
+ unless notes['入梅']
1213
+ if dates.year >= 1876
1214
+ notes['入梅'] = '入梅' if longitude == 80 && motsu == 1
1215
+ elsif notes['干'].remainder == 8 # 壬
1216
+ if (longitude - 75) % 360 <= 10 # 芒種の近傍
1217
+ term = dates.cal4note.s_terms.term(date - When.Duration('P11D'), [75,360])
1218
+ diff = dates.s_date.to_i - term.to_i
1219
+ diff += 1 if dates.year >= 1740
1220
+ notes['入梅'] = '入梅' if dates.range >= 11 && 1 <= diff && diff <= 10
1221
+ end
1222
+ end
1223
+ end
926
1224
 
927
- # 伏龍
928
- notes['伏龍'] ||= {
929
- 315 => '庭内去堂', 15 => '門内百日', 115 => '東垣六十日',
930
- 175 => '四隅百日', 275 => '竈内四十日'
931
- }[longitude]
932
-
933
- # 廿四節気
934
- div, mod = longitude.divmod(15)
935
- if mod == 0
936
- notes['廿四節気'] = (div - 21) % 24
937
- div, mod = notes['廿四節気'].divmod(2)
938
- notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
939
- end
1225
+ # 立春を起算日とする雑節
1226
+ #
1227
+ unless notes['節分'] && notes['八十八夜'] && notes['二百十日'] && notes['二百廿日']
1228
+ term = dates.cal4note.s_terms.term(date + When.Duration('P3D'), [-45,360])
1229
+ case dates.s_date.to_i - term.to_i
1230
+ when -1 ; notes['節分'] ||= '節分'
1231
+ when 87 ; notes['八十八夜'] ||= '八十八夜'
1232
+ when 209 ; notes['二百十日'] ||= '二百十日'
1233
+ when 219 ; notes['二百廿日'] ||= '二百廿日'
1234
+ end
1235
+ end
940
1236
 
941
- # 六十卦
942
- div, mod = longitude.divmod(30)
943
- notes['六十卦'] ||= mod == 15 ? Notes60_A[(div - 10) % 12] : nil
944
- div, mod = longitude.divmod(6)
945
- notes['六十卦'] ||= mod == 0 ? Notes60_B[(div - 53) % 60] : nil
1237
+ # 日食
1238
+ notes['日食'] = nil # 計算できないので、偽としておく
946
1239
 
947
- # 七十二候
948
- div, mod = longitude.divmod(5)
949
- notes['七十二候'] ||= mod == 0 ? Notes72[(div - 63) % 72][dates.index_s] : nil
1240
+ #
1241
+ if motsu == 0
1242
+ notes[''] = '没' if dates.range < 11
1243
+ return notes unless patch
1244
+ end
950
1245
 
951
- # 彼岸
952
- notes['彼岸'] ||= longitude % 180 == 2 ? '彼岸' : nil
1246
+ # 廿四節気
1247
+ div, mod = longitude.divmod(15)
1248
+ if mod == 0
1249
+ notes['廿四節気'] = (div - 21) % 24
1250
+ div, mod = notes['廿四節気'].divmod(2)
1251
+ notes['節中'] ||= Notes12[div] + %w(節 中)[mod]
1252
+ end
953
1253
 
954
- # 往亡
955
- month = dates.s_date.cal_date[1] - 1
956
- div, mod = month.divmod(3)
957
- notes['往亡'] ||= ((div+7)*(mod+1) + month * 30 + 314 - longitude) % 360 == 0 ? '往亡' : nil
1254
+ # 七十二候
1255
+ div, mod = longitude.divmod(5)
1256
+ notes['七十二候'] ||= mod == 0 ? Notes72[(div - 63) % 72][dates.index_s] : nil
1257
+
1258
+ # 往亡
1259
+ month = dates.s_date.cal_date[1] - 1
1260
+ div, mod = month.divmod(3)
1261
+ notes['往亡'] ||= ((div+7)*(mod+1) + month * 30 + 314 - longitude) % 360 == 0 ? '往亡' : nil
1262
+
1263
+ # 伏龍
1264
+ notes['伏龍'] ||= {
1265
+ 315 => '庭内去堂', 15 => '門内百日', 115 => '東垣六十日',
1266
+ 175 => '四隅百日', 275 => '竈内四十日'
1267
+ }[longitude]
1268
+
1269
+ # 六十卦
1270
+ div, mod = longitude.divmod(30)
1271
+ notes['六十卦'] ||= mod == 15 ? Notes60_A[(div - 10) % 12] : nil
1272
+ div, mod = longitude.divmod(6)
1273
+ notes['六十卦'] ||= mod == 0 ? Notes60_B[(div - 53) % 60] : nil
1274
+
1275
+ # 彼岸
1276
+ unless notes['彼岸']
1277
+ if dates.range < 11
1278
+ notes['彼岸'] = '彼岸' if longitude % 180 == 2 # 宣明暦以前(没を除いて3日後)
1279
+ else
1280
+ term = dates.cal4note.s_terms.term(date - When.Duration('P7D'), [0,180]) # 近傍の春秋分
1281
+ case dates.s_date.to_i - term.to_i
1282
+ when 2 ; notes['彼岸'] = '彼岸' if dates.range == 11 # 貞享暦(没を含めて3日後)
1283
+ when -5 ; notes['彼岸'] = '彼岸' if longitude > 180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(春-6日前))
1284
+ when -1 ; notes['彼岸'] = '彼岸' if longitude <= 180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(秋-2日前)
1285
+ when -3 ; notes['彼岸'] = '彼岸' if dates.year >= 1844 # 天保暦以降(秋-4日前)
1286
+ end
1287
+ end
1288
+ notes['彼岸'] = nil unless notes['彼岸'] == '彼岸'
1289
+ end
958
1290
 
959
- # 日食
960
- notes['日食'] = nil # 計算できないので、偽としておく
961
- notes
1291
+ notes
1292
+ end
962
1293
  end
963
1294
  end
964
1295
  end