when_exe 0.3.7 → 0.3.8

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +210 -171
  3. data/bin/irb.rc +1 -0
  4. data/lib/when_exe.rb +78 -53
  5. data/lib/when_exe/basictypes.rb +27 -8
  6. data/lib/when_exe/calendarnote.rb +848 -805
  7. data/lib/when_exe/calendartypes.rb +110 -240
  8. data/lib/when_exe/coordinates.rb +2440 -2175
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +13 -11
  11. data/lib/when_exe/core/extension.rb +38 -45
  12. data/lib/when_exe/ephemeris.rb +43 -14
  13. data/lib/when_exe/ephemeris/eclipse.rb +149 -0
  14. data/lib/when_exe/ephemeris/notes.rb +39 -7
  15. data/lib/when_exe/icalendar.rb +2 -6
  16. data/lib/when_exe/inspect.rb +1408 -1399
  17. data/lib/when_exe/parts/enumerator.rb +486 -477
  18. data/lib/when_exe/parts/resource.rb +1101 -1069
  19. data/lib/when_exe/parts/timezone.rb +6 -5
  20. data/lib/when_exe/region/babylonian.rb +405 -405
  21. data/lib/when_exe/region/bahai.rb +21 -61
  22. data/lib/when_exe/region/chinese/epochs.rb +81 -81
  23. data/lib/when_exe/region/chinese/twins.rb +51 -51
  24. data/lib/when_exe/region/christian.rb +7 -2
  25. data/lib/when_exe/region/coptic.rb +1 -1
  26. data/lib/when_exe/region/discordian.rb +9 -16
  27. data/lib/when_exe/region/french.rb +1 -1
  28. data/lib/when_exe/region/hanke_henry.rb +57 -0
  29. data/lib/when_exe/region/indian.rb +41 -73
  30. data/lib/when_exe/region/international_fixed.rb +97 -0
  31. data/lib/when_exe/region/iranian.rb +203 -203
  32. data/lib/when_exe/region/japanese.rb +13 -13
  33. data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
  34. data/lib/when_exe/region/japanese/notes.rb +1482 -1383
  35. data/lib/when_exe/region/japanese/residues.rb +726 -721
  36. data/lib/when_exe/region/japanese/twins.rb +37 -37
  37. data/lib/when_exe/region/jewish.rb +2 -2
  38. data/lib/when_exe/region/pax.rb +60 -0
  39. data/lib/when_exe/region/positivist.rb +100 -0
  40. data/lib/when_exe/region/roman.rb +333 -334
  41. data/lib/when_exe/region/shire.rb +3 -20
  42. data/lib/when_exe/region/thai.rb +2 -2
  43. data/lib/when_exe/region/tibetan.rb +3 -3
  44. data/lib/when_exe/region/tranquility.rb +208 -0
  45. data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
  46. data/lib/when_exe/region/vietnamese.rb +4 -4
  47. data/lib/when_exe/region/world.rb +9 -13
  48. data/lib/when_exe/region/world_season.rb +89 -0
  49. data/lib/when_exe/region/zoroastrian.rb +4 -2
  50. data/lib/when_exe/tmobjects.rb +14 -4
  51. data/lib/when_exe/tmposition.rb +239 -81
  52. data/lib/when_exe/tmreference.rb +57 -28
  53. data/lib/when_exe/version.rb +1 -1
  54. data/link_to_online_documents +6 -3
  55. data/test/examples/today.rb +1 -1
  56. data/test/scripts.rb +23 -0
  57. data/test/scripts/2.ext.rb +169 -0
  58. data/test/scripts/2.rb +169 -0
  59. data/test/scripts/3.ext.rb +133 -0
  60. data/test/scripts/3.rb +134 -0
  61. data/test/scripts/4.ext.rb +112 -0
  62. data/test/scripts/4.min.rb +65 -0
  63. data/test/scripts/4.rb +136 -0
  64. data/test/scripts/5.ext.rb +78 -0
  65. data/test/scripts/5.rb +81 -0
  66. data/test/scripts/6.gcal.rb +131 -0
  67. data/test/scripts/6.rb +205 -0
  68. data/test/scripts/6.tz.rb +105 -0
  69. data/test/scripts/7.phase.rb +109 -0
  70. data/test/scripts/7.rb +95 -0
  71. data/test/scripts/7.term.rb +128 -0
  72. data/test/scripts/7.week.rb +84 -0
  73. data/test/scripts/8.ext.rb +61 -0
  74. data/test/scripts/8.rb +62 -0
  75. data/test/scripts/9.ext.rb +131 -0
  76. data/test/scripts/9.rb +130 -0
  77. data/test/scripts/chinese-luni-solar.rb +52 -0
  78. data/test/{examples → scripts}/geometric_complex.rb +41 -41
  79. data/test/scripts/geometric_complex.txt +18 -0
  80. data/test/scripts/korea.rb +59 -0
  81. data/test/scripts/thai-reviewed.txt +211 -0
  82. data/test/scripts/thai.rb +36 -0
  83. data/test/scripts/thai.txt +210 -0
  84. data/test/test.rb +7 -0
  85. data/test/test/basictypes.rb +22 -0
  86. data/test/test/coordinates.rb +2 -1
  87. data/test/test/ephemeris.rb +34 -2
  88. data/test/test/icalendar.rb +12 -0
  89. data/test/test/inspect.rb +37 -1
  90. data/test/test/parts.rb +4 -3
  91. data/test/test/region/armenian.rb +20 -0
  92. data/test/test/region/bahai.rb +58 -0
  93. data/test/test/region/chinese.rb +14 -3
  94. data/test/test/region/christian.rb +16 -35
  95. data/test/test/region/discordian.rb +20 -0
  96. data/test/test/region/indian.rb +30 -2
  97. data/test/test/region/japanese.rb +24 -0
  98. data/test/test/region/jewish.rb +2 -0
  99. data/test/test/region/m17n.rb +9 -0
  100. data/test/test/region/reforms.rb +121 -0
  101. data/test/test/region/residue.rb +17 -11
  102. data/test/test/region/shire.rb +58 -0
  103. data/test/test/region/swedish.rb +45 -0
  104. data/test/test/region/zoroastrian.rb +58 -0
  105. data/test/test/tmobjects.rb +74 -0
  106. data/test/test/tmposition.rb +468 -397
  107. data/when_exe.gemspec +2 -2
  108. metadata +49 -6
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 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
+ InternationalFixed = [self, [
13
+ "locale:[=en:, ja=ja:, alias]",
14
+ "names:[InternationalFixed=]",
15
+ "[InternationalFixed=en:International_Fixed_Calendar, 国際固定暦]"
16
+ ]]
17
+ end
18
+
19
+ #
20
+ # InternationalFixed Week
21
+ #
22
+ class CalendarNote::InternationalFixedWeek < CalendarNote::Week
23
+
24
+ #
25
+ # InternationalFixed Note
26
+ #
27
+ Notes = [When::BasicTypes::M17n, [
28
+ "locale:[=en:, ja=ja:, alias]",
29
+ "names:[InternationalFixed]",
30
+
31
+ # Notes for year ----------------------------
32
+ [When::BasicTypes::M17n,
33
+ "names:[year]"
34
+ ],
35
+
36
+ # Notes for month ----------------------------
37
+ [When::BasicTypes::M17n,
38
+ "names:[month]",
39
+ [When::BasicTypes::M17n,
40
+ "names:[Month]",
41
+ "[January, 1月, /date/month_names/1] ",
42
+ "[February, 2月, /date/month_names/2] ",
43
+ "[March, 3月, /date/month_names/3] ",
44
+ "[April, 4月, /date/month_names/4] ",
45
+ "[May, 5月, /date/month_names/5] ",
46
+ "[June, 6月, /date/month_names/6] ",
47
+ "[Sol, 7月 ] ",
48
+ "[July, 8月, /date/month_names/7] ",
49
+ "[August, 9月, /date/month_names/8] ",
50
+ "[September,10月, /date/month_names/9] ",
51
+ "[October, 11月, /date/month_names/10]",
52
+ "[November, 12月, /date/month_names/11]",
53
+ "[December, 13月, /date/month_names/12]"
54
+ ]
55
+ ],
56
+
57
+ # Notes for day ----------------------------
58
+ [When::BasicTypes::M17n,
59
+ "names:[day]",
60
+ [When::BasicTypes::M17n,
61
+ "names:[Week]",
62
+ [DayOfWeek, "label:[Sunday, 日曜日, /date/day_names/0]", {'delta'=> 7}],
63
+ [DayOfWeek, "label:[Monday, 月曜日, /date/day_names/1]", {'delta'=> 7}],
64
+ [DayOfWeek, "label:[Tuesday, 火曜日, /date/day_names/2]", {'delta'=> 7}],
65
+ [DayOfWeek, "label:[Wednesday, 水曜日, /date/day_names/3]", {'delta'=> 7}],
66
+ [DayOfWeek, "label:[Thursday, 木曜日, /date/day_names/4]", {'delta'=> 7}],
67
+ [DayOfWeek, "label:[Friday, 金曜日, /date/day_names/5]", {'delta'=> 7}],
68
+ [DayOfWeek, "label:[Saturday, 土曜日, /date/day_names/6]", {'delta'=> 7}],
69
+ [DayOfWeek, "label:[OutOfWeek=, 週外日=]", {'delta'=>366}]
70
+ ],
71
+
72
+ "[Common_Week]"
73
+ ]
74
+ ]]
75
+
76
+ fixed_week_definitions
77
+
78
+ end
79
+
80
+ module CalendarTypes
81
+ #
82
+ # InternationalFixed calendar based on Gregorian calendar
83
+ #
84
+ InternationalFixed = [YearLengthTableBased, {
85
+ 'label' => 'InternationalFixed::InternationalFixed',
86
+ 'indices' => [
87
+ When.Index('InternationalFixedWeekNotes::month::Month', {:unit =>13}),
88
+ When::Coordinates::DefaultDayIndex
89
+ ],
90
+ 'rule_table' => {
91
+ 365 => {'Length'=>[28]*12 + [29]},
92
+ 366 => {'Length'=>[28]* 5 + [29] + [28] *6 + [29]}
93
+ },
94
+ 'note' => 'InternationalFixedWeek'
95
+ }]
96
+ end
97
+ end
@@ -1,203 +1,203 @@
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
- class BasicTypes::M17n
10
-
11
- Iranian = [self, [
12
- "locale:[=en:, ja=ja:, ar=ar:, alias=ja:]",
13
- "names:[Iranian=]",
14
- "[SolarHijri=en:Solar_Hijri_calendar#Details_of_the_modern_calendar, ヘジラ太陽暦=ja:%%<イラン暦>]",
15
- "[SolarHijriAlgorithmic=en:Solar_Hijri_calendar#Solar_Hijri_algorithmic_calendar, ヘジラ太陽暦=ja:%%<イラン暦>]",
16
- "[Jalali=en:Jalali_calendar, ジャラーリー暦]",
17
- "[Borji=, ボルジ暦=]",
18
-
19
- [self,
20
- "names:[Month, 月=ja:%%<月_(暦)>]",
21
- "[Farvardīn=, ファルヴァルディーン=, فروردین=, フラワシ ]",
22
- "[Ordībehesht=, オルディーベヘシュト=, اردیبهشت=, アシャ・ワヒシュタ ]",
23
- "[Khordād=, ホルダード=, خرداد=, ハルワタート ]",
24
- "[Tīr=, ティール=, تیر=, ティシュトリヤ ]",
25
- "[Mordād=, モルダード=, مرداد=, アムルタート ]",
26
- "[Shahrīvar=, シャハリーヴァル=, شهریور=, フシャスラ・ワルヤ ]",
27
- "[Mehr=, メフル=, مهر=, ミスラ ]",
28
- "[Ābān=, アーバーン=, آبان=, アープ ]",
29
- "[Āzar=, アーザル=, آذر=, アータル ]",
30
- "[Dei=, デイ=, دی=, アフラ・マズダー ]",
31
- "[Bahman=, バフマン=, بهمن=, ウォフ・マナフ ]",
32
- "[Esfand=, エスファンド=, اسفند=, スプンタ・アールマティ]",
33
- "[Andarjah=]"
34
- ],
35
-
36
- [self,
37
- "names:[Sign=en:Astrological_sign, 十二宮]",
38
- "[Hamal=, 白羊宮]",
39
- "[Thur=, 金牛宮]",
40
- "[Jawzā=, 双児宮]",
41
- "[Saratān=, 巨蟹宮]",
42
- "[Asad=, 獅子宮]",
43
- "[Sunbula=, 処女宮]",
44
- "[Mizān=, 天秤宮]",
45
- "['Aqrab=, 天蝎宮]",
46
- "[Qaws=, 人馬宮]",
47
- "[Jadi=, 磨羯宮]",
48
- "[Dalw=, 宝瓶宮]",
49
- "[Hūt=, 双魚宮]"
50
- ]
51
- ]]
52
- end
53
-
54
- module Coordinates
55
-
56
- # Location of cities in Iran
57
- Iranian = [When::BasicTypes::M17n, [
58
- "locale:[=en:, ja=ja:, alias]",
59
- "names:[Iranian]",
60
- [Spatial, "long:51.4045E", "lat:32.3905N", "label:[Isfahan, エスファハーン]"],
61
- [Spatial, "long:51.2523E", "lat:35.4146N", "label:[Tehran, テヘラン ]"]
62
- ]]
63
- end
64
-
65
- class TM::CalendarEra
66
-
67
- # イラン暦
68
- Iranian = [self, [
69
- "area:[Iranian]",
70
- ["[Anno_Persico=en:Iranian_calendars,*alias:AP]1.1.1", '@CE', "0001-01-01^TableBasedJalali",
71
- "1230-01-01^Borji",
72
- "1304-01-01^SolarHijri", ""],
73
- ["[Anno_Cyrus=,*alias:AC]2535.1.1", "", "1355-01-01^SolarHijri"],
74
- ["[Anno_Hijra=en:Iranian_calendars,*alias:AH]1357.6.5", "@CR", "1357-06-05^SolarHijri"]
75
- ]]
76
- end
77
-
78
- module CalendarTypes
79
-
80
- _indicesM = [
81
- When.Index('Iranian::Month', {:unit =>12}),
82
- When::Coordinates::DefaultDayIndex
83
- ]
84
-
85
- _indicesJ = [
86
- When.Index('Iranian::Month', {:unit =>13}),
87
- When::Coordinates::DefaultDayIndex
88
- ]
89
-
90
- _indicesS = [
91
- When.Index('Iranian::Sign', {:unit =>12}),
92
- When::Coordinates::DefaultDayIndex
93
- ]
94
-
95
- #
96
- # Solar Hijri Calendar
97
- #
98
- SolarHijri = [YearLengthTableBased, {
99
- 'label' => 'Iranian::SolarHijri',
100
- 'indices' => _indicesM,
101
- 'origin_of_MSC' => -621,
102
- 'epoch_in_CE' => 0,
103
- 'cycle_offset' => 0,
104
- 'time_basis' => '+15:30',
105
- 'rule_table' => {
106
- 365 => {'Length'=>[31] * 6 + [30] * 5 + [29]},
107
- 366 => {'Length'=>[31] * 6 + [30] * 6}
108
- }
109
- }]
110
-
111
- #
112
- # Solar Hijri Algorithmic Calendar
113
- #
114
- SolarHijriAlgorithmic = [CyclicTableBased, {
115
- 'label' => 'Iranian::SolarHijriAlgorithmic',
116
- 'indices' => _indicesM,
117
- 'origin_of_LSC' => 1948321 + 173125,
118
- 'origin_of_MSC' => 475,
119
- 'epoch_in_CE' => 622+474,
120
- 'rule_table' => {
121
- 'T' => {'Rule' =>['C128'] * 21 + ['C132']},
122
- 'C128' => {'Rule' =>['C29'] + ['C33'] * 3},
123
- 'C132' => {'Rule' =>['C29'] + ['C33'] * 2 + ['C37']},
124
- 'C29' => {'Rule' =>[365] + ([365] * 3 + [366]) * 7},
125
- 'C33' => {'Rule' =>[365] + ([365] * 3 + [366]) * 8},
126
- 'C37' => {'Rule' =>[365] + ([365] * 3 + [366]) * 9},
127
- 365 => {'Length'=>[31] * 6 + [30] * 5 + [29]},
128
- 366 => {'Length'=>[31] * 6 + [30] * 6}
129
- }
130
- }]
131
-
132
- #
133
- # Jalali Calendar
134
- #
135
- Jalali = [HinduSolar, {
136
- 'label' => 'Iranian::Jalali',
137
- 'indices' => _indicesM,
138
- 'type' => 'SBH'
139
- }]
140
-
141
- #
142
- # Table Based Jalali Calendar
143
- #
144
- TableBasedJalali = [CyclicTableBased, {
145
- 'label' => 'Iranian::Jalali',
146
- 'indices' => _indicesJ,
147
- 'origin_of_LSC' => 1948321 + 173125,
148
- 'origin_of_MSC' => 475,
149
- 'epoch_in_CE' => 622+474,
150
- 'rule_table' => {
151
- 'T' => {'Rule' =>['C128'] * 21 + ['C132']},
152
- 'C128' => {'Rule' =>['C29'] + ['C33'] * 3},
153
- 'C132' => {'Rule' =>['C29'] + ['C33'] * 2 + ['C37']},
154
- 'C29' => {'Rule' =>[365] + ([365] * 3 + [366]) * 7},
155
- 'C33' => {'Rule' =>[365] + ([365] * 3 + [366]) * 8},
156
- 'C37' => {'Rule' =>[365] + ([365] * 3 + [366]) * 9},
157
- 365 => {'Length'=>[30] * 12 + [5]},
158
- 366 => {'Length'=>[30] * 12 + [6]}
159
- }
160
- }]
161
-
162
- #
163
- # Borji Calendar
164
- #
165
- Borji = [EphemerisBasedSolar, {
166
- 'label' => 'Iranian::Borji',
167
- 'indices' => _indicesS,
168
- 'origin_of_MSC' => -621,
169
- 'epoch_in_CE' => 0,
170
- 'cycle_offset' => 0,
171
- 'time_basis' => '+15:30'
172
- }]
173
-
174
- #
175
- # Table Based Borji Calendar
176
- #
177
- TableBasedBorji = [PatternTableBasedSolar, {
178
- 'label' => 'Iranian::SolarHijri',
179
- 'indices' => _indicesM,
180
- 'origin_of_MSC' => 1230,
181
- 'origin_of_LSC' => 2397203,
182
- 'epoch_in_CE' => 621+1230,
183
- 'before' => 'Borji',
184
- 'after' => 'SolarHijriAlgorithmic',
185
- 'rule_table'=> %w(
186
- 112111000900 011211000900 012111190900 111121009090 111211000900
187
- 011211000900 012111190900 111120109090 111211009000 011211000900
188
- 012111190900 021120109090 111211009090 111211000900 012111190900
189
- 012120109090 111211009090 111211000900 012111190900 012120109090
190
- 111121009090 111211000900 012111000900 012111109090 111121009090
191
- 111211000900 011211000900 012111109090 111121009090 111211000900
192
- 011211000900 012111109900 111121009090 111211000900 011211000900
193
- 012111109900 111121009090 111211000900 011211000900 012111190900
194
- 111120109090 111211009000 011211000900 012111190900 012120109090
195
- 111211009090 111211000900 012111190900 012120109090 111121009090
196
- 111211000900 012111190900 012111109090 111121009090 111211000900
197
- 011211000900 012111109090 111121009090 111211000900 011211000900
198
- 012111109090 111121009090 111211000900 011211000900 012111109090
199
- 111121009090 111211000900 011211000900 012111109900 111120109090
200
- 111211000900 011211000900 012111190900 012120109090)
201
- }]
202
- end
203
- 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
+ class BasicTypes::M17n
10
+
11
+ Iranian = [self, [
12
+ "locale:[=en:, ja=ja:, ar=ar:, alias=ja:]",
13
+ "names:[Iranian=]",
14
+ "[SolarHijri=en:Solar_Hijri_calendar#Details_of_the_modern_calendar, ヘジラ太陽暦=ja:%%<イラン暦>]",
15
+ "[SolarHijriAlgorithmic=en:Solar_Hijri_calendar#Solar_Hijri_algorithmic_calendar, ヘジラ太陽暦=ja:%%<イラン暦>]",
16
+ "[Jalali=en:Jalali_calendar, ジャラーリー暦]",
17
+ "[Borji=, ボルジ暦=]",
18
+
19
+ [self,
20
+ "names:[Month, 月=ja:%%<月_(暦)>]",
21
+ "[Farvardīn=, ファルヴァルディーン=, فروردین=, フラワシ ]",
22
+ "[Ordībehesht=, オルディーベヘシュト=, اردیبهشت=, アシャ・ワヒシュタ ]",
23
+ "[Khordād=, ホルダード=, خرداد=, ハルワタート ]",
24
+ "[Tīr=, ティール=, تیر=, ティシュトリヤ ]",
25
+ "[Mordād=, モルダード=, مرداد=, アムルタート ]",
26
+ "[Shahrīvar=, シャハリーヴァル=, شهریور=, フシャスラ・ワルヤ ]",
27
+ "[Mehr=, メフル=, مهر=, ミスラ ]",
28
+ "[Ābān=, アーバーン=, آبان=, アープ ]",
29
+ "[Āzar=, アーザル=, آذر=, アータル ]",
30
+ "[Dei=, デイ=, دی=, アフラ・マズダー ]",
31
+ "[Bahman=, バフマン=, بهمن=, ウォフ・マナフ ]",
32
+ "[Esfand=, エスファンド=, اسفند=, スプンタ・アールマティ]",
33
+ "[Andarjah=]"
34
+ ],
35
+
36
+ [self,
37
+ "names:[Sign=en:Astrological_sign, 十二宮]",
38
+ "[Hamal=, 白羊宮]",
39
+ "[Thur=, 金牛宮]",
40
+ "[Jawzā=, 双児宮]",
41
+ "[Saratān=, 巨蟹宮]",
42
+ "[Asad=, 獅子宮]",
43
+ "[Sunbula=, 処女宮]",
44
+ "[Mizān=, 天秤宮]",
45
+ "['Aqrab=, 天蝎宮]",
46
+ "[Qaws=, 人馬宮]",
47
+ "[Jadi=, 磨羯宮]",
48
+ "[Dalw=, 宝瓶宮]",
49
+ "[Hūt=, 双魚宮]"
50
+ ]
51
+ ]]
52
+ end
53
+
54
+ module Coordinates
55
+
56
+ # Location of cities in Iran
57
+ Iranian = [When::BasicTypes::M17n, [
58
+ "locale:[=en:, ja=ja:, alias]",
59
+ "names:[Iranian]",
60
+ [Spatial, "long:51.4045E", "lat:32.3905N", "label:[Isfahan, エスファハーン]"],
61
+ [Spatial, "long:51.2523E", "lat:35.4146N", "label:[Tehran, テヘラン ]"]
62
+ ]]
63
+ end
64
+
65
+ class TM::CalendarEra
66
+
67
+ # イラン暦
68
+ Iranian = [self, [
69
+ "area:[Iranian]",
70
+ ["[Anno_Persico=en:Iranian_calendars,*alias:AP]1.1.1", '@CE', "0001-01-01^TableBasedJalali",
71
+ "1230-01-01^Borji",
72
+ "1304-01-01^SolarHijri", ""],
73
+ ["[Anno_Cyrus=,*alias:AC]2535.1.1", "", "1355-01-01^SolarHijri"],
74
+ ["[Anno_Hijra=en:Iranian_calendars,*alias:AH]1357.6.5", "@CR", "1357-06-05^SolarHijri"]
75
+ ]]
76
+ end
77
+
78
+ module CalendarTypes
79
+
80
+ _indicesM = [
81
+ When.Index('Iranian::Month', {:unit =>12}),
82
+ When::Coordinates::DefaultDayIndex
83
+ ]
84
+
85
+ _indicesJ = [
86
+ When.Index('Iranian::Month', {:unit =>13}),
87
+ When::Coordinates::DefaultDayIndex
88
+ ]
89
+
90
+ _indicesS = [
91
+ When.Index('Iranian::Sign', {:unit =>12}),
92
+ When::Coordinates::DefaultDayIndex
93
+ ]
94
+
95
+ #
96
+ # Solar Hijri Calendar
97
+ #
98
+ SolarHijri = [YearLengthTableBased, {
99
+ 'label' => 'Iranian::SolarHijri',
100
+ 'indices' => _indicesM,
101
+ 'origin_of_MSC' => -621,
102
+ 'epoch_in_CE' => 621,
103
+ 'cycle_offset' => 0,
104
+ 'time_basis' => '+15:30',
105
+ 'rule_table' => {
106
+ 365 => {'Length'=>[31] * 6 + [30] * 5 + [29]},
107
+ 366 => {'Length'=>[31] * 6 + [30] * 6}
108
+ }
109
+ }]
110
+
111
+ #
112
+ # Solar Hijri Algorithmic Calendar
113
+ #
114
+ SolarHijriAlgorithmic = [CyclicTableBased, {
115
+ 'label' => 'Iranian::SolarHijriAlgorithmic',
116
+ 'indices' => _indicesM,
117
+ 'origin_of_LSC' => 1948321 + 173125,
118
+ 'origin_of_MSC' => 475,
119
+ 'epoch_in_CE' => 621,
120
+ 'rule_table' => {
121
+ 'T' => {'Rule' =>['C128'] * 21 + ['C132']},
122
+ 'C128' => {'Rule' =>['C29'] + ['C33'] * 3},
123
+ 'C132' => {'Rule' =>['C29'] + ['C33'] * 2 + ['C37']},
124
+ 'C29' => {'Rule' =>[365] + ([365] * 3 + [366]) * 7},
125
+ 'C33' => {'Rule' =>[365] + ([365] * 3 + [366]) * 8},
126
+ 'C37' => {'Rule' =>[365] + ([365] * 3 + [366]) * 9},
127
+ 365 => {'Length'=>[31] * 6 + [30] * 5 + [29]},
128
+ 366 => {'Length'=>[31] * 6 + [30] * 6}
129
+ }
130
+ }]
131
+
132
+ #
133
+ # Jalali Calendar
134
+ #
135
+ Jalali = [HinduSolar, {
136
+ 'label' => 'Iranian::Jalali',
137
+ 'indices' => _indicesM,
138
+ 'type' => 'SBH'
139
+ }]
140
+
141
+ #
142
+ # Table Based Jalali Calendar
143
+ #
144
+ TableBasedJalali = [CyclicTableBased, {
145
+ 'label' => 'Iranian::Jalali',
146
+ 'indices' => _indicesJ,
147
+ 'origin_of_LSC' => 1948321 + 173125,
148
+ 'origin_of_MSC' => 475,
149
+ 'epoch_in_CE' => 621,
150
+ 'rule_table' => {
151
+ 'T' => {'Rule' =>['C128'] * 21 + ['C132']},
152
+ 'C128' => {'Rule' =>['C29'] + ['C33'] * 3},
153
+ 'C132' => {'Rule' =>['C29'] + ['C33'] * 2 + ['C37']},
154
+ 'C29' => {'Rule' =>[365] + ([365] * 3 + [366]) * 7},
155
+ 'C33' => {'Rule' =>[365] + ([365] * 3 + [366]) * 8},
156
+ 'C37' => {'Rule' =>[365] + ([365] * 3 + [366]) * 9},
157
+ 365 => {'Length'=>[30] * 12 + [5]},
158
+ 366 => {'Length'=>[30] * 12 + [6]}
159
+ }
160
+ }]
161
+
162
+ #
163
+ # Borji Calendar
164
+ #
165
+ Borji = [EphemerisBasedSolar, {
166
+ 'label' => 'Iranian::Borji',
167
+ 'indices' => _indicesS,
168
+ 'origin_of_MSC' => -621,
169
+ 'epoch_in_CE' => 621,
170
+ 'cycle_offset' => 0,
171
+ 'time_basis' => '+15:30'
172
+ }]
173
+
174
+ #
175
+ # Table Based Borji Calendar
176
+ #
177
+ TableBasedBorji = [PatternTableBasedSolar, {
178
+ 'label' => 'Iranian::SolarHijri',
179
+ 'indices' => _indicesM,
180
+ 'origin_of_MSC' => 1230,
181
+ 'origin_of_LSC' => 2397203,
182
+ 'epoch_in_CE' => 621,
183
+ 'before' => 'Borji',
184
+ 'after' => 'SolarHijriAlgorithmic',
185
+ 'rule_table'=> %w(
186
+ 112111000900 011211000900 012111190900 111121009090 111211000900
187
+ 011211000900 012111190900 111120109090 111211009000 011211000900
188
+ 012111190900 021120109090 111211009090 111211000900 012111190900
189
+ 012120109090 111211009090 111211000900 012111190900 012120109090
190
+ 111121009090 111211000900 012111000900 012111109090 111121009090
191
+ 111211000900 011211000900 012111109090 111121009090 111211000900
192
+ 011211000900 012111109900 111121009090 111211000900 011211000900
193
+ 012111109900 111121009090 111211000900 011211000900 012111190900
194
+ 111120109090 111211009000 011211000900 012111190900 012120109090
195
+ 111211009090 111211000900 012111190900 012120109090 111121009090
196
+ 111211000900 012111190900 012111109090 111121009090 111211000900
197
+ 011211000900 012111109090 111121009090 111211000900 011211000900
198
+ 012111109090 111121009090 111211000900 011211000900 012111109090
199
+ 111121009090 111211000900 011211000900 012111109900 111120109090
200
+ 111211000900 011211000900 012111190900 012120109090)
201
+ }]
202
+ end
203
+ end