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.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/locales.rb +2 -1
- data/bin/when.rb.config +1 -1
- data/lib/when_exe.rb +70 -48
- data/lib/when_exe/basictypes.rb +99 -65
- data/lib/when_exe/calendartypes.rb +40 -178
- data/lib/when_exe/coordinates.rb +156 -62
- data/lib/when_exe/core/compatibility.rb +10 -0
- data/lib/when_exe/core/extension.rb +40 -0
- data/lib/when_exe/ephemeris.rb +112 -50
- data/lib/when_exe/icalendar.rb +125 -91
- data/lib/when_exe/inspect.rb +100 -48
- data/lib/when_exe/locales/ar.rb +48 -48
- data/lib/when_exe/locales/bg.rb +1 -1
- data/lib/when_exe/locales/bs.rb +4 -2
- data/lib/when_exe/locales/ca.rb +1 -1
- data/lib/when_exe/locales/en_CA.rb +3 -4
- data/lib/when_exe/locales/en_IE.rb +88 -0
- data/lib/when_exe/locales/en_US.rb +87 -0
- data/lib/when_exe/locales/es_CR.rb +84 -0
- data/lib/when_exe/locales/es_EC.rb +85 -0
- data/lib/when_exe/locales/es_PA.rb +85 -0
- data/lib/when_exe/locales/fr.rb +39 -39
- data/lib/when_exe/locales/hu.rb +15 -14
- data/lib/when_exe/locales/it.rb +1 -1
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/locales.rb +7 -0
- data/lib/when_exe/locales/lt.rb +21 -19
- data/lib/when_exe/locales/ms.rb +84 -0
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/ru.rb +1 -1
- data/lib/when_exe/locales/uk.rb +1 -1
- data/lib/when_exe/locales/ur.rb +84 -0
- data/lib/when_exe/mini_application.rb +44 -43
- data/lib/when_exe/parts/enumerator.rb +3 -3
- data/lib/when_exe/parts/geometric_complex.rb +6 -1
- data/lib/when_exe/parts/locale.rb +49 -18
- data/lib/when_exe/parts/method_cash.rb +61 -0
- data/lib/when_exe/parts/resource.rb +221 -106
- data/lib/when_exe/parts/timezone.rb +70 -33
- data/lib/when_exe/region/bahai.rb +2 -2
- data/lib/when_exe/region/balinese.rb +40 -43
- data/lib/when_exe/region/chinese.rb +93 -33
- data/lib/when_exe/region/chinese_calendar.rb +117 -1
- data/lib/when_exe/region/chinese_epoch.rb +65 -10
- data/lib/when_exe/region/christian.rb +97 -2
- data/lib/when_exe/region/ephemeric_notes.rb +353 -0
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/geologicalage.rb +171 -171
- data/lib/when_exe/region/indian.rb +18 -14
- data/lib/when_exe/region/iranian.rb +1 -1
- data/lib/when_exe/region/japanese.rb +49 -12
- data/lib/when_exe/region/japanese_notes.rb +838 -507
- data/lib/when_exe/region/japanese_residues.rb +724 -662
- data/lib/when_exe/region/javanese.rb +7 -7
- data/lib/when_exe/region/mayan.rb +19 -17
- data/lib/when_exe/region/nihon_shoki.rb +3 -3
- data/lib/when_exe/region/residue.rb +29 -28
- data/lib/when_exe/region/shire.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +87 -5
- data/lib/when_exe/region/world.rb +1 -1
- data/lib/when_exe/timestandard.rb +85 -7
- data/lib/when_exe/tmobjects.rb +32 -4
- data/lib/when_exe/tmposition.rb +104 -55
- data/lib/when_exe/tmreference.rb +157 -60
- data/lib/when_exe/version.rb +2 -2
- data/test/examples/JapanHolidays.ics +3 -3
- data/test/examples/JapanHolidaysRFC6350.ics +499 -0
- data/test/examples/Residue.m17n +3 -2
- data/test/examples/Spatial.m17n +3 -3
- data/test/examples/USA-DST.ics +27 -27
- data/test/examples/today.rb +1 -1
- data/test/test.rb +4 -2
- data/test/test/basictypes.rb +40 -15
- data/test/test/coordinates.rb +9 -4
- data/test/test/icalendar.rb +24 -14
- data/test/test/inspect.rb +5 -3
- data/test/test/parts.rb +11 -2
- data/test/test/region/chinese.rb +4 -4
- data/test/test/region/civil.rb +124 -0
- data/test/test/region/geologicalage.rb +5 -2
- data/test/test/region/indian.rb +2 -0
- data/test/test/region/japanese.rb +156 -1
- data/test/test/region/jewish.rb +3 -3
- data/test/test/region/m17n.rb +9 -9
- data/test/test/region/mayan.rb +122 -5
- data/test/test/region/residue.rb +1 -1
- data/test/test/tmobjects.rb +27 -64
- data/test/test/tmposition.rb +48 -1
- data/test/test/tmreference.rb +66 -4
- data/when_exe.gemspec +1 -1
- metadata +15 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
=begin
|
|
3
|
-
Copyright (C) 2011-
|
|
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-
|
|
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
|
-
|
|
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" ,
|
|
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", "" ,
|
|
703
|
+
["[載初]1*11.01", "" , ' 690*11-01^Chinese#{B:0689}', "690-09-09"], # 庚辰 本年から11月を歳首とする
|
|
704
704
|
[self,
|
|
705
705
|
"period:[周]",
|
|
706
|
-
["[天授]1*" , "@F" ,
|
|
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
|
-
|
|
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", "" ,
|
|
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",
|
|
735
|
-
["[宝応]1" , "@A" ,
|
|
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
|