diff --git a/modules/matlab/include/opencv2/matlab/mxarray.hpp b/modules/matlab/include/opencv2/matlab/mxarray.hpp index 3998459ecb..c048b030fb 100644 --- a/modules/matlab/include/opencv2/matlab/mxarray.hpp +++ b/modules/matlab/include/opencv2/matlab/mxarray.hpp @@ -475,6 +475,7 @@ public: * if (arguments.variantIs("elementwise")) { * // call elementwise sum() * } + * \endcode */ class ArgumentParser { private: @@ -550,12 +551,34 @@ private: return valid_; } String toString(const String& method_name="f") const { + int req_begin = 0, req_end = 0, opt_begin = 0, opt_end = 0; std::ostringstream s; + // f(...) s << method_name << "("; + // required arguments + req_begin = s.str().size(); for (size_t n = 0; n < Nreq_; ++n) { s << "src" << n+1 << (n != Nreq_-1 ? ", " : ""); } + req_end = s.str().size(); if (Nreq_ && Nopt_) s << ", "; + // optional arguments + opt_begin = s.str().size(); for (size_t n = 0; n < keys_.size(); ++n) { s << "'" << keys_[n] << "', " << keys_[n] << (n != Nopt_-1 ? ", " : ""); } + opt_end = s.str().size(); s << ");"; + if (Nreq_ + Nopt_ == 0) return s.str(); + // underscores + String under = String(req_begin, ' ') + String(req_end-req_begin, '-') + + String(std::max(opt_begin-req_end,0), ' ') + String(opt_end-opt_begin, '-'); + s << "\n" << under; + // required and optional sets + String req_set(req_end-req_begin, ' '); + String opt_set(opt_end-opt_begin, ' '); + if (!req_set.empty() && req_set.size() < 8) req_set.replace((req_set.size()-3)/2, 3, "req"); + if (req_set.size() > 7) req_set.replace((req_set.size()-8)/2, 8, "required"); + if (!opt_set.empty() && opt_set.size() < 8) opt_set.replace((opt_set.size()-3)/2, 3, "opt"); + if (opt_set.size() > 7) opt_set.replace((opt_set.size()-8)/2, 8, "optional"); + String set = String(req_begin, ' ') + req_set + String(std::max(opt_begin-req_end,0), ' ') + opt_set; + s << "\n" << set; return s.str(); } };