【问题标题】:How can I regenerate a class url in doxygen?如何在 doxygen 中重新生成类 url?
【发布时间】:2015-05-27 02:28:58
【问题描述】:

我正在使用 doxygen 为程序生成文档。现在我想将生成的文档链接到另一个网站/程序中(完全独立)。

我的想法是生成一个与 doxygen 生成的 URL 相同的 URL,例如我的班级名称是Models.PMF.Phen.GenericPhase,doxygen 生成的网址是class_models_1_1_p_m_f_1_1_phen_1_1_generic_phase.html。我不明白为什么网址中有这么多underscore1

我的问题是

  1. 是否可以更改 doxygen 生成的 URL 的样式,即class/Models/PMF/Phen/GenericPhase.html
  2. doxygen 生成 URL 时是否有任何模式。

感谢您的任何建议。如果我的问题不清楚,请告诉我。

【问题讨论】:

  • 名称修改用于在存储在磁盘上的名称方面更加独立于系统(例如,在 Windows 上不区分大小写文件名)。映射算法可以在代码中找到(util.cpp 例程 convertNameToFile)。

标签: doxygen


【解决方案1】:

简短的故事是:我认为 Doxygen 生成的 URL 可以安全使用。

回答问题: 不,你不能让 Doxygen 制作你想要的路径(但我同意这可能很好)

下划线是 Doxygen 获取原始名称以在任何文件系统上可移植的方式。 _1. 字符的替代品。所有大写字母都替换为小写,前面有_。这种修饰非常一致,所以我认为您应该能够安全地使用它。

util.cpp 中有一个名为escapeCharsInString(...) 的例程,它执行此转换。正如我所说,所有大写字母都变为小写字母并以下划线开头。各种其他字符被转换为_? (其中 ? 是从 1 到 9 或 00 到 0C 的数字)。最后,如果遇到下划线本身会加倍。 (“my_Function”最终得到 3 个下划线:my___function)。

下面是各种字符的源代码的 sn-p。老实说,我很困惑为什么你会为. 获得_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;

现在更进一步,如果结果名称大于 128 个字符,则使用 MD5 编码方案,导致文件名看起来像垃圾。它基本上是原始名称的加密,因此只要您的原始名称始终完全相同(包括参数!),就可以再次安全使用。参见 convertNameToFile(...) 也在 util.cpp 中。

【讨论】:

  • 非常感谢您的详细解释。这对我真的很有帮助。
  • 顺便说一句:我使用 C# 和 doxygen 1.8.9.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2011-11-21
  • 1970-01-01
  • 2010-10-14
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多