when_exe 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/locales.rb +2 -1
- data/bin/when.rb.config +1 -1
- data/lib/when_exe.rb +70 -48
- data/lib/when_exe/basictypes.rb +99 -65
- data/lib/when_exe/calendartypes.rb +40 -178
- data/lib/when_exe/coordinates.rb +156 -62
- data/lib/when_exe/core/compatibility.rb +10 -0
- data/lib/when_exe/core/extension.rb +40 -0
- data/lib/when_exe/ephemeris.rb +112 -50
- data/lib/when_exe/icalendar.rb +125 -91
- data/lib/when_exe/inspect.rb +100 -48
- data/lib/when_exe/locales/ar.rb +48 -48
- data/lib/when_exe/locales/bg.rb +1 -1
- data/lib/when_exe/locales/bs.rb +4 -2
- data/lib/when_exe/locales/ca.rb +1 -1
- data/lib/when_exe/locales/en_CA.rb +3 -4
- data/lib/when_exe/locales/en_IE.rb +88 -0
- data/lib/when_exe/locales/en_US.rb +87 -0
- data/lib/when_exe/locales/es_CR.rb +84 -0
- data/lib/when_exe/locales/es_EC.rb +85 -0
- data/lib/when_exe/locales/es_PA.rb +85 -0
- data/lib/when_exe/locales/fr.rb +39 -39
- data/lib/when_exe/locales/hu.rb +15 -14
- data/lib/when_exe/locales/it.rb +1 -1
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/locales.rb +7 -0
- data/lib/when_exe/locales/lt.rb +21 -19
- data/lib/when_exe/locales/ms.rb +84 -0
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/ru.rb +1 -1
- data/lib/when_exe/locales/uk.rb +1 -1
- data/lib/when_exe/locales/ur.rb +84 -0
- data/lib/when_exe/mini_application.rb +44 -43
- data/lib/when_exe/parts/enumerator.rb +3 -3
- data/lib/when_exe/parts/geometric_complex.rb +6 -1
- data/lib/when_exe/parts/locale.rb +49 -18
- data/lib/when_exe/parts/method_cash.rb +61 -0
- data/lib/when_exe/parts/resource.rb +221 -106
- data/lib/when_exe/parts/timezone.rb +70 -33
- data/lib/when_exe/region/bahai.rb +2 -2
- data/lib/when_exe/region/balinese.rb +40 -43
- data/lib/when_exe/region/chinese.rb +93 -33
- data/lib/when_exe/region/chinese_calendar.rb +117 -1
- data/lib/when_exe/region/chinese_epoch.rb +65 -10
- data/lib/when_exe/region/christian.rb +97 -2
- data/lib/when_exe/region/ephemeric_notes.rb +353 -0
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/geologicalage.rb +171 -171
- data/lib/when_exe/region/indian.rb +18 -14
- data/lib/when_exe/region/iranian.rb +1 -1
- data/lib/when_exe/region/japanese.rb +49 -12
- data/lib/when_exe/region/japanese_notes.rb +838 -507
- data/lib/when_exe/region/japanese_residues.rb +724 -662
- data/lib/when_exe/region/javanese.rb +7 -7
- data/lib/when_exe/region/mayan.rb +19 -17
- data/lib/when_exe/region/nihon_shoki.rb +3 -3
- data/lib/when_exe/region/residue.rb +29 -28
- data/lib/when_exe/region/shire.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +87 -5
- data/lib/when_exe/region/world.rb +1 -1
- data/lib/when_exe/timestandard.rb +85 -7
- data/lib/when_exe/tmobjects.rb +32 -4
- data/lib/when_exe/tmposition.rb +104 -55
- data/lib/when_exe/tmreference.rb +157 -60
- data/lib/when_exe/version.rb +2 -2
- data/test/examples/JapanHolidays.ics +3 -3
- data/test/examples/JapanHolidaysRFC6350.ics +499 -0
- data/test/examples/Residue.m17n +3 -2
- data/test/examples/Spatial.m17n +3 -3
- data/test/examples/USA-DST.ics +27 -27
- data/test/examples/today.rb +1 -1
- data/test/test.rb +4 -2
- data/test/test/basictypes.rb +40 -15
- data/test/test/coordinates.rb +9 -4
- data/test/test/icalendar.rb +24 -14
- data/test/test/inspect.rb +5 -3
- data/test/test/parts.rb +11 -2
- data/test/test/region/chinese.rb +4 -4
- data/test/test/region/civil.rb +124 -0
- data/test/test/region/geologicalage.rb +5 -2
- data/test/test/region/indian.rb +2 -0
- data/test/test/region/japanese.rb +156 -1
- data/test/test/region/jewish.rb +3 -3
- data/test/test/region/m17n.rb +9 -9
- data/test/test/region/mayan.rb +122 -5
- data/test/test/region/residue.rb +1 -1
- data/test/test/tmobjects.rb +27 -64
- data/test/test/tmposition.rb +48 -1
- data/test/test/tmreference.rb +66 -4
- data/when_exe.gemspec +1 -1
- metadata +15 -6
data/lib/when_exe/locales/nl.rb
CHANGED
@@ -12,7 +12,7 @@ module When::BasicTypes
|
|
12
12
|
|
13
13
|
Locale_nl =
|
14
14
|
{"date"=>
|
15
|
-
{"abbr_day_names"=>["
|
15
|
+
{"abbr_day_names"=>["zo", "ma", "di", "wo", "do", "vr", "za"],
|
16
16
|
"abbr_month_names"=>
|
17
17
|
[nil,
|
18
18
|
"jan",
|
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
35
35
|
"donderdag",
|
36
36
|
"vrijdag",
|
37
37
|
"zaterdag"],
|
38
|
-
"formats"=>{"default"=>"%d
|
38
|
+
"formats"=>{"default"=>"%d-%m-%Y", "long"=>"%e %B %Y", "short"=>"%e %b"},
|
39
39
|
"month_names"=>
|
40
40
|
[nil,
|
41
41
|
"januari",
|
data/lib/when_exe/locales/ru.rb
CHANGED
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
35
35
|
"четверг",
|
36
36
|
"пятница",
|
37
37
|
"суббота"],
|
38
|
-
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"
|
38
|
+
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"%-d %B %Y", "short"=>"%-d %b"},
|
39
39
|
"month_names"=>
|
40
40
|
[nil,
|
41
41
|
"января",
|
data/lib/when_exe/locales/uk.rb
CHANGED
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
35
35
|
"четвер",
|
36
36
|
"п'ятниця",
|
37
37
|
"субота"],
|
38
|
-
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"
|
38
|
+
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"%-d %B %Y", "short"=>"%-d %b"},
|
39
39
|
"month_names"=>
|
40
40
|
[nil,
|
41
41
|
"Січень",
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2012-2013 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::BasicTypes
|
9
|
+
class M17n
|
10
|
+
|
11
|
+
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ur.yml
|
12
|
+
|
13
|
+
Locale_ur =
|
14
|
+
{"date"=>
|
15
|
+
{"abbr_day_names"=>
|
16
|
+
["اتوار", "سوموار", "منگل", "ندھ", "جمعرات", "جمعہ", "ہفتہ"],
|
17
|
+
"abbr_month_names"=>
|
18
|
+
[nil,
|
19
|
+
"جنوری",
|
20
|
+
"فروری",
|
21
|
+
"مارچ",
|
22
|
+
"اپریل",
|
23
|
+
"مئی",
|
24
|
+
"جون",
|
25
|
+
"جولائی",
|
26
|
+
"اگست",
|
27
|
+
"ستمبر",
|
28
|
+
"اکتوبر",
|
29
|
+
"نومبر",
|
30
|
+
"دسمبر"],
|
31
|
+
"day_names"=>["اتوار", "سوموار", "منگل", "ندھ", "جمعرات", "جمعہ", "ہفتہ"],
|
32
|
+
"formats"=>{"default"=>"%d %B %Y", "long"=>"%B %d، %Y", "short"=>"%d %b"},
|
33
|
+
"month_names"=>
|
34
|
+
[nil,
|
35
|
+
"جنوری",
|
36
|
+
"فروری",
|
37
|
+
"مارچ",
|
38
|
+
"اپریل",
|
39
|
+
"مئی",
|
40
|
+
"جون",
|
41
|
+
"جولائی",
|
42
|
+
"اگست",
|
43
|
+
"ستمبر",
|
44
|
+
"اکتوبر",
|
45
|
+
"نومبر",
|
46
|
+
"دسمبر"],
|
47
|
+
"order"=>[:day, :month, :year]},
|
48
|
+
"time"=>
|
49
|
+
{"am"=>"صبح",
|
50
|
+
"pm"=>"شام",
|
51
|
+
"formats"=>
|
52
|
+
{"default"=>"%a، %d %b %Y، %p %l:%M %Z",
|
53
|
+
"long"=>"%B %d، %Y %p %H:%M",
|
54
|
+
"short"=>"%d %b، %H:%M"}},
|
55
|
+
"datetime"=>
|
56
|
+
{"distance_in_words"=>
|
57
|
+
{"about_x_hours"=>
|
58
|
+
{"one"=>"تقریبا ایک گھنٹہ", "other"=>"تقریبا %{count} گھنٹے"},
|
59
|
+
"about_x_months"=>
|
60
|
+
{"one"=>"تقریبا ایک مہینہ", "other"=>"تقریبا %{count} مہینہ"},
|
61
|
+
"about_x_years"=>
|
62
|
+
{"one"=>"تقریبا ایک سال", "other"=>"تقریبا %{count} سال"},
|
63
|
+
"almost_x_years"=>
|
64
|
+
{"one"=>"تقریبا ایک سال", "other"=>"تقریبا %{count} سال"},
|
65
|
+
"half_a_minute"=>"آدھا منٹ",
|
66
|
+
"less_than_x_minutes"=>
|
67
|
+
{"one"=>"ایک مںٹ سے کم", "other"=>"%{count} مںٹوں سے کم"},
|
68
|
+
"less_than_x_seconds"=>
|
69
|
+
{"one"=>"ایک سیکنڈ سے کم", "other"=>"%{count} سیکنڈوں سے کم"},
|
70
|
+
"over_x_years"=>
|
71
|
+
{"one"=>"ایک سال سے زیادہ", "other"=>"%{count} سالوں سے زیادہ"},
|
72
|
+
"x_days"=>{"one"=>"ایک دن", "other"=>"%{count} دن"},
|
73
|
+
"x_minutes"=>{"one"=>"ایک منٹ", "other"=>"%{count} منٹ"},
|
74
|
+
"x_months"=>{"one"=>"ایک ماہ", "other"=>"%{count} ماہ"},
|
75
|
+
"x_seconds"=>{"one"=>"ایک سیکنڈ", "other"=>"%{count} سیکنڈ"}},
|
76
|
+
"prompts"=>
|
77
|
+
{"day"=>"دن",
|
78
|
+
"hour"=>"گہنٹہ",
|
79
|
+
"minute"=>"منٹ",
|
80
|
+
"month"=>"ماہ",
|
81
|
+
"second"=>"سیکنڈ",
|
82
|
+
"year"=>"سال"}}}
|
83
|
+
end
|
84
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
=begin
|
3
|
-
Copyright (C) 2013 Takashi SUGA
|
3
|
+
Copyright (C) 2013-2014 Takashi SUGA
|
4
4
|
|
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
|
@@ -102,40 +102,6 @@ module When
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
-
# JSONで通信するために Symbol を String に変換する
|
106
|
-
def _to_string(source)
|
107
|
-
case source
|
108
|
-
when Array
|
109
|
-
source.map {|e| _to_string(e)}
|
110
|
-
when Hash
|
111
|
-
result = {}
|
112
|
-
source.each_pair {|k,v|
|
113
|
-
result[k.kind_of?(Symbol) ? '_sym_' + k.to_s : k] = _to_string(v)
|
114
|
-
}
|
115
|
-
result
|
116
|
-
else
|
117
|
-
source
|
118
|
-
end
|
119
|
-
end
|
120
|
-
private :_to_string
|
121
|
-
|
122
|
-
# JSONで通信するために String を Symbol に変換する
|
123
|
-
def _to_symbol(source)
|
124
|
-
case source
|
125
|
-
when Array
|
126
|
-
source.map {|e| _to_symbol(e)}
|
127
|
-
when Hash
|
128
|
-
result = {}
|
129
|
-
source.each_pair {|k,v|
|
130
|
-
result[k =~ /^_sym_(.+)$/ ? $1.to_sym : k] = _to_symbol(v)
|
131
|
-
}
|
132
|
-
result
|
133
|
-
else
|
134
|
-
source
|
135
|
-
end
|
136
|
-
end
|
137
|
-
private :_to_symbol
|
138
|
-
|
139
105
|
# 日付の自由変換
|
140
106
|
#
|
141
107
|
# @param [Array<String>] args コマンドライン入力
|
@@ -148,7 +114,7 @@ module When
|
|
148
114
|
# @note mini_application
|
149
115
|
#
|
150
116
|
def free_conv(*args, &block)
|
151
|
-
calendars, dates, numbers, methods, output, options =
|
117
|
+
calendars, dates, numbers, methods, output, options = _parse_command(args)
|
152
118
|
|
153
119
|
if numbers.size >= 2 && calendars.size == 0
|
154
120
|
result = []
|
@@ -173,6 +139,8 @@ module When
|
|
173
139
|
_free_conv(calendars, dates, methods, output, options, &block)
|
174
140
|
end
|
175
141
|
|
142
|
+
private
|
143
|
+
|
176
144
|
# 引数読み込み
|
177
145
|
#
|
178
146
|
# args [String] コマンドライン入力
|
@@ -185,8 +153,7 @@ module When
|
|
185
153
|
# [ output [Array<Symbol, String>] 出力処理に使うメソッドのシンボルと引数 ]
|
186
154
|
# [ options [Hash{ :extent=>Boolean, :go_back=><:All || :Before(nil) || :After> }]
|
187
155
|
#
|
188
|
-
|
189
|
-
def _parse(args)
|
156
|
+
def _parse_command(args)
|
190
157
|
calendars = []
|
191
158
|
dates = []
|
192
159
|
numbers = []
|
@@ -244,16 +211,18 @@ module When
|
|
244
211
|
#
|
245
212
|
# @return [Array] 変換結果
|
246
213
|
#
|
247
|
-
# @private
|
248
214
|
def _free_conv(calendars, dates, methods, output, options, &block)
|
249
215
|
dates[0] ||= When.now
|
250
216
|
calendars[0] ||= When.Calendar('Gregorian')
|
251
217
|
result = dates.map {|date|
|
252
218
|
date = When.when?(date)
|
219
|
+
opts = {}
|
220
|
+
opts[:location] = date.location if date.location
|
221
|
+
opts[:clock ] = date.clock if date.respond_to?(:clock) && date.clock
|
253
222
|
list = calendars.dup
|
254
223
|
(0...calendars.size).to_a.reverse.each do |i|
|
255
224
|
case list[i]
|
256
|
-
when When::TM::Calendar ; list.slice!(i) if options[:extent] && !list[i].domain.include?(date)
|
225
|
+
when When::TM::Calendar ; list.slice!(i) if options[:extent] && !list[i].domain[''].include?(date)
|
257
226
|
when Class ;
|
258
227
|
else
|
259
228
|
eras = (date ^ list[i]).delete_if {|e| !e.leaf?}
|
@@ -271,12 +240,12 @@ module When
|
|
271
240
|
if methods.size == 0
|
272
241
|
list.map {|calendar|
|
273
242
|
calendar.kind_of?(Class) ?
|
274
|
-
yield(calendar.new(date)) :
|
275
|
-
yield(calendar
|
243
|
+
yield(calendar.new(date, opts.dup)) :
|
244
|
+
yield(calendar.^(calendar.rate_of_clock == date.time_standard.rate_of_clock ? date.to_i : date, opts))
|
276
245
|
}
|
277
246
|
else
|
278
247
|
list.map {|calendar|
|
279
|
-
date_for_calendar = calendar
|
248
|
+
date_for_calendar = calendar.^(calendar.rate_of_clock == date.time_standard.rate_of_clock ? date.to_i : date, opts)
|
280
249
|
methods.map {|method|
|
281
250
|
date_for_calendar.send(method[0].to_sym, method[1], &block)
|
282
251
|
}
|
@@ -286,5 +255,37 @@ module When
|
|
286
255
|
result = result[0] while result.kind_of?(Array) && result.size == 1
|
287
256
|
return result
|
288
257
|
end
|
258
|
+
|
259
|
+
# JSONで通信するために Symbol を String に変換する
|
260
|
+
def _to_string(source)
|
261
|
+
case source
|
262
|
+
when Array
|
263
|
+
source.map {|e| _to_string(e)}
|
264
|
+
when Hash
|
265
|
+
result = {}
|
266
|
+
source.each_pair {|k,v|
|
267
|
+
result[k.kind_of?(Symbol) ? '_sym_' + k.to_s : k] = _to_string(v)
|
268
|
+
}
|
269
|
+
result
|
270
|
+
else
|
271
|
+
source
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# JSONで通信するために String を Symbol に変換する
|
276
|
+
def _to_symbol(source)
|
277
|
+
case source
|
278
|
+
when Array
|
279
|
+
source.map {|e| _to_symbol(e)}
|
280
|
+
when Hash
|
281
|
+
result = {}
|
282
|
+
source.each_pair {|k,v|
|
283
|
+
result[k =~ /^_sym_(.+)$/ ? $1.to_sym : k] = _to_symbol(v)
|
284
|
+
}
|
285
|
+
result
|
286
|
+
else
|
287
|
+
source
|
288
|
+
end
|
289
|
+
end
|
289
290
|
end
|
290
291
|
end
|
@@ -262,7 +262,7 @@ module When::Parts
|
|
262
262
|
def _range(args)
|
263
263
|
if (args[0].instance_of?(Range))
|
264
264
|
range, @count_limit, others = args
|
265
|
-
raise ArgumentError, "Too many arguments" if
|
265
|
+
raise ArgumentError, "Too many arguments" if others
|
266
266
|
@first = When.when?(range.first)
|
267
267
|
@last = When.when?(range.last)
|
268
268
|
@exdate |= @last if (range.exclude_end?)
|
@@ -274,8 +274,8 @@ module When::Parts
|
|
274
274
|
end
|
275
275
|
else
|
276
276
|
@first, @direction, @count_limit, others = args
|
277
|
-
raise ArgumentError, "Too many arguments" if
|
278
|
-
raise ArgumentError, "Too few arguments" unless
|
277
|
+
raise ArgumentError, "Too many arguments" if others
|
278
|
+
raise ArgumentError, "Too few arguments" unless @first
|
279
279
|
@direction ||= :forward
|
280
280
|
@last = nil
|
281
281
|
end
|
@@ -373,7 +373,12 @@ module When::Parts
|
|
373
373
|
# 処理を first (type: When::TM::(Temporal)Position) に委譲する
|
374
374
|
#
|
375
375
|
def method_missing(name, *args, &block)
|
376
|
-
|
376
|
+
self.class.module_eval %Q{
|
377
|
+
def #{name}(*args, &block)
|
378
|
+
first.send("#{name}", *args, &block)
|
379
|
+
end
|
380
|
+
} unless When::Parts::MethodCash.escape(name)
|
381
|
+
first.send(name, *args, &block)
|
377
382
|
end
|
378
383
|
end
|
379
384
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
=begin
|
3
|
-
Copyright (C) 2011-
|
3
|
+
Copyright (C) 2011-2014 Takashi SUGA
|
4
4
|
|
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
|
@@ -45,8 +45,14 @@ module When::Parts
|
|
45
45
|
'竜' => '龍',
|
46
46
|
}
|
47
47
|
|
48
|
+
# Escape
|
48
49
|
# @private
|
49
|
-
Escape =
|
50
|
+
Escape = {
|
51
|
+
"\\\\" => "\\",
|
52
|
+
"\\n" => "\n",
|
53
|
+
"\\r" => "\r",
|
54
|
+
"\\," => ","
|
55
|
+
}
|
50
56
|
|
51
57
|
class << self
|
52
58
|
|
@@ -128,8 +134,8 @@ module When::Parts
|
|
128
134
|
# @private
|
129
135
|
def _namespace(source=nil)
|
130
136
|
case source
|
131
|
-
when Hash ;
|
132
|
-
when nil ;
|
137
|
+
when Hash ; source
|
138
|
+
when nil ; {}
|
133
139
|
when String
|
134
140
|
namespace = {}
|
135
141
|
source = $1 if (source=~/\A\s*\[?(.+?)\]?\s*\z/m)
|
@@ -139,8 +145,10 @@ module When::Parts
|
|
139
145
|
pair = [''] + v.split(/\s*=\s*/, 2)
|
140
146
|
namespace[pair[-2]] = pair[-1]
|
141
147
|
end
|
142
|
-
|
143
|
-
|
148
|
+
namespace
|
149
|
+
when When::Parts::Resource::ContentLine
|
150
|
+
source.object.names
|
151
|
+
else ; raise TypeError, "Irregal Namespace Type: #{source.class}"
|
144
152
|
end
|
145
153
|
end
|
146
154
|
|
@@ -153,7 +161,9 @@ module When::Parts
|
|
153
161
|
# source の配列化
|
154
162
|
if source.kind_of?(String)
|
155
163
|
source = $1 if (source=~/\A\s*\[?(.+?)\]?\s*\z/m)
|
156
|
-
source = source.
|
164
|
+
source = source.scan(/((?:[^\\\n\r,]|\\.)+)(?:[\n\r,]+(?!\z))?|[\n\r,]+/m).flatten.map {|token|
|
165
|
+
(token||'').gsub(/\\./) {|escape| Escape[escape] || escape}
|
166
|
+
}
|
157
167
|
end
|
158
168
|
|
159
169
|
# 各Localeの展開
|
@@ -170,10 +180,12 @@ module When::Parts
|
|
170
180
|
|
171
181
|
# 文字列 [.., .., ..] を分割する
|
172
182
|
# @private
|
173
|
-
def _split(
|
174
|
-
line =
|
183
|
+
def _split(source)
|
184
|
+
line = source.dup
|
185
|
+
return [line] unless line =~ /,/
|
186
|
+
list = []
|
175
187
|
b = d = s = 0
|
176
|
-
(
|
188
|
+
(source.length-1).downto(0) do |i|
|
177
189
|
bs = 0
|
178
190
|
(i-1).downto(0) do |k|
|
179
191
|
break unless (line[k,1] == '\\')
|
@@ -181,14 +193,18 @@ module When::Parts
|
|
181
193
|
end
|
182
194
|
next if (bs[0] == 1)
|
183
195
|
case line[i,1]
|
184
|
-
when "'"
|
185
|
-
when '"'
|
186
|
-
when ']' ; b += 1 if (d+s == 0)
|
187
|
-
when '[' ; b -= 1 if (d+s == 0 && b > 0)
|
188
|
-
when ','
|
196
|
+
when "'" ; s = 1-s if (d == 0)
|
197
|
+
when '"' ; d = 1-d if (s == 0)
|
198
|
+
when ']','}',')' ; b += 1 if (d+s == 0)
|
199
|
+
when '[','{','(' ; b -= 1 if (d+s == 0 && b > 0)
|
200
|
+
when ','
|
201
|
+
if (b+d+s == 0)
|
202
|
+
list.unshift(line[i+1..-1])
|
203
|
+
line = i > 0 ? line[0..i-1] : ''
|
204
|
+
end
|
189
205
|
end
|
190
206
|
end
|
191
|
-
|
207
|
+
list.unshift(line)
|
192
208
|
end
|
193
209
|
|
194
210
|
# locale 指定を解析して Hash の値を取り出す
|
@@ -299,6 +315,21 @@ module When::Parts
|
|
299
315
|
return nil
|
300
316
|
end
|
301
317
|
|
318
|
+
# 部分文字列の位置
|
319
|
+
#
|
320
|
+
# @param [String] other 部分文字列
|
321
|
+
#
|
322
|
+
# @return [Integer] 部分文字列の先頭のindex(いずれかの locale で部分文字列を含んだ場合)
|
323
|
+
# @return [nil] すべての locale で部分文字列を含まない場合
|
324
|
+
#
|
325
|
+
def index(other)
|
326
|
+
@keys.each do |key|
|
327
|
+
index = @names[key].index(Locale.translate(other, key))
|
328
|
+
return index if index
|
329
|
+
end
|
330
|
+
return nil
|
331
|
+
end
|
332
|
+
|
302
333
|
# 文字列の連結
|
303
334
|
#
|
304
335
|
# @param [String, When::Toos::Locale] other 連結する文字列
|
@@ -493,7 +524,7 @@ module When::Parts
|
|
493
524
|
case v
|
494
525
|
when '', /^#/ ;
|
495
526
|
when /^\/(.+)/; @access_key = $1
|
496
|
-
when /^(\*)?(?:([^=%]*?)\s*:)?\s*(.+?)\s*(=\s*(
|
527
|
+
when /^(\*)?(?:([^=%]*?)\s*:)?\s*(.+?)\s*(=\s*([^=]+?)?)?$/
|
497
528
|
asterisk[0], locale, name, assignment, ref = $~[1..5]
|
498
529
|
asterisk[1], locale, default_ref = default_locale.shift unless locale
|
499
530
|
locale ||= ''
|
@@ -523,7 +554,7 @@ module When::Parts
|
|
523
554
|
# encode URI from patterns %%(...) or %.(...)
|
524
555
|
def _encode(source)
|
525
556
|
source.gsub(/%.<.+?>/) do |match|
|
526
|
-
URI.encode(match[3..-2].gsub(match[1]
|
557
|
+
URI.encode(match[3..-2]).gsub('%', match[1..1])
|
527
558
|
end
|
528
559
|
end
|
529
560
|
end
|
@@ -51,6 +51,66 @@ module When::Parts
|
|
51
51
|
#
|
52
52
|
module MethodCash
|
53
53
|
|
54
|
+
# @private
|
55
|
+
Escape = {:to_str => true,
|
56
|
+
:to_ary => true,
|
57
|
+
:to_hash => true}
|
58
|
+
|
59
|
+
class << self
|
60
|
+
|
61
|
+
# '_' で終わるメソッドをキャッシュせずに毎回計算するか否か
|
62
|
+
#
|
63
|
+
# @return [Boolean] キャッシュしない true, キャッシュする false/nil
|
64
|
+
#
|
65
|
+
attr_accessor :direct
|
66
|
+
|
67
|
+
# When::Parts::MethodCash のグローバルな設定を行う
|
68
|
+
#
|
69
|
+
# @param [Boolean] direct '_' で終わるメソッドをキャッシュせずに毎回計算する場合 true, キャッシュする場合 false/nil
|
70
|
+
# @param [Hash{Symbol=>boolean}] escape 毎回 method_missing を発生させるメソッドを true にして指定
|
71
|
+
# @param [false, nil] escape to_str, to_ary, to_hash のみ毎回 method_missing を発生させる
|
72
|
+
# @param [true] escape すべて毎回 method_missing を発生させる
|
73
|
+
#
|
74
|
+
# @return [void]
|
75
|
+
#
|
76
|
+
# @note When::TM::Calendar クラスの一部はキャッシュ使用を前提としているため direct=true では動作しません
|
77
|
+
#
|
78
|
+
def _setup_(direct=false, escape=false)
|
79
|
+
@direct = direct
|
80
|
+
case escape
|
81
|
+
when true
|
82
|
+
instance_eval %Q{
|
83
|
+
def escape(method)
|
84
|
+
true
|
85
|
+
end
|
86
|
+
}
|
87
|
+
when Hash
|
88
|
+
@escape = Escape.merge(escape)
|
89
|
+
instance_eval %Q{
|
90
|
+
def escape(method)
|
91
|
+
@escape[method]
|
92
|
+
end
|
93
|
+
}
|
94
|
+
else
|
95
|
+
instance_eval %Q{
|
96
|
+
def escape(method)
|
97
|
+
Escape.key?(method)
|
98
|
+
end
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# method_missing メソッドを forward するか否か
|
104
|
+
#
|
105
|
+
# @param [Symbol] method メソッドシンボル
|
106
|
+
#
|
107
|
+
# @return [boolean] true - しない, false/nil - する
|
108
|
+
#
|
109
|
+
def escape(method)
|
110
|
+
Escape.key?(method)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
54
114
|
alias :method_missing_ :method_missing
|
55
115
|
|
56
116
|
#
|
@@ -65,6 +125,7 @@ module When::Parts
|
|
65
125
|
def method_missing(name, *args, &block)
|
66
126
|
|
67
127
|
return method_missing_(name, *args, &block) unless respond_to?("#{name}_", true)
|
128
|
+
return send("#{name}_", *args, &block) if MethodCash.direct
|
68
129
|
|
69
130
|
if ((name.to_s =~ /^(_*)(.+?)_to_(.+)$/) && respond_to?("#{$1}#{$3}_to_#{$2}_", true))
|
70
131
|
prefix, from, to = $~[1..3]
|