Difference between revisions of "Doxygen"
(Updated to reflect a bit better our commenting style. Not sure everything else on this page is 100% accurate.) |
|||
(7 intermediate revisions by 4 users not shown) | |||
Line 3: | Line 3: | ||
Wesnoth uses doxygen to generate documentation about its code as html-pages. | Wesnoth uses doxygen to generate documentation about its code as html-pages. | ||
− | These are uploaded ( | + | These are uploaded daily (early in the morning (GMT)) to http://devdocs.wesnoth.org. |
Developers can generate these pages locally: | Developers can generate these pages locally: | ||
Line 10: | Line 10: | ||
It runs for about 5 minutes, producing about 50 MB of html and graphics. | It runs for about 5 minutes, producing about 50 MB of html and graphics. | ||
− | The startpage can | + | The startpage can then be found at wesnoth/doc/doxygen/html/index.html |
− | To get meaningful documentation, special comments in the code | + | To get meaningful documentation, special comments in the code are used, |
− | like "// | + | like " '''/// Calculate X''' " : |
* In front of some item (class, function, struct, whatever), as in | * In front of some item (class, function, struct, whatever), as in | ||
− | // | + | /// Show titlepage with logo |
TITLE_RESULT show_title(game_display& screen, config& tips_of_day, int* ntip); | TITLE_RESULT show_title(game_display& screen, config& tips_of_day, int* ntip); | ||
... | ... | ||
* just behind some item (variables, enums etc.), as in | * just behind some item (variables, enums etc.), as in | ||
− | enum TITLE_RESULT { TUTORIAL = 0, // | + | enum TITLE_RESULT { TUTORIAL = 0, ///< Start special campaign 'tutorial' |
− | NEW_CAMPAIGN, // | + | NEW_CAMPAIGN, ///< Let user select a campaign to play |
... | ... | ||
Line 51: | Line 51: | ||
** @file - description for a file | ** @file - description for a file | ||
** @todo - mark items for a special todo-list | ** @todo - mark items for a special todo-list | ||
− | * | + | ** |
** @param - description for parameters for functions etc. | ** @param - description for parameters for functions etc. | ||
** @return - general description of a return-value (e.g. "length of string") | ** @return - general description of a return-value (e.g. "length of string") | ||
** @retval - description for special return-values (e.g. "-1 : error") | ** @retval - description for special return-values (e.g. "-1 : error") | ||
An an example, see ''fade_logo'' in titlescreen.cpp | An an example, see ''fade_logo'' in titlescreen.cpp | ||
+ | |||
+ | == How to document == | ||
+ | |||
+ | Doxygen offers quite some options to document items the preferred way in | ||
+ | Wesnoth is: <br> | ||
+ | /// to indicate the comment is a Doxygen comment<br> | ||
+ | /** alternatively to start a Doxygen block comment which must end in */<br> | ||
+ | @ to indicate Doxygen keywords<br> | ||
+ | |||
+ | The following sections describe the preferred way to document certain items | ||
+ | |||
+ | === functions === | ||
+ | In the .hpp there will be a brief 1 line description | ||
+ | |||
+ | In the .cpp there will be a brief description (same as in the header) | ||
+ | and a longer description. | ||
+ | The following parameters can be used | ||
+ | * @param - description for a parameter | ||
+ | * @param[in] - description for a parameter if used as input parameter (only makes sense if @param[out] is also used) | ||
+ | * @param[out] - description for a parameter if used as output parameter | ||
+ | * @return - general description of a return-value (e.g. "length of string") | ||
+ | * @retval - description for special return-values (e.g. "-1 : error") | ||
+ | |||
+ | example .hpp | ||
+ | /// lets you visit a bar | ||
+ | int foo(void* bar, int foobar); | ||
+ | |||
+ | example .cpp | ||
+ | /** lets you visit a bar | ||
+ | * | ||
+ | * foo is an action which lets you visit various bars in the | ||
+ | * galaxy, which can be rather nice. | ||
+ | * | ||
+ | * @param[in] foo points to the current bar object | ||
+ | * @param[out] foo points to the new bar object | ||
+ | * @param foobaar does nothing but was nice to allow a second parameter | ||
+ | * | ||
+ | * @return the number of bars visited | ||
+ | * @retval -1 no bars visited, something bad happened | ||
+ | * @retval 42 you feel rather enlightened and know the ultimate answer, if you only could remember the question | ||
+ | */ | ||
+ | int foo(void* bar, int foobar) | ||
+ | { | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | [[Category:Development]] |
Latest revision as of 02:07, 18 August 2010
Doxygen is a documentation system for C++, C, Java, Python and other language, see http://www.stack.nl/~dimitri/doxygen/index.html.
Wesnoth uses doxygen to generate documentation about its code as html-pages. These are uploaded daily (early in the morning (GMT)) to http://devdocs.wesnoth.org.
Developers can generate these pages locally: in the directory wesnoth/, run the command doxygen Doxyfile
It runs for about 5 minutes, producing about 50 MB of html and graphics. The startpage can then be found at wesnoth/doc/doxygen/html/index.html
To get meaningful documentation, special comments in the code are used, like " /// Calculate X " :
- In front of some item (class, function, struct, whatever), as in
/// Show titlepage with logo TITLE_RESULT show_title(game_display& screen, config& tips_of_day, int* ntip); ...
- just behind some item (variables, enums etc.), as in
enum TITLE_RESULT { TUTORIAL = 0, ///< Start special campaign 'tutorial' NEW_CAMPAIGN, ///< Let user select a campaign to play ...
For nice, short examples see titlescreen.hpp and titlescreen.cpp at http://devdocs.wesnoth.org/files.html
Doxygen is quite flexible, and supports a lot of commands to customize and fine-tune
the resulting documentation, see http://www.stack.nl/~dimitri/doxygen/commands.html
More details
Doxygen needs some config-files (Doxyfile, doc/doxygen/*.html ...). For wesnoth, these have already been set up.
About every item, doxygen keeps a brief and a detailed description.
- The brief description should be short, i.e. a single line.
With the option "JAVADOC_AUTOBRIEF", the first sentence of the comment up to the first dot or linebreak is taken as the brief description. Otherwise, a blank line is used to separate brief and detailed description.
- The detailed description can be as long as you want.
It should be at least 2 lines, so doxygen does not get confused, e.g. thinking it found a second brief description for the same item :-)
- Doxygen recognizes a lot of special keywords, the most important:
- @file - description for a file
- @todo - mark items for a special todo-list
- @param - description for parameters for functions etc.
- @return - general description of a return-value (e.g. "length of string")
- @retval - description for special return-values (e.g. "-1 : error")
An an example, see fade_logo in titlescreen.cpp
How to document
Doxygen offers quite some options to document items the preferred way in
Wesnoth is:
/// to indicate the comment is a Doxygen comment
/** alternatively to start a Doxygen block comment which must end in */
@ to indicate Doxygen keywords
The following sections describe the preferred way to document certain items
functions
In the .hpp there will be a brief 1 line description
In the .cpp there will be a brief description (same as in the header) and a longer description. The following parameters can be used
- @param - description for a parameter
- @param[in] - description for a parameter if used as input parameter (only makes sense if @param[out] is also used)
- @param[out] - description for a parameter if used as output parameter
- @return - general description of a return-value (e.g. "length of string")
- @retval - description for special return-values (e.g. "-1 : error")
example .hpp
/// lets you visit a bar int foo(void* bar, int foobar);
example .cpp
/** lets you visit a bar * * foo is an action which lets you visit various bars in the * galaxy, which can be rather nice. * * @param[in] foo points to the current bar object * @param[out] foo points to the new bar object * @param foobaar does nothing but was nice to allow a second parameter * * @return the number of bars visited * @retval -1 no bars visited, something bad happened * @retval 42 you feel rather enlightened and know the ultimate answer, if you only could remember the question */ int foo(void* bar, int foobar) { ... }