Line data Source code
1 : // SPDX-License-Identifier: BSD-3-Clause 2 : // Copyright (c) 2023 Scipp contributors (https://github.com/scipp) 3 : /// @file 4 : /// @author Neil Vaytet 5 : #include "docstring.h" 6 : 7 198 : void Docstring::update(std::string &field, const std::string &s, 8 : const bool append) { 9 198 : if (append) 10 0 : field += s; 11 : else 12 198 : field = s; 13 198 : } 14 : 15 66 : Docstring &Docstring::description(const std::string &s, const bool append) { 16 66 : update(m_description, s, append); 17 66 : return *this; 18 : } 19 : 20 0 : Docstring &Docstring::raises(const std::string &s, const bool append) { 21 0 : update(m_raises, s, append); 22 0 : return *this; 23 : } 24 : 25 0 : Docstring &Docstring::seealso(const std::string &s, const bool append) { 26 0 : update(m_seealso, s, append); 27 0 : return *this; 28 : } 29 : 30 66 : Docstring &Docstring::returns(const std::string &s, const bool append) { 31 66 : update(m_returns, s, append); 32 66 : return *this; 33 : } 34 : 35 66 : Docstring &Docstring::rtype(const std::string &s, const bool append) { 36 66 : update(m_rtype, s, append); 37 66 : return *this; 38 : } 39 : 40 72 : Docstring &Docstring::param(const std::string &name, const std::string &about, 41 : const std::string &type) { 42 72 : if (m_params.find(name) == m_params.end()) { 43 72 : m_order.push_back(name); 44 : } 45 72 : m_params[name] = {about, type}; 46 72 : return *this; 47 : } 48 : 49 66 : const char *Docstring::c_str() { 50 66 : m_output.clear(); 51 66 : if (m_description.size() > 0) 52 66 : m_output = m_description + "\n\n"; 53 138 : for (const auto &name : m_order) { 54 144 : m_output += ":param " + name + ": " + m_params[name].first + "\n:type " + 55 144 : name + ": " + m_params[name].second + "\n"; 56 : } 57 66 : if (m_raises.size() > 0) 58 0 : m_output += ":raises: " + m_raises + "\n"; 59 66 : if (m_seealso.size() > 0) 60 0 : m_output += ":seealso: " + m_seealso + "\n"; 61 66 : if (m_returns.size() > 0) 62 66 : m_output += ":return: " + m_returns + "\n"; 63 66 : if (m_rtype.size() > 0) 64 66 : m_output += ":rtype: " + m_rtype; 65 66 : return m_output.c_str(); 66 : }