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
@@ -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