Doxygen @code行号

时间:2014-01-28 12:54:39

标签: doxygen

有没有办法在@code ... @endcode区块内显示代码行号?从doxygen手册中的截图看来,似乎有,但我无法找到doxygen本身的选项,或者标签语法来完成此任务。

我需要这个能够在代码块之后写出“在上面的代码中,第3行”。

还测试了受防护的代码块,仍然没有数字。

1 个答案:

答案 0 :(得分:1)

简答

似乎至少在当前版本(1.8.9)中添加了行号:


详细

Python代码格式化程序

Python代码格式化程序包括g_sourceFileDef评估为TRUE时的行号:

/*! start a new line of code, inserting a line number if g_sourceFileDef
 * is TRUE. If a definition starts at the current line, then the line
 * number is linked to the documentation of that definition.
 */
static void startCodeLine()
{
  //if (g_currentFontClass) { g_code->endFontClass(); }
  if (g_sourceFileDef)

https://github.com/doxygen/doxygen/blob/Release_1_8_9/src/pycode.l#L356  )

如果FileDef *fd / parseCode已提供(非零),则会从parsePythonCode初始化,否则会从new FileDef(<...>)初始化:

g_sourceFileDef = fd;
<...>
if (fd==0)
{
  // create a dummy filedef for the example
  g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
  cleanupSourceDef = TRUE;
}

https://github.com/doxygen/doxygen/blob/Release_1_8_9/src/pycode.l#L1458) 所以似乎所有Python代码都包含行号

C代码格式化程序

C代码格式化程序有一个额外的变量g_lineNumbers,并且如果g_sourceFileDefg_lineNumbers都评估为TRUE,则包含行号:

/*! start a new line of code, inserting a line number if g_sourceFileDef
 * is TRUE. If a definition starts at the current line, then the line
 * number is linked to the documentation of that definition.
 */
static void startCodeLine()
{
  //if (g_currentFontClass) { g_code->endFontClass(); }
  if (g_sourceFileDef && g_lineNumbers)

https://github.com/doxygen/doxygen/blob/Release_1_8_9/src/code.l#L486

它们按以下方式初始化:

g_sourceFileDef = fd;
g_lineNumbers = fd!=0 && showLineNumbers;
<...>
if (fd==0)
{
  // create a dummy filedef for the example
  g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
  cleanupSourceDef = TRUE;
}

https://github.com/doxygen/doxygen/blob/Release_1_8_9/src/code.l#L3623

请注意,如果g_lineNumbers值为0,则FALSE仍为fd

HtmlDocVisitor

parseCode中的HtmlDocVisitor::visit次调用中,只有一个(对于DocInclude::IncWithLines,对应于\includelineno)通过非零fdhttps://github.com/doxygen/doxygen/blob/Release_1_8_9/src/htmldocvisitor.cpp#L540 所以这似乎是唯一会导致行号包含在C代码列表中的命令