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
@@ -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
@@ -517,6 +517,122 @@ module When
517
517
  }
518
518
  ]
519
519
 
520
+ #
521
+ # 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
522
+ #
523
+ # 隋・唐:: 大業暦 618
524
+ # 唐:: 戊寅暦 619 - 664
525
+ # 唐・周:: 麟徳暦 665 - 728 総法 1340(小余の分母)
526
+ # 唐:: 大衍暦 729 - 761 通法 3040( 〃 )
527
+ # 唐:: 五紀暦 762 - 783 通法 1340( 〃 )
528
+ # 唐:: 正元暦 784 - 806
529
+ # 唐:: 観象暦 807 - 821
530
+ # 唐:: 宣明暦 822 - 892 統法 8400( 〃 )
531
+ # 唐~後梁:: 崇玄暦 893 - 907
532
+ Chinese0618 = [PatternTableBasedLuniSolar, {
533
+ 'origin_of_MSC'=>618, 'origin_of_LSC'=>1946814,
534
+ 'indices'=> _IndicesM1,
535
+ 'rule_table'=> %w( aBcDeFgHiJkL ABbcDefGhIJKl AbCdeFgHiJkL
536
+ ABcDefGhIjJkL AbCDefGhIjKl AbCDeFgHiJkL aBcDeFGgHiJkL aBcdEFgHIjKl
537
+ AbCdeFgHIJkL aBcCdeFgHIjKL aBcdEfgHIjKL AbCdeFghIJkLL AbCdeFgHiJkL
538
+ AbCdEfGhIjKl AbCDeFgHhIjKl AbCdEFgHiJkL aBcdEfGHIjKl AbCddEfGHIjKl
539
+ AbCdeFghIJKL aBcDefgHIjKL AbBcDefgHiJKL aBCdeFghIjKL aBCdEfGhIjJkL
540
+ aBcDEfGhIjKl AbcDEfGHiJkL aBcdEfFGhIJkL aBcdEfGhIJKl aBcDeFGhIjKl
541
+ AbCcDeFgHiJKl AbCdEfGhIjKl AbCDeFgHiJkLl AbCdEFgHiJkL aBcDeFgHiJKl
542
+
543
+ AbCdEfGhIiJkL aBCdEfGhIjKl AbCdEFgHiJkL aBcDeEfGhIJkL aBcDeFgHiJkL
544
+ aBCdEfGhIjKl AaBcDEfGhIjKl AbCdEfGhIJkL aBcDeFgHiJjKl ABcDeFgHiJkL
545
+ aBcDEfGhIjKl AbCdEfGgHIjKl AbCdEfGhIjKl ABcDeFgHiJkL aBcCDeFgHiJkL
546
+ AbCdEfgHiJkL AbCDeFghIjKlL aBCdEfGhIjKl AbCdEFgHiJKl aBcDeFgHIiJKl
547
+ aBcdEfGHiJKL abCdeFgHiJKL aBcDeeFgHiJKL aBcDefGhIjKL aBCdEfgHiJkL
548
+ aBCcDeFgHiJkL AbcDEfGhIjKL AbcdEfGHiJkKl AbcDeFGhIJkL aBcdEfGhIJKl
549
+ AbCdeFgGhIJKl AbCdeFgHiJKl ABcDefGhIjKL aBcDEefGhIjKl AbCDeFgHiJkL
550
+ aBcDeFGhIjKl AaBcDeFgHIjKl AbcDeFgHIJkL aBcdEfGhIIJkL aBcdEfgHIjKL
551
+ AbCdeFghIJKL aBcDeeFghIJKL abCdEfGhIjkL AbCDeFgHiJkL aBbCdEFgHiJkL
552
+ abCdEFgHIjKl AbcDeFgHIJJkl AbcDeFgHiJKL aBcdEfgHIJkL AbCdeFggHiJKL
553
+
554
+ aBCdeFghIjKL aBCdEfGhIjkL AbCdDEfGhIjkL aBCdEfGHiJkL abCdEfGHiJKl
555
+ AabCdEfGHiJKl AbcDefGHiJKL aBcDefGhIiJKL aBcDefGhIjKL aBCdEfgHiJkL
556
+ aBCDeFfgHiJkL aBCdEfGhIjKl AbCdEfGHiJkL AbbcDeFGHiJkL aBcdEfGHiJKl
557
+ AbCdeFgHiJKLl AbcDefGhIJkL ABcdEfgHiJkL ABcDeFggHiJkL ABcDeFghIJkL
558
+ aBcDEfGhIjKl AbCdEeFGhIjKl AbcDeFGhIJkL aBcdEfGhIJkLL AbcdEfGhIJkL
559
+ AbCdeFghIJkL ABcDefGhiIJkL AbCDefGhiJkL aBCdEfGHijKl AbCdEFfGhIjKl
560
+ AbCdEfGHiJKl aBcdEfGHIjKL abCcdEfGHiJKl AbCdeFgHiJKL aBcDefGhIjKKl
561
+ ABCdeFghIjKL aBCdEfGhiJkL aBCdEFgHhiJkL aBcDEfGHiJkl AbCdEfGHiJKl
562
+ AbcDdEfGHiJKl AbcDefGHiJKL aBcdEfgHiJKL aBBcdEfgHiJKl ABcDeFghIjKl
563
+ ABCdEfGhiJjKl ABcDeFGhiJkL aBcDEfGhIjKl AbCdEfFGhIJkL abCdeFGhIJkL
564
+
565
+ AbcDefGhIJKl ABccDefGhIJkL AbCdEfgHiJkL ABcDeFghIjKkL AbCDeFghIjKl
566
+ AbCDeFGhiJkL aBcDeFGhHiJkL aBcDeFgHIjKL abCdeFgHIJkL AbcDdeFgHIjKL
567
+ aBcdeFGhIJkL AbCdEFghiJkL AaBCdEfgHiJkL AbCdEfGhIjKl AbCDeFgHiJjKl
568
+ AbCdEfGHiJkL aBcdEfGHIjKl AbCdeFfGHiJKl AbCdefGHiJKL aBcDefgHiJKL
569
+ AbCcDefgHiJKL aBCdeFgHijKL aBCdEfGhIjKkl ABcDeFGhIjKl aBcDEfGhIJkL
570
+ abCdEfGHhIJkL abCdEfGhIJKl AbCdefGhIJKl ABcDeefGHiJKL aBcdEfgHiJKl
571
+ ABcDeFgHijKL aAbCDeFgHijKl AbCDeFGhIjKl AbcDeFGhIJjKl aBcDeFgHIJkL
572
+ aBcdeFgHIJKl AbCdeeFgHIjKL AbCdefGhIJkL AbCdEfGhiJkL AbCDdEfgHiJkL
573
+ AbCdEFgHijKl AbCDeFgHIjKll AbCdEfGHIjKl aBcDeFgHIjKL aBcdEfgHHiJKL
574
+ aBcdeFgHiJKL aBCdefGhIjKL AbCdEefGhIjKL aBCdEfgHiJkL aBCdEfGhIjKl
575
+
576
+ AaBcDEfGhIjKl AbCdEfGHiJKl aBCdefGHiJJKl aBcdEfGhIJKl AbCdeFgHiJKL
577
+ aBcDeFfgHiJKl ABcDefGhIjKl ABcDEfGhiJkL aBCcDeFgHiJkL aBcDEfGhIJkl
578
+ AbCdEfGHiJKlL abcDeFGhIJKl AbcDefGhIJKl ABcdeFgHhIJKl AbCdEfgHiJkL
579
+ ABcDeFghIjKl ABcDEefGhIjKl AbCDeFgHiJkL aBcDeFGhIjKl AaBcDeFgHIjKL
580
+ abcDeFgHIJkL AbcDefGhIJjKL aBcDefGhIjKL AbCdEfghIJkL ABcDeFggHiJkL
581
+ AbCDefGhIjKl AbCDeFgHiJkL aBcCdEFgHiJkL aBcdEFgHIjKl AbCdeFgHIjKLl
582
+ AbCdeFgHiJKL aBcDefGhIjKL AbCdEfggHiJKL aBCdeFgHijKL aBCdEfGhIjKl
583
+ AbCdEeFGhIjKl AbCdEfGHiJkL aBcdEfGHiJKl AaBcdEfGhIJKl AbCdeFgHiJKL
584
+ aBcDefgHiIJKl ABcDefgHiJKl ABcDeFgHijKL aBCdEfGgHijKL aBcDeFGhIjKl
585
+ aBcDEfGhIJkL aBccDeFGhIJkL aBcdEfGhIJKl AbCdefGhIJKkL AbCdefGhIJkL
586
+
587
+ ABcDefgHiJkL ABcDeFgHhiJkL AbCDeFgHijKl AbCDeFgHIjKl aBcDdEFgHIjKl
588
+ AbcDeFgHIjKL aBcdEfgHIJkL AbBcdeFgHIjKL AbCdefGhIjKL AbCdEfgHiJjKL
589
+ aBCdEfGhiJkL AbCdEFgHijKl AbCdEFfGhIJkl AbCdEfGHiJKl AbcDeFgHIjKL
590
+ aBccdEfGHiJKL aBcdeFgHiJKL aBCdefGhIjKLl ABcDeFghIjKL aBCdEfGhiJkL
591
+ aBCdEfGhHiJkL aBcDEfGhIjKl AbCdEfGHiJKl aBcDdeFGhIJkL AbcdEfGhIJKl
592
+ ABcdeFgHiJKl ABbCdeFgHiJkL ABcDeFghIjKl ABcDEfgHiJjKl AbCDeFgHiJkL
593
+ aBcDeFGhIjKl AbCdEfGgHIjKl AbCdeFgHIJkL aBcDefGhIJkL AbCcDefGhIjKL
594
+ AbCdEfghIJkL ABcDefGhIjKkL AbCdEfGhIjKl AbCDeFgHiJkL aBcDeFgHIiJkL
595
+ aBcdEFghIJKl AbCdeFgHIjKL aBcDeeFgHiJKL aBcDefgHIjKL AbCdEfghIjKL
596
+ AaBCdeFgHijKL aBCdEfGhIjKl AbCdEFgHiJjKl AbCdEfGHiJkL abCdEFgHIjKL
597
+
598
+ abCdeFfGHiJKl AbcDefGHiJKL aBcDefgHiJKL aBCdDefgHiJKl ABcDeFgHijKL
599
+ aBcDEfGhIjkLl ABcDeFGhIjKl)
600
+ }
601
+ ]
602
+
603
+ #
604
+ # 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
605
+ #
606
+ # 唐・周:: 麟徳暦 688 - 700 (歳首 建子月)
607
+ Chinese0618B = [PatternTableBasedLuniSolar, {
608
+ 'origin_of_MSC'=>688, 'origin_of_LSC'=>1972387, 'border'=>'0*11-01',
609
+ 'indices'=> [
610
+ Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
611
+ :trunk=>When.Resource('_m:ChineseTerms::MonthA::*')}),
612
+ Coordinates::DefaultDayIndex
613
+ ],
614
+ 'rule_table'=> %w( AbcDeFgHIJkL aBcdEfGhIIJkL aBcdEfgHIjKL
615
+ AbCdeFghIJKL aBcDeeFghIJKL abCdEfGhIjkL AbCDeFgHiJkL aBbCdEFgHiJkL
616
+ abCdEFgHIjKl AbcDeFgHIJJkl AbcDeFgHiJKL aBcdEfgHIJkL AbCdeFggHiJKL)
617
+ }
618
+ ]
619
+
620
+ #
621
+ # 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
622
+ #
623
+ # 唐:: 大衍暦 760-761 (歳首 建子月)
624
+ # 唐:: 五紀暦 762 (歳首 建子月)
625
+ Chinese0618C = [PatternTableBasedLuniSolar, {
626
+ 'origin_of_MSC'=>760, 'origin_of_LSC'=>1998670, 'border'=>'0*11-01',
627
+ 'indices'=> [
628
+ Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
629
+ :trunk=>When.Resource('_m:ChineseTerms::MonthB::*')}),
630
+ Coordinates::DefaultDayIndex
631
+ ],
632
+ 'rule_table'=> %w(AbcDdeFgHIjKL aBcdeFGhIJkL AbCdEFghiJkL)
633
+ }
634
+ ]
635
+
520
636
  # 後晋:: 調元暦 939 - 943
