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
@@ -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