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
@@ -52,6 +52,10 @@ module When
52
52
  # The Sun
53
53
  #
54
54
  class Sun < Datum
55
+
56
+ # @private
57
+ Radius = 696000.0
58
+
55
59
  class << self
56
60
 
57
61
  include Ephemeris
@@ -144,9 +148,9 @@ module When
144
148
  def initialize(*args)
145
149
  options = [args.pop] if args[-1].kind_of?(Hash)
146
150
  surface_radius, aberration, luminosity, *rest = args
147
- surface_radius ||= 696000.0
148
- aberration ||= 0.00000
149
- luminosity ||= 4.58
151
+ surface_radius ||= Radius
152
+ aberration ||= 0.00000
153
+ luminosity ||= 4.58
150
154
  args = [surface_radius, aberration, luminosity] + rest
151
155
  args += options if options
152
156
  super(*args)
@@ -80,11 +80,11 @@ module GoogleCalendar
80
80
  conditions['orderby'] = 'starttime'
81
81
  direction = (conditions['sortorder'] == 'd') ? :reverse : :forward
82
82
  first = When.when?(conditions['start-min'])
83
- conditions['start-min'] = (When.Calendar('Gregorian') ^ first).to_s
83
+ conditions['start-min'] = (When::Gregorian ^ first).to_s
84
84
  if conditions['start-max']
85
85
  last = When.when?(conditions['start-max'])
86
86
  inner_args = [first...last]
87
- conditions['start-max'] = (When.Calendar('Gregorian') ^ last).to_s
87
+ conditions['start-max'] = (When::Gregorian ^ last).to_s
88
88
  else
89
89
  inner_args = [first, direction]
90
90
  end
@@ -198,7 +198,7 @@ module When::V
198
198
  @namespace[content.attribute['prefix'].object] = content.object
199
199
  end while (content = content.same_altid)
200
200
  else
201
- @namespace.update(When::Parts::Locale._namespace(content.object))
201
+ @namespace.update(When::Locale._namespace(content.object))
202
202
  end
203
203
  end
204
204
 
@@ -315,7 +315,7 @@ module When::V
315
315
 
316
316
  # locale の登録
317
317
  @locale = @_pool['..'].respond_to?(:locale) ? @_pool['..'].locale : []
318
- @locale = When::Parts::Locale._locale(@property['locale'].object) if @property['locale']
318
+ @locale = When::Locale._locale(@property['locale'].object) if @property['locale']
319
319
 
320
320
  # tzoffsetfrom の登録
321
321
  if @property['tzoffsetfrom']
@@ -896,7 +896,7 @@ module When::V
896
896
  ['last_modified', 'tzurl', 'x_lic_location'], [], []]
897
897
  Classes = [Standard, Daylight]
898
898
 
899
- class << self; include When::Parts::Resource::Pool; end
899
+ extend When::Parts::Resource::Pool
900
900
 
901
901
  include When::Parts::Timezone::Base
902
902
 
@@ -107,13 +107,28 @@ module When
107
107
  when Numeric, FalseClass, TrueClass ; element
108
108
  else ; element.to_s
109
109
  end
110
- result = When::Parts::Locale.translate(result,options[:locale]) if options[:locale] && result.kind_of?(String)
110
+ result = When::Locale.translate(result,options[:locale]) if options[:locale] && result.kind_of?(String)
111
111
  result
112
112
  end
113
113
  end
114
114
 
115
115
  module Coordinates
116
116
 
117
+ class Pair
118
+ #
119
+ # to_h のための要素生成
120
+ #
121
+ # @param [Hash] options 下記のとおり
122
+ # @option options [Symbol] :method :to_m17n なら to_s を返す、その他は self を返す
123
+ #
124
+ # @return [String, When::Coordinates::Pair]
125
+ #
126
+ # @private
127
+ def _to_hash_value(options={})
128
+ options[:method] == :to_m17n ? to_s : self
129
+ end
130
+ end
131
+
117
132
  class Residue
118
133
  # 多言語対応文字列化
119
134
  #
@@ -134,25 +149,99 @@ module When
134
149
  return label.to_s + "(#{difference})" unless @format
135
150
  @format.to_s % [label.to_s, difference, difference+1]
136
151
  end
137
- end
138
152
 
139
- class Pair
140
153
  #
141
- # to_h のための要素生成
154
+ # week_included のための range の決定
142
155
  #
143
- # @param [Hash] options 下記のとおり
144
- # @option options [Symbol] :method :to_m17n なら to_s を返す、その他は self を返す
156
+ # @return [Array<Range>]
145
157
  #
