diff options
Diffstat (limited to 'lib/stdlib/src/edlin.erl')
-rw-r--r-- | lib/stdlib/src/edlin.erl | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/lib/stdlib/src/edlin.erl b/lib/stdlib/src/edlin.erl index 31a653bda0..6cb441dbed 100644 --- a/lib/stdlib/src/edlin.erl +++ b/lib/stdlib/src/edlin.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1996-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% -module(edlin). @@ -30,8 +30,6 @@ -import(lists, [reverse/1, reverse/2]). -%-import([nthtail/2, keysearch/3, prefix/2]). - -export([over_word/3]). @@ -281,12 +279,32 @@ do_op(_, Bef, Aft, Rs) -> %% Step over word/non-word characters pushing the stepped over ones on %% the stack. -over_word([C|Cs], Stack, N) -> + +over_word(Cs, Stack, N) -> + L = length([1 || $\' <- Cs]), + case L rem 2 of + 0 -> + over_word1(Cs, Stack, N); + 1 -> + until_quote(Cs, Stack, N) + end. + +until_quote([$\'|Cs], Stack, N) -> + {Cs, [$\'|Stack], N+1}; +until_quote([C|Cs], Stack, N) -> + until_quote(Cs, [C|Stack], N+1). + +over_word1([$\'=C|Cs], Stack, N) -> + until_quote(Cs, [C|Stack], N+1); +over_word1(Cs, Stack, N) -> + over_word2(Cs, Stack, N). + +over_word2([C|Cs], Stack, N) -> case word_char(C) of - true -> over_word(Cs, [C|Stack], N+1); + true -> over_word2(Cs, [C|Stack], N+1); false -> {[C|Cs],Stack,N} end; -over_word([], Stack, N) when is_integer(N) -> +over_word2([], Stack, N) when is_integer(N) -> {[],Stack,N}. over_non_word([C|Cs], Stack, N) -> @@ -456,8 +474,8 @@ prompt({line,Pbs,_,_}) -> %% case erlang:module_loaded(Mod) of %% true -> %% L = apply(Mod, module_info, []), -%% case keysearch(exports, 1, L) of -%% {value, {_, Exports}} -> +%% case lists:keyfind(exports, 1, L) of +%% {_, Exports} -> %% match(FuncPrefix, Exports, "("); %% _ -> %% no @@ -473,7 +491,7 @@ prompt({line,Pbs,_,_}) -> %% print_matches(Matches), %% no; %% {partial, Str} -> -%% case nthtail(length(Prefix), Str) of +%% case lists:nthtail(length(Prefix), Str) of %% [] -> %% print_matches(Matches), %% {yes, []}; @@ -481,7 +499,7 @@ prompt({line,Pbs,_,_}) -> %% {yes, Remain} %% end; %% {complete, Str} -> -%% {yes, nthtail(length(Prefix), Str) ++ Extra}; +%% {yes, lists:nthtail(length(Prefix), Str) ++ Extra}; %% no -> %% no %% end. |