# HG changeset patch # User Kai T. Ohlhus # Date 1470817680 -7200 # Node ID 54dc5062879e3d58161d82c62cec4480c9994552 # Parent d6948923dc9b54506e99c19a39eccf8b236deb63 deblank.m: Matlab compatible behavior for empty input (bug #48725) diff -r d6948923dc9b -r 54dc5062879e scripts/strings/deblank.m --- a/scripts/strings/deblank.m Wed Aug 10 04:14:02 2016 -0400 +++ b/scripts/strings/deblank.m Wed Aug 10 10:28:00 2016 +0200 @@ -1,4 +1,4 @@ -## Copyright (C) 1996-2015 Kurt Hornik +## Copyright (C) 1996-2016 Kurt Hornik ## ## This file is part of Octave. ## @@ -47,10 +47,17 @@ print_usage (); endif - if (ischar (s)) + if (isempty (s)) + + ## Return empty objects unchanged (Matlab compatibility) + + elseif (ischar (s)) + ## Find indices of non-whitespace characters. If s is a + ## char matrix, the indices are in column major order. k = find (! isspace (s) & s != "\0"); - if (isempty (s) || isempty (k)) + if (isempty (k)) + ## Even if s was a char matrix! (Matlab compatibility) s = ""; else s = s(:,1:ceil (max (k) / rows (s))); @@ -60,7 +67,8 @@ char_idx = cellfun ("isclass", s, "char"); cell_idx = cellfun ("isclass", s, "cell"); - if (! all (char_idx | cell_idx)) + empty_idx = cellfun ("isempty", s); + if (! all (char_idx | cell_idx | empty_idx)) error ("deblank: S argument must be a string or cellstring"); endif @@ -77,14 +85,18 @@ %!assert (deblank (" f o o \0"), " f o o") +%!assert (deblank (" \t f o o \t \0"), " \t f o o") +%!assert (deblank ([" abc "; " def "]), [" abc " ; " def"]) +%!assert (deblank ([" "; " "]), "") %!assert (deblank (' '), '') %!assert (deblank (" "), "") %!assert (deblank (""), "") +%!assert (deblank ([]), []) %!assert (deblank ({}), {}) +%!assert (deblank ({[]}), {[]}) +%!assert (deblank ({[], []}), {[], []}) %!assert (deblank ({" abc ", {" def "}}), {" abc", {" def"}}) %!error deblank () %!error deblank ("foo", "bar") %!error deblank (1) -%!error deblank ({[]}) -