521
637
  # 後晋:: 調元暦? 944 - 946
522
638
  # 遼:: 調元暦 947 - 994
@@ -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
@@ -14,10 +14,10 @@ module When
14
14
  #
15
15
  # 中国の年号
16
16
  #
17
- Chinese = [self, [
17
+ Chinese = [{'V'=>{'0618'=>{'A'=>'0618', 'B'=>'0618B', 'C'=>'0618C'}}}, self, [
18
18
  "namespace:[ja=http://ja.wikipedia.org/wiki/, en=http://en.wikipedia.org/wiki/]",
19
19
  "locale:[=ja:, en=en:]",
20
- "area:[中国=ja:%%<元号>#%.<中国>,China=en:Chinese_era_name]",
20
+ 'area:[中国#{?V=A}=ja:%%<元号>#%.<中国>,China#{?V=A}=en:Chinese_era_name]',
21
21
  [self,
22
22
  "period:[秦]",
23
23
  ["[始皇帝]25*", "@F" , "name=[始皇帝];-221*10-01^Chinese_221"],# 歳首は10月
@@ -679,7 +679,7 @@ module When
679
679
  ],
680
680
  [self,
681
681
  "period:[唐]",
682
- ["[武徳]1" , "@F" , "name=[高祖];618-05-20^Chinese0523"], # 甲子 武徳2年から戊寅暦を使用
682
+ ["[武徳]1" , "@F" , 'name=[高祖];618-05-20^Chinese#{A:0523}'], # 甲子 武徳2年から戊寅暦を使用
683
683
  ["[貞観]1" , "@A" , "name=[太宗];627-01-01"], # 乙酉
684
684
  ["[永徽]1" , "@A" , "name=[高宗];650-01-01"], # 辛丑
685
685
  ["[顕慶]1" , "" , " 656-01-07"], # 壬申
@@ -700,10 +700,10 @@ module When
700
700
  ["[光宅]1" , "" , " 684-09-06"], # 甲寅
701
701
  ["[垂拱]1" , "" , "name=[武太后];685-01-01"], # 丁未
702
702
  ["[永昌]1" , "" , " 689-01-01"], # 乙卯
703
- ["[載初]1*11.01", "" , " 690*11-01^Chinese0689", "690-09-09"], # 庚辰 本年から11月を歳首とする
703
+ ["[載初]1*11.01", "" , ' 690*11-01^Chinese#{B:0689}', "690-09-09"], # 庚辰 本年から11月を歳首とする
704
704
  [self,
705
705
  "period:[周]",
706
- ["[天授]1*" , "@F" , "name=[武則天];690-09-09^Chinese0689"], # 壬午
706
+ ["[天授]1*" , "@F" , 'name=[武則天];690-09-09^Chinese#{B:0689}'], # 壬午
707
707
  ["[如意]1*" , "" , " 692-04-01"], # 丙申
708
708
  ["[長寿]1*" , "" , " 692-09-09"], # 庚子
709
709
  ["[延載]1*" , "" , " 694-05-11"], # 甲午
@@ -714,12 +714,12 @@ module When
714
714
  ["[神功]1*" , "" , " 697-08-29"], # 壬辰 コンサイス世界年表では1年ずれる
715
715
  ["[聖暦]1*11.01", "" , " 698*11-01"], # 甲子
716
716
  ["[久視]1*" , "" , " 700-05-05", # 癸丑
717
- " 700-10-01^Chinese0523",""],# 本年で歳首を元にもどす
717
+ ' 700-10-01^Chinese#{A:0523}',""],# 本年で歳首を元にもどす
718
718
  ["[大足]1" , "" , " 701-01-03"], # 丁丑
719
719
  ["[長安]1" , "" , " 701-10-22"], # 辛酉
720
720
  ["[神龍]1" , "" , " 705-01-01", "705-02-04"] # 壬午
721
721
  ],
722
- ["[神龍]1.02.04", "" , "name=[中宗];705-02-04^Chinese0523"], # 甲寅
722
+ ["[神龍]1.02.04", "" , 'name=[中宗];705-02-04^Chinese#{A:0523}'], # 甲寅
723
723
  ["[景龍]1" , "" , " 707-09-05"], # 庚子
724
724
  ["[唐隆]1" , "@A" , "name=[少帝];710-06-04"], # 甲申
725
725
  ["[景雲]1" , "" , "name=[睿宗];710-07-20"], # 己巳
@@ -731,8 +731,8 @@ module When
731
731
  ["[至徳]1" , "@A" , "name=[粛宗];756-07-12"], # 甲子
732
732
  ["[乾元]1" , "" , " 758-02-05"], # 丁未
733
733
  ["[上元]1" , "" , " 760-04=19"], # 己卯
734
- ["[粛宗]1" , "" , "name=[粛宗];761-09-21", "762*11^Chinese0761", ""], # 壬寅
735
- ["[宝応]1" , "@A" , "name=[代宗];762-04-15^Chinese0523"], # 甲子 本年から五紀暦を使用
734
+ ["[粛宗]1" , "" , "name=[粛宗];761-09-21", '762*11^Chinese#{C:0761}', ""], # 壬寅
735
+ ["[宝応]1" , "@A" , 'name=[代宗];762-04-15^Chinese#{A:0523}'], # 甲子 本年から五紀暦を使用
736
736
  ["[広徳]1" , "" , " 763-07-11"], # 壬子
737
737
  ["[永泰]1" , "" , " 765-01-01"], # 癸巳
738
738
  ["[大暦]1" , "" , " 766-11-12"], # 甲子
@@ -1242,5 +1242,60 @@ module When
1242
1242
  "@F", "name=;1912-01-01^Gregorian"]
1243
1243
  ]
1244
1244
  ]]
