libpath-ruby 0.2.2.1 → 0.2.2.3

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.
@@ -1,286 +1,297 @@
1
1
 
2
+ # :stopdoc:
3
+
4
+
2
5
  require 'libpath/internal_/string'
3
6
  require 'libpath/internal_/windows/drive'
4
7
 
5
- module LibPath # :nodoc:
8
+
9
+ module LibPath
6
10
  # @!visibility private
7
11
  module Internal_ # :nodoc: all
8
12
  # @!visibility private
9
13
  module Windows # :nodoc:
10
14
 
11
- # @!visibility private
12
- module Form # :nodoc:
13
-
14
- # [INTERNAL] This function is undocumented, and subject to change at any
15
- # time
16
- #
17
15
  # @!visibility private
18
- def self.char_is_path_name_separator? c # :nodoc:
16
+ module Form # :nodoc:
19
17
 
20
- '/' == c || '\\' == c
21
- end
18
+ # [INTERNAL] This function is undocumented, and subject to change at any
19
+ # time
20
+ #
21
+ # @!visibility private
22
+ def self.char_is_path_name_separator? c # :nodoc:
22
23
 
23
- # [INTERNAL] This function is undocumented, and subject to change at any
24
- # time
25
- #
26
- # @!visibility private
27
- def self.append_trailing_slash s # :nodoc:
24
+ '/' == c || '\\' == c
25
+ end
28
26
 
29
- return s if self.char_is_path_name_separator?(s[-1])
27
+ # [INTERNAL] This function is undocumented, and subject to change at any
28
+ # time
29
+ #
30
+ # @!visibility private
31
+ def self.append_trailing_slash s # :nodoc:
30
32
 
31
- s + '\\'
32
- end
33
+ return s if self.char_is_path_name_separator?(s[-1])
33
34
 
34
- # [INTERNAL] This function is undocumented, and subject to change at any
35
- # time
36
- #
37
- # @!visibility private
38
- def self.get_trailing_slash s # :nodoc:
35
+ s + '\\'
36
+ end
39
37
 
40
- last = s[-1]
38
+ # [INTERNAL] This function is undocumented, and subject to change at any
39
+ # time
40
+ #
41
+ # @!visibility private
42
+ def self.get_trailing_slash s # :nodoc:
41
43
 
42
- self.char_is_path_name_separator?(last) ? last : nil
43
- end
44
+ last = s[-1]
44
45
 
45
- # [INTERNAL] This function is undocumented, and subject to change at any
46
- # time
47
- #
48
- # @!visibility private
49
- def self.has_trailing_slash? s # :nodoc:
46
+ self.char_is_path_name_separator?(last) ? last : nil
47
+ end
50
48
 
51
- self.char_is_path_name_separator?(s[-1])
52
- end
49
+ # [INTERNAL] This function is undocumented, and subject to change at any
50
+ # time
51
+ #
52
+ # @!visibility private
53
+ def self.has_trailing_slash? s # :nodoc:
53
54
 
54
- # [INTERNAL] This function is undocumented, and subject to change at any
55
- # time
56
- #
57
- # @!visibility private
58
- def self.trim_trailing_slash s # :nodoc:
55
+ self.char_is_path_name_separator?(s[-1])
56
+ end
59
57
 
60
- return s unless self.char_is_path_name_separator?(s[-1])
58
+ # [INTERNAL] This function is undocumented, and subject to change at any
59
+ # time
60
+ #
61
+ # @!visibility private
62
+ def self.trim_trailing_slash s # :nodoc:
61
63
 
62
- s.chop
63
- end
64
+ return s unless self.char_is_path_name_separator?(s[-1])
64
65
 
65
- # [INTERNAL] This function is undocumented, and subject to change at any
66
- # time
67
- #
68
- # @!visibility private
69
- def self.elide_redundant_path_name_separators s # :nodoc:
66
+ s.chop
67
+ end
70
68
 
71
- s.gsub(/[\\\/]{2,}/, '\\')
72
- end
69
+ # [INTERNAL] This function is undocumented, and subject to change at any
70
+ # time
71
+ #
72
+ # @!visibility private
73
+ def self.elide_redundant_path_name_separators s # :nodoc:
73
74
 
