Mercurial > octave
changeset 33590:976638dd9021
Show ellipsis at end of long arrays for short_disp (bug #65637).
* ov-base.h (octave_base_value::short_disp): Print dimensions and class.
* ov-base-diag.cc (octave_base_diag<DMT, MT>::short_disp),
ov-base-mat.cc (octave_base_matrix<MT>::short_disp),
ov-cell.cc (octave_cell::short_disp),
ov-perm.cc (octave_perm_matrix::short_disp),
ov-str-mat.cc (octave_char_matrix_str::short_disp): Append ellipsis if number
of displayed elements is truncated.
* ov-classdef.cc (octave_classdef::print_raw): Use `short_print` for any type
of classdef property.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 24 Apr 2024 15:24:33 -0400 |
parents | f07a7fe7bd51 |
children | d26bc20bac10 |
files | libinterp/octave-value/ov-base-diag.cc libinterp/octave-value/ov-base-mat.cc libinterp/octave-value/ov-base.h libinterp/octave-value/ov-cell.cc libinterp/octave-value/ov-classdef.cc libinterp/octave-value/ov-perm.cc libinterp/octave-value/ov-str-mat.cc |
diffstat | 7 files changed, 84 insertions(+), 47 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-base-diag.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-base-diag.cc Wed Apr 24 15:24:33 2024 -0400 @@ -598,8 +598,6 @@ octave_idx_type max_elts = 10; octave_idx_type elts = 0; - octave_idx_type nel = m_matrix.numel (); - octave_idx_type nr = m_matrix.rows (); octave_idx_type nc = m_matrix.columns (); @@ -617,25 +615,37 @@ os << tmp.substr (pos); else if (! tmp.empty ()) os << tmp[0]; - - if (++elts >= max_elts) - goto done; + elts++; if (j < nc - 1) - os << ", "; + { + os << ", "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } - if (i < nr - 1 && elts < max_elts) - os << "; "; + if (i < nr - 1) + { + os << "; "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } done: - - if (nel <= max_elts) - os << ']'; + os << ']'; } else - os << "..."; + octave_base_value::short_disp (os); } template <typename DMT, typename MT>
--- a/libinterp/octave-value/ov-base-mat.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-base-mat.cc Wed Apr 24 15:24:33 2024 -0400 @@ -511,8 +511,6 @@ octave_idx_type max_elts = 10; octave_idx_type elts = 0; - octave_idx_type nel = m_matrix.numel (); - octave_idx_type nr = m_matrix.rows (); octave_idx_type nc = m_matrix.columns (); @@ -530,25 +528,37 @@ os << tmp.substr (pos); else if (! tmp.empty ()) os << tmp[0]; - - if (++elts >= max_elts) - goto done; + elts++; if (j < nc - 1) - os << ", "; + { + os << ", "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } - if (i < nr - 1 && elts < max_elts) - os << "; "; + if (i < nr - 1) + { + os << "; "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } done: - - if (nel <= max_elts) - os << ']'; + os << ']'; } else - os << "..."; + octave_base_value::short_disp (os); } template <typename MT>
--- a/libinterp/octave-value/ov-base.h Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-base.h Wed Apr 24 15:24:33 2024 -0400 @@ -758,7 +758,11 @@ print_with_name (std::ostream& output_buf, const std::string& name, bool print_padding = true); - virtual void short_disp (std::ostream& os) const { os << "..."; } + virtual void short_disp (std::ostream& os) const + { + dim_vector dv = dims (); + os << "[" << dv.str () << " " << class_name () << "]"; + } virtual OCTINTERP_API float_display_format get_edit_display_format () const;
--- a/libinterp/octave-value/ov-cell.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-cell.cc Wed Apr 24 15:24:33 2024 -0400 @@ -699,7 +699,10 @@ void octave_cell::short_disp (std::ostream& os) const { - os << (m_matrix.isempty () ? "{}" : "..."); + // octave_base_matrix<octave_value>::short_disp is not appropriate for + // cell arrays. + + octave_base_value::short_disp (os); } #define CELL_ELT_TAG "<cell-element>"
--- a/libinterp/octave-value/ov-classdef.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-classdef.cc Wed Apr 24 15:24:33 2024 -0400 @@ -399,13 +399,7 @@ octave_value val = prop.get_value (m_object, false); - if (val.ndims () == 2 && val.rows () == 1 && (val.isnumeric () || val.islogical () || val.is_string ())) - val.short_disp (os); - else - { - dim_vector dims = val.dims (); - os << "[" << dims.str () << " " << val.class_name () << "]"; - } + val.short_disp (os); } newline (os);
--- a/libinterp/octave-value/ov-perm.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-perm.cc Wed Apr 24 15:24:33 2024 -0400 @@ -510,8 +510,6 @@ octave_idx_type max_elts = 10; octave_idx_type elts = 0; - octave_idx_type nel = m_matrix.numel (); - octave_idx_type nr = m_matrix.rows (); octave_idx_type nc = m_matrix.columns (); @@ -530,25 +528,37 @@ os << tmp.substr (pos); else if (! tmp.empty ()) os << tmp[0]; - - if (++elts >= max_elts) - goto done; + elts++; if (j < nc - 1) - os << ", "; + { + os << ", "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } - if (i < nr - 1 && elts < max_elts) - os << "; "; + if (i < nr - 1) + { + os << "; "; + + if (elts >= max_elts) + { + os << "..."; + goto done; + } + } } done: - - if (nel <= max_elts) - os << ']'; + os << ']'; } else - os << "..."; + octave_base_value::short_disp (os); } octave_base_value *
--- a/libinterp/octave-value/ov-str-mat.cc Thu May 16 08:32:01 2024 -0700 +++ b/libinterp/octave-value/ov-str-mat.cc Wed Apr 24 15:24:33 2024 -0400 @@ -285,9 +285,15 @@ std::string tmp = chm.row_as_string (0); // FIXME: should this be configurable? - std::size_t max_len = 100; + std::size_t max_len = 50; + + char quote_char = is_sq_string () ? '\'' : '"'; - os << (tmp.length () > max_len ? tmp.substr (0, 100) : tmp); + os << quote_char; + if (tmp.length () > max_len) + os << tmp.substr (0, 50) << quote_char << " (truncated)"; + else + os << tmp << quote_char; } }