1245
+
1246
+ # Chinese Luni-Solar Calendar Series for ChineseNote
1247
+ ChineseLuniSolarSeries = [self, [
1248
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
1249
+ 'locale:[=en:, ja=ja:, alias]',
1250
+ 'area:[ChineseLuniSolarSeries=, 中国の暦月=]',
1251
+ ['[太初暦]1.01.01', '@CR', '1.01.01^Chinese::太初暦', '85-01-01'], # 西暦が正になるところから開始(実際は-103.01.01)
1252
+ ['[四分暦]85.01.01', '@CR', '85.01.01^Chinese::四分暦', '265-01-01'],
1253
+ ['[乾象暦]222.01.01', '@CR', '222.01.01^Chinese::乾象暦', '281-01-01'],
1254
+ ['[景初暦]237.01.01', '@CR', '237.01.01^Chinese::景初暦', '452-01-01'],
1255
+ ['[元嘉暦]445.01.01', '@CR', '445.01.01^Chinese::元嘉暦', '510-01-01'],
1256
+ ['[大明暦]510.01.01', '@CR', '510.01.01^Chinese::大明暦', '590-01-01'],
1257
+ ['[三紀暦]384.01.01', '@CR', '384.01.01^Chinese::三紀暦', '418-01-01'],
1258
+ ['[玄始暦]412.01.01', '@CR', '412.01.01^Chinese::玄始暦', '440-01-01'],
1259
+ ['[玄始暦]452.01.01', '@CR', '452.01.01^Chinese::玄始暦', '523-01-01'],
1260
+ ['[正光暦]523.01.01', '@CR', '523.01.01^Chinese::正光暦', '566-01-01'],
1261
+ ['[興和暦]540.01.01', '@CR', '540.01.01^Chinese::興和暦', '551-01-01'],
1262
+ ['[天保暦]551.01.01', '@CR', '551.01.01^Chinese::天保暦', '578-01-01'],
1263
+ ['[天和暦]566.01.01', '@CR', '566.01.01^Chinese::天和暦', '579-01-01'],
1264
+ ['[大象暦]579.01.01', '@CR', '579.01.01^Chinese::大象暦', '584-01-01'],
1265
+ ['[開皇暦]584.01.01', '@CR', '584.01.01^Chinese::開皇暦', '597-01-01'],
1266
+ ['[大業暦]597.01.01', '@CR', '597.01.01^Chinese::大業暦', '619-01-01'],
1267
+ ['[麟徳暦]665.01.01', '@CR', '665.01.01^Chinese::麟徳暦', '729-01-01'],
1268
+ ['[大衍暦]729.01.01', '@CR', '729.01.01^Chinese::大衍暦', '762-01-01'],
1269
+ ['[五紀暦]762.01.01', '@CR', '762.01.01^Chinese::五紀暦', '784-01-01'],
1270
+ ['[宣明暦]822.01.01', '@CR', '822.01.01^Chinese::宣明暦', '893-01-01']
1271
+ ]]
1272
+
1273
+ # Chinese Solar Calendar Series for ChineseNote
1274
+ ChineseSolarSeries = [self, [
1275
+ 'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
1276
+ 'locale:[=en:, ja=ja:, alias]',
1277
+ 'area:[ChineseSolarSeries=, 中国の節月=]',
1278
+ ['[太初暦]1.01.01', '@CR', '1-01-01^Chinese::太初暦(節月)', '85-01-06'], # 西暦が正になるところから開始(実際は-103.01.15)
1279
+ ['[四分暦]85.01.07', '@CR', '85-01-07^Chinese::四分暦(節月)', '264-12-28'],
1280
+ ['[乾象暦]221.12.23', '@CR', '221-12-23^Chinese::乾象暦(節月)', '280-12-31'],
1281
+ ['[景初暦]237.01.07', '@CR', '237-01-07^Chinese::景初暦(節月)', '451-12-31'],
1282
+ ['[元嘉暦]444.12.22', '@CR', '444-12-22^Chinese::元嘉暦(節月)', '509-12-24'],
1283
+ ['[大明暦]509.12.23', '@CR', '509-12-23^Chinese::大明暦(節月)', '590-01-08'],
1284
+ ['[三紀暦]384.01.02', '@CR', '384-01-02^Chinese::三紀暦(節月)', '418-01-16'],
1285
+ ['[玄始暦]411.12.26', '@CR', '411-12-26^Chinese::玄始暦(節月)', '440-01-15'],
1286
+ ['[玄始暦]452.01.02', '@CR', '452-01-02^Chinese::玄始暦(節月)', '522-12-29'],
1287
+ ['[正光暦]522.12.29', '@CR', '522-12-29^Chinese::正光暦(節月)', '566-01-05'],
1288
+ ['[興和暦]539.12.22', '@CR', '539-12-22^Chinese::興和暦(節月)', '550-12-20'],
1289
+ ['[天保暦]550.12.19', '@CR', '550-12-19^Chinese::天保暦(節月)', '577-12-21'],
1290
+ ['[天和暦]566.01.05', '@CR', '566-01-05^Chinese::天和暦(節月)', '579-01-11'],
1291
+ ['[大象暦]579.01.11', '@CR', '579-01-11^Chinese::大象暦(節月)', '584-01-15'],
1292
+ ['[開皇暦]584.01.16', '@CR', '584-01-16^Chinese::開皇暦(節月)', '596-12-23'],
1293
+ ['[大業暦]596.12.22', '@CR', '596-12-22^Chinese::大業暦(節月)', '618-12-19'],
1294
+ ['[麟徳暦]664.01.01', '@CR', '664-01-01^Chinese::麟徳暦(節月)', '729-01-03'], # 年の始めに遡って開始(実際は12.21)
1295
+ ['[大衍暦]729.01.03', '@CR', '729-01-03^Chinese::大衍暦(節月)', '761-12-29'],
1296
+ ['[五紀暦]761.12.29', '@CR', '761-12-29^Chinese::五紀暦(節月)', '783-12-26'],
1297
+ ['[正元暦]783.12.26', '@CR', '783-12-26^Chinese::正元暦(節月)', '807-01-11'],
1298
+ ['[宣明暦]821.01.01', '@CR', '821-01-01^Chinese::宣明暦(節月)', '892-12-22'] # 年の始めに遡って開始(実際は12.27)
1299
+ ]]
1245
1300
  end
