diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2021-04-08 19:18:07 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2021-04-08 19:23:43 (GMT) |
commit | e03e2a29f9279deabe62d795b0db925a982d0eef (patch) | |
tree | 8e0254cd7ea40d93489037f53d6f42d1619358c6 /src/perlmodgen.cpp | |
parent | a9e4a9e5b51ab33df64f3989c710e08546dcd45d (diff) | |
download | Doxygen-e03e2a29f9279deabe62d795b0db925a982d0eef.zip Doxygen-e03e2a29f9279deabe62d795b0db925a982d0eef.tar.gz Doxygen-e03e2a29f9279deabe62d795b0db925a982d0eef.tar.bz2 |
issue #2732: Adding support for C++ concepts (Origin: bugzilla #499352)
Diffstat (limited to 'src/perlmodgen.cpp')
-rw-r--r-- | src/perlmodgen.cpp | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index ab931f9..6bf7319 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -1434,6 +1434,11 @@ static void addTemplateList(const ClassDef *cd,PerlModOutput &output) addTemplateArgumentList(cd->templateArguments(),output,cd->name()); } +static void addTemplateList(const ConceptDef *cd,PerlModOutput &output) +{ + addTemplateArgumentList(cd->getTemplateParameterList(),output,cd->name()); +} + static void addPerlModDocBlock(PerlModOutput &output, const char *name, const QCString &fileName, @@ -1516,7 +1521,9 @@ public: void generatePerlModSection(const Definition *d, MemberList *ml, const char *name, const char *header=0); void addListOfAllMembers(const ClassDef *cd); + void addIncludeInfo(const IncludeInfo *ii); void generatePerlModForClass(const ClassDef *cd); + void generatePerlModForConcept(const ConceptDef *cd); void generatePerlModForNamespace(const NamespaceDef *nd); void generatePerlModForFile(const FileDef *fd); void generatePerlModForGroup(const GroupDef *gd); @@ -1780,6 +1787,22 @@ void PerlModGenerator::generatePerlUserDefinedSection(const Definition *d, const } } +void PerlModGenerator::addIncludeInfo(const IncludeInfo *ii) +{ + if (ii) + { + QCString nm = ii->includeName; + if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName(); + if (!nm.isEmpty()) + { + m_output.openHash("includes"); + m_output.addFieldBoolean("local", ii->local) + .addFieldQuotedString("name", nm) + .closeHash(); + } + } +} + void PerlModGenerator::generatePerlModForClass(const ClassDef *cd) { // + brief description @@ -1844,23 +1867,7 @@ void PerlModGenerator::generatePerlModForClass(const ClassDef *cd) m_output.closeList(); } - const IncludeInfo *ii=cd->includeInfo(); - if (ii) - { - QCString nm = ii->includeName; - if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName(); - if (!nm.isEmpty()) - { - m_output.openHash("includes"); -#if 0 - if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references - t << " id=\"" << ii->fileDef->getOutputFileBase() << "\""; -#endif - m_output.addFieldBoolean("local", ii->local) - .addFieldQuotedString("name", nm) - .closeHash(); - } - } + addIncludeInfo(cd->includeInfo()); addTemplateList(cd,m_output); addListOfAllMembers(cd); @@ -1922,6 +1929,22 @@ void PerlModGenerator::generatePerlModForClass(const ClassDef *cd) m_output.closeHash(); } +void PerlModGenerator::generatePerlModForConcept(const ConceptDef *cd) +{ + if (cd->isReference()) return; // skip external references + + m_output.openHash() + .addFieldQuotedString("name", cd->name()); + + addIncludeInfo(cd->includeInfo()); + addTemplateList(cd,m_output); + m_output.addFieldQuotedString("initializer", cd->initializer()); + addPerlModDocBlock(m_output,"brief",cd->getDefFileName(),cd->getDefLine(),0,0,cd->briefDescription()); + addPerlModDocBlock(m_output,"detailed",cd->getDefFileName(),cd->getDefLine(),0,0,cd->documentation()); + + m_output.closeHash(); +} + void PerlModGenerator::generatePerlModForNamespace(const NamespaceDef *nd) { // + contained class definitions @@ -2154,6 +2177,11 @@ bool PerlModGenerator::generatePerlModOutput() generatePerlModForClass(cd.get()); m_output.closeList(); + m_output.openList("concepts"); + for (const auto &cd : *Doxygen::conceptLinkedMap) + generatePerlModForConcept(cd.get()); + m_output.closeList(); + m_output.openList("namespaces"); for (const auto &nd : *Doxygen::namespaceLinkedMap) generatePerlModForNamespace(nd.get()); |