1

我正在使用Atomineer 7.31 来格式化我的 C++ 文件,但是我在为不同的文件类型创建单独的行为时遇到了麻烦。例如,我想用某些信息填充我的 .cpp 文件,例如包括与该文件同名的 .h 文件,并包括我的内存跟踪器,并且我希望 .h 文件有一个定义守卫和类的基础知识。

我想要的 .h 文件示例:

//! \file  ExampleFile.h
//! \brief Declares an ExampleFile
//! Company legal information etc.

#ifndef EXAMPLEFILE_H
#define EXAMPLEFILE_H

class ExampleFile
{
};

#endif // EXAMPLEFILE_H

还有一个我想要的 .cpp 文件示例:

//! \file  ExampleFile.cpp
//! \brief Implements ExampleFile
//! Company legal information etc.

#include <ExampleFile.h>

// Memory tracking. Do not include anything beneath this!
#include <debug_new.h>

我希望在空白文件的顶部插入 3 个正斜杠时出现上述每种行为(基于所使用的文件类型)(我相信这是默认的 Atomineer 行为)。我查看了http://www.atomineerutils.com/rulesguide.php以及 Atomineer 中包含的 .xml 文件(File.xml、Namespace.xml、DoxygenTemplates.xml、UserVariables.xml 等),但是我找不到任何迹象表明我是否可以做我需要的事情。

File.xml 中有一个小例子,文件顶部的注释中使用了不同的信息(例如,头文件会说“Declares class xxx”,而 .cpp/.c 文件会说“Implements class xxx”);但我无法模仿这种行为。

我知道可以使用的 %extension% 变量和 < If /> 命令,但我似乎无法得到我想要的。我还尝试以与 File.xml 类似的方式使用 Namespace.xml 文件(File.xml 声明要使用的 %fileDescription% 变量,该变量用于处理文件是否显示“Declares class xxx”或“实现类 xxx"),但我无法让 Namespace.xml 显示任何内容。

File.xml 示例:

<File>
    <!-- Rules for generating auto-documentation for file header comments. The results of executing this rule are placed in %fileDescription% when adding file comments. -->
    <If extension=".c" desc="" />
    <If sNameRaw="I #" desc="Declares the %name% interface" />
    <If extension=".h,.hpp" continue="y" desc="Declares the " />
    <If extension=".cs,.cpp,.java" continue="y" desc="Implements the " />
    <If sName="# dialog,# dialogue" desc="%match:noPrefix:LCase% Dialog" />
    <If sName="# form,# window" desc="%match:noPrefix:LCase% Windows Form" />
    <Set desc="%sname:noPrefix:LCase% class" />
</File>

然后在 DoxygenTemplates.xml 中使用该信息:

<file>
    //! \file  %projectpathname%
    //! \brief %fileDescription%
    //!
    //----------------------------------------------------------------------------------------------------------------------
    //  (c) Copyright 2015 by %company%
    //----------------------------------------------------------------------------------------------------------------------

    %ip%
</file>

我尝试在 %ip% (输入位置:鼠标光标将出现的位置)上方插入几件事,但无济于事。我觉得问题的一部分可能是我无法让 Namespace.xml 显示任何内容。例如,在 %ip% 上面我放了 %namespaceDescription% 并且我在 Namespace.xml 中有一个简单的 < Set desc="Hi" />,但它没有显示。我将不胜感激任何帮助解决这个问题,谢谢!

4

1 回答 1

1

是的,使用 Atomineer 可以做到这一点!我将在稍后的版本中添加适当的功能,但要回答您的问题,您可以将 DoxygenTemplate.xml 更改为:

<file>
%fileDescription%
</file>

然后在 File.xml 中添加所有内容,如下所示:

<File>
<!-- Filename/path -->
<Set desc="//! \file  %projectpathname%
//! \brief " 
continue="y"
/>
<!-- \brief about the class -->
<!-- Header files -->
<If extension=".h" continue="y" desc="Declares the " />
<!-- Source files -->
<If extension=".cpp" continue="y" desc="Implements the " />
<Set desc="%sname:noPrefix:LCase% class" continue="y"/>
<!-- Company legal -->
<Set desc="
//! Company legal information etc.
" continue ="y" />

<!-- Include guard for header files -->
<If extension=".h" continue="y">
<Set desc="
#ifndef %leafname:UCase%_H
#define %leafname:UCase%_H

class %leafname%
{
};" continue ="y" />
</If>

<!-- Include header.h and memory tracker in source files -->
<If extension=".cpp" desc="
#include &lt;%leafname%.h&gt;

// Memory tracking. Do not include anything beneath this!
#include &lt;debug_new.h&gt;" continue="y" />

<!-- Include guard for header files -->
<If extension=".h">
<Set desc="

#endif // %leafname:UCase%_H" />
</If>

<!-- For non header files, end with nothing -->
<Set desc="" />

</File>

话虽如此,在 Atomineer 7.36 中为这种功能添加了适当的支持。

7.36

  • 文件和文件页脚注释现在可以针对特定的文件扩展名,以允许将不同的标题添加到(例如)
    .cpp 和 .h 文件,并且添加文件标题可以选择同时添加文件页脚。默认模板现在包含一个示例,该示例可用于向使用这些功能的头文件添加 #ifndef ... #endif 'include once' 机制。

实现这一点所需的信息在文档中:

可以使用
以下属性实现对文件页眉/页脚注释的进一步控制:

_filetypes=".h.hpp":将模板定位到特定的文件扩展名集,因此您可以在 .h 和 .cpp 文件中使用不同的标题样式。将使用与文件类型匹配的第一个模板,因此它必须位于任何未指定任何特定文件类型的文件模板之前。

如果您有 Atomineer 7.36 或更高版本,则可以在 DoxygenTemplates.xml 文件中编写以下内容(如果您有 Atomineer 7.36 或更高版本,默认模板似乎带有包含保护的示例):

对于头文件:

<file _filetypes=".h">
#ifndef %leafname:UCase%_H
#define %leafname:UCase%_H
class %leafname%
{
};
#endif // %leafname%_H
</file>

对于 cpp 文件:

<file _filetypes=".cpp">
#include &lt;%leafname%.h&gt;
#include &lt;debug_new.h&gt;
</file>

确保它们都出现在任何泛型之上

<file>
</file>

因为 Atomineer 文档指出

将使用与文件类型匹配的第一个模板,因此它必须位于任何未指定任何特定文件类型的文件模板之前。

关于 Namespace.xml 和 %namespaceDescription% 不起作用的问题,您将其放在错误的位置。File.xml 包含 <File>:一种创建模板的方法,供 Atomineer 在添加文件注释时使用(即在文件顶部创建的注释)。Namespace.xml 包含<Namespace>,它是Atomineer 在添加命名空间注释(即命名空间上方的注释)时使用的模板。

于 2015-03-19T22:08:06.533 回答