1246
1301
  end
@@ -367,6 +367,7 @@ module When
367
367
  # @past = グレゴリオ暦への改暦前の暦法
368
368
  # @reform_date = 改暦日付(月日は 1 オリジンで指定し、0 オリジンに直して保持)
369
369
  # @reform_jdn = 改暦日付のユリウス通日
370
+ # @reform = reform_date か reform_jdn を内容で判別し、どちらかに反映する
370
371
  # @the_easter = グレゴリオ暦の復活祭計算の適用を始める年
371
372
  # @the_length = 通常と異なる日付となる年月の情報({[年,月]=>[スキップした日数, スキップし始める日, 月の日数]})
372
373
  #
@@ -379,6 +380,13 @@ module When
379
380
  @indices ||= @past.indices
380
381
 
381
382
  # 改暦日付 (0 オリジン)
383
+ @reform = When::Coordinates::Pair._en_pair_date_time(@reform) if @reform.kind_of?(String)
384
+ case @reform.length
385
+ when 0 ;
386
+ when 1 ; @reform_jdn = @reform[0]
387
+ else ; @reform_date = @reform
388
+ end if @reform.kind_of?(Array)
389
+
382
390
  if @reform_date
383
391
  @reform_date = When::Coordinates::Pair._en_pair_date_time(@reform_date) if @reform_date.kind_of?(String)