74
- # [INTERNAL] This function is undocumented, and subject to change at any
75
- # time
76
- #
77
- # @!visibility private
78
- def self.elide_redundant_path_name_separators! s # :nodoc:
79
-
80
- s.gsub!(/[\\\/]{2,}/, '\\')
81
-
82
- s
83
- end
84
-
85
- # [INTERNAL] This function is undocumented, and subject to change at any
86
- # time
87
- #
88
- # === Signature
89
- #
90
- # * *Parameters:*
91
- # - +s+ (String)
92
- #
93
- # === Return
94
- # A 3-element array, consisting of [ volume, remainder, form ]
95
- #
96
- # @!visibility private
97
- def self.get_windows_volume s # :nodoc:
98
-
99
- # 0. not matched
100
- # 1. X:
101
- # 2. \\server\share
102
- # 3. \\?\X:
103
- # 4. \\?\server\share
104
- # 5. \\?\UNC\server\share
105
- # 6. \\.\device
75
+ s.gsub(/[\\\/]{2,}/, '\\')
76
+ end
106
77
 
107
- if '\\' == s[0]
78
+ # [INTERNAL] This function is undocumented, and subject to change at any
79
+ # time
80
+ #
81
+ # @!visibility private
82
+ def self.elide_redundant_path_name_separators! s # :nodoc:
108
83
 
109
- if '\\' == s[1]
84
+ s.gsub!(/[\\\/]{2,}/, '\\')
110
85
 
111
- case s[2]
112
- when '?'
86
+ s
87
+ end
113
88
 
114
- if '\\' == s[3]
89
+ # [INTERNAL] This function is undocumented, and subject to change at any
90
+ # time
91
+ #
92
+ # === Signature
93
+ #
94
+ # * *Parameters:*
95
+ # - +s+ (String)
96
+ #
97
+ # === Return
98
+ # A 3-element array, consisting of [ volume, remainder, form ]
99
+ #
100
+ # @!visibility private
101
+ def self.get_windows_volume s # :nodoc:
102
+
103
+ _Drive = ::LibPath::Internal_::Windows::Drive
104
+ _Form = ::LibPath::Internal_::Windows::Form
105
+
106
+ # 0. not matched
107
+ # 1. X:
108
+ # 2. \\server\share
109
+ # 3. \\?\X:
110
+ # 4. \\?\server\share
111
+ # 5. \\?\UNC\server\share
112
+ # 6. \\.\device
115
113
 
116
- if ':' == s[5] && ::LibPath::Internal_::Windows::Drive.character_is_drive_letter?(s[4])
114
+ if '\\' == s[0]
117
115
 
118
- # 3. \\?\X:
116
+ if '\\' == s[1]
119
117
 
120
- return [ s[0..5], s[6..-1], :form_3 ]
121
- end
118
+ case s[2]
119
+ when '?'
122
120
 
123
- if 'U' == s[4] && 'N' == s[5] && 'C' == s[6]
121
+ if '\\' == s[3]
124
122
 
125
- # 5. \\?\UNC\server\share
123
+ if ':' == s[5] && _Drive.character_is_drive_letter?(s[4])
126
124
 
127
- if s =~ /^\\\\\?\\UNC\\[^\\]+\\[^\\\/]+/
125
+ # 3. \\?\X:
128
126
 
