when_exe 0.3.6 → 0.3.7

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 (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,113 +1,114 @@
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
- module When
9
- module BasicTypes
10
- class M17n
11
- #
12
- # 月名
13
- #
14
- # @param [Numeric] name 指定の月番号の月名を返します
15
- # @param [When::BasicTypes::M17n] name name 自身をそのまま返します
16
- # @param [String] name 最初の3文字から決定した月名を返します。
17
- # 一致する月名がない場合、名前の一致するその他のM17nを探して返します。
18
- #
19
- # @return [When::BasicTypes::M17n] 月名
20
- #
21
- def self.month_name(name)
22
- return name if name.kind_of?(self)
23
-
24
- months = When.Resource('_m:Calendar::Month').child
25
- abbrs = When.Resource('_m:Calendar::Abbr_Month').child
26
- return name > 0 ? months[name-1] : abbrs[-name-1] if name.kind_of?(Numeric)
27
-
28
- name = When::EncodingConversion.to_internal_encoding(name)
29
- match = name[/^...|^..$/]
30
- if match
31
- (months+abbrs).each do |month|
32
- return month if month.=~(/^#{match}/i)
33
- end
34
- end
35
-
36
- ObjectSpace.each_object(self) do |object|
37
- return object if object.registered? && object.=~(/^#{name}$/)
38
- end
39
-
40
- return nil
41
- end
42
-
43
- #
44
- # 共通的な暦用語
45
- #
46
- Calendar = [M17n, [
47
- "locale:[=en:, ja=ja:, alias]",
48
- "names:[Calendar=]",
49
-
50
- "[Intercalary %s=, *閏]",
51
-
52
- [M17n,
53
- "names:[Month, 月=ja:%%<月_(暦)>, /datetime/prompts/month]",
54
- "[January, 1月, /date/month_names/1] ",
55
- "[February, 2月, /date/month_names/2] ",
56
- "[March, 3月, /date/month_names/3] ",
57
- "[April, 4月, /date/month_names/4] ",
58
- "[May, 5月, /date/month_names/5] ",
59
- "[June, 6月, /date/month_names/6] ",
60
- "[July, 7月, /date/month_names/7] ",
61
- "[August, 8月, /date/month_names/8] ",
62
- "[September, 9月, /date/month_names/9] ",
63
- "[October, 10月, /date/month_names/10]",
64
- "[November, 11月, /date/month_names/11]",
65
- "[December, 12月, /date/month_names/12]"
66
- ],
67
-
68
- [M17n,
69
- "names:[Abbr_Month, 月略称)]",
70
- "[Jan, 1月, /date/abbr_month_names/1] ",
71
- "[Feb, 2月, /date/abbr_month_names/2] ",
72
- "[Mar, 3月, /date/abbr_month_names/3] ",
73
- "[Apr, 4月, /date/abbr_month_names/4] ",
74
- "[May, 5月, /date/abbr_month_names/5] ",
75
- "[Jun, 6月, /date/abbr_month_names/6] ",
76
- "[Jul, 7月, /date/abbr_month_names/7] ",
77
- "[Aug, 8月, /date/abbr_month_names/8] ",
78
- "[Sep, 9月, /date/abbr_month_names/9] ",
79
- "[Oct, 10月, /date/abbr_month_names/10]",
80
- "[Nov, 11月, /date/abbr_month_names/11]",
81
- "[Dec, 12月, /date/abbr_month_names/12]"
82
- ]
83
- ]]
84
-
85
- # Events
86
- EpochEvents = [M17n, [
87
- "locale:[=en:, ja=ja:, alias]",
88
- "names:[EpochEvents=]",
89
- "[Accession=, 代始]",
90
- "[FelicitousEvent=, 祥瑞]",
91
- "[NaturalDisaster=, 災異]",
92
- "[InauspiciousYear=, 革年]",
93
- "[Foundation=, 創業]",
94
- "[CalendarReform=, 改暦]"
95
- ]]
96
-
97
- # Formats
98
- CalendarFormats = [M17n, [
99
- "locale:[=]",
100
- "names:[CalendarFormats=]",
101
- "[Date=, /date/formats/default]",
102
- "[DateLong=, /date/formats/long ]",
103
- "[DateShort=, /date/formats/short ]",
104
- "[DateTime=, /time/formats/default]",
105
- "[DateTimeLong=, /time/formats/long ]",
106
- "[DateTimeShort=, /time/formats/short ]",
107
- "[Time=, /time/formats/time ]",
108
- "[AM=, /time/am ]",
109
- "[PM=, /time/pm ]"
110
- ]]
111
- end
112
- end
113
- end
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
+ module When
9
+ module BasicTypes
10
+ class M17n
11
+ #
12
+ # 月名
13
+ #
14
+ # @param [Numeric] name 指定の月番号の月名を返します
15
+ # @param [When::BasicTypes::M17n] name name 自身をそのまま返します
16
+ # @param [String] name 最初の3文字から決定した月名を返します。
17
+ # 一致する月名がない場合、名前の一致するその他のM17nを探して返します。
18
+ #
19
+ # @return [When::BasicTypes::M17n] 月名
20
+ #
21
+ def self.month_name(name)
22
+ return name if name.kind_of?(self)
23
+
24
+ months = When.Resource('_m:Calendar::Month').child
25
+ abbrs = When.Resource('_m:Calendar::Abbr_Month').child
26
+ return name > 0 ? months[name-1] : abbrs[-name-1] if name.kind_of?(Numeric)
27
+
28
+ name = When::EncodingConversion.to_internal_encoding(name)
29
+ match = name[/\A...|^..\z/]
30
+ if match
31
+ (months+abbrs).each do |month|
32
+ return month if month.=~(/\A#{match}/i)
33
+ end
34
+ end
35
+
36
+ ObjectSpace.each_object(self) do |object|
37
+ return object if object.registered? && object.=~(/\A#{name}\z/)
38
+ end
39
+
40
+ return nil
41
+ end
42
+
43
+ #
44
+ # 共通的な暦用語
45
+ #
46
+ Calendar = [M17n, [
47
+ "locale:[=en:, ja=ja:, alias]",
48
+ "names:[Calendar=]",
49
+
50
+ "[Intercalary %s=, *閏]",
51
+
52
+ [M17n,
53
+ "names:[Month, 月=ja:%%<月_(暦)>, /datetime/prompts/month]",
54
+ "[January, 1月, /date/month_names/1] ",
55
+ "[February, 2月, /date/month_names/2] ",
56
+ "[March, 3月, /date/month_names/3] ",
57
+ "[April, 4月, /date/month_names/4] ",
58
+ "[May, 5月, /date/month_names/5] ",
59
+ "[June, 6月, /date/month_names/6] ",
60
+ "[July, 7月, /date/month_names/7] ",
61
+ "[August, 8月, /date/month_names/8] ",
62
+ "[September, 9月, /date/month_names/9] ",
63
+ "[October, 10月, /date/month_names/10]",
64
+ "[November, 11月, /date/month_names/11]",
65
+ "[December, 12月, /date/month_names/12]"
66
+ ],
67
+
68
+ [M17n,
69
+ "names:[Abbr_Month, 月略称)]",
70
+ "[Jan, 1月, /date/abbr_month_names/1] ",
71
+ "[Feb, 2月, /date/abbr_month_names/2] ",
72
+ "[Mar, 3月, /date/abbr_month_names/3] ",
73
+ "[Apr, 4月, /date/abbr_month_names/4] ",
74
+ "[May, 5月, /date/abbr_month_names/5] ",
75
+ "[Jun, 6月, /date/abbr_month_names/6] ",
76
+ "[Jul, 7月, /date/abbr_month_names/7] ",
77
+ "[Aug, 8月, /date/abbr_month_names/8] ",
78
+ "[Sep, 9月, /date/abbr_month_names/9] ",
79
+ "[Oct, 10月, /date/abbr_month_names/10]",
80
+ "[Nov, 11月, /date/abbr_month_names/11]",
81
+ "[Dec, 12月, /date/abbr_month_names/12]"
82
+ ]
83
+ ]]
84
+
85
+ # Events
86
+ EpochEvents = [M17n, [
87
+ "locale:[=en:, ja=ja:, alias]",
88
+ "names:[EpochEvents=]",
89
+ "[Accession=, 代始]",
90
+ "[FelicitousEvent=, 祥瑞]",
91
+ "[NaturalDisaster=, 災異]",
92
+ "[InauspiciousYear=, 革年]",
93
+ "[Foundation=, 創業]",
94
+ "[CalendarReform=, 改暦]",
95
+ "[CalendarEpoch=, 暦元]"
96
+ ]]
97
+
98
+ # Formats
99
+ CalendarFormats = [M17n, [
100
+ "locale:[=]",
101
+ "names:[CalendarFormats=]",
102
+ "[Date=, /date/formats/default]",
103
+ "[DateLong=, /date/formats/long ]",
104
+ "[DateShort=, /date/formats/short ]",
105
+ "[DateTime=, /time/formats/default]",
106
+ "[DateTimeLong=, /time/formats/long ]",
107
+ "[DateTimeShort=, /time/formats/short ]",
108
+ "[Time=, /time/formats/time ]",
109
+ "[AM=, /time/am ]",
110
+ "[PM=, /time/pm ]"
111
+ ]]
112
+ end
113
+ end
114
+ end
@@ -1,255 +1,258 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2013-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
- module When
9
-
10
- class BasicTypes::M17n
11
-
12
- Martian = [self, [
13
- "locale:[=en:, ja=ja:, alias]",
14
- "names:[Martian=]",
15
- "[Darian=en:Darian_calendar, ダリアン暦]",
16
-
17
- [self,
18
- "names:[DarianMonth=, 月=ja:%%<月_(暦)>]",
19
- "[Sagittarius, いて= ]",
20
- "[Dhanus=, 人馬= ]",
21
- "[Capricornus, やぎ= ]",
22
- "[Makara=, 磨羯= ]",
23
- "[Aquarius, みずがめ=]",
24
- "[Kumbha=, 宝瓶= ]",
25
- "[Pisces, うお= ]",
26
- "[Mina=, 双魚= ]",
27
- "[Aries, おひつじ=]",
28
- "[Mesha=, 白羊= ]",
29
- "[Taurus, おうし= ]",
30
- "[Rishabha=, 金牛= ]",
31
- "[Gemini, ふたご= ]",
32
- "[Mithuna=, 双児= ]",
33
- "[Cancer, かに= ]",
34
- "[Karka=, 巨蟹= ]",
35
- "[Leo, しし= ]",
36
- "[Simha=, 獅子= ]",
37
- "[Virgo, おとめ= ]",
38
- "[Kanya=, 処女= ]",
39
- "[Libra, てんびん=]",
40
- "[Tula=, 天秤= ]",
41
- "[Scorpius, さそり= ]",
42
- "[Vrishika=, 天蠍= ]"
43
- ]
44
- ]]
45
- end
46
-
47
- module TimeStandard
48
-
49
- #
50
- # Martian Time, Coordinated
51
- #
52
- class MartianTimeCoordinated < TimeStandard
53
-
54
- J2000Jan6 = 2451549.5
55
- Ratio = 1.02749125
56
- MTC0 = 44796.0 - 0.0002 - 0.5
57
-
58
- # 当該時刻系の日付を dynamical date に変換する
59
- #
60
- # @param [Numeric] date 当該時刻系の日付
61
- #
62
- # @return [Numeric] dynamical date
63
- #
64
- def to_dynamical_date(date)
65
- (date - @mtc0) * Ratio + J2000Jan6
66
- end
67
-
68
- # dynamical date を当該時刻系の日付に変換する
69
- #
70
- # @param [Numeric] date dynamical date
71
- #
72
- # @return [Numeric] 当該時刻系の日付
73
- #
74
- def from_dynamical_date(date)
75
- (date - J2000Jan6) / Ratio + @mtc0
76
- end
77
-
78
- # universal time を dynamical time に変換する
79
- #
80
- # @param [Numeric] time universal time
81
- #
82
- # @return [Numeric] dynamical time
83
- #
84
- def to_dynamical_time(time)
85
- When::TM::JulianDate._d_to_t(
86
- to_dynamical_date(
87
- When::TM::JulianDate._t_to_d(time)))
88
- end
89
-
90
- # dynamical time を universal time に変換する
91
- #
92
- # @param [Numeric] time dynamical time
93
- #
94
- # @return [Numeric] universal time
95
- #
96
- def from_dynamical_time(time)
97
- When::TM::JulianDate._d_to_t(
98
- from_dynamical_date(
99
- When::TM::JulianDate._t_to_d(time)))
100
- end
101
-
102
- private
103
-
104
- # オブジェクトの正規化
105
- def _normalize(args=[], options={})
106
- @location = When.Resource(@location || '_l:long=0&lat=0&datum=Mars')
107
- @mtc0 = MTC0 + @location.long / (360.0 * When::Coordinates::Spatial::DEGREE)
108
- super
109
- end
110
- end
111
- end
112
-
113
- class CalendarNote
114
-
115
- #
116
- # Darian Week
117
- #
118
- class DarianWeek < WorldWeek
119
-
120
- Notes = [When::BasicTypes::M17n, [
121
- "locale:[=en:, ja=ja:, alias]",
122
- "names:[Darian]",
123
-
124
- # 年の暦注 ----------------------------
125
- [When::BasicTypes::M17n,
126
- "names:[year]"
127
- ],
128
-
129
- # 月の暦注 ----------------------------
130
- [When::BasicTypes::M17n,
131
- "names:[month]",
132
- [When::BasicTypes::M17n,
133
- "names:[Month]"
134
- ]
135
- ],
136
-
137
- # 日の暦注 ----------------------------
138
- [When::BasicTypes::M17n,
139
- "names:[day]",
140
- [When::BasicTypes::M17n,
141
- "names:[Week]",
142
- [DayOfWeek, "label:[Solis=, 日曜日]", {'delta'=>7}],
143
- [DayOfWeek, "label:[Lunae=, 月曜日]", {'delta'=>7}],
144
- [DayOfWeek, "label:[Martis=, 火曜日]", {'delta'=>7}],
145
- [DayOfWeek, "label:[Mercurii=, 水曜日]", {'delta'=>7}],
146
- [DayOfWeek, "label:[Jovis=, 木曜日]", {'delta'=>7}],
147
- [DayOfWeek, "label:[Veneris=, 金曜日]", {'delta'=>7}],
148
- [DayOfWeek, "label:[Saturni=, 土曜日]", {'delta'=>7}]
149
- ]
150
- ]
151
- ]]
152
-
153
- #
154
- # 当日または直前の solis の日
155
- #
156
- # @param date [When::TM::TemporalPosition]
157
- # @param parameter [nil] 未使用
158
- #
159
- # @return [When::TM::TemporalPosition]
160
- #
161
- def solis(date, parameter=nil)
162
- date = When.Calendar('Darian').jul_trans(date, {:events=>['from_solis']})
163
- y,m,d = date.cal_date
164
- dow = (d-1) % 7
165
- return date if dow == 0
166
- date += When::TM::PeriodDuration.new([0,0,-dow])
167
- date.events = ['from_solis']
168
- date
169
- end
170
-
171
- #
172
- # この日は何曜?
173
- #
174
- # @param [When::TM::TemporalPosition] date
175
- # @param [When::TM::CalDate] base (not used)
176
- #
177
- # @return [Array<When::CalendarNote::Week::DayOfWeek, Array<Integer,Integer>>]
178
- #
179
- def week(date, base=nil)
180
- date = _to_date_for_note(date)
181
- index = (date.cal_date.last - 1) % 7
182
- [@days_of_week[index], [index, 7]]
183
- end
184
-
185
- #
186
- # 曜日の名前の一覧
187
- #
188
- # @param [When::TM::TemporalPosition] date (ダミー)
189
- #
190
- # @return [Array<When::CalendarNote::Week::DayOfWeek>]
191
- #
192
- def week_labels(date)
193
- @days_of_week.child
194
- end
195
-
196
- #
197
- # 暦日を当該暦注計算用クラスに変換
198
- #
199
- # @private
200
- def _to_date_for_note(date)
201
- date = When::Darian ^ date unless date.frame.label.to_s == 'Darian'
202
- date
203
- end
204
-
205
- private
206
-
207
- # オブジェクトの正規化
208
- def _normalize(args=[], options={})
209
- @event ||= 'solis'
210
- super
211
- end
212
- end
213
- end
214
-
215
- module CalendarTypes
216
-
217
- #
218
- # Martian Time, Coordinated
219
- #
220
- class MTC < LocalTime
221
-
222
- private
223
-
224
- # オブジェクトの正規化
225
- def _normalize(args=[], options={})
226
- @label = m17n('MTC')
227
- @time_standard = When.Resource("_t:MartianTimeCoordinated?location=(_l:long=#{@long||0}&datum=Mars)")
228
- super
229
- end
230
- end
231
-
232
- #
233
- # Darian Calendar
234
- #
235
- Darian = [CyclicTableBased, {
236
- 'label' => 'Martian::Darian',
237
- 'time_basis' => 'MTC',
238
- 'origin_of_LSC' => -94798,
239
- 'indices' => [
240
- When.Index('Martian::DarianMonth', {:unit =>24}),
241
- When::Coordinates::DefaultDayIndex
242
- ],
243
- 'rule_table' => {
244
- 'T' => {'Rule' =>['LongCentury', ['ShortCentury', 4]]},
245
- 'LongCentury' => {'Rule' =>[ ['LongDecade', 10]]},
246
- 'ShortCentury' => {'Rule' =>['ShortDecade', ['LongDecade', 9]]},
247
- 'LongDecade' => {'Rule' =>[669] * 2 + [668, 669] * 4 },
248
- 'ShortDecade' => {'Rule' => [668, 669] * 5 },
249
- 668 => {'Length'=>[28, 28, 28, 28, 28, 27] * 4 },
250
- 669 => {'Length'=>[28, 28, 28, 28, 28, 27] * 3 + [28] * 6}
251
- },
252
- 'note' => 'DarianWeek'
253
- }]
254
- end
255
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2013-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
+ module When
9
+
10
+ class BasicTypes::M17n
11
+
12
+ Martian = [self, [
13
+ "locale:[=en:, ja=ja:, alias]",
14
+ "names:[Martian=]",
15
+ "[Darian=en:Darian_calendar, ダリアン暦]",
16
+
17
+ [self,
18
+ "names:[DarianMonth=, 月=ja:%%<月_(暦)>]",
19
+ "[Sagittarius, いて= ]",
20
+ "[Dhanus=, 人馬= ]",
21
+ "[Capricornus, やぎ= ]",
22
+ "[Makara=, 磨羯= ]",
23
+ "[Aquarius, みずがめ=]",
24
+ "[Kumbha=, 宝瓶= ]",
25
+ "[Pisces, うお= ]",
26
+ "[Mina=, 双魚= ]",
27
+ "[Aries, おひつじ=]",
28
+ "[Mesha=, 白羊= ]",
29
+ "[Taurus, おうし= ]",
30
+ "[Rishabha=, 金牛= ]",
31
+ "[Gemini, ふたご= ]",
32
+ "[Mithuna=, 双児= ]",
33
+ "[Cancer, かに= ]",
34
+ "[Karka=, 巨蟹= ]",
35
+ "[Leo, しし= ]",
36
+ "[Simha=, 獅子= ]",
37
+ "[Virgo, おとめ= ]",
38
+ "[Kanya=, 処女= ]",
39
+ "[Libra, てんびん=]",
40
+ "[Tula=, 天秤= ]",
41
+ "[Scorpius, さそり= ]",
42
+ "[Vrishika=, 天蠍= ]"
43
+ ]
44
+ ]]
45
+ end
46
+
47
+ module TimeStandard
48
+
49
+ #
50
+ # Martian Time, Coordinated
51
+ #
52
+ class MartianTimeCoordinated < TimeStandard
53
+
54
+ J2000Jan6 = 2451549.5
55
+ Ratio = 1.02749125
56
+ MTC0 = 44796.0 - 0.0002 - 0.5
57
+
58
+ # 当該時刻系の日付を dynamical date に変換する
59
+ #
60
+ # @param [Numeric] date 当該時刻系の日付
61
+ #
62
+ # @return [Numeric] dynamical date
63
+ #
64
+ def to_dynamical_date(date)
65
+ (date - @mtc0) * Ratio + J2000Jan6
66
+ end
67
+
68
+ # dynamical date を当該時刻系の日付に変換する
69
+ #
70
+ # @param [Numeric] date dynamical date
71
+ #
72
+ # @return [Numeric] 当該時刻系の日付
73
+ #
74
+ def from_dynamical_date(date)
75
+ (date - J2000Jan6) / Ratio + @mtc0
76
+ end
77
+
78
+ # universal time を dynamical time に変換する
79
+ #
80
+ # @param [Numeric] time universal time
81
+ #
82
+ # @return [Numeric] dynamical time
83
+ #
84
+ def to_dynamical_time(time)
85
+ When::TM::JulianDate._d_to_t(
86
+ to_dynamical_date(
87
+ When::TM::JulianDate._t_to_d(time)))
88
+ end
89
+
90
+ # dynamical time を universal time に変換する
91
+ #
92
+ # @param [Numeric] time dynamical time
93
+ #
94
+ # @return [Numeric] universal time
95
+ #
96
+ def from_dynamical_time(time)
97
+ When::TM::JulianDate._d_to_t(
98
+ from_dynamical_date(
99
+ When::TM::JulianDate._t_to_d(time)))
100
+ end
101
+
102
+ private
103
+
104
+ # オブジェクトの正規化
105
+ def _normalize(args=[], options={})
106
+ @location = When.Resource(@location || '_l:long=0&lat=0&datum=Mars')
107
+ @mtc0 = MTC0 + @location.long / (360.0 * When::Coordinates::Spatial::DEGREE)
108
+ super
109
+ end
110
+ end
111
+ end
112
+
113
+ class CalendarNote
114
+
115
+ #
116
+ # Darian Week
117
+ #
118
+ class DarianWeek < WorldWeek
119
+
120
+ Notes = [When::BasicTypes::M17n, [
121
+ "locale:[=en:, ja=ja:, alias]",
122
+ "names:[Darian]",
123
+
124
+ # 年の暦注 ----------------------------
125
+ [When::BasicTypes::M17n,
126
+ "names:[year]"
127
+ ],
128
+
129
+ # 月の暦注 ----------------------------
130
+ [When::BasicTypes::M17n,
131
+ "names:[month]",
132
+ [When::BasicTypes::M17n,
133
+ "names:[Month]"
134
+ ]
135
+ ],
136
+
137
+ # 日の暦注 ----------------------------
138
+ [When::BasicTypes::M17n,
139
+ "names:[day]",
140
+ [When::BasicTypes::M17n,
141
+ "names:[Week]",
142
+ [DayOfWeek, "label:[Solis=, 日曜日]", {'delta'=>7}],
143
+ [DayOfWeek, "label:[Lunae=, 月曜日]", {'delta'=>7}],
144
+ [DayOfWeek, "label:[Martis=, 火曜日]", {'delta'=>7}],
145
+ [DayOfWeek, "label:[Mercurii=, 水曜日]", {'delta'=>7}],
146
+ [DayOfWeek, "label:[Jovis=, 木曜日]", {'delta'=>7}],
147
+ [DayOfWeek, "label:[Veneris=, 金曜日]", {'delta'=>7}],
148
+ [DayOfWeek, "label:[Saturni=, 土曜日]", {'delta'=>7}]
149
+ ]
150
+ ]
151
+ ]]
152
+
153
+ #
154
+ # 当日または直前の solis の日
155
+ #
156
+ # @param date [When::TM::TemporalPosition]
157
+ # @param parameter [nil] 未使用
158
+ #
159
+ # @return [When::TM::TemporalPosition]
160
+ #
161
+ def solis(date, parameter=nil)
162
+ date = When.Calendar('Darian').jul_trans(date, {:events=>['from_solis']})
163
+ y,m,d = date.cal_date
164
+ dow = (d-1) % 7
165
+ return date if dow == 0
166
+ date += When::TM::PeriodDuration.new([0,0,-dow])
167
+ date.events = ['from_solis']
168
+ date
169
+ end
170
+
171
+ #
172
+ # この日は何曜?
173
+ #
174
+ # @param [When::TM::TemporalPosition] date
175
+ # @param [When::TM::CalDate] base (not used)
176
+ #
177
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
178
+ #
179
+ def week(date, base=nil)
180
+ date = _to_date_for_note(date)
181
+ index = (date.cal_date.last - 1) % 7
182
+ {:value=>@days_of_week[index], :position=>[index, 7]}
183
+ end
184
+
185
+ #
186
+ # 曜日の名前の一覧
187
+ #
188
+ # @param [When::TM::TemporalPosition] date (ダミー)
189
+ #
190
+ # @return [Array<When::CalendarNote::Week::DayOfWeek>]
191
+ #
192
+ def week_labels(date)
193
+ @days_of_week.child
194
+ end
195
+
196
+ #
197
+ # 暦日を当該暦注計算用クラスに変換
198
+ #
199
+ # @private
200
+ def _to_date_for_note(date)
201
+ date = When::Darian ^ date unless date.frame.label.to_s == 'Darian'
202
+ date
203
+ end
204
+
205
+ private
206
+
207
+ # オブジェクトの正規化
208
+ def _normalize(args=[], options={})
209
+ @event ||= 'solis'
210
+ super
211
+ end
212
+ end
213
+ end
214
+
215
+ module CalendarTypes
216
+
217
+ #
218
+ # Martian Time, Coordinated
219
+ #
220
+ class MTC < UTC
221
+
222
+ private
223
+
224
+ # オブジェクトの正規化
225
+ def _normalize(args=[], options={})
226
+ label = 'MTC'
227
+ long = @long||0
228
+ label += "?long=#{long}" unless long.to_f == 0
229
+ @label = m17n(label)
230
+ @time_standard = When.Resource("_t:MartianTimeCoordinated?location=(_l:long=#{long}&datum=Mars)")
231
+ super
232
+ end
233
+ end
234
+
235
+ #
236
+ # Darian Calendar
237
+ #
238
+ Darian = [CyclicTableBased, {
239
+ 'label' => 'Martian::Darian',
240
+ 'time_basis' => 'MTC',
241
+ 'origin_of_LSC' => -94798,
242
+ 'indices' => [
243
+ When.Index('Martian::DarianMonth', {:unit =>24}),
244
+ When::Coordinates::DefaultDayIndex
245
+ ],
246
+ 'rule_table' => {
247
+ 'T' => {'Rule' =>['LongCentury', ['ShortCentury', 4]]},
248
+ 'LongCentury' => {'Rule' =>[ ['LongDecade', 10]]},
249
+ 'ShortCentury' => {'Rule' =>['ShortDecade', ['LongDecade', 9]]},
250
+ 'LongDecade' => {'Rule' =>[669] * 2 + [668, 669] * 4 },
251
+ 'ShortDecade' => {'Rule' => [668, 669] * 5 },
252
+ 668 => {'Length'=>[28, 28, 28, 28, 28, 27] * 4 },
253
+ 669 => {'Length'=>[28, 28, 28, 28, 28, 27] * 3 + [28] * 6}
254
+ },
255
+ 'note' => 'DarianWeek'
256
+ }]
257
+ end
258
+ end