Commit cd19d7a2 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.6.3

parent e2eb1d33
DOXYGEN Version 1.6.2-20100216
DOXYGEN Version 1.6.3
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (16 February 2010)
Dimitri van Heesch (21 February 2010)
DOXYGEN Version 1.6.2_20100216
DOXYGEN Version 1.6.3
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (16 February 2010)
Dimitri van Heesch (dimitri@stack.nl) (21 February 2010)
......@@ -17,10 +17,10 @@
doxygen_version_major=1
doxygen_version_minor=6
doxygen_version_revision=2
doxygen_version_revision=3
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20100216
doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -395,6 +395,8 @@ static bool inGroupParamFound;
static int braceCount;
static bool insidePre;
static bool parseMore;
static int g_condCount;
static int g_sectionLevel;
static int g_commentCount;
......@@ -1691,6 +1693,48 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
}
<SkipInternal>[@\\]"if"/[ \t] {
g_condCount++;
}
<SkipInternal>[@\\]"ifnot"/[ \t] {
g_condCount++;
}
<SkipInternal>[@\\]/"endif" {
g_condCount--;
if (g_condCount<0) // handle conditional section around of \internal, see bug607743
{
unput('\\');
BEGIN(Comment);
}
}
<SkipInternal>[@\\]/"section"[ \t] {
if (g_sectionLevel>0)
{
unput('\\');
BEGIN(Comment);
}
}
<SkipInternal>[@\\]/"subsection"[ \t] {
if (g_sectionLevel>1)
{
unput('\\');
BEGIN(Comment);
}
}
<SkipInternal>[@\\]/"subsubsection"[ \t] {
if (g_sectionLevel>2)
{
unput('\\');
BEGIN(Comment);
}
}
<SkipInternal>[@\\]/"paragraph"[ \t] {
if (g_sectionLevel>3)
{
unput('\\');
BEGIN(Comment);
}
}
<SkipInternal>[^ \\@\n]+ { // skip non-special characters
}
<SkipInternal>. { // any other character
......@@ -2134,6 +2178,10 @@ static bool handleSection(const QCString &s)
setOutput(OutputDoc);
addOutput("@"+s+" ");
BEGIN(SectionLabel);
if (s=="section") g_sectionLevel=1;
else if (s=="subsection") g_sectionLevel=2;
else if (s=="subsubsection") g_sectionLevel=3;
else if (s=="paragraph") g_sectionLevel=4;
return FALSE;
}
......@@ -2283,6 +2331,7 @@ static bool handleInternal(const QCString &)
{
current->doc.resize(0);
}
g_condCount=0;
BEGIN( SkipInternal );
}
else
......@@ -2409,6 +2458,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
outputXRef.resize(0);
setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
briefEndsAtDot = isAutoBriefOn;
g_condCount = 0;
g_sectionLevel = 0;
if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
{
......
......@@ -449,7 +449,7 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
{
switch(brief.at(bl-1))
{
case '.': case '!': case '?': break;
case '.': case '!': case '?': case '>': case ':': break;
default:
if (uni_isupper(brief.at(0))) brief+='.';
break;
......
......@@ -4929,8 +4929,11 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
DBG(("handleHtmlStartTag(%s,%d)\n",tagName.data(),tagHtmlAttribs.count()));
int retval=RetVal_OK;
int tagId = Mappers::htmlTagMapper->map(tagName);
if (g_token->emptyTag && !(tagId&XML_CmdMask) && tagId!=HTML_UNKNOWN)
if (g_token->emptyTag && !(tagId&XML_CmdMask) &&
tagId!=HTML_UNKNOWN && tagId!=HTML_IMG && tagId!=HTML_BR)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: HTML tags may not use the 'empty tag' XHTML syntax.");
}
switch (tagId)
{
case HTML_UL:
......
......@@ -35,7 +35,7 @@
#include "pagedef.h"
#include "portable.h"
#include "dirdef.h"
#include "vhdldocgen.h"
#include <qdir.h>
#include <qfile.h>
#include <qtextstream.h>
......@@ -718,9 +718,18 @@ void DotNode::writeBox(QTextStream &t,
}
else
{
if (!Config_getBool("DOT_TRANSPARENT"))
static bool dotTransparent = Config_getBool("DOT_TRANSPARENT");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (!dotTransparent)
{
t << ",color=\"" << labCol << "\", fillcolor=\"white\", style=\"filled\"";
ClassDef* ccd=this->m_classDef;
t << ",color=\"" << labCol << "\", fillcolor=\"";
if (ccd && vhdlOpt && (VhdlDocGen::VhdlClasses)ccd->protection()==VhdlDocGen::ARCHITECTURECLASS)
t << "khaki";
else
t << "white";
t << "\", style=\"filled\"";
}
else
{
......
......@@ -10025,14 +10025,12 @@ void parseInput()
msg("Computing class relations...\n");
computeTemplateClassRelations();
flushUnresolvedRelations();
computeClassRelations();
if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
{
VhdlDocGen::computeVhdlComponentRelations();
}
else
{
computeClassRelations();
}
g_classEntries.clear();
msg("Add enum values to enums...\n");
......
......@@ -80,6 +80,8 @@ static bool mustBeOutsideParagraph(DocNode *n)
/* <h?> */
case DocNode::Kind_Section:
case DocNode::Kind_HtmlHeader:
/* \internal */
case DocNode::Kind_Internal:
/* <div> */
case DocNode::Kind_Verbatim:
case DocNode::Kind_Include:
......@@ -705,6 +707,7 @@ void HtmlDocVisitor::visitPre(DocPara *p)
switch (p->parent()->kind())
{
case DocNode::Kind_Section:
case DocNode::Kind_Internal:
case DocNode::Kind_HtmlListItem:
case DocNode::Kind_HtmlDescData:
case DocNode::Kind_HtmlCell:
......@@ -784,6 +787,7 @@ void HtmlDocVisitor::visitPost(DocPara *p)
switch (p->parent()->kind())
{
case DocNode::Kind_Section:
case DocNode::Kind_Internal:
case DocNode::Kind_HtmlListItem:
case DocNode::Kind_HtmlDescData:
case DocNode::Kind_HtmlCell:
......@@ -1106,17 +1110,17 @@ void HtmlDocVisitor::visitPost(DocHtmlCaption *)
m_t << "</caption>\n";
}
void HtmlDocVisitor::visitPre(DocInternal *)
void HtmlDocVisitor::visitPre(DocInternal *i)
{
if (m_hide) return;
forceEndParagraph(i);
m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl;
m_t << "<p>" << endl;
}
void HtmlDocVisitor::visitPost(DocInternal *)
void HtmlDocVisitor::visitPost(DocInternal *i)
{
if (m_hide) return;
m_t << "</p>" << endl;
forceStartParagraph(i);
}
void HtmlDocVisitor::visitPre(DocHRef *href)
......
......@@ -317,8 +317,21 @@ void endFile(OutputList &ol,bool)
static bool classHasVisibleChildren(ClassDef *cd)
{
if (cd->subClasses()==0) return FALSE;
BaseClassList *bcl=cd->subClasses();
bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
BaseClassList *bcl;
if (vhdl) // reverse baseClass/subClass relation
{
if (cd->baseClasses()==0) return FALSE;
bcl=cd->baseClasses();
}
else
{
if (cd->subClasses()==0) return FALSE;
bcl=cd->subClasses();
}
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current() ; ++bcli)
{
......@@ -332,13 +345,25 @@ static bool classHasVisibleChildren(ClassDef *cd)
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv)
{
static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (bcl==0) return;
BaseClassListIterator bcli(*bcl);
bool started=FALSE;
for ( ; bcli.current() ; ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
if (cd->isVisibleInHierarchy() && hasVisibleRoot(cd->baseClasses()))
bool b;
if (vhdl)
{
b=hasVisibleRoot(cd->subClasses());
}
else
{
b=hasVisibleRoot(cd->baseClasses());
}
if (cd->isVisibleInHierarchy() && b) // hasVisibleRoot(cd->baseClasses()))
{
if (!started)
{
......@@ -382,7 +407,14 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,F
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
bool wasVisited=cd->visited;
cd->visited=TRUE;
writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv);
if (vhdl)
{
writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv);
}
else
{
writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv);
}
}
ol.endIndexListItem();
}
......@@ -441,6 +473,8 @@ void writeClassTree(BaseClassList *cl,int level)
void writeClassTreeNode(ClassDef *cd,bool &started,int level)
{
//printf("writeClassTreeNode(%s) visited=%d\n",cd->name().data(),cd->visited);
static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (cd->isVisibleInHierarchy() && !cd->visited)
{
if (!started)
......@@ -455,7 +489,14 @@ void writeClassTreeNode(ClassDef *cd,bool &started,int level)
}
if (hasChildren)
{
writeClassTree(cd->subClasses(),level+1);
if (vhdl)
{
writeClassTree(cd->baseClasses(),level+1);
}
else
{
writeClassTree(cd->subClasses(),level+1);
}
}
cd->visited=TRUE;
}
......@@ -495,6 +536,7 @@ void writeClassTree(ClassSDict *d,int level)
static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv)
{
static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL");
ClassSDict::Iterator cli(*cl);
for (;cli.current(); ++cli)
{
......@@ -504,7 +546,22 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
// hasVisibleRoot(cd->baseClasses()),
// cd->isVisibleInHierarchy()
// );
if (!hasVisibleRoot(cd->baseClasses())) // filter on root classes
bool b;
if (vhdl)
{
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
{
continue;
}
b=!hasVisibleRoot(cd->subClasses());
}
else
{
b=!hasVisibleRoot(cd->baseClasses());
}
if (b) //filter on root classes
{
if (cd->isVisibleInHierarchy()) // should it be visible
{
......@@ -543,7 +600,12 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
if (ftv)
ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0);
}
if (hasChildren)
if (vhdl && hasChildren)
{
writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv);
cd->visited=TRUE;
}
else if (hasChildren)
{
writeClassTree(ol,cd->subClasses(),cd->visited,1,ftv);
cd->visited=TRUE;
......@@ -1073,6 +1135,13 @@ void writeAnnotatedClassList(OutputList &ol)
{
QCString type=cd->compoundTypeString();
ol.startIndexKey();
static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (vhdl)
{
QCString prot= VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)cd->protection());
ol.docify(prot.data());
ol.insertMemberAlign();
}
ol.writeObjectLink(0,cd->getOutputFileBase(),0,cd->displayName());
ol.endIndexKey();
bool hasBrief = !cd->briefDescription().isEmpty();
......
......@@ -351,7 +351,7 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
" \\setlength{\\itemsep}{-4pt}%\n"
" \\renewcommand{\\makelabel}{\\entrylabel}%\n"
" }%\n"
" \\item[#1:]%\n"
" \\item[#1]%\n"
"}{%\n"
" \\end{list}%\n"
"}\n\n";
......@@ -504,9 +504,8 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
"}\n\n";
t << "% Used by @internal\n"
"\\newenvironment{DoxyInternal}[1]{%\n"
" \\begin{DoxyDesc}{#1}%\n"
" \\paragraph*{#1}%\n"
"}{%\n"
" \\end{DoxyDesc}%\n"
"}\n\n";
t << "% Used by @par and @paragraph\n"
"\\newenvironment{DoxyParagraph}[1]{%\n"
......@@ -1127,6 +1126,7 @@ void LatexGenerator::startParagraph()
void LatexGenerator::endParagraph()
{
t << endl << endl;
}
void LatexGenerator::writeString(const char *text)
......@@ -1658,7 +1658,6 @@ void LatexGenerator::startClassDiagram()
{
//if (Config_getBool("COMPACT_LATEX")) t << "\\subsubsection"; else t << "\\subsection";
//t << "{";
newParagraph();
}
void LatexGenerator::endClassDiagram(const ClassDiagram &d,
......
......@@ -145,7 +145,7 @@ static bool insideTryBlock=FALSE;
static bool insideCode;
static bool needsSemi;
static int depthIf;
//static int depthIf;
static int initBracketCount;
static QCString memberGroupRelates;
static QCString memberGroupInside;
......@@ -5495,7 +5495,7 @@ static void parseCompounds(Entry *rt)
// ce->name.data(),ce->program.data());
// init scanner state
padCount=0;
depthIf = 0;
//depthIf = 0;
inputString = ce->program;
inputPosition = 0;
scanYYrestart( scanYYin ) ;
......@@ -5577,10 +5577,10 @@ static void parseCompounds(Entry *rt)
ce->program.resize(0);
if (depthIf>0)
{
warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
}
//if (depthIf>0)
//{
// warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
//}
}
parseCompounds(ce);
}
......@@ -5598,7 +5598,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
g_inputFromFile = FALSE;
//anonCount = 0; // don't reset per file
depthIf = 0;
//depthIf = 0;
protection = Public;
mtype = Method;
gstat = FALSE;
......@@ -5648,10 +5648,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
//forceEndGroup();
groupLeaveFile(yyFileName,yyLineNr);
if (depthIf>0)
{
warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
}
//if (depthIf>0)
//{
// warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
//}
rt->program.resize(0);
delete current; current=0;
......
......@@ -1595,9 +1595,9 @@ nextChar:
ADD_CHAR(' ');
}
else if (i>0 &&
((isId(s.at(i)) && s.at(i-1)==')') ||
(s.at(i)=='\'' && s.at(i-1)==' ')
)
((isId(s.at(i)) && s.at(i-1)==')') ||
(s.at(i)=='\'' && s.at(i-1)==' ')
)
)
{
ADD_CHAR(' ');
......@@ -6325,7 +6325,7 @@ bool findAndRemoveWord(QCString &s,const QCString &word)
{
if (s.mid(i,l)==word)
{
if (i>0 && isspace(s.at(i-1)))
if (i>0 && isspace((uchar)s.at(i-1)))
i--,l++;
else if (i+l<(int)s.length() && isspace(s.at(i+l)))
l++;
......
......@@ -199,7 +199,7 @@ int guessSection(const char *name);
inline bool isId(int c)
{
return c=='_' || isalnum(c) || c>=128 || c<0;
return c=='_' || c>=128 || c<0 || isalnum(c);
}
QCString removeRedundantWhiteSpace(const QCString &s);
......
......@@ -213,17 +213,20 @@ void VhdlDocGen::computeVhdlComponentRelations()
{
cli.current()->visited=FALSE;
ClassDef * cd = cli.current();
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
{
QCString bName=cd->name();
int i=bName.find("::");
if (i>0)
{
QCString entityName=bName.left(i);
entityName.stripPrefix("_");
ClassDef *classEntity=Doxygen::classSDict->find(entityName);
// entity for architecutre ?
if (classEntity)
{
// printf("\n entity %s arch %s",entityName.data(),bName.data());
classEntity->insertBaseClass(cd,bName,Public,Normal,0);
cd->insertSubClass(classEntity,Public,Normal,0);
}
......@@ -1163,6 +1166,19 @@ void VhdlDocGen::getFuncParams(QList<Argument>& ql, const char* str)
}//while
} // getFuncName
QCString VhdlDocGen::getProtectionName(int prot)
{
if (prot==VhdlDocGen::ENTITYCLASS)
return "entity";
else if (prot==VhdlDocGen::ARCHITECTURECLASS)
return "architecture";
else if (prot==VhdlDocGen::PACKAGECLASS)
return "package";
else if (prot==VhdlDocGen::PACKBODYCLASS)
return "package body";
return "";
}
QCString VhdlDocGen::trTypeString(int type)
{
......
......@@ -264,7 +264,7 @@ class VhdlDocGen
static bool membersHaveSpecificType(MemberList *ml,int type);
static void startFonts(const QCString& q, const char *keyword,OutputList& ol);
static bool isNumber(const QCString& s);
static QCString getProtectionName(int prot);
private:
static void getFuncParams(QList<Argument>&, const char* str);
static bool compareArgList(ArgumentList*,ArgumentList*);
......
......@@ -875,6 +875,11 @@ ENDPROTECEDBODY "end"{BR}+"protected"{BR}+"body"{BR}+{NAME}
current->name=QCString(qsl[0]);
if (lastCompound)
{
if (!VhdlDocGen::foundInsertedComponent(current->type,lastCompound))
{
BaseInfo *bb=new BaseInfo(current->type,Public,Normal);
lastCompound->extends->append(bb);
}
lastCompound->addSubEntry(current);
current = new Entry;
initEntry(current);
......@@ -968,15 +973,15 @@ ENDPROTECEDBODY "end"{BR}+"protected"{BR}+"body"{BR}+{NAME}
//current->name+=qcs.lower();
current->name.prepend(qcs+"::");
if (lastEntity)
{
//if (lastEntity)
//{
// inherit private inheritance relation between entity and architecture
if (!VhdlDocGen::foundInsertedComponent(current->name,lastEntity))
{
BaseInfo *bb=new BaseInfo(current->name,Private,Normal);
lastEntity->extends->append(bb);
}
}
//if (!VhdlDocGen::foundInsertedComponent(current->name,lastEntity))
//{
// BaseInfo *bb=new BaseInfo(current->name,Private,Normal);
// lastEntity->extends->append(bb);
//}
//}
}
else if (current->spec==VhdlDocGen::PACKAGE_BODY)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment