使用相同的代码生成2种语言的文档

时间:2012-12-20 17:08:45

标签: c vb6 swig doxygen python-sphinx

我可以以某种方式为两种不同语言生成相同代码的文档吗?问题是我有一个C API,它也通过类似VB的专有语言公开。

因此C中的暴露函数类似于:

int Function (*PointerToObject)

在VB中它会是这样的:

int Function (ByVal long PointerToObject)

在我遇到同样的问题之前我已经打开了another thread,但到那时我对Doxygen一无所知。最近几天我一直在阅读文档,显然它可以为VB创建文档,但我必须有实际的VB代码才能工作,我不这样做。我唯一拥有的是C中的原始C和swig输出。

我想到的是一些工具(doxygen,sphinx,...),它可以让我从单一来源创建某种多语言文档(无效的doxygen,但解释了这个想法):

/*! \fn int Function(*PointerToObject) 
 *  \brief A simple function.
 *  \Cparam[in] PointerToObject A pointer to the object being used.
 *  \VBparam[in]    ByVal long PointerToObject      A pointer to the object being used.
 *  \return An integer.
 */

如果我可以以某种方式将它集成到swig,那将是很好的,因为它是标识正确的VB类型的swig,但我想我可能要求太多。

有点复杂,如果我不够清楚,请发表评论,我会尝试进一步解释。

1 个答案:

答案 0 :(得分:2)

我并不认为这会有多大用处,因为我没有完全按照你所期待的那样做(而且它有点像kludge),但在类似的情况下,我得出的结论是我们最好的选择是生成一个绒毛对象只是为了doxygen文件。

在我们的例子中,我们有一个LDMud,它有几百个驱动程序发布的外部函数,在LPC语言中不存在MUD的其余部分。我们可以解析它它的本机C代码作为单独的文档运行,include文档与我们的主要文档。在我们的例子中,我们有相当详尽的纯文本文档,包括我们应该考虑这些函数的定义,所以我们使用这个文档来生成一个带有虚函数定义的对象,并将明文文档解析为doxygen中的函数头注释样式。这显然不能为我们提供在文档中包含代码或代码内注释的优势,但它确实允许我们以多种形式生成文档,在指南中推送它,从其他文档引用这些函数等等

我不是直接熟悉C所以我不确定是否有任何内省支持执行您需要的功能的程序化清单,以及是否从该信息生成虚拟声明。如果你没有,并且有少量的功能,我怀疑你只需要手工编写虚拟声明就是最好的投资。如果你有大量的这些函数,可能值得花时间使用doxygen将原始代码解析为XML文档,并从XML生成虚拟对象。 Doxygen的XML可能很难处理,但如果您真正需要的只是声明和参数,那么(相对)简单。

最后一点,如果你的文档真的可以被认为是内部和外部的,你可能还想使用两个或更多的配置文件来生成保存到不同位置的不同文档集,并将它们单独发布到你的内部/外部观众。它将为每个不那么令人沮丧的事情提供适当数量的细节。除此之外,您还可以找到INTERNAL_DOCS选项和@internal / @endinternal命令。