# HG changeset patch # User Thorsten Meyer # Date 1226707097 -3600 # Node ID 349a555729a94ae712f0bd854fa4bed5eff39761 # Parent 33337f1aca75e9d731455fd11dd563c191e25638 keep empty strings in char diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -68,6 +68,10 @@ OCTAVE_VALUE_INT_SCALAR_T::increment, OCTAVE_VALUE_INT_SCALAR_T::decrement): Convert 1 to OCTAVE_INT_T. +2008-11-15 Thorsten Meyer + + * strfns.cc (Fchar): adapt to conserve empty strings, add tests + 2008-11-12 Michael Goffioul * dirfcn.cc (Ffilesep): Make it return all file separators when 'all' diff --git a/src/strfns.cc b/src/strfns.cc --- a/src/strfns.cc +++ b/src/strfns.cc @@ -90,7 +90,10 @@ return retval; } - n_elts += s.length (); + if (s.length () > 0) + n_elts += s.length (); + else + n_elts += 1; int s_max_len = s.max_length (); @@ -108,16 +111,23 @@ int n = s.length (); - for (int j = 0; j < n; j++) - { - std::string t = s[j]; - int t_len = t.length (); + if (n > 0) + { + for (int j = 0; j < n; j++) + { + std::string t = s[j]; + int t_len = t.length (); - if (max_len > t_len) - t += std::string (max_len - t_len, ' '); + if (max_len > t_len) + t += std::string (max_len - t_len, ' '); - result[k++] = t; - } + result[k++] = t; + } + } + else + { + result[k++] = std::string (max_len, ' '); + } } retval = octave_value (result, '\''); @@ -128,6 +138,20 @@ return retval; } +/* +%!error char() +%!assert (char (100) == "d"); +%!assert (all(char (100,100) == ["d";"d"])); +%!assert (all(char ({100,100}) == ["d";"d"])); +%!assert (all(char ([100,100]) == ["dd"])); +%!assert (all(char ({100,{100}}) == ["d";"d"])); +%!assert (all(char (100, [], 100) == ["d";" ";"d"])) +%!assert (all(char ({100, [], 100}) == ["d";" ";"d"])) +%!assert (all(char ({100,{100, {""}}}) == ["d";"d";" "])) +%!assert (all(char (["a";"be"], {"c", 100}) == ["a";"be";"c";"d"])) +*/ + + DEFUN (ischar, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} ischar (@var{a})\n\