384
392
  @reform_date = @reform_date.map {|c| c.to_i}
@@ -479,11 +487,70 @@ module When
479
487
  # 日の暦注 ----------------------------
480
488
  [When::BasicTypes::M17n,
481
489
  "names:[day]",
482
- [When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
483
- [When::BasicTypes::M17n, "names:[Christmas, クリスマス]"]
490
+ [When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
491
+ [When::BasicTypes::M17n, "names:[Christmas, クリスマス]"],
492
+ [When::BasicTypes::M17n, "names:[Fixed_feast=, 固定祝日=]" ],
493
+ [When::BasicTypes::M17n, "names:[Moveable_feast, 移動祝日]" ]
484
494
  ]
485
495
  ]]
486
496
 
497
+ # 固定祝日
498
+ Fixed_feasts = {
499
+ [ 1, 6] => "Epiphany",
500
+ [ 3, 1] => "St.David's Day",
501
+ [ 3, 17] => "St.Patrick's Day",
502
+ [ 3, 25] => "Annunciation-Lady Day",
503
+ [ 4, 23] => "St.George's Day",
504
+ [ 6, 24] => "Midsummer Day",
505
+ [ 9, 14] => "Holy Cross Day",
506
+ [ 9, 29] => "Michaelmas Day",
507
+ [11, 30] => "St.Andrew's Day",
508
+ [12, 13] => "St.Lucia's Day",
509
+ [12, 21] => "St.Thomas's Day",
510
+ # [12, 25] => "Christmas Day"
511
+ }
512
+
513
+ # 移動祝日 (日付と曜日による)
514
+ moveable_feasts = {}
515
+ [[[ 9, 15, 2], "III Quatember"],
516
+ [[11, 27, 6], "Advent Sunday"],
517
+ [[12, 14, 2], "IV Quatember" ]].each do |pair|
518
+ date, name = pair
519
+ 7.times do
520
+ moveable_feasts[date.dup] = name
521
+ date[1] += 1
522
+ if date[1] > 30
523
+ date[0] += 1
524
+ date[1] = 1
525
+ end
526
+ end
527
+ end
528
+
529
+ # 移動祝日
530
+ Moveable_feasts = {
531
+ # 復活祭からの日数による
532
+ -63 => "Septuagesima Sunday",
533
+ -56 => "Sexagesima Sunday",
534
+ -49 => "Quinquagesima Sunday",
535
+ -46 => "Ash Wednesday",
536
+ -42 => "Quadragesima Sunday",
537
+ -40 => "I Quatember",
538
+ -35 => "Reminizer Sunday",
539
+ -28 => "Oculi Sunday",
540
+ -21 => "Laetare Sunday",
541
+ -14 => "Judica Sunday",
542
+ -7 => "Palmarum",
543
+ -2 => "Good Friday",
544
+ # 0 => "Easter Day",
545
+ 7 => "Low Sunday",
546
+ 35 => "Rogation Sunday",
547
+ 39 => "Ascension Day",
548
+ 49 => "Whitsunday",
549
+ 53 => "II Quatember",
550
+ 56 => "Trinity Sunday",
551
+ 60 => "Corpus Christi",
552
+ }.update(moveable_feasts)
553
+
487
554
  # 週日補正フラグ
