Hello Johannes,

On 01/22/2014 02:18 AM, Johannes wrote:
On 21.01.2014 22:41, Carsten Neumann wrote:

Sorry, never tried to build it on windows, I assume you've been
following their instructions on
<http://www.stack.nl/~dimitri/doxygen/manual/install.html> ?

No did not see them :-(
With this instructions building doxygen went perfectly fine!

glad to hear it's working!

- Why can't we just go with the current doxygen release?

In the meantime my run with 1.8.6 also finished, the result looks good
to me (better than what 1.8.1.1 produced) - so using and up-to-date,
unpatched doxygen seems quite plausible.
Perhaps you could share what problems you encountered with 1.8.6?
I did get warnings for \nohierarchy and \includebasedoc statements. My
intention is to build the correct user documentation.

- If not, is it not possible to bring the patches to the doxygen folks?

Possibly, if they don't consider them to specific to be generally
useful. You could ask them directly to find out.

Not really, I can't stand for some patches I do not know anything about.

So if the patches would be compatible with the current doxygen release
all problems would be solved :-)

AFAICS patches 02_infinite_recursion_fix.patch and 04_qvaluestack.patch are not needed any longer, the doxygen git repo contains equivalent changes (so does 1.8.6). I'm attaching a version of 01_custom_commands.patch against doxygen.git from today (2014-01-24, 62379ff8fdb13d95c7651419d92db47150e15bcc), it applies against 1.8.6 (with some fuzz) as well. Output with the patched doxygen seems a bit nicer (e.g. member functions appear in the group the source lists them in) - however, I don't know what the desired effect of the custom commands is exactly, so I can't say for sure if they are working as intended. Anyway, hope this is somewhat helpful. Finally, 03_perf.patch requires better understanding of doxygen then I've been able to acquire today, it'll have to wait for another day.

        Cheers,
                Carsten

diff --git a/src/classdef.cpp b/src/classdef.cpp
index 419e387..9dcc4ef 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -173,6 +173,12 @@ class ClassDefImpl
     /** List of titles to use for the summary */
     SDict<QCString> vhdlSummaryTitles;
 
+    /** Omit this class in the hierarchy */
+    bool notInHierarchy;
+
+    /** Include documented members from the base class */
+    bool includeBaseDocs;
+
     /** Is this a simple (non-nested) C structure? */
     bool isSimple;
 
@@ -227,11 +233,14 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
   membersMerged = FALSE;
   categoryOf = 0;
   usedOnly = FALSE;
+  notInHierarchy = FALSE;
+  includeBaseDocs = FALSE;
   isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS");
   arrowOperator = 0;
   taggedInnerClasses = 0;
   tagLessRef = 0;
   spec=0;
+
   //QCString ns;
   //extractNamespaceName(name,className,ns);
   //printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data());
@@ -2640,7 +2649,8 @@ bool ClassDef::isVisibleInHierarchy()
        isReference()
       ) &&
       // is not part of an unnamed namespace or shown anyway
-      (!m_impl->isStatic || extractStatic);
+      (!m_impl->isStatic || extractStatic) &&
+      (!m_impl->notInHierarchy);
 }
 
 bool ClassDef::hasDocumentation() const
@@ -2731,7 +2741,6 @@ void ClassDef::mergeMembers()
   int sepLen = sep.length();
 
   m_impl->membersMerged=TRUE;