146
- # @return [String, When::Coordinates::Pair]
158
+ # @private
159
+ def _range_for_week_included(date, first, length, block_given=false)
160
+ today = date.floor
161
+ begun = today.succ & self >> first-1
162
+ unless date.frame.equal?(begun.frame)
163
+ begun = (date.frame ^ today).succ & self >> first-1
164
+ middle = today
165
+ end
166
+ ended = begun.succ & self >> length-1
167
+ middle && block_given ? [begun...middle, middle...ended] : [begun...ended]
168
+ end
169
+
170
+ #
171
+ # week_included のためのコラムの生成
172
+ #
173
+ # @return [Array<Object>]
147
174
  #
148
175
  # @private
149
- def _to_hash_value(options={})
150
- options[:method] == :to_m17n ? to_s : self
176
+ def _column_for_week_included(base, range, opt, &block)
177
+ range.inject([]) {|s,r| s + r.map { |date|
178
+ yield(date, !opt.key?(:Range) || opt[:Range].include?(date.to_i) ? DAY : nil)
179
+ }}
151
180
  end
152
181
  end
153
182
  end
154
183
 
184
+ class CalendarNote::Week
185
+
186
+ #
187
+ # week_included のための range の決定
188
+ #
189
+ # @return [Array<Range>]
190
+ #
191
+ # @private
192
+ def _range_for_week_included(date, first, length, block_given=false)
193
+ begun = ended = nil
194
+ if first <= 0
195
+ it = enum_for(date.floor, :reverse)
196
+ (1-first).times do
197
+ begun = it.next
198
+ end
199
+ else
200
+ it = enum_for(date.floor, :forward)
201
+ first.times do
202
+ begun = it.next
203
+ end
204
+ end
205
+ it = enum_for(begun, :forward)
206
+ (length+1).times do
207
+ ended = it.next
208
+ end
209
+ [begun...ended]
210
+ end
211
+
212
+ #
213
+ # week_included のためのコラムの生成
214
+ #
215
+ # @return [Array<Object>]
216
+ #
217
+ # @private
218
+ def _column_for_week_included(base, range, opt, &block)
219
+ count = 0
220
+ limit = week(base)[:position][1]
221
+ range.inject([]) {|s,r| s + r.map { |date|
222
+ position = week(date, base)[:position][0]
223
+ (position - count).times do
224
+ yield(nil,nil)
225
+ end
226
+ count = position + 1
227
+ yield(date, !opt.key?(:Range) || opt[:Range].include?(date.to_i) ? DAY : nil) if position < limit
228
+ }}
229
+ end
230
+ end
231
+
155
232
  module TM
233
+
234
+ class Calendar
235
+
236
+ # TemporalPosition#strftime のためのデフォルト書式
237
+ #
238
+ # @return [String]
239
+ #
240
+ def strftime
241
+ @strftime ||= '%Y-%m-%d'
242
+ end
243
+ end
244
+
156
245
  class TemporalPosition
157
246
 
158
247
  AMPM = ['AM', 'PM'].map {|half| When::Parts::Resource._instance('_m:CalendarFormats::' + half)}
@@ -163,10 +252,10 @@ module When
163
252
  'E' => ['%s', 'E'], 'F' => ['%s', 'F'], 'G' => ['%d', 'G'], 'g' => ['%02d', 'g'],
164
253
  'h' => '%b', 'H' => ['%02d', 'H'], 'I' => ['%02d', 'I'], 'j' => ['%03d', 'j'],
165
254
  'k' => ['%2d', 'H'], 'l' => ['%2d', 'I'], 'm' => ['%02d', 'm'], 'M' => ['%02d', 'M'],
166
- 'n' => '\n', 'p' => ['%s', 'p'], 'P' => ['%s', 'P'], 'r' => '%I:%M:%S %p',
167
- 'R' => '%H:%M', 's' => ['%d', 's'], 'S' => ['%02d', 'S'], 't' => '\t',
168
- 'T' => '%H:%M:%S', 'u' => ['%d', 'u'], 'U' => ['%02d', 'U'], 'V' => ['%02d', 'V'],
169
- 'w' => ['%d', 'w'], 'W' => ['%02d', 'W'],
255
+ 'n' => '\n', 'p' => ['%s', 'p'], 'P' => ['%s', 'P'], 'q' => ['%01d', 'd'],
256
+ 'r' => '%I:%M:%S %p', 'R' => '%H:%M', 's' => ['%d', 's'], 'S' => ['%02d', 'S'],
257
+ 't' => '\t', 'T' => '%H:%M:%S', 'u' => ['%d', 'u'], 'U' => ['%02d', 'U'],
258
+ 'V' => ['%02d', 'V'], 'w' => ['%d', 'w'], 'W' => ['%02d', 'W'],
170
259
  'x' => When::Parts::Resource._instance('_m:CalendarFormats::Date'),