488
555
  # @return [Integer]
489
556
  attr_reader :w
@@ -572,6 +639,34 @@ module When
572
639
  # @private
573
640
  alias :easter_delta :_delta
574
641
 
642
+ # 固定祝日
643
+ #
644
+ # @param [When::TM::TemporalPosition] date
645
+ # @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
646
+ #
647
+ # @return [String] 祝日の名称
648
+ # @return [nil] 祝日に該当しない
649
+ #
650
+ def fixed_feast(date, frame=nil)
651
+ date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Julian)
652
+ Fixed_feasts[date.cal_date[-2..-1]]
653
+ end
654
+
655
+ # 移動祝日
656
+ #
657
+ # @param [When::TM::TemporalPosition] date
658
+ # @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
659
+ #
660
+ # @return [String] 祝日の名称
661
+ # @return [nil] 祝日に該当しない
662
+ #
663
+ def moveable_feast(date, frame=nil)
664
+ result = Moveable_feasts[date.to_i - easter(date, frame).to_i]
665
+ return result if result
666
+ date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Julian)
667
+ Moveable_feasts[date.cal_date[-2..-1] + [date.to_i % 7]]
668
+ end
669
+
575
670
  private
576
671
 
577
672
  # オブジェクトの正規化
@@ -0,0 +1,353 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ #
9
+ # Ephemeris を用いる暦注
10
+ #
11
+ module When::CalendarTypes
12
+
13
+ class CalendarNote
14
+ #
15
+ # 太陽と月の位置によるイベント
16
+ #
17
+ class LuniSolarPositions < self
18
+
19
+ # 座標の分子
20
+ #
21
+ # @return [Numeric]
22
+ #
23
+ attr_reader :num
24
+
25
+ # 座標の分母
26
+ #
27
+ # @return [Numeric]
28
+ #
29
+ attr_reader :den
30
+
31
+ # 計算アルゴリズム
32
+ #
33
+ # @return [When::Ephemeris::Formula]
34
+ #
35
+ attr_reader :formula
36
+
37
+ # enumerator の周期
38
+ #
39
+ # @return [Numeric]
40
+ #
41
+ attr_reader :delta
42
+
43
+ # 没滅計算用の補正
44
+ #
45
+ # @return [Numeric]
46
+ #
47
+ attr_reader :margin
48
+
49
+ # イベントの日時
50
+ #
51
+ # @param [When::TM::TemporalPosition] date イベントを探す基準とする日時
52
+ # @param [Array<Numeric>] parameter 座標の分子と分母( num, den)
53
+ #
54
+ # num 座標の分子 (デフォルト @num)
55
+ #
56
+ # den 座標の分母 (デフォルト @den)
57
+ #
58
+ # @param [String] parameter 座標の分子と分母("#{ num }/#{ den }" の形式)
59
+ # @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
60
+ #
61
+ # @return [When::TM::CalDate] date またはその直後のイベントの日時
62
+ #
63
+ def term(date, parameter=nil, precision=date.precision)
64
+ precision = nil if precision == When::SYSTEM
65
+ num, den = parameter.kind_of?(String) ? parameter.split(/\//, 2) : parameter
66
+ num = (num || @num).to_f
67
+ den = (den || @den).to_f
68
+ date = date.floor(precision) if precision
69
+ options = date._attr
70
+ quot, mod = (@formula.time_to_cn(date)*30.0).divmod(den)
71
+ cycle = quot * den + num
72
+ cycle += den if mod > (num % den)
73
+ time = When::TM::JulianDate._d_to_t(@formula.cn_to_time(cycle/30.0))
74
+ time = date.time_standard.from_dynamical_time(time) if @formula.is_dynamical
75
+ date = date.frame.jul_trans(When::TM::JulianDate.universal_time(time), options)
76
+ precision ? date.floor(precision) : date
77
+ end
78
+
79
+ # 日付に対応する座標
80
+ #
81
+ # @param [When::TM::TemporalPosition] date 日付
82
+ # @param [Numeric] delta 周期の補正(土用の時刻の補正に使用,デフォルト 0)
83
+ #
84
+ # @return [Array<Integer>] Array< Integer, 0 or 1 or 2 >
85
+ #
86
+ # [Integer] 対応する座標
87
+ #
88
+ # [0 or 1 or 2] 座標の進み(0 なら 没, 2 なら滅)
89
+ #
90
+ def position(date, delta=0)
91
+ date = date.floor
92
+ p0, p1 = [date, date.succ].map {|d| (30.0 * @formula.time_to_cn(d) - @margin + delta).floor}
93
+ [p1 % @den, p1 - p0]
94
+ end
95
+
96
+ #
97
+ # イベントの標準的な間隔を返す
98
+ #
99
+ # @param [String] parameter 座標の分子と分母("#{ num }/#{ den }" の形式)
100
+ #
101
+ # @return [When::TM::IntervalLength]
102
+ def term_delta(parameter=nil)
103
+ return @delta unless parameter
104
+ num, den = parameter.split(/\//, 2)
105
+ When::TM::IntervalLength.new([(den || @den).to_f-1,1].max, 'day')
106
+ end
107
+ end
108
+
109
+ #
110
+ # 二十四節気
111
+ #
112
+ class SolarTerms < LuniSolarPositions
113
+
114
+ private
115
+
116
+ # オブジェクトの正規化
117
+ # num - 太陽黄経/度の分子 (デフォルト 0 - 春分)
118
+ # den - 太陽黄経/度の分母 (デフォルト 360 - 1年)
119
+ # formula - 計算アルゴリズム(デフォルト '_ep:Formula?formula=12S')
120
+ # delta - enumerator の周期 (デフォルト (den/360)年)
121
+ # margin - 没滅計算用の補正 (デフォルト 1E-8)
122
+ def _normalize(args=[], options={})
123
+ num, den, formula, delta, margin = args
124
+ @num = (num || @num || 0).to_f
125
+ @den = (den || @den || 360).to_f
126
+ @formula = When.Resource(formula || @formula ||'Formula?formula=12S', '_ep:')
127
+ @delta = When.Duration(delta || @delta || When::TM::IntervalLength.new(@den/360, 'year'))
128
+ @margin = (margin || @margin || 1E-8).to_f
129
+ super
130
+ end
131
+ end
132
+
133
+ #
134
+ # 月の位相
135
+ #
136
+ class LunarPhases < LuniSolarPositions
137
+
138
+ private
139
+
140
+ # オブジェクトの正規化
141
+ # num - 月の位相/12度の分子 (デフォルト 0 - 朔)
142
+ # den - 月の位相/12度の分母 (デフォルト 30 - 1月)
143
+ # formula - 計算アルゴリズム(デフォルト '_ep:Formula?formula=1L')
144
+ # delta - enumerator の周期 (デフォルト (den/30)月)
145
+ # margin - 没滅計算用の補正 (デフォルト 1E-8)
146
+ def _normalize(args=[], options={})
147
+ num, den, formula, delta, margin = args
148
+ @num = (num || @num || 0).to_f
149
+ @den = (den || @den || 30).to_f
150
+ @formula = When.Resource(formula || @formula ||'Formula?formula=1L', '_ep:')
151
+ @delta = When.Duration(delta || @delta || When::TM::IntervalLength.new(@den/30, 'month'))
152
+ @margin = (margin || @margin || 1E-8).to_f
153
+ super
154
+ end
155
+ end
156
+
157
+ #
158
+ # 天体暦の暦注
159
+ #
160
+ class EphemericNote < self
161
+
162
+ NoteObjects = [When::BasicTypes::M17n, [
163
+ "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
164
+ "locale:[=en:, ja=ja:, alias=ja:]",
165
+ "names:[Ephemeric]",
166
+
167
+ # 年の暦注 ----------------------------
168
+ [When::BasicTypes::M17n,
169
+ "names:[year]"
170
+ ],
171
+
172
+ # 月の暦注 ----------------------------
173
+ [When::BasicTypes::M17n,
174
+ "names:[month]",
175
+ [When::BasicTypes::M17n,
176
+ "names:[Month]"
177
+ ]
178
+ ],
179
+
180
+ # 日の暦注 ----------------------------
181
+ [When::BasicTypes::M17n,
182
+ "names:[day]",
183
+ "[Sunrise, 日の出 ]", # 日の出
184
+ "[Sunset, 日の入り ]", # 日の入り
185
+ [When::Coordinates::Residue,
186
+ "label:[Moon_Age=, 正午月齢=ja:%%<月齢>]",
187
+ "divisor:60",
188
+ "format:[%s(%4.1f)]"
189
+ ],
190
+ "[Moonrise, 月の出 ]", # 月の出
191
+ "[Moonset=, 月の入り ]", # 月の入り
192
+ [When::BasicTypes::M17n,
193
+ "names:[Tide, 潮汐]", # 満潮干潮日時
194
+ "[High_Tide=en:Tide, 満潮=ja:%%<潮汐>]",
195
+ "[Low_Tide=en:Tide, 干潮=ja:%%<潮汐>]"
196
+ ]
197
+ ]
198
+ ]]
199
+
200
+ #
201
+ # 日の出
202
+ #
203
+ # @param [When::TM::TemporalPosition] date
204
+ # @param [Hash] options dummy
205
+ #
206
+ # @return [When::TM::TemporalPosition] 日の出の時刻をイベント時刻とする
207
+ #
208
+ def sunrise(date, options={})
209
+ event = formula(date.location.iri).sunrise(date)
210
+ event.events = [@root['Sunrise']]
211
+ event
212
+ rescue
213
+ nil
214
+ end
215
+
216
+ #
217
+ # 日の入り
218
+ #
219
+ # @param [When::TM::TemporalPosition] date
220
+ # @param [Hash] options dummy
221
+ #
222
+ # @return [When::TM::TemporalPosition] 日の入りの時刻をイベント時刻とする
223
+ #
224
+ def sunset(date, options={})
225
+ event = formula(date.location.iri).sunset(date)
226
+ event.events = [@root['Sunset']]
227
+ event
228
+ rescue
229
+ nil
230
+ end
231
+
232
+ #
233
+ # 正午月齢
234
+ #
235
+ # @param [When::TM::TemporalPosition] date
236
+ # @param [Hash] options dummy
237
+ #
238
+ # @return [Numeric] 正午における朔からの経過日数
239
+ #
240
+ def moon_age(date, options={})
241
+ @phase ||= When.CalendarNote('LunarPhases')
242
+ noon = date.floor(When::DAY,When::SYSTEM) + 0.5
243
+ @root['Moon_Age'][noon.to_f - @phase.term(noon, [-30.0,30.0]).to_f]
244
+ end
245
+
246
+ #
247
+ # 月の出
248
+ #
249
+ # @param [When::TM::TemporalPosition] date
250
+ # @param [Hash] options dummy
251
+ #
252
+ # @return [When::TM::TemporalPosition] 月の出の時刻をイベント時刻とする
253
+ #
254
+ def moonrise(date, options={})
255
+ event = formula(date.location.iri).moonrise(date)
256
+ event.events = [@root['Moonrise']]
257
+ event
258
+ rescue
259
+ nil
260
+ end
261
+
262
+ #
263
+ # 月の入り
264
+ #
265
+ # @param [When::TM::TemporalPosition] date
266
+ # @param [Hash] options dummy
267
+ #
268
+ # @return [When::TM::TemporalPosition] 月の入りの時刻をイベント時刻とする
269
+ #
270
+ def moonset(date, options={})
271
+ event = formula(date.location.iri).moonset(date)
272
+ event.events = [@root['Moonset']]
273
+ event
274
+ rescue
275
+ nil
276
+ end
277
+
278
+ # 干潮・満潮の日時
279
+ #
280
+ # @param [When::TM::TemporalPosition] date
281
+ # @param [Hash] options
282
+ # @option options [String] tide 潮汐計算方式 'Horizontal' - 地平高度基準, 'Equatorial' - 子午線通過基準(デフォルト)
283
+ #
284
+ # @return [Array<Array<Integer, When::TM::TemporalPosotion>>] 干潮・満潮の日時の Array
285
+ #
286
+ # [Integer] +1:満潮, -1:干潮
287
+ #
288
+ # [When::TM::TemporalPosotion] 干潮・満潮の日時
289
+ #
290
+ #
291
+ def tide(date, options={})
292
+ return nil unless @interval
293
+ @target ||= When.Resource('_ep:Moon')
294
+ events = @root['Tide']
295
+ form = formula(date.location.iri)
296
+ type = options[:tide] =~ /^horizon/i ? nil : 0
297
+
298
+ now = +date
299
+ high_tides = []
300
+ 5.times do |i|
301
+ high_tide = form.day_event(now + i - 2, type, @target) + @interval
302
+ high_tides << high_tide if high_tides.size == 0 || high_tide > high_tides[-1] + 0.5
303
+ end
304
+ tides = []
305
+
306
+ (high_tides.size-1).times do |i|
307
+ tides << [0, high_tides[i]]
308
+ tides << [1, 0.75*high_tides[i] + 0.25*high_tides[i+1]]
309
+ tides << [0, 0.50*high_tides[i] + 0.50*high_tides[i+1]]
310
+ tides << [1, 0.25*high_tides[i] + 0.75*high_tides[i+1]]
311
+ end
312
+ tides << [0, high_tides[-1]]
313
+
314
+ today = +date.floor(When::DAY)...+date.ceil(When::DAY)
315
+ seed = date._attr
316
+ seed[:clock] ||= When::TM::Clock.local_time
317
+ tides.select {|x| today.include?(x[1])}.map {|x|
318
+ d = form._to_seed_type(x[1], seed)
319
+ d.events = [events[x[0]]]
320
+ d
321
+ }
322
+ rescue
323
+ nil
324
+ end
325
+
326
+ private
327
+
328
+ # オブジェクトの正規化
329
+ # long - 計算に用いる経度 / 度
330
+ # lat - 計算に用いる緯度 / 度
331
+ # alt - 計算に用いる高度 / m
332
+ # interval - 高潮間隔(月の子午線通過から満潮までの時間) / 時間
333
+ def _normalize(args=[], options={})
334
+ if @location
335
+ @location = When.Resource(@location)
336
+ @formula = When.Resource(@formula || "Formula?location=(#{@location.iri})", '_ep:')
337
+ else
338
+ @formula = {}
339
+ end
340
+ @interval = @interval.sub('@','.').to_f / 24 if @interval
341
+ @root = When.CalendarNote('EphemericNote/NoteObjects::day')
342
+ @prime ||= [%w(Month), %w(Sunrise Sunset Moon_Age)]
343
+ super
344
+ end
345
+
346
+ # 計算に用いる Ephemeris
347
+ def formula(location)
348
+ return @formula unless @formula.kind_of?(Hash)
349
+ @formula[location] ||= When.Resource("Formula?location=(#{location})", '_ep:')
350
+ end
351
+ end
352
+ end
353
+ end