Commit 8491e9fb authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.5.1-20111027

parent 3af6ff4c
...@@ -121,6 +121,7 @@ EXCLUDE = src/code.cpp \ ...@@ -121,6 +121,7 @@ EXCLUDE = src/code.cpp \
src/doxygen_php.h \ src/doxygen_php.h \
src/compound_xsd.h \ src/compound_xsd.h \
src/layout_default.h \ src/layout_default.h \
src/bib2xhtml.h
EXCLUDE_SYMLINKS = NO EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXCLUDE_SYMBOLS =
......
DOXYGEN Version 1.7.5.1-20110925 DOXYGEN Version 1.7.5.1-20111027
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (25 September 2011) Dimitri van Heesch (27 October 2011)
DOXYGEN Version 1.7.5.1_20110925 DOXYGEN Version 1.7.5.1_20111027
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (25 September 2011) Dimitri van Heesch (dimitri@stack.nl) (27 October 2011)
...@@ -20,7 +20,7 @@ doxygen_version_minor=7 ...@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=5.1 doxygen_version_revision=5.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20110925 doxygen_version_mmn=20111027
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -629,8 +629,7 @@ Structural indicators ...@@ -629,8 +629,7 @@ Structural indicators
*/ */
\endverbatim \endverbatim
You can refer to the main page using \\ref index (if the treeview You can refer to the main page using \\ref index.
is disabled, otherwise you should use \\ref main).
\sa section \ref cmdsection "\\section", \sa section \ref cmdsection "\\section",
section \ref cmdsubsection "\\subsection", and section \ref cmdsubsection "\\subsection", and
......
...@@ -254,6 +254,12 @@ in a configuration file from the command line (assuming a UNIX environment): ...@@ -254,6 +254,12 @@ in a configuration file from the command line (assuming a UNIX environment):
( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen - ( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -
\endverbatim \endverbatim
For Windows the following would do the same:
\verbatim
( type Doxyfile & echo PROJECT_NUMBER=1.0 ) | doxygen.exe -
\endverbatim
If multiple options with the same name are specified then doxygen will use If multiple options with the same name are specified then doxygen will use
the last one. To append to an existing option you can use the += operator. the last one. To append to an existing option you can use the += operator.
......
This diff is collapsed.
#
# Below is a stripped down version of bib2xhtml used by doxygen.
# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/
#
# Convert from bibtex to XHTML.
#
# (C) Copyright 1995, 1996 David Hull.
# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
#
# (C) Copyright 2002-2010 Diomidis Spinellis
# http://www.spinellis.gr
#
# This program is free software. You can redistribute it and/or modify
# it under the terms of the GNU General Public License. See the
# files README and COPYING for details.
#
# This source code contains UTF-8 characters. You might want to use
# an appropriate editor, if you want to view/modify the LaTeX to Unicode
# substitution commands.
#
use Getopt::Std;
use open IO => ':crlf';
$label_styles{'numbered'} = $LABEL_NUMBERED = 2;
$list_start[$LABEL_NUMBERED] = 'dl class="citelist"';
$list_end[$LABEL_NUMBERED] = "/dl";
@tmpfiles = ();
sub html_ent {
s/\\i\b/i/g;
s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs;
s/\\\'([AEIOUaeiou])/&$1acute;/g;
s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs;
s/\\\`([AEIOUaeiou])/&$1grave;/g;
s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs;
s/\\\"([AEIOUaeiouy])/&$1uml;/g;
s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs;
s/\\\~([ANOano])/&$1tilde;/g;
s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs;
s/\\\^([AEIOUaeiou])/&$1circ;/g;
s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs;
s/\\u(\001\d+)\{(.)\1\}/$2/gs;
s/\\v(\001\d+)\{(.)\1\}/$2/gs;
s/\\([lL])\b/$1/g;
s/\\\=(\001\d+)\{(.)\1\}/$2/gs;
s/\\\=(.)/$1/g;
s/\\\.(\001\d+)\{(.)\1\}/$2/gs;
s/\\\.(.)/$1/g;
s/\\([Oo])\b\s*/&$1slash;/g;
s/\\AA\b\s*/Å/g;
s/\\aa\b\s*/å/g;
s/\\AE\b\s*/Æ/g;
s/\\ae\b\s*/æ/g;
s/\\ss\b\s*/ß/g;
s/\\S\b\s*/§/g;
s/\\P\b\s*/¶/g;
s/\\pounds\b\s*/£/g;
s/\?\`/¿/g;
s/\!\`/¡/g;
s/\-\-\-/—/g;
s/([^\!])\-\-([^\>])/$1–$2/g;
s/\\([aA]lpha)\b/&$1;/g;
s/\\([bB]eta)\b/&$1;/g;
s/\\([gG]amma)\b/&$1;/g;
s/\\([dD]elta)\b/&$1;/g;
s/\\varepsilon\b/ε/g;
s/\\([eE]psilon)\b/&$1;/g;
s/\\([zZ]eta)\b/&$1;/g;
s/\\([eE]ta)\b/&$1;/g;
s/\\([tT]heta)\b/&$1;/g;
s/\\vartheta\b/θ/g;
s/\\([iI]ota)\b/&$1;/g;
s/\\([kK]appa)\b/&$1;/g;
s/\\([lL]ambda)\b/&$1;/g;
s/\\([mM]u)\b/&$1;/g;
s/\\([nN]u)\b/&$1;/g;
s/\\([xX]i)\b/&$1;/g;
s/\\([oO]micron)\b/&$1;/g;
s/\\([pP]i)\b/&$1;/g;
s/\\varpi\b/π/g;
s/\\([rR]ho)\b/&$1;/g;
s/\\varrho\b/ρ/g;
s/\\([sS]igma)\b/&$1;/g;
s/\\varsigma\b/ς/g;
s/\\([tT]au)\b/&$1;/g;
s/\\([uU]psilon)\b/&$1;/g;
s/\\([pP]hi)\b/&$1;/g;
s/\\varphi\b/φ/g;
s/\\([cC]hi)\b/&$1;/g;
s/\\([pP]si)\b/&$1;/g;
s/\\([oO]mega)\b/&$1;/g;
}
foreach (@ARGV) {
if (/\.bib$/) {
$bibfile = $_;
$bibfile =~ s/\.bib$//;
push(@bibfiles,$bibfile);
} else {
$htmlfile = $_;
}
}
exit(1) unless defined($htmlfile);
$bibdatacmd="\\bibdata{".join(',',@bibfiles)."}";
$label_style = $LABEL_NUMBERED;
$bstfile = "doxygen";
umask(077);
open(HTMLFILE,">$htmlfile$$");
if (open(OHTMLFILE, "$htmlfile")) {
$mode = (stat OHTMLFILE)[2] & 0xfff;
} else {
print "Error opening $htmlfile\n";
exit(1);
}
$beginstring = "<!-- BEGIN CITATIONS -->";
$endstring = "<!-- END CITATIONS -->";
@citations = ();
loop:
while (<OHTMLFILE>) {
print HTMLFILE;
last loop if m/^$beginstring$/;
}
loop:
while (<OHTMLFILE>) {
print HTMLFILE;
last loop if m/^$endstring$/;
push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
}
push(@citations, $bibdatacmd);
$auxfile = "bib$$";
push(@tmpfiles, "$auxfile.aux");
open(AUXFILE, ">$auxfile" . ".aux");
print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
foreach $citation (@citations) {
print AUXFILE "$citation\n";
}
close(AUXFILE);
push(@tmpfiles, "$auxfile.blg");
push(@tmpfiles, "$auxfile.bbl");
`bibtex $auxfile 2>&1`;
if ($?==-1)
{
print "bibtex command failed: $!\n";
}
$beginstring = "<!-- BEGIN BIBLIOGRAPHY -->";
$endstring = "<!-- END BIBLIOGRAPHY -->";
loop:
while (<OHTMLFILE>) {
last loop if m/^$beginstring$/;
print HTMLFILE;
}
loop:
while (<OHTMLFILE>) {
last loop if m/^$endstring$/;
}
print HTMLFILE "$beginstring\n";
$t = $auxfile . ".bbl";
$/ = "";
open(BBLFILE, "<$t") || die "error opening $t: $!\n";
$nentry = 0;
loop:
while (<BBLFILE>) {
if (($nentry == 0) && (m/^#/)) {
if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
$label_style = $label_styles{$1};
if (! defined $label_style) {
print STDERR "label style unknown: \n";
next loop;
}
}
next loop;
}
$nentry++;
($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
$blabel = "$nentry";
$bibcite{$bcite} = $blabel;
}
close(BBLFILE);
$label_style = $LABEL_DEFAULT if (! defined $label_style);
$list_start = $list_start[$label_style];
$list_end = $list_end[$label_style];
print HTMLFILE "<$list_start>\n\n";
open(BBLFILE, "<$t") || die "error opening $t: $!\n";
$nentry = 0;
loop:
while (<BBLFILE>) {
next loop if (($nentry == 0) && (m/^#/));
$nentry++;
s/\\\{/\002/g;
s/\\\}/\003/g;
s/\\\$/\004/g;
{
local ($c, $l, $z) = (0, 0, ());
s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
}
s/\%\n//g;
s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
$old = $1;
$cmd = $2;
$doxref = defined($3);
$bcite = $5;
if (! defined $bibcite{$bcite}) {
$blabel = " [" . $bcite . "]";
} elsif ($doxref) {
$blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
} else {
$blabel = " [" . $bibcite{$bcite} . "]";
}
$old =~ s/(\W)/\\$1/g;
s/\s*$old/$blabel/g;
}
s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
s/\&amp;/\005/g;
s/\\?&/&amp;/g;
s/\005/&amp;/g;
html_ent();
while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
$o = $r = $1;
if ($r =~ s/^\'//) {
$r = oct($r);
} elsif ($r =~ s/^\"//) {
$r = hex($r);
}
s/\\char$o\s*/&#$r;/g;
}
s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g;
s/\\par\b/<p \/>/g;
s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs;
s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs;
s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs;
s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs;
s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs;
s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs;
s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs;
s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs;
s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs;
s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs;
s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs;
s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/$2/ges;
sub domath {
local($t) = @_;
$t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs;
$t =~ s/\^\\circ/\&\#176;/g;
$t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs;
$t =~ s/\^(\w)/<sup>$1<\/sup>/g;
$t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs;
$t =~ s/\_(\w)/<sub>$1<\/sub>/g;
$t;
}
s/(\$([^\$]+)\$)/&domath($2)/ge;
s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge;
s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs;
while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
s/([^\\])~/$1&nbsp;/g;
s/\\\,/&thinsp;/g;
s/\\ldots\b/&hellip;/g;
s/\\dots\b/&hellip;/g;
s/\005/\~/g;
s/\\ / /g;
s/\\textasciitilde\b\s*/~/g;
s/\\([\#\&\%\~\_\^\|])/$1/g;
s/\\\W//g;
s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
s/\\([A-Za-z]+)/ $1 /g;
s+In <a href=\"[^\"]*\"></a>++;
s/\001\d+[\{\}]//gs;
tr/\002\003\004/{}$/;
print HTMLFILE $_;
}
close(BBLFILE);
print HTMLFILE "<$list_end>\n\n$endstring\n";
while (<OHTMLFILE>) {
print HTMLFILE;
}
close (OHTMLFILE);
close(HTMLFILE);
chmod($mode, "$htmlfile$$");
rename("$htmlfile$$", $htmlfile);
unlink(@tmpfiles);
exit(0);
This diff is collapsed.
...@@ -61,8 +61,8 @@ class CiteDict ...@@ -61,8 +61,8 @@ class CiteDict
/** Create the database, with an expected maximum of \a size entries */ /** Create the database, with an expected maximum of \a size entries */
CiteDict(int size); CiteDict(int size);
/** Resolve references to citations */ // /** Resolve references to citations */
void resolve(); // void resolve();
/** Insert a citation identified by \a label into the database */ /** Insert a citation identified by \a label into the database */
void insert(const char *label); void insert(const char *label);
...@@ -87,13 +87,13 @@ class CiteDict ...@@ -87,13 +87,13 @@ class CiteDict
void writeLatexBibliography(FTextStream &t); void writeLatexBibliography(FTextStream &t);
private: private:
bool writeAux(); // bool writeAux();
bool writeBst(); // bool writeBst();
bool execute(); // bool execute();
void parse(); // void parse();
void clean(); // void clean();
QDict<CiteInfo> m_entries; QDict<CiteInfo> m_entries;
QList<QCString> m_ordering; // QList<QCString> m_ordering;
QCString m_baseFileName; QCString m_baseFileName;
}; };
......
...@@ -175,6 +175,9 @@ class ClassDefImpl ...@@ -175,6 +175,9 @@ class ClassDefImpl
/** Is this a simple (non-nested) C structure? */ /** Is this a simple (non-nested) C structure? */
bool isSimple; bool isSimple;
/** Does this class overloaded the -> operator? */
MemberDef *arrowOperator;
ClassList *taggedInnerClasses; ClassList *taggedInnerClasses;
ClassDef *tagLessRef; ClassDef *tagLessRef;
}; };
...@@ -217,6 +220,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name, ...@@ -217,6 +220,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
categoryOf = 0; categoryOf = 0;
usedOnly = FALSE; usedOnly = FALSE;
isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS"); isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS");
arrowOperator = 0;
taggedInnerClasses = 0; taggedInnerClasses = 0;
tagLessRef = 0; tagLessRef = 0;
//QCString ns; //QCString ns;
...@@ -636,6 +640,11 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -636,6 +640,11 @@ void ClassDef::internalInsertMember(MemberDef *md,
m_impl->isAbstract=TRUE; m_impl->isAbstract=TRUE;
} }
if (md->name()=="operator->")
{
m_impl->arrowOperator=md;
}
//::addClassMemberNameToIndex(md); //::addClassMemberNameToIndex(md);
if (addToAllList && if (addToAllList &&
!(Config_getBool("HIDE_FRIEND_COMPOUNDS") && !(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
...@@ -3175,8 +3184,35 @@ QCString ClassDef::compoundTypeString() const ...@@ -3175,8 +3184,35 @@ QCString ClassDef::compoundTypeString() const
} }
} }
QCString ClassDef::getXmlOutputFileBase() const QCString ClassDef::getOutputFileBase() const
{ {
if (!Doxygen::generatingXmlOutput)
{
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS");
Definition *scope=0;
if (inlineGroupedClasses && partOfGroups()!=0)
{
// point to the group that embeds this class
return partOfGroups()->at(0)->getOutputFileBase();
}
else if (inlineSimpleClasses && m_impl->isSimple && partOfGroups()!=0)
{
// point to simple struct inside a group
return partOfGroups()->at(0)->getOutputFileBase();
}
else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()))
{
if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
{
return getFileDef()->getOutputFileBase();
}
else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
{
return getOuterScope()->getOutputFileBase();
}
}
}
if (m_impl->templateMaster) if (m_impl->templateMaster)
{ {
// point to the template of which this class is an instance // point to the template of which this class is an instance
...@@ -3194,35 +3230,6 @@ QCString ClassDef::getXmlOutputFileBase() const ...@@ -3194,35 +3230,6 @@ QCString ClassDef::getXmlOutputFileBase() const
} }
} }
QCString ClassDef::getOutputFileBase() const
{
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS");
Definition *scope=0;
if (inlineGroupedClasses && partOfGroups()!=0)
{
// point to the group that embeds this class
return partOfGroups()->at(0)->getOutputFileBase();
}
else if (inlineSimpleClasses && m_impl->isSimple && partOfGroups()!=0)
{
// point to simple struct inside a group
return partOfGroups()->at(0)->getOutputFileBase();
}
else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()))
{
if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
{
return getFileDef()->getOutputFileBase();
}
else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
{
return getOuterScope()->getOutputFileBase();
}
}
return getXmlOutputFileBase();
}
QCString ClassDef::getInstanceOutputFileBase() const QCString ClassDef::getInstanceOutputFileBase() const
{ {
if (isReference()) if (isReference())
...@@ -3921,6 +3928,11 @@ bool ClassDef::isSimple() const ...@@ -3921,6 +3928,11 @@ bool ClassDef::isSimple() const
return m_impl->isSimple; return m_impl->isSimple;
} }
MemberDef *ClassDef::isSmartPointer() const
{
return m_impl->arrowOperator;
}
void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t) void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t)
{ {
md->setMemberType(t); md->setMemberType(t);
...@@ -3936,7 +3948,7 @@ void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t) ...@@ -3936,7 +3948,7 @@ void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t)
QCString ClassDef::anchor() const QCString ClassDef::anchor() const
{ {
QCString anc; QCString anc;
if (isEmbeddedInOuterScope()) if (isEmbeddedInOuterScope() && !Doxygen::generatingXmlOutput)
{ {
if (m_impl->templateMaster) if (m_impl->templateMaster)
{ {
......
...@@ -95,8 +95,7 @@ class ClassDef : public Definition ...@@ -95,8 +95,7 @@ class ClassDef : public Definition
DefType definitionType() const { return TypeClass; } DefType definitionType() const { return TypeClass; }
/*! Returns the unique base name (without extension) of the class's file on disk */ /*! Returns the unique base name (without extension) of the class's file on disk */
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
QCString getXmlOutputFileBase() const;
QCString getInstanceOutputFileBase() const; QCString getInstanceOutputFileBase() const;
QCString getFileBase() const; QCString getFileBase() const;
...@@ -272,6 +271,8 @@ class ClassDef : public Definition ...@@ -272,6 +271,8 @@ class ClassDef : public Definition
const ClassList *taggedInnerClasses() const; const ClassList *taggedInnerClasses() const;
ClassDef *tagLessReference() const; ClassDef *tagLessReference() const;
MemberDef *isSmartPointer() const;
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// --- setters ---- // --- setters ----
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
......
...@@ -246,7 +246,7 @@ void VariableContext::addVariable(const QCString &type,const QCString &name) ...@@ -246,7 +246,7 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
( // look for class definitions inside the code block ( // look for class definitions inside the code block
(varType=g_codeClassSDict->find(typeName)) || (varType=g_codeClassSDict->find(typeName)) ||
// otherwise look for global class definitions // otherwise look for global class definitions
(varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,typeName)) (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,typeName,0,0,TRUE,TRUE))
) && // and it must be a template ) && // and it must be a template
varType->templateArguments()) varType->templateArguments())
{ {
...@@ -477,7 +477,8 @@ static void startCodeLine() ...@@ -477,7 +477,8 @@ static void startCodeLine()
//printf("->startCodeLine(%s)=%p\n",d->name().data(),g_currentMemberDef); //printf("->startCodeLine(%s)=%p\n",d->name().data(),g_currentMemberDef);
g_insideBody = FALSE; g_insideBody = FALSE;
g_searchingForBody = TRUE; g_searchingForBody = TRUE;
g_realScope = d->name().copy(); g_realScope = d->name();
//g_classScope = "";
g_type.resize(0); g_type.resize(0);
g_name.resize(0); g_name.resize(0);
g_args.resize(0); g_args.resize(0);
...@@ -724,7 +725,7 @@ static MemberDef *setCallContextForVar(const QCString &name) ...@@ -724,7 +725,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
ClassDef *mcd = g_theVarContext.findVariable(name); ClassDef *mcd = g_theVarContext.findVariable(name);
if (mcd) // local variable if (mcd) // local variable
{ {
//fprintf(stderr,"local variable\n"); //fprintf(stderr,"local variable?\n");
if (mcd!=VariableContext::dummyContext) if (mcd!=VariableContext::dummyContext)
{ {
//fprintf(stderr,"local var `%s' mcd=%s\n",name.data(),mcd->name().data()); //fprintf(stderr,"local var `%s' mcd=%s\n",name.data(),mcd->name().data());
...@@ -733,6 +734,7 @@ static MemberDef *setCallContextForVar(const QCString &name) ...@@ -733,6 +734,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
} }
else else
{ {
//fprintf(stderr,"class member? scope=%s\n",g_classScope.data());
// look for a class member // look for a class member
mcd = getClass(g_classScope); mcd = getClass(g_classScope);
if (mcd) if (mcd)
...@@ -792,6 +794,22 @@ static MemberDef *setCallContextForVar(const QCString &name) ...@@ -792,6 +794,22 @@ static MemberDef *setCallContextForVar(const QCString &name)
return 0; return 0;
} }
static void updateCallContextForSmartPointer()
{
ClassDef *cd = g_theCallContext.getClass();
//printf("updateCallContextForSmartPointer() cd=%s\n",cd ? cd->name().data() : "<none>");
MemberDef *md;
if (cd && (md=cd->isSmartPointer()))
{
ClassDef *ncd = stripClassName(md->typeString());
if (ncd)
{
g_theCallContext.setClass(ncd);
//printf("Found smart pointer call %s->%s!\n",cd->name().data(),ncd->name().data());
}
}
}
static void addDocCrossReference(MemberDef *src,MemberDef *dst) static void addDocCrossReference(MemberDef *src,MemberDef *dst)
{ {
static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION"); static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
...@@ -942,11 +960,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, ...@@ -942,11 +960,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
{ {
Definition *d = g_currentDefinition; Definition *d = g_currentDefinition;
//printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition); //printf("d=%s g_sourceFileDef=%s\n",d?d->name().data():"<none>",g_sourceFileDef?g_sourceFileDef->name().data():"<none>");
cd = getResolvedClass(d,g_sourceFileDef,className,&md); cd = getResolvedClass(d,g_sourceFileDef,className,&md);
//fprintf(stderr,"non-local variable name=%s context=%d cd=%s md=%s!\n", //fprintf(stderr,"non-local variable name=%s context=%d cd=%s md=%s!\n",
// className.data(),g_theVarContext.count(),cd?cd->name().data():"<none>", // className.data(),g_theVarContext.count(),cd?cd->name().data():"<none>",
// md?md->name().data():"<none>"); // md?md->name().data():"<none>");
if (cd==0 && md==0 && (i=className.find('<'))!=-1) if (cd==0 && md==0 && (i=className.find('<'))!=-1)
{ {
QCString bareName = className.left(i); //stripTemplateSpecifiersFromScope(className); QCString bareName = className.left(i); //stripTemplateSpecifiersFromScope(className);
...@@ -2501,6 +2519,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2501,6 +2519,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass(); endFontClass();
} }
<Body>"."|"->" { <Body>"."|"->" {
if (yytext[0]=='-') // -> could be overloaded
{
updateCallContextForSmartPointer();
}
g_code->codify(yytext); g_code->codify(yytext);
g_memCallContext = YY_START; g_memCallContext = YY_START;
BEGIN( MemberCall ); BEGIN( MemberCall );
...@@ -3007,6 +3029,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -3007,6 +3029,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
BEGIN( MemberCall2 ); BEGIN( MemberCall2 );
} }
<MemberCall2>"->"|"." { <MemberCall2>"->"|"." {
if (yytext[0]=='-') // -> could be overloaded
{
updateCallContextForSmartPointer();
}
g_code->codify(yytext); g_code->codify(yytext);
g_memCallContext = YY_START; g_memCallContext = YY_START;
BEGIN( MemberCall ); BEGIN( MemberCall );
......
...@@ -825,6 +825,7 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+] ...@@ -825,6 +825,7 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"") FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID}) SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
...@@ -1966,7 +1967,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -1966,7 +1967,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle arguments of the cite command ------- */ /* ----- handle arguments of the cite command ------- */
<CiteLabel>{LABELID} { // found argyment <CiteLabel>{CITEID} { // found argyment
addCite(); addCite();
addOutput(yytext); addOutput(yytext);
BEGIN(Comment); BEGIN(Comment);
......
...@@ -10,7 +10,7 @@ http://www.gnu.org/software/libiconv for the list of possible encodings. ...@@ -10,7 +10,7 @@ http://www.gnu.org/software/libiconv for the list of possible encodings.
<option type='string' id='PROJECT_NAME' format='string' docs=' <option type='string' id='PROJECT_NAME' format='string' docs='
The PROJECT_NAME tag is a single word (or sequence of words) that should The PROJECT_NAME tag is a single word (or sequence of words) that should
identify the project. Note that if you do not use Doxywizard you need identify the project. Note that if you do not use Doxywizard you need
to put quotes around the project name if it contains spaces.' defval=''/> to put quotes around the project name if it contains spaces.' defval='My Project'/>
<option type='string' id='PROJECT_NUMBER' format='string' docs=' <option type='string' id='PROJECT_NUMBER' format='string' docs='
The PROJECT_NUMBER tag can be used to enter a project or revision number. The PROJECT_NUMBER tag can be used to enter a project or revision number.
This could be handy for archiving the generated documentation or This could be handy for archiving the generated documentation or
...@@ -530,7 +530,8 @@ containing the references data. This must be a list of .bib files. The ...@@ -530,7 +530,8 @@ containing the references data. This must be a list of .bib files. The
.bib extension is automatically appended if omitted. Using this command .bib extension is automatically appended if omitted. Using this command
requires the bibtex tool to be installed. See also requires the bibtex tool to be installed. See also
http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
of the bibliography can be controlled using LATEX_BIB_STYLE. of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
feature you need bibtex and perl available in the search path.
' defval=''/> ' defval=''/>
</group> </group>
<group name='Messages' docs='configuration options related to warning and progress messages'> <group name='Messages' docs='configuration options related to warning and progress messages'>
...@@ -1010,12 +1011,6 @@ the value YES disables it. Since the tabs have the same information as the ...@@ -1010,12 +1011,6 @@ the value YES disables it. Since the tabs have the same information as the
navigation tree you can set this option to NO if you already set navigation tree you can set this option to NO if you already set
GENERATE_TREEVIEW to YES. GENERATE_TREEVIEW to YES.
' defval='0' depends='GENERATE_HTML'/> ' defval='0' depends='GENERATE_HTML'/>
<option type='int' id='ENUM_VALUES_PER_LINE' docs='
The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
(range [0,1..20]) that doxygen will group on one line in the generated HTML
documentation. Note that a value of 0 will completely suppress the enum
values from appearing in the overview section.
' minval='0' maxval='20' defval='4' depends='GENERATE_HTML'/>
<option type='bool' id='GENERATE_TREEVIEW' defval='0' docs=' <option type='bool' id='GENERATE_TREEVIEW' defval='0' docs='
The GENERATE_TREEVIEW tag is used to specify whether a tree-like index The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
structure should be generated to display hierarchical information. structure should be generated to display hierarchical information.
...@@ -1027,6 +1022,12 @@ Windows users are probably better off using the HTML help feature. ...@@ -1027,6 +1022,12 @@ Windows users are probably better off using the HTML help feature.
Since the tree basically has the same information as the tab index you Since the tree basically has the same information as the tab index you
could consider to set DISABLE_INDEX to NO when enabling this option. could consider to set DISABLE_INDEX to NO when enabling this option.
' depends='GENERATE_HTML'/> ' depends='GENERATE_HTML'/>
<option type='int' id='ENUM_VALUES_PER_LINE' docs='
The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
(range [0,1..20]) that doxygen will group on one line in the generated HTML
documentation. Note that a value of 0 will completely suppress the enum
values from appearing in the overview section.
' minval='0' maxval='20' defval='4' depends='GENERATE_HTML'/>
<option type='bool' id='USE_INLINE_TREES' defval='0' docs=' <option type='bool' id='USE_INLINE_TREES' defval='0' docs='
By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
and Class Hierarchy pages using a tree view instead of an ordered list. and Class Hierarchy pages using a tree view instead of an ordered list.
......
...@@ -36,6 +36,7 @@ void addConfigOptions(Config *cfg) ...@@ -36,6 +36,7 @@ void addConfigOptions(Config *cfg)
"identify the project. Note that if you do not use Doxywizard you need\n" "identify the project. Note that if you do not use Doxywizard you need\n"
"to put quotes around the project name if it contains spaces." "to put quotes around the project name if it contains spaces."
); );
cs->setDefaultValue("My Project");
//---- //----
cs = cfg->addString( cs = cfg->addString(
"PROJECT_NUMBER", "PROJECT_NUMBER",
...@@ -761,7 +762,7 @@ void addConfigOptions(Config *cfg) ...@@ -761,7 +762,7 @@ void addConfigOptions(Config *cfg)
".bib extension is automatically appended if omitted. Using this command\n" ".bib extension is automatically appended if omitted. Using this command\n"
"requires the bibtex tool to be installed. See also\n" "requires the bibtex tool to be installed. See also\n"
"http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style\n" "http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style\n"
"of the bibliography can be controlled using LATEX_BIB_STYLE." "of the bibliography can be controlled using LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the search path."
); );
cl->setWidgetType(ConfigList::File); cl->setWidgetType(ConfigList::File);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -1483,16 +1484,6 @@ void addConfigOptions(Config *cfg) ...@@ -1483,16 +1484,6 @@ void addConfigOptions(Config *cfg)
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
//---- //----
ci = cfg->addInt(
"ENUM_VALUES_PER_LINE",
"The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values\n"
"(range [0,1..20]) that doxygen will group on one line in the generated HTML\n"
"documentation. Note that a value of 0 will completely suppress the enum\n"
"values from appearing in the overview section.",
0,20,4
);
ci->addDependency("GENERATE_HTML");
//----
cb = cfg->addBool( cb = cfg->addBool(
"GENERATE_TREEVIEW", "GENERATE_TREEVIEW",
"The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n" "The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n"
...@@ -1508,6 +1499,16 @@ void addConfigOptions(Config *cfg) ...@@ -1508,6 +1499,16 @@ void addConfigOptions(Config *cfg)
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
//---- //----
ci = cfg->addInt(
"ENUM_VALUES_PER_LINE",
"The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values\n"
"(range [0,1..20]) that doxygen will group on one line in the generated HTML\n"
"documentation. Note that a value of 0 will completely suppress the enum\n"
"values from appearing in the overview section.",
0,20,4
);
ci->addDependency("GENERATE_HTML");
//----
cb = cfg->addBool( cb = cfg->addBool(
"USE_INLINE_TREES", "USE_INLINE_TREES",
"By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,\n" "By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,\n"
......
...@@ -132,6 +132,9 @@ class Definition : public DefinitionIntf, public LockableObj ...@@ -132,6 +132,9 @@ class Definition : public DefinitionIntf, public LockableObj
*/ */
virtual QCString getOutputFileBase() const = 0; virtual QCString getOutputFileBase() const = 0;
/*! Returns the anchor within a page where this item can be found */
virtual QCString anchor() const = 0;
/*! Returns the name of the source listing of this file. */ /*! Returns the name of the source listing of this file. */
virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; } virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; }
......
...@@ -49,10 +49,11 @@ class DirDef : public Definition ...@@ -49,10 +49,11 @@ class DirDef : public Definition
virtual ~DirDef(); virtual ~DirDef();
// accessors // accessors
virtual DefType definitionType() const { return TypeDir; } DefType definitionType() const { return TypeDir; }
virtual QCString getOutputFileBase() const; QCString getOutputFileBase() const;
virtual bool isLinkableInProject() const; QCString anchor() const { return QCString(); }
virtual bool isLinkable() const; bool isLinkableInProject() const;
bool isLinkable() const;
QCString displayName() const { return m_dispName; } QCString displayName() const { return m_dispName; }
QCString shortName() const { return m_shortName; } QCString shortName() const { return m_shortName; }
void addSubDir(DirDef *subdir); void addSubDir(DirDef *subdir);
......
...@@ -1043,7 +1043,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -1043,7 +1043,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
} }
else if (compound->isLinkable()) // compound link else if (compound->isLinkable()) // compound link
{ {
QCString anchor; QCString anchor = compound->anchor();
if (compound->definitionType()==Definition::TypeFile) if (compound->definitionType()==Definition::TypeFile)
{ {
name=g_token->name; name=g_token->name;
...@@ -1052,10 +1052,6 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -1052,10 +1052,6 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
{ {
name=((GroupDef*)compound)->groupTitle(); name=((GroupDef*)compound)->groupTitle();
} }
else if (compound->definitionType()==Definition::TypeClass)
{
anchor=((ClassDef*)compound)->anchor();
}
children.append(new children.append(new
DocLinkedWord(parent,name, DocLinkedWord(parent,name,
compound->getReference(), compound->getReference(),
...@@ -1700,7 +1696,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor) ...@@ -1700,7 +1696,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
CiteInfo *cite = Doxygen::citeDict->find(id.mid(CiteConsts::anchorPrefix.length())); CiteInfo *cite = Doxygen::citeDict->find(id.mid(CiteConsts::anchorPrefix.length()));
if (cite) if (cite)
{ {
m_file = CiteConsts::fileName; m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
m_anchor = id; m_anchor = id;
} }
else else
...@@ -2422,7 +2418,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont ...@@ -2422,7 +2418,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
static uint numBibFiles = Config_getList("CITE_BIB_FILES").count(); static uint numBibFiles = Config_getList("CITE_BIB_FILES").count();
m_parent = parent; m_parent = parent;
QCString anchor; QCString anchor;
//printf("DocCite::DocCite(target=%s,context=%s\n",target.data(),context.data()); //printf("DocCite::DocCite(target=%s)\n",target.data());
ASSERT(!target.isEmpty()); ASSERT(!target.isEmpty());
m_relPath = g_relPath; m_relPath = g_relPath;
CiteInfo *cite = Doxygen::citeDict->find(target); CiteInfo *cite = Doxygen::citeDict->find(target);
...@@ -2432,7 +2428,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont ...@@ -2432,7 +2428,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
if (m_text.isEmpty()) m_text = cite->label; if (m_text.isEmpty()) m_text = cite->label;
m_ref = cite->ref; m_ref = cite->ref;
m_anchor = CiteConsts::anchorPrefix+cite->label; m_anchor = CiteConsts::anchorPrefix+cite->label;
m_file = CiteConsts::fileName; m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
//printf("CITE ==> m_text=%s,m_ref=%s,m_file=%s,m_anchor=%s\n", //printf("CITE ==> m_text=%s,m_ref=%s,m_file=%s,m_anchor=%s\n",
// m_text.data(),m_ref.data(),m_file.data(),m_anchor.data()); // m_text.data(),m_ref.data(),m_file.data(),m_anchor.data());
return; return;
...@@ -3660,6 +3656,13 @@ int DocHtmlDescTitle::parse() ...@@ -3660,6 +3656,13 @@ int DocHtmlDescTitle::parse()
retval=RetVal_EndDesc; retval=RetVal_EndDesc;
goto endtitle; goto endtitle;
} }
else if (tagId==HTML_A)
{
if (!g_token->endTag)
{
handleAHref(this,m_children,g_token->attribs);
}
}
else else
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context", warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context",
...@@ -4500,6 +4503,7 @@ void DocPara::handleCite() ...@@ -4500,6 +4503,7 @@ void DocPara::handleCite()
qPrint("cite")); qPrint("cite"));
return; return;
} }
doctokenizerYYsetStateCite();
tok=doctokenizerYYlex(); tok=doctokenizerYYlex();
if (tok==0) if (tok==0)
{ {
...@@ -4514,7 +4518,6 @@ void DocPara::handleCite() ...@@ -4514,7 +4518,6 @@ void DocPara::handleCite()
return; return;
} }
g_token->sectionId = g_token->name; g_token->sectionId = g_token->name;
doctokenizerYYsetStateCite();
DocCite *cite = new DocCite(this,g_token->name,g_context); DocCite *cite = new DocCite(this,g_token->name,g_context);
m_children.append(cite); m_children.append(cite);
//cite->parse(); //cite->parse();
......
...@@ -334,12 +334,12 @@ LNKWORD1 ("::"|"#")?{SCOPEMASK} ...@@ -334,12 +334,12 @@ LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile") CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}? LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+ LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=] CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
ESCWORD "%"{ID}(("::"|"."){ID})* ESCWORD ("%"{ID}(("::"|"."){ID})*)|("%'")
WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"") WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"=" WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}" WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}"
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"=" WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p" HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P" HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
......
This diff is collapsed.
...@@ -149,6 +149,7 @@ IndexList Doxygen::indexList; ...@@ -149,6 +149,7 @@ IndexList Doxygen::indexList;
int Doxygen::subpageNestingLevel = 0; int Doxygen::subpageNestingLevel = 0;
bool Doxygen::userComments = FALSE; bool Doxygen::userComments = FALSE;
QCString Doxygen::spaces; QCString Doxygen::spaces;
bool Doxygen::generatingXmlOutput = FALSE;
// locally accessible globals // locally accessible globals
static QDict<EntryNav> g_classEntries(1009); static QDict<EntryNav> g_classEntries(1009);
...@@ -252,8 +253,11 @@ static STLInfo g_stlinfo[] = ...@@ -252,8 +253,11 @@ static STLInfo g_stlinfo[] =
{ {
// className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators // className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators
{ "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, { "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // deprecated
{ "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, { "smart_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "unique_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "weak_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "basic_ios", "ios_base", 0, "Char", 0, 0, 0, FALSE, FALSE }, { "basic_ios", "ios_base", 0, "Char", 0, 0, 0, FALSE, FALSE },
{ "basic_istream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE }, { "basic_istream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
{ "basic_ostream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE }, { "basic_ostream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
...@@ -321,7 +325,7 @@ static void addSTLMember(EntryNav *rootNav,const char *type,const char *name) ...@@ -321,7 +325,7 @@ static void addSTLMember(EntryNav *rootNav,const char *type,const char *name)
Entry *memEntry = new Entry; Entry *memEntry = new Entry;
memEntry->name = name; memEntry->name = name;
memEntry->type = type; memEntry->type = type;
memEntry->protection = Private; memEntry->protection = Public;
memEntry->section = Entry::VARIABLE_SEC; memEntry->section = Entry::VARIABLE_SEC;
memEntry->brief = "STL member"; memEntry->brief = "STL member";
memEntry->hidden = FALSE; memEntry->hidden = FALSE;
...@@ -415,6 +419,22 @@ static void addSTLClasses(EntryNav *rootNav) ...@@ -415,6 +419,22 @@ static void addSTLClasses(EntryNav *rootNav)
{ {
addSTLMember(classEntryNav,info->templType2,info->templName2); addSTLMember(classEntryNav,info->templType2,info->templName2);
} }
if (fullName=="std::auto_ptr" || fullName=="std::smart_ptr" ||
fullName=="std::unique_ptr" || fullName=="std::weak_ptr")
{
Entry *memEntry = new Entry;
memEntry->name = "operator->";
memEntry->args = "()";
memEntry->type = "T*";
memEntry->protection = Public;
memEntry->section = Entry::FUNCTION_SEC;
memEntry->brief = "STL member";
memEntry->hidden = FALSE;
memEntry->artificial = FALSE;
EntryNav *memEntryNav = new EntryNav(classEntryNav,memEntry);
memEntryNav->setEntry(memEntry);
classEntryNav->addChild(memEntryNav);
}
if (info->baseClass1) if (info->baseClass1)
{ {
classEntry->extends->append(new BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal)); classEntry->extends->append(new BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal));
...@@ -10561,8 +10581,8 @@ void parseInput() ...@@ -10561,8 +10581,8 @@ void parseInput()
computeDirDependencies(); computeDirDependencies();
} }
msg("Resolving citations...\n"); //msg("Resolving citations...\n");
Doxygen::citeDict->resolve(); //Doxygen::citeDict->resolve();
msg("Generating citations page...\n"); msg("Generating citations page...\n");
Doxygen::citeDict->generatePage(); Doxygen::citeDict->generatePage();
...@@ -10853,7 +10873,9 @@ void generateOutput() ...@@ -10853,7 +10873,9 @@ void generateOutput()
if (Config_getBool("GENERATE_XML")) if (Config_getBool("GENERATE_XML"))
{ {
msg("Generating XML output...\n"); msg("Generating XML output...\n");
Doxygen::generatingXmlOutput=TRUE;
generateXML(); generateXML();
Doxygen::generatingXmlOutput=FALSE;
} }
if (Config_getBool("GENERATE_AUTOGEN_DEF")) if (Config_getBool("GENERATE_AUTOGEN_DEF"))
{ {
......
...@@ -133,6 +133,7 @@ class Doxygen ...@@ -133,6 +133,7 @@ class Doxygen
static IndexList indexList; static IndexList indexList;
static int subpageNestingLevel; static int subpageNestingLevel;
static QCString spaces; static QCString spaces;
static bool generatingXmlOutput;
}; };
void initDoxygen(); void initDoxygen();
......
This diff is collapsed.
...@@ -1503,7 +1503,7 @@ bool FileDef::isDocumentationFile() const ...@@ -1503,7 +1503,7 @@ bool FileDef::isDocumentationFile() const
void FileDef::acquireFileVersion() void FileDef::acquireFileVersion()
{ {
QCString vercmd = Config_getString("FILE_VERSION_FILTER"); QCString vercmd = Config_getString("FILE_VERSION_FILTER");
if (!vercmd.isEmpty() && filepath!="generated") if (!vercmd.isEmpty() && !filepath.isEmpty() && filepath!="generated")
{ {
msg("Version of %s : ",filepath.data()); msg("Version of %s : ",filepath.data());
QCString cmd = vercmd+" \""+filepath+"\""; QCString cmd = vercmd+" \""+filepath+"\"";
...@@ -1518,9 +1518,8 @@ void FileDef::acquireFileVersion() ...@@ -1518,9 +1518,8 @@ void FileDef::acquireFileVersion()
char buf[bufSize]; char buf[bufSize];
int numRead = fread(buf,1,bufSize,f); int numRead = fread(buf,1,bufSize,f);
portable_pclose(f); portable_pclose(f);
if (numRead > 0) if (numRead>0 && !(fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
{ {
fileVersion = QCString(buf,numRead).stripWhiteSpace();
msg("%s\n",fileVersion.data()); msg("%s\n",fileVersion.data());
} }
else else
...@@ -1650,6 +1649,7 @@ bool FileDef::isLinkableInProject() const ...@@ -1650,6 +1649,7 @@ bool FileDef::isLinkableInProject() const
return hasDocumentation() && !isReference() && showFiles; return hasDocumentation() && !isReference() && showFiles;
} }
#if 0
bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
{ {
//printf("%s::includes(%s)\n",name().data(),incFile->name().data()); //printf("%s::includes(%s)\n",name().data(),incFile->name().data());
...@@ -1687,4 +1687,4 @@ bool FileDef::includesByName(const QCString &fileName) const ...@@ -1687,4 +1687,4 @@ bool FileDef::includesByName(const QCString &fileName) const
} }
return FALSE; return FALSE;
} }
#endif
...@@ -88,6 +88,8 @@ class FileDef : public Definition ...@@ -88,6 +88,8 @@ class FileDef : public Definition
QCString getOutputFileBase() const QCString getOutputFileBase() const
{ return convertNameToFile(diskname); } { return convertNameToFile(diskname); }
QCString anchor() const
{ return QCString(); }
QCString getFileBase() const QCString getFileBase() const
{ return diskname; } { return diskname; }
...@@ -168,8 +170,8 @@ class FileDef : public Definition ...@@ -168,8 +170,8 @@ class FileDef : public Definition
void addListReferences(); void addListReferences();
bool isDocumentationFile() const; bool isDocumentationFile() const;
bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const; //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
bool includesByName(const QCString &name) const; //bool includesByName(const QCString &name) const;
MemberList *getMemberList(MemberList::ListType lt) const; MemberList *getMemberList(MemberList::ListType lt) const;
const QList<MemberList> &getMemberLists() const { return m_memberLists; } const QList<MemberList> &getMemberLists() const { return m_memberLists; }
......
...@@ -202,7 +202,7 @@ static void scanner_abort(); ...@@ -202,7 +202,7 @@ static void scanner_abort();
static void startScope(Entry *scope); static void startScope(Entry *scope);
static bool endScope(Entry *scope, bool isGlobalRoot=FALSE); static bool endScope(Entry *scope, bool isGlobalRoot=FALSE);
static QCString getFullName(Entry *e); static QCString getFullName(Entry *e);
static bool isTypeName(QCString name); //static bool isTypeName(QCString name);
static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root); static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root);
static int getAmpersandAtTheStart(const char *buf, int length); static int getAmpersandAtTheStart(const char *buf, int length);
static int getAmpOrExclAtTheEnd(const char *buf, int length); static int getAmpOrExclAtTheEnd(const char *buf, int length);
...@@ -669,10 +669,11 @@ private { ...@@ -669,10 +669,11 @@ private {
argType = QCString(yytext).simplifyWhiteSpace(); argType = QCString(yytext).simplifyWhiteSpace();
yy_push_state(AttributeList); yy_push_state(AttributeList);
} }
^{BS}{PP_ID}{KIND}? { /* check for preprocessor symbol expand to type */ /* Dimitri: macro expansion should already be done during preprocessing not here!
^{BS}{PP_ID}{KIND}? { // check for preprocessor symbol expand to type
QCString str = yytext; QCString str = yytext;
str = str.stripWhiteSpace(); str = str.stripWhiteSpace();
DefineDict* defines = getGlobalDefineDict(); //DefineDict* defines = getGlobalDefineDict();
QCString name; QCString name;
int index = str.find("("); int index = str.find("(");
if (index != -1) if (index != -1)
...@@ -680,7 +681,7 @@ private { ...@@ -680,7 +681,7 @@ private {
else else
name = str; name = str;
Define *define = (*defines)[name]; Define *define = 0; //(*defines)[name];
if (define != 0 && isTypeName(define->definition)) if (define != 0 && isTypeName(define->definition))
{ {
argType = str; argType = str;
...@@ -692,6 +693,7 @@ private { ...@@ -692,6 +693,7 @@ private {
REJECT; REJECT;
} }
} }
*/
{ATTR_STMT}/{BS_}{ID} | {ATTR_STMT}/{BS_}{ID} |
{ATTR_STMT}/{BS}"::" { {ATTR_STMT}/{BS}"::" {
/* attribute statement starts */ /* attribute statement starts */
...@@ -1406,12 +1408,14 @@ void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root ...@@ -1406,12 +1408,14 @@ void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root
moduleProcedures.clear(); moduleProcedures.clear();
} }
#if 0
static bool isTypeName(QCString name) static bool isTypeName(QCString name)
{ {
name = name.lower(); name = name.lower();
return name=="integer" || name == "real" || return name=="integer" || name == "real" ||
name=="complex" || name == "logical"; name=="complex" || name == "logical";
} }
#endif
/*! Extracts string which resides within parentheses of provided string. */ /*! Extracts string which resides within parentheses of provided string. */
static QCString extractFromParens(const QCString name) static QCString extractFromParens(const QCString name)
......
...@@ -48,6 +48,7 @@ class GroupDef : public Definition ...@@ -48,6 +48,7 @@ class GroupDef : public Definition
~GroupDef(); ~GroupDef();
DefType definitionType() const { return TypeGroup; } DefType definitionType() const { return TypeGroup; }
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
const char *groupTitle() const { return title; } const char *groupTitle() const { return title; }
void setGroupTitle( const char *newtitle ); void setGroupTitle( const char *newtitle );
bool hasGroupTitle( ) { return titleSet; } bool hasGroupTitle( ) { return titleSet; }
......
...@@ -1408,32 +1408,30 @@ void HtmlDocVisitor::visitPre(DocParamSect *s) ...@@ -1408,32 +1408,30 @@ void HtmlDocVisitor::visitPre(DocParamSect *s)
{ {
if (m_hide) return; if (m_hide) return;
forceEndParagraph(s); forceEndParagraph(s);
m_t << "<dl><dt><b>";
QCString className; QCString className;
QCString heading;
switch(s->type()) switch(s->type())
{ {
case DocParamSect::Param: case DocParamSect::Param:
m_t << theTranslator->trParameters(); heading=theTranslator->trParameters();
className="params"; className="params";
break; break;
case DocParamSect::RetVal: case DocParamSect::RetVal:
m_t << theTranslator->trReturnValues(); heading=theTranslator->trReturnValues();
className="retval"; className="retval";
break; break;
case DocParamSect::Exception: case DocParamSect::Exception:
m_t << theTranslator->trExceptions(); heading=theTranslator->trExceptions();
className="exception"; className="exception";
break; break;
case DocParamSect::TemplateParam: case DocParamSect::TemplateParam:
/* TODO: add this heading="Template Parameters"; break; // TODO: translate me
m_t << theTranslator->trTemplateParam(); break;
*/
m_t << "Template Parameters"; break;
className="tparams"; className="tparams";
default: default:
ASSERT(0); ASSERT(0);
} }
m_t << ":"; m_t << "<dl class=\"" << className << "\"><dt><b>";
m_t << heading << ":";
m_t << "</b></dt><dd>" << endl; m_t << "</b></dt><dd>" << endl;
m_t << " <table class=\"" << className << "\">" << endl; m_t << " <table class=\"" << className << "\">" << endl;
} }
...@@ -1698,7 +1696,8 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath, ...@@ -1698,7 +1696,8 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath,
writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context); writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context);
} }
void HtmlDocVisitor::writeMscFile(const QCString &fileName,const QCString &relPath, void HtmlDocVisitor::writeMscFile(const QCString &fileName,
const QCString &relPath,
const QCString &context) const QCString &context)
{ {
QCString baseName=fileName; QCString baseName=fileName;
......
This diff is collapsed.
...@@ -1512,8 +1512,7 @@ void LatexDocVisitor::startMscFile(const QCString &fileName, ...@@ -1512,8 +1512,7 @@ void LatexDocVisitor::startMscFile(const QCString &fileName,
baseName.prepend("msc_"); baseName.prepend("msc_");
QCString outDir = Config_getString("LATEX_OUTPUT"); QCString outDir = Config_getString("LATEX_OUTPUT");
QCString name = fileName; writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS);
writeMscGraphFromFile(name,outDir,baseName,MSC_EPS);
if (hasCaption) if (hasCaption)
{ {
m_t << "\n\\begin{DoxyImage}\n"; m_t << "\n\\begin{DoxyImage}\n";
...@@ -1568,7 +1567,7 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName) ...@@ -1568,7 +1567,7 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
shortName=shortName.right(shortName.length()-i-1); shortName=shortName.right(shortName.length()-i-1);
} }
QCString outDir = Config_getString("LATEX_OUTPUT"); QCString outDir = Config_getString("LATEX_OUTPUT");
writeMscGraphFromFile(baseName,outDir,shortName,MSC_EPS); writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS);
m_t << "\n\\begin{DoxyImageNoCaption}" m_t << "\n\\begin{DoxyImageNoCaption}"
" \\mbox{\\includegraphics"; " \\mbox{\\includegraphics";
m_t << "{" << shortName << "}"; m_t << "{" << shortName << "}";
......
...@@ -701,6 +701,7 @@ static void writeDefaultStyleSheetPart3(FTextStream &t) ...@@ -701,6 +701,7 @@ static void writeDefaultStyleSheetPart3(FTextStream &t)
" \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n" " \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
" p{0.15\\textwidth}|%\n" " p{0.15\\textwidth}|%\n"
" p{0.635\\textwidth}|}%\n" " p{0.635\\textwidth}|}%\n"
//"\\hline{\\sf\\textbf{Type}} & {\\sf\\textbf{Name}} & {\\sf\\textbf{Description}}\\endhead%\n"
" \\hline%\n" " \\hline%\n"
"}{%\n" "}{%\n"
" \\end{longtable}%\n" " \\end{longtable}%\n"
...@@ -1772,7 +1773,7 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *, ...@@ -1772,7 +1773,7 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
t << "\\hypertarget{"; t << "\\hypertarget{";
if (fName) t << stripPath(fName); if (fName) t << stripPath(fName);
if (anchor) t << "_" << anchor; if (anchor) t << "_" << anchor;
t << "}{" << endl; t << "}{";
} }
} }
...@@ -1782,7 +1783,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) ...@@ -1782,7 +1783,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
if (usePDFLatex && pdfHyperlinks) if (usePDFLatex && pdfHyperlinks)
{ {
t << "}" << endl; t << "}";
} }
t << "\\label{"; t << "\\label{";
if (fName) t << fName; if (fName) t << fName;
...@@ -2112,19 +2113,23 @@ void LatexGenerator::endMemberList() ...@@ -2112,19 +2113,23 @@ void LatexGenerator::endMemberList()
void LatexGenerator::startMemberGroupHeader(bool hasHeader) void LatexGenerator::startMemberGroupHeader(bool hasHeader)
{ {
if (hasHeader) t << "\\begin{Indent}"; if (hasHeader) t << "\\begin{Indent}";
if (Config_getBool("COMPACT_LATEX")) t << "{\\bf ";
{ // changed back to rev 756 due to bug 660501
t << "\\subparagraph*{"; //if (Config_getBool("COMPACT_LATEX"))
} //{
else // t << "\\subparagraph*{";
{ //}
t << "\\paragraph*{"; //else
} //{
// t << "\\paragraph*{";
//}
} }
void LatexGenerator::endMemberGroupHeader() void LatexGenerator::endMemberGroupHeader()
{ {
t << "}" << endl; // changed back to rev 756 due to bug 660501
t << "}\\par" << endl;
//t << "}" << endl;
} }
void LatexGenerator::startMemberGroupDocs() void LatexGenerator::startMemberGroupDocs()
......
...@@ -258,7 +258,6 @@ win32:TMAKE_CXXFLAGS += -DQT_NODLL ...@@ -258,7 +258,6 @@ win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-msvc:TMAKE_CXXFLAGS += -Zm200 win32-msvc:TMAKE_CXXFLAGS += -Zm200
win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
linux-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti linux-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
TMAKE_CXXFLAGS += -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int
INCLUDEPATH += ../qtools INCLUDEPATH += ../qtools
#INCLUDEPATH += ../libpng #INCLUDEPATH += ../libpng
INCLUDEPATH += ../libmd5 INCLUDEPATH += ../libmd5
......
...@@ -164,3 +164,7 @@ svgpan_js.h: svgpan.js ...@@ -164,3 +164,7 @@ svgpan_js.h: svgpan.js
doxygen_bst.h: doxygen.bst doxygen_bst.h: doxygen.bst
cat doxygen.bst | $(TO_C_CMD) >doxygen_bst.h cat doxygen.bst | $(TO_C_CMD) >doxygen_bst.h
bib2xhtml.h: bib2xhtml.pl
cat bib2xhtml.pl | $(TO_C_CMD) >bib2xhtml.h
...@@ -2522,7 +2522,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -2522,7 +2522,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
// strip scope and field name from the type // strip scope and field name from the type
// example: "struct N::S.v.c" will become "struct S.v" // example: "struct N::S.v.c" will become "struct v"
static QCString simplifyTypeForTable(const QCString &s) static QCString simplifyTypeForTable(const QCString &s)
{ {
QCString ts=removeAnonymousScopes(s); QCString ts=removeAnonymousScopes(s);
...@@ -2535,6 +2535,9 @@ static QCString simplifyTypeForTable(const QCString &s) ...@@ -2535,6 +2535,9 @@ static QCString simplifyTypeForTable(const QCString &s)
} }
i=ts.findRev('.'); i=ts.findRev('.');
if (i!=-1) ts = ts.left(i); if (i!=-1) ts = ts.left(i);
i=ts.findRev('.');
if (i!=-1) ts = ts.right(ts.length()-i-1);
//printf("simplifyTypeForTable(%s)->%s\n",s.data(),ts.data());
return ts; return ts;
} }
......
...@@ -43,6 +43,7 @@ class NamespaceDef : public Definition ...@@ -43,6 +43,7 @@ class NamespaceDef : public Definition
~NamespaceDef(); ~NamespaceDef();
DefType definitionType() const { return TypeNamespace; } DefType definitionType() const { return TypeNamespace; }
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
void insertUsedFile(const char *fname); void insertUsedFile(const char *fname);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
......
...@@ -39,6 +39,7 @@ class PageDef : public Definition ...@@ -39,6 +39,7 @@ class PageDef : public Definition
// functions to get a uniform interface with Definitions // functions to get a uniform interface with Definitions
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
void findSectionsInDocumentation(); void findSectionsInDocumentation();
QCString title() const { return m_title; } QCString title() const { return m_title; }
GroupDef * getGroupDef() const; GroupDef * getGroupDef() const;
......
...@@ -121,6 +121,14 @@ int portable_system(const char *command,const char *args,bool commandHasConsole ...@@ -121,6 +121,14 @@ int portable_system(const char *command,const char *args,bool commandHasConsole
} }
else else
{ {
// Because ShellExecuteEx can delegate execution to Shell extensions
// (data sources, context menu handlers, verb implementations) that
// are activated using Component Object Model (COM), COM should be
// initialized before ShellExecuteEx is called. Some Shell extensions
// require the COM single-threaded apartment (STA) type.
// For that case COM is initialized as follows
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
// gswin32 is a GUI api which will pop up a window and run // gswin32 is a GUI api which will pop up a window and run
// asynchronously. To prevent both, we use ShellExecuteEx and // asynchronously. To prevent both, we use ShellExecuteEx and
// WaitForSingleObject (thanks to Robert Golias for the code) // WaitForSingleObject (thanks to Robert Golias for the code)
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
class BufStr; class BufStr;
DefineDict* getGlobalDefineDict();
void initPreprocessor(); void initPreprocessor();
void cleanUpPreprocessor(); void cleanUpPreprocessor();
void addSearchDir(const char *dir); void addSearchDir(const char *dir);
......
This diff is collapsed.
...@@ -730,10 +730,9 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s ...@@ -730,10 +730,9 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
{ {
ClassDef *cd = (ClassDef*)sym->getOuterScope(); ClassDef *cd = (ClassDef*)sym->getOuterScope();
ClassDef *thisCd = (ClassDef *)g_currentDefinition; ClassDef *thisCd = (ClassDef *)g_currentDefinition;
QCString anchor; QCString anchor=sym->anchor();
if (sym->definitionType()==Definition::TypeMember) if (sym->definitionType()==Definition::TypeMember)
{ {
anchor=((MemberDef *)sym)->anchor();
if (g_currentMemberDef) if (g_currentMemberDef)
{ {
addDocCrossReference(g_currentMemberDef,(MemberDef*)sym); addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
......
...@@ -1672,7 +1672,7 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName) ...@@ -1672,7 +1672,7 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName)
baseName=baseName.right(baseName.length()-i-1); baseName=baseName.right(baseName.length()-i-1);
} }
QCString outDir = Config_getString("RTF_OUTPUT"); QCString outDir = Config_getString("RTF_OUTPUT");
writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); writeMscGraphFromFile(fileName+".msc",outDir,baseName,MSC_BITMAP);
if (!m_lastIsPara) m_t << "\\par" << endl; if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << "{" << endl; m_t << "{" << endl;
m_t << rtf_Style_Reset; m_t << rtf_Style_Reset;
......
...@@ -173,6 +173,7 @@ static QCString idlProp; ...@@ -173,6 +173,7 @@ static QCString idlProp;
static bool g_lexInit = FALSE; static bool g_lexInit = FALSE;
static bool externC; static bool externC;
static QCString g_hereDocId;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -695,6 +696,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -695,6 +696,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x CopyArgComment %x CopyArgComment
%x CopyArgCommentLine %x CopyArgCommentLine
%x CopyArgVerbatim %x CopyArgVerbatim
%x HereDoc
%x HereDocEnd
%x IDLAttribute %x IDLAttribute
%x IDLProp %x IDLProp
...@@ -1822,6 +1825,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1822,6 +1825,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
else else
BEGIN( EndTemplate ); BEGIN( EndTemplate );
} }
<EndTemplate>"<<<" {
if (!insidePHP)
{
REJECT;
}
else
{
BEGIN(HereDoc);
}
}
<ClassTemplSpec,EndTemplate>"<<" { <ClassTemplSpec,EndTemplate>"<<" {
current->name+=yytext; current->name+=yytext;
// *currentTemplateSpec+=yytext; // *currentTemplateSpec+=yytext;
...@@ -1901,6 +1914,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1901,6 +1914,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
else else
REJECT; REJECT;
} }
<HereDoc>{ID} { // PHP heredoc
g_hereDocId = yytext;
BEGIN(HereDocEnd);
}
<HereDoc>"'"{ID}/"'" { // PHP nowdoc
g_hereDocId = &yytext[1];
}
<HereDocEnd>^{ID} { // id at start of the line could mark the end of the block
if (g_hereDocId==yytext) // it is the end marker
{
BEGIN(FindMembers);
}
}
<HereDocEnd>. { }
<FindMembers>"Q_OBJECT" { // Qt object macro <FindMembers>"Q_OBJECT" { // Qt object macro
} }
<FindMembers>"Q_PROPERTY" { // Qt property declaration <FindMembers>"Q_PROPERTY" { // Qt property declaration
...@@ -2387,7 +2414,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2387,7 +2414,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
} }
} }
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" { <FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}"[^*]*"*/" {
closeGroup(current,yyFileName,yyLineNr); closeGroup(current,yyFileName,yyLineNr);
} }
<FindMembers>"=" { // in PHP code this could also be due to "<?=" <FindMembers>"=" { // in PHP code this could also be due to "<?="
...@@ -5537,7 +5564,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -5537,7 +5564,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<SkipCxxComment>.*"\\\n" { // line continuation <SkipCxxComment>.*"\\\n" { // line continuation
yyLineNr++; if (insideCS)
{
REJECT;
}
else
{
yyLineNr++;
}
} }
<SkipCxxComment>.*/\n { <SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ; BEGIN( lastCContext ) ;
......
This diff is collapsed.
...@@ -354,6 +354,8 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser); ...@@ -354,6 +354,8 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser);
SrcLangExt getLanguageFromFileName(const QCString fileName); SrcLangExt getLanguageFromFileName(const QCString fileName);
void initDefaultExtensionMapping(); void initDefaultExtensionMapping();
MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
const char *n);
bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n); bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
......
...@@ -495,12 +495,18 @@ void writeXMLCodeBlock(FTextStream &t,FileDef *fd) ...@@ -495,12 +495,18 @@ void writeXMLCodeBlock(FTextStream &t,FileDef *fd)
ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension()); ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
pIntf->resetCodeParserState(); pIntf->resetCodeParserState();
XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t); XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t);
pIntf->parseCode(*xmlGen, pIntf->parseCode(*xmlGen, // codeOutIntf
0, 0, // scopeName
fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")), fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")),
FALSE, FALSE, // isExampleBlock
0, 0, // exampleName
fd); fd, // fileDef
-1, // startLine
-1, // endLine
FALSE, // inlineFragement
0, // memberDef
TRUE // showLineNumbers
);
xmlGen->finish(); xmlGen->finish();
delete xmlGen; delete xmlGen;
} }
...@@ -543,20 +549,21 @@ static void stripQualifiers(QCString &typeStr) ...@@ -543,20 +549,21 @@ static void stripQualifiers(QCString &typeStr)
static QCString classOutputFileBase(ClassDef *cd) static QCString classOutputFileBase(ClassDef *cd)
{ {
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
if (inlineGroupedClasses && cd->partOfGroups()!=0) //if (inlineGroupedClasses && cd->partOfGroups()!=0)
return cd->getXmlOutputFileBase(); return cd->getOutputFileBase();
else //else
return cd->getOutputFileBase(); // return cd->getOutputFileBase();
} }
static QCString memberOutputFileBase(MemberDef *md) static QCString memberOutputFileBase(MemberDef *md)
{ {
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0) //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
return md->getClassDef()->getXmlOutputFileBase(); // return md->getClassDef()->getXmlOutputFileBase();
else //else
return md->getOutputFileBase(); // return md->getOutputFileBase();
return md->getOutputFileBase();
} }
......
...@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC ...@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = c++ TMAKE_CXX = c++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6 TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int
TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
......
...@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC ...@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = c++ TMAKE_CXX = c++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6 -mmacosx-version-min=10.5 TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6 -mmacosx-version-min=10.5 -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int
TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
......
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