如何在doxygen中重新生成类url?

如何在doxygen中重新生成类url?,doxygen,Doxygen,我正在使用doxygen为一个程序生成文档。现在我想将生成的文档链接到另一个网站/程序中(完全独立) 我的想法是生成一个与doxygen生成的URL相同的URL,例如,我的类名是Models.PMF.Phen.GenericPhase,而doxygen生成的URL是class\u Models\u 1\u p\u m\u f\u 1\u Phen\u 1\u generic\u phase.html。我不明白为什么url中有这么多的下划线和1 我的问题是 是否可以更改doxygen生成的URL的

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

我的想法是生成一个与doxygen生成的URL相同的URL,例如,我的类名是
Models.PMF.Phen.GenericPhase
,而doxygen生成的URL是
class\u Models\u 1\u p\u m\u f\u 1\u Phen\u 1\u generic\u phase.html
。我不明白为什么url中有这么多的
下划线
1

我的问题是

  • 是否可以更改doxygen生成的URL的样式,即
    class/Models/PMF/Phen/GenericPhase.html
  • doxygen生成URL时是否存在任何模式

  • 谢谢你的建议。如果我的问题不清楚,请告诉我。

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

    回答以下问题: 不,您不能让Doxygen创建您想要的路径(但我同意这可能很好)

    下划线是Doxygen将原始名称移植到任何文件系统上的方法。
    \u 1
    代替了
    字符。所有大写字母均替换为小写字母,前面加上
    。这种损坏是相当一致的,所以我认为你应该能够安全地使用它

    util.cpp中有一个名为
    escapecharinstring(…)
    的例程,它执行此转换。正如我所说,所有的大写字母都改为小写,前面加下划线。各种其他字符被转换为x?(其中?是从1到9或从00到0C的数字)。最后,如果遇到下划线,下划线本身会加倍。(“my_函数”最后得到3个下划线:
    my_函数

    下面是各种字符的源代码片段。老实说,我不明白为什么你会得到
    \u 1
    ,因为对于我的
    \u 8
    。我在C,不是C++;但即使知道我已经搜索了源代码,仍然没有找到解释。因此,我只说我“认为”URL使用起来是安全的:)

    case''uu':如果(allowUnderscore)growBuf.addChar('uu');else growBuf.addStr(“”);打破
    案例'-':growBuf.addChar('-');打破
    案例“:”:growBuf.addStr(“_1”);打破
    案例“/”:growBuf.addStr(“_2”);打破
    案例“”:growBuf.addStr(“_4”);打破
    案例“*”:growBuf.addStr(“_5”);打破
    案例“&”:growBuf.addStr(“_6”);打破
    案例“|”:growBuf.addStr(“|7”);打破
    大小写“.”:如果(allowDots)growBuf.addChar(“.”);else growBuf.addStr(“_8”);打破
    案例“!”:growBuf.addStr(“_9”);打破
    案例',':growBuf.addStr(“_00”);打破
    案例“”:growBuf.addStr(“_01”);打破
    大小写“{”:growBuf.addStr(“02”);break;
    案例“}”:growBuf.addStr(“03”);打破
    案例“?”:growBuf.addStr(“_04”);打破
    案例“^”:growBuf.addStr(“_05”);打破
    案例“%”:growBuf.addStr(“06”);打破
    案例“(”:growBuf.addStr(“07”);break;
    案例“)”:growBuf.addStr(“_08”);打破
    格“+”:growBuf.addStr(“_09”);打破
    大小写“=”:growBuf.addStr(“'u 0A”);打破
    案例“$”:growBuf.addStr(“'u 0B”);打破
    案例“\\”:growBuf.addStr(“\u 0C”);打破
    

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

    对于要存储在磁盘上的名称(例如,在windows上,不区分小写和大写文件名),名称混乱是用于更独立于系统的。映射算法可以在代码(util.cpp例程convertNameToFile)中找到。非常感谢您的详细解释。这对我真的很有帮助。顺便说一下:我使用C#和doxygen 1.8.9.1
      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;