-  //printf("  mergeMembers for %s\n",name().data());
   bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" );
   if (baseClasses())
   {
@@ -2745,6 +2754,11 @@ void ClassDef::mergeMembers()
       // merge the members in the base class of this inheritance branch first
       bClass->mergeMembers();
 
+      if(m_impl->includeBaseDocs == false)
+      {
+          continue;
+      }
+
       MemberNameInfoSDict *srcMnd  = bClass->memberNameInfoSDict();
       MemberNameInfoSDict *dstMnd  = m_impl->allMemberNameInfoSDict;
 
@@ -2856,7 +2870,7 @@ void ClassDef::mergeMembers()
                 if (bcd->prot==Protected && prot==Public)       prot=bcd->prot;
                 else if (bcd->prot==Private)                    prot=bcd->prot;
 
-                if (inlineInheritedMembers)
+                if (inlineInheritedMembers || m_impl->includeBaseDocs == true)
                 {
                   if (!isStandardFunc(srcMd))
                   {
@@ -2933,7 +2947,7 @@ void ClassDef::mergeMembers()
                   Specifier virt=mi->virt;
                   if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
 
-                  if (inlineInheritedMembers)
+                  if (inlineInheritedMembers || m_impl->includeBaseDocs)
                   {
                     if (!isStandardFunc(mi->memberDef))
                     {
@@ -4434,6 +4448,16 @@ bool ClassDef::isSimple() const
   return m_impl->isSimple;
 }
 
+void ClassDef::setNotInHierarchy(bool b)
+{
+  m_impl->notInHierarchy = b;
+}
+
+void ClassDef::setIncludeBaseDocs(bool b)
+{
+  m_impl->includeBaseDocs = b;
+}
+
 MemberDef *ClassDef::isSmartPointer() const
 {
   return m_impl->arrowOperator;
diff --git a/src/classdef.h b/src/classdef.h
index 35c093c..5472925 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -358,6 +358,9 @@ class ClassDef : public Definition
     void addTaggedInnerClass(ClassDef *cd);
     void setTagLessReference(ClassDef *cd);
 
+    void setNotInHierarchy (bool b);
+    void setIncludeBaseDocs(bool b);
+
     //-----------------------------------------------------------------------------------
     // --- actions ----
     //-----------------------------------------------------------------------------------
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 1eac506..8f7ff3b 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1337,9 +1337,13 @@ static void addClassToContext(EntryNav *rootNav)
     cd->setBodySegment(root->bodyLine,root->endBodyLine);       
     cd->setBodyDef(fd);         
 
+
     // see if the class is found inside a namespace     
     //bool found=addNamespace(root,cd);         
 
+    cd->setNotInHierarchy (root->notInHierarchy);
+    cd->setIncludeBaseDocs(root->includeBaseDocs);
+
     cd->insertUsedFile(fd);
 
     // add class to the list
@@ -8056,7 +8060,7 @@ static void generateClassList(ClassSDict &classSDict)
       // template instances 
       if ( cd->isLinkableInProject() && cd->templateMaster()==0)
       {
-        msg("Generating docs for compound %s...\n",cd->name().data());
+        msg("Generating docs for compound 1 %s...\n",cd->name().data());
 
         cd->writeDocumentation(*g_outputList);
         cd->writeMemberList(*g_outputList);
@@ -8965,7 +8969,7 @@ static void generateNamespaceDocs()
            && !cd->isHidden() && !cd->isEmbeddedInOuterScope()
          )
       {
-        msg("Generating docs for compound %s...\n",cd->name().data());
+        msg("Generating docs for compound 2 %s...\n",cd->name().data());
 
         cd->writeDocumentation(*g_outputList);
         cd->writeMemberList(*g_outputList);
diff --git a/src/entry.cpp b/src/entry.cpp
index 15263ab..aaee9db 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -129,11 +129,13 @@ Entry::Entry(const Entry &e)
   {
     sli=0;
   }
-  lang        = e.lang;
-  hidden      = e.hidden;
-  artificial  = e.artificial;
-  groupDocType = e.groupDocType;
-  id          = e.id;
+  lang            = e.lang;
+  hidden          = e.hidden;
+  artificial      = e.artificial;
+  notInHierarchy  = e.notInHierarchy;
+  includeBaseDocs = e.includeBaseDocs;
+  groupDocType    = e.groupDocType;
+  id              = e.id;
 
   m_parent    = e.m_parent;
   m_sublist   = new QList<Entry>;
@@ -257,6 +259,8 @@ void Entry::reset()
   lang = SrcLangExt_Unknown;
   hidden = FALSE;
   artificial = FALSE;
+  notInHierarchy  = FALSE;
+  includeBaseDocs = FALSE;
   subGrouping = TRUE;
   protection = Public;
   groupDocType = GROUPDOC_NORMAL;
diff --git a/src/entry.h b/src/entry.h
index cecd095..37a882d 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -281,10 +281,11 @@ class Entry
     SrcLangExt  lang;         //!< programming language in which this entry was found
     bool        hidden;       //!< does this represent an entity that is hidden from the output
     bool        artificial;   //!< Artificially introduced item
+    bool        notInHierarchy;
+    bool        includeBaseDocs;
     GroupDocType groupDocType;
     QCString    id;           //!< libclang id
 
-
     static int  num;          //!< counts the total number of entries
 
     /// return the command name used to define GROUPDOC_SEC
diff --git a/src/marshal.cpp b/src/marshal.cpp
index a6b3e75..430ceeb 100644
--- a/src/marshal.cpp
+++ b/src/marshal.cpp
@@ -396,6 +396,8 @@ void marshalEntry(StorageIntf *s,Entry *e)
   marshalInt(s,(int)e->lang);
   marshalBool(s,e->hidden);
   marshalBool(s,e->artificial);
+  marshalBool(s, e->notInHierarchy);
+  marshalBool(s, e->includeBaseDocs);
   marshalInt(s,(int)e->groupDocType);
   marshalQCString(s,e->id);
 }
@@ -781,6 +783,8 @@ Entry * unmarshalEntry(StorageIntf *s)
   e->lang             = (SrcLangExt)unmarshalInt(s);
   e->hidden           = unmarshalBool(s);
   e->artificial       = unmarshalBool(s);
+  e->notInHierarchy   = unmarshalBool(s);
+  e->includeBaseDocs  = unmarshalBool(s);
   e->groupDocType     = (Entry::GroupDocType)unmarshalInt(s);
   e->id               = unmarshalQCString(s);
   return e;
diff --git a/src/scanner.l b/src/scanner.l
index 89ebb43..3626c5a 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6233,6 +6233,8 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 					    REJECT;
 					  }
   					}
+<DocBlock>{CMD}("nohierarchy")	  { current->notInHierarchy  = true; }
+<DocBlock>{CMD}("includebasedoc") { current->includeBaseDocs = true; }
 <DocBlock>[^@*~\/\\\n]+			{ // any character that isn't special
   					  docBlock+=yytext;
   					}
diff --git a/src/util.cpp b/src/util.cpp
index 91f6fda..604b824 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1937,7 +1937,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
     { 
       if (txtStr.at(i)=='"') insideString=!insideString; 
     }
-
+    autoBreak = false;
     //printf("floatingIndex=%d strlen=%d autoBreak=%d\n",floatingIndex,strLen,autoBreak);
     if (strLen>35 && floatingIndex>30 && autoBreak) // try to insert a split point
     {
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to