when_exe 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/README.md +36 -33
- data/bin/locales.rb +1 -1
- data/bin/make_ttl.rb.config +1 -1
- data/lib/when_exe.rb +27 -16
- data/lib/when_exe/basictypes.rb +772 -771
- data/lib/when_exe/calendartypes.rb +1485 -1453
- data/lib/when_exe/coordinates.rb +5 -0
- data/lib/when_exe/core/compatibility.rb +1 -1
- data/lib/when_exe/core/duration.rb +147 -116
- data/lib/when_exe/core/extension.rb +499 -497
- data/lib/when_exe/ephemeris.rb +1952 -1951
- data/lib/when_exe/ephemeris/eclipse.rb +5 -4
- data/lib/when_exe/ephemeris/notes.rb +457 -421
- data/lib/when_exe/ephemeris/planets.rb +585 -585
- data/lib/when_exe/ephemeris/sun.rb +214 -214
- data/lib/when_exe/google_api.rb +153 -0
- data/lib/when_exe/icalendar.rb +1640 -1632
- data/lib/when_exe/inspect.rb +42 -20
- data/lib/when_exe/linkeddata.rb +28 -7
- data/lib/when_exe/locales/autoload.rb +2 -1
- data/lib/when_exe/locales/locale.rb +35 -15
- data/lib/when_exe/locales/zh.rb +77 -0
- data/lib/when_exe/mini_application.rb +3 -1
- data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
- data/lib/when_exe/parts/enumerator.rb +498 -486
- data/lib/when_exe/parts/geometric_complex.rb +397 -397
- data/lib/when_exe/parts/timezone.rb +246 -241
- data/lib/when_exe/region/armenian.rb +55 -56
- data/lib/when_exe/region/babylonian.rb +406 -405
- data/lib/when_exe/region/bahai.rb +107 -106
- data/lib/when_exe/region/balinese.rb +624 -622
- data/lib/when_exe/region/chinese.rb +1071 -1026
- data/lib/when_exe/region/chinese/epochs.rb +28 -28
- data/lib/when_exe/region/chinese/notes.rb +219 -0
- data/lib/when_exe/region/chinese/twins.rb +803 -803
- data/lib/when_exe/region/christian.rb +21 -15
- data/lib/when_exe/region/coptic.rb +107 -106
- data/lib/when_exe/region/discordian.rb +218 -218
- data/lib/when_exe/region/east_asian.rb +1 -1
- data/lib/when_exe/region/french.rb +126 -56
- data/lib/when_exe/region/geologicalage.rb +639 -639
- data/lib/when_exe/region/goddess.rb +60 -58
- data/lib/when_exe/region/hanke_henry.rb +2 -2
- data/lib/when_exe/region/indian.rb +1225 -1222
- data/lib/when_exe/region/international_fixed.rb +96 -97
- data/lib/when_exe/region/iranian.rb +206 -203
- data/lib/when_exe/region/islamic.rb +102 -102
- data/lib/when_exe/region/japanese.rb +126 -71
- data/lib/when_exe/region/japanese/epochs.rb +426 -426
- data/lib/when_exe/region/japanese/notes.rb +101 -81
- data/lib/when_exe/region/japanese/residues.rb +1345 -1311
- data/lib/when_exe/region/japanese/twins.rb +225 -225
- data/lib/when_exe/region/japanese/weeks.rb +112 -112
- data/lib/when_exe/region/javanese.rb +230 -230
- data/lib/when_exe/region/jewish.rb +130 -131
- data/lib/when_exe/region/m17n.rb +114 -114
- data/lib/when_exe/region/martian.rb +258 -258
- data/lib/when_exe/region/mayan.rb +11 -8
- data/lib/when_exe/region/pax.rb +4 -5
- data/lib/when_exe/region/pope.rb +1 -1
- data/lib/when_exe/region/positivist.rb +100 -100
- data/lib/when_exe/region/residue.rb +162 -162
- data/lib/when_exe/region/roman.rb +333 -333
- data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
- data/lib/when_exe/region/shire.rb +222 -223
- data/lib/when_exe/region/symmetry.rb +50 -50
- data/lib/when_exe/region/thai.rb +336 -336
- data/lib/when_exe/region/tibetan.rb +315 -316
- data/lib/when_exe/region/tranquility.rb +207 -208
- data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
- data/lib/when_exe/region/vietnamese.rb +449 -440
- data/lib/when_exe/region/weekdate.rb +80 -80
- data/lib/when_exe/region/world.rb +170 -171
- data/lib/when_exe/region/world_season.rb +89 -89
- data/lib/when_exe/region/yerm.rb +3 -3
- data/lib/when_exe/region/zoroastrian.rb +205 -205
- data/lib/when_exe/timestandard.rb +708 -707
- data/lib/when_exe/tmduration.rb +338 -338
- data/lib/when_exe/tmobjects.rb +1356 -1356
- data/lib/when_exe/tmposition.rb +66 -31
- data/lib/when_exe/version.rb +16 -2
- data/test/examples/Residue.m17n +83 -83
- data/test/examples/Terms.m17n +2 -2
- data/test/test.rb +2 -2
- data/test/test/google_api.rb +65 -0
- data/test/test/linkeddata.rb +1 -1
- data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
- data/test/test/region/indian.rb +90 -85
- data/test/test/region/m17n.rb +7 -7
- data/test/test/region/mayan.rb +195 -195
- data/test/test/region/residue.rb +153 -153
- data/test/test/tmposition.rb +11 -1
- data/when_exe.gemspec +2 -2
- metadata +95 -8
- data/test/test.rb.config +0 -1
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (C) 2011-
|
|
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
|
-
Symmetry = [self, [
|
|
13
|
-
"locale:[=en:, ja]",
|
|
14
|
-
"names:[Symmetry
|
|
15
|
-
"[Sym454=en:Symmetry454, 対称454
|
|
16
|
-
"[Sym010=http://individual.utoronto.ca/kalendis/classic.htm, 対称010
|
|
17
|
-
]]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
module CalendarTypes
|
|
21
|
-
|
|
22
|
-
_pattern = (0...293).to_a.map {|year| (52 * year + 146) % 293 < 52 ? 371 : 364}
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
# Symmetry 454 Calendar
|
|
26
|
-
#
|
|
27
|
-
Sym454 = [CyclicTableBased, {
|
|
28
|
-
'label' => 'Symmetry::Sym454',
|
|
29
|
-
'origin_of_LSC' => 1721062,
|
|
30
|
-
'rule_table' => {
|
|
31
|
-
'T' => {'Rule' =>_pattern},
|
|
32
|
-
364 => {'Length'=>[28,35,28] * 4},
|
|
33
|
-
371 => {'Length'=>[28,35,28] * 3 + [28,35,35]}
|
|
34
|
-
}
|
|
35
|
-
}]
|
|
36
|
-
|
|
37
|
-
#
|
|
38
|
-
# Symmetry 010 Calendar
|
|
39
|
-
#
|
|
40
|
-
Sym010 = [CyclicTableBased, {
|
|
41
|
-
'label' => 'Symmetry::Sym010',
|
|
42
|
-
'origin_of_LSC' => 1721062,
|
|
43
|
-
'rule_table' => {
|
|
44
|
-
'T' => {'Rule' =>_pattern},
|
|
45
|
-
364 => {'Length'=>[30,31,30] * 4},
|
|
46
|
-
371 => {'Length'=>[30,31,30] * 3 + [30,31,37]}
|
|
47
|
-
}
|
|
48
|
-
}]
|
|
49
|
-
end
|
|
50
|
-
end
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2011-2015 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
|
+
Symmetry = [self, [
|
|
13
|
+
"locale:[=en:, ja, zh]",
|
|
14
|
+
"names:[Dr. Irv Bromberg's Symmetry Calendar=, Bromberg博士の対称暦=, *alias:Symmetry]",
|
|
15
|
+
"[Sym454=en:Symmetry454, 対称454暦=, 対称454曆=]",
|
|
16
|
+
"[Sym010=http://individual.utoronto.ca/kalendis/classic.htm, 対称010暦=, 対称010曆=]"
|
|
17
|
+
]]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module CalendarTypes
|
|
21
|
+
|
|
22
|
+
_pattern = (0...293).to_a.map {|year| (52 * year + 146) % 293 < 52 ? 371 : 364}
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Symmetry 454 Calendar
|
|
26
|
+
#
|
|
27
|
+
Sym454 = [CyclicTableBased, {
|
|
28
|
+
'label' => 'Symmetry::Sym454',
|
|
29
|
+
'origin_of_LSC' => 1721062,
|
|
30
|
+
'rule_table' => {
|
|
31
|
+
'T' => {'Rule' =>_pattern},
|
|
32
|
+
364 => {'Length'=>[28,35,28] * 4},
|
|
33
|
+
371 => {'Length'=>[28,35,28] * 3 + [28,35,35]}
|
|
34
|
+
}
|
|
35
|
+
}]
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Symmetry 010 Calendar
|
|
39
|
+
#
|
|
40
|
+
Sym010 = [CyclicTableBased, {
|
|
41
|
+
'label' => 'Symmetry::Sym010',
|
|
42
|
+
'origin_of_LSC' => 1721062,
|
|
43
|
+
'rule_table' => {
|
|
44
|
+
'T' => {'Rule' =>_pattern},
|
|
45
|
+
364 => {'Length'=>[30,31,30] * 4},
|
|
46
|
+
371 => {'Length'=>[30,31,30] * 3 + [30,31,37]}
|
|
47
|
+
}
|
|
48
|
+
}]
|
|
49
|
+
end
|
|
50
|
+
end
|
data/lib/when_exe/region/thai.rb
CHANGED
|
@@ -1,336 +1,336 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (C) 2011-
|
|
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
|
-
class BasicTypes::M17n
|
|
10
|
-
|
|
11
|
-
Thai = [self, [
|
|
12
|
-
"locale:[=en:, ja=ja:, hi=hi:, alias]",
|
|
13
|
-
"names:[Thai
|
|
14
|
-
"[ThaiLuniSolar=en:Thai_lunar_calendar, タイ太陰太陽暦=ja
|
|
15
|
-
|
|
16
|
-
[self,
|
|
17
|
-
"names:[IntercalaryMonth=en:Intercalation
|
|
18
|
-
"[%s Śuklapakṣa=, %s 白分=, _IAST_]",
|
|
19
|
-
"[%s Kṛṣṇapakṣa=, %s 黒分=, _IAST_]",
|
|
20
|
-
"[adhika %s Śuklapakṣa=, 閏%s 白分=, _IAST_]",
|
|
21
|
-
"[adhika %s Kṛṣṇapakṣa=, 閏%s 黒分=, _IAST_]"
|
|
22
|
-
],
|
|
23
|
-
|
|
24
|
-
[self,
|
|
25
|
-
"names:[LunarMonth=, 太陰月=ja:%%<月_(暦)>]",
|
|
26
|
-
"[Mārgaśīra=en:Margashirsha, マールガシールシャ=, _IAST_]",
|
|
27
|
-
"[Pauṣa=en:Pausha, パウシャ=, _IAST_]",
|
|
28
|
-
"[Māgha=en:Maagha, マーガ=, _IAST_]",
|
|
29
|
-
"[Phālguna=en:Phalguna, パールグナ=, _IAST_]",
|
|
30
|
-
"[Caitra=en:Chaitra, チャイトラ=, _IAST_]",
|
|
31
|
-
"[Vaiśākha=en:Vaisakha, ヴァイシャーカ=, _IAST_]",
|
|
32
|
-
"[Jyaiṣṭha=en:Jyeshta, ジャイシュタ=, _IAST_]",
|
|
33
|
-
"[Āṣāḍha=en:Aashaadha, アーシャーダ=, _IAST_]",
|
|
34
|
-
"[Śrāvaṇa=en:Shraavana, シュラーヴァナ=, _IAST_]",
|
|
35
|
-
"[Bhādrapada=en:Bhadrapada, バードラパダ=, _IAST_]",
|
|
36
|
-
"[Āśvina=en:Ashwin, アーシュヴィナ=, _IAST_]",
|
|
37
|
-
"[Kārttika=en:Kartika_(month), カールッティカ=, _IAST_]"
|
|
38
|
-
]
|
|
39
|
-
]]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
module CalendarTypes
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
# ソンクラーンとタイ暦の暦定数
|
|
46
|
-
#
|
|
47
|
-
module Songkran
|
|
48
|
-
|
|
49
|
-
# ソンクラーン - 太陽の白羊宮入り
|
|
50
|
-
#
|
|
51
|
-
# @param [Integer] y 年
|
|
52
|
-
#
|
|
53
|
-
# @return [Integer] ソンクラーンのユリウス日
|
|
54
|
-
#
|
|
55
|
-
def songkran_(y)
|
|
56
|
-
e = _eph(y)
|
|
57
|
-
return @origin_of_LSC - 1 + e['H'][0]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# y で指定した年の暦定数を返します。
|
|
61
|
-
#
|
|
62
|
-
# @param [Integer] y 年
|
|
63
|
-
#
|
|
64
|
-
# @return [Hash]
|
|
65
|
-
#
|
|
66
|
-
def _eph(y) # C
|
|
67
|
-
h = (y+4).divmod(9)[0] # y
|
|
68
|
-
h = (y-h).divmod(3)[0] # z
|
|
69
|
-
h = (y+1-h).divmod(2)[0] # r (2 => h?)
|
|
70
|
-
h = (36525876*y+149049-h).divmod(100000) # s
|
|
71
|
-
a = (h[0]*11+633-((h[0]+7368).divmod(8878))[0]).divmod(692)
|
|
72
|
-
m = (h[0]+a[0]+0).divmod(30)
|
|
73
|
-
return {'H'=>h, 'A'=>a, 'M'=>m}
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
#
|
|
78
|
-
# The Calendar of Thai (Prototype)
|
|
79
|
-
#
|
|
80
|
-
class ThaiP < TableBased
|
|
81
|
-
|
|
82
|
-
include Lunar
|
|
83
|
-
include Songkran
|
|
84
|
-
|
|
85
|
-
# 月番号
|
|
86
|
-
_intercalary_month = When.Resource('_m:Thai::IntercalaryMonth::*')
|
|
87
|
-
Indices = [
|
|
88
|
-
When.Index('Thai::LunarMonth', {:branch=>{0 => _intercalary_month[0],
|
|
89
|
-
0.5 => _intercalary_month[1],
|
|
90
|
-
-1.5 => _intercalary_month[2],
|
|
91
|
-
-1 => _intercalary_month[3]}}),
|
|
92
|
-
When::Coordinates::DefaultDayIndex
|
|
93
|
-
]
|
|
94
|
-
|
|
95
|
-
# 月の大小と閏
|
|
96
|
-
_NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
97
|
-
_LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9&,9*,9,9<,10,10<,11,11<,12,12<'
|
|
98
|
-
RuleTable = {
|
|
99
|
-
354 => {'Length'=>[15,15,15,14]*6, 'IDs' => _NormalIDs},
|
|
100
|
-
355 => {'Length'=>[15,15,15,14]*3 + [15]*4 + [15,15,15,14]*2, 'IDs' => _NormalIDs},
|
|
101
|
-
384 => {'Length'=>[15,15,15,14]*4 + [15]*2 + [15,15,15,14]*2, 'IDs' => _LeapIDs}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
|
|
106
|
-
# オブジェクトの正規化
|
|
107
|
-
# @private
|
|
108
|
-
def _normalize(args=[], options={})
|
|
109
|
-
@label ||= 'Thai::ThaiLuniSolar'
|
|
110
|
-
|
|
111
|
-
Rational
|
|
112
|
-
@mean_month ||= 29 + Rational( 373, 703)
|
|
113
|
-
@mean_year ||= 365 + Rational(25876, 100000)
|
|
114
|
-
@epoch_in_CE ||= 638
|
|
115
|
-
@origin_of_MSC ||= 0 # 638 + 543
|
|
116
|
-
@origin_of_LSC ||= 1954168
|
|
117
|
-
@origin_of_MSC = @origin_of_MSC.to_i
|
|
118
|
-
@origin_of_LSC = @origin_of_LSC.to_i
|
|
119
|
-
@indices ||= Indices
|
|
120
|
-
@rule_table ||= RuleTable
|
|
121
|
-
super
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# 年初の通日
|
|
125
|
-
#
|
|
126
|
-
# @param [Array<Numeric>] date ( 年 )
|
|
127
|
-
#
|
|
128
|
-
# @return [Integer] 年初の通日
|
|
129
|
-
#
|
|
130
|
-
def _sdn_(date)
|
|
131
|
-
y = +date[0]
|
|
132
|
-
e0 = _thai(y, 0)[0]
|
|
133
|
-
e1 = _thai(y+1,0)[0]
|
|
134
|
-
case e1['T']-e0['T']
|
|
135
|
-
when 353,383 ; e0['T'] -= 1
|
|
136
|
-
when 385 ; e0['T'] += 1
|
|
137
|
-
end
|
|
138
|
-
return @origin_of_LSC - 1 + e0['T'] - 30*3 - 29*2
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# y で指定した年の平閏、8月の大小を判定します。
|
|
142
|
-
#
|
|
143
|
-
# @param [Integer] y 年
|
|
144
|
-
# @param [Integer] dir 前後の閏状態を表すコード
|
|
145
|
-
#
|
|
146
|
-
# @return [Array<Hash, String>]
|
|
147
|
-
#
|
|
148
|
-
def _thai(y,dir)
|
|
149
|
-
# 諸元の計算
|
|
150
|
-
e = _eph(y)
|
|
151
|
-
k = 800*125 - e['H'][1]
|
|
152
|
-
t = e['M'][1]
|
|
153
|
-
|
|
154
|
-
# Jyaistha 大の判定
|
|
155
|
-
b = ((e['A'][1]<126) && (k<=207*125)) || ((e['A'][1]<137) && (k> 207*125))
|
|
156
|
-
|
|
157
|
-
# 閏年の判定
|
|
158
|
-
c = ((t<6) || (t>24))
|
|
159
|
-
c = true if ((t==24) && (_thai(y+1,+1)[1]< 'C'))
|
|
160
|
-
c = false if ((t==25) && (_thai(y+1,+1)[1]>='C'))
|
|
161
|
-
|
|
162
|
-
# Caitra 月 0 日
|
|
163
|
-
e['T'] = e['H'][0] - t
|
|
164
|
-
e['T'] -= 1 if (t==0)
|
|
165
|
-
e['T'] -= 29 if (c && (t<=6))
|
|
166
|
-
e['b'] = b
|
|
167
|
-
e['c'] = c
|
|
168
|
-
e['t'] = t
|
|
169
|
-
return e,' '
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
#
|
|
174
|
-
# The Calendar of Thai people in China (Calculation)
|
|
175
|
-
#
|
|
176
|
-
class ThaiC < ThaiP
|
|
177
|
-
|
|
178
|
-
# オブジェクトの正規化
|
|
179
|
-
# @private
|
|
180
|
-
def _normalize(args=[], options={})
|
|
181
|
-
super
|
|
182
|
-
@thoreshold = (@mean_month * 13) % 1
|
|
183
|
-
@epoch_new_moon = (@origin_of_LSC - 18.90409 + 12 * @mean_month / 19)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
# 年初の通日
|
|
187
|
-
#
|
|
188
|
-
# @param [Array<Numeric>] date ( 年 )
|
|
189
|
-
#
|
|
190
|
-
# @return [Integer] 年初の通日
|
|
191
|
-
#
|
|
192
|
-
def _sdn_(date)
|
|
193
|
-
year = +date[0]
|
|
194
|
-
prev = _meton(year-1)
|
|
195
|
-
this = _meton(year)
|
|
196
|
-
this += 1 if this.floor - prev.floor > 360 && this % 1 > @thoreshold
|
|
197
|
-
this.floor - 148
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
private
|
|
201
|
-
|
|
202
|
-
def _meton(year)
|
|
203
|
-
(((year + 9) * 235 / 19) - 111) * @mean_month + @epoch_new_moon
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
#
|
|
208
|
-
# The Calendar of Thai people in China CE1840..2049 (Table based)
|
|
209
|
-
#
|
|
210
|
-
class ThaiT < CyclicTableBased
|
|
211
|
-
|
|
212
|
-
include Lunar
|
|
213
|
-
include Songkran
|
|
214
|
-
|
|
215
|
-
Pattern = %w(C
|
|
216
|
-
B A C A C B A C A B C A A C B C A A C B A C A C B A C A A C
|
|
217
|
-
B A C A C A B C A A C B C A A C B A C A C B A C A B C A A C
|
|
218
|
-
B C A A C B A C A C B A C A B C A A C A C B A C A B C A A C
|
|
219
|
-
A C B B C A A C A C A A C B A C A B C A C A B C A A C B C A
|
|
220
|
-
A C B A C A A C B C A A C B A C A C B A C A A C B A C A C B
|
|
221
|
-
A C A B C A C A B C A A C A B C A C A B C A A C B C A A C B
|
|
222
|
-
A C A A C B C A A C B A C A C B A C A A C B A C A C B A C A)
|
|
223
|
-
|
|
224
|
-
# オブジェクトの正規化
|
|
225
|
-
# @private
|
|
226
|
-
def _normalize(args=[], options={})
|
|
227
|
-
@origin_of_LSC ||= 2392666
|
|
228
|
-
@origin_of_MSC ||= 1201
|
|
229
|
-
@epoch_in_CE ||= 638
|
|
230
|
-
@before = @after = 'ThaiC'
|
|
231
|
-
@indices ||= ThaiP::Indices
|
|
232
|
-
pattern ||= Pattern.dup
|
|
233
|
-
if @patch
|
|
234
|
-
@patch.scan(/(\d+)([ABC])/i) do |year,type|
|
|
235
|
-
pattern[year.to_i-(@origin_of_MSC+@epoch_in_CE)] = type.upcase
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
@rule_table = {
|
|
239
|
-
'T' => {'Rule' => pattern},
|
|
240
|
-
'A' => {'Rule' => [354]},
|
|
241
|
-
'B' => {'Rule' => [355]},
|
|
242
|
-
'C' => {'Rule' => [384]}}.merge(ThaiP::RuleTable)
|
|
243
|
-
super
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
#
|
|
248
|
-
# The Calendar of central Thailand
|
|
249
|
-
#
|
|
250
|
-
class Thai < ThaiP
|
|
251
|
-
|
|
252
|
-
# 年の朔閏パターン
|
|
253
|
-
YEAR_TYPE = {'A'=>354, 'B'=>355, 'C'=>384, 'D'=>384, 'E'=>384}
|
|
254
|
-
|
|
255
|
-
# 月の大小と閏
|
|
256
|
-
_NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
257
|
-
_LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8&,8*,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
258
|
-
RuleTable = {
|
|
259
|
-
354 => {'Length'=>[15,14,15,15]*6, 'IDs' => _NormalIDs},
|
|
260
|
-
355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => _NormalIDs},
|
|
261
|
-
384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => _LeapIDs }
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
private
|
|
265
|
-
|
|
266
|
-
# オブジェクトの正規化
|
|
267
|
-
#
|
|
268
|
-
def _normalize(args=[], options={})
|
|
269
|
-
@rule_table ||= RuleTable
|
|
270
|
-
super
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
# 年初の通日
|
|
274
|
-
#
|
|
275
|
-
# @param [Array<Numeric>] date ( 年 )
|
|
276
|
-
#
|
|
277
|
-
# @return [Integer] 年初の通日
|
|
278
|
-
#
|
|
279
|
-
def _sdn_(date)
|
|
280
|
-
y = +date[0]
|
|
281
|
-
e0,dir0 = _thai(y, 0)
|
|
282
|
-
e1,dir1 = _thai(y+1,0)
|
|
283
|
-
e0['T'] -= 1 if (e1['T'] - e0['T'] < YEAR_TYPE[dir0])
|
|
284
|
-
return @origin_of_LSC + e0['T'] - 29*2 - 30*2
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
# y で指定した年の暦定数を返します。
|
|
288
|
-
#
|
|
289
|
-
# @param [Integer] y 年
|
|
290
|
-
#
|
|
291
|
-
# @return [Hash]
|
|
292
|
-
#
|
|
293
|
-
def _eph(y) # C
|
|
294
|
-
h = (y*292207+373+800*1).divmod(800)
|
|
295
|
-
# u = (h[0]+2611).divmod(3232)
|
|
296
|
-
a = (h[0]*11+650).divmod(692)
|
|
297
|
-
m = (h[0]+a[0]+0).divmod(30)
|
|
298
|
-
h[1] *= 125
|
|
299
|
-
return {'H'=>h, 'A'=>a, 'M'=>m}
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
# y で指定した年の平閏、8月の大小を判定します。
|
|
303
|
-
#
|
|
304
|
-
# @param [Integer] y 年
|
|
305
|
-
# @param [Integer] dir 前後の閏状態を表すコード
|
|
306
|
-
#
|
|
307
|
-
# @return [Array<Hash, String>]
|
|
308
|
-
#
|
|
309
|
-
def _thai(y,dir)
|
|
310
|
-
# 諸元の計算
|
|
311
|
-
e,w = super(y,dir)
|
|
312
|
-
|
|
313
|
-
# カレンダーのタイプ
|
|
314
|
-
if (e['c'])
|
|
315
|
-
if (!e['b'])
|
|
316
|
-
return e,'C' # 普通の閏年
|
|
317
|
-
elsif ((0<e['t']) && (e['t']<6))
|
|
318
|
-
return e,'D' # 前年大の閏年
|
|
319
|
-
else
|
|
320
|
-
return e,'E' # 翌年大の閏年
|
|
321
|
-
end
|
|
322
|
-
else
|
|
323
|
-
if (e['b'])
|
|
324
|
-
return e,'B' # 大の平年
|
|
325
|
-
elsif ((dir != -1) && (_thai(y+1,+1)[1]=='D'))
|
|
326
|
-
return e,'B' # 大の平年
|
|
327
|
-
elsif ((dir != +1) && (_thai(y-1,-1)[1]=='E'))
|
|
328
|
-
return e,'B' # 大の平年
|
|
329
|
-
else
|
|
330
|
-
return e,'A' # 小の平年
|
|
331
|
-
end
|
|
332
|
-
end
|
|
333
|
-
end
|
|
334
|
-
end
|
|
335
|
-
end
|
|
336
|
-
end
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2011-2015 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
|
+
class BasicTypes::M17n
|
|
10
|
+
|
|
11
|
+
Thai = [self, [
|
|
12
|
+
"locale:[=en:, ja=ja:, zh=zh:, hi=hi:, alias]",
|
|
13
|
+
"names:[Thailand, タイ=ja:タイ王国, 泰国, *alias:Thai]",
|
|
14
|
+
"[ThaiLuniSolar=en:Thai_lunar_calendar, タイ太陰太陽暦=ja:%%<チャントラカティ>, 傣曆]",
|
|
15
|
+
|
|
16
|
+
[self,
|
|
17
|
+
"names:[HalfMonth=, 半月=, zh:半月=, *alias:IntercalaryMonth=en:Intercalation]",
|
|
18
|
+
"[%s Śuklapakṣa=, %s 白分=, %s 上弦月=, _IAST_]",
|
|
19
|
+
"[%s Kṛṣṇapakṣa=, %s 黒分=, %s 下弦月=, _IAST_]",
|
|
20
|
+
"[adhika %s Śuklapakṣa=, 閏%s 白分=, 閏%s 上弦月=, _IAST_]",
|
|
21
|
+
"[adhika %s Kṛṣṇapakṣa=, 閏%s 黒分=, 閏%s 下弦月=, _IAST_]"
|
|
22
|
+
],
|
|
23
|
+
|
|
24
|
+
[self,
|
|
25
|
+
"names:[LunarMonth=, 太陰月=ja:%%<月_(暦)>]",
|
|
26
|
+
"[Mārgaśīra=en:Margashirsha, マールガシールシャ=, 登甘=, _IAST_]",
|
|
27
|
+
"[Pauṣa=en:Pausha, パウシャ=, 三月=, _IAST_]",
|
|
28
|
+
"[Māgha=en:Maagha, マーガ=, 四月=, _IAST_]",
|
|
29
|
+
"[Phālguna=en:Phalguna, パールグナ=, 五月=, _IAST_]",
|
|
30
|
+
"[Caitra=en:Chaitra, チャイトラ=, 六月=, _IAST_]",
|
|
31
|
+
"[Vaiśākha=en:Vaisakha, ヴァイシャーカ=, 七月=, _IAST_]",
|
|
32
|
+
"[Jyaiṣṭha=en:Jyeshta, ジャイシュタ=, 八月=, _IAST_]",
|
|
33
|
+
"[Āṣāḍha=en:Aashaadha, アーシャーダ=, 九月=, _IAST_]",
|
|
34
|
+
"[Śrāvaṇa=en:Shraavana, シュラーヴァナ=, 十月=, _IAST_]",
|
|
35
|
+
"[Bhādrapada=en:Bhadrapada, バードラパダ=, 十一月=, _IAST_]",
|
|
36
|
+
"[Āśvina=en:Ashwin, アーシュヴィナ=, 十二月=, _IAST_]",
|
|
37
|
+
"[Kārttika=en:Kartika_(month), カールッティカ=, 登景=, _IAST_]"
|
|
38
|
+
]
|
|
39
|
+
]]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
module CalendarTypes
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# ソンクラーンとタイ暦の暦定数
|
|
46
|
+
#
|
|
47
|
+
module Songkran
|
|
48
|
+
|
|
49
|
+
# ソンクラーン - 太陽の白羊宮入り
|
|
50
|
+
#
|
|
51
|
+
# @param [Integer] y 年
|
|
52
|
+
#
|
|
53
|
+
# @return [Integer] ソンクラーンのユリウス日
|
|
54
|
+
#
|
|
55
|
+
def songkran_(y)
|
|
56
|
+
e = _eph(y)
|
|
57
|
+
return @origin_of_LSC - 1 + e['H'][0]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# y で指定した年の暦定数を返します。
|
|
61
|
+
#
|
|
62
|
+
# @param [Integer] y 年
|
|
63
|
+
#
|
|
64
|
+
# @return [Hash]
|
|
65
|
+
#
|
|
66
|
+
def _eph(y) # C
|
|
67
|
+
h = (y+4).divmod(9)[0] # y
|
|
68
|
+
h = (y-h).divmod(3)[0] # z
|
|
69
|
+
h = (y+1-h).divmod(2)[0] # r (2 => h?)
|
|
70
|
+
h = (36525876*y+149049-h).divmod(100000) # s
|
|
71
|
+
a = (h[0]*11+633-((h[0]+7368).divmod(8878))[0]).divmod(692)
|
|
72
|
+
m = (h[0]+a[0]+0).divmod(30)
|
|
73
|
+
return {'H'=>h, 'A'=>a, 'M'=>m}
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# The Calendar of Thai (Prototype)
|
|
79
|
+
#
|
|
80
|
+
class ThaiP < TableBased
|
|
81
|
+
|
|
82
|
+
include Lunar
|
|
83
|
+
include Songkran
|
|
84
|
+
|
|
85
|
+
# 月番号
|
|
86
|
+
_intercalary_month = When.Resource('_m:Thai::IntercalaryMonth::*')
|
|
87
|
+
Indices = [
|
|
88
|
+
When.Index('Thai::LunarMonth', {:branch=>{0 => _intercalary_month[0],
|
|
89
|
+
0.5 => _intercalary_month[1],
|
|
90
|
+
-1.5 => _intercalary_month[2],
|
|
91
|
+
-1 => _intercalary_month[3]}}),
|
|
92
|
+
When::Coordinates::DefaultDayIndex
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
# 月の大小と閏
|
|
96
|
+
_NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
97
|
+
_LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9&,9*,9,9<,10,10<,11,11<,12,12<'
|
|
98
|
+
RuleTable = {
|
|
99
|
+
354 => {'Length'=>[15,15,15,14]*6, 'IDs' => _NormalIDs},
|
|
100
|
+
355 => {'Length'=>[15,15,15,14]*3 + [15]*4 + [15,15,15,14]*2, 'IDs' => _NormalIDs},
|
|
101
|
+
384 => {'Length'=>[15,15,15,14]*4 + [15]*2 + [15,15,15,14]*2, 'IDs' => _LeapIDs}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
# オブジェクトの正規化
|
|
107
|
+
# @private
|
|
108
|
+
def _normalize(args=[], options={})
|
|
109
|
+
@label ||= 'Thai::ThaiLuniSolar'
|
|
110
|
+
|
|
111
|
+
Rational
|
|
112
|
+
@mean_month ||= 29 + Rational( 373, 703)
|
|
113
|
+
@mean_year ||= 365 + Rational(25876, 100000)
|
|
114
|
+
@epoch_in_CE ||= 638
|
|
115
|
+
@origin_of_MSC ||= 0 # 638 + 543
|
|
116
|
+
@origin_of_LSC ||= 1954168
|
|
117
|
+
@origin_of_MSC = @origin_of_MSC.to_i
|
|
118
|
+
@origin_of_LSC = @origin_of_LSC.to_i
|
|
119
|
+
@indices ||= Indices
|
|
120
|
+
@rule_table ||= RuleTable
|
|
121
|
+
super
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# 年初の通日
|
|
125
|
+
#
|
|
126
|
+
# @param [Array<Numeric>] date ( 年 )
|
|
127
|
+
#
|
|
128
|
+
# @return [Integer] 年初の通日
|
|
129
|
+
#
|
|
130
|
+
def _sdn_(date)
|
|
131
|
+
y = +date[0]
|
|
132
|
+
e0 = _thai(y, 0)[0]
|
|
133
|
+
e1 = _thai(y+1,0)[0]
|
|
134
|
+
case e1['T']-e0['T']
|
|
135
|
+
when 353,383 ; e0['T'] -= 1
|
|
136
|
+
when 385 ; e0['T'] += 1
|
|
137
|
+
end
|
|
138
|
+
return @origin_of_LSC - 1 + e0['T'] - 30*3 - 29*2
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# y で指定した年の平閏、8月の大小を判定します。
|
|
142
|
+
#
|
|
143
|
+
# @param [Integer] y 年
|
|
144
|
+
# @param [Integer] dir 前後の閏状態を表すコード
|
|
145
|
+
#
|
|
146
|
+
# @return [Array<Hash, String>]
|
|
147
|
+
#
|
|
148
|
+
def _thai(y,dir)
|
|
149
|
+
# 諸元の計算
|
|
150
|
+
e = _eph(y)
|
|
151
|
+
k = 800*125 - e['H'][1]
|
|
152
|
+
t = e['M'][1]
|
|
153
|
+
|
|
154
|
+
# Jyaistha 大の判定
|
|
155
|
+
b = ((e['A'][1]<126) && (k<=207*125)) || ((e['A'][1]<137) && (k> 207*125))
|
|
156
|
+
|
|
157
|
+
# 閏年の判定
|
|
158
|
+
c = ((t<6) || (t>24))
|
|
159
|
+
c = true if ((t==24) && (_thai(y+1,+1)[1]< 'C'))
|
|
160
|
+
c = false if ((t==25) && (_thai(y+1,+1)[1]>='C'))
|
|
161
|
+
|
|
162
|
+
# Caitra 月 0 日
|
|
163
|
+
e['T'] = e['H'][0] - t
|
|
164
|
+
e['T'] -= 1 if (t==0)
|
|
165
|
+
e['T'] -= 29 if (c && (t<=6))
|
|
166
|
+
e['b'] = b
|
|
167
|
+
e['c'] = c
|
|
168
|
+
e['t'] = t
|
|
169
|
+
return e,' '
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
#
|
|
174
|
+
# The Calendar of Thai people in China (Calculation)
|
|
175
|
+
#
|
|
176
|
+
class ThaiC < ThaiP
|
|
177
|
+
|
|
178
|
+
# オブジェクトの正規化
|
|
179
|
+
# @private
|
|
180
|
+
def _normalize(args=[], options={})
|
|
181
|
+
super
|
|
182
|
+
@thoreshold = (@mean_month * 13) % 1
|
|
183
|
+
@epoch_new_moon = (@origin_of_LSC - 18.90409 + 12 * @mean_month / 19)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# 年初の通日
|
|
187
|
+
#
|
|
188
|
+
# @param [Array<Numeric>] date ( 年 )
|
|
189
|
+
#
|
|
190
|
+
# @return [Integer] 年初の通日
|
|
191
|
+
#
|
|
192
|
+
def _sdn_(date)
|
|
193
|
+
year = +date[0]
|
|
194
|
+
prev = _meton(year-1)
|
|
195
|
+
this = _meton(year)
|
|
196
|
+
this += 1 if this.floor - prev.floor > 360 && this % 1 > @thoreshold
|
|
197
|
+
this.floor - 148
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
private
|
|
201
|
+
|
|
202
|
+
def _meton(year)
|
|
203
|
+
(((year + 9) * 235 / 19) - 111) * @mean_month + @epoch_new_moon
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
#
|
|
208
|
+
# The Calendar of Thai people in China CE1840..2049 (Table based)
|
|
209
|
+
#
|
|
210
|
+
class ThaiT < CyclicTableBased
|
|
211
|
+
|
|
212
|
+
include Lunar
|
|
213
|
+
include Songkran
|
|
214
|
+
|
|
215
|
+
Pattern = %w(C
|
|
216
|
+
B A C A C B A C A B C A A C B C A A C B A C A C B A C A A C
|
|
217
|
+
B A C A C A B C A A C B C A A C B A C A C B A C A B C A A C
|
|
218
|
+
B C A A C B A C A C B A C A B C A A C A C B A C A B C A A C
|
|
219
|
+
A C B B C A A C A C A A C B A C A B C A C A B C A A C B C A
|
|
220
|
+
A C B A C A A C B C A A C B A C A C B A C A A C B A C A C B
|
|
221
|
+
A C A B C A C A B C A A C A B C A C A B C A A C B C A A C B
|
|
222
|
+
A C A A C B C A A C B A C A C B A C A A C B A C A C B A C A)
|
|
223
|
+
|
|
224
|
+
# オブジェクトの正規化
|
|
225
|
+
# @private
|
|
226
|
+
def _normalize(args=[], options={})
|
|
227
|
+
@origin_of_LSC ||= 2392666
|
|
228
|
+
@origin_of_MSC ||= 1201
|
|
229
|
+
@epoch_in_CE ||= 638
|
|
230
|
+
@before = @after = 'ThaiC'
|
|
231
|
+
@indices ||= ThaiP::Indices
|
|
232
|
+
pattern ||= Pattern.dup
|
|
233
|
+
if @patch
|
|
234
|
+
@patch.scan(/(\d+)([ABC])/i) do |year,type|
|
|
235
|
+
pattern[year.to_i-(@origin_of_MSC+@epoch_in_CE)] = type.upcase
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
@rule_table = {
|
|
239
|
+
'T' => {'Rule' => pattern},
|
|
240
|
+
'A' => {'Rule' => [354]},
|
|
241
|
+
'B' => {'Rule' => [355]},
|
|
242
|
+
'C' => {'Rule' => [384]}}.merge(ThaiP::RuleTable)
|
|
243
|
+
super
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
#
|
|
248
|
+
# The Calendar of central Thailand
|
|
249
|
+
#
|
|
250
|
+
class Thai < ThaiP
|
|
251
|
+
|
|
252
|
+
# 年の朔閏パターン
|
|
253
|
+
YEAR_TYPE = {'A'=>354, 'B'=>355, 'C'=>384, 'D'=>384, 'E'=>384}
|
|
254
|
+
|
|
255
|
+
# 月の大小と閏
|
|
256
|
+
_NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
257
|
+
_LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8&,8*,8,8<,9,9<,10,10<,11,11<,12,12<'
|
|
258
|
+
RuleTable = {
|
|
259
|
+
354 => {'Length'=>[15,14,15,15]*6, 'IDs' => _NormalIDs},
|
|
260
|
+
355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => _NormalIDs},
|
|
261
|
+
384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => _LeapIDs }
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private
|
|
265
|
+
|
|
266
|
+
# オブジェクトの正規化
|
|
267
|
+
#
|
|
268
|
+
def _normalize(args=[], options={})
|
|
269
|
+
@rule_table ||= RuleTable
|
|
270
|
+
super
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# 年初の通日
|
|
274
|
+
#
|
|
275
|
+
# @param [Array<Numeric>] date ( 年 )
|
|
276
|
+
#
|
|
277
|
+
# @return [Integer] 年初の通日
|
|
278
|
+
#
|
|
279
|
+
def _sdn_(date)
|
|
280
|
+
y = +date[0]
|
|
281
|
+
e0,dir0 = _thai(y, 0)
|
|
282
|
+
e1,dir1 = _thai(y+1,0)
|
|
283
|
+
e0['T'] -= 1 if (e1['T'] - e0['T'] < YEAR_TYPE[dir0])
|
|
284
|
+
return @origin_of_LSC + e0['T'] - 29*2 - 30*2
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# y で指定した年の暦定数を返します。
|
|
288
|
+
#
|
|
289
|
+
# @param [Integer] y 年
|
|
290
|
+
#
|
|
291
|
+
# @return [Hash]
|
|
292
|
+
#
|
|
293
|
+
def _eph(y) # C
|
|
294
|
+
h = (y*292207+373+800*1).divmod(800)
|
|
295
|
+
# u = (h[0]+2611).divmod(3232)
|
|
296
|
+
a = (h[0]*11+650).divmod(692)
|
|
297
|
+
m = (h[0]+a[0]+0).divmod(30)
|
|
298
|
+
h[1] *= 125
|
|
299
|
+
return {'H'=>h, 'A'=>a, 'M'=>m}
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# y で指定した年の平閏、8月の大小を判定します。
|
|
303
|
+
#
|
|
304
|
+
# @param [Integer] y 年
|
|
305
|
+
# @param [Integer] dir 前後の閏状態を表すコード
|
|
306
|
+
#
|
|
307
|
+
# @return [Array<Hash, String>]
|
|
308
|
+
#
|
|
309
|
+
def _thai(y,dir)
|
|
310
|
+
# 諸元の計算
|
|
311
|
+
e,w = super(y,dir)
|
|
312
|
+
|
|
313
|
+
# カレンダーのタイプ
|
|
314
|
+
if (e['c'])
|
|
315
|
+
if (!e['b'])
|
|
316
|
+
return e,'C' # 普通の閏年
|
|
317
|
+
elsif ((0<e['t']) && (e['t']<6))
|
|
318
|
+
return e,'D' # 前年大の閏年
|
|
319
|
+
else
|
|
320
|
+
return e,'E' # 翌年大の閏年
|
|
321
|
+
end
|
|
322
|
+
else
|
|
323
|
+
if (e['b'])
|
|
324
|
+
return e,'B' # 大の平年
|
|
325
|
+
elsif ((dir != -1) && (_thai(y+1,+1)[1]=='D'))
|
|
326
|
+
return e,'B' # 大の平年
|
|
327
|
+
elsif ((dir != +1) && (_thai(y-1,-1)[1]=='E'))
|
|
328
|
+
return e,'B' # 大の平年
|
|
329
|
+
else
|
|
330
|
+
return e,'A' # 小の平年
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|