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

Release-1.3-rc1

parent 4fbc3452
DOXYGEN Version 1.2.18-20021106 DOXYGEN Version 1.3-rc1
Please read the installation section of the manual for instructions. Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (06 November 2002) Dimitri van Heesch (15 November 2002)
DOXYGEN Version 1.2.18_20021106 DOXYGEN Version 1.3_rc1
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (06 November 2002) Dimitri van Heesch (dimitri@stack.nl) (15 November 2002)
1.2.18-20021106 1.3-rc1
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* \brief The interface to the object model provided by the XML parser * \brief The interface to the object model provided by the XML parser
* library. * library.
* *
* To start using this library one calls createObjectModel and then * To start using this library one calls createObjectModel() and then
* uses the returned IDoxygen interface to read doxygen generated * uses the returned IDoxygen interface to read doxygen generated
* XML output and navigate through the information contained in it. * XML output and navigate through the information contained in it.
* *
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* \brief The interface to the object model provided by the XML parser * \brief The interface to the object model provided by the XML parser
* library. * library.
* *
* To start using this library one calls createObjectModel and then * To start using this library one calls createObjectModel() and then
* uses the returned IDoxygen interface to read doxygen generated * uses the returned IDoxygen interface to read doxygen generated
* XML output and navigate through the information contained in it. * XML output and navigate through the information contained in it.
* *
......
...@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_file_patterns FILE_PATTERNS \refitem cfg_file_patterns FILE_PATTERNS
\refitem cfg_filter_source_files FILTER_SOURCE_FILES \refitem cfg_filter_source_files FILTER_SOURCE_FILES
\refitem cfg_full_path_names FULL_PATH_NAMES \refitem cfg_full_path_names FULL_PATH_NAMES
\refitem cfg_generate_autogen_def GENERATE_AUTOGEN_DEF
\refitem cfg_generate_buglist GENERATE_BUGLIST \refitem cfg_generate_buglist GENERATE_BUGLIST
\refitem cfg_generate_chi GENERATE_CHI \refitem cfg_generate_chi GENERATE_CHI
\refitem cfg_generate_todolist GENERATE_DEPRECIATELIST \refitem cfg_generate_todolist GENERATE_DEPRECIATELIST
...@@ -109,6 +110,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -109,6 +110,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_latex GENERATE_LATEX \refitem cfg_generate_latex GENERATE_LATEX
\refitem cfg_generate_legend GENERATE_LEGEND \refitem cfg_generate_legend GENERATE_LEGEND
\refitem cfg_generate_man GENERATE_MAN \refitem cfg_generate_man GENERATE_MAN
\refitem cfg_generate_perlmod GENERATE_PERLMOD
\refitem cfg_generate_rtf GENERATE_RTF \refitem cfg_generate_rtf GENERATE_RTF
\refitem cfg_generate_tagfile GENERATE_TAGFILE \refitem cfg_generate_tagfile GENERATE_TAGFILE
\refitem cfg_generate_testlist GENERATE_TESTLIST \refitem cfg_generate_testlist GENERATE_TESTLIST
...@@ -119,6 +121,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -119,6 +121,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_have_dot HAVE_DOT \refitem cfg_have_dot HAVE_DOT
\refitem cfg_hhc_location HHC_LOCATION \refitem cfg_hhc_location HHC_LOCATION
\refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS \refitem cfg_hide_friend_compounds HIDE_FRIEND_COMPOUNDS
\refitem cfg_hide_in_body_docs HIDE_IN_BODY_DOCS
\refitem cfg_hide_scope_names HIDE_SCOPE_NAMES \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES
\refitem cfg_hide_undoc_classes HIDE_UNDOC_CLASSES \refitem cfg_hide_undoc_classes HIDE_UNDOC_CLASSES
\refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS \refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS
...@@ -160,6 +163,9 @@ followed by the descriptions of the tags grouped by category. ...@@ -160,6 +163,9 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_paper_type PAPER_TYPE \refitem cfg_paper_type PAPER_TYPE
\refitem cfg_pdf_hyperlinks PDF_HYPERLINKS \refitem cfg_pdf_hyperlinks PDF_HYPERLINKS
\refitem cfg_perl_path PERL_PATH \refitem cfg_perl_path PERL_PATH
\refitem cfg_perlmod_latex PERLMOD_LATEX
\refitem cfg_perlmod_pretty PERLMOD_PRETTY
\refitem cfg_perlmod_makevar_prefix PERLMOD_MAKEVAR_PREFIX
\refitem cfg_predefined PREDEFINED \refitem cfg_predefined PREDEFINED
\refitem cfg_project_name PROJECT_NAME \refitem cfg_project_name PROJECT_NAME
\refitem cfg_project_number PROJECT_NUMBER \refitem cfg_project_number PROJECT_NUMBER
...@@ -291,6 +297,14 @@ followed by the descriptions of the tags grouped by category. ...@@ -291,6 +297,14 @@ followed by the descriptions of the tags grouped by category.
If set to \c NO (the default) these declarations will be included in the If set to \c NO (the default) these declarations will be included in the
documentation. documentation.
\anchor cfg_hide_in_body_docs
<dt>\c HIDE_IN_BODY_DOCS <dd>
\addindex HIDE_IN_BODY_DOCS
If the \c HIDE_IN_BODY_DOCS tag is set to \c YES, Doxygen will hide any
documentation blocks found inside the body of a function.
If set to \c NO (the default) these blocks will be appended to the
function's detailed documentation block.
\anchor cfg_brief_member_desc \anchor cfg_brief_member_desc
<dt>\c BRIEF_MEMBER_DESC <dd> <dt>\c BRIEF_MEMBER_DESC <dd>
\addindex BRIEF_MEMBER_DESC \addindex BRIEF_MEMBER_DESC
...@@ -1150,26 +1164,78 @@ EXTRA_PACKAGES = times ...@@ -1150,26 +1164,78 @@ EXTRA_PACKAGES = times
<dt>\c GENERATE_XML <dd> <dt>\c GENERATE_XML <dd>
\addindex GENERATE_XML \addindex GENERATE_XML
If the GENERATE_XML tag is set to YES Doxygen will If the \c GENERATE_XML tag is set to \c YES Doxygen will
generate an XML file that captures the structure of generate an XML file that captures the structure of
the code including all documentation. the code including all documentation.
\anchor cfg_xml_schema \anchor cfg_xml_schema
<dt>\c XML_SCHEMA <dd> <dt>\c XML_SCHEMA <dd>
\addindex XML_SCHEMA \addindex XML_SCHEMA
The XML_SCHEMA tag can be used to specify an XML schema, The \c XML_SCHEMA tag can be used to specify an XML schema,
which can be used by a validating XML parser to check the which can be used by a validating XML parser to check the
syntax of the XML files. syntax of the XML files.
\anchor cfg_xml_dtd \anchor cfg_xml_dtd
<dt>\c XML_DTD <dd> <dt>\c XML_DTD <dd>
\addindex XML_DTD \addindex XML_DTD
The XML_DTD tag can be used to specify an XML DTD, The \c XML_DTD tag can be used to specify an XML DTD,
which can be used by a validating XML parser to check the which can be used by a validating XML parser to check the
syntax of the XML files. syntax of the XML files.
</dl> </dl>
\section autogen_output AUTOGEN_DEF related options
\anchor cfg_generate_autogen_def
<dl>
<dt>\c GENERATE_AUTOGEN_DEF <dd>
\addindex GENERATE_AUTOGEN_DEF
If the \c GENERATE_AUTOGEN_DEF tag is set to \c YES Doxygen will
generate an AutoGen Definitions (see http://autogen.sf.net) file
that captures the structure of the code including all
documentation. Note that this feature is still experimental
and incomplete at the moment.
</dl>
\section perlmod_output PERLMOD related options
\anchor cfg_generate_perlmod
<dl>
<dt>\c GENERATE_PERLMOD <dd>
\addindex GENERATE_PERLMOD
If the \c GENERATE_PERLMOD tag is set to \c YES Doxygen will
generate a Perl module file that captures the structure of
the code including all documentation. Note that this
feature is still experimental and incomplete at the
moment.
\anchor cfg_perlmod_latex
<dt>\c PERLMOD_LATEX <dd>
\addindex PERLMOD_LATEX
If the \c PERLMOD_LATEX tag is set to \c YES Doxygen will generate
the necessary Makefile rules, Perl scripts and LaTeX code to be able
to generate PDF and DVI output from the Perl module output.
\anchor cfg_perlmod_pretty
<dt>\c PERLMOD_PRETTY <dd>
\addindex PERLMOD_PRETTY
If the \c PERLMOD_PRETTY tag is set to \c YES the Perl module output will be
nicely formatted so it can be parsed by a human reader. This is useful
if you want to understand what is going on. On the other hand, if this
tag is set to \c NO the size of the Perl module output will be much smaller
and Perl will parse it just the same.
\anchor cfg_perlmod_makevar_prefix
<dt>\c PERLMOD_MAKEVAR_PREFIX <dd>
\addindex PERLMOD_MAKEVAR_PREFIX
The names of the make variables in the generated doxyrules.make file
are prefixed with the string contained in \c PERLMOD_MAKEVAR_PREFIX.
This is useful so different doxyrules.make files included by the same
Makefile don't overwrite each other's variables.
</dl>
\section config_prepro Preprocessor related options \section config_prepro Preprocessor related options
\anchor cfg_enable_preprocessing \anchor cfg_enable_preprocessing
<dl> <dl>
......
...@@ -131,7 +131,7 @@ This can be done by carefully following these steps: ...@@ -131,7 +131,7 @@ This can be done by carefully following these steps:
\par Note: \par Note:
Doxytag requires quite a large amount of memory to Doxytag requires quite a large amount of memory to
generate the search index (about 30 MB on my Linux box)! generate the search index (about 30 MB on my Linux box)!
The resulting index file requires about 3 MB space on your disk. The resulting index file requires about 3 MB of space on your disk.
<li>Edit the shell script <code>search.cgi</code> with a text editor. <li>Edit the shell script <code>search.cgi</code> with a text editor.
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
<li>Requires very little overhead from the writer of the documentation. <li>Requires very little overhead from the writer of the documentation.
Plain text will do, but for more fancy or structured output HTML tags Plain text will do, but for more fancy or structured output HTML tags
and/or some of doxygen's special commands can be used. and/or some of doxygen's special commands can be used.
<li>Supports C++, Java, (Corba, Microsoft, and KDE-DCOP) Java, IDL and C sources. <li>Supports C/C++, Java, (Corba, Microsoft, and KDE-DCOP) Java,
IDL, and to some extent C# and PHP sources.
<li>Supports documentation of files, namespaces, classes, structs, unions, <li>Supports documentation of files, namespaces, classes, structs, unions,
templates, variables, functions, typedefs, enums and defines. templates, variables, functions, typedefs, enums and defines.
<li>JavaDoc (1.1), Qt-Doc, and KDOC compatible. <li>JavaDoc (1.1), Qt-Doc, and KDOC compatible.
......
...@@ -17,8 +17,9 @@ ...@@ -17,8 +17,9 @@
/*! \page htmlcmds HTML Commands /*! \page htmlcmds HTML Commands
Here is a list of all HTML commands that may be used inside the Here is a list of all HTML commands that may be used inside the
documentation. Note that all attributes of a HTML tag are ignored documentation. Note that all attributes of a HTML tag are passed on to
(the HREF and NAME attributes for the A tag are the only exception). the HTML output only (the HREF and NAME attributes for the A tag are the
only exception).
<ul> <ul>
<li><tt>\<A HREF="..."\></tt> Starts a HTML hyper-link (HTML only). <li><tt>\<A HREF="..."\></tt> Starts a HTML hyper-link (HTML only).
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -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 that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version 1.2.18-20021020), 28 languages Currently (version 1.3pre1), 28 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
class Test class Test
{ {
} };
/*! \class Test class.h "inc/class.h" /*! \class Test class.h "inc/class.h"
* \brief This is a test class. * \brief This is a test class.
......
/*! \page page1 A documentation page /*! \page page1 A documentation page
Leading text.
\section sec An example section
This page contains the subsections \ref subsection1 and \ref subsection2. This page contains the subsections \ref subsection1 and \ref subsection2.
For more info see section \ref page2. For more info see page \ref page2.
\subsection subsection1 The first subsection \subsection subsection1 The first subsection
Text. Text.
\subsection subsection2 The second subsection \subsection subsection2 The second subsection
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.2.18_20021106 Version: 1.3_rc1
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -727,7 +727,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType ...@@ -727,7 +727,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty()) !documentation().isEmpty())
{ {
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.newParagraph(); ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n\n");
ol.popGeneratorState();
} }
// write documentation // write documentation
if (!documentation().isEmpty()) if (!documentation().isEmpty())
...@@ -1032,14 +1038,12 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1032,14 +1038,12 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.endDotGraph(usageImplGraph); ol.endDotGraph(usageImplGraph);
if (Config_getBool("GENERATE_LEGEND")) if (Config_getBool("GENERATE_LEGEND"))
{ {
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">["); ol.writeString("<center><font size=\"2\">[");
ol.startHtmlLink("graph_legend"+Doxygen::htmlFileExtension); ol.startHtmlLink("graph_legend"+Doxygen::htmlFileExtension);
ol.docify(theTranslator->trLegend()); ol.docify(theTranslator->trLegend());
ol.endHtmlLink(); ol.endHtmlLink();
ol.writeString("]</font></center>"); ol.writeString("]</font></center>");
ol.popGeneratorState();
} }
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -1051,11 +1055,13 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1051,11 +1055,13 @@ void ClassDef::writeDocumentation(OutputList &ol)
/* && !Config_getBool("INLINE_INHERITED_MEMB") */ /* && !Config_getBool("INLINE_INHERITED_MEMB") */
) )
{ {
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(m_memListFileName,0); ol.startTextLink(m_memListFileName,0);
ol.parseText(theTranslator->trListOfAllMembers()); ol.parseText(theTranslator->trListOfAllMembers());
ol.endTextLink(); ol.endTextLink();
ol.enableAll(); ol.enableAll();
ol.popGeneratorState();
} }
ol.endTextBlock(); ol.endTextBlock();
......
...@@ -1404,6 +1404,14 @@ void Config::create() ...@@ -1404,6 +1404,14 @@ void Config::create()
"documentation. \n", "documentation. \n",
FALSE FALSE
); );
cb = addBool(
"HIDE_IN_BODY_DOCS",
"If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \n"
"documentation blocks found inside the body of a function. \n"
"If set to NO (the default) these blocks will be appended to the \n"
"function's detailed documentation block. \n",
FALSE
);
cb = addBool( cb = addBool(
"BRIEF_MEMBER_DESC", "BRIEF_MEMBER_DESC",
"If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n" "If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n"
......
...@@ -423,7 +423,11 @@ static bool findDocsForMemberOrCompound(const char *commandName, ...@@ -423,7 +423,11 @@ static bool findDocsForMemberOrCompound(const char *commandName,
NamespaceDef *nd=0; NamespaceDef *nd=0;
GroupDef *gd=0; GroupDef *gd=0;
PageInfo *pi=0; PageInfo *pi=0;
bool found = getDefs(g_context.latin1(),name.latin1(),args,md,cd,fd,nd,gd,FALSE,0,TRUE); bool found = getDefs(
g_context.find('.')==-1?g_context.latin1():"", // `find('.') is a hack to detect files
name.latin1(),
args.isEmpty()?0:args.latin1(),
md,cd,fd,nd,gd,FALSE,0,TRUE);
if (found && md) if (found && md)
{ {
*pDoc=md->documentation(); *pDoc=md->documentation();
...@@ -4371,6 +4375,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, ...@@ -4371,6 +4375,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
// pretty print the result // pretty print the result
PrintDocVisitor *v = new PrintDocVisitor; PrintDocVisitor *v = new PrintDocVisitor;
root->accept(v); root->accept(v);
delete v;
} }
checkUndocumentedParams(); checkUndocumentedParams();
...@@ -4413,6 +4418,14 @@ DocNode *validatingParseText(const char *input) ...@@ -4413,6 +4418,14 @@ DocNode *validatingParseText(const char *input)
DocText *txt = new DocText; DocText *txt = new DocText;
txt->parse(); txt->parse();
if (Debug::isFlagSet(Debug::PrintTree))
{
// pretty print the result
PrintDocVisitor *v = new PrintDocVisitor;
txt->accept(v);
delete v;
}
delete g_token; delete g_token;
return txt; return txt;
......
...@@ -319,7 +319,7 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} ...@@ -319,7 +319,7 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
g_token->name=yytext; g_token->name=yytext;
return TK_URL; return TK_URL;
} }
<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9.-]+ { <St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+"."[a-z_A-Z0-9.-]+ {
g_token->name=yytext; g_token->name=yytext;
return TK_URL; return TK_URL;
} }
...@@ -383,6 +383,9 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} ...@@ -383,6 +383,9 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
<St_Para,St_Text>{WORD1} | <St_Para,St_Text>{WORD1} |
<St_Para,St_Text>{WORD2} { /* function call */ <St_Para,St_Text>{WORD2} { /* function call */
if (yytext[0]=='%') // strip % if present
g_token->name = &yytext[1];
else
g_token->name = yytext; g_token->name = yytext;
return TK_WORD; return TK_WORD;
...@@ -465,6 +468,9 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} ...@@ -465,6 +468,9 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
} }
<St_TitleN>{WORD1} | <St_TitleN>{WORD1} |
<St_TitleN>{WORD2} { /* word */ <St_TitleN>{WORD2} { /* word */
if (yytext[0]=='%') // strip % if present
g_token->name = &yytext[1];
else
g_token->name = yytext; g_token->name = yytext;
return TK_WORD; return TK_WORD;
} }
......
...@@ -4556,7 +4556,7 @@ static void findMember(Entry *root, ...@@ -4556,7 +4556,7 @@ static void findMember(Entry *root,
warn_cont("%s ",md->typeString()); warn_cont("%s ",md->typeString());
} }
warn_cont("%s::%s%s\n", warn_cont("%s::%s%s\n",
cd->name().data(), cd->qualifiedNameWithTemplateParameters().data(),
md->name().data(),md->argsString()); md->name().data(),md->argsString());
} }
} }
...@@ -7806,6 +7806,7 @@ void generateOutput() ...@@ -7806,6 +7806,7 @@ void generateOutput()
msg("Generating group index...\n"); msg("Generating group index...\n");
writeGroupIndex(*outputList); writeGroupIndex(*outputList);
//msg("Generating package index...\n"); //msg("Generating package index...\n");
//generatePackageDocs(); //generatePackageDocs();
...@@ -7831,6 +7832,7 @@ void generateOutput() ...@@ -7831,6 +7832,7 @@ void generateOutput()
generateSearchIndex(); generateSearchIndex();
msg("Generating style sheet...\n"); msg("Generating style sheet...\n");
//printf("writing style info\n");
outputList->writeStyleInfo(0); // write first part outputList->writeStyleInfo(0); // write first part
outputList->disableAllBut(OutputGenerator::Latex); outputList->disableAllBut(OutputGenerator::Latex);
outputList->parseText( outputList->parseText(
......
...@@ -122,7 +122,13 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) ...@@ -122,7 +122,13 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty()) !documentation().isEmpty())
{ {
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.newParagraph(); ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n\n");
ol.popGeneratorState();
} }
if (!documentation().isEmpty()) if (!documentation().isEmpty())
{ {
......
...@@ -313,10 +313,12 @@ void HtmlGenerator::endProjectNumber() ...@@ -313,10 +313,12 @@ void HtmlGenerator::endProjectNumber()
void HtmlGenerator::writeStyleInfo(int part) void HtmlGenerator::writeStyleInfo(int part)
{ {
//printf("writeStyleInfo(%d)\n",part);
if (part==0) if (part==0)
{ {
if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet
{ {
//printf("write doxygen.css\n");
startPlainFile("doxygen.css"); startPlainFile("doxygen.css");
// alternative, cooler looking titles // alternative, cooler looking titles
......
...@@ -619,6 +619,5 @@ void ManGenerator::printDoc(DocNode *n) ...@@ -619,6 +619,5 @@ void ManGenerator::printDoc(DocNode *n)
ManDocVisitor *visitor = new ManDocVisitor(t,*this); ManDocVisitor *visitor = new ManDocVisitor(t,*this);
n->accept(visitor); n->accept(visitor);
delete visitor; delete visitor;
t << endl;
} }
...@@ -207,7 +207,13 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) ...@@ -207,7 +207,13 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty()) !documentation().isEmpty())
{ {
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.newParagraph(); ol.newParagraph();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n\n");
ol.popGeneratorState();
} }
if (!documentation().isEmpty()) if (!documentation().isEmpty())
{ {
......
...@@ -971,11 +971,11 @@ static void readIncludeFile(const QCString &inc) ...@@ -971,11 +971,11 @@ static void readIncludeFile(const QCString &inc)
g_includeStack.push(fs); g_includeStack.push(fs);
// set the scanner to the include file // set the scanner to the include file
// TODO: Enable this to deal with file changes due to // Deal with file changes due to
// #include's within { .. } blocks // #include's within { .. } blocks
//QCString lineStr; QCString lineStr;
//lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data()); lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
//outputArray(lineStr.data(),lineStr.length()); outputArray(lineStr.data(),lineStr.length());
//fprintf(stderr,"Switching to include file %s\n",incFileName.data()); //fprintf(stderr,"Switching to include file %s\n",incFileName.data());
preYYin=f; preYYin=f;
...@@ -1624,9 +1624,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1624,9 +1624,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCPPComment); BEGIN(SkipCPPComment);
} }
<SkipCComment>"*/" { <SkipCComment>"*/" {
outputChar('*');outputChar('/');
if (--g_commentCount<=0) if (--g_commentCount<=0)
{ {
outputChar('*');outputChar('/');
BEGIN(g_lastCContext); BEGIN(g_lastCContext);
} }
} }
...@@ -1803,11 +1803,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1803,11 +1803,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
setFileName(fs->fileName.copy()); setFileName(fs->fileName.copy());
//fprintf(stderr,"######## FileName %s\n",g_yyFileName.data()); //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data());
// TODO: Enable this to deal with file changes due to // Deal with file changes due to
// #include's within { .. } blocks // #include's within { .. } blocks
//QCString lineStr; QCString lineStr;
//lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data()); lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
//outputArray(lineStr.data(),lineStr.length()); outputArray(lineStr.data(),lineStr.length());
delete fs; fs=0; delete fs; fs=0;
} }
......
...@@ -657,6 +657,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -657,6 +657,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x GetCallType %x GetCallType
%x JavaImport %x JavaImport
%x CSAccessorDecl %x CSAccessorDecl
%x PreLineCtrl
%% %%
...@@ -1356,6 +1357,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1356,6 +1357,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
BEGIN( Define ); BEGIN( Define );
} }
<FindMembers>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
yyLineNr = atoi(&yytext[1]);
BEGIN( PreLineCtrl );
}
<PreLineCtrl>"\""[^\n\"]*"\"" {
strncpy(yyFileName,stripQuotes(yytext),4096);
}
<PreLineCtrl>. {}
<PreLineCtrl>\n {
BEGIN(FindMembers);
}
<SkipCPP>. <SkipCPP>.
<SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; } <SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; }
<SkipCPP>[\r]*\n[\r]* { yyLineNr++ ; <SkipCPP>[\r]*\n[\r]* { yyLineNr++ ;
...@@ -2587,6 +2599,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2587,6 +2599,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
else else
{ {
if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
!current->doc.isEmpty())
{
// copy documentation found inside the body
// to the previous item
previous->doc += current->doc;
current->doc.resize(0);
}
previous->endBodyLine=yyLineNr; previous->endBodyLine=yyLineNr;
BEGIN( lastCurlyContext ) ; BEGIN( lastCurlyContext ) ;
} }
...@@ -2943,16 +2963,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2943,16 +2963,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
//printf("Start doc block at %d\n",yyLineNr); //printf("Start doc block at %d\n",yyLineNr);
removeSlashes=(yytext[1]=='/'); removeSlashes=(yytext[1]=='/');
tmpDocType=-1; tmpDocType=-1;
if (YY_START==ReadBody) if (YY_START!=SkipCurly)
{
current->doc+="\n\n";
}
else
{ {
current->doc.resize(0); current->doc.resize(0);
}
current->docLine = yyLineNr; current->docLine = yyLineNr;
current->docFile = yyFileName; current->docFile = yyFileName;
}
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{ {
...@@ -2978,27 +2994,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2978,27 +2994,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
{ {
tmpDocType=-1; tmpDocType=-1;
if (YY_START==ReadBody) if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body
{ {
current->doc+="\n\n"; current->doc+="\n\n";
} }
else else
{ {
current->doc.resize(0); current->doc.resize(0);
}
current->docLine = yyLineNr; current->docLine = yyLineNr;
current->docFile = yyFileName; current->docFile = yyFileName;
}
BEGIN( Doc ); BEGIN( Doc );
} }
else // Use the javadoc style else // Use the javadoc style
{ {
if (YY_START==ReadBody) if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body
{ {
tmpDocType=-1; tmpDocType=-1;
current->doc+="\n\n"; current->doc+="\n\n";
lastDocContext = ReadBody; lastDocContext = SkipCurly;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN( Doc ); BEGIN( Doc );
} }
else else
...@@ -3014,10 +3030,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3014,10 +3030,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
} }
} }
<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"//!" { <FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"//!" {
if (YY_START!=SkipCurly)
{
current->brief.resize(0); current->brief.resize(0);
current->briefFile=yyFileName; current->briefFile=yyFileName;
current->briefLine=yyLineNr; current->briefLine=yyLineNr;
}
tmpDocType=-1; tmpDocType=-1;
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
...@@ -3030,10 +3049,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3030,10 +3049,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
BEGIN( LineDoc ); BEGIN( LineDoc );
} }
<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] { <FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"///"/[^/] {
if (YY_START!=SkipCurly)
{
current->brief.resize(0); current->brief.resize(0);
current->briefFile=yyFileName; current->briefFile=yyFileName;
current->briefLine=yyLineNr; current->briefLine=yyLineNr;
}
tmpDocType=-1; tmpDocType=-1;
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
...@@ -4089,6 +4111,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -4089,6 +4111,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
else else
{ {
current->brief += " "; current->brief += " ";
if (!current->doc.isEmpty())
{
current->doc += "<p>";
}
yyLineNr++ ; yyLineNr++ ;
} }
} }
...@@ -4194,6 +4220,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -4194,6 +4220,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<LineDoc>[\n\r]+{B}*"//"[!/] { lineCount(); } <LineDoc>[\n\r]+{B}*"//"[!/] { lineCount(); }
<LineDoc>\n { <LineDoc>\n {
yyLineNr++; yyLineNr++;
if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
lastDocContext==SkipCurly) // inside body
{
if (!previous->doc.isEmpty())
{
previous->doc+="<p>";
}
previous->doc += current->brief;
current->brief.resize(0);
}
BEGIN( lastDocContext ); BEGIN( lastDocContext );
} }
<DefLineDoc>\n { <DefLineDoc>\n {
...@@ -4318,6 +4354,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -4318,6 +4354,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
checkDocs(); checkDocs();
current->doc += "\n\n"; current->doc += "\n\n";
//printf("End of docs at line %d\n",yyLineNr); //printf("End of docs at line %d\n",yyLineNr);
if (lastDocContext==SkipCurly && Config_getBool("HIDE_IN_BODY_DOCS"))
{
current->doc.resize(0);
}
BEGIN( lastDocContext ); BEGIN( lastDocContext );
} }
<JavaDoc>"*/" { <JavaDoc>"*/" {
......
...@@ -272,7 +272,7 @@ private: ...@@ -272,7 +272,7 @@ private:
result+="èlanova klasa"; result+="èlanova klasa";
} }
result+=" sa linkovima na "; result+=" sa linkovima na ";
if (!extractAll) if (extractAll)
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
...@@ -331,7 +331,7 @@ private: ...@@ -331,7 +331,7 @@ private:
/*! This is an introduction to the page with the list of related pages */ /*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription() virtual QCString trRelatedPagesDescription()
{ return decode( "Spisak svih slèinih stranica:" ); } { return decode( "Spisak svih sliènih stranica:" ); }
/*! This is an introduction to the page with the list of class/file groups */ /*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
...@@ -945,11 +945,11 @@ private: ...@@ -945,11 +945,11 @@ private:
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
return decode( "Èlan" ); return decode( "Èlanovi" );
} }
else else
{ {
return decode( "Javni èlan" ); return decode( "Javni èlanovi" );
} }
} }
virtual QCString trStaticPublicAttribs() virtual QCString trStaticPublicAttribs()
...@@ -1403,7 +1403,17 @@ private: ...@@ -1403,7 +1403,17 @@ private:
return decode( "Sadr¾aj" ); return decode( "Sadr¾aj" );
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return decode( "Spisak zastarelih funkcija èlanica" );
}
}; };
......
...@@ -308,7 +308,7 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn) ...@@ -308,7 +308,7 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
QCString generateMarker(int id) QCString generateMarker(int id)
{ {
QCString result; QCString result;
result.sprintf("@%d\n",id); result.sprintf("@%d",id);
return result; return result;
} }
...@@ -1228,7 +1228,69 @@ static QCString trimTemplateSpecifiers( ...@@ -1228,7 +1228,69 @@ static QCString trimTemplateSpecifiers(
return result; return result;
} }
// removes the (one and only) occurrence of name:: from s. /*!
* @param pattern pattern to look for
* @param s string to search in
* @param p position to start
* @param len resulting pattern length
* @returns position on which string is found, or -1 if not found
*/
static int findScopePattern(const QCString &pattern,const QCString &s,
int p,int *len)
{
int sl=s.length();
int pl=pattern.length();
int sp=0;
*len=0;
while (p<sl)
{
sp=p; // start of match
int pp=0; // pattern position
while (p<sl && pp<pl)
{
if (s.at(p)=='<') // skip template arguments while matching
{
int bc=1;
//printf("skipping pos=%d c=%c\n",p,s.at(p));
p++;
while (p<sl)
{
if (s.at(p)=='<') bc++;
else if (s.at(p)=='>')
{
bc--;
if (bc==0)
{
p++;
break;
}
}
//printf("skipping pos=%d c=%c\n",p,s.at(p));
p++;
}
}
else if (s.at(p)==pattern.at(pp))
{
//printf("match at position p=%d pp=%d c=%c\n",p,pp,s.at(p));
p++;
pp++;
}
else // no match
{
//printf("restarting at %d c=%c pat=%s\n",p,s.at(p),pattern.data());
p=sp+1;
break;
}
}
if (pp==pl) // whole pattern matches
{
*len=p-sp;
return sp;
}
}
return -1;
}
static QCString trimScope(const QCString &name,const QCString &s) static QCString trimScope(const QCString &name,const QCString &s)
{ {
int scopeOffset=name.length(); int scopeOffset=name.length();
...@@ -1239,11 +1301,11 @@ static QCString trimScope(const QCString &name,const QCString &s) ...@@ -1239,11 +1301,11 @@ static QCString trimScope(const QCString &name,const QCString &s)
QCString scope=name.left(scopeOffset)+"::"; QCString scope=name.left(scopeOffset)+"::";
//printf("Trying with scope=`%s'\n",scope.data()); //printf("Trying with scope=`%s'\n",scope.data());
int i,p=0; int i,p=0,l;
while ((i=result.find(scope,p))!=-1) // for each occurrence while ((i=findScopePattern(scope,result,p,&l))!=-1) // for each occurrence
{ {
tmp+=result.mid(p,i-p); // add part before pattern tmp+=result.mid(p,i-p); // add part before pattern
p=i+scope.length(); p=i+l;
} }
tmp+=result.right(result.length()-p); // add trailing part tmp+=result.right(result.length()-p); // add trailing part
...@@ -1462,6 +1524,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, ...@@ -1462,6 +1524,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
stripIrrelevantConstVolatile(srcAType); stripIrrelevantConstVolatile(srcAType);
stripIrrelevantConstVolatile(dstAType); stripIrrelevantConstVolatile(dstAType);
// strip typename keyword
if (strncmp(srcAType,"typename ",9)==0)
{
srcAType = srcAType.right(srcAType.length()-9);
}
if (strncmp(dstAType,"typename ",9)==0)
{
dstAType = dstAType.right(dstAType.length()-9);
}
srcAType = removeRedundantWhiteSpace(srcAType); srcAType = removeRedundantWhiteSpace(srcAType);
dstAType = removeRedundantWhiteSpace(dstAType); dstAType = removeRedundantWhiteSpace(dstAType);
...@@ -2146,7 +2219,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2146,7 +2219,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
} }
} }
//printf("found %d candidate members\n",members.count());
if (members.count()!=1 && !strcmp(args,"()")) if (members.count()!=1 && !strcmp(args,"()"))
{ {
// no exact match found, but if args="()" an arbitrary // no exact match found, but if args="()" an arbitrary
...@@ -2167,6 +2239,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2167,6 +2239,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mn->prev(); md=mn->prev();
} }
} }
//printf("found %d candidate members\n",members.count());
if (members.count()==1 || currentFile!=0) if (members.count()==1 || currentFile!=0)
{ {
md=members.first(); md=members.first();
......
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