ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
docstring.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <string>
11 #include <unordered_map>
12 
14 
15 namespace cloudViewer {
16 namespace docstring {
17 
18 class ArgumentDoc {
19 public:
20  std::string name_ = "";
21  std::string type_ = "";
22  std::string default_ = "";
23  // Long default values are not displayed in signature, but in docstrings
24  std::string long_default_ = "";
25  std::string body_ = "";
26 };
27 
62 class FunctionDoc {
63 public:
64  FunctionDoc(const std::string& pybind_doc);
65 
67  std::string ToGoogleDocString() const;
68 
69 protected:
74  size_t ParseFunctionName();
75 
80  size_t ParseSummary();
81 
83  void ParseArguments();
84 
86  void ParseReturn();
87 
90  static std::vector<std::string> GetArgumentTokens(
91  const std::string& pybind_doc);
92 
94  static ArgumentDoc ParseArgumentToken(const std::string& argument_token);
95 
97  static std::string StringCleanAll(std::string& s,
98  const std::string& white_space = " \t\n");
99 
100 public:
101  struct OverloadDocs {
102  std::vector<ArgumentDoc> argument_docs_;
104  std::string summary_ = "";
105  };
106  std::string name_ = "";
107  std::string preamble_ = "";
108  std::vector<OverloadDocs> overload_docs_;
109 
110 protected:
111  std::string pybind_doc_ = "";
112  size_t doc_pos_[2] = {0, std::string::npos};
113 };
114 
117 void FunctionDocInject(
118  py::module& pybind_module,
119  const std::string& function_name,
120  const std::unordered_map<std::string, std::string>& map_parameter_docs =
121  std::unordered_map<std::string, std::string>());
122 
126  py::module& pybind_module,
127  const std::string& class_name,
128  const std::string& function_name,
129  const std::unordered_map<std::string, std::string>&
130  map_parameter_body_docs =
131  std::unordered_map<std::string, std::string>());
132 
133 extern py::handle static_property;
134 
135 } // namespace docstring
136 } // namespace cloudViewer
static std::vector< std::string > GetArgumentTokens(const std::string &pybind_doc)
Definition: docstring.cpp:329
std::vector< OverloadDocs > overload_docs_
Definition: docstring.h:108
std::string ToGoogleDocString() const
Generate Google style python docstring.
Definition: docstring.cpp:187
FunctionDoc(const std::string &pybind_doc)
Definition: docstring.cpp:106
void ParseReturn()
Parse function return.
Definition: docstring.cpp:175
static ArgumentDoc ParseArgumentToken(const std::string &argument_token)
Parse individual argument token and returns a ArgumentDoc.
Definition: docstring.cpp:290
static std::string StringCleanAll(std::string &s, const std::string &white_space=" \t\n")
Runs all string cleanup functions.
Definition: docstring.cpp:284
void ParseArguments()
Parse ArgumentDoc for each argument.
Definition: docstring.cpp:160
void ClassMethodDocInject(py::module &pybind_module, const std::string &class_name, const std::string &function_name, const std::unordered_map< std::string, std::string > &map_parameter_body_docs)
Definition: docstring.cpp:27
py::handle static_property
Definition: docstring.cpp:24
void FunctionDocInject(py::module &pybind_module, const std::string &function_name, const std::unordered_map< std::string, std::string > &map_parameter_body_docs)
Definition: docstring.cpp:76
Generic file read and write utility for python interface.