Commit 69fbf29b authored by dimitri's avatar dimitri

Release-1.2.5-20010225

parent 863353b8
......@@ -100,7 +100,7 @@ HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
......
DOXYGEN Version 1.2.5-20010211
DOXYGEN Version 1.2.5-20010225
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (11 February 2001)
Dimitri van Heesch (25 February 2001)
DOCDIR = $(INSTALL)/share/doc/packages/doxygen
#all: src/version.cpp configgen doxywizard
# cd qtools ; $(MAKE)
......@@ -45,25 +46,26 @@ distclean: clean
-rm -f addon/xmlgen/Makefile addon/xmlgen/Makefile.xmlgen
-rm -f addon/xmlgen/*.o
install: doxywizard_install
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -d $(DOCDIR)
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin
cp -r doc $(INSTALL)/doc/doxygen
cp -r examples $(INSTALL)/doc/doxygen
echo "DOXYGEN = $(INSTALL)" > $(INSTALL)/doc/doxygen/doc/Makefile
echo "DOXYDOCS = .." >> $(INSTALL)/doc/doxygen/doc/Makefile
echo "VERSION = $(VERSION)" >> $(INSTALL)/doc/doxygen/doc/Makefile
cat doc/Makefile.in >> $(INSTALL)/doc/doxygen/doc/Makefile
cd $(INSTALL)/doc/doxygen/examples ; $(MAKE)
cd $(INSTALL)/doc/doxygen/doc ; $(MAKE)
rm -rf $(INSTALL)/doc/doxygen/doc
cd $(INSTALL)/doc/doxygen/latex ; $(MAKE)
cp $(INSTALL)/doc/doxygen/latex/doxygen_manual.pdf $(INSTALL)/doc/doxygen
cp $(INSTALL)/doc/doxygen/latex/doxygen_manual.ps $(INSTALL)/doc/doxygen
rm -rf $(INSTALL)/doc/doxygen/latex
cp -r doc $(DOCDIR)
cp -r examples $(DOCDIR)
echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile
echo "DOXYDOCS = .." >> $(DOCDIR)/doc/Makefile
echo "VERSION = $(VERSION)" >> $(DOCDIR)/doc/Makefile
cat doc/Makefile.in >> $(DOCDIR)/doc/Makefile
cd $(DOCDIR)/examples ; $(MAKE)
cd $(DOCDIR)/doc ; $(MAKE)
rm -rf $(DOCDIR)/doc
cd $(DOCDIR)/latex ; $(MAKE)
cp $(DOCDIR)/latex/doxygen_manual.pdf $(INSTALL)/doc/doxygen
cp $(DOCDIR)/latex/doxygen_manual.ps $(INSTALL)/doc/doxygen
rm -rf $(DOCDIR)/latex
docs: FORCE
cd examples ; $(MAKE)
......
DOXYGEN Version 1.2.5-20010211
DOXYGEN Version 1.2.5-20010225
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (11 February 2001)
Dimitri van Heesch (25 February 2001)
1.2.5-20010211
1.2.5-20010225
......@@ -27,6 +27,11 @@ extern void checkConfig();
extern void configStrToVal();
extern void substituteEnvironmentVars();
/*! \brief Namespace for configuration variables
*
* This struct acts as a namespace that holds the global static variables
* read from a user-supplied configuration file.
*/
struct Config
{
static void init();
......
......@@ -93,7 +93,7 @@ class ConfigOption
virtual void printHeader(QTextStream &t)
{
t << " static " << type << " " << varName
<< "; // " << shortDesc << endl;
<< "; /*!< " << shortDesc << " */" << endl;
}
virtual void printStatic(QTextStream &) {}
virtual void printConfig(QTextStream &t)
......@@ -1035,6 +1035,14 @@ void init()
"disable (NO) the test list. This list is created by putting \\test \n"
"commands in the documentation.\n"
);
ConfigBool::add( "generateBugList",
"GENERATE_BUGLIST",
"TRUE",
"do we want a bug list?",
"The GENERATE_BUGLIST tag can be used to enable (YES) or \n"
"disable (NO) the bug list. This list is created by putting \\bug \n"
"commands in the documentation.\n"
);
ConfigList::add( "aliasList",
"ALIASES",
"",
......@@ -1068,6 +1076,14 @@ void init()
"For instance some of the names that are used will be different. The list \n"
"of all members will be omitted, etc. \n"
);
ConfigBool::add( "showUsedFilesFlag",
"SHOW_USED_FILES",
"TRUE",
"do we show the list of used files for classes and structs?",
"Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n"
"at the bottom of the documentation of classes and structs. If set to YES the \n"
"list will mention the files that were used to generate the documentation. \n"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Messages","configuration options related to warning and progress messages");
//-----------------------------------------------------------------------------------------------
......@@ -1315,6 +1331,23 @@ void init()
"it should be included in the master .chm file (NO).\n"
);
addDependency("htmlHelpChiFlag","generateHtml");
ConfigBool::add( "htmlHelpTocFlag",
"BINARY_TOC",
"FALSE",
"should a binary table of contents be generated?",
"If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n"
"controls whether a binary table of contents is generated (YES) or a \n"
"normal table of contents (NO) in the .chm file.\n"
);
addDependency("htmlHelpTocFlag","generateHtml");
ConfigBool::add( "htmlHelpTocExpandFlag",
"TOC_EXPAND",
"FALSE",
"should module elements be displayed in the table of contents?",
"The TOC_EXPAND flag can be set YES to add extra items for group members \n"
"to the contents of the Html help documentation and to the tree view. \n"
);
addDependency("htmlHelpTocExpandFlag","generateHtml");
ConfigBool::add( "noIndexFlag",
"DISABLE_INDEX",
"FALSE",
......
......@@ -280,8 +280,12 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \fn
Indicates that a comment block contains documentation for a function
(either global or as a member of a class). This command is needed if a
comment block is \e not located before the function declaration
or definition. A full function declaration should be specified after the
comment block is \e not placed in front of the function declaration
or definition. If your comment block \e is in front of the function
declaration or definition this command can (and to avoid redundancy
should) be ommitted.
A full function declaration should be specified after the
\\fn command. The argument ends at the end of the line.
\par Example:
......
......@@ -71,6 +71,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_alphabetical_index ALPHABETICAL_INDEX
<li> \refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
<li> \refitem cfg_bin_abspath BIN_ABSPATH
<li> \refitem cfg_binary_toc BINARY_TOC
<li> \refitem cfg_brief_member_desc BRIEF_MEMBER_DESC
<li> \refitem cfg_case_sense_names CASE_SENSE_NAMES
<li> \refitem cfg_cgi_name CGI_NAME
......@@ -93,6 +94,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_example_patterns EXAMPLE_PATTERNS
<li> \refitem cfg_exclude EXCLUDE
<li> \refitem cfg_exclude_patterns EXCLUDE_PATTERNS
<li> \refitem cfg_expand_as_defined EXPAND_AS_PREDEFINED
<li> \refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF
<li> \refitem cfg_ext_doc_paths EXT_DOC_PATHS
<li> \refitem cfg_extra_packages EXTRA_PACKAGES
......@@ -100,7 +102,10 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_extract_private EXTRACT_PRIVATE
<li> \refitem cfg_extract_static EXTRACT_STATIC
<li> \refitem cfg_file_patterns FILE_PATTERNS
<li> \refitem cfg_filter_source_files FILTER_SOURCE_FILES
<li> \refitem cfg_full_path_names FULL_PATH_NAMES
<li> \refitem cfg_generate_buglist GENERATE_BUGLIST
<li> \refitem cfg_generate_chi GENERATE_CHI
<li> \refitem cfg_generate_html GENERATE_HTML
<li> \refitem cfg_generate_htmlhelp GENERATE_HTMLHELP
<li> \refitem cfg_generate_latex GENERATE_LATEX
......@@ -159,12 +164,14 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_search_includes SEARCH_INCLUDES
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_show_include_files SHOW_INCLUDE_FILES
<li> \refitem cfg_show_used_files SHOW_USED_FILES
<li> \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
<li> \refitem cfg_tab_size TAB_SIZE
<li> \refitem cfg_tagfiles TAGFILES
<li> \refitem cfg_toc_expand TOC_EXPAND
<li> \refitem cfg_treeview_width TREEVIEW_WIDTH
<li> \refitem cfg_verbatim_headers VERBATIM_HEADERS
<li> \refitem cfg_warn_format WARN_FORMAT
......@@ -430,6 +437,13 @@ followed by the descriptions of the tags grouped by category.
disable (NO) the test list. This list is created by
putting \ref cmdtest "\\test" commands in the documentation.
\anchor cfg_generate_buglist
<dt>\c GENERATE_BUGLIST <dd>
\addindex GENERATE_BUGLIST
The GENERATE_BUGLIST tag can be used to enable (YES) or
disable (NO) the bug list. This list is created by
putting \ref cmdbug "\\bug" commands in the documentation.
\anchor cfg_aliases
<dt>\c ALIASES <dd>
\addindex ALIASES
......@@ -465,6 +479,13 @@ followed by the descriptions of the tags grouped by category.
for C. For instance some of the names that are used will be different.
The list of all members will be omitted, etc.
\anchor cfg_show_used_files
<dt>\c SHOW_USED_FILES <dd>
\addindex SHOW_USED_FILES
Set the \c SHOW_USED_FILES tag to \c NO to disable the list of files generated
at the bottom of the documentation of classes and structs. If set to \c YES the
list will mention the files that were used to generate the documentation.
</dl>
\subsection messages_input Options related to warning and progress messages
......@@ -744,6 +765,27 @@ followed by the descriptions of the tags grouped by category.
(which basically renders \c doxysearch obsolete on Windows).
The HTML workshop also contains a viewer for compressed HTML files.
\anchor cfg_generate_chi
<dt>\c GENERATE_CHI <dd>
\addindex GENERATE_CHI
If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c GENERATE_CHI flag
controls if a separate .chi index file is generated (<code>YES</code>) or that
it should be included in the master .chm file (<code>NO</code>).
\anchor cfg_binary_toc
<dt>\c BINARY_TOC <dd>
\addindex BINARY_TOC
If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c BINARY_TOC flag
controls whether a binary table of contents is generated (<code>YES</code>) or a
normal table of contents (<code>NO</code>) in the .chm file.
\anchor cfg_toc_expand
<dt>\c TOC_EXPAND <dd>
\addindex TOC_EXPAND
The \c TOC_EXPAND flag can be set YES to add extra items for
group members to the table of contents of the Html help documentation
and to the tree view.
\anchor cfg_disable_index
<dt>\c DISABLE_INDEX <dd>
\addindex DISABLE_INDEX
......
......@@ -35,6 +35,33 @@ You should use the \\mainpage command inside a comment block like this:
*/
\endverbatim
<li><b>Help, some/all of the members of my class / file / namespace
are not documented?</b>
Check the following:
<ol>
<li>Is your class / file / namespace documented? If not, it will not
be extracted from the sources unless \c EXTRACT_ALL is set to \c YES
in the config file.
<li>Are the members private? If so, you must set \c EXTRACT_PRIVATE to \c YES
to make them appear in the documentation.
<li>Is there a function macro in your class that does not end with a
semicolon (e.g. MY_MACRO())? If so then you have to instruct
doxygen's preprocessor to remove it.
This typically boils down to the following settings in the config file:
\verbatim
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
PREDEFINED = MY_MACRO()=
\endverbatim
Please read the \ref preprocessing "preprocessing" section of the
manual for more information.
</ol>
<li><b>When I set EXTRACT_ALL to NO non of my functions are shown in the documentation.</b></li>
In order for global functions, variables, enums, typedefs, and defines
......@@ -64,10 +91,6 @@ around the blocks that should be hidden and put:
in the config file then all blocks should be skipped by Doxygen as long
as <code>PREPROCESSING = YES</code>.
<li><b>How can I make doxygen ignore nasty macro's? </b>
Look at section \ref preprocessing for the answer.
<li><b>How can I change what's after the <code>\#include</code> in the class documentation?</b>
You can document your class like
......@@ -145,15 +168,10 @@ The most important reason is too have a platform abstraction for most
Unices and Windows by means of the QFile, QFileInfo, QDir, QDate,
QTime and QIODevice classes.
Another reason is for the nice and bug free utility classes, like QList,
QDict, QString, QArray, QTextStream, QRegExp etc.
QDict, QString, QArray, QTextStream, QRegExp, QXML etc.
The GUI front-end doxywizard uses Qt for... well... the GUI!
<li><b>Can I use doxygen on my Java code?</b>
No, at the moment there is no support for Java. I suggest to
use Sun's JavaDoc instead.
<li><b>How can I exclude all test directories from my directory tree?</b>
Simply put an exclude pattern like this in the configuration file:
......
......@@ -172,6 +172,9 @@ Thanks go to:
Boris Bralo, Nickolay Semyonov, Richard Kim, Földvári György,
Grzegorz Kowal, and Wang Weihan
for providing translations into various languages.
<li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
me an ultra cool <a href="http://www.psion.com/revoplus>Revo plus</a>
organizer!
<li>many, many others for suggestions, patches and bug reports.
</ul>
*/
......
......@@ -148,11 +148,11 @@ Here is a list of the languages and their current maintainers:
Russian
</TD>
<TD>
Nickolay Semyonov
Andrey V. Stolyarov
</TD>
<TD>
<a href="mailto:snob@NOSPAM.int.spb.ru">
snob@NOSPAM.int.spb.ru</a>
<a href="mailto:crocodil@NOSPAM.croco.net">
crocodil@NOSPAM.croco.net</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
......@@ -246,7 +246,7 @@ Here is a list of the languages and their current maintainers:
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\
\hline
Russian & Nickolay Semyonov & {\tt snob@int.spb.ru} \\
Russian & Andrey V. Stolyarov & {\tt crocodil@croco.net} \\
\hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} \\
\hline
......
Name: doxygen
Version: 1.2.5-20010211
Version: 1.2.5-20010225
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -472,7 +472,8 @@ void ClassDef::insertMember(MemberDef *md)
}
MemberInfo *mi = new MemberInfo((MemberDef *)md,Public,Normal);
MemberInfo *mi = new MemberInfo((MemberDef *)md,
md->protection(),md->virtualness(),FALSE);
MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoDict)[md->name()]))
{
......@@ -1112,6 +1113,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write the list of used files (not for man pages)
ol.pushGeneratorState();
if (Config::showUsedFilesFlag)
{
ol.disable(OutputGenerator::Man);
ol.writeRuler();
parseText(ol,theTranslator->trGeneratedFromFiles(compType,files.count()==1));
......@@ -1154,6 +1158,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
file=files.next();
}
if (!first) ol.endItemList();
}
// write Author section (Man only)
ol.enable(OutputGenerator::Man);
......@@ -1204,14 +1209,18 @@ void ClassDef::writeMemberList(OutputList &ol)
ClassDef *cd=md->getClassDef();
// compute the protection level for this member
Protection protect=md->protection();
if (mi->prot==Protected) // inherited protection
Protection prot=md->protection();
if (mi->prot==Protected) // inherited protection: Protected
{
if (protect==Public) protect=Protected;
if (prot==Public) prot=Protected;
}
else if (mi->prot==Private) // inherited protection: Private
{
prot=Private;
}
//printf("Member %s of class %s mi->prot=%d prot=%d\n",
// md->name().data(),cd->name().data(),mi->prot,protect);
//printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
// name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);
Specifier virt=md->virtualness();
MemberDef *rmd=md->reimplements();
......@@ -1224,7 +1233,9 @@ void ClassDef::writeMemberList(OutputList &ol)
if (cd && !md->name().isEmpty() && md->name()[0]!='@' &&
(
md->isFriend() ||
(mi->prot!=Private && (protect!=Private || Config::extractPrivateFlag))
(/*mi->prot!=Private &&*/
(prot!=Private || Config::extractPrivateFlag)
)
)
)
{
......@@ -1280,7 +1291,7 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.writeString(")");
memberWritten=TRUE;
}
if ((protect!=Public || virt!=Normal ||
if ((prot!=Public || virt!=Normal ||
md->isFriend() || md->isRelated() || md->isExplicit() ||
md->isMutable() || (md->isInline() && Config::inlineInfoFlag) ||
md->isSignal() || md->isSlot() ||
......@@ -1299,8 +1310,8 @@ void ClassDef::writeMemberList(OutputList &ol)
sl.append("inline");
if (md->isExplicit()) sl.append("explicit");
if (md->isMutable()) sl.append("mutable");
if (protect==Protected) sl.append("protected");
else if (protect==Private) sl.append("private");
if (prot==Protected) sl.append("protected");
else if (prot==Private) sl.append("private");
if (virt==Virtual) sl.append("virtual");
else if (virt==Pure) sl.append("pure virtual");
if (md->isStatic()) sl.append("static");
......@@ -1500,11 +1511,9 @@ void ClassDef::mergeMembers()
for ( ; (bcd=bcli.current()) ; ++bcli )
{
ClassDef *bClass=bcd->classDef;
// merge the members of bClass with the onces from cd
// merge the members in the base class of this inheritance branch first
bClass->mergeMembers();
// the all member list of the branch until bClass is now complete
// so we can merge it with cd
MemberNameInfoList *srcMnl = bClass->memberNameInfoList();
MemberNameInfoDict *dstMnd = memberNameInfoDict();
......@@ -1602,7 +1611,7 @@ void ClassDef::mergeMembers()
{
Specifier virt=srcMi->virt;
if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi = new MemberInfo(srcMd,bcd->prot,virt);
MemberInfo *newMi = new MemberInfo(srcMd,bcd->prot,virt,TRUE);
newMi->scopePath=bClass->name()+"::"+srcMi->scopePath;
if (ambigue)
{
......@@ -1645,7 +1654,7 @@ void ClassDef::mergeMembers()
MemberInfo *mi;
for (;(mi=mnii.current());++mnii)
{
Protection prot = mi->memberDef->protection();
Protection prot = mi->prot;
if (bcd->prot==Protected)
{
if (prot==Public) prot=Protected;
......@@ -1655,15 +1664,15 @@ void ClassDef::mergeMembers()
prot=Private;
}
//printf("%s::%s: prot=%d bcd->prot=%d result=%d\n",
// name().data(),mi->memberDef->name().data(),mi->memberDef->protection(),
// name().data(),mi->memberDef->name().data(),mi->prot,
// bcd->prot,prot);
if (prot!=Private)
if (mi->prot!=Private)
{
Specifier virt=mi->virt;
if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt);
MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt,TRUE);
newMi->scopePath=bClass->name()+"::"+mi->scopePath;
newMi->ambigClass=mi->ambigClass;
newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy();
......
......@@ -23,9 +23,11 @@
class OutputDocInterface;
class FileDef;
class MemberDef;
extern void parseCode(OutputDocInterface &,const char *,const QCString &,
bool ,const char *,FileDef *fd=0,
int startLine=-1,int endLine=-1,bool inlineFragment=FALSE);
extern void initParseCodeContext();
extern void setParameterList(MemberDef *md);
#endif
......@@ -379,6 +379,30 @@ static void addParameter()
}
}
void setParameterList(MemberDef *md)
{
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
ArgumentList *al = md->argumentList();
if (al==0) return;
Argument *a = al->first();
while (a)
{
g_parmName = a->name.copy();
g_parmType = a->type.copy();
int i = g_parmType.find('*');
if (i!=-1)
g_parmType = g_parmType.left(i);
i = g_parmType.find('&');
if (i!=-1)
g_parmType = g_parmType.left(i);
if (g_parmType.left(6)=="const ")
g_parmType = g_parmType.right(g_parmType.length()-6);
g_parmType=g_parmType.stripWhiteSpace();
addParameter();
a = al->next();
}
}
static void generateClassLink(OutputDocInterface &ol,char *clName,int *clNameLen=0)
{
int i=0;
......@@ -1032,9 +1056,9 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
while (e>=0 && (text.at(e)==')' || isspace(yytext[e]))) e--;
QCString varname = text.mid(s+1,e-s);
QCString tmp=varname.copy();
g_code->docify(text.left(s+1));
g_code->codify(text.left(s+1));
generateClassLink(*g_code,tmp.data());
g_code->docify(text.right(yyleng-e-1));
g_code->codify(text.right(yyleng-e-1));
addType();
g_name+=varname;
}
......@@ -1046,7 +1070,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_name+=yytext;
BEGIN( FuncCall );
}
<FuncCall,Body,MemberCall>\" {
<FuncCall,Body,MemberCall,MemberCall2>\" {
startFontClass("stringliteral");
g_code->codify(yytext);
g_lastStringContext=YY_START;
......
This diff is collapsed.
/* This file was generated by configgen on Thu Feb 8 22:26:39 2001
/* This file was generated by configgen on Sun Feb 25 14:30:18 2001
* from config_templ.l
*
* DO NOT EDIT!
......@@ -106,9 +106,11 @@ int Config::tabSize = 8;
QStrList Config::sectionFilterList;
bool Config::generateTodoList = TRUE;
bool Config::generateTestList = TRUE;
bool Config::generateBugList = TRUE;
QStrList Config::aliasList;
int Config::maxInitLines = 30;
bool Config::optimizeForCFlag = FALSE;
bool Config::showUsedFilesFlag = TRUE;
bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE;
bool Config::warningUndocFlag = TRUE;
......@@ -135,6 +137,8 @@ QCString Config::htmlStyleSheet;
bool Config::htmlAlignMemberFlag = TRUE;
bool Config::htmlHelpFlag = FALSE;
bool Config::htmlHelpChiFlag = FALSE;
bool Config::htmlHelpTocFlag = FALSE;
bool Config::htmlHelpTocExpandFlag = FALSE;
bool Config::noIndexFlag = FALSE;
int Config::enumValuesPerLine = 4;
bool Config::ftvHelpFlag = FALSE;
......@@ -381,10 +385,12 @@ static void readIncludeFile(const char *incName)
<Start>"ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; }
<Start>"GENERATE_TODOLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTodoList; }
<Start>"GENERATE_TESTLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTestList; }
<Start>"GENERATE_BUGLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateBugList; }
<Start>"ALIASES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::aliasList; l->clear(); elemStr=""; }
<Start>"ALIASES"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::aliasList; elemStr=""; }
<Start>"MAX_INITIALIZER_LINES"[ \t]*"=" { BEGIN(GetString); s=&maxInitLinesString; s->resize(0); }
<Start>"OPTIMIZE_OUTPUT_FOR_C"[ \t]*"=" { BEGIN(GetBool); b=&Config::optimizeForCFlag; }
<Start>"SHOW_USED_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showUsedFilesFlag; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; }
......@@ -419,6 +425,8 @@ static void readIncludeFile(const char *incName)
<Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
<Start>"GENERATE_CHI"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpChiFlag; }
<Start>"BINARY_TOC"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpTocFlag; }
<Start>"TOC_EXPAND"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpTocExpandFlag; }
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"ENUM_VALUES_PER_LINE"[ \t]*"=" { BEGIN(GetString); s=&enumValuesPerLineString; s->resize(0); }
<Start>"GENERATE_TREEVIEW"[ \t]*"=" { BEGIN(GetBool); b=&Config::ftvHelpFlag; }
......@@ -627,6 +635,7 @@ void dumpConfig()
}
printf("generateTodoList=`%d'\n",Config::generateTodoList);
printf("generateTestList=`%d'\n",Config::generateTestList);
printf("generateBugList=`%d'\n",Config::generateBugList);
{
char *is=Config::aliasList.first();
while (is)
......@@ -637,6 +646,7 @@ void dumpConfig()
}
printf("maxInitLines=`%d'\n",Config::maxInitLines);
printf("optimizeForCFlag=`%d'\n",Config::optimizeForCFlag);
printf("showUsedFilesFlag=`%d'\n",Config::showUsedFilesFlag);
printf("# configuration options related to warning and progress messages\n");
printf("quietFlag=`%d'\n",Config::quietFlag);
printf("warningFlag=`%d'\n",Config::warningFlag);
......@@ -723,6 +733,8 @@ void dumpConfig()
printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag);
printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag);
printf("htmlHelpChiFlag=`%d'\n",Config::htmlHelpChiFlag);
printf("htmlHelpTocFlag=`%d'\n",Config::htmlHelpTocFlag);
printf("htmlHelpTocExpandFlag=`%d'\n",Config::htmlHelpTocExpandFlag);
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("enumValuesPerLine=`%d'\n",Config::enumValuesPerLine);
printf("ftvHelpFlag=`%d'\n",Config::ftvHelpFlag);
......@@ -866,9 +878,11 @@ void Config::init()
Config::sectionFilterList.clear();
Config::generateTodoList = TRUE;
Config::generateTestList = TRUE;
Config::generateBugList = TRUE;
Config::aliasList.clear();
Config::maxInitLines = 30;
Config::optimizeForCFlag = FALSE;
Config::showUsedFilesFlag = TRUE;
Config::quietFlag = FALSE;
Config::warningFlag = TRUE;
Config::warningUndocFlag = TRUE;
......@@ -895,6 +909,8 @@ void Config::init()
Config::htmlAlignMemberFlag = TRUE;
Config::htmlHelpFlag = FALSE;
Config::htmlHelpChiFlag = FALSE;
Config::htmlHelpTocFlag = FALSE;
Config::htmlHelpTocExpandFlag = FALSE;
Config::noIndexFlag = FALSE;
Config::enumValuesPerLine = 4;
Config::ftvHelpFlag = FALSE;
......@@ -1381,6 +1397,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::generateTestList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The GENERATE_BUGLIST tag can be used to enable (YES) or \n";
t << "# disable (NO) the bug list. This list is created by putting \\bug \n";
t << "# commands in the documentation.\n";
t << "\n";
}
t << "GENERATE_BUGLIST = ";
writeBoolValue(t,Config::generateBugList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# This tag can be used to specify a number of aliases that acts \n";
......@@ -1422,6 +1449,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::optimizeForCFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n";
t << "# at the bottom of the documentation of classes and structs. If set to YES the \n";
t << "# list will mention the files that were used to generate the documentation. \n";
t << "\n";
}
t << "SHOW_USED_FILES = ";
writeBoolValue(t,Config::showUsedFilesFlag);
t << "\n";
if (!sl)
{
t << "\n";
}
......@@ -1744,6 +1782,27 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::htmlHelpChiFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n";
t << "# controls whether a binary table of contents is generated (YES) or a \n";
t << "# normal table of contents (NO) in the .chm file.\n";
t << "\n";
}
t << "BINARY_TOC = ";
writeBoolValue(t,Config::htmlHelpTocFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The TOC_EXPAND flag can be set YES to add extra items for group members \n";
t << "# to the contents of the Html help documentation and to the tree view. \n";
t << "\n";
}
t << "TOC_EXPAND = ";
writeBoolValue(t,Config::htmlHelpTocExpandFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n";
......
......@@ -42,6 +42,7 @@ Definition::Definition(const char *df,int dl,
sourceRefDict=0;
m_todoId=0;
m_testId=0;
m_bugId=0;
}
Definition::~Definition()
......@@ -356,6 +357,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
{
initParseCodeContext();
//printf("Read:\n`%s'\n\n",codeFragment.data());
if (definitionType()==TypeMember) setParameterList((MemberDef *)this);
ol.startCodeFragment();
parseCode(ol,scopeName,codeFragment,FALSE,0,
bodyDef,actualStart,actualEnd,TRUE);
......
......@@ -110,13 +110,15 @@ class Definition
void writeSourceRefs(OutputList &ol,const char *scopeName);
void addSourceReference(MemberDef *d);
void setRefItems(int todoId,int testId)
void setRefItems(int todoId,int testId,int bugId)
{
if (todoId!=0) m_todoId=todoId;
if (testId!=0) m_testId=testId;
if (bugId!=0) m_bugId=bugId;
}
int todoId() const { return m_todoId; }
int testId() const { return m_testId; }
int bugId() const { return m_bugId; }
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return defFileName; }
......@@ -141,8 +143,9 @@ class Definition
MemberList *sourceRefList; // list of entities that refer to this
// entity in their definition
MemberDict *sourceRefDict;
int m_testId; // id for test case
int m_todoId; // id for todo case
int m_testId; // id for test list item
int m_todoId; // id for todo list item
int m_bugId; // id for bug list item
};
......
......@@ -1120,6 +1120,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->writeDescItem();
}
}
/*
<DocScan>{CMD}"bug"[s]?{BN}+ {
endArgumentList();
if (!inBugBlock)
......@@ -1139,6 +1140,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->writeDescItem();
}
}
*/
<DocScan>{CMD}"note"[s]?{BN}+ {
endArgumentList();
if (!inNoteBlock)
......@@ -1316,6 +1318,28 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
currentListIndent.pop();
}
}
<DocScan>"\\bug "[0-9]+ { // this tag is generated in an earlier pass
if (Config::generateBugList)
{
QCString numStr=yytext;
numStr=numStr.right(numStr.length()-5);
bool ok; int num = numStr.toUInt(&ok);
RefItem *item = bugList.getRefItem(num);
ASSERT(item!=0);
endArgumentList();
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList();
outDoc->startBold();
outDoc->writeObjectLink(0,"bug",item->listAnchor,theTranslator->trBug()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
outDoc->endDescList();
currentListIndent.pop();
}
}
<DocScan>{CMD}"deprecated"{BN}+ {
endArgumentList();
if (!inDeprecatedBlock)
......
This diff is collapsed.
......@@ -15,7 +15,7 @@
# TMake project file for doxygen
TEMPLATE = app.t
CONFIG = console warn_on $extraopt
CONFIG = console warn_on $extraopts
HEADERS = doxygen.h
SOURCES = main.cpp
unix:LIBS += -L../lib -ldoxygen -lqtools
......
......@@ -76,6 +76,7 @@ Entry::Entry(const Entry &e)
initLines = e.initLines;
todoId = e.todoId;
testId = e.testId;
bugId = e.bugId;
tagInfo = e.tagInfo;
sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE);
......@@ -223,6 +224,7 @@ void Entry::reset()
mGrpId = -1;
todoId = 0;
testId = 0;
bugId = 0;
section = EMPTY_SEC;
mtype = Method;
virt = Normal;
......
......@@ -25,14 +25,21 @@ enum Protection { Public, Protected, Private } ;
enum Specifier { Normal, Virtual, Pure } ;
enum MethodTypes { Method, Signal, Slot, DCOP, Property };
/*! \brief This class stores information about an inheritance relation
*/
struct BaseInfo
{
/*! Creates an object representing an inheritance relation */
BaseInfo(const char *n,Protection p,Specifier v) : name(n),prot(p),virt(v) {}
QCString name; // the name of the base class
Protection prot; // inheritance type
Specifier virt; // virtualness
QCString name; //!< the name of the base class
Protection prot; //!< inheritance type
Specifier virt; //!< virtualness
};
/*! \brief This class contains the information about the argument of a
* function or template
*
*/
struct Argument
{
/*! Construct a new argument. */
......@@ -77,22 +84,36 @@ struct Argument
QCString docs; /*!< Argument's documentation (may be empty) */
};
/*! \brief This class represents an function or template argument list.
*
* This class also stores some information about member that is typically
* put after the argument list, such as wether the member is const,
* volatile or pure virtual.
*/
class ArgumentList : public QList<Argument>
{
public:
~ArgumentList() {}
/*! Creates an empty argument list */
ArgumentList() : QList<Argument>(),
constSpecifier(FALSE),
volatileSpecifier(FALSE),
pureSpecifier(FALSE) {}
/*! Destroys the argument list */
~ArgumentList() {}
bool hasDocumentation() const;
/*! Does the member modify the state of the class? default: FALSE. */
bool constSpecifier;
/*! Is the member volatile? default: FALSE. */
bool volatileSpecifier;
/*! Is this a pure virtual member? default: FALSE */
bool pureSpecifier;
};
typedef QListIterator<Argument> ArgumentListIterator;
/*! \brief This struct is used to capture the tag file information
* for an Entry.
*/
struct TagInfo
{
QCString tagName;
......@@ -100,7 +121,10 @@ struct TagInfo
QCString anchor;
};
/*! Raw entry. parseMain() in scanner.l will generate a tree of these
/*! \brief Represents an unstructured piece of information, about an
* entity found in the sources.
*
* parseMain() in scanner.l will generate a tree of these
* entries.
*/
class Entry
......@@ -166,7 +190,11 @@ class Entry
~Entry();
int getSize();
/*! Adds entry \e as a child to this entry */
void addSubEntry (Entry* e) ;
/*! Restore the state of this Entry to the default value it has
* at construction time.
*/
void reset();
int section; //!< entry type (see Sections);
......@@ -207,8 +235,9 @@ class Entry
QList<QCString> *anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source
int todoId; //!< id of the todo item of this entry
int testId; //!< id of the test item of this entry
int todoId; //!< id of the todo list item of this entry
int testId; //!< id of the test list item of this entry
int bugId; //!< id of the bug list item of this entry
TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries
private:
......
......@@ -18,6 +18,7 @@
#include "config.h"
#include "message.h"
#include "doxygen.h"
#include "language.h"
const char treeview_data[]=
......@@ -273,7 +274,10 @@ static void generateFolderTreeViewData()
else
{
QTextStream t(&f);
t << "<html><head><title>";
t << "<html><head>";
t << "<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
<< theTranslator->idLanguageCharset() << "\">\n";
t << "<title>";
if (Config::projectName.isEmpty())
{
t << "Doxygen Documentation";
......
......@@ -175,12 +175,12 @@ void GroupDef::insertMember(MemberDef *md)
return; // member already added
}
}
mni->append(new MemberInfo(md,Public,Normal));
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
}
else
{
mni = new MemberNameInfo(md->name());
mni->append(new MemberInfo(md,Public,Normal));
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
allMemberNameInfoDict->insert(mni->memberName(),mni);
}
allMemberList->append(md);
......@@ -262,7 +262,7 @@ void GroupDef::computeAnchors()
void GroupDef::writeDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
//ol.disable(OutputGenerator::Man);
startFile(ol,fileName,title);
startTitle(ol,getOutputFileBase());
ol.docify(title);
......
......@@ -275,11 +275,18 @@ void HtmlGenerator::writeStyleInfo(int part)
else // write user defined style sheet
{
QFileInfo cssfi(Config::htmlStyleSheet);
if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable())
{
err("Error: style sheet %s does not exist or is not readable!", Config::htmlStyleSheet.data());
}
else
{
startPlainFile(cssfi.fileName());
t << fileToString(Config::htmlStyleSheet);
endPlainFile();
}
}
}
}
void HtmlGenerator::startDoxyAnchor(const char *,
......
......@@ -305,8 +305,8 @@ void HtmlHelp::createProjectFile()
"Contents file=index.hhc\n"
"Default Window=main\n"
"Default topic=" << indexName << "\n"
"Index file=index.hhk\n"
"Binary TOC=YES\n";
"Index file=index.hhk\n";
if (Config::htmlHelpTocFlag) t << "Binary TOC=YES\n";
if (Config::htmlHelpChiFlag) t << "Create CHI file=YES\n";
t << "Title=" << Config::projectName << endl << endl;
......@@ -388,6 +388,13 @@ void HtmlHelp::addContentsItem(bool isDir,
const char *name,const char *ref,
const char *anchor)
{
// If we're using a binary toc then folders cannot have links.
if(Config::htmlHelpTocFlag && isDir)
{
ref = 0;
anchor = 0;
}
int i; for (i=0;i<dc;i++) cts << " ";
cts << "<LI><OBJECT type=\"text/sitemap\">";
cts << "<param name=\"Name\" value=\"" << name << "\">";
......
......@@ -408,7 +408,6 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
}
#if 0
//----------------------------------------------------------------------------
/*! Generates HTML Help tree of classes */
......@@ -416,8 +415,8 @@ void writeClassTree(BaseClassList *cl)
{
HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0;
bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag && Config::htmlHelpGroupsOnly;
bool hasFtvHelp = Config::generateHtml && Config::ftvHelpFlag && Config::htmlHelpGroupsOnly;
bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag;
bool hasFtvHelp = Config::generateHtml && Config::ftvHelpFlag;
if (hasHtmlHelp)
{
htmlHelp = HtmlHelp::getInstance();
......@@ -448,7 +447,7 @@ void writeClassTree(BaseClassList *cl)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),cd->getOutputFileBase());
ftvHelp->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
}
if (hasChildren)
......@@ -472,8 +471,8 @@ void writeClassTree(ClassList *cl)
{
HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0;
bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag && Config::htmlHelpGroupsOnly;
bool hasFtvHelp = Config::generateHtml && Config::ftvHelpFlag && Config::htmlHelpGroupsOnly;
bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag;
bool hasFtvHelp = Config::generateHtml && Config::ftvHelpFlag;
if (hasHtmlHelp)
{
htmlHelp = HtmlHelp::getInstance();
......@@ -513,7 +512,6 @@ void writeClassTree(ClassList *cl)
}
}
}
#endif
//----------------------------------------------------------------------------
......@@ -1937,13 +1935,13 @@ void writeExampleIndex(OutputList &ol)
{
ol.writeObjectLink(0,n,0,pi->title);
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pi->title,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,n,0,pi->title);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,pi->getReference(),n,0,pi->title);
}
else
{
ol.writeObjectLink(0,n,0,pi->name);
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pi->name,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,n,0,pi->name);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,pi->getReference(),n,0,pi->name);
}
ol.writeString("\n");
}
......@@ -2207,85 +2205,192 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd)
ol.endIndexList();
}
#if 0
if (Config::htmlHelpTocExpandFlag)
{
// write members
struct MemInfo
{
MemberList *list;
QCString name;
};
MemInfo memberLists[] =
{
{ &gd->defineMembers, theTranslator->trDefines() },
{ &gd->typedefMembers, theTranslator->trTypedefs() },
{ &gd->enumMembers, theTranslator->trEnumerations() },
{ &gd->enumValMembers, theTranslator->trEnumerationValues() },
{ &gd->funcMembers, theTranslator->trFunctions() },
{ &gd->varMembers, theTranslator->trVariables() },
{ &gd->protoMembers, theTranslator->trFuncProtos() },
{ 0,0 }
};
MemberList *members;
MemInfo *pMemInfo;
for (pMemInfo=&memberLists[0]; (members=pMemInfo->list) ; pMemInfo++)
{
if (members->count()>0)
{
if(htmlHelp)
{
htmlHelp->addContentsItem(TRUE, convertToHtml(pMemInfo->name), gd->getOutputFileBase(),0);
htmlHelp->incContentsDepth();
}
if(ftvHelp)
{
ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, pMemInfo->name);
ftvHelp->incContentsDepth();
}
MemberDef *md=members->first();
while (md)
{
GroupDef *gd=md->getGroupDef();
if(htmlHelp)
{
htmlHelp->addContentsItem(FALSE,md->name(),gd->getOutputFileBase(),md->anchor());
}
if(ftvHelp)
{
ftvHelp->addContentsItem(FALSE,gd->getReference(),gd->getOutputFileBase(),md->anchor(),md->name());
}
md=members->next();
}
if(htmlHelp) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth();
}
}
// write namespaces
NamespaceList *namespaceList=gd->namespaceList;
if (namespaceList->count()>0)
{
if(htmlHelp)
{
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trNamespaces()), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth();
}
if(ftvHelp)
{
ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, theTranslator->trNamespaces());
ftvHelp->incContentsDepth();
}
NamespaceDef *nsd=namespaceList->first();
while (nsd)
{
if(htmlHelp)
htmlHelp->addContentsItem(FALSE,convertToHtml(nsd->name()).data(),nsd->getOutputFileBase());
{
htmlHelp->addContentsItem(FALSE, convertToHtml(nsd->name()), nsd->getOutputFileBase());
}
if(ftvHelp)
ftvHelp->addContentsItem(FALSE,convertToHtml(nsd->name()).data(),nsd->getOutputFileBase());
{
ftvHelp->addContentsItem(FALSE, nsd->getReference(), nsd->getOutputFileBase(), 0, convertToHtml(nsd->name()));
}
nsd=namespaceList->next();
}
if (htmlHelp) htmlHelp->decContentsDepth();
if (ftvHelp) ftvHelp->decContentsDepth();
}
// write classes
writeClassTree(gd->classList);
// write members
MemberList memberLists[7] = {
gd->defineMembers,
gd->typedefMembers,
gd->enumMembers,
gd->enumValMembers,
gd->funcMembers,
gd->varMembers,
gd->protoMembers
};
MemberList members;
for (int i=0;i<7;i++)
{
members=memberLists[i];
if (members.count()>0)
{
MemberDef *md=members.first();
while (md)
if(gd->classList->count()>0)
{
if(htmlHelp)
htmlHelp->addContentsItem(FALSE,md->name(),md->getGroupDef()->getOutputFileBase().data(),md->anchor());
if(ftvHelp)
ftvHelp->addContentsItem(FALSE,md->name(),md->getGroupDef()->getOutputFileBase().data(),md->anchor());
md=members.next();
{
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trClasses()), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth();
}
if(ftvHelp)
{
ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, theTranslator->trClasses());
ftvHelp->incContentsDepth();
}
writeClassTree(gd->classList);
if(htmlHelp) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth();
}
// write file list
FileList *fileList=gd->fileList;
if (fileList->count()>0)
{
if(htmlHelp)
{
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trFiles()), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth();
}
if(ftvHelp)
{
ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, theTranslator->trFiles());
ftvHelp->incContentsDepth();
}
FileDef *fd=fileList->first();
while (fd)
{
if(htmlHelp)
htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name()),fd->getOutputFileBase().data());
htmlHelp->addContentsItem(FALSE,convertToHtml(fd->name()),fd->getOutputFileBase());
if(ftvHelp)
ftvHelp->addContentsItem(FALSE,convertToHtml(fd->name()),fd->getOutputFileBase().data());
ftvHelp->addContentsItem(FALSE, fd->getReference(), fd->getOutputFileBase(), 0, convertToHtml(fd->name()));
fd=fileList->next();
}
if(htmlHelp)
htmlHelp->decContentsDepth();
if(ftvHelp)
ftvHelp->decContentsDepth();
}
// write examples
PageSDictIterator eli(*(gd->exampleDict));
if (gd->exampleDict->count()>0)
{
if(htmlHelp)
{
htmlHelp->addContentsItem(TRUE, convertToHtml(theTranslator->trExamples()), gd->getOutputFileBase(), 0);
htmlHelp->incContentsDepth();
}
if(ftvHelp)
{
ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, theTranslator->trExamples());
ftvHelp->incContentsDepth();
}
PageSDictIterator eli(*(gd->exampleDict));
PageInfo *pi=eli.toFirst();
while (pi)
{
if(htmlHelp)
{
htmlHelp->addContentsItem(FALSE,convertToHtml(pi->name),convertNameToFile(pi->name)+"-example");
}
if(ftvHelp)
ftvHelp->addContentsItem(FALSE,convertToHtml(pi->name),convertNameToFile(pi->name)+"-example");
{
ftvHelp->addContentsItem(FALSE,pi->getReference(),convertToHtml(pi->name)+"-example",0,convertNameToFile(pi->name));
}
pi=++eli;
}
if (htmlHelp) htmlHelp->decContentsDepth();
if (ftvHelp) ftvHelp->decContentsDepth();
}
}
#endif
if(htmlHelp) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth();
if (htmlHelp) htmlHelp->decContentsDepth();
if (ftvHelp) ftvHelp->decContentsDepth();
gd->visited=TRUE;
}
}
......
......@@ -126,6 +126,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorChinese;
}
else if (L_EQUAL("norwegian"))
{
theTranslator=new TranslatorNorwegian;
}
#endif
else // use the default language (i.e. english)
{
......
......@@ -15,7 +15,7 @@
# TMake project file for doxygen
TEMPLATE = libdoxygen.t
CONFIG = console warn_on staticlib
CONFIG = console warn_on staticlib $extraopts
HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \
membername.h index.h memberlist.h definition.h \
entry.h logos.h instdox.h message.h code.h \
......
......@@ -95,6 +95,10 @@ void ManGenerator::startFile(const char *name,const char *,bool)
{
fileName=fileName.right(fileName.length()-10);
}
else if (fileName.left(6)=="group_")
{
fileName=fileName.right(fileName.length()-6);
}
int i;
if ((i=fileName.findRev('.'))!=-1)
......@@ -102,7 +106,9 @@ void ManGenerator::startFile(const char *name,const char *,bool)
fileName=fileName.left(i);
}
if (convertToQCString(fileName.right(2))!=Config::manExtension)
{
fileName+=Config::manExtension;
}
startPlainFile(fileName);
firstCol=TRUE;
}
......@@ -114,7 +120,7 @@ void ManGenerator::endFile()
void ManGenerator::endTitleHead(const char *,const char *name)
{
t << ".TH " << name << " 3 \"" << dateToString(FALSE) << "\" \"";
t << ".TH \"" << name << "\" 3 \"" << dateToString(FALSE) << "\" \"";
if (Config::projectName.isEmpty())
t << "Doxygen";
else
......
......@@ -199,7 +199,7 @@ class ManGenerator : public OutputGenerator
void endDescTable() {}
void startDescTableTitle() { writeListItem(); startBold(); }
void endDescTableTitle() { endBold(); }
void startDescTableData() { }
void startDescTableData() { t << endl; firstCol=TRUE; }
void endDescTableData() {}
void startDotGraph() {}
......
......@@ -853,7 +853,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
* all active output formats.
*/
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,
const char *scName,
Definition *container
)
{
......@@ -862,6 +862,15 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// hide member that are documented in their own group
if (group!=0 && container->definitionType()!=TypeGroup) return;
// if this member is in a group find the real scope name.
QCString scopeName = scName;
if (container->definitionType()==TypeGroup)
{
if (getClassDef()) scopeName=getClassDef()->name();
else if (getNamespaceDef()) scopeName=getClassDef()->name();
else if (getFileDef()) scopeName=getClassDef()->name();
}
bool hasDocs = detailsAreVisible();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if (
......@@ -876,6 +885,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
QCString cname = container->name();
QCString cfname = container->getOutputFileBase();
// get member name
QCString doxyName=name().copy();
// prepend scope if there is any. TODO: make this optional for C only docs
......
......@@ -58,12 +58,13 @@ typedef QDict<MemberName> MemberNameDict;
struct MemberInfo
{
MemberInfo(MemberDef *md,Protection p,Specifier v) :
memberDef(md), prot(p), virt(v),ambigClass(0) {}
MemberInfo(MemberDef *md,Protection p,Specifier v,bool inh) :
memberDef(md), prot(p), virt(v), inherited(inh), ambigClass(0) {}
~MemberInfo() {}
MemberDef *memberDef;
Protection prot;
Specifier virt;
bool inherited;
QCString scopePath;
QCString ambiguityResolutionScope;
ClassDef *ambigClass;
......
......@@ -90,6 +90,7 @@ class PageInfo
// ids
int todoId;
int testId;
int bugId;
// is this page part of a group
GroupDef *inGroup;
......
......@@ -22,7 +22,8 @@
RefList todoList;
/*! The test criteria list */
RefList testList;
/*! The bug list */
RefList bugList;
/*! Create a todo list */
RefList::RefList()
......@@ -63,7 +64,7 @@ int RefList::addRefItem()
*/
RefItem *RefList::getRefItem(int itemId)
{
return m_dict->find(itemId);
return m_dict ? m_dict->find(itemId) : 0;
}
/*! Returns the first item in the dictionary or 0 if
......@@ -72,7 +73,7 @@ RefItem *RefList::getRefItem(int itemId)
*/
RefItem *RefList::getFirstRefItem()
{
return m_dictIterator->toFirst();
return m_dictIterator ? m_dictIterator->toFirst() : 0;
}
/*! Returns the next item in the dictionary or 0 if
......@@ -81,6 +82,6 @@ RefItem *RefList::getFirstRefItem()
*/
RefItem *RefList::getNextRefItem()
{
return m_dictIterator->operator++();
return m_dictIterator ? m_dictIterator->operator++() : 0;
}
......@@ -51,5 +51,6 @@ class RefList
extern RefList todoList;
extern RefList testList;
extern RefList bugList;
#endif
This diff is collapsed.
......@@ -1227,6 +1227,22 @@ class Translator
{
return "Value:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a \bug item */
virtual QCString trBug()
{
return "Bug";
}
/*! Used as the header of the bug list */
virtual QCString trBugList()
{
return "Bug List";
}
};
#endif
......@@ -5,6 +5,7 @@
* Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (June 1999)
* Updates:
* 2001/02: translated new items used since version 1.2.4
* 2000/11: modified slightly the translation in trLegendDocs() function,
* translated new items used since version 1.2.1 and 1.2.2
* 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0
......@@ -998,6 +999,50 @@ class TranslatorItalian : public Translator
return "Documentazione delle Proprietà";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Interfacce";
}
/*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
{
return "Classi";
}
/*! Used as the title of a Java package */
virtual QCString trPackage(const char *name)
{
return (QCString)"Package "+name;
}
/*! Title of the package index page */
virtual QCString trPackageList()
{
return "Lista dei package";
}
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
return "Questi sono i package e una loro breve descrizione (se disponibile):";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
{
return "Package";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Documentazione dei package";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
return "Valore:";
}
};
#endif
This diff is collapsed.
......@@ -32,7 +32,7 @@ class TranslatorDutch : public Translator
QCString trRelatedSubscript()
{ return "(Merk op dat dit geen member functies zijn.)"; }
QCString trDetailedDescription()
{ return "Gedetaileerde Beschrijving"; }
{ return "Gedetailleerde Beschrijving"; }
QCString trMemberTypedefDocumentation()
{ return "Documentatie van type definitie members"; }
QCString trMemberEnumerationDocumentation()
......@@ -516,15 +516,15 @@ class TranslatorDutch : public Translator
}
QCString trGraphicalHierarchy()
{
return "Grafische Klasse Hierarchie";
return "Grafische Klasse Hi&euml;rarchie";
}
QCString trGotoGraphicalHierarchy()
{
return "Ga naar de grafische klasse hierarchie";
return "Ga naar de grafische klasse hi&euml;rarchie";
}
QCString trGotoTextualHierarchy()
{
return "Ga naar de tekstu&euml;le klasse hierarchie";
return "Ga naar de tekstuele klasse hi&euml;rarchie";
}
QCString trPageIndex()
{
......@@ -695,12 +695,12 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
QCString trTest()
{
return "Test";
}
/*! Used as the header of the test list */
virtual QCString trTestList()
QCString trTestList()
{
return "Test Lijst";
}
......@@ -710,7 +710,7 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
/*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods()
QCString trDCOPMethods()
{
return "DCOP Methoden";
}
......@@ -720,15 +720,76 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
/*! Used as a section header for IDL properties */
virtual QCString trProperties()
QCString trProperties()
{
return "Properties";
}
/*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation()
QCString trPropertyDocumentation()
{
return "Property Documentatie";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
QCString trInterfaces()
{
return "Interfaces";
}
/*! Used for Java classes in the summary section of Java packages */
QCString trClasses()
{
return "Klassen";
}
/*! Used as the title of a Java package */
QCString trPackage(const char *name)
{
return (QCString)"Package "+name;
}
/*! Title of the package index page */
QCString trPackageList()
{
return "Package Lijst";
}
/*! The description of the package index page */
QCString trPackageListDescription()
{
return "Hier volgen de packages, elk met een korte beschrijving (indien aanwezig):";
}
/*! The link name in the Quick links header for each page */
QCString trPackages()
{
return "Packages";
}
/*! Used as a chapter title for Latex & RTF output */
QCString trPackageDocumentation()
{
return "Package Documentatie";
}
/*! Text shown before a multi-line define */
QCString trDefineValue()
{
return "Waarde:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a \bug item */
QCString trBug()
{
return "Bug";
}
/*! Used as the header of the bug list */
QCString trBugList()
{
return "Bug Lijst";
}
};
#endif
This diff is collapsed.
......@@ -103,7 +103,7 @@
" \n"
"function hideFolder() \n"
"{ \n"
" if (browserVersion == 1) { \n"
" if (browserVersion == 1 || browserVersion == 3) { \n"
" if (this.navObj.style.display == \"none\") \n"
" return \n"
" this.navObj.style.display = \"none\" \n"
......@@ -171,6 +171,8 @@
" doc.yPos=8 \n"
" doc.write(\"<layer id='folder\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\") \n"
" } \n"
" if (browserVersion == 3) \n"
" doc.write(\"<div id='folder\" + this.id + \"' style='display:none;'>\") \n"
" \n"
" doc.write(\"\\n<table \") \n"
" if (browserVersion == 1) \n"
......@@ -199,6 +201,9 @@
" if (browserVersion == 2) { \n"
" doc.write(\"</layer>\") \n"
" } \n"
" if (browserVersion == 3) { \n"
" doc.write(\"</div>\") \n"
" } \n"
" \n"
" if (browserVersion == 1) { \n"
" this.navObj = doc.all[\"folder\"+this.id] \n"
......@@ -209,7 +214,11 @@
" this.iconImg = this.navObj.document.images[\"folderIcon\"+this.id] \n"
" this.nodeImg = this.navObj.document.images[\"nodeIcon\"+this.id] \n"
" doc.yPos=doc.yPos+this.navObj.clip.height \n"
" } \n"
" } else if (browserVersion == 3) {\n"
" this.navObj = doc.getElementById(\"folder\"+this.id)\n"
" this.iconImg = doc.images.namedItem(\"folderIcon\"+this.id)\n"
" this.nodeImg = doc.images.namedItem(\"nodeIcon\"+this.id)\n"
" }\n"
"} \n"
" \n"
"function outputFolderLink() \n"
......@@ -276,7 +285,7 @@
" \n"
"function hideItem() \n"
"{ \n"
" if (browserVersion == 1) { \n"
" if (browserVersion == 1 || browserVersion == 3) { \n"
" if (this.navObj.style.display == \"none\") \n"
" return \n"
" this.navObj.style.display = \"none\" \n"
......@@ -310,6 +319,8 @@
"{ \n"
" if (browserVersion == 2) \n"
" doc.write(\"<layer id='item\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\") \n"
" if (browserVersion == 3) \n"
" doc.write(\"<div id='item\" + this.id + \"' style='display:block;'>\") \n"
" \n"
" doc.write(\"\\n<table \") \n"
" if (browserVersion == 1) \n"
......@@ -340,6 +351,8 @@
" \n"
" if (browserVersion == 2) \n"
" doc.write(\"</layer>\") \n"
" if (browserVersion == 3) \n"
" doc.write(\"</div>\")\n"
" \n"
" if (browserVersion == 1) { \n"
" this.navObj = doc.all[\"item\"+this.id] \n"
......@@ -348,7 +361,10 @@
" this.navObj = doc.layers[\"item\"+this.id] \n"
" this.iconImg = this.navObj.document.images[\"itemIcon\"+this.id] \n"
" doc.yPos=doc.yPos+this.navObj.clip.height \n"
" } \n"
" } else if (browserVersion == 3) {\n"
" this.navObj = doc.getElementById(\"item\"+this.id)\n"
" this.iconImg = doc.images.namedItem(\"itemIcon\"+this.id)\n"
" }\n"
"} \n"
" \n"
" \n"
......@@ -357,7 +373,7 @@
" \n"
"function display() \n"
"{ \n"
" if (browserVersion == 1) \n"
" if (browserVersion == 1 || browserVersion == 3) \n"
" this.navObj.style.display = \"block\" \n"
" else \n"
" this.navObj.visibility = \"show\" \n"
......@@ -419,6 +435,8 @@
" else \n"
" if (doc.layers) \n"
" browserVersion = 2 //NS4 \n"
" else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1)\n"
" browserVersion = 3 //mozilla\n"
" else \n"
" browserVersion = 0 //other \n"
"\n"
......@@ -427,6 +445,7 @@
" \n"
" if (browserVersion > 0) \n"
" { \n"
" if(browserVersion != 3)\n"
" doc.write(\"<layer top=\"+indexOfEntries[nEntries-1].navObj.top+\">&nbsp;</layer>\") \n"
" \n"
" // close the whole tree \n"
......
......@@ -103,7 +103,7 @@ function propagateChangesInState(folder)
function hideFolder()
{
if (browserVersion == 1) {
if (browserVersion == 1 || browserVersion == 3) {
if (this.navObj.style.display == "none")
return
this.navObj.style.display = "none"
......@@ -171,6 +171,8 @@ function drawFolder(leftSide)
doc.yPos=8
doc.write("<layer id='folder" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
}
if (browserVersion == 3)
doc.write("<div id='folder" + this.id + "' style='display:none;'>")
doc.write("\n<table ")
if (browserVersion == 1)
......@@ -199,6 +201,9 @@ function drawFolder(leftSide)
if (browserVersion == 2) {
doc.write("</layer>")
}
if (browserVersion == 3) {
doc.write("</div>")
}
if (browserVersion == 1) {
this.navObj = doc.all["folder"+this.id]
......@@ -209,6 +214,10 @@ function drawFolder(leftSide)
this.iconImg = this.navObj.document.images["folderIcon"+this.id]
this.nodeImg = this.navObj.document.images["nodeIcon"+this.id]
doc.yPos=doc.yPos+this.navObj.clip.height
} else if (browserVersion == 3) {
this.navObj = doc.getElementById("folder"+this.id)
this.iconImg = doc.images.namedItem("folderIcon"+this.id)
this.nodeImg = doc.images.namedItem("nodeIcon"+this.id)
}
}
......@@ -276,7 +285,7 @@ function Item(itemDescription, tagName, itemLink) // Constructor
function hideItem()
{
if (browserVersion == 1) {
if (browserVersion == 1 || browserVersion == 3) {
if (this.navObj.style.display == "none")
return
this.navObj.style.display = "none"
......@@ -310,6 +319,8 @@ function drawItem(leftSide)
{
if (browserVersion == 2)
doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
if (browserVersion == 3)
doc.write("<div id='item" + this.id + "' style='display:block;'>")
doc.write("\n<table ")
if (browserVersion == 1)
......@@ -340,6 +351,8 @@ function drawItem(leftSide)
if (browserVersion == 2)
doc.write("</layer>")
if (browserVersion == 3)
doc.write("</div>")
if (browserVersion == 1) {
this.navObj = doc.all["item"+this.id]
......@@ -348,6 +361,9 @@ function drawItem(leftSide)
this.navObj = doc.layers["item"+this.id]
this.iconImg = this.navObj.document.images["itemIcon"+this.id]
doc.yPos=doc.yPos+this.navObj.clip.height
} else if (browserVersion == 3) {
this.navObj = doc.getElementById("item"+this.id)
this.iconImg = doc.images.namedItem("itemIcon"+this.id)
}
}
......@@ -357,7 +373,7 @@ function drawItem(leftSide)
function display()
{
if (browserVersion == 1)
if (browserVersion == 1 || browserVersion == 3)
this.navObj.style.display = "block"
else
this.navObj.visibility = "show"
......@@ -419,6 +435,8 @@ function initializeDocument()
else
if (doc.layers)
browserVersion = 2 //NS4
else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1)
browserVersion = 3 //mozilla
else
browserVersion = 0 //other
......@@ -427,6 +445,7 @@ function initializeDocument()
if (browserVersion > 0)
{
if(browserVersion != 3)
doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+">&nbsp;</layer>")
// close the whole tree
......
......@@ -329,10 +329,12 @@ int guessSection(const char *name)
n.right(4)==".cxx" ||
n.right(4)==".cpp" ||
n.right(4)==".c++" ||
n.right(5)==".java" ||
n.right(3)==".ii" || // inline
n.right(4)==".ixx" ||
n.right(4)==".ipp" ||
n.right(4)==".i++"
n.right(4)==".i++" ||
n.right(4)==".inl"
) return Entry::SOURCE_SEC;
if (n.right(2)==".h" || // header
n.right(3)==".hh" ||
......
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