when_exe 0.3.5 → 0.3.6

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 (194) hide show
  1. data/bin/irb.rc +1 -0
  2. data/bin/locales.rb +8 -6
  3. data/bin/when.rb +1 -1
  4. data/lib/when_exe.rb +231 -146
  5. data/lib/when_exe/basictypes.rb +108 -18
  6. data/lib/when_exe/calendarnote.rb +263 -116
  7. data/lib/when_exe/calendartypes.rb +413 -22
  8. data/lib/when_exe/coordinates.rb +58 -36
  9. data/lib/when_exe/core/compatibility.rb +8 -6
  10. data/lib/when_exe/core/extension.rb +40 -15
  11. data/lib/when_exe/ephemeris.rb +20 -19
  12. data/lib/when_exe/{region → ephemeris}/moon.rb +4 -4
  13. data/lib/when_exe/{region/ephemeric_notes.rb → ephemeris/notes.rb} +25 -6
  14. data/lib/when_exe/{region → ephemeris}/planets.rb +0 -0
  15. data/lib/when_exe/{region → ephemeris}/sun.rb +7 -3
  16. data/lib/when_exe/{region → ephemeris}/v50.rb +0 -0
  17. data/lib/when_exe/googlecalendar.rb +2 -2
  18. data/lib/when_exe/icalendar.rb +3 -3
  19. data/lib/when_exe/inspect.rb +130 -70
  20. data/lib/when_exe/locales/af.rb +2 -2
  21. data/lib/when_exe/locales/akt.rb +176 -0
  22. data/lib/when_exe/locales/ar.rb +2 -2
  23. data/lib/when_exe/locales/{locales.rb → autoload.rb} +6 -2
  24. data/lib/when_exe/locales/az.rb +2 -2
  25. data/lib/when_exe/locales/bg.rb +2 -2
  26. data/lib/when_exe/locales/bn.rb +2 -2
  27. data/lib/when_exe/locales/bs.rb +2 -2
  28. data/lib/when_exe/locales/ca.rb +2 -2
  29. data/lib/when_exe/locales/cs.rb +2 -2
  30. data/lib/when_exe/locales/cy.rb +2 -2
  31. data/lib/when_exe/locales/da.rb +2 -2
  32. data/lib/when_exe/locales/de.rb +2 -2
  33. data/lib/when_exe/locales/de_AT.rb +2 -2
  34. data/lib/when_exe/locales/de_CH.rb +2 -2
  35. data/lib/when_exe/locales/el.rb +2 -2
  36. data/lib/when_exe/locales/en.rb +2 -2
  37. data/lib/when_exe/locales/en_AU.rb +2 -2
  38. data/lib/when_exe/locales/en_CA.rb +2 -2
  39. data/lib/when_exe/locales/en_GB.rb +2 -2
  40. data/lib/when_exe/locales/en_IE.rb +2 -2
  41. data/lib/when_exe/locales/en_IN.rb +3 -3
  42. data/lib/when_exe/locales/en_NZ.rb +2 -2
  43. data/lib/when_exe/locales/en_US.rb +2 -2
  44. data/lib/when_exe/locales/en_ZA.rb +88 -0
  45. data/lib/when_exe/locales/encoding_conversion.rb +126 -0
  46. data/lib/when_exe/locales/eo.rb +2 -2
  47. data/lib/when_exe/locales/es.rb +2 -2
  48. data/lib/when_exe/locales/es_419.rb +2 -2
  49. data/lib/when_exe/locales/es_AR.rb +2 -2
  50. data/lib/when_exe/locales/es_CL.rb +2 -2
  51. data/lib/when_exe/locales/es_CO.rb +2 -2
  52. data/lib/when_exe/locales/es_CR.rb +2 -2
  53. data/lib/when_exe/locales/es_EC.rb +2 -2
  54. data/lib/when_exe/locales/es_MX.rb +2 -2
  55. data/lib/when_exe/locales/es_PA.rb +2 -2
  56. data/lib/when_exe/locales/es_PE.rb +2 -2
  57. data/lib/when_exe/locales/es_US.rb +84 -0
  58. data/lib/when_exe/locales/es_VE.rb +2 -2
  59. data/lib/when_exe/locales/et.rb +2 -2
  60. data/lib/when_exe/locales/eu.rb +2 -2
  61. data/lib/when_exe/locales/fa.rb +2 -2
  62. data/lib/when_exe/locales/fi.rb +3 -3
  63. data/lib/when_exe/locales/fr.rb +2 -2
  64. data/lib/when_exe/locales/fr_CA.rb +2 -2
  65. data/lib/when_exe/locales/fr_CH.rb +2 -2
  66. data/lib/when_exe/locales/gl.rb +2 -2
  67. data/lib/when_exe/locales/he.rb +3 -3
  68. data/lib/when_exe/locales/hi.rb +2 -2
  69. data/lib/when_exe/locales/hi_IN.rb +2 -2
  70. data/lib/when_exe/locales/hr.rb +2 -2
  71. data/lib/when_exe/locales/hu.rb +6 -5
  72. data/lib/when_exe/locales/iast.rb +90 -0
  73. data/lib/when_exe/locales/id.rb +2 -2
  74. data/lib/when_exe/locales/is.rb +2 -2
  75. data/lib/when_exe/locales/it.rb +2 -2
  76. data/lib/when_exe/locales/it_CH.rb +2 -2
  77. data/lib/when_exe/locales/ja.rb +2 -2
  78. data/lib/when_exe/locales/kn.rb +2 -2
  79. data/lib/when_exe/locales/ko.rb +2 -2
  80. data/lib/when_exe/locales/links.rb +3 -3
  81. data/lib/when_exe/locales/lo.rb +2 -2
  82. data/lib/when_exe/{parts → locales}/locale.rb +77 -49
  83. data/lib/when_exe/locales/lt.rb +6 -2
  84. data/lib/when_exe/locales/lv.rb +2 -2
  85. data/lib/when_exe/locales/mk.rb +2 -2
  86. data/lib/when_exe/locales/mn.rb +2 -2
  87. data/lib/when_exe/locales/ms.rb +2 -2
  88. data/lib/when_exe/locales/nb.rb +2 -2
  89. data/lib/when_exe/locales/ne.rb +2 -2
  90. data/lib/when_exe/locales/nl.rb +2 -2
  91. data/lib/when_exe/locales/nn.rb +2 -2
  92. data/lib/when_exe/locales/or.rb +2 -2
  93. data/lib/when_exe/locales/pl.rb +2 -2
  94. data/lib/when_exe/locales/pt.rb +2 -2
  95. data/lib/when_exe/locales/pt_BR.rb +2 -2
  96. data/lib/when_exe/locales/rm.rb +2 -2
  97. data/lib/when_exe/locales/ro.rb +2 -2
  98. data/lib/when_exe/locales/ru.rb +2 -2
  99. data/lib/when_exe/locales/sk.rb +2 -2
  100. data/lib/when_exe/locales/sl.rb +2 -2
  101. data/lib/when_exe/locales/sr.rb +2 -2
  102. data/lib/when_exe/locales/sv.rb +2 -2
  103. data/lib/when_exe/locales/sw.rb +2 -2
  104. data/lib/when_exe/locales/ta.rb +95 -0
  105. data/lib/when_exe/locales/th.rb +2 -2
  106. data/lib/when_exe/locales/tl.rb +3 -3
  107. data/lib/when_exe/locales/tr.rb +2 -2
  108. data/lib/when_exe/locales/transliteration_table.rb +62 -0
  109. data/lib/when_exe/locales/uk.rb +15 -15
  110. data/lib/when_exe/locales/ur.rb +2 -2
  111. data/lib/when_exe/locales/uz.rb +2 -2
  112. data/lib/when_exe/locales/vi.rb +2 -2
  113. data/lib/when_exe/locales/wo.rb +2 -2
  114. data/lib/when_exe/locales/zh_CN.rb +2 -2
  115. data/lib/when_exe/locales/zh_HK.rb +15 -15
  116. data/lib/when_exe/locales/zh_TW.rb +2 -2
  117. data/lib/when_exe/locales/zh_YUE.rb +77 -0
  118. data/lib/when_exe/mini_application.rb +22 -12
  119. data/lib/when_exe/parts/geometric_complex.rb +16 -1
  120. data/lib/when_exe/parts/method_cash.rb +184 -238
  121. data/lib/when_exe/parts/resource.rb +65 -16
  122. data/lib/when_exe/region/armenian.rb +56 -0
  123. data/lib/when_exe/region/bahai.rb +13 -13
  124. data/lib/when_exe/region/balinese.rb +33 -35
  125. data/lib/when_exe/region/chinese.rb +82 -78
  126. data/lib/when_exe/region/{chinese_calendar.rb → chinese/calendars.rb} +59 -40
  127. data/lib/when_exe/region/{chinese_epoch.rb → chinese/epochs.rb} +3 -4
  128. data/lib/when_exe/region/{chinese_twin.rb → chinese/twins.rb} +48 -51
  129. data/lib/when_exe/region/christian.rb +236 -127
  130. data/lib/when_exe/region/coptic.rb +9 -10
  131. data/lib/when_exe/region/dee.rb +48 -0
  132. data/lib/when_exe/region/discordian.rb +225 -0
  133. data/lib/when_exe/region/far_east.rb +2 -6
  134. data/lib/when_exe/region/french.rb +7 -17
  135. data/lib/when_exe/region/geologicalage.rb +0 -1
  136. data/lib/when_exe/region/goddess.rb +58 -0
  137. data/lib/when_exe/region/indian.rb +323 -231
  138. data/lib/when_exe/region/iranian.rb +159 -22
  139. data/lib/when_exe/region/islamic.rb +7 -9
  140. data/lib/when_exe/region/japanese.rb +14 -803
  141. data/lib/when_exe/region/japanese/calendars.rb +397 -0
  142. data/lib/when_exe/region/japanese/epochs.rb +426 -0
  143. data/lib/when_exe/region/{nihon_shoki.rb → japanese/nihon_shoki.rb} +0 -2
  144. data/lib/when_exe/region/{japanese_notes.rb → japanese/notes.rb} +179 -150
  145. data/lib/when_exe/region/japanese/residues.rb +1306 -0
  146. data/lib/when_exe/region/{japanese_twin.rb → japanese/twins.rb} +12 -15
  147. data/lib/when_exe/region/javanese.rb +16 -14
  148. data/lib/when_exe/region/jewish.rb +8 -9
  149. data/lib/when_exe/region/korean.rb +146 -35
  150. data/lib/when_exe/region/m17n.rb +8 -10
  151. data/lib/when_exe/region/martian.rb +44 -16
  152. data/lib/when_exe/region/mayan.rb +12 -10
  153. data/lib/when_exe/region/pope.rb +0 -1
  154. data/lib/when_exe/region/residue.rb +4 -5
  155. data/lib/when_exe/region/roman.rb +20 -24
  156. data/lib/when_exe/region/ryukyu.rb +3 -4
  157. data/lib/when_exe/region/shire.rb +97 -94
  158. data/lib/when_exe/region/symmetry.rb +50 -0
  159. data/lib/when_exe/region/thai.rb +164 -56
  160. data/lib/when_exe/region/tibetan.rb +86 -86
  161. data/lib/when_exe/region/vietnamese.rb +9 -12
  162. data/lib/when_exe/region/weekdate.rb +80 -0
  163. data/lib/when_exe/region/world.rb +65 -70
  164. data/lib/when_exe/region/yerm.rb +98 -0
  165. data/lib/when_exe/region/zoroastrian.rb +203 -0
  166. data/lib/when_exe/timestandard.rb +4 -4
  167. data/lib/when_exe/tmobjects.rb +1 -3
  168. data/lib/when_exe/tmposition.rb +13 -12
  169. data/lib/when_exe/tmreference.rb +11 -10
  170. data/lib/when_exe/version.rb +1 -1
  171. data/link_to_online_documents +3 -3
  172. data/test/examples/Residue.m17n +1 -1
  173. data/test/examples/Terms.m17n +1 -1
  174. data/test/test.rb +2 -1
  175. data/test/test/basictypes.rb +18 -2
  176. data/test/test/calendarnote.rb +1 -1
  177. data/test/test/calendartypes.rb +1 -1
  178. data/test/test/coordinates.rb +7 -7
  179. data/test/test/{region → ephemeris}/moon.rb +0 -0
  180. data/test/test/{region → ephemeris}/planets.rb +0 -0
  181. data/test/test/{region → ephemeris}/sun.rb +0 -0
  182. data/test/test/parts.rb +8 -13
  183. data/test/test/region/christian.rb +245 -0
  184. data/test/test/region/french.rb +16 -16
  185. data/test/test/region/iran.rb +34 -34
  186. data/test/test/region/japanese.rb +6 -4
  187. data/test/test/region/m17n.rb +8 -7
  188. data/test/test/region/mayan.rb +12 -12
  189. data/test/test/region/residue.rb +20 -4
  190. data/test/test/region/thai.rb +25 -3
  191. data/test/test/region/yerm.rb +146 -0
  192. metadata +39 -20
  193. data/lib/when_exe/region/japanese_residues.rb +0 -1212
  194. data/test/test/region/civil.rb +0 -124