171
260
  'X' => When::Parts::Resource._instance('_m:CalendarFormats::Time'),
172
261
  'y' => ['%02d', 'y'], 'Y' => ['%4d', 'Y'], 'z' => ['%s', 'z'], 'Z' => ['%s', 'Z'],
@@ -230,7 +319,7 @@ module When
230
319
 
231
320
  # 含まれる週
232
321
  #
233
- # @overload week_included(ord, wkst, opt, block)
322
+ # @overload week_included(ord, wkst, opt, &block)
234
323
  # @param [Numeric, Range] ord 週の番号(default: 今週)
235
324
  # 今週を 0 とする週番号(Integer) または週番号の範囲(Range)
236
325
  # -1 - 先週
@@ -249,47 +338,17 @@ module When
249
338
  # @return [Range] 含まれる週を範囲として表現する Range (block 指定なし)
250
339
  # @return [Array] 含まれる週の各日をブロックに渡した結果の Array (block 指定あり)
251
340
  #
252
- def week_included(*args)
341
+ def week_included(*args, &block)
253
342
  begin
254
343
  first, length, wkst, opt = _range(args, 'MO')
255
- case wkst
256
- when When::Coordinates::Residue
257
- today = self.floor
258
- begun = today.succ & wkst >> first-1
259
- unless @frame.equal?(begun.frame)
260
- begun = (@frame ^ today).succ & wkst >> first-1
261
- middle = today
262
- end
263
- ended = begun.succ & wkst >> length-1
264
- else
265
- begun = ended = nil
266
- if first <= 0
267
- it = wkst.enum_for(self.floor, :reverse)
268
- (1-first).times do
269
- begun = it.next
270
- end
271
- else
272
- it = wkst.enum_for(self.floor, :forward)
273
- first.times do
274
- begun = it.next
275
- end
276
- end
277
- it = wkst.enum_for(begun, :forward)
278
- (length+1).times do
279
- ended = it.next
280
- end
281
- end
282
- range = middle && block_given? ? [begun...middle, middle...ended] : [begun...ended]
283
-
344
+ range = wkst._range_for_week_included(self, first, length, block_given?)
284
345
  rescue RangeError
285
- range = [(@frame ^ self).week_included(*args)]
346
+ range = wkst._range_for_week_included(@frame ^ self, first, length)
286
347
  end
287
348
 
288
- return range[0] unless block_given?
349
+ return range.first unless block_given?
289
350
 
290
- (range.inject([]) {|s,r| s + r.map { |date|
291
- yield(date, !opt.key?(:Range) || opt[:Range].include?(date.to_i) ? DAY : nil)
292
- }}).unshift(yield(range[0].first, WEEK)).compact
351
+ wkst._column_for_week_included(self, range, opt, &block).unshift(yield(range[0].first, WEEK)).compact
293
352
  end
294
353
 
295
354
  # 含まれる月
@@ -319,7 +378,7 @@ module When
319
378
  if wkst
320
379
  (first...(first+length)).map {|i|
321
380
  begun = self.floor(MONTH,DAY) + When::TM::PeriodDuration.new([0,i,0])
322
- ended = begun + DurationP1M
381
+ ended = begun + P1M
323
382
  ended = ended.prev until begun.cal_date[MONTH-1] == ended.cal_date[MONTH-1]
324
383
  if ended.to_i <= begun.to_i
325
384
  ended = begun
@@ -398,7 +457,7 @@ module When
398
457
  result = [yield(begun, YEAR)]
399
458
  while current < ended do
400
459
  result << current.month_included(wkst, &block)
401
- current += DurationP1M
460
+ current += P1M
402
461
  end
403
462
  result.compact
404
463
  }
@@ -425,14 +484,14 @@ module When
425
484
  when date.most_significant_coordinate * 1 == year
426
485
  return date
427
486
  when date.most_significant_coordinate * 1 > year
428
- next_date = (date-When::DurationP1Y).floor(YEAR,DAY)
487
+ next_date = (date-When::P1Y).floor(YEAR,DAY)
429
488
  date = (date.to_i == next_date.to_i) ?
430
- (date-When::DurationP1Y*2).floor(YEAR,DAY) :
489
+ (date-When::P1Y*2).floor(YEAR,DAY) :
431
490
  next_date
432
491
  else
433
- next_date = (date+When::DurationP1Y).floor(YEAR,DAY)
492
+ next_date = (date+When::P1Y).floor(YEAR,DAY)
434
493
  date = (date.to_i == next_date.to_i) ?
435
- (date+When::DurationP1Y*2).floor(YEAR,DAY) :
494
+ (date+When::P1Y*2).floor(YEAR,DAY) :
436
495
  next_date
