Mercurial > hg > octave-nkf
comparison scripts/path/rmpath.m @ 5732:17d87fbd7010
[project @ 2006-04-04 17:50:46 by jwe]
author | jwe |
---|---|
date | Tue, 04 Apr 2006 17:50:46 +0000 |
parents | |
children | 6b345b4961ca |
comparison
equal
deleted
inserted
replaced
5731:c7d5a534afa5 | 5732:17d87fbd7010 |
---|---|
1 ## Copyright (C) 2000 Etienne Grossmann | |
2 ## | |
3 ## This program is free software; you can redistribute it and/or modify | |
4 ## it under the terms of the GNU General Public License as published by | |
5 ## the Free Software Foundation; either version 2 of the License, or | |
6 ## (at your option) any later version. | |
7 ## | |
8 ## This program is distributed in the hope that it will be useful, | |
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 ## GNU General Public License for more details. | |
12 ## | |
13 ## You should have received a copy of the GNU General Public License | |
14 ## along with this program; if not, write to the Free Software | |
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
16 | |
17 ## -*- texinfo -*- | |
18 ## @deftypefn {Function File} {} rmpath(dir1, ...) | |
19 ## Removes dir1,... from the current LOADPATH. | |
20 ## | |
21 ## newpath = rmpath(path, dir1, ...) | |
22 ## | |
23 ## Removes dir1,... from path. | |
24 ## @end deftypefn | |
25 | |
26 ## Author: Etienne Grossmann <etienne@cs.uky.edu> | |
27 ## Last modified: June 2005 | |
28 | |
29 ##PKGADD: mark_as_command rmpath | |
30 | |
31 function ret = rmpath (varargin) | |
32 | |
33 if (nargout == 0) | |
34 path = LOADPATH; | |
35 else | |
36 path = varargin{1}; | |
37 endif | |
38 | |
39 strip_system_path = 0; | |
40 for arg = nargout + 1:length (varargin) | |
41 p = varargin{arg}; | |
42 lp = length (p); | |
43 | |
44 ## '' is the system path | |
45 if (lp==0) | |
46 strip_system_path = 1; | |
47 endif | |
48 | |
49 ## strip '...:p:...' -> '...:...' | |
50 lo = 0 ; | |
51 while (lo != length (path)) # Loop while I can substitute | |
52 lo = length (path); | |
53 path = strrep (path, sprintf(":%s:", p), ":"); | |
54 endwhile | |
55 | |
56 ## strip 'p:...' and '...:p' -> '...' | |
57 if (length (path) > lp+1 && strcmp (path(1:lp+1), sprintf ("%s:", p))) | |
58 path = path(lp+2:end); | |
59 endif | |
60 if (length (path) > lp+1 && strcmp (path(end-lp:end), sprintf (":%s", p))) | |
61 path = path(1:end-lp-1); | |
62 endif | |
63 | |
64 ## strip 'p:' and ':p' -> ':' | |
65 if (length (path) == lp+1 && (strcmp (path, sprintf("%s:", p)) || strcmp (path, sprintf (":%s", p)))) | |
66 path = ':'; | |
67 endif | |
68 | |
69 ## strip 'p' -> '' | |
70 if (length (path) == lp && strcmp (path, p)) | |
71 path = ''; | |
72 endif | |
73 | |
74 endfor | |
75 | |
76 if (strip_system_path && strcmp (path, ':')) | |
77 path = ''; | |
78 endif | |
79 | |
80 if (nargout > 0) | |
81 ret = path; | |
82 elseif (! strcmp (LOADPATH, path)) | |
83 LOADPATH = path; | |
84 endif | |
85 | |
86 endfunction | |
87 | |
88 %!assert(rmpath(':',''),''); | |
89 %!assert(rmpath('hello:',''),'hello'); | |
90 %!assert(rmpath('hello:world',''),'hello:world'); | |
91 %!assert(rmpath(':hello:world',''),'hello:world'); | |
92 %!assert(rmpath(':hello:world:',''),'hello:world'); | |
93 %!assert(rmpath(':hello::world:',''),'hello:world'); | |
94 | |
95 %!assert(rmpath('hello','hello'),''); | |
96 %!assert(rmpath(':hello','hello'),':'); | |
97 %!assert(rmpath('hello:','hello'),':'); | |
98 %!assert(rmpath('hello:hello','hello'),''); | |
99 %!assert(rmpath('hello:hello:hello','hello'),''); | |
100 %!assert(rmpath('hello:hello:hello:hello','hello'),''); | |
101 %!assert(rmpath(':hello:hello','hello'),':'); | |
102 %!assert(rmpath('hello:hello:','hello'),':'); | |
103 %!assert(rmpath('hello','world'),'hello'); | |
104 %!assert(rmpath(':hello','','hello'),''); | |
105 %!assert(rmpath(':hello','hello',''),''); | |
106 | |
107 %!assert(rmpath('hello:world','hello','world'),''); | |
108 %!assert(rmpath('hello:world:','hello','world'),':'); | |
109 %!assert(rmpath(':hello:world:','hello','world'),':'); | |
110 | |
111 %!assert(rmpath('hello:world','','hello','world'),''); | |
112 %!assert(rmpath('hello:world:','','hello','world'),''); | |
113 %!assert(rmpath(':hello:world:','','hello','world'),''); | |
114 | |
115 %!assert(rmpath('hello:world','hello'),'world'); | |
116 %!assert(rmpath('hello:world','world'),'hello'); | |
117 %!assert(rmpath('hello:world:','hello'),'world:'); | |
118 %!assert(rmpath('hello:world:','world'),'hello:'); | |
119 %!assert(rmpath(':hello:world:','hello'),':world:'); | |
120 %!assert(rmpath(':hello:world:','world'),':hello:'); |