when_exe 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
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