437
496
  end
438
497
  raise RangeError, "can't find target date: #{self} -> #{year}" if done.key?(date.to_i)
@@ -479,9 +538,9 @@ module When
479
538
  form_options = options.kind_of?(Hash) ? options : {}
480
539
  form_options[:method] = :to_m17n unless form_options.key?(:method)
481
540
  persistence = options.delete(:persistence) if options.kind_of?(Hash)
482
- retrieved = When::CalendarNote::Notes.retrieve(persistence, self.to_i)
541
+ retrieved = When::CalendarNote::NotesContainer.retrieve(persistence, self.to_i)
483
542
  return retrieved unless retrieved == false
484
- When::CalendarNote::Notes.register(_m17n_form(_notes(options), form_options), persistence, self.to_i)
543
+ When::CalendarNote::NotesContainer.register(_m17n_form(_notes(options), form_options), persistence, self.to_i)
485
544
  end
486
545
 
487
546
  #
@@ -630,7 +689,7 @@ module When
630
689
  #
631
690
  # @return [When::BasicTypes::M17n]
632
691
  #
633
- def strftime(pattern, locale=nil)
692
+ def strftime(pattern=@frame.strftime, locale=nil)
634
693
  pattern = m17n([pattern]*self.keys.length, nil, nil, {:locale=>self.keys}) if pattern.instance_of?(String)
635
694
  pattern._printf([], locale) do |k, *t|
636
695
  _strftime(k, pattern, [''])
@@ -649,12 +708,12 @@ module When
649
708
  # @return [designator に依存]
650
709
  #
651
710
  def _term(designator, locale=nil, d=0, e=3)
652
- designator = When::Parts::Locale.translate(designator,locale)
711
+ designator = When::Locale.translate(designator,locale)
653
712
  case designator
654
713
  # 現在のロケールにおける曜日の省略名
655
- when 'a' ; When.Resource('_co:CommonResidue::Abbr_Day')[to_i % 7].translate(locale)
714
+ when 'a' ; When.Resource('_co:Common::Abbr_Day')[to_i % 7].translate(locale)
656
715
  # 現在のロケールにおける曜日の完全な名前
