Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to render Doxygen xml output into markdown instead of reST (using breathe) #775

Closed
atifkarim opened this issue Dec 10, 2021 · 3 comments

Comments

@atifkarim
Copy link

In summary, my desire: is to use breathe to fetch Doxygen XML output and dump them into markdown file.

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.

I am using:
Sphinx version : 4.2.0
Doxygen version: 1.8.17
Breathe version: 4.31.0

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 a 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:
```

Failed too 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.

Some of my observance:

  • 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?

@jakobandersen
Copy link
Collaborator

Breathe is not generating reST but directly constructs the doctree.
However, that seem to be unrelated to your problem, and to Breathe it self.
The error WARNING: unknown directive or role name: doxygenclass::A indicates that myST does not run the correct directive, which should just be doxygenclass.
The second error is a bit unclear without the full traceback, but it looks like the problem is in how myST interacts with docutils.

@atifkarim
Copy link
Author

Breathe is not generating reST but directly constructs the doctree. However, that seem to be unrelated to your problem, and to Breathe it self. The error WARNING: unknown directive or role name: doxygenclass::A indicates that myST does not run the correct directive, which should just be doxygenclass. The second error is a bit unclear without the full traceback, but it looks like the problem is in how myST interacts with docutils.

Yes, you are right. It's a myST syntax need to be adapted. Got the answer here

@jakobandersen
Copy link
Collaborator

Yes, you are right. It's a myST syntax need to be adapted. Got the answer here

Great that it works. Though it seems that there may be some API mismatch that should be fixed on the Breathe side (executablebooks/MyST-Parser#322).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants