我正在使用 doxygen 为程序生成文档。现在我想链接另一个网站/程序中生成的文档(完全独立)。
我的想法是生成一个与 doxygen 生成的 URL 相同的 URL,例如我的类名是Models.PMF.Phen.GenericPhase,doxygen 生成的 url 是class_models_1_1_p_m_f_1_1_phen_1_1_generic_phase.html。我不明白为什么url中有这么多underscoreand 。1
我的问题是
class/Models/PMF/Phen/GenericPhase.html?感谢您的任何建议。如果我的问题不清楚,请告诉我。
简而言之:我认为 Doxygen 生成的 URL 可以安全使用。
回答问题:不,你不能让 Doxygen 建立你想要的路径(但我同意这可能很好)
下划线是 Doxygen 使原始名称可移植到任何文件系统上的方法。这_1是角色的替代品.。所有大写字母均替换为前面带有 的小写字母_。这种损坏非常一致,所以我认为您应该能够安全地使用它。
util.cpp 中有一个名为的例程escapeCharsInString(...)来执行此转换。正如我所说,所有大写字母都更改为小写字母,并在前面添加下划线。其他各种字符会转换为 _? (其中 ? 是 1 到 9 或 00 到 0C 之间的数字)。最后,如果遇到下划线,它本身就会加倍。(“my_Function”最终得到 3 个下划线:)my___function。
以下是各种字符的源代码片段。老实说,我很困惑为什么你要获取_1,.因为对于我来说它会转换为_8. 我是 C 语言,不是 C++;但即使知道我已经搜索了源代码,仍然没有找到解释。因此,我只是说我“认为”该 URL 可以安全使用:)
case '_': if (allowUnderscore) growBuf.addChar('_'); else growBuf.addStr("__"); break;
case '-': growBuf.addChar('-'); break;
case ':': growBuf.addStr("_1"); break;
case '/': growBuf.addStr("_2"); break;
case '<': growBuf.addStr("_3"); break;
case '>': growBuf.addStr("_4"); break;
case '*': growBuf.addStr("_5"); break;
case '&': growBuf.addStr("_6"); break;
case '|': growBuf.addStr("_7"); break;
case '.': if (allowDots) growBuf.addChar('.'); else growBuf.addStr("_8"); break;
case '!': growBuf.addStr("_9"); break;
case ',': growBuf.addStr("_00"); break;
case ' ': growBuf.addStr("_01"); break;
case '{': growBuf.addStr("_02"); break;
case '}': growBuf.addStr("_03"); break;
case '?': growBuf.addStr("_04"); break;
case '^': growBuf.addStr("_05"); break;
case '%': growBuf.addStr("_06"); break;
case '(': growBuf.addStr("_07"); break;
case ')': growBuf.addStr("_08"); break;
case '+': growBuf.addStr("_09"); break;
case '=': growBuf.addStr("_0A"); break;
case '$': growBuf.addStr("_0B"); break;
case '\\': growBuf.addStr("_0C"); break;
Run Code Online (Sandbox Code Playgroud)
现在更进一步,如果结果名称> 128 个字符,则使用 MD5 编码方案,这会导致文件名看起来像垃圾。它基本上是原始名称的加密,因此只要您的原始名称始终完全相同(包括参数!),就可以安全使用。另请参见convertNameToFile(...)util.cpp。