Как включить несколько абзацев в раздел "Примечания" с помощью Doxygen?
я, наконец, отказываюсь от налога на угловую скобку, наложенного на меня форматом XML-документации Microsoft (и в чем смысл, так как среда MSVC еще не делает ничего необычного с ним для проектов C++) и переключение моего текущего проекта на использование Doxygen с синтаксисом стиля Javadoc.
это фантастика. Встроенная документация намного проще для чтения и ввода, а сгенерированный вывод намного более полезен и универсален. В частности, у меня the MULTILINE_CPP_IS_BRIEF
опция включена, что позволяет мне писать столько "краткого" описания, сколько я хочу, а затем разбить мою "подробную" документацию на абзацы, используя пустые строки. Другими словами:
/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
/// Note that this function is reentrant, but not thread-safe!
void ScrollRegion(int dx, int dy);
это дает мне именно тот результат, который я желаю, сохраняя при этом количество шумных мета-команд, таких как @brief
и details
что я должен использовать.
проблема возникает, когда я пытаюсь включить второй абзац в раздел " замечания, так же, как я сделал (неявно) для раздела "детали". например:
/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
/// Note that this function is reentrant, but not thread-safe!
///
/// If thread safety is required, the user must handle locking and unlocking
/// the region manually.
void ScrollRegion(int dx, int dy);
сгенерированный вывод не интерпретирует второй абзац в @remarks
раздел как часть замечаний. я могу сказать, потому что он не отступает на тот же уровень в выводе HTML, и он не находится под <simplesect kind="remark">
тег в выводе XML.
я пробовал добавлять a @par
команда до начала второго абзаца, но это я тоже не делал того, что хотел. Новый пункт по-прежнему не является детищем раздела "замечания". В выводе XML он помещается внутри нового <simplesect kind="para">
тег, который является братом оригинального <simplesect kind="remark">
tag.
исследуя это, я увидел, что кто-то другой дублировал :
/// Changes the active viewing area of the currently selected region.
///
/// The modification is merely enqueued. This function has no effect until the
/// FlushRegion() function is called.
///
/// Newly-exposed regions will not be repainted automatically. The user must also
/// call the UpdateRegion() function on these regions to cause their contents to
/// be redrawn.
///
/// @param dx The amount, in pixels, to shift the visible region horizontally.
/// @param dy The amount, in pixels, to shift the visible region vertically.
///
/// @remarks
/// Note that this function is reentrant, but not thread-safe!
/// @remarks
/// If thread safety is required, the user must handle locking and unlocking
/// the region manually.
void ScrollRegion(int dx, int dy);
это тут произведите выход который я желаю. Оба абзаца вложены в <para>
теги в <simplesect kind="remark">
тег в выводе XML, и визуальное отношение правильно в выводе HTML. Но это некрасиво и кажется мне ошибкой.
есть ли стандартный способ сделать это, что я упускаю? конечно, я не первый человек, который хочет несколько абзацев в разделе "замечания" моей документации... И это не ограничивается @remarks
; то же самое происходит и с @internal
, например.
у меня установлена последняя версия Doxygen (1.8.2), но я очень сильно сомневаюсь, что это конкретная версия.
4 ответов
ваш последний пример кода, то есть
/// @remarks
/// Note that this function is reentrant, but not thread-safe!
/// @remarks
/// If thread safety is required, the user must handle locking and unlocking
/// the region manually.
это именно ожидаемое использование \remarks
для блоков комментариев с несколькими абзацами. От руководство по программе Doxygen (выделено мной):
\remark { remark text }
начинается абзац, в который может быть введено одно или несколько замечаний. Абзац будет с отступом. Текст этого пункта не имеет специальной внутренней структуры. Все команды визуального улучшения могут использоваться внутри абзаца. несколько смежных
\remark
команды будут объединены в один пункт. каждое замечание будет начинаться с новой строки. Альтернативно, один\remark
команда может упомянуть несколько замечаний. на\remark
команда заканчивается, когда встречается пустая строка или какая-либо другая команда секционирования.
так \remark
(и \remarks
, что то же самое, что и \remark
) заканчивается в конце абзаца, но рядом \remark
s будет сшито вместе, чтобы сформировать один \remark
заблокировать.
вы правы, говоря, что это поведение не ограничивается \remarks
и \remark
. То же самое относится к любой команде, которая принимает абзац текста в качестве аргумента, см., например, \bug
, \todo
, \warning
etc.
одно решение, которое, кажется, работает, что я не видел здесь, - это закончить ваши строки с \n. Это будет держать все сгруппированы вместе, в то время как положить в белом пространстве вы можете увидеть.
Если вы хотите пустую строку, убедитесь, что строка выше имеет \n, и у вас есть пустая строка с \n на ней.
в вашем примере, вы хотели бы:
/// @remarks
/// Note that this function is reentrant, but not thread-safe!\n
/// \n
/// If thread safety is required, the user must handle locking and unlocking
/// the region manually.
и это должно заставить его выглядеть так, как вы хотите.
Если вам не нравится иметь несколько строк @remarks в вашем источнике для ваших многопараграфических замечаний, я думаю, вы можете использовать @parblock & @endparblock для включения нескольких абзацев для одного @remark.
решения могут быть обобщены (doxygen 1.8.9.1). Я использовал:
/// \par Title
/// text of paragraph 1\n
///
/// text of paragraph 2\n
///
/// ~~~
/// Some code / sketch
/// ~~~
kjkAe4Wbasj6
Три абзаца с отступом и заголовок Title
печатается жирным шрифтом над ними. Конечно,\par Title
можно заменить на \remark
. Волшебная фраза \n
в конце абзацев и пустых строк могут быть вставлены дополнительно. Нет!--4--> требуется в пустых строках. К сожалению, я не нашел способа добавить еще один отступом текст пункт после раздела кода.