657
- when 'A' ; When.Resource('_co:CommonResidue::Week')[to_i % 7].label.translate(locale)
716
+ when 'A' ; When.Resource('_co:Common::Week')[to_i % 7].label.translate(locale)
658
717
  when 'b' ; (name(MONTH-d).translate(locale))[/^.{1,#{e}}/] # 現在のロケールにおける月の省略名
659
718
  when 'B' ; (name(MONTH-d).translate(locale)) # 現在のロケールにおける月の完全な名前
660
719
  when 'C' ; year(d).div(100) # 世紀 (西暦年の上 2 桁)
@@ -670,7 +729,7 @@ module When
670
729
  when 'M' ; minute(d) # 分
671
730
  when 'p' ; (AMPM[hour(d).to_i.div(12)].translate(locale)).upcase # 現在のロケールにおける「午前」「午後」に相当する文字列
672
731
  when 'P' ; (AMPM[hour(d).to_i.div(12)].translate(locale)).downcase # 前項を小文字で表記
673
- when 's' ; universal_time / Duration::SECOND # 紀元 (1970-01-01T00:00:00Z) からの秒数
732
+ when 's' ; universal_time / Duration::SECOND # 紀元 (1970-01-01T00:00:00Z) からの秒数
674
733
  when 'S' ; second(d) # 秒 (10 進数表記)
675
734
  when 'u' ; cwday # 週の何番目の日か(月曜日を 1 とする)
676
735
  when 'U' ; yweek(6, 7, d) # 年の初めからの通算の週番号(日曜日始まり)
@@ -680,7 +739,7 @@ module When
680
739
  when 'y' ; year(d) % 100 # 西暦の下2桁 (世紀部分を含まない年)
681
740
  when 'Y' ; year(d) # 世紀部分を含めた ( 4 桁の) 西暦年
682
741
  when 'z' ; clock.to_basic # +hhmm や -hhmm の形式のタイムゾーン
683
- when 'Z' ; When::Parts::Locale.translate(clock.tzname[0],locale) # タイムゾーンまたはゾーン名または省略名
742
+ when 'Z' ; When::Locale.translate(clock.tzname[0],locale) # タイムゾーンまたはゾーン名または省略名
684
743
  else ; designator
685
744
  end
686
745
  end
@@ -729,7 +788,7 @@ module When
729
788
  #
730
789
  def _calendar_note(options)
731
790
  calendar_note = options.delete(:calendar_note) if options.kind_of?(Hash)
732
- calendar_note ||= @frame ? @frame.note : 'JulianDayNotes'
791
+ calendar_note ||= @frame ? @frame.note : 'JulianDay'
733
792
  When.CalendarNote(calendar_note)
734
793
  end
735
794
  end
@@ -1196,8 +1255,9 @@ module When
1196
1255
  # 準備
1197
1256
  precision = [precision, 1 - @cal_date.length].max
1198
1257
  precision = [precision, DAY].min
1199
- terms = []
1200
- ext_dg = [(@extra_year_digits||1).to_i, 0].max
1258
+ terms = []
1259
+ ext_dg = [(@extra_year_digits||1).to_i, 0].max
1260
+ year_dg = @frame.indices.length <= 2 ? 4 : 2
1201
1261
 
1202
1262
  # 年
1203
1263
  year_by_epoch = @cal_date[0]
@@ -1206,14 +1266,14 @@ module When
1206
1266
  year_in_term = reverse ? -year_by_epoch : year_by_epoch
1207
1267
  year_by_calendar = epoch + year_by_epoch if epoch
1208
1268
  terms << year_in_term
1209
- format = (0..99) === (year_in_term * 1) ? "%02d." : "%04d."
1269
+ format = (0..99) === (year_in_term * 1) ? "%02d." : "%0#{year_dg}d."
1210
1270
  if year_by_calendar && year_by_calendar != year_in_term
1211
1271
  terms << (year_by_calendar * 1)
1212
- format += "(%04d)"
1272
+ format += "(%0#{year_dg}d)"
1213
1273
  end
1214
1274
  else
1215
1275
  terms << year_by_epoch
1216
- format = (0..9999) === (year_by_epoch * 1) ? "%04d." : "%+0#{5+ext_dg}d."
1276
+ format = (0..(10**year_dg-1)) === (year_by_epoch * 1) ? "%0#{year_dg}d." : "%+0#{5+ext_dg}d."
1217
1277
  end
1218
1278
 
1219
1279
  # 月日
@@ -1227,7 +1287,7 @@ module When
1227
1287
  date = Pair._format([format] + terms)
1228
1288
  date.sub!(/([^\d])\(([-+\d]+)\)/, '(\2)\1') if era
1229
1289
  date = date[0..-2] unless @frame.pair[precision-1] || date[-1..-1] != '.'
1230
- date.gsub!(/\./, '-') if (@frame.indices.length <= DefaultDateIndices.length) && !era
1290
+ date.gsub!(/\./, '-') if (@frame.indices.length <= 3) && !era
1231
1291
  return date
1232
1292
  end
1233
1293
  end
@@ -5,8 +5,8 @@
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
- module When::BasicTypes
9
- class M17n
8
+ module When
9
+ module Locale
10
10
 
11
11
  # from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/af.yml
12
12
 
@@ -0,0 +1,176 @@
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
+ require 'when_exe/locales/transliteration_table'
9
+
10
+ module When
11
+ module Locale
12
+
13
+ #
14
+ # AKT: Alphabet of Katakana Transliteration
15
+ #
16
+ # see { http://www.asahi-net.or.jp/~dy5h-kdm/end2.htm MadKod}
17
+ #
18
+ AKT = {
19
+ 'ja' => {
20
+ "a" =>"ア", "i" =>"イ", "u" =>"ウ", "e" =>"エ", "o" =>"オ",
21
+ "ka" =>"カ", "ki" =>"キ", "ku" =>"ク", "ke" =>"ケ", "ko" =>"コ", "k" =>"ク",
22
+ "qa" =>"カ", "qi" =>"キ", "qu" =>"ク", "qe" =>"ケ", "qo" =>"コ", "q" =>"ク",
23
+ "ga" =>"ガ", "gi" =>"ギ", "gu" =>"グ", "ge" =>"ゲ", "go" =>"ゴ", "g" =>"グ",
24
+ "sa" =>"サ", "si" =>"シ", "su" =>"ス", "se" =>"セ", "so" =>"ソ", "s" =>"ス",
25
+ "za" =>"ザ", "zi" =>"ヂ", "zu" =>"ズ", "ze" =>"ゼ", "zo" =>"ゾ", "z" =>"ズ",
26
+ "ja" =>"ジャ", "ji" =>"ジ", "ju" =>"ジュ", "je" =>"ジェ", "jo" =>"ジョ", "j" =>"ジュ",
27
+ "ca" =>"カ", "ci" =>"チ", "cu" =>"ク", "ce" =>"セ", "co" =>"コ", "c" =>"ク",
28
+ "ta" =>"タ", "ti" =>"ティ", "tu" =>"トゥ", "te" =>"テ", "to" =>"ト", "t" =>"ト",
29
+ "tsa"=>"ツァ", "tsi"=>"ツィ", "tsu"=>"ツ", "tse"=>"ツェ", "tso"=>"ツォ", "ts"=>"ツ",
30
+ "da" =>"ダ", "di" =>"ディ", "du" =>"ドゥ", "de" =>"デ", "do" =>"ド", "d" =>"ド",
31
+ "na" =>"ナ", "ni" =>"ニ", "nu" =>"ヌ", "ne" =>"ネ", "no" =>"ノ", "n" =>"ン",
32
+ "ha" =>"ハ", "hi" =>"ヒ", "hu" =>"フ", "he" =>"ヘ", "ho" =>"ホ", "h" =>"フ",
33
+ "ba" =>"バ", "bi" =>"ビ", "bu" =>"ブ", "be" =>"ベ", "bo" =>"ボ", "b" =>"ブ",
34
+ "pa" =>"パ", "pi" =>"ピ", "pu" =>"プ", "pe" =>"ペ", "po" =>"ポ", "p" =>"プ",
35
+ "fa" =>"ファ", "fi" =>"フィ", "fu" =>"フ", "fe" =>"フェ", "fo" =>"フォ", "f" =>"フ",
36
+ "va" =>"ヴァ", "vi" =>"ヴィ", "vu" =>"ヴ", "ve" =>"ヴェ", "vo" =>"ヴォ", "v" =>"ヴ",
37
+ "ma" =>"マ", "mi" =>"ミ", "mu" =>"ム", "me" =>"メ", "mo" =>"モ", "m" =>"ム",
38
+ "mma"=>"ンマ", "mmi"=>"ンミ", "mmu"=>"ンム", "mme"=>"ンメ", "mmo"=>"ンモ",
39
+ "ra" =>"ラ", "ri" =>"リ", "ru" =>"ル", "re" =>"レ", "ro" =>"ロ", "r" =>"ル",
40
+ "la" =>"ラ", "li" =>"リ", "lu" =>"ル", "le" =>"レ", "lo" =>"ロ", "l" =>"ル",
41
+ "wa" =>"ワ", "wi" =>"ウィ", "wu" =>"ゥ", "we" =>"ウェ", "wo" =>"ヲ", "w" =>"ゥ",
42
+ "wwa"=>"ウヮ", "wwi"=>"ウィ", "wwu"=>"ウゥ", "wwe"=>"ウェ", "wwo"=>"ウォ",
43
+ "xa" =>"ァ", "xi" =>"ィ", "xu" =>"ゥ", "xe" =>"ェ", "xo" =>"ォ", "x" =>"クス",
44
+ "ya" =>"ヤ", "yu" =>"ユ", "yo" =>"ヨ", "y" =>"イ",
45
+ "kya"=>"キャ", "kyu"=>"キュ", "kyo"=>"キョ",
46
+ "kja"=>"キャ", "kvu"=>"キュ", "kjo"=>"キョ",
47
+ "qja"=>"キャ", "qju"=>"キュ", "qjo"=>"キョ",
48
+ "gya"=>"ギャ", "gyu"=>"ギュ", "gyo"=>"ギョ",
49
+ "gja"=>"ギャ", "gju"=>"ギュ", "gjo"=>"ギョ",
50
+ "sya"=>"シャ", "syu"=>"シュ", "syo"=>"ショ",
51
+ "sja"=>"シャ", "sju"=>"シュ", "sjo"=>"ショ",
52
+ "zya"=>"ジャ", "zyu"=>"ジュ", "zyo"=>"ジョ",
53
+ "zja"=>"ヂャ", "zju"=>"ヂュ", "zjo"=>"ヂョ",
54
+ "jya"=>"ジャ", "jyu"=>"ジュ", "jye"=>"ジェ", "jyo"=>"ジョ",
55
+ "cyi"=>"チィ", "cyu"=>"チュ", "tyi"=>"ティ",
56
+ "tyu"=>"テュ", "tye"=>"テェ", "tja"=>"チャ",
57
+ "tju"=>"チュ", "tjo"=>"チョ", "-" =>"ー", "tsx"=>"ッ",
58
+ "dyi"=>"ディ", "dyu"=>"デュ", "dye"=>"デェ",
59
+ "dja"=>"ヂャ", "dju"=>"ヂュ", "djo"=>"ヂョ",
60
+ "nya"=>"ニャ", "nyu"=>"ニュ", "nyo"=>"ニョ",
61
+ "nva"=>"ニャ", "nvu"=>"ニュ", "nvo"=>"ニョ",
62
+ "hya"=>"ヒャ", "hyu"=>"ヒュ", "hyo"=>"ヒョ",
63
+ "bya"=>"ビャ", "byu"=>"ビュ", "byo"=>"ビョ",
64
+ "pya"=>"ピャ", "pyu"=>"ピュ", "pyo"=>"ピョ",
65
+ "fyu"=>"フュ", "vyu"=>"ヴュ",
66
+ "mya"=>"ミャ", "myu"=>"ミュ", "myo"=>"ミョ",
67
+ "mva"=>"ミャ", "mvu"=>"ミュ", "mvo"=>"ミョ",
68
+ "rya"=>"リャ", "ryu"=>"リュ", "ryo"=>"リョ",
69
+ "lya"=>"リャ", "lyu"=>"リュ", "lyo"=>"リョ",
70
+ "wyi"=>"ウイ", "wyu"=>"ウユ", "wye"=>"ウエ",
71
+ "xya"=>"ャ", "xyu"=>"ュ", "xyo"=>"ョ",
72
+ "yya"=>"イャ", "yyi"=>"イィ", "yyu"=>"イュ", "yye"=>"イェ", "yyo"=>"イョ",
73
+ "kwa"=>"クヮ", "kwi"=>"クィ", "kwu"=>"クゥ", "kwe"=>"クェ", "kwo"=>"クォ",
74
+ "kha"=>"クァ", "khi"=>"クィ", "khu"=>"クゥ", "khe"=>"クェ", "kho"=>"クォ",
75
+ "qha"=>"クァ", "qhi"=>"クィ", "qhu"=>"クゥ", "qhe"=>"クェ", "qho"=>"クォ",
76
+ "gwa"=>"グヮ", "gwi"=>"グィ", "gwu"=>"グゥ", "gwe"=>"グェ", "gwo"=>"グォ",
77
+ "gha"=>"グァ", "ghi"=>"グィ", "ghu"=>"グゥ", "ghe"=>"グェ", "gho"=>"グォ",
78
+ "sha"=>"シャ", "shi"=>"シ", "shu"=>"シュ", "she"=>"シェ", "sho"=>"ショ", "sh"=>"シュ",
79
+ "swa"=>"スワ", "swi"=>"スィ", "swu"=>"スゥ", "swe"=>"スェ", "swo"=>"スヲ",
80
+ "zha"=>"ツァ", "zhi"=>"ツィ", "zhu"=>"ズゥ", "zhe"=>"ツェ", "zho"=>"ツォ",
81
+ "zxa"=>"ツァ", "zxi"=>"ツィ", "zxu"=>"ズゥ", "zxe"=>"ツェ", "zxo"=>"ツォ",
82
+ "jxa"=>"ジァ", "jxi"=>"ジィ", "jxu"=>"ジゥ", "jxe"=>"ジェ", "jxo"=>"ジォ",
83
+ "cha"=>"チャ", "chi"=>"チ", "chu"=>"チュ", "che"=>"チェ", "cho"=>"チョ",
84
+ "twa"=>"トワ", "twi"=>"ツイ", "twu"=>"トゥ", "twe"=>"ツエ", "two"=>"ツー",
85
+ "tha"=>"スァ", "thi"=>"スィ", "thu"=>"スゥ", "the"=>"スェ", "tho"=>"スォ",
86
+ "tza"=>"ツァ", "tzi"=>"ツィ", "tzu"=>"ズー", "tze"=>"ツェ", "tzo"=>"ツォ",
87
+ "dwa"=>"ドワ", "dwi"=>"ドィ", "dwu"=>"ドゥ", "dwe"=>"ドェ", "dwo"=>"ドヲ",
88
+ "dha"=>"ダー", "dhi"=>"ジー", "dhu"=>"ドフ", "dhe"=>"ドヘ", "dho"=>"ドホ",
89
+ "dsa"=>"ドサ", "dsi"=>"ドシ", "dsu"=>"ズ", "dse"=>"ドセ", "dso"=>"ドソ",
90
+ "nxa"=>"ニァ", "nxi"=>"ニィ", "nxu"=>"ニゥ", "nxe"=>"ニェ", "nxo"=>"ニォ",
91
+ "hwa"=>"ホヮ", "hwi"=>"ホィ", "hwu"=>"ホゥ", "hwe"=>"ホェ", "hwo"=>"ホォ",
92
+ "bha"=>"バー", "bhi"=>"ビー", "bhu"=>"ブー", "bhe"=>"ベー", "bho"=>"ボー",
93
+ "pwa"=>"プヮ", "pwi"=>"プィ", "pwu"=>"プゥ", "pwe"=>"プェ", "pwo"=>"プォ",
94
+ "pha"=>"ファ", "phi"=>"フィ", "phu"=>"フュ", "phe"=>"フェ", "pho"=>"フォ",
95
+ "vha"=>"ヒャ", "vhi"=>"ヒィ", "vhu"=>"ヒュ", "vhe"=>"ヒェ", "vho"=>"ヒョ",
96
+ "mha"=>"ムァ", "mhi"=>"ムィ", "mhu"=>"ムゥ", "mhe"=>"ムェ", "mho"=>"ムォ",
97
+ "mwa"=>"ムヮ", "mwi"=>"ムィ", "mwu"=>"ムゥ", "mwe"=>"ムェ", "mwo"=>"ムォ",
98
+ "rja"=>"リャ", "rji"=>"リィ", "rju"=>"リュ", "rje"=>"リェ", "rjo"=>"リョ",
99
+ "lja"=>"リャ", "lji"=>"リィ", "lju"=>"リュ", "lje"=>"リェ", "ljo"=>"リョ",
100
+ "wha"=>"ホワ", "whi"=>"ホイ", "whu"=>"ホウ", "whe"=>"ホエ", "who"=>"ホオ",
101
+ "wxa"=>"ヮ", "wxi"=>"ヰ", "wxu"=>"ゥ", "wxe"=>"ヱ", "wxo"=>"ウォ",
102
+ "xwa"=>"ヮ", "xwi"=>"ヰ", "xwu"=>"ゥ", "xwe"=>"ヱ", "xwo"=>"ウォ"
103
+ }
104
+ }
105
+
106
+ # @private
107
+ IAST_K = {
108
+ "Ā" => "A-", "ā" => "a-",
109
+ "Ī" => "I-", "ī" => "i-",
110
+ "Ū" => "U-", "ū" => "u-",
111
+ "E" => "e-", "e" => "e-",
112
+ "Ē" => "e-", "ē" => "e-",
113
+ "O" => "O-", "o" => "o-",
114
+ "Ō" => "O-", "ō" => "o-",
115
+ "Ṛ" => "R:", "ṛ" => "r:",
116
+ "Ṝ" => "R:-", "ṝ" => "r:-",
117
+ "R̥" => "R:", "r̥" => "r:",
118
+ "R̥̄" => "R:-", "r̥̄" => "r:-",
119
+ "Ḷ" => "L:", "ḷ" => "l:",
120
+ "Ḹ" => "L:", "ḹ" => "l:",
121
+ "Ṃ" => "M:", "ṃ" => "m:",
122
+ "Ṁ" => "M:", "ṁ" => "m:",
123
+ "Ḥ" => "H:", "ḥ" => "h:",
124
+ "C" => "Ch", "c" => "ch",
125
+ "Ṭ" => "T", "ṭ" => "t",
126
+ "Kh" => "K", "kh" => "k",
127
+ "Ch" => "Ch", "ch" => "ch",
128
+ "Ṭh" => "T", "ṭh" => "t",
129
+ "Th" => "T", "th" => "t",
130
+ "Ph" => "P", "ph" => "p",
131
+ "Ḍ" => "D", "ḍ" => "d",
132
+ "Gh" => "G", "gh" => "g",
133
+ "Jh" => "J", "jh" => "j",
134
+ "Ḍh" => "D", "ḍh" => "d",
135
+ "Dh" => "D", "dh" => "d",
136
+ "Bh" => "B", "bh" => "b",
137
+ "Ṅ" => "N", "ṅ" => "n",
138
+ "Ñ" => "Ny", "ñ" => "ny",
139
+ "Ṇ" => "N", "ṇ" => "n",
140
+ "Ś" => "Sh", "ś" => "sh",
141
+ "Ṣ" => "Sh", "ṣ" => "sh"
142
+ }
143
+
144
+ # @private
145
+ AKT_keys = transliteration_keys_hash(AKT)
146
+
147
+ # @private
148
+ IAST_K_keys = transliteration_keys(IAST_K)
149
+
150
+ #
151
+ # Convert AKT string to katakana scripts
152
+ #
153
+ def self.akt(string, locale='ja')
154
+ string.gsub(/([^aeiou])\1/, 'ッ\1').
155
+ gsub(/m([fpb])/, 'n\1').
156
+ gsub(AKT_keys[locale]) {|code|
157
+ AKT[locale][code] || code
158
+ }
159
+ end
160
+
161
+ #
162
+ # Convert IAST string to katakana scripts
163
+ #
164
+ def self.iast_akt(string, locale='ja')
165
+ akt(
166
+ string.gsub(IAST_K_keys) {|code| IAST_K[code] || code}.
167
+ downcase.gsub(/(.):-?(.)|(.):-?$/) {|code|
168
+ "aeiou".index($2||':') ? $1 + $2 :
169
+ $1=='m' ? "ン#{$2}" :
170
+ code.sub(':','i')
171
+ }.
172
+ gsub(/([rm])y/, '\1uy'),
173
+ locale)
174
+ end
175
+ end
176
+ end