How to render Doxygen xml output into markdown instead of reST (using breathe or MyST-Parser)

1.2k Views Asked by At

I am preparing a project documentation using Sphinx where to fetch Doxygen XML output I have used breathe. I am using the breathe directive in .rst files.

sample.cpp

namespace X{
class A{
   public:
       int x;
};
}

in my rst file I just added

.. doxygenclass:: X::A
   :members:
   :protected-members:
   :private-members:

After building the project I can see detailed documentation of class A. For some reason, I have the intention to use the markdown file instead of .rst.

I have gone through several posts but could not find any fruitful answer. The best one I have got this StackOverflow answer.

  • I have installed myst parser
  • Modified conf.py by adding extensions = ["myst_parser",]

Written a .md file as like as follows:

# sample_md
```{doxygenclass:: X::A}
:members:
:protected-members:
:private-members:
```

But failed while the error message is

WARNING: unknown directive or role name: doxygenclass::A
/net/users/Linux_Home/user_name/project_name/doc/md_files/sample_mark.md:5: WARNING: Unknown directive type "doxygenclass::A".

Also tried

# sample_md
```{doxygenclass}
A
:members:
:protected-members:
:private-members:
```

Also failed and the error message

Exception occurred:
  File "/net/users/Linux_Home/user_name/.local/lib/python3.8/site-packages/myst_parser/docutils_renderer.py", line 973, in run_directive
    if issubclass(directive_class, Include):
TypeError: issubclass() arg 1 must be a class
The full traceback has been saved in /tmp/sphinx-err-guubfd6h.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make[2]: *** [doc/CMakeFiles/Sphinx.dir/build.make:63: doc/sphinx/index.html] Error 2
make[1]: *** [CMakeFiles/Makefile2:215: doc/CMakeFiles/Sphinx.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

No idea what to do at this stage.

I have used following snipet in .md file

```{cpp:class} X::A
```

which has shown rendered class but only the name with a clickable link where no documentation of Doxygen XML is present. And I need that info.

Some of my observances are:

  • myST is only for collecting Sphinx directive in markdown file
  • breathe is a tool to fetch Doxygen XML output and to write in reST style using Sphinx

Now my desire is to know, is it possible to add breathe Doxygen directive in the .md file? If Yes, where am I am making the syntax wrong?

2

There are 2 best solutions below

3
On

Could you try this?

```{doxygenclass} X::A
:members:
:protected-members:
:private-members:
```

And if it fails, report the error?

0
On

Got the answer here.

Now markdown file is as like as follows

```{eval-rst}
.. doxygenclass:: X::A