@@ -5,18 +5,12 @@
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
7
7
 
8
- require 'when_exe/region/chinese_calendar'
8
+ require 'when_exe/region/chinese/calendars'
9
9
 
10
10
  module When
11
11
 
12
12
  module CalendarTypes
13
13
 
14
- _Indices = [
15
- Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
16
- :trunk=>When.Resource('_m:ChineseTerms::Month::*')}),
17
- Coordinates::DefaultDayIndex
18
- ]
19
-
20
14
  _year1884 = {
21
15
  'Years' => 1,
22
16
  'Months' => 13,
@@ -36,7 +30,8 @@ module When
36
30
 
37
31
  # 欽授暦 1544 - 1788
38
32
  Vietnamese1544 = [PatternTableBasedLuniSolar, {
39
- 'origin_of_MSC'=>1544, 'origin_of_LSC'=>2285027, 'indices'=> _Indices,
33
+ 'origin_of_MSC'=>1544, 'origin_of_LSC'=>2285027, 'indices'=> ChineseIndices,
34
+ 'before' => 'Chinese0939', 'after' => 'Vietnamese1789',
40
35
  'rule_table'=> %w( AbCdEFgHiJkL aAbCdEfGHiJKl
41
36
  aBcdEfGHIjKL abCdeFgHIiJKL abCdeFgHiJKL aBcDefGhIjKL AbCdEffGhIjKl
42
37
 
@@ -97,7 +92,8 @@ module When
97
92
 
98
93
  # 西山朝の暦 1789-1801
99
94
  Vietnamese1789 = [PatternTableBasedLuniSolar, {
100
- 'origin_of_MSC'=>1789, 'origin_of_LSC'=>2374505, 'indices'=> _Indices,
95
+ 'origin_of_MSC'=>1789, 'origin_of_LSC'=>2374505, 'indices'=> ChineseIndices,
96
+ 'before' => 'Vietnamese1544', 'after' => 'Vietnamese1631',
101
97
  'rule_table'=> %w( ABcDeeFgHiJkL AbCDefGhIjKl
102
98
  AbCDeFgHiJkL aBcDdEFgHiJkL aBcdEFgHIjKl AbcDeFgHIJkL aBbcDeFgHIjKL
103
99
  aBcDefgHIjKL AbCdEffgHiJKL aBCdeFghIjKL aBCdEfGhIjkL AbCdDEfGhIjKl
@@ -108,7 +104,8 @@ module When
108
104
 
109
105
  # 萬全暦 1631-1812
110
106
  Vietnamese1631 = [PatternTableBasedLuniSolar, {
111
- 'origin_of_MSC'=>1631, 'origin_of_LSC'=>2316802, 'indices'=> _Indices,
107
+ 'origin_of_MSC'=>1631, 'origin_of_LSC'=>2316802, 'indices'=> ChineseIndices,
108
+ 'before' => 'Vietnamese1544', 'after' => 'Vietnamese1813',
112
109
  'rule_table'=> %w(
113
110
  ABcDeFgHiJklL AbCDeFgHiJkL aBcDeFGhIjKl AbcDeFGhHIjKl AbcDeFgHIjKL
114
111
  aBcdEfgHIjKL AbCddEfgHiJKL AbCdeFghIjKL AbCDefGhiJkL AaBCdEfGhIjkL
@@ -156,7 +153,8 @@ module When
156
153
 
157
154
  # 協紀暦以降 1813-2030
158
155
  Vietnamese1813 = [PatternTableBasedLuniSolarExtended, {
159
- 'origin_of_MSC'=>1813, 'origin_of_LSC'=>2383276, 'indices'=> _Indices,
156
+ 'origin_of_MSC'=>1813, 'origin_of_LSC'=>2383276, 'indices'=> ChineseIndices,
157
+ 'before' => 'Vietnamese1631', 'after' => 'ChineseLuniSolar?time_basis=+07',
160
158
  'rule_table'=> %w( AbCdefGhIJKl ABbCdefGhIJkL ABcdEfgHiJkL
161
159
  ABcDeFfgHiJkL AbCDeFgHijKl AbCDeFGhIjkL aBcDdEFgHIjKl aBcDeFgHIJkL
162
160
  abCdeFgHIJkL AbCcdeFgHIjKL AbCdefGhIjKL AbCdEfgGhIjKL AbCdEfgHiJkL
@@ -223,7 +221,6 @@ module When
223
221
  'VSL' => {'A'=>'1073', 'B'=>'1075', 'C'=>'1137.09', 'D'=>'1140.01', 'E'=>'1225.06'}},
224
222
  'DN'=>{'KDVNT' => {'Z'=>'Chinese1645', },
225
223
  'LDNK' => {'Z'=>'Vietnamese1813'}}}, self, [
226
- "namespace:[ja=http://ja.wikipedia.org/wiki/, en=http://en.wikipedia.org/wiki/]",
227
224
  "locale:[=ja:, en=en:, alias]",
228
225
  'area:[ベトナム#{?LY=LY}#{&DN=DN}=ja:%%<元号>#%.<ベトナム>,Vietnam#{?LY=LY}#{&DN=DN}=en:Vietnam]',
229
226
  [self,
@@ -0,0 +1,80 @@
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
+ WeekDate = [self, [
13
+ "locale:[=en:, ja]",
14
+ "names:[WeekDate=en:ISO_week_date, 暦週=]",
15
+ [self, "names:[week]"] + (1...100).to_a.map {|m| "Week #{m}"},
16
+ ]]
17
+ end
18
+
19
+ module CalendarTypes
20
+
21
+ #
22
+ # Week Date Calendar
23
+ #
24
+ class WeekDate < TableBased
25
+
26
+ private
27
+
28
+ #
29
+ # Object Normalization
30
+ #
31
+ def _normalize(args=[], options={})
32
+ @label ||= 'WeekDate'
33
+ @period ||= 7 # length of week
34
+ @first ||= 0 # first day of week
35
+ @margin ||= 3 # first day of year
36
+ @strftime ||= @period < 10 ? '%Y-W%m-%q' : '%Y-W%m-%d'
37
+ @engine ||= 'Gregorian'
38
+ @engine = When.Calendar(@engine)
39
+ @indices ||= [
40
+ When.Index('WeekDate::week'),
41
+ When::Coordinates::DefaultDayIndex
42
+ ]
43
+ @rule_table ||= _generate_rule
44
+ raise ArgumentError, 'Too many weeks in a year' if @rule_table.keys.max / @period >= 100
45
+ super
46
+ end
47
+
48
+ # 年初の通日
49
+ #
50
+ # @param [Array<Numeric>] date ( 年 )
51
+ #
52
+ # @return [Integer] 年初の通日
53
+ #
54
+ def _sdn_(date)
55
+ year = +date[0] - @engine.origin_of_MSC
56
+ sdn0 = @margin + @engine._coordinates_to_number(year, 0, 0)
57
+ sdn1 = @first + @period * sdn0.div(@period)
58
+ sdn1 -= @period if sdn1 > sdn0
59
+ sdn1
60
+ end
61
+
62
+ # @private
63
+ def _generate_rule
64
+ hash = {}
65
+ _week_number_range.each do |length|
66
+ hash[@period * length] = {'Length'=>[@period] * length}
67
+ end
68
+ hash
69
+ end
70
+
71
+ # @private
72
+ def _week_number_range
73
+ return 52..53 if @engine.kind_of?(When::CalendarTypes::Christian)
74
+ starts = (0..19).to_a.map {|year| @engine._coordinates_to_number(year, 0, 0)}
75
+ lengths = (0..18).to_a.map {|year| starts[year+1] - starts[year]}
76
+ (lengths.min / @period)..((lengths.max + @period - 1) / @period)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -9,31 +9,22 @@ module When
9
9
 
10
10
  class BasicTypes::M17n
11
11
 
12
- WorldTerms = [self, [
13
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
12
+ World = [self, [
14
13
  "locale:[=en:, ja=ja:, alias]",
15
- "names:[WorldTerms=]",
14
+ "names:[World=]",
16
15
  "[World=en:The_World_Calendar, 世界暦]"
17
16
  ]]
18
17
  end
19
18
 
20
- class TM::CalendarEra
21
-
22
- World = [self, [
23
- "namespace:[en=http://en.wikipedia.org/wiki/]",
24
- "area:[Common=]",
25
- ["[BCE=en:BCE_(disambiguation), alias:BeforeCommonEra]0.1.1"],
26
- ["[CE=en:Common_Era, alias:CommonEra]1.1.1", "Calendar Epoch", "01-01-01^World"]
27
- ]]
28
- end
29
-
30
19
  #
31
20
  # 世界暦の暦週
32
21
  #
33
- class CalendarNote::WorldWeek < CalendarNote
22
+ class CalendarNote::WorldWeek < CalendarNote::Week
34
23
 
35
- NoteObjects = [When::BasicTypes::M17n, [
36
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
24
+ #
25
+ # 暦注要素の定義
26
+ #
27
+ Notes = [When::BasicTypes::M17n, [
37
28
  "locale:[=en:, ja=ja:, alias]",
38
29
  "names:[World]",
39
30
 
@@ -55,32 +46,40 @@ module When
55
46
  "names:[day]",
56
47
  [When::BasicTypes::M17n,
57
48
  "names:[Week]",
58
- "[Sunday, 日曜日]",
59
- "[Monday, 月曜日]",
60
- "[Tuesday, 火曜日]",
61
- "[Wednesday, 水曜日]",
62
- "[Thursday, 木曜日]",
63
- "[Friday, 金曜日]",
64
- "[Saturday, 土曜日]",
65
- "[Worldsday, 無曜日]"
66
- ]
49
+ [DayOfWeek, "label:[Sunday, 日曜日]", {'delta'=>7}],
50
+ [DayOfWeek, "label:[Monday, 月曜日]", {'delta'=>7}],
51
+ [DayOfWeek, "label:[Tuesday, 火曜日]", {'delta'=>7}],
52
+ [DayOfWeek, "label:[Wednesday, 水曜日]", {'delta'=>7}],
53
+ [DayOfWeek, "label:[Thursday, 木曜日]", {'delta'=>7}],
54
+ [DayOfWeek, "label:[Friday, 金曜日]", {'delta'=>7}],
55
+ [DayOfWeek, "label:[Saturday, 土曜日]", {'delta'=>7}],
56
+ [DayOfWeek, "label:[Worldsday, 無曜日]", {'delta'=>183}],
57
+ ],
58
+
59
+ "[Standard_Week]"
67
60
  ]
68
61
  ]]
69
62
 
70
- # イベントの標準的な間隔を返す
71
63
  # @private
72
- def _delta(parameter=nil)
73
- return When::DurationP1W
74
- end
64
+ FirstDayOfWeek = [0, 3, 5] * 4
75
65
 
76
66
  # @private
77
- def worldsday_delta(parameter=nil)
78
- return When::TM::PeriodDuration.new([0,0,7*26+1])
79
- end
67
+ ExtraDayInYear = {
68
+ [ 6, 31] => 7,
69
+ [12, 31] => 7
70
+ }
71
+
72
+ # @private
73
+ WeekLength = {
74
+ [ 6, 30] => 7,
75
+ [ 6, 31] => 8,
76
+ [12, 30] => 8,
77
+ [12, 31] => 8
78
+ }
80
79
 
81
80
  # 当日または直前の worldsday の日
82
- # @param date [When::TM::TemporalPosition]
83
- # @param parameter [nil] 未使用
81
+ # @param [When::TM::TemporalPosition] date
82
+ # @param [nil] parameter 未使用
84
83
  # @return [When::TM::TemporalPosition]
85
84
  #
86
85
  def worldsday(date, parameter=nil)
@@ -98,14 +97,14 @@ module When
98
97
 
99
98
  # 当日または直前の week_day の日
100
99
  # @method week_day(date, parameter=nil)
101
- # @param date [When::TM::TemporalPosition]
102
- # @param parameter [nil] 未使用
100
+ # @param [When::TM::TemporalPosition] date
101
+ # @param [nil] parameter 未使用
103
102
  # @return [When::TM::TemporalPosition]
104
103
  # @note week_day は sunday, monday, tuesday, wednesday, thursday, friday, saturday に読み替えてください。
105
104
 
106
105
  # @private
107
106
  7.times do |k|
108
- name = When.CalendarNote('WorldWeek/NoteObjects::day::Week')[k].to_s.downcase
107
+ name = When.CalendarNote('WorldWeek/Notes::day::Week')[k].to_s.downcase
109
108
  module_eval %Q{
110
109
  def #{name}(date, parameter=nil)
111
110
  event_name = 'from_#{name}'
@@ -118,12 +117,35 @@ module When
118
117
  date.events = [event_name]
119
118
  date
120
119
  end
121
-
122
- alias :#{name}_delta :_delta
123
120
  }
124
121
  end
125
122
 
126
- alias :week :sunday
123
+ #
124
+ # この日は何曜?
125
+ #
126
+ # @param [When::TM::TemporalPosition] date
127
+ # @param [When::TM::CalDate] base (not used)
128
+ #
129
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
130
+ #
131
+ def week(date, base=nil)
132
+ date = _to_date_for_note(date)
133
+ y, m, d = date.cal_date
134
+ index = ExtraDayInYear[[m,d]] || (FirstDayOfWeek[m-1] + d - 1) % 7
135
+ length = WeekLength[[m, date.length(When::MONTH)]] || 7
136
+ {:value=>@days_of_week[index], :position=>[index, length]}
137
+ end
138
+
139
+ #
140
+ # 暦日を当該暦注計算用クラスに変換
141
+ #
142
+ # @private
143
+ def _to_date_for_note(date)
144
+ date = When::World ^ date unless date.frame.equal?(When::World)
145
+ date
146
+ end
147
+
148
+ private
127
149
 
128
150
  # オブジェクトの正規化
129
151
  # @private
@@ -131,29 +153,6 @@ module When
131
153
  @event ||= 'sunday'
132
154
  super
133
155
  end
134
-
135
- #
136
- # イベントを取得する Enumerator
137
- #
138
- class Enumerator < When::CalendarNote::Enumerator
139
-
140
- #
141
- # 次のイベントを得る
142
- #
143
- # @return [When::TM::TemporalPosition]
144
- #
145
- def succ
146
- value = @current
147
- if @current==:first
148
- @first = event_eval(@first) if @delta.sign < 0
149
- @current = @first
150
- else
151
- @current = event_eval(@current + @delta)
152
- @current = event_eval(@current + @delta * 2) if @current.to_i == value.to_i
153
- end
154
- return value
155
- end
156
- end
157
156
  end
158
157
 
159
158
  module CalendarTypes
@@ -161,13 +160,9 @@ module When
161
160
  # World calendar based on Gregorian calendar
162
161
  #
163
162
  World = [CyclicTableBased, {
164
- 'label' => When.Resource('_m:WorldTerms::World'),
165
- 'origin_of_LSC' => 1721060,
166
- 'indices' => [
167
- Coordinates::Index.new({:unit =>12, :trunk=>When.Resource('_m:CalendarTerms::Month::*')}),
168
- Coordinates::DefaultDayIndex
169
- ],
170
- 'rule_table' => {
163
+ 'label' => 'World::World',
164
+ 'origin_of_LSC' => 1721060,
165
+ 'rule_table' => {
171
166
  'T' => {'Rule' =>['LC', 'SC', 'SC', 'SC']},
172
167
  'SC' => {'Rule' =>[365]*4 + [366, 365, 365, 365]*24},
173
168
  'LC' => {'Rule' =>[366, 365, 365, 365]*25},
@@ -0,0 +1,98 @@
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
+ =begin
9
+ References
10
+
11
+ (1) http://calendars.wikia.com/wiki/Yerm_Lunar_Calendar
12
+ (2) http://www.hermetic.ch/cal_stud/palmen/yerm1.htm
13
+ =end
14
+
15
+ module When
16
+
17
+ class BasicTypes::M17n
18
+
19
+ Yerm = [self, [
20
+ "locale:[=en:, ja]",
21
+ "names:[Yerm=]",
22
+ "[YermLunar=http://calendars.wikia.com/wiki/Yerm_Lunar_Calendar, ヤーム=]",
23
+
24
+ [Coordinates::Residue, "label:[yerm=]", "divisor:52", "year:0", "format:[%s=]"] +
25
+ (1..52).to_a.map {|y| [Coordinates::Residue, "label:[Yerm #{y}=]", "remainder:#{y-1}"]},
26
+ [self, "names:[month]"] + (1..17).to_a.map {|m| "Month #{m}"},
27
+ [self, "names:[night]"] + (1..30).to_a.map {|m| "Night #{m}"}
28
+ ]]
29
+ end
30
+
31
+ module CalendarTypes
32
+
33
+ #
34
+ # Yerm Lunar Calendar
35
+ #
36
+ class Yerm < CyclicTableBased
37
+
38
+ #
39
+ # Analyze notation with crescent
40
+ #
41
+ # @param [String] source Notation with crescents
42
+ # @param [Array<Integer>] Upper default elements (default - today's Yerm date)
43
+ #
44
+ # @return [String] Notation with hyphens
45
+ #
46
+ def self.parse(source, abbr=nil)
47
+ c, y, m, d = abbr || (When::Yerm^When.today).cal_date
48
+ case source
49
+ when /^(-?\d+)[-\(](\d+)\((\d+)\((\d+)$/; c, y, m, d = [$1, $2, $3, $4]
50
+ when /^(-?\d+)-(\d+)\((\d+)$/ ; c, y, m, d = [$1, $2, $3 ]
51
+ when /^(-?\d+)-(\d+)$/ ; c, y, m, d = [$1, $2 ]
52
+ when /^(-?\d+)-$/ ; c, y, m, d = [$1 ]
53
+ when /^(\d+)\((\d+)\((\d+)$/ ; y, m, d = [ $1, $2, $3]
54
+ when /^(\d+)\((\d+)$/ ; m, d = [ $1, $2]
55
+ when /^(\d+)$/ ; d = $1
56
+
57
+ when /^(\d+)\)(\d+)\)(\d+)[-\)](-?\d+)$/; c, y, m, d = [$4, $3, $2, $1]
58
+ when /^(\d+)\)(\d+)-(-?\d+)$/ ; c, y, m, d = [$3, $2, $1 ]
59
+ when /^(\d+)-(-\d+)$/ ; c, y, m, d = [$2, $1 ]
60
+ when /^(-\d+)$/ ; c, y, m, d = [$1 ]
61
+ when /^(\d+)\)(\d+)\)(\d+)$/ ; y, m, d = [ $3, $2, $1]
62
+ when /^(\d+)\)(\d+)$/ ; m, d = [ $2, $1]
63
+ else ; c, y, m, d = [ ]
64
+ end
65
+
66
+ ordered = [c, y, m, d]
67
+ ordered.pop until ordered.last
68
+ raise ArgumentError, "can't parse #{source}" if ordered.empty? || ordered.include?(nil)
69
+ ordered.map {|n| n.to_s}.join('-')
70
+ end
71
+
72
+ private
73
+
74
+ #
75
+ # Object Normalization
76
+ #
77
+ def _normalize(args=[], options={})
78
+ @label ||= 'Yerm::YermLunar'
79
+ @origin_of_LSC ||= 1948379 - 25101 # 622-05-16 Base Cycle = No.1
80
+ @note ||= [['_m:Yerm::yerm'],
81
+ ['_m:Calendar::Month'],
82
+ ['_co:Common::Week', '_n:Ephemeris/Notes::day::Moon_Age']]
83
+ @indices ||= [
84
+ When.Index('Yerm::yerm', {:unit =>52}),
85
+ When.Index('Yerm::month'),
86
+ When.Index('Yerm::night')
87
+ ]
88
+ @rule_table ||= {
89
+ 'T' => {'Rule' =>['L', 'L', 'S'] * 17 + ['L']},
90
+ 'L' => {'Length'=>[30, 29] * 8 + [30]},
91
+ 'S' => {'Length'=>[30, 29] * 7 + [30]}
92
+ }
93
+ @strftime = @strftime && @strftime.upcase == 'REVERSE' ? '%d)%m)%y' : '%y(%m(%d'
94
+ super
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,203 @@
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
+ =begin
9
+
10
+ References
11
+
12
+ (1) http://en.wikipedia.org/wiki/Zoroastrian_calendar
13
+ (2) http://www.moonwise.co.uk/year/1375zoroastrian.htm
14
+ (3) http://www.zoroastrian.org/articles/nowruz.htm
15
+
16
+ =end
17
+
18
+ module When
19
+ class BasicTypes::M17n
20
+
21
+ Zoroastrian = [self, [
22
+ "locale:[=en:, ja=ja:, ar=ar:, alias=ja:]",
23
+ "names:[Zoroastrian=]",
24
+ "[Zoroastrian=en:Zoroastrian_calendar#The_reckoning_of_years, ゾロアスター暦= ]",
25
+ "[Qadimi=en:Zoroastrian_calendar#The_Qadimi_calendar , カディミ暦= ]",
26
+ "[Shahanshahi=en:Zoroastrian_calendar#The_Shahanshahi_calendar, シャハンシャヒ暦=]",
27
+ "[Fasli=en:Zoroastrian_calendar#The_Fasli_calendar , ファスリ暦= ]"
28
+ ]]
29
+ end
30
+
31
+ #
32
+ # ゾロアスター暦の暦注
33
+ #
34
+ class CalendarNote::Zoroastrian < CalendarNote
35
+
36
+ Notes = [When::BasicTypes::M17n, [
37
+ "locale:[=en:]",
38
+ "names:[Zoroastrian]",
39
+
40
+ # 年の暦注 ----------------------------
41
+ [When::BasicTypes::M17n,
42
+ "names:[year]",
43
+ ],
44
+
45
+ # 月の暦注 ----------------------------
46
+ [When::BasicTypes::M17n,
47
+ "names:[month]",
48
+ [When::BasicTypes::M17n,
49
+ "names:[Month]",
50
+ "[Fravardin= ]",
51
+ "[Ardibehest= ]",
52
+ "[Khordad= ]",
53
+ "[Tir= ]",
54
+ "[Amardad= ]",
55
+ "[Shehrevar= ]",
56
+ "[Meher= ]",
57
+ "[Avan= ]",
58
+ "[Adar= ]",
59
+ "[Dae= ]",
60
+ "[Bahman= ]",
61
+ "[Aspandarmad= ]",
62
+ "[Gatha Days= ]"
63
+ ]
64
+ ],
65
+
66
+ # 日の暦注 ----------------------------
67
+ [When::BasicTypes::M17n,
68
+ "names:[day]",
69
+ [When::BasicTypes::M17n,
70
+ "names:[divinity]",
71
+ "[Hormazd= ]", # 01
72
+ "[Bahman= ]", # 02
73
+ "[Ardibehest= ]", # 03
74
+ "[Shehrevar= ]", # 04
75
+ "[Aspandarmad= ]", # 05
76
+ "[Khordad= ]", # 06
77
+ "[Amardad= ]", # 07
78
+ "[Daepadar= ]", # 08
79
+ "[Adar= ]", # 09
80
+ "[Avan= ]", # 10
81
+ "[Khorshed= ]", # 11
82
+ "[Mohor= ]", # 12
83
+ "[Tir= ]", # 13
84
+ "[Gosh= ]", # 14
85
+ "[Daepmeher= ]", # 15
86
+ "[Meher= ]", # 16
87
+ "[Srosh= ]", # 17
88
+ "[Rashne= ]", # 18
89
+ "[Fravardin= ]", # 19
90
+ "[Behram= ]", # 20
91
+ "[Ram= ]", # 21
92
+ "[Govad= ]", # 22
93
+ "[Daepdin= ]", # 23
94
+ "[Din= ]", # 24
95
+ "[Ashishvangh= ]", # 25
96
+ "[Ashtad= ]", # 26
97
+ "[Asman= ]", # 27
98
+ "[Zamyad= ]", # 28
99
+ "[Mahrespand= ]", # 29
100
+ "[Aneran= ]", # 30
101
+ "[Ahunavad= ]", # 31
102
+ "[Ushtavad= ]", # 32
103
+ "[Spentomad= ]", # 33
104
+ "[Vohukhshathra= ]", # 34
105
+ "[Vahishtoist= ]", # 35
106
+ "[intercalary day=]" # 36
107
+ ]
108
+ ]
109
+ ]]
110
+
111
+ # 暦注 - 日の名前
112
+ #
113
+ # @param [When::TM::CalDate] date
114
+ #
115
+ # @return [String]
116
+ #
117
+ def divinity(date)
118
+ y, m, d = date.cal_date
119
+ When.CalendarNote('Zoroastrian/Notes::day::divinity::*')[m <= 12 ? d-1 : d+29]
120
+ end
121
+ end
122
+
123
+ module CalendarTypes
124
+
125
+ #
126
+ # Zoroastrian Calendar
127
+ #
128
+ Zoroastrian = [CyclicTableBased, {
129
+ 'label' => 'Zoroastrian::Zoroastrian',
130
+ 'indices' => [
131
+ When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
132
+ When::Coordinates::DefaultDayIndex
133
+ ],
134
+ 'origin_of_MSC' => 1,
135
+ 'origin_of_LSC' => 1952063 + 5 - 365 * 1020,
136
+ 'epoch_in_CE' => 31,
137
+ 'rule_table' => {
138
+ 'T' => {'Rule' =>[365]},
139
+ 365 => {'Length'=>[30]*12+[5]}
140
+ },
141
+ 'note' => 'Zoroastrian'
142
+ }]
143
+
144
+ #
145
+ # Qadimi Calendar
146
+ #
147
+ Qadimi = [CyclicTableBased, {
148
+ 'label' => 'Zoroastrian::Qadimi',
149
+ 'indices' => [
150
+ When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
151
+ When::Coordinates::DefaultDayIndex
152
+ ],
153
+ 'origin_of_MSC' => 1,
154
+ 'origin_of_LSC' => 1952063,
155
+ 'epoch_in_CE' => 31,
156
+ 'rule_table' => {
157
+ 'T' => {'Rule' =>[365]},
158
+ 365 => {'Length'=>[30]*12+[5]}
159
+ },
160
+ 'note' => 'Zoroastrian'
161
+ }]
162
+
163
+ #
164
+ # Shahanshahi Calendar
165
+ #
166
+ Shahanshahi = [CyclicTableBased, {
167
+ 'label' => 'Zoroastrian::Shahanshahi',
168
+ 'indices' => [
169
+ When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
170
+ When::Coordinates::DefaultDayIndex
171
+ ],
172
+ 'origin_of_MSC' => 1,
173
+ 'origin_of_LSC' => 1952063 + 30,
174
+ 'epoch_in_CE' => 31,
175
+ 'rule_table' => {
176
+ 'T' => {'Rule' =>[365]},
177
+ 365 => {'Length'=>[30]*12+[5]}
178
+ },
179
+ 'note' => 'Zoroastrian'
180
+ }]
181
+
182
+ #
183
+ # Fasli Calendar
184
+ #
185
+ Fasli = [{'Epoch'=>{
186
+ 'ZRE'=>{'origin_of_MSC'=>1737},
187
+ 'YZ' =>{'origin_of_MSC'=>-630}
188
+ }}, Bahai, {
189
+ 'label' => 'Zoroastrian::Fasli',
190
+ 'indices' => [
191
+ When.Index('ZoroastrianNotes::month::Month', {:unit =>13}),
192
+ When::Coordinates::DefaultDayIndex
193
+ ],
194
+ 'origin_of_MSC' => -630,
195
+ 'epoch_in_CE' => 0,
196
+ 'rule_table' => {
197
+ 365 => {'Length'=>[30] * 12 + [5]},
198
+ 366 => {'Length'=>[30] * 12 + [6]}
199
+ },
200
+ 'note' => 'Zoroastrian'
201
+ }]
202
+ end
203
+ end