Orb/Doxygen/src/classlist.cpp
changeset 0 42188c7ea2d9
child 4 468f4c8d3d5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orb/Doxygen/src/classlist.cpp	Thu Jan 21 17:29:01 2010 +0000
@@ -0,0 +1,182 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * Copyright (C) 1997-2008 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby 
+ * granted. No representations are made about the suitability of this software 
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include "classlist.h"
+#include "config.h"
+#include "util.h"
+#include "outputlist.h"
+#include "language.h"
+#include "doxygen.h"
+#include "vhdldocgen.h"
+
+ClassList::ClassList() : QList<ClassDef>()
+{
+}
+
+ClassList::~ClassList()
+{
+}
+
+static int compItems(void *item1,void *item2)
+{
+  ClassDef *c1=(ClassDef *)item1;
+  ClassDef *c2=(ClassDef *)item2;
+  static bool b = Config_getBool("SORT_BY_SCOPE_NAME");
+  //printf("compItems: %d %s<->%s\n",b,c1->qualifiedName().data(),c2->qualifiedName().data());
+  if (b) 
+  { 
+     return stricmp(c1->name(),
+                    c2->name());
+  }
+  else
+  {
+     return stricmp(c1->className(),
+                    c2->className());
+  }
+}
+
+int ClassList::compareItems(GCI item1, GCI item2)
+{
+  return compItems(item1,item2);
+}
+
+int ClassSDict::compareItems(GCI item1, GCI item2)
+{
+  return compItems(item1,item2);
+}
+
+ClassListIterator::ClassListIterator(const ClassList &cllist) :
+  QListIterator<ClassDef>(cllist)
+{
+}
+
+void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter,
+                                  const char *header,bool localNames)
+{
+  static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+  static bool vhdlOpt    = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+  if (count()>0)
+  {
+    ClassSDict::Iterator sdi(*this);
+    ClassDef *cd=0;
+    bool found=FALSE;
+    for (sdi.toFirst();(cd=sdi.current());++sdi)
+    {
+      if (cd->name().find('@')==-1 && 
+          (filter==0 || *filter==cd->compoundType())
+         )
+      {
+        bool isLink = cd->isLinkable();
+        if (isLink || 
+             (!Config_getBool("HIDE_UNDOC_CLASSES") && 
+              (!cd->isLocal() || Config_getBool("EXTRACT_LOCAL_CLASSES"))
+             )
+           )
+        {
+          if (!found)
+          {
+            ol.startMemberHeader();
+            if (header)
+            {
+              ol.parseText(header);
+            }
+            else if (vhdlOpt)
+            {
+              ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE));
+            }
+            else
+            {
+              ol.parseText(fortranOpt ? theTranslator->trDataTypes() :
+                                        theTranslator->trCompounds());
+            }
+            ol.endMemberHeader();
+            ol.startMemberList();
+            found=TRUE;
+          }
+          if (!Config_getString("GENERATE_TAGFILE").isEmpty() &&
+              !cd->isReference())  // skip classes found in tag files
+          {
+            Doxygen::tagFile << "    <class kind=\"" << cd->compoundTypeString() 
+              << "\">" << convertToXML(cd->name()) << "</class>" << endl;
+          }
+          ol.startMemberItem(FALSE);
+          QCString tmp = cd->compoundTypeString();
+          QCString cname;
+          if (localNames)
+          {
+            cname = cd->localName();
+          }
+          else
+          {
+            cname = cd->displayName();
+          }
+
+          if (!vhdlOpt) // for VHDL we swap the name and the type
+          {
+            ol.writeString(tmp);
+            ol.writeString(" ");
+            ol.insertMemberAlign();
+          }
+          if (isLink) 
+          {
+            ol.writeObjectLink(cd->getReference(),
+                cd->getOutputFileBase(),
+                0,
+                cname
+                );
+          }
+          else 
+          {
+            ol.startBold();
+            ol.docify(cname);
+            ol.endBold();
+          }
+          if (vhdlOpt) // now write the type
+          {
+            ol.insertMemberAlign();
+            VhdlDocGen::writeClassType(cd,ol,cname);
+          }
+          ol.endMemberItem();
+          if (!cd->briefDescription().isEmpty())
+          {
+            ol.startMemberDescription();
+            ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0,
+                cd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
+            if (//(!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
+                //!cd->documentation().isEmpty())
+                cd->isLinkableInProject()
+                )
+            {
+              ol.pushGeneratorState();
+              ol.disableAllBut(OutputGenerator::Html);
+              //ol.endEmphasis();
+              ol.docify(" ");
+              ol.startTextLink(cd->getOutputFileBase(),"_details");
+              ol.parseText(theTranslator->trMore());
+              ol.endTextLink();
+              //ol.startEmphasis();
+              ol.popGeneratorState();
+            }
+            ol.endMemberDescription();
+          }
+        }
+      }
+    }
+    if (found) ol.endMemberList();
+  }
+}
+