when_exe 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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