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
@@ -0,0 +1,50 @@
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
+
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
@@ -8,23 +8,43 @@
8
8
  module When
9
9
  class BasicTypes::M17n
10
10
 
11
- ThaiTerms = [self, [
12
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
11
+ Thai = [self, [
13
12
  "locale:[=en:, ja=ja:, alias]",
14
- "names:[ThaiTerms=]",
15
- "[ThaiLuniSolar=en:Thai_lunar_calendar, タイ太陰太陽暦=ja:%%<チャントラカティ>]"
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
+ ]
16
39
  ]]
17
40
  end
18
41
 
19
42
  module CalendarTypes
20
43
 
21
44
  #
22
- # The Calendar of Thai people in China
45
+ # ソンクラーンとタイ暦の暦定数
23
46
  #
24
- class ThaiC < TableBased
25
-
26
- 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<'
27
- 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<'
47
+ module Songkran
28
48
 
29
49
  # ソンクラーン - 太陽の白羊宮入り
30
50
  #
@@ -37,14 +57,56 @@ module When
37
57
  return @origin_of_LSC - 1 + e['H'][0]
38
58
  end
39
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
+
40
104
  private
41
105
 
42
- # ThaiC+オブジェクトの性質定義を初期設定します。
43
- #
44
106
  # オブジェクトの正規化
45
107
  # @private
46
108
  def _normalize(args=[], options={})
47
- @label ||= When.Resource('_m:ThaiTerms::ThaiLuniSolar')
109
+ @label ||= 'Thai::ThaiLuniSolar'
48
110
 
49
111
  Rational
50
112
  @mean_month ||= 29 + Rational( 373, 703)
@@ -54,24 +116,8 @@ module When
54
116
  @origin_of_LSC ||= 1954168
55
117
  @origin_of_MSC = @origin_of_MSC.to_i
56
118
  @origin_of_LSC = @origin_of_LSC.to_i
57
-
58
- intercalary_month = When.Resource('_m:IndianTerms::IntercalaryMonth::*')
59
- @indices ||= [
60
- Coordinates::Index.new({:branch=>{0 => intercalary_month[0],
61
- 0.5 => intercalary_month[1],
62
- -1.5 => intercalary_month[2],
63
- -1 => intercalary_month[3]},
64
- :trunk =>When.Resource('_m:IndianTerms::LunarMonth::*')}),
65
- Coordinates::DefaultDayIndex
66
- ]
67
- @rule_table ||= {
68
- 354 => {'Length'=>[15,15,15,14]*6, 'IDs' => NormalIDs},
69
- 355 => {'Length'=>[15,15,15,14]*3 + [15]*4 + [15,15,15,14]*2, 'IDs' => NormalIDs},
70
- 356 => {'Length'=>[15,15,15,14]*3 + [15]*7 + [14] + [15]*4, 'IDs' => NormalIDs},
71
- 383 => {'Length'=>[15,14,15,15]*6 + [15,14], 'IDs' => LeapIDs},
72
- 384 => {'Length'=>[15,15,15,14]*4 + [15]*2 + [15,15,15,14]*2, 'IDs' => LeapIDs}
73
- }
74
-
119
+ @indices ||= Indices
120
+ @rule_table ||= RuleTable
75
121
  super
76
122
  end
77
123
 
@@ -85,26 +131,13 @@ module When
85
131
  y = +date[0]
86
132
  e0 = _thai(y, 0)[0]
87
133
  e1 = _thai(y+1,0)[0]
88
- e0['T'] -= 1 if (e1['T']-e0['T'] == 353)
134
+ case e1['T']-e0['T']
135
+ when 353,383 ; e0['T'] -= 1
136
+ when 385 ; e0['T'] += 1
137
+ end
89
138
  return @origin_of_LSC - 1 + e0['T'] - 30*3 - 29*2
90
139
  end
91
140
 
92
- # y で指定した年の暦定数を返します。
93
- #
94
- # @param [Integer] y 年
95
- #
96
- # @return [Hash]
97
- #
98
- def _eph(y) # C
99
- h = (y+4).divmod(9)[0] # y
100
- h = (y-h).divmod(3)[0] # z
101
- h = (y+1-h).divmod(2)[0] # r (2 => h?)
102
- h = (36525876*y+149049-h).divmod(100000) # s
103
- a = (h[0]*11+633-((h[0]+7368).divmod(8878))[0]).divmod(692)
104
- m = (h[0]+a[0]+0).divmod(30)
105
- return {'H'=>h, 'A'=>a, 'M'=>m}
106
- end
107
-
108
141
  # y で指定した年の平閏、8月の大小を判定します。
109
142
  #
110
143
  # @param [Integer] y 年
@@ -137,27 +170,102 @@ module When
137
170
  end
138
171
  end
139
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
+ @eoch_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
198
+ end
199
+
200
+ private
201
+
202
+ def _meton(year)
203
+ (((year + 9) * 235 / 19) - 111) * @mean_month + @eoch_new_moon
204
+ end
205
+ end
206
+
207
+ #
208
+ # The Calendar of Thai people in China (Table based)
209
+ #
210
+ class ThaiT < CyclicTableBased
211
+
212
+ include Lunar
213
+ include Songkran
214
+
215
+ Pattern = %w(
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 = 2393198
228
+ @origin_of_MSC = 1202
229
+ @epoch_in_CE = 1840
230
+ @indices = ThaiP::Indices
231
+ pattern = Pattern.dup
232
+ if @patch
233
+ @patch.scan(/\d+[ABC]/i) do |patch|
234
+ pattern[patch[0..-2].to_i-@epoch_in_CE] = patch[-1..-1].upcase
235
+ end
236
+ end
237
+ @rule_table = {
238
+ 'T' => {'Rule' => pattern},
239
+ 'A' => {'Rule' => [354]},
240
+ 'B' => {'Rule' => [355]},
241
+ 'C' => {'Rule' => [384]}}.merge(ThaiP::RuleTable)
242
+ super
243
+ end
244
+ end
245
+
140
246
  #
141
247
  # The Calendar of central Thailand
142
248
  #
143
- class ThaiB < ThaiC
249
+ class Thai < ThaiP
144
250
 
251
+ # 年の朔閏パターン
145
252
  YEAR_TYPE = {'A'=>354, 'B'=>355, 'C'=>384, 'D'=>384, 'E'=>384}
146
253
 
147
- 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<'
148
- 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<'
254
+ # 月の大小と閏
255
+ _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<'
256
+ _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<'
257
+ RuleTable = {
258
+ 354 => {'Length'=>[15,14,15,15]*6, 'IDs' => _NormalIDs},
259
+ 355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => _NormalIDs},
260
+ 384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => _LeapIDs }
261
+ }
149
262
 
150
263
  private
151
264
 
152
265
  # オブジェクトの正規化
153
266
  #
154
267
  def _normalize(args=[], options={})
155
- @rule_table ||= {
156
- 354 => {'Length'=>[15,14,15,15]*6, 'IDs' => NormalIDs},
157
- 355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => NormalIDs},
158
- 384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => LeapIDs }
159
- }
160
-
268
+ @rule_table ||= RuleTable
161
269
  super
162
270
  end
163
271
 
@@ -8,10 +8,9 @@
8
8
  module When
9
9
  class BasicTypes::M17n
10
10
 
11
- TibetanTerms = [self, [
12
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
11
+ Tibetan = [self, [
13
12
  "locale:[=en:, ja=ja:, alias]",
14
- "names:[TibetanTerms=]",
13
+ "names:[Tibetan=]",
15
14
  "[Tibetan=en:Tibetan_calendar, 時輪暦=ja:%%<チベット暦>]",
16
15
 
17
16
  [self,
@@ -44,79 +43,82 @@ module When
44
43
  ]]
45
44
  end
46
45
 
47
- module When::Coordinates
48
-
49
- # 六十干支
50
- Tibetan = [When::BasicTypes::M17n, [
51
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
52
- "locale:[=en:, ja=ja:, alias]",
53
- "names:[Tibetan]",
46
+ module Coordinates
47
+
48
+ # 六十干支
49
+ Tibetan = [When::BasicTypes::M17n, [
50
+ "locale:[=en:, ja=ja:, alias]",
51
+ "names:[Tibetan]",
52
+
53
+ [StemBranch,
54
+ "label:[Stem-Branch, *干支]", "divisor:60", "day:11", "year:4",
55
+ [StemBranch, "label:[Wood-Rat=, *木男鼠=]", "remainder: 0"],
56
+ [StemBranch, "label:[Wood-Ox=, *木女牛=]", "remainder: 1"],
57
+ [StemBranch, "label:[Fire-Tiger=, *火男虎=]", "remainder: 2"],
58
+ [StemBranch, "label:[Fire-Rabbit=, *火女兎=]", "remainder: 3"],
59
+ [StemBranch, "label:[Earth-Dragon=, *土男龍=]", "remainder: 4"],
60
+ [StemBranch, "label:[Earth-Snake=, *土女蛇=]", "remainder: 5"],
61
+ [StemBranch, "label:[Iron-Horse=, *金男馬=]", "remainder: 6"],
62
+ [StemBranch, "label:[Iron-Goat=, *金女羊=]", "remainder: 7"],
63
+ [StemBranch, "label:[Water-Monkey=, *水男猴=]", "remainder: 8"],
64
+ [StemBranch, "label:[Water-Rooster=, *水女鷄=]", "remainder: 9"],
65
+ [StemBranch, "label:[Wood-Dog=, *木男狗=]", "remainder:10"],
66
+ [StemBranch, "label:[Wood-Pig=, *木女猪=]", "remainder:11"],
67
+ [StemBranch, "label:[Fire-Rat=, *火男鼠=]", "remainder:12"],
68
+ [StemBranch, "label:[Fire-Ox=, *火女牛=]", "remainder:13"],
69
+ [StemBranch, "label:[Earth-Tiger=, *土男虎=]", "remainder:14"],
70
+ [StemBranch, "label:[Earth-Rabbit=, *土女兎=]", "remainder:15"],
71
+ [StemBranch, "label:[Iron-Dragon=, *金男龍=]", "remainder:16"],
72
+ [StemBranch, "label:[Iron-Snake=, *金女蛇=]", "remainder:17"],
73
+ [StemBranch, "label:[Water-Horse=, *水男馬=]", "remainder:18"],
74
+ [StemBranch, "label:[Water-Goat=, *水女羊=]", "remainder:19"],
75
+ [StemBranch, "label:[Wood-Monkey=, *木男猴=]", "remainder:20"],
76
+ [StemBranch, "label:[Wood-Rooster=, *木女鷄=]", "remainder:21"],
77
+ [StemBranch, "label:[Fire-Dog=, *火男狗=]", "remainder:22"],
78
+ [StemBranch, "label:[Fire-Pig=, *火女猪=]", "remainder:23"],
79
+ [StemBranch, "label:[Earth-Rat=, *土男鼠=]", "remainder:24"],
80
+ [StemBranch, "label:[Earth-Ox=, *土女牛=]", "remainder:25"],
81
+ [StemBranch, "label:[Iron-Tiger=, *金男虎=]", "remainder:26"],
82
+ [StemBranch, "label:[Iron-Rabbit=, *金女兎=]", "remainder:27"],
83
+ [StemBranch, "label:[Water-Dragon=, *水男龍=]", "remainder:28"],
84
+ [StemBranch, "label:[Water-Snake=, *水女蛇=]", "remainder:29"],
85
+ [StemBranch, "label:[Wood-Horse=, *木男馬=]", "remainder:30"],
86
+ [StemBranch, "label:[Wood-Goat=, *木女羊=]", "remainder:31"],
87
+ [StemBranch, "label:[Fire-Monkey=, *火男猴=]", "remainder:32"],
88
+ [StemBranch, "label:[Fire-Rooster=, *火女鷄=]", "remainder:33"],
89
+ [StemBranch, "label:[Earth-Dog=, *土男狗=]", "remainder:34"],
90
+ [StemBranch, "label:[Earth-Pig=, *土女猪=]", "remainder:35"],
91
+ [StemBranch, "label:[Iron-Rat=, *金男鼠=]", "remainder:36"],
92
+ [StemBranch, "label:[Iron-Ox=, *金女牛=]", "remainder:37"],
93
+ [StemBranch, "label:[Water-Tiger=, *水男虎=]", "remainder:38"],
94
+ [StemBranch, "label:[Water-Rabbit=, *水女兎=]", "remainder:39"],
95
+ [StemBranch, "label:[Wood-Dragon=, *木男龍=]", "remainder:40"],
96
+ [StemBranch, "label:[Wood-Snake=, *木女蛇=]", "remainder:41"],
97
+ [StemBranch, "label:[Fire-Horse=, *火男馬=]", "remainder:42"],
98
+ [StemBranch, "label:[Fire-Goat=, *火女羊=]", "remainder:43"],
99
+ [StemBranch, "label:[Earth-Monkey=, *土男猴=]", "remainder:44"],
100
+ [StemBranch, "label:[Earth-Rooster=, *土女鷄=]", "remainder:45"],
101
+ [StemBranch, "label:[Iron-Dog=, *金男狗=]", "remainder:46"],
102
+ [StemBranch, "label:[Iron-Pig=, *金女猪=]", "remainder:47"],
103
+ [StemBranch, "label:[Water-Rat=, *水男鼠=]", "remainder:48"],
104
+ [StemBranch, "label:[Water-Ox=, *水女牛=]", "remainder:49"],
105
+ [StemBranch, "label:[Wood-Tiger=, *木男虎=]", "remainder:50"],
106
+ [StemBranch, "label:[Wood-Rabbit=, *木女兎=]", "remainder:51"],
107
+ [StemBranch, "label:[Fire-Dragon=, *火男龍=]", "remainder:52"],
108
+ [StemBranch, "label:[Fire-Snake=, *火女蛇=]", "remainder:53"],
109
+ [StemBranch, "label:[Earth-Horse=, *土男馬=]", "remainder:54"],
110
+ [StemBranch, "label:[Earth-Goat=, *土女羊=]", "remainder:55"],
111
+ [StemBranch, "label:[Iron-Monkey=, *金男猴=]", "remainder:56"],
112
+ [StemBranch, "label:[Iron-Rooster=, *金女鷄=]", "remainder:57"],
113
+ [StemBranch, "label:[Water-Dog=, *水男狗=]", "remainder:58"],
114
+ [StemBranch, "label:[Water-Pig=, *水女猪=]", "remainder:59"]
115
+ ]
116
+ ]]
117
+ end
54
118
 
55
- [StemBranch,
56
- "label:[Stem-Branch, *干支]", "divisor:60", "day:11", "year:4",
57
- [StemBranch, "label:[Wood-Rat=, *木男鼠=]", "remainder: 0"],
58
- [StemBranch, "label:[Wood-Ox=, *木女牛=]", "remainder: 1"],
59
- [StemBranch, "label:[Fire-Tiger=, *火男虎=]", "remainder: 2"],
60
- [StemBranch, "label:[Fire-Rabbit=, *火女兎=]", "remainder: 3"],
61
- [StemBranch, "label:[Earth-Dragon=, *土男龍=]", "remainder: 4"],
62
- [StemBranch, "label:[Earth-Snake=, *土女蛇=]", "remainder: 5"],
63
- [StemBranch, "label:[Iron-Horse=, *金男馬=]", "remainder: 6"],
64
- [StemBranch, "label:[Iron-Goat=, *金女羊=]", "remainder: 7"],
65
- [StemBranch, "label:[Water-Monkey=, *水男猴=]", "remainder: 8"],
66
- [StemBranch, "label:[Water-Rooster=, *水女鷄=]", "remainder: 9"],
67
- [StemBranch, "label:[Wood-Dog=, *木男狗=]", "remainder:10"],
68
- [StemBranch, "label:[Wood-Pig=, *木女猪=]", "remainder:11"],
69
- [StemBranch, "label:[Fire-Rat=, *火男鼠=]", "remainder:12"],
70
- [StemBranch, "label:[Fire-Ox=, *火女牛=]", "remainder:13"],
71
- [StemBranch, "label:[Earth-Tiger=, *土男虎=]", "remainder:14"],
72
- [StemBranch, "label:[Earth-Rabbit=, *土女兎=]", "remainder:15"],
73
- [StemBranch, "label:[Iron-Dragon=, *金男龍=]", "remainder:16"],
74
- [StemBranch, "label:[Iron-Snake=, *金女蛇=]", "remainder:17"],
75
- [StemBranch, "label:[Water-Horse=, *水男馬=]", "remainder:18"],
76
- [StemBranch, "label:[Water-Goat=, *水女羊=]", "remainder:19"],
77
- [StemBranch, "label:[Wood-Monkey=, *木男猴=]", "remainder:20"],
78
- [StemBranch, "label:[Wood-Rooster=, *木女鷄=]", "remainder:21"],
79
- [StemBranch, "label:[Fire-Dog=, *火男狗=]", "remainder:22"],
80
- [StemBranch, "label:[Fire-Pig=, *火女猪=]", "remainder:23"],
81
- [StemBranch, "label:[Earth-Rat=, *土男鼠=]", "remainder:24"],
82
- [StemBranch, "label:[Earth-Ox=, *土女牛=]", "remainder:25"],
83
- [StemBranch, "label:[Iron-Tiger=, *金男虎=]", "remainder:26"],
84
- [StemBranch, "label:[Iron-Rabbit=, *金女兎=]", "remainder:27"],
85
- [StemBranch, "label:[Water-Dragon=, *水男龍=]", "remainder:28"],
86
- [StemBranch, "label:[Water-Snake=, *水女蛇=]", "remainder:29"],
87
- [StemBranch, "label:[Wood-Horse=, *木男馬=]", "remainder:30"],
88
- [StemBranch, "label:[Wood-Goat=, *木女羊=]", "remainder:31"],
89
- [StemBranch, "label:[Fire-Monkey=, *火男猴=]", "remainder:32"],
90
- [StemBranch, "label:[Fire-Rooster=, *火女鷄=]", "remainder:33"],
91
- [StemBranch, "label:[Earth-Dog=, *土男狗=]", "remainder:34"],
92
- [StemBranch, "label:[Earth-Pig=, *土女猪=]", "remainder:35"],
93
- [StemBranch, "label:[Iron-Rat=, *金男鼠=]", "remainder:36"],
94
- [StemBranch, "label:[Iron-Ox=, *金女牛=]", "remainder:37"],
95
- [StemBranch, "label:[Water-Tiger=, *水男虎=]", "remainder:38"],
96
- [StemBranch, "label:[Water-Rabbit=, *水女兎=]", "remainder:39"],
97
- [StemBranch, "label:[Wood-Dragon=, *木男龍=]", "remainder:40"],
98
- [StemBranch, "label:[Wood-Snake=, *木女蛇=]", "remainder:41"],
99
- [StemBranch, "label:[Fire-Horse=, *火男馬=]", "remainder:42"],
100
- [StemBranch, "label:[Fire-Goat=, *火女羊=]", "remainder:43"],
101
- [StemBranch, "label:[Earth-Monkey=, *土男猴=]", "remainder:44"],
102
- [StemBranch, "label:[Earth-Rooster=, *土女鷄=]", "remainder:45"],
103
- [StemBranch, "label:[Iron-Dog=, *金男狗=]", "remainder:46"],
104
- [StemBranch, "label:[Iron-Pig=, *金女猪=]", "remainder:47"],
105
- [StemBranch, "label:[Water-Rat=, *水男鼠=]", "remainder:48"],
106
- [StemBranch, "label:[Water-Ox=, *水女牛=]", "remainder:49"],
107
- [StemBranch, "label:[Wood-Tiger=, *木男虎=]", "remainder:50"],
108
- [StemBranch, "label:[Wood-Rabbit=, *木女兎=]", "remainder:51"],
109
- [StemBranch, "label:[Fire-Dragon=, *火男龍=]", "remainder:52"],
110
- [StemBranch, "label:[Fire-Snake=, *火女蛇=]", "remainder:53"],
111
- [StemBranch, "label:[Earth-Horse=, *土男馬=]", "remainder:54"],
112
- [StemBranch, "label:[Earth-Goat=, *土女羊=]", "remainder:55"],
113
- [StemBranch, "label:[Iron-Monkey=, *金男猴=]", "remainder:56"],
114
- [StemBranch, "label:[Iron-Rooster=, *金女鷄=]", "remainder:57"],
115
- [StemBranch, "label:[Water-Dog=, *水男狗=]", "remainder:58"],
116
- [StemBranch, "label:[Water-Pig=, *水女猪=]", "remainder:59"]
117
- ]
118
- ]]
119
- end
119
+ class CalendarNote
120
+ Tibetan = [['Tibetan::干支'], ['_m:Calendar::Month'], ['Common::Week']]
121
+ end
120
122
 
121
123
  module CalendarTypes
122
124
 
@@ -155,21 +157,19 @@ end
155
157
  # @parameter = 太陽と月の位相計算用のテーブル
156
158
  #
157
159
  def _normalize(args=[], options={})
158
- intercalary_month = When.Resource('_m:TibetanTerms::IntercalaryMonth::*')
159
- intercalary_day = When.Resource('_m:TibetanTerms::IntercalaryDay::*')
160
+ intercalary_month = When.Resource('_m:Tibetan::IntercalaryMonth::*')
161
+ intercalary_day = When.Resource('_m:Tibetan::IntercalaryDay::*')
160
162
  @indices ||= @index_of_MSC && @index_of_MSC.to_i == 1 ?
161
163
  [
162
- Coordinates::Index.new({:unit=>60}),
163
- Coordinates::Index.new({:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]},
164
- :trunk=>When.Resource('_m:TibetanTerms::Month::*'), :shift=>2}),
165
- Coordinates::Index.new({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
164
+ When.Index({:unit=>60}),
165
+ When.Index('Tibetan::Month', {:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]}, :shift=>2}),
166
+ When.Index({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
166
167
  ] :
167
168
  [
168
- Coordinates::Index.new({:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]},
169
- :trunk=>When.Resource('_m:TibetanTerms::Month::*'), :shift=>2}),
170
- Coordinates::Index.new({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
169
+ When.Index('Tibetan::Month', {:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]}, :shift=>2}),
170
+ When.Index({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
171
171
  ]
172
- @label ||= When.Resource('_m:TibetanTerms::Tibetan')
172
+ @label ||= 'Tibetan::Tibetan'
173
173
  @epoch_in_CE ||= 0
174
174
  @type ||= 1
175
175
  @parameter = case @type.to_i
@@ -194,7 +194,7 @@ end
194
194
  'A0'=>(22.0+28.0/126)
195
195
  }
196
196
  end
197
- @note = 'TibetanNotes'
197
+ @note = 'Tibetan'
198
198
  super
199
199
  end
200
200