129
- return [ $&, $', :form_5 ]
127
+ return [ s[0..5], s[6..-1], :form_3 ]
130
128
  end
131
- else
132
-
133
- if s =~ /^\\\\\?\\[^\\]+\\[^\\\/]+/
134
129
 
135
- # 4. \\?\server\share
136
-
137
- return [ $&, $', :form_4 ]
138
- end
139
- end
130
+ if 'U' == s[4] && 'N' == s[5] && 'C' == s[6]
140
131
 
141
- return [ s, '', :malformed ]
142
- end
143
- when '.'
132
+ # 5. \\?\UNC\server\share
144
133
 
145
- if s =~ /^\\\\\.\\[^\\]+/
134
+ if s =~ /^\\\\\?\\UNC\\[^\\]+\\[^\\\/]+/
146
135
 
147
- # 6. \\.\device
136
+ return [ $&, $', :form_5 ]
137
+ end
138
+ else
148
139
 
149
- return [ $&, $', :form_6 ]
150
- end
151
- else
140
+ if s =~ /^\\\\\?\\[^\\]+\\[^\\\/]+/
152
141
 
153
- if s =~ /^\\\\[^\\]+\\[^\\\/]+/
142
+ # 4. \\?\server\share
154
143
 
155
- # 2. \\server\share
144
+ return [ $&, $', :form_4 ]
145
+ end
146
+ end
156
147
 
157
- return [ $&, $', :form_2 ]
148
+ return [ s, '', :malformed ]
158
149
  end
159
- end
160
- else
150
+ when '.'
161
151
 
162
- end
163
- elsif ':' == s[1] && ::LibPath::Internal_::Windows::Drive.character_is_drive_letter?(s[0])
152
+ if s =~ /^\\\\\.\\[^\\]+/
164
153
 
165
- # 1. X:
154
+ # 6. \\.\device
166
155
 
167
- return [ s[0..1], s[2..-1], :form_1 ]
168
- end
156
+ return [ $&, $', :form_6 ]
157
+ end
158
+ else
169
159
 
170
- # 0. not matched
171
-
172
- [ nil, s, :form_0 ]
173
- end
174
-
175
- # [INTERNAL] This function is undocumented, and subject to change at any
176
- # time
177
- #
178
- # Returns tuple of:
179
- #
180
- # 0. source path (with redundant path name separators elided)
181
- # 1. Windows volume (which is always nil)
182
- # 2. Directory
183
- # 3. Basename
184
- # 4. Stem
185
- # 5. Extension
186
- # 6. Directory parts
187
- # 7. Directory path parts
188
- #
189
- # @!visibility private
190
- def self.split_path s # :nodoc:
160
+ if s =~ /^\\\\[^\\]+\\[^\\\/]+/
161
+
162
+ # 2. \\server\share
191
163
 
192
- f1_volume = nil
193
- f2_directory = nil
194
- f3_basename = nil
195
- f4_stem = nil
196
- f5_extension = nil
197
- f6_dir_parts = []
198
- f7_all_parts = []
164
+ return [ $&, $', :form_2 ]
165
+ end
166
+ end
167
+ else
199
168
 
200
- f1_volume, rem, frm = self.get_windows_volume s
169
+ end
170
+ elsif ':' == s[1] && _Drive.character_is_drive_letter?(s[0])
201
171
 
202
- self.elide_redundant_path_name_separators! rem
172
+ # 1. X:
203
173
 
204
- f1_volume.define_singleton_method(:form) { frm } if f1_volume
174
+ return [ s[0..1], s[2..-1], :form_1 ]
175
+ end
205
176
 
206
- if :malformed == frm
177
+ # 0. not matched
207
178
 
208
- return [ s, f1_volume, nil, nil, nil, nil, [], [] ]
179
+ [ nil, s, :form_0 ]
209
180
  end
210
181
 
211
- unless rem.empty?
182
+ # [INTERNAL] This function is undocumented, and subject to change at any
183
+ # time
184
+ #
185
+ # Returns tuple of:
186
+ #
187
+ # 0. source path (with redundant path name separators elided)
188
+ # 1. Windows volume (which is always nil)
189
+ # 2. Directory
190
+ # 3. Basename
191
+ # 4. Stem
192
+ # 5. Extension
193
+ # 6. Directory parts
194
+ # 7. Directory path parts
195
+ #
196
+ # @!visibility private
197
+ def self.split_path s # :nodoc:
198
+
199
+ _String = ::LibPath::Internal_::String
200
+
201
+ f1_volume = nil
202
+ f2_directory = nil
203
+ f3_basename = nil
204
+ f4_stem = nil
205
+ f5_extension = nil
206
+ f6_dir_parts = []
207
+ f7_all_parts = []
208
+
209
+ f1_volume, rem, frm = self.get_windows_volume s
210
+
211
+ self.elide_redundant_path_name_separators! rem
212
+
213
+ f1_volume.define_singleton_method(:form) { frm } if f1_volume
214
+
215
+ if :malformed == frm
216
+
217
+ return [ s, f1_volume, nil, nil, nil, nil, [], [] ]
218
+ end
212
219
 
213
- ri_slash = ::LibPath::Internal_::String.rindex2(rem, '/', '\\')
220
+ unless rem.empty?
214
221
 
215
- if ri_slash
222
+ ri_slash = _String.rindex2(rem, '/', '\\')
216
223
 
217
- f2_directory = rem[0..ri_slash]
218
- f3_basename = rem[(1 + ri_slash)..-1]
219
- else
224
+ if ri_slash
220
225
 
221
- f2_directory = nil
222
- f3_basename = rem
223
- end
226
+ f2_directory = rem[0..ri_slash]
227
+ f3_basename = rem[(1 + ri_slash)..-1]
228
+ else
224
229
 
225
- case f3_basename
226
- when '.', '..'
230
+ f2_directory = nil
231
+ f3_basename = rem
232
+ end
233
+
234
+ case f3_basename
235
+ when '.', '..'
227
236
 
228
- f4_stem = f3_basename
229
- f5_extension = nil
230
- else
237
+ f4_stem = f3_basename
238
+ f5_extension = nil
239
+ else
231
240
 
232
- ri_dot = f3_basename.rindex('.')
241
+ ri_dot = f3_basename.rindex('.')
233
242
 
234
- if ri_dot
243
+ if ri_dot
235
244
 
236
- f4_stem = f3_basename[0...ri_dot]
237
- f5_extension = f3_basename[ri_dot..-1]
238
- else
245
+ f4_stem = f3_basename[0...ri_dot]
246
+ f5_extension = f3_basename[ri_dot..-1]
247
+ else
239
248
 
240
- f4_stem = f3_basename
241
- f5_extension = nil
249
+ f4_stem = f3_basename
250
+ f5_extension = nil
251
+ end
242
252
  end
243
- end
244
253
 
245
- case f2_directory
246
- when nil
254
+ case f2_directory
255
+ when nil
247
256
 
248
- ;
249
- when '\\', '/'
257
+ ;
258
+ when '\\', '/'
250
259
 
251
- f6_dir_parts = [ f2_directory ]
252
- else
260
+ f6_dir_parts = [ f2_directory ]
261
+ else
253
262
 
254
- parts = f2_directory.split(/([\\\/])/)
263
+ parts = f2_directory.split(/([\\\/])/)
255
264
 
256
- f6_dir_parts = []
265
+ f6_dir_parts = []
257
266
 
258
- (0...(parts.size / 2)).each do |ix|
267
+ (0...(parts.size / 2)).each do |ix|
259
268
 
260
- f6_dir_parts << parts[2 * ix + 0] + parts[2 * ix + 1]
269
+ f6_dir_parts << parts[2 * ix + 0] + parts[2 * ix + 1]
270
+ end
261
271
  end
262
- end
263
272
 
264
- if f1_volume
273
+ if f1_volume
265
274
 
266
- f7_all_parts = f6_dir_parts.dup
275
+ f7_all_parts = f6_dir_parts.dup
267
276
 
268
- f7_all_parts[0] = f1_volume + f7_all_parts[0].to_s
269
- else
277
+ f7_all_parts[0] = f1_volume + f7_all_parts[0].to_s
278
+ else
270
279
 
271
- f7_all_parts = f6_dir_parts
280
+ f7_all_parts = f6_dir_parts
281
+ end
272
282
  end
273
- end
274
283
 
275
284
 
276
- [ "#{f1_volume}#{rem}", f1_volume, f2_directory, f3_basename, f4_stem, f5_extension, f6_dir_parts, f7_all_parts ].map { |v| ::String === v && v.empty? ? nil : v }
277
- end
278
- end # module Form
279
-
285
+ [ "#{f1_volume}#{rem}", f1_volume, f2_directory, f3_basename, f4_stem, f5_extension, f6_dir_parts, f7_all_parts ].map { |v| ::String === v && v.empty? ? nil : v }
286
+ end
287
+ end # module Form
280
288
  end # module Windows
281
289
  end # module Internal_
282
290
  end # module LibPath
283
291
 
284
292
 
293
+ # :startdoc:
294
+
295
+
285
296
  # ############################## end of file ############################# #
286
297
 
@@ -1,5 +1,5 @@
1
1
 
2
- # Top-level module for the *libpath.Ruby*
2
+ # Top-level module for the *libpath.Ruby* library
3
3
  module LibPath
4
4
 
5
5
  end # module LibPath