Commit a29cfb7d authored by dimitri's avatar dimitri

Release-1.2.11-20011104

parent 04e9bbe0
......@@ -18,7 +18,7 @@ ALWAYS_DETAILED_SEC = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(PWD)/
INTERNAL_DOCS = NO
CLASS_DIAGRAMS = YES
CLASS_DIAGRAMS = NO
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
......
DOXYGEN Version 1.2.11-20011021
DOXYGEN Version 1.2.11-20011104
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (21 October 2001)
Dimitri van Heesch (04 November 2001)
DOXYGEN Version 1.2.11_20011021
DOXYGEN Version 1.2.11_20011104
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (21 October 2001)
Dimitri van Heesch (dimitri@stack.nl) (04 November 2001)
1.2.11-20011021
1.2.11-20011104
......@@ -90,6 +90,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_enabled_sections ENABLED_SECTIONS
<li> \refitem cfg_example_path EXAMPLE_PATH
<li> \refitem cfg_example_patterns EXAMPLE_PATTERNS
<li> \refitem cfg_example_recursive EXAMPLE_RECURSIVE
<li> \refitem cfg_exclude EXCLUDE
<li> \refitem cfg_exclude_patterns EXCLUDE_PATTERNS
<li> \refitem cfg_expand_as_defined EXPAND_AS_DEFINED
......@@ -157,6 +158,8 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_project_number PROJECT_NUMBER
<li> \refitem cfg_quiet QUIET
<li> \refitem cfg_recursive RECURSIVE
<li> \refitem cfg_referenced_by_relation REFERENCED_BY_RELATION
<li> \refitem cfg_references_relation REFERENCES_RELATION
<li> \refitem cfg_repeat_brief REPEAT_BRIEF
<li> \refitem cfg_rtf_extensions_file RTF_EXTENSIONS_FILE
<li> \refitem cfg_rtf_hyperlinks RTF_HYPERLINKS
......@@ -319,18 +322,6 @@ followed by the descriptions of the tags grouped by category.
to \c NO (the default) then the documentation will be excluded.
Set it to \c YES to include the internal documentation.
\anchor cfg_source_browser
<dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will
be generated. Documented entities will be cross-referenced with these sources.
\anchor cfg_inline_sources
<dt>\c INLINE_SOURCES <dd>
\addindex INLINE_SOURCES
Setting the \c INLINE_SOURCES tag to \c YES will include the body
of functions, classes and enums directly into the documentation.
\anchor cfg_strip_code_comments
<dt>\c STRIP_CODE_COMMENTS <dd>
\addindex STRIP_CODE_COMMENTS
......@@ -588,6 +579,14 @@ followed by the descriptions of the tags grouped by category.
directories that contain example code fragments that are included (see
the \\include command in section \ref cmdinclude "\\include").
\anchor cfg_example_recursive
<dt>\c EXAMPLE_RECURSIVE <dd>
\addindex EXAMPLE_RECURSIVE
If the \c EXAMPLE_RECURSIVE tag is set to \c YES then subdirectories will be
searched for input files to be used with the \\include or \\dontinclude
commands irrespective of the value of the \c RECURSIVE tag.
Possible values are \c YES and \c NO. If left blank \c NO is used.
\anchor cfg_example_patterns
<dt>\c EXAMPLE_PATTERNS <dd>
\addindex EXAMPLE_PATTERNS
......@@ -626,6 +625,37 @@ followed by the descriptions of the tags grouped by category.
</dl>
\subsection sourcebrowser_index Source browsing related options
\anchor cfg_source_browser
<dl>
<dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES then a list of source files will
be generated. Documented entities will be cross-referenced with these sources.
\anchor cfg_inline_sources
<dt>\c INLINE_SOURCES <dd>
\addindex INLINE_SOURCES
Setting the \c INLINE_SOURCES tag to \c YES will include the body
of functions, classes and enums directly into the documentation.
\anchor cfg_referenced_by_relation
<dt>\c REFERENCED_BY_RELATION <dd>
\addindex REFERENCED_BY_RELATION
If the \c REFERENCED_BY_RELATION tag is set to \c YES (the default)
then for each documented function all documented
functions referencing it will be listed.
\anchor cfg_references_relation
<dt>\c REFERENCE_RELATION <dd>
\addindex REFERENCES_RELATION
If the \c REFERENCES_RELATION tag is set to \c YES (the default)
then for each documented function all documented entities
called/used by that function will be listed.
</dl>
\subsection alphabetical_index Alphabetical index options
\anchor cfg_alphabetical_index
<dl>
......@@ -1144,7 +1174,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\addindex HAVE_DOT
If you set the \c HAVE_DOT tag to \c YES then doxygen will assume the dot tool is
available from the path. This tool is part of
<a href="http://www.graphviz.org/">Graphviz</a>, a graph
<a href="http://www.research.att.com/sw/tools/graphviz/">Graphviz</a>, a graph
visualization toolkit from AT&T and Lucent Bell Labs. The other options in
this section have no effect if this option is set to \c NO (the default)
......
......@@ -22,7 +22,7 @@
Doxygen can use the "dot" tool from graphviz 1.5 to generate
more advanced diagrams & graphs. Graphviz is an open-sourced,
cross-platform graph drawing toolkit from AT&T and Lucent Bell Labs and
can be found at http://www.graphviz.org/
can be found at http://www.research.att.com/sw/tools/graphviz/
If you have the "dot" tool available in the path, you can set
\ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to
......
......@@ -61,9 +61,9 @@ tools should be installed.
<a href="http://www.tug.org/">teTeX 1.0</a>.<br>
\latexonly(see {\tt http://www.tug.org/})\endlatexonly.
This is needed for generating LaTeX, Postscript, and PDF output.
<li><a href="http://www.graphviz.org/">
<li><a href="http://www.research.att.com/sw/tools/graphviz/">
the Graph visualization toolkit version 1.5</a><br>
\latexonly(see {\tt http://www.graphviz.org/})\endlatexonly.
\latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly.
Needed for the include dependency graphs,
the graphical inheritance graphs, and the collaboration graphs.
<li>The ghostscript interpreter.
......@@ -450,9 +450,9 @@ Here is what is required:
<code>objects</code> and <code>bin</code> manually in the root of the
distribution before compiling.
<li><a href="http://www.graphviz.org/">
<li><a href="http://www.research.att.com/sw/tools/graphviz/">
the Graph visualization toolkit version 1.5</a><br>
\latexonly(see {\tt http://www.graphviz.org/})\endlatexonly.
\latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly.
Needed for the include dependency graphs, the graphical inheritance graphs,
and the collaboration graphs.
</ul>
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.11), 24 languages
Currently (version 1.2.11-20011021), 24 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
......@@ -54,25 +54,25 @@ when the translator was updated.
<TD>Brazilian</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.grad.icmc.sc.usp.br</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Chinese</TD>
<TD>Wang Weihan</TD>
<TD>wangweihan@NOSPAM.capinfo.com.cn</TD>
<TD>1.2.1</TD>
<TD>Wei Liu<br>Wang Weihan</TD>
<TD>liuwei@NOSPAM.asiainfo.com<br>wangweihan@NOSPAM.capinfo.com.cn</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Croatian</TD>
<TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Danish</TD>
......@@ -84,7 +84,7 @@ when the translator was updated.
<TD>Dutch</TD>
<TD>Dimitri van Heesch</TD>
<TD>dimitri@NOSPAM.stack.nl</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>English</TD>
......@@ -102,13 +102,13 @@ when the translator was updated.
<TD>French</TD>
<TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
<TD>Jens Seidel<br>Jens Breitenstein</TD>
<TD>jensseidel@NOSPAM.users.sf.net<br>Jens.Breitenstein@NOSPAM.tlc.de</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Hungarian</TD>
......@@ -120,7 +120,7 @@ when the translator was updated.
<TD>Italian</TD>
<TD>Ahmed Aldo Faisal<br>Alessandro Falappa</TD>
<TD>aaf23@NOSPAM.cam.ac.uk<br>a.falappa@NOSPAM.flashnet.it</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Japanese</TD>
......@@ -150,7 +150,7 @@ when the translator was updated.
<TD>Portuguese</TD>
<TD>Rui Godinho Lopes</TD>
<TD>ruiglopes@NOSPAM.yahoo.com</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Romanian</TD>
......@@ -162,19 +162,19 @@ when the translator was updated.
<TD>Russian</TD>
<TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Slovak</TD>
<TD>Stanislav Kudl&aacute;&#x010d;</TD>
<TD>qwerty1@NOSPAM.pobox.sk</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Slovene</TD>
<TD>Matjaz Ostroversnik</TD>
<TD>matjaz.ostroversnik@NOSPAM.zrs-tk.si</TD>
<TD>1.1.5</TD>
<TD>1.2.11</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Spanish</TD>
......@@ -192,7 +192,7 @@ when the translator was updated.
<TD>Ukrainian</TD>
<TD>Olexij Tkatchenko</TD>
<TD>olexij.tkatchenko@NOSPAM.gmx.de</TD>
<TD>up-to-date</TD>
<TD>1.2.11</TD>
</TR>
</TABLE>
</TD>
......@@ -205,30 +205,31 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline
\hline
Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@grad.icmc.sc.usp.br} & up-to-date \\
Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@grad.icmc.sc.usp.br} & 1.2.11 \\
\hline
Chinese & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & 1.2.1 \\
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.11 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.2.11 \\
\hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & 1.2.11 \\
\hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & 1.2.11 \\
\hline
English & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & 1.0.0 \\
\hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & 1.2.11 \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.11 \\
& Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline
Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & up-to-date \\
Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & 1.2.11 \\
& Alessandro Falappa & {\tt a.falappa@flashnet.it} & \\
\hline
Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & 1.2.5 \\
......@@ -239,22 +240,22 @@ when the translator was updated.
\hline
Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & 1.2.1 \\
\hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.11 \\
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & 1.2.11 \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt qwerty1@pobox.sk} & up-to-date \\
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt qwerty1@pobox.sk} & 1.2.11 \\
\hline
Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & 1.1.5 \\
Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & 1.2.11 \\
\hline
Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} & 1.2.7 \\
\hline
Swedish & Samuel H\"{a}agglund & {\tt sahag96@nts.mh.se} & 1.0.0 \\
& XeT Erixon & {\tt xet@hem.passagen.se} & \\
\hline
Ukrainian & Olexij Tkatchenko & {\tt olexij.tkatchenko@gmx.de} & up-to-date \\
Ukrainian & Olexij Tkatchenko & {\tt olexij.tkatchenko@gmx.de} & 1.2.11 \\
\hline
\end{tabular}
\endlatexonly
......
......@@ -32,6 +32,9 @@ The following output formats are \e directly supported by doxygen:
<dd>Generated if \c GENERATE_RTF is set to \c YES in the configuration file.<p>
Note that the RTF output probably only looks nice with Microsoft's
Word 97. If you have success with other programs, please let me know.
<dt><b>XML</b>
<dd>Generated if \c GENERATE_XML is set to \c YES in the configuration file.<p>
Note that the XML output is still under development.
</dl>
The following output formats are \e indirectly supported by doxygen:
......
Name: doxygen
Version: 1.2.11_20011021
Version: 1.2.11_20011104
Summary: documentation system for C, C++ and IDL
Release: 4
Source: doxygen-%{version}.src.tar.gz
......
......@@ -1267,8 +1267,11 @@ void ClassDef::writeMemberList(OutputList &ol)
QCString name=mi->ambiguityResolutionScope+md->name();
//ol.writeListItem();
ol.writeString(" <tr bgcolor=\"#f0f0f0\"><td>");
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
Definition *bd = md->getGroupDef();
if (bd==0) bd=cd;
ol.writeObjectLink(bd->getReference(),bd->getOutputFileBase(),
md->anchor(),name);
if ( md->isFunction() || md->isSignal() || md->isSlot() ||
(md->isFriend() && md->argsString()))
ol.docify(md->argsString());
......@@ -2238,23 +2241,18 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
//imd->setBriefDescription(md->briefDescription());
imd->setMemberSpecifiers(md->getMemberSpecifiers());
insertMember(imd);
//printf("Adding member=%s%s to class %s\n",imd->name().data(),imd->argsString(),imd->getClassDef()->name().data());
//printf("Adding member=%s %s%s to class %s templSpec %s\n",
// imd->typeString(),imd->name().data(),imd->argsString(),
// imd->getClassDef()->name().data(),templSpec);
// insert imd in the list of all members
//printf("Adding member=%s class=%s\n",imd->name().data(),name().data());
#if 0
MemberName *mn;
if ((mn=Doxygen::memberNameDict[imd->name()]))
{
mn->append(md);
}
else
MemberName *mn = Doxygen::memberNameSDict[imd->name()];
if (mn==0)
{
mn = new MemberName(imd->name());
mn->append(md);
Doxygen::memberNameDict.insert(imd->name(),mn);
Doxygen::memberNameList.append(mn);
Doxygen::memberNameSDict.append(imd->name(),mn);
}
#endif
mn->append(imd);
}
}
}
......@@ -2378,3 +2376,28 @@ void ClassDef::addListReferences()
propertyMembers.addListReferences(this);
}
MemberDef *ClassDef::getMemberByName(const QCString &name)
{
MemberDef *xmd = 0;
MemberNameInfo *mni = m_allMemberNameInfoSDict->find(name);
if (mni)
{
const int maxInheritanceDepth = 100000;
int mdist=maxInheritanceDepth;
MemberNameInfoIterator mnii(*mni);
MemberInfo *mi;
for (mnii.toFirst();(mi=mnii.current());++mnii)
{
ClassDef *mcd=mi->memberDef->getClassDef();
int m=minClassDistance(this,mcd);
if (m<mdist && mcd->isLinkable())
{
mdist=m;
xmd=mi->memberDef;
}
}
}
return xmd;
}
......@@ -146,6 +146,8 @@ class ClassDef : public Definition
*/
PackageDef *packageDef() const;
MemberDef *getMemberByName(const QCString &);
/*! Returns TRUE iff \a bcd is a direct or indirect base class of this
* class. This function will recusively traverse all branches of the
* inheritance tree.
......@@ -244,9 +246,9 @@ class ClassDef : public Definition
void insertMember(MemberDef *);
void insertUsedFile(const char *);
void computeAnchors();
void computeMemberGroups();
void setAnchor(MemberDef *);
void dumpMembers();
//void computeMemberGroups();
//void setAnchor(MemberDef *);
//void dumpMembers();
bool addExample(const char *anchor,const char *name, const char *file);
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
......
This diff is collapsed.
......@@ -1306,18 +1306,6 @@ void Config::create()
"Set it to YES to include the internal documentation. \n",
FALSE
);
cb = addBool(
"SOURCE_BROWSER",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
"be generated. Documented entities will be cross-referenced with these sources. \n",
FALSE
);
cb = addBool(
"INLINE_SOURCES",
"Setting the INLINE_SOURCES tag to YES will include the body \n"
"of functions and classes directly in the documentation. \n",
FALSE
);
cb = addBool(
"STRIP_CODE_COMMENTS",
"Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n"
......@@ -1557,6 +1545,14 @@ void Config::create()
"and *.h) to filter out the source-files in the directories. If left \n"
"blank all files are included. \n"
);
cb = addBool(
"EXAMPLE_RECURSIVE",
"If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \n"
"searched for input files to be used with the \\include or \\dontinclude \n"
"commands irrespective of the value of the RECURSIVE tag. \n"
"Possible values are YES and NO. If left blank NO is used. \n",
FALSE
);
cl = addList(
"IMAGE_PATH",
"The IMAGE_PATH tag can be used to specify one or more files or \n"
......@@ -1581,7 +1577,35 @@ void Config::create()
"files to browse. \n",
FALSE
);
//-----------------------------------------------------------------------------------------------
addInfo( "Source Browser","configuration options related to source browsing");
//-----------------------------------------------------------------------------------------------
cb = addBool(
"SOURCE_BROWSER",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
"be generated. Documented entities will be cross-referenced with these sources. \n",
FALSE
);
cb = addBool(
"INLINE_SOURCES",
"Setting the INLINE_SOURCES tag to YES will include the body \n"
"of functions and classes directly in the documentation. \n",
FALSE
);
cb = addBool( "REFERENCED_BY_RELATION",
"If the REFERENCED_BY_RELATION tag is set to YES (the default) \n"
"then for each documented function all documented \n"
"functions referencing it will be listed. \n",
TRUE
);
cb->addDependency("SOURCE_BROWSER");
cb = addBool( "REFERENCES_RELATION",
"If the REFERENCES_RELATION tag is set to YES (the default) \n"
"then for each documented function all documented entities \n"
"called/used by that function will be listed. \n",
TRUE
);
cb->addDependency("SOURCE_BROWSER");
//-----------------------------------------------------------------------------------------------
addInfo( "Index","configuration options related to the alphabetical class index");
//-----------------------------------------------------------------------------------------------
......
......@@ -44,8 +44,8 @@ Definition::Definition(const char *df,int dl,
m_sectionDict=0,
m_startBodyLine=m_endBodyLine=-1,
m_bodyDef=0;
m_sourceRefList=0;
m_sourceRefDict=0;
m_sourceRefByDict=0;
m_sourceRefsDict=0;
m_todoId=0;
m_testId=0;
m_bugId=0;
......@@ -55,8 +55,8 @@ Definition::Definition(const char *df,int dl,
Definition::~Definition()
{
delete m_sectionDict;
delete m_sourceRefList;
delete m_sourceRefDict;
delete m_sourceRefByDict;
delete m_sourceRefsDict;
}
......@@ -346,16 +346,17 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
/*! Write a reference to the source code fragments in which this
* definition is used.
*/
void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members)
{
ol.pushGeneratorState();
if (Config_getBool("SOURCE_BROWSER") && m_sourceRefList)
if (Config_getBool("SOURCE_BROWSER") && members)
{
ol.newParagraph();
parseText(ol,theTranslator->trReferencedBy());
parseText(ol,text);
ol.docify(" ");
QCString ldefLine=theTranslator->trWriteList(m_sourceRefList->count());
QCString ldefLine=theTranslator->trWriteList(members->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
......@@ -365,7 +366,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
bool ok;
parseText(ol,ldefLine.mid(index,newIndex-index));
uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
MemberDef *md=m_sourceRefList->at(entryIndex);
MemberDef *md=members->at(entryIndex);
if (ok && md)
{
QCString scope=md->getScopeString();
......@@ -391,11 +392,27 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
ol.docify(name);
ol.popGeneratorState();
}
else if (md->isLinkable() && md->getOuterScope())
{
Definition *d = md->getOuterScope();
// for HTML write a real link
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),name);
ol.popGeneratorState();
// for the other output formats just mention the name
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.docify(name);
ol.popGeneratorState();
}
else
{
ol.docify(name);
}
ol.docify("()");
if (md->isFunction()) ol.docify("()");
}
index=newIndex+matchLen;
}
......@@ -406,6 +423,16 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
ol.popGeneratorState();
}
void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
{
writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict);
}
void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{
writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict);
}
bool Definition::hasDocumentation() const
{
return !m_doc.isEmpty() || // has detailed docs
......@@ -413,27 +440,48 @@ bool Definition::hasDocumentation() const
Config_getBool("EXTRACT_ALL"); // extract everything
}
void Definition::addSourceReference(MemberDef *md)
void Definition::addSourceReferencedBy(MemberDef *md)
{
if (md)
{
QCString name=md->name();
QCString scope=md->getScopeString();
QCString name = md->name();
QCString scope = md->getScopeString();
if (!scope.isEmpty())
{
name.prepend(scope+"::");
}
if (m_sourceRefByDict==0)
{
m_sourceRefByDict = new MemberSDict;
}
if (m_sourceRefByDict->find(name)==0)
{
m_sourceRefByDict->inSort(name,md);
}
}
}
void Definition::addSourceReferences(MemberDef *md)
{
if (md)
{
QCString name = md->name();
QCString scope = md->getScopeString();
if (!scope.isEmpty())
{
name.prepend(scope+"::");
}
if (m_sourceRefList==0)
if (m_sourceRefsDict==0)
{
m_sourceRefDict = new MemberDict(53);
m_sourceRefList = new MemberList;
m_sourceRefsDict = new MemberSDict;
}
if (m_sourceRefDict->find(name)==0)
if (m_sourceRefsDict->find(name)==0)
{
m_sourceRefDict->insert(name,md);
m_sourceRefList->inSort(md);
m_sourceRefsDict->inSort(name,md);
}
}
}
......@@ -475,3 +523,10 @@ QCString Definition::localName() const
return m_localName;
}
void Definition::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
m_startBodyLine=bls;
m_endBodyLine=ble;
}
......@@ -24,8 +24,9 @@
class FileDef;
class OutputList;
class SectionDict;
class MemberList;
class MemberDict;
//class MemberList;
//class MemberDict;
class MemberSDict;
class MemberDef;
/*! The common base class of all entity definitions found in the sources. */
......@@ -90,11 +91,7 @@ class Definition
void writeDocAnchorsToTagFile();
// source references
void setBodySegment(int bls,int ble)
{
m_startBodyLine=bls;
m_endBodyLine=ble;
}
void setBodySegment(int bls,int ble);
void setBodyDef(FileDef *fd) { m_bodyDef=fd; }
int getStartBodyLine() const { return m_startBodyLine; }
int getEndBodyLine() const { return m_endBodyLine; }
......@@ -102,7 +99,9 @@ class Definition
void writeSourceDef(OutputList &ol,const char *scopeName);
void writeInlineCode(OutputList &ol,const char *scopeName);
void writeSourceRefs(OutputList &ol,const char *scopeName);
void addSourceReference(MemberDef *d);
void writeSourceReffedBy(OutputList &ol,const char *scopeName);
void addSourceReferencedBy(MemberDef *d);
void addSourceReferences(MemberDef *d);
void setRefItems(int todoId,int testId,int bugId)
{
......@@ -141,14 +140,18 @@ class Definition
// in the future m_name should become m_localName
private:
void writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members);
//QCString m_qualifiedName; // name of the definition
QCString m_brief; // brief description
QCString m_doc; // detailed description
QCString m_ref; // reference to external documentation
SectionDict *m_sectionDict; // dictionary of all sections
MemberList *m_sourceRefList; // list of entities that refer to this
// entity in their definition
MemberDict *m_sourceRefDict;
//MemberList *m_sourceRefList; // list of entities that refer to this
// // entity in their definition
//MemberDict *m_sourceRefDict;
MemberSDict *m_sourceRefByDict;
MemberSDict *m_sourceRefsDict;
int m_testId; // id for test list item
int m_todoId; // id for todo list item
int m_bugId; // id for bug list item
......
/*****************************************************************************
*
* $Id$
*
*
* Copyright (C) 1997-2001 by Dimitri van Heesch.
*
......@@ -632,7 +632,9 @@ static void forceEndItemList()
endBlock();
}
else
{
outDoc->endDescription();
}
break;
}
}
......@@ -1156,7 +1158,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"par"{B}* {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
if (/*t.contains('\n')>1 &&*/ insideItemList)
{
forceEndItemList();
}
......@@ -1496,7 +1498,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"param"{BSEP} {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
if (/*t.contains('\n')>1 &&*/ insideItemList)
{
forceEndItemList();
}
......@@ -1520,7 +1522,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"retval"{BSEP} {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
if (/*t.contains('\n')>1 &&*/ insideItemList)
{
forceEndItemList();
}
......@@ -1544,7 +1546,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}("exception"|"throw")s?{BSEP} {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
if (/*t.contains('\n')>1 &&*/ insideItemList)
{
forceEndItemList();
}
......@@ -1766,7 +1768,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocImage>[rR][tT][fF] {
BEGIN(DocRtfImageName);
}
<DocHtmlImageName>{FILE}|{URLMASK} {
<DocHtmlImageName>[^ \t\n]+ {
curImageName = findAndCopyImage(stripQuotes(yytext),IT_Html);
curImageCaption.resize(0);
if (curImageName.isEmpty())
......@@ -2390,6 +2392,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
insideArgumentList=FALSE;
outDoc->endItemList();
if (ib) endBlock();
}
else if (insideItemList)
{
......@@ -2405,9 +2408,9 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
outDoc->newParagraph();
}
}
if (ib) endBlock();
}
}
<DocScan>{BN}+/\n {
outDoc->writeChar(' ');
}
......@@ -2472,6 +2475,7 @@ void scanDoc(const char *s)
void internalParseDocument(const char *s)
{
if (s==0) return;
const char *oldInputString = inputString;
int oldInputPosition = inputPosition;
int oldRule = YY_START;
......
......@@ -4958,7 +4958,7 @@ static void addSourceReferences()
for (mni.toFirst();(md=mni.current());++mni)
{
NamespaceDef *nd=md->getNamespaceDef();
FileDef *fd=md->getBodyDef();
FileDef *fd=md->getFileDef();
GroupDef *gd=md->getGroupDef();
if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() &&
((nd && nd->isLinkableInProject()) ||
......@@ -6075,7 +6075,8 @@ static int readDir(QFileInfo *fi,
QStrList *exclPatList,
StringList *resultList,
StringDict *resultDict,
bool errorIfNotExist
bool errorIfNotExist,
bool recursive
)
{
QDir dir((const char *)fi->absFilePath());
......@@ -6126,13 +6127,14 @@ static int readDir(QFileInfo *fi,
if (resultList) resultList->append(rs);
if (resultDict) resultDict->insert(cfi->absFilePath(),rs);
}
else if (Config_getBool("RECURSIVE") &&
else if (recursive &&
cfi->isDir() && cfi->fileName()!="." &&
cfi->fileName()!="..")
{
cfi->setFile(cfi->absFilePath());
totalSize+=readDir(cfi,fnList,fnDict,exclDict,
patList,exclPatList,resultList,resultDict,errorIfNotExist);
patList,exclPatList,resultList,resultDict,errorIfNotExist,
recursive);
}
}
++it;
......@@ -6188,6 +6190,7 @@ static int readFileOrDirectory(const char *s,
QStrList *exclPatList,
StringList *resultList,
StringDict *resultDict,
bool recursive,
bool errorIfNotExist=TRUE
)
{
......@@ -6233,7 +6236,8 @@ static int readFileOrDirectory(const char *s,
}
else if (fi.isDir()) // readable dir
totalSize+=readDir(&fi,fnList,fnDict,exclDict,patList,
exclPatList,resultList,resultDict,errorIfNotExist);
exclPatList,resultList,resultDict,errorIfNotExist,
recursive);
}
}
return totalSize;
......@@ -6616,6 +6620,8 @@ void parseInput()
compoundKeywordDict.insert("interface",(void *)8);
compoundKeywordDict.insert("exception",(void *)8);
bool alwaysRecursive = Config_getBool("RECURSIVE");
/**************************************************************************
* Read and preprocess input *
**************************************************************************/
......@@ -6632,7 +6638,8 @@ void parseInput()
pl = Config_getList("FILE_PATTERNS");
}
readFileOrDirectory(s,0,Doxygen::includeNameDict,0,&pl,
&Config_getList("EXCLUDE_PATTERNS"),0,0);
&Config_getList("EXCLUDE_PATTERNS"),0,0,
alwaysRecursive);
s=includePathList.next();
}
......@@ -6643,7 +6650,8 @@ void parseInput()
{
readFileOrDirectory(s,0,Doxygen::exampleNameDict,0,
&Config_getList("EXAMPLE_PATTERNS"),
0,0,0);
0,0,0,
(alwaysRecursive || Config_getBool("EXAMPLE_RECURSIVE")));
s=examplePathList.next();
}
......@@ -6653,17 +6661,27 @@ void parseInput()
while (s)
{
readFileOrDirectory(s,0,Doxygen::imageNameDict,0,0,
0,0,0);
0,0,0,
alwaysRecursive);
s=imagePathList.next();
}
QDictIterator<FileName> fndi(*Doxygen::imageNameDict);
FileName *fn;
for (;(fn=fndi.current());++fndi)
{
printf("File Name %s\n",fn->fileName());
}
msg("Searching for dot files...\n");
QStrList &dotFileList=Config_getList("DOTFILE_DIRS");
s=dotFileList.first();
while (s)
{
readFileOrDirectory(s,0,Doxygen::dotFileNameDict,0,0,
0,0,0);
0,0,0,
alwaysRecursive);
s=dotFileList.next();
}
......@@ -6673,7 +6691,9 @@ void parseInput()
while (s)
{
readFileOrDirectory(s,0,0,0,&Config_getList("FILE_PATTERNS"),
0,0,&excludeNameDict,FALSE);
0,0,&excludeNameDict,
alwaysRecursive,
FALSE);
s=excludeList.next();
}
......@@ -6692,7 +6712,8 @@ void parseInput()
Doxygen::inputNameDict,&excludeNameDict,
&Config_getList("FILE_PATTERNS"),
&Config_getList("EXCLUDE_PATTERNS"),
&inputFiles,0);
&inputFiles,0,
alwaysRecursive);
s=inputList.next();
}
......
......@@ -637,13 +637,13 @@ void HtmlGenerator::writeFormula(const char *n,const char *text)
{
if (text && text[0]=='\\') t << "<p><center>" << endl;
t << "<img align=";
#if !defined(_WIN32)
t << "\"top\""; // assume Unix users use Netscape 4.x which does
// not seem to support align == "middle" :-((
#else
//#if !defined(_WIN32)
// t << "\"top\""; // assume Unix users use Netscape 4.x which does
// // not seem to support align == "middle" :-((
//#else
t << "\"middle\""; // assume Windows users use IE or HtmlHelp which only
// displays formulas nicely with align == "middle"
#endif
//#endif
t << " src=\"" << n << "\">" << endl;
if (text && text[0]=='\\') t << "</center><p>" << endl;
}
......
......@@ -2134,9 +2134,19 @@ void writePageIndex(OutputList &ol)
ftvHelp->incContentsDepth();
}
parseText(ol,theTranslator->trRelatedPagesDescription());
//ol.newParagraph();
ol.endTextBlock();
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
......@@ -2162,15 +2172,23 @@ void writePageIndex(OutputList &ol)
ol.docify(" [external]");
ol.endTypewriter();
}
//ol.writeStartAnnoItem("pages",pageName,0,pageTitle);
////ol.writeObjectLink(0,pageName,0,pageTitle);
//ol.writeEndAnnoItem(pageName);
ol.writeString("\n");
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pageTitle,pageName);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,pageName,0,pageTitle);
}
}
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
if (hasHtmlHelp)
{
htmlHelp->decContentsDepth();
......@@ -2273,7 +2291,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
htmlHelp->addContentsItem(isDir,gd->groupTitle(),gd->getOutputFileBase());
htmlHelp->incContentsDepth();
}
if(ftvHelp)
if (ftvHelp)
{
ftvHelp->addContentsItem(isDir,gd->getReference(),gd->getOutputFileBase(),
0,gd->groupTitle());
......
......@@ -199,6 +199,13 @@ void LatexGenerator::init()
<< "\tmakeindex refman.idx" << endl
<< "\techo \"Rerunning latex....\"" << endl
<< "\tlatex refman.tex" << endl
<< "\tlatex_count=5" << endl
<< "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\\" << endl
<< "\t do \\" << endl
<< "\t echo \"Rerunning latex....\" ;\\" << endl
<< "\t latex refman.tex ;\\" << endl
<< "\t latex_count=`expr $latex_count - 1` ;\\" << endl
<< "\t done" << endl << endl
<< "clean:" << endl
<< "\trm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out" << endl;
}
......@@ -1257,6 +1264,119 @@ void LatexGenerator::writeSectionRefItem(const char *,const char *lab,
// docifyStatic(t,str);
//}
/*!
* Function converts Latin2 character to latex strin] representin the same
* character.
*/
void LatexGenerator::latin2ToLatex(unsigned char c)
{
switch (c)
{
case 0xA1: t << c; break;
case 0xA2: t << c; break;
case 0xA3: t << c; break;
case 0xA4: t << c; break;
case 0xA5: t << c; break;
case 0xA6: t << "\\'{S}"; break;
case 0xA7: t << c; break;
case 0xA8: t << c; break;
case 0xA9: t << "\\v{S}"; break;
case 0xAA: t << "\\c{S}"; break;
case 0xAB: t << "\\v{T}"; break;
case 0xAC: t << "\\'{Z}"; break;
case 0xAD: t << c; break;
case 0xAE: t << "\\v{Z}"; break;
case 0xAF: t << "\\.{Z}"; break;
case 0xB0: t << c; break;
case 0xB1: t << c; break;
case 0xB2: t << c; break;
case 0xB3: t << c; break;
case 0xB4: t << c; break;
case 0xB5: t << c; break;
case 0xB6: t << "\\'{s}"; break;
case 0xB7: t << c; break;
case 0xB8: t << c; break;
case 0xB9: t << "\\v{s}"; break;
case 0xBA: t << "\\c{s}"; break;
case 0xBB: t << "\\v{t}"; break;
case 0xBC: t << "\\'{z}"; break;
case 0xBD: t << c; break;
case 0xBE: t << "\\v{z}"; break;
case 0xBF: t << "\\.{z}"; break;
case 0xC0: t << "\\'{R}"; break;
case 0xC1: t << "\\'{A}"; break;
case 0xC2: t << "\\^{A}"; break;
case 0xC3: t << "\\u{A}"; break;
case 0xC4: t << "\\\"{A}"; break;
case 0xC5: t << "\\'{L}"; break;
case 0xC6: t << "\\'{C}"; break;
case 0xC7: t << "\\c{C}"; break;
case 0xC8: t << "\\v{C}"; break;
case 0xC9: t << "\\'{E}"; break;
case 0xCA: t << "\\c{E}"; break;
case 0xCB: t << "\\\"{E}"; break;
case 0xCC: t << "\\v{E}"; break;
case 0xCD: t << "\\'{I}"; break;
case 0xCE: t << "\\^{I}"; break;
case 0xCF: t << "\\v{D}"; break;
case 0xD0: t << "\\bar{D}"; break;
case 0xD1: t << "\\'{N}"; break;
case 0xD2: t << "\\v{N}"; break;
case 0xD3: t << "\\'{O}"; break;
case 0xD4: t << "\\^{O}"; break;
case 0xD5: t << "\\H{O}"; break;
case 0xD6: t << "\\\"{O}"; break;
case 0xD7: t << c; break;
case 0xD8: t << "\\v{R}"; break;
case 0xD9: t << c; break;
case 0xDA: t << "\\'{U}"; break;
case 0xDB: t << "\\H{U}"; break;
case 0xDC: t << "\\\"{U}"; break;
case 0xDD: t << "\\'{Y}"; break;
case 0xDE: t << "\\c{T}"; break;
case 0xDF: t << "\\ss"; break;
case 0xE0: t << "\\'{r}"; break;
case 0xE1: t << "\\'{a}"; break;
case 0xE2: t << "\\^{a}"; break;
case 0xE3: t << c; break;
case 0xE4: t << "\\\"{a}"; break;
case 0xE5: t << "\\'{l}"; break;
case 0xE6: t << "\\'{c}"; break;
case 0xE7: t << "\\c{c}"; break;
case 0xE8: t << "\\v{c}"; break;
case 0xE9: t << "\\'{e}"; break;
case 0xEA: t << c; break;
case 0xEB: t << "\\\"{e}"; break;
case 0xEC: t << "\\v{e}"; break;
case 0xED: t << "\\'{\\i}"; break;
case 0xEE: t << "\\^{\\i}"; break;
case 0xEF: t << "\\v{d}"; break;
case 0xF0: t << "\\bar{d}"; break;
case 0xF1: t << "\\'{n}"; break;
case 0xF2: t << "\\v{n}"; break;
case 0xF3: t << "\\'{o}"; break;
case 0xF4: t << "\\^{o}"; break;
case 0xF5: t << "\\H{o}"; break;
case 0xF6: t << "\\\"{o}"; break;
case 0xF7: t << c; break;
case 0xF8: t << "\\v{r}"; break;
case 0xF9: t << c; break;
case 0xFA: t << "\\'{u}"; break;
case 0xFB: t << "\\H{u}"; break;
case 0xFC: t << "\\\"{u}"; break;
case 0xFD: t << "\\'{y}"; break;
case 0xFE: t << c; break;
case 0xFF: t << c; break;
default: t << c;
}
}
//void LatexGenerator::docifyStatic(QTextStream &t,const char *str)
void LatexGenerator::docify(const char *str)
{
......@@ -1266,6 +1386,7 @@ void LatexGenerator::docify(const char *str)
static bool isRussian = theTranslator->idLanguage()=="russian";
static bool isUkrainian = theTranslator->idLanguage()=="ukrainian";
static bool isChinese = theTranslator->idLanguage()=="chinese";
static bool isLatin2 = theTranslator->idLanguageCharset()=="iso-8859-2";
if (str)
{
const unsigned char *p=(const unsigned char *)str;
......@@ -1360,6 +1481,19 @@ void LatexGenerator::docify(const char *str)
t << (char)c;
}
}
else if (isLatin2)
{
if (c>=128)
{
latin2ToLatex(c);
}
else
{
// see if we can insert an hyphenation hint
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
else // language is other than Czech, Russian or Japanese
{
switch(c)
......
......@@ -258,6 +258,7 @@ class LatexGenerator : public OutputGenerator
void endFontClass() {}
private:
void latin2ToLatex(unsigned char);
LatexGenerator(const LatexGenerator &);
LatexGenerator &operator=(const LatexGenerator &);
int col;
......
......@@ -1459,6 +1459,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// write reference to the source
writeSourceDef(ol,cname);
writeSourceRefs(ol,cname);
writeSourceReffedBy(ol,cname);
writeInlineCode(ol,cname);
ol.endIndent();
......
......@@ -44,7 +44,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
{
MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2;
return strcmp(c1->name(),c2->name());
return stricmp(c1->name(),c2->name());
}
/*! Count the number of members in this list that are visible in
......@@ -575,3 +575,12 @@ void MemberList::addListReferences(Definition *def)
}
}
//--------------------------------------------------------------------------
int MemberSDict::compareItems(GCI item1, GCI item2)
{
MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2;
return stricmp(c1->name(),c2->name());
}
......@@ -20,6 +20,8 @@
#include <qlist.h>
#include "memberdef.h"
#include "sortdict.h"
class GroupDef;
class MemberGroup;
class MemberGroupList;
......@@ -69,13 +71,22 @@ class MemberListIterator : public QListIterator<MemberDef>
{
public:
MemberListIterator(const QList<MemberDef> &list);
virtual ~MemberListIterator() {}
};
class MemberDict : public QDict<MemberDef>
{
public:
MemberDict(int size) : QDict<MemberDef>(size) {}
~MemberDict() {}
virtual ~MemberDict() {}
};
class MemberSDict : public SDict<MemberDef>
{
public:
MemberSDict(int size=17) : SDict<MemberDef>(size) {}
virtual ~MemberSDict() {}
int compareItems(GCI item1,GCI item2);
};
......
......@@ -581,6 +581,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x NSAliasName
%x NSAliasArg
%x PackageName
%x GetCallType
%%
......@@ -1629,7 +1630,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
*/
<ReadBody>[^\r\n{}"'/]* { current->program += yytext ; }
<ReadBody>"//".* { current->program += yytext ; }
<ReadBody>\"[^\r\n"]*\" { current->program += yytext ; }
<ReadBody>\" { current->program += yytext ;
pCopyQuotedString = &current->program;
lastStringContext=YY_START;
BEGIN( CopyString );
}
<ReadBody>"/*"{B}* { current->program += yytext ;
lastContext = ReadBody ;
BEGIN( Comment ) ;
......@@ -1919,6 +1924,32 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<FuncFuncType>. {
current->type += *yytext;
}
<FindMembers>"("/{BN}*{ID}{BN}*"*" { // for catching typedef void (__stdcall *f)() like definitions
if (current->type.left(7)=="typedef" && current->bodyLine==-1)
// the bodyLine check is to prevent this guard to be true more than once
{
current->bodyLine = yyLineNr;
BEGIN( GetCallType );
}
else if (!current->name.isEmpty()) // normal function
{
current->args = yytext;
current->bodyLine = yyLineNr;
currentArgumentContext = FuncQual;
fullArgString=current->args.copy();
copyArgString=&current->args;
BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n");
}
}
<GetCallType>{BN}*{ID}{BN}*"*" {
lineCount();
addType(current);
funcPtrType="(";
funcPtrType+=yytext;
roundCount=0;
BEGIN( FuncPtr );
}
<FindMembers>"(" {
if (!current->name.isEmpty())
{
......@@ -3905,7 +3936,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
current->doc+=yytext;
}
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,SkipSection>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
QCString *pValue=Doxygen::aliasDict[yytext+1];
if (pValue)
{
......
......@@ -986,6 +986,7 @@ void TagFileParser::buildLists(Entry *root)
for (;(argName=sli.current());++sli)
{
Argument *a = new Argument;
a->type = "class";
a->name = *argName;
al->append(a);
}
......
......@@ -355,6 +355,12 @@ class Translator
virtual QCString trAuthor(bool first_capital, bool singular) = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.2.11
//////////////////////////////////////////////////////////////////////////
virtual QCString trReferences() = 0;
};
#endif
......@@ -37,7 +37,6 @@ class TranslatorAdapterCVS : public Translator
vs += versionString; // the one from the version.cpp
return createUpdateNeededMessage(idLanguage(), vs);
}
//-----------------------------------------------------------------------
// The things below this line should go to the new
// TranslatorAdapter_1_2_x, as public methods. The things above
......@@ -45,19 +44,31 @@ class TranslatorAdapterCVS : public Translator
// The first five lines below should be uncommented, and the
// release number at the fifth of those lines should be set.
// class TranslatorAdapter_1_2_8 : public TranslatorAdapterCVS
// class TranslatorAdapter_1_2_x : public TranslatorAdapterCVS
// {
// public:
// virtual QCString updateNeededMessage()
// { return createUpdateNeededMessage(idLanguage(),"release 1.2.7"); }
// { return createUpdateNeededMessage(idLanguage(),"release 1.2.x"); }
// Put new adapter methods below...
//
};
class TranslatorAdapter_1_2_11 : public TranslatorAdapterCVS
{
public:
virtual QCString updateNeededMessage()
{ return createUpdateNeededMessage(idLanguage(),"release 1.2.11"); }
// Put new adapter methods below...
//
virtual QCString trReferences()
{ return english.trReferences(); }
};
class TranslatorAdapter_1_2_7 : public TranslatorAdapterCVS
class TranslatorAdapter_1_2_7 : public TranslatorAdapter_1_2_11
{
public:
virtual QCString updateNeededMessage()
......
......@@ -17,7 +17,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian: public Translator
class TranslatorBrazilian: public TranslatorAdapter_1_2_11
{
public:
......
......@@ -26,7 +26,7 @@
*/
#define CN_SPC
class TranslatorChinese : public Translator
class TranslatorChinese : public TranslatorAdapter_1_2_11
{
public:
/*! Used for identification of the language. The identification
......
......@@ -148,7 +148,7 @@
// probably slightly faster.
class TranslatorCzech : public Translator
class TranslatorCzech : public TranslatorAdapter_1_2_11
{
private:
/*! The decode() inline assumes the source written in the
......
......@@ -65,7 +65,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
class TranslatorGerman : public Translator
class TranslatorGerman : public TranslatorAdapter_1_2_11
{
public:
......
......@@ -1361,6 +1361,17 @@ class TranslatorEnglish : public Translator
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.11
//////////////////////////////////////////////////////////////////////////
/*! This text is put before the list of members referenced by a member
*/
virtual QCString trReferences()
{
return "References";
}
};
#endif
......@@ -23,7 +23,7 @@
#ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H
class TranslatorFrench : public Translator
class TranslatorFrench : public TranslatorAdapter_1_2_11
{
public:
QCString idLanguage()
......
......@@ -42,7 +42,7 @@
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator
class TranslatorCroatian : public TranslatorAdapter_1_2_11
{
private:
/*! to avoid macro redefinition from translator_cz.h */
......
......@@ -59,7 +59,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public Translator
class TranslatorItalian : public TranslatorAdapter_1_2_11
{
public:
......
......@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_NL_H
#define TRANSLATOR_NL_H
class TranslatorDutch : public Translator
class TranslatorDutch : public TranslatorAdapter_1_2_11
{
public:
QCString idLanguage()
......
......@@ -27,7 +27,7 @@
#ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H
class TranslatorPortuguese : public Translator
class TranslatorPortuguese : public TranslatorAdapter_1_2_11
{
public:
......
......@@ -50,7 +50,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
class TranslatorRussian : public Translator
class TranslatorRussian : public TranslatorAdapter_1_2_11
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -21,7 +21,7 @@
#define TRANSLATOR_SI_H
class TranslatorSlovene : public Translator
class TranslatorSlovene : public TranslatorAdapter_1_2_11
{
public:
QCString idLanguage()
......@@ -50,11 +50,11 @@ class TranslatorSlovene : public Translator
QCString trDetailedDescription()
{ return "Podroben opis"; }
QCString trMemberTypedefDocumentation()
{ return "Opis <code> uporabniko definiranih tipov (typedef) </code>"; }
{ return "Opis uporabniko definiranih tipov"; }
QCString trMemberEnumerationDocumentation()
{ return "Opis komponent <code> natevnih tipov </code>"; }
{ return "Opis komponent natevnih tipov"; }
QCString trEnumerationValueDocumentation()
{ return "Opis vrednosti <code> natevnih tipov (enum) </code> "; }
{ return "Opis vrednosti natevnih tipov (enum) "; }
QCString trMemberFunctionDocumentation()
{ return "Opis metod"; }
QCString trMemberDataDocumentation()
......@@ -231,7 +231,7 @@ class TranslatorSlovene : public Translator
QCString trParameters()
{ return "Parametri"; }
QCString trExceptions()
{ return "Prekinitve (Exceptions)"; }
{ return "Prekinitve"; }
QCString trGeneratedBy()
{ return "Izdelano s pomojo"; }
......@@ -240,7 +240,7 @@ class TranslatorSlovene : public Translator
//////////////////////////////////////////////////////////////////////////
QCString trNamespaceList()
{ return "seznam imenskih prostorov"; }
{ return "imenski prostori"; }
QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Seznam ";
......@@ -267,14 +267,14 @@ class TranslatorSlovene : public Translator
bool /*isTemplate*/)
// used as the title of the HTML page of a class/struct/union
{
QCString result="Opis ";
QCString result="";
switch(compType)
{
case ClassDef::Class: result+=" razreda "; break;
case ClassDef::Struct: result+=" strukture "; break;
case ClassDef::Union: result+=" unije "; break;
case ClassDef::Interface: result+=" vmesnika (interface) "; break;
case ClassDef::Exception: result+=" prekinitve (exception) "; break;
case ClassDef::Class: result+=" Razred "; break;
case ClassDef::Struct: result+=" Struktura "; break;
case ClassDef::Union: result+=" Mnoica "; break;
case ClassDef::Interface: result+=" IDL vmesnik "; break;
case ClassDef::Exception: result+=" IDL prekinitev "; break;
}
result += (QCString)clName;
......@@ -283,14 +283,14 @@ class TranslatorSlovene : public Translator
QCString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QCString result="Vsebina datoteke ";
QCString result="Datoteka ";
result+=fileName;
return result;
}
QCString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QCString result ="Opis imenskega prostora ";
QCString result ="Imenski prostor ";
result+=namespaceName;
return result;
......@@ -497,7 +497,8 @@ class TranslatorSlovene : public Translator
"direktno ali indirektno vkljuuje. Pravokotniki ponazarjajo datoteke, puice "
"predstavljajo relacije med njimi. "
"rn pravokotnik ponazarja datoteko "+fName+". Puice A->B ponazarjajo "
"usmerjeno relacijo \"A vkljuuje B\".";
"usmerjeno relacijo \"A vkljuuje B\"."
;
}
/*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation()
......
......@@ -23,7 +23,7 @@
#ifndef TRANSLATOR_SK_H
#define TRANSLATOR_SK_H
class TranslatorSlovak : public Translator
class TranslatorSlovak : public TranslatorAdapter_1_2_11
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_UA_H
#define TRANSLATOR_UA_H
class TranslatorUkrainian : public Translator
class TranslatorUkrainian : public TranslatorAdapter_1_2_11
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -3230,6 +3230,8 @@ QCString substituteTemplateArgumentsInString(
++formAli,actArg=actualArgs->next()
)
{
//printf("n=%s formArg->type=%s formArg->name=%s\n",
// n.data(),formArg->type.data(),formArg->name.data());
if (formArg->type=="class" || formArg->type=="typename")
{
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
......
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