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 \
src/doxygen_php.h \
src/compound_xsd.h \
src/layout_default.h \
src/bib2xhtml.h
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
......
DOXYGEN Version 1.7.5.1-20110925
DOXYGEN Version 1.7.5.1-20111027
Please read the installation section of the manual
(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.
......@@ -26,4 +26,4 @@ forum.
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
doxygen_version_revision=5.1
#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"`
......
......@@ -629,8 +629,7 @@ Structural indicators
*/
\endverbatim
You can refer to the main page using \\ref index (if the treeview
is disabled, otherwise you should use \\ref main).
You can refer to the main page using \\ref index.
\sa section \ref cmdsection "\\section",
section \ref cmdsubsection "\\subsection", and
......
......@@ -254,6 +254,12 @@ in a configuration file from the command line (assuming a UNIX environment):
( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -
\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
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
/** Create the database, with an expected maximum of \a size entries */
CiteDict(int size);
/** Resolve references to citations */
void resolve();
// /** Resolve references to citations */
// void resolve();
/** Insert a citation identified by \a label into the database */
void insert(const char *label);
......@@ -87,13 +87,13 @@ class CiteDict
void writeLatexBibliography(FTextStream &t);
private:
bool writeAux();
bool writeBst();
bool execute();
void parse();
void clean();
// bool writeAux();
// bool writeBst();
// bool execute();
// void parse();
// void clean();
QDict<CiteInfo> m_entries;
QList<QCString> m_ordering;
// QList<QCString> m_ordering;
QCString m_baseFileName;
};
......
......@@ -175,6 +175,9 @@ class ClassDefImpl
/** Is this a simple (non-nested) C structure? */
bool isSimple;
/** Does this class overloaded the -> operator? */
MemberDef *arrowOperator;
ClassList *taggedInnerClasses;
ClassDef *tagLessRef;
};
......@@ -217,6 +220,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
categoryOf = 0;
usedOnly = FALSE;
isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS");
arrowOperator = 0;
taggedInnerClasses = 0;
tagLessRef = 0;
//QCString ns;
......@@ -636,6 +640,11 @@ void ClassDef::internalInsertMember(MemberDef *md,
m_impl->isAbstract=TRUE;
}
if (md->name()=="operator->")
{
m_impl->arrowOperator=md;
}
//::addClassMemberNameToIndex(md);
if (addToAllList &&
!(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
......@@ -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)
{
// point to the template of which this class is an instance
......@@ -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
{
if (isReference())
......@@ -3921,6 +3928,11 @@ bool ClassDef::isSimple() const
return m_impl->isSimple;
}
MemberDef *ClassDef::isSmartPointer() const
{
return m_impl->arrowOperator;
}
void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t)
{
md->setMemberType(t);
......@@ -3936,7 +3948,7 @@ void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t)
QCString ClassDef::anchor() const
{
QCString anc;
if (isEmbeddedInOuterScope())
if (isEmbeddedInOuterScope() && !Doxygen::generatingXmlOutput)
{
if (m_impl->templateMaster)
{
......
......@@ -95,8 +95,7 @@ class ClassDef : public Definition
DefType definitionType() const { return TypeClass; }
/*! Returns the unique base name (without extension) of the class's file on disk */
QCString getOutputFileBase() const;
QCString getXmlOutputFileBase() const;
QCString getOutputFileBase() const;
QCString getInstanceOutputFileBase() const;
QCString getFileBase() const;
......@@ -272,6 +271,8 @@ class ClassDef : public Definition
const ClassList *taggedInnerClasses() const;
ClassDef *tagLessReference() const;
MemberDef *isSmartPointer() const;
//-----------------------------------------------------------------------------------
// --- setters ----
//-----------------------------------------------------------------------------------
......
......@@ -246,7 +246,7 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
( // look for class definitions inside the code block
(varType=g_codeClassSDict->find(typeName)) ||
// 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
varType->templateArguments())
{
......@@ -477,7 +477,8 @@ static void startCodeLine()
//printf("->startCodeLine(%s)=%p\n",d->name().data(),g_currentMemberDef);
g_insideBody = FALSE;
g_searchingForBody = TRUE;
g_realScope = d->name().copy();
g_realScope = d->name();
//g_classScope = "";
g_type.resize(0);
g_name.resize(0);
g_args.resize(0);
......@@ -724,7 +725,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
ClassDef *mcd = g_theVarContext.findVariable(name);
if (mcd) // local variable
{
//fprintf(stderr,"local variable\n");
//fprintf(stderr,"local variable?\n");
if (mcd!=VariableContext::dummyContext)
{
//fprintf(stderr,"local var `%s' mcd=%s\n",name.data(),mcd->name().data());
......@@ -733,6 +734,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
}
else
{
//fprintf(stderr,"class member? scope=%s\n",g_classScope.data());
// look for a class member
mcd = getClass(g_classScope);
if (mcd)
......@@ -792,6 +794,22 @@ static MemberDef *setCallContextForVar(const QCString &name)
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 bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
......@@ -942,11 +960,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
{
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);
//fprintf(stderr,"non-local variable name=%s context=%d cd=%s md=%s!\n",
// 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)
{
QCString bareName = className.left(i); //stripTemplateSpecifiersFromScope(className);
......@@ -2501,6 +2519,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass();
}
<Body>"."|"->" {
if (yytext[0]=='-') // -> could be overloaded
{
updateCallContextForSmartPointer();
}
g_code->codify(yytext);
g_memCallContext = YY_START;
BEGIN( MemberCall );
......@@ -3007,6 +3029,10 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
BEGIN( MemberCall2 );
}
<MemberCall2>"->"|"." {
if (yytext[0]=='-') // -> could be overloaded
{
updateCallContextForSmartPointer();
}
g_code->codify(yytext);
g_memCallContext = YY_START;
BEGIN( MemberCall );
......
......@@ -825,6 +825,7 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
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\-]*
CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
SCOPEID {ID}({ID}*{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\-]+
......@@ -1966,7 +1967,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle arguments of the cite command ------- */
<CiteLabel>{LABELID} { // found argyment
<CiteLabel>{CITEID} { // found argyment
addCite();
addOutput(yytext);
BEGIN(Comment);
......
......@@ -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='
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
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='
The PROJECT_NUMBER tag can be used to enter a project or revision number.
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
.bib extension is automatically appended if omitted. Using this command
requires the bibtex tool to be installed. See also
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=''/>
</group>
<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
navigation tree you can set this option to NO if you already set
GENERATE_TREEVIEW to YES.
' 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='
The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
structure should be generated to display hierarchical information.
......@@ -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
could consider to set DISABLE_INDEX to NO when enabling this option.
' 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='
By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
and Class Hierarchy pages using a tree view instead of an ordered list.
......
......@@ -36,6 +36,7 @@ void addConfigOptions(Config *cfg)
"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."
);
cs->setDefaultValue("My Project");
//----
cs = cfg->addString(
"PROJECT_NUMBER",
......@@ -761,7 +762,7 @@ void addConfigOptions(Config *cfg)
".bib extension is automatically appended if omitted. Using this command\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"
"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);
//---------------------------------------------------------------------------
......@@ -1483,16 +1484,6 @@ void addConfigOptions(Config *cfg)
);
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(
"GENERATE_TREEVIEW",
"The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n"
......@@ -1508,6 +1499,16 @@ void addConfigOptions(Config *cfg)
);
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(
"USE_INLINE_TREES",
"By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,\n"
......
......@@ -132,6 +132,9 @@ class Definition : public DefinitionIntf, public LockableObj
*/
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. */
virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; }
......
......@@ -49,10 +49,11 @@ class DirDef : public Definition
virtual ~DirDef();
// accessors
virtual DefType definitionType() const { return TypeDir; }
virtual QCString getOutputFileBase() const;
virtual bool isLinkableInProject() const;
virtual bool isLinkable() const;
DefType definitionType() const { return TypeDir; }
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
bool isLinkableInProject() const;
bool isLinkable() const;
QCString displayName() const { return m_dispName; }
QCString shortName() const { return m_shortName; }
void addSubDir(DirDef *subdir);
......
......@@ -1043,7 +1043,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
}
else if (compound->isLinkable()) // compound link
{
QCString anchor;
QCString anchor = compound->anchor();
if (compound->definitionType()==Definition::TypeFile)
{
name=g_token->name;
......@@ -1052,10 +1052,6 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
{
name=((GroupDef*)compound)->groupTitle();
}
else if (compound->definitionType()==Definition::TypeClass)
{
anchor=((ClassDef*)compound)->anchor();
}
children.append(new
DocLinkedWord(parent,name,
compound->getReference(),
......@@ -1700,7 +1696,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
CiteInfo *cite = Doxygen::citeDict->find(id.mid(CiteConsts::anchorPrefix.length()));
if (cite)
{
m_file = CiteConsts::fileName;
m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
m_anchor = id;
}
else
......@@ -2422,7 +2418,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
static uint numBibFiles = Config_getList("CITE_BIB_FILES").count();
m_parent = parent;
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());
m_relPath = g_relPath;
CiteInfo *cite = Doxygen::citeDict->find(target);
......@@ -2432,7 +2428,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
if (m_text.isEmpty()) m_text = cite->label;
m_ref = cite->ref;
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",
// m_text.data(),m_ref.data(),m_file.data(),m_anchor.data());
return;
......@@ -3660,6 +3656,13 @@ int DocHtmlDescTitle::parse()
retval=RetVal_EndDesc;
goto endtitle;
}
else if (tagId==HTML_A)
{
if (!g_token->endTag)
{
handleAHref(this,m_children,g_token->attribs);
}
}
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context",
......@@ -4500,6 +4503,7 @@ void DocPara::handleCite()
qPrint("cite"));
return;
}
doctokenizerYYsetStateCite();
tok=doctokenizerYYlex();
if (tok==0)
{
......@@ -4514,7 +4518,6 @@ void DocPara::handleCite()
return;
}
g_token->sectionId = g_token->name;
doctokenizerYYsetStateCite();
DocCite *cite = new DocCite(this,g_token->name,g_context);
m_children.append(cite);
//cite->parse();
......
......@@ -334,12 +334,12 @@ LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
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]+)+
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=]
ESCWORD "%"{ID}(("::"|"."){ID})*
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
ESCWORD ("%"{ID}(("::"|"."){ID})*)|("%'")
WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}"
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
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"
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;
int Doxygen::subpageNestingLevel = 0;
bool Doxygen::userComments = FALSE;
QCString Doxygen::spaces;
bool Doxygen::generatingXmlOutput = FALSE;
// locally accessible globals
static QDict<EntryNav> g_classEntries(1009);
......@@ -252,8 +253,11 @@ static STLInfo g_stlinfo[] =
{
// className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators
{ "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE },
{ "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE },
{ "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // deprecated
{ "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_istream", "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)
Entry *memEntry = new Entry;
memEntry->name = name;
memEntry->type = type;
memEntry->protection = Private;
memEntry->protection = Public;
memEntry->section = Entry::VARIABLE_SEC;
memEntry->brief = "STL member";
memEntry->hidden = FALSE;
......@@ -415,6 +419,22 @@ static void addSTLClasses(EntryNav *rootNav)
{
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)
{
classEntry->extends->append(new BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal));
......@@ -10561,8 +10581,8 @@ void parseInput()
computeDirDependencies();
}
msg("Resolving citations...\n");
Doxygen::citeDict->resolve();
//msg("Resolving citations...\n");
//Doxygen::citeDict->resolve();
msg("Generating citations page...\n");
Doxygen::citeDict->generatePage();
......@@ -10853,7 +10873,9 @@ void generateOutput()
if (Config_getBool("GENERATE_XML"))
{
msg("Generating XML output...\n");
Doxygen::generatingXmlOutput=TRUE;
generateXML();
Doxygen::generatingXmlOutput=FALSE;
}
if (Config_getBool("GENERATE_AUTOGEN_DEF"))
{
......
......@@ -133,6 +133,7 @@ class Doxygen
static IndexList indexList;
static int subpageNestingLevel;
static QCString spaces;
static bool generatingXmlOutput;
};
void initDoxygen();
......
This diff is collapsed.
......@@ -1503,7 +1503,7 @@ bool FileDef::isDocumentationFile() const
void FileDef::acquireFileVersion()
{
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());
QCString cmd = vercmd+" \""+filepath+"\"";
......@@ -1518,9 +1518,8 @@ void FileDef::acquireFileVersion()
char buf[bufSize];
int numRead = fread(buf,1,bufSize,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());
}
else
......@@ -1650,6 +1649,7 @@ bool FileDef::isLinkableInProject() const
return hasDocumentation() && !isReference() && showFiles;
}
#if 0
bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
{
//printf("%s::includes(%s)\n",name().data(),incFile->name().data());
......@@ -1687,4 +1687,4 @@ bool FileDef::includesByName(const QCString &fileName) const
}
return FALSE;
}
#endif
......@@ -88,6 +88,8 @@ class FileDef : public Definition
QCString getOutputFileBase() const
{ return convertNameToFile(diskname); }
QCString anchor() const
{ return QCString(); }
QCString getFileBase() const
{ return diskname; }
......@@ -168,8 +170,8 @@ class FileDef : public Definition
void addListReferences();
bool isDocumentationFile() const;
bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
bool includesByName(const QCString &name) const;
//bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
//bool includesByName(const QCString &name) const;
MemberList *getMemberList(MemberList::ListType lt) const;
const QList<MemberList> &getMemberLists() const { return m_memberLists; }
......
......@@ -202,7 +202,7 @@ static void scanner_abort();
static void startScope(Entry *scope);
static bool endScope(Entry *scope, bool isGlobalRoot=FALSE);
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 int getAmpersandAtTheStart(const char *buf, int length);
static int getAmpOrExclAtTheEnd(const char *buf, int length);
......@@ -669,10 +669,11 @@ private {
argType = QCString(yytext).simplifyWhiteSpace();
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;
str = str.stripWhiteSpace();
DefineDict* defines = getGlobalDefineDict();
//DefineDict* defines = getGlobalDefineDict();
QCString name;
int index = str.find("(");
if (index != -1)
......@@ -680,7 +681,7 @@ private {
else
name = str;
Define *define = (*defines)[name];
Define *define = 0; //(*defines)[name];
if (define != 0 && isTypeName(define->definition))
{
argType = str;
......@@ -692,6 +693,7 @@ private {
REJECT;
}
}
*/
{ATTR_STMT}/{BS_}{ID} |
{ATTR_STMT}/{BS}"::" {
/* attribute statement starts */
......@@ -1406,12 +1408,14 @@ void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root
moduleProcedures.clear();
}
#if 0
static bool isTypeName(QCString name)
{
name = name.lower();
return name=="integer" || name == "real" ||
name=="complex" || name == "logical";
name=="complex" || name == "logical";
}
#endif
/*! Extracts string which resides within parentheses of provided string. */
static QCString extractFromParens(const QCString name)
......
......@@ -48,6 +48,7 @@ class GroupDef : public Definition
~GroupDef();
DefType definitionType() const { return TypeGroup; }
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
const char *groupTitle() const { return title; }
void setGroupTitle( const char *newtitle );
bool hasGroupTitle( ) { return titleSet; }
......
......@@ -1408,32 +1408,30 @@ void HtmlDocVisitor::visitPre(DocParamSect *s)
{
if (m_hide) return;
forceEndParagraph(s);
m_t << "<dl><dt><b>";
QCString className;
QCString heading;
switch(s->type())
{
case DocParamSect::Param:
m_t << theTranslator->trParameters();
heading=theTranslator->trParameters();
className="params";
break;
case DocParamSect::RetVal:
m_t << theTranslator->trReturnValues();
heading=theTranslator->trReturnValues();
className="retval";
break;
case DocParamSect::Exception:
m_t << theTranslator->trExceptions();
heading=theTranslator->trExceptions();
className="exception";
break;
case DocParamSect::TemplateParam:
/* TODO: add this
m_t << theTranslator->trTemplateParam(); break;
*/
m_t << "Template Parameters"; break;
heading="Template Parameters"; break; // TODO: translate me
className="tparams";
default:
ASSERT(0);
}
m_t << ":";
m_t << "<dl class=\"" << className << "\"><dt><b>";
m_t << heading << ":";
m_t << "</b></dt><dd>" << endl;
m_t << " <table class=\"" << className << "\">" << endl;
}
......@@ -1698,7 +1696,8 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath,
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)
{
QCString baseName=fileName;
......
This diff is collapsed.
......@@ -1512,8 +1512,7 @@ void LatexDocVisitor::startMscFile(const QCString &fileName,
baseName.prepend("msc_");
QCString outDir = Config_getString("LATEX_OUTPUT");
QCString name = fileName;
writeMscGraphFromFile(name,outDir,baseName,MSC_EPS);
writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS);
if (hasCaption)
{
m_t << "\n\\begin{DoxyImage}\n";
......@@ -1568,7 +1567,7 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName)
shortName=shortName.right(shortName.length()-i-1);
}
QCString outDir = Config_getString("LATEX_OUTPUT");
writeMscGraphFromFile(baseName,outDir,shortName,MSC_EPS);
writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS);
m_t << "\n\\begin{DoxyImageNoCaption}"
" \\mbox{\\includegraphics";
m_t << "{" << shortName << "}";
......
......@@ -701,6 +701,7 @@ static void writeDefaultStyleSheetPart3(FTextStream &t)
" \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
" p{0.15\\textwidth}|%\n"
" p{0.635\\textwidth}|}%\n"
//"\\hline{\\sf\\textbf{Type}} & {\\sf\\textbf{Name}} & {\\sf\\textbf{Description}}\\endhead%\n"
" \\hline%\n"
"}{%\n"
" \\end{longtable}%\n"
......@@ -1772,7 +1773,7 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
t << "\\hypertarget{";
if (fName) t << stripPath(fName);
if (anchor) t << "_" << anchor;
t << "}{" << endl;
t << "}{";
}
}
......@@ -1782,7 +1783,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
if (usePDFLatex && pdfHyperlinks)
{
t << "}" << endl;
t << "}";
}
t << "\\label{";
if (fName) t << fName;
......@@ -2112,19 +2113,23 @@ void LatexGenerator::endMemberList()
void LatexGenerator::startMemberGroupHeader(bool hasHeader)
{
if (hasHeader) t << "\\begin{Indent}";
if (Config_getBool("COMPACT_LATEX"))
{
t << "\\subparagraph*{";
}
else
{
t << "\\paragraph*{";
}
t << "{\\bf ";
// changed back to rev 756 due to bug 660501
//if (Config_getBool("COMPACT_LATEX"))
//{
// t << "\\subparagraph*{";
//}
//else
//{
// t << "\\paragraph*{";
//}
}
void LatexGenerator::endMemberGroupHeader()
{
t << "}" << endl;
// changed back to rev 756 due to bug 660501
t << "}\\par" << endl;
//t << "}" << endl;
}
void LatexGenerator::startMemberGroupDocs()
......
......@@ -258,7 +258,6 @@ win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-msvc:TMAKE_CXXFLAGS += -Zm200
win32-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 += ../libpng
INCLUDEPATH += ../libmd5
......
......@@ -164,3 +164,7 @@ svgpan_js.h: svgpan.js
doxygen_bst.h: doxygen.bst
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,
}
// 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)
{
QCString ts=removeAnonymousScopes(s);
......@@ -2535,6 +2535,9 @@ static QCString simplifyTypeForTable(const QCString &s)
}
i=ts.findRev('.');
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;
}
......
......@@ -43,6 +43,7 @@ class NamespaceDef : public Definition
~NamespaceDef();
DefType definitionType() const { return TypeNamespace; }
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
void insertUsedFile(const char *fname);
void writeDocumentation(OutputList &ol);
......
......@@ -39,6 +39,7 @@ class PageDef : public Definition
// functions to get a uniform interface with Definitions
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
void findSectionsInDocumentation();
QCString title() const { return m_title; }
GroupDef * getGroupDef() const;
......
......@@ -121,6 +121,14 @@ int portable_system(const char *command,const char *args,bool commandHasConsole
}
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
// asynchronously. To prevent both, we use ShellExecuteEx and
// WaitForSingleObject (thanks to Robert Golias for the code)
......
......@@ -24,7 +24,6 @@
class BufStr;
DefineDict* getGlobalDefineDict();
void initPreprocessor();
void cleanUpPreprocessor();
void addSearchDir(const char *dir);
......
This diff is collapsed.
......@@ -730,10 +730,9 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
{
ClassDef *cd = (ClassDef*)sym->getOuterScope();
ClassDef *thisCd = (ClassDef *)g_currentDefinition;
QCString anchor;
QCString anchor=sym->anchor();
if (sym->definitionType()==Definition::TypeMember)
{
anchor=((MemberDef *)sym)->anchor();
if (g_currentMemberDef)
{
addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
......
......@@ -1672,7 +1672,7 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName)
baseName=baseName.right(baseName.length()-i-1);
}
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;
m_t << "{" << endl;
m_t << rtf_Style_Reset;
......
......@@ -173,6 +173,7 @@ static QCString idlProp;
static bool g_lexInit = FALSE;
static bool externC;
static QCString g_hereDocId;
//-----------------------------------------------------------------------------
......@@ -695,6 +696,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x CopyArgComment
%x CopyArgCommentLine
%x CopyArgVerbatim
%x HereDoc
%x HereDocEnd
%x IDLAttribute
%x IDLProp
......@@ -1822,6 +1825,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
else
BEGIN( EndTemplate );
}
<EndTemplate>"<<<" {
if (!insidePHP)
{
REJECT;
}
else
{
BEGIN(HereDoc);
}
}
<ClassTemplSpec,EndTemplate>"<<" {
current->name+=yytext;
// *currentTemplateSpec+=yytext;
......@@ -1901,6 +1914,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
else
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_PROPERTY" { // Qt property declaration
......@@ -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);
}
<FindMembers>"=" { // in PHP code this could also be due to "<?="
......@@ -5537,7 +5564,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<SkipCxxComment>.*"\\\n" { // line continuation
yyLineNr++;
if (insideCS)
{
REJECT;
}
else
{
yyLineNr++;
}
}
<SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ;
......
This diff is collapsed.
......@@ -354,6 +354,8 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser);
SrcLangExt getLanguageFromFileName(const QCString fileName);
void initDefaultExtensionMapping();
MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
const char *n);
bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
......
......@@ -495,12 +495,18 @@ void writeXMLCodeBlock(FTextStream &t,FileDef *fd)
ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
pIntf->resetCodeParserState();
XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t);
pIntf->parseCode(*xmlGen,
0,
pIntf->parseCode(*xmlGen, // codeOutIntf
0, // scopeName
fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")),
FALSE,
0,
fd);
FALSE, // isExampleBlock
0, // exampleName
fd, // fileDef
-1, // startLine
-1, // endLine
FALSE, // inlineFragement
0, // memberDef
TRUE // showLineNumbers
);
xmlGen->finish();
delete xmlGen;
}
......@@ -543,20 +549,21 @@ static void stripQualifiers(QCString &typeStr)
static QCString classOutputFileBase(ClassDef *cd)
{
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
if (inlineGroupedClasses && cd->partOfGroups()!=0)
return cd->getXmlOutputFileBase();
else
return cd->getOutputFileBase();
//static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
//if (inlineGroupedClasses && cd->partOfGroups()!=0)
return cd->getOutputFileBase();
//else
// return cd->getOutputFileBase();
}
static QCString memberOutputFileBase(MemberDef *md)
{
static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
return md->getClassDef()->getXmlOutputFileBase();
else
return md->getOutputFileBase();
//static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
//if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
// return md->getClassDef()->getXmlOutputFileBase();
//else
// return md->getOutputFileBase();
return md->getOutputFileBase();
}
......
......@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
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_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
......
......@@ -17,7 +17,7 @@ TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
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_OFF = $$TMAKE_CFLAGS_WARN_OFF
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