summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL7
-rw-r--r--README4
-rw-r--r--VERSION2
-rw-r--r--addon/doxmlparser/include/doxmlintf.h2
-rw-r--r--addon/doxmlparser/src/doxmlintf.h2
-rw-r--r--doc/config.doc72
-rw-r--r--doc/doxysearch_usage.doc2
-rw-r--r--doc/features.doc3
-rw-r--r--doc/htmlcmds.doc5
-rw-r--r--doc/language.doc2
-rw-r--r--examples/class.h2
-rw-r--r--examples/example.cfg20
-rw-r--r--examples/page.doc4
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/classdef.cpp12
-rw-r--r--src/config.l10
-rw-r--r--src/docparser.cpp15
-rw-r--r--src/doctokenizer.l12
-rw-r--r--src/doxygen.cpp4
-rw-r--r--src/filedef.cpp8
-rw-r--r--src/htmlgen.cpp2
-rw-r--r--src/mangen.cpp1
-rw-r--r--src/namespacedef.cpp8
-rw-r--r--src/pre.l18
-rw-r--r--src/scanner.l86
-rw-r--r--src/translator_sr.h18
-rw-r--r--src/util.cpp85
27 files changed, 325 insertions, 83 deletions
diff --git a/INSTALL b/INSTALL
index f1ec438..6bddd2a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,7 @@
-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)
diff --git a/README b/README
index fd92766..64c9bbc 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.2.18_20021106
+DOXYGEN Version 1.3_rc1
Please read INSTALL for compilation instructions.
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (06 November 2002)
+Dimitri van Heesch (dimitri@stack.nl) (15 November 2002)
diff --git a/VERSION b/VERSION
index 5422fca..b03dc3a 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.18-20021106
+1.3-rc1
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h
index 6432ee3..a136d61 100644
--- a/addon/doxmlparser/include/doxmlintf.h
+++ b/addon/doxmlparser/include/doxmlintf.h
@@ -20,7 +20,7 @@
* \brief The interface to the object model provided by the XML parser
* 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
* XML output and navigate through the information contained in it.
*
diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h
index 6432ee3..a136d61 100644
--- a/addon/doxmlparser/src/doxmlintf.h
+++ b/addon/doxmlparser/src/doxmlintf.h
@@ -20,7 +20,7 @@
* \brief The interface to the object model provided by the XML parser
* 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
* XML output and navigate through the information contained in it.
*
diff --git a/doc/config.doc b/doc/config.doc
index d6a9fd7..f94f8e8 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_file_patterns FILE_PATTERNS
\refitem cfg_filter_source_files FILTER_SOURCE_FILES
\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_chi GENERATE_CHI
\refitem cfg_generate_todolist GENERATE_DEPRECIATELIST
@@ -109,6 +110,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_latex GENERATE_LATEX
\refitem cfg_generate_legend GENERATE_LEGEND
\refitem cfg_generate_man GENERATE_MAN
+\refitem cfg_generate_perlmod GENERATE_PERLMOD
\refitem cfg_generate_rtf GENERATE_RTF
\refitem cfg_generate_tagfile GENERATE_TAGFILE
\refitem cfg_generate_testlist GENERATE_TESTLIST
@@ -119,6 +121,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_have_dot HAVE_DOT
\refitem cfg_hhc_location HHC_LOCATION
\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_undoc_classes HIDE_UNDOC_CLASSES
\refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS
@@ -160,6 +163,9 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_paper_type PAPER_TYPE
\refitem cfg_pdf_hyperlinks PDF_HYPERLINKS
\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_project_name PROJECT_NAME
\refitem cfg_project_number PROJECT_NUMBER
@@ -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
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
<dt>\c BRIEF_MEMBER_DESC <dd>
\addindex BRIEF_MEMBER_DESC
@@ -1150,26 +1164,78 @@ EXTRA_PACKAGES = times
<dt>\c GENERATE_XML <dd>
\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
the code including all documentation.
\anchor cfg_xml_schema
<dt>\c XML_SCHEMA <dd>
\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
syntax of the XML files.
\anchor cfg_xml_dtd
<dt>\c XML_DTD <dd>
\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
syntax of the XML files.
</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
\anchor cfg_enable_preprocessing
<dl>
diff --git a/doc/doxysearch_usage.doc b/doc/doxysearch_usage.doc
index 46a3de1..51d3d46 100644
--- a/doc/doxysearch_usage.doc
+++ b/doc/doxysearch_usage.doc
@@ -131,7 +131,7 @@ This can be done by carefully following these steps:
\par Note:
Doxytag requires quite a large amount of memory to
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.
diff --git a/doc/features.doc b/doc/features.doc
index 806a5b5..3d5e985 100644
--- a/doc/features.doc
+++ b/doc/features.doc
@@ -21,7 +21,8 @@
<li>Requires very little overhead from the writer of the documentation.
Plain text will do, but for more fancy or structured output HTML tags
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,
templates, variables, functions, typedefs, enums and defines.
<li>JavaDoc (1.1), Qt-Doc, and KDOC compatible.
diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc
index 96b22f5..eadb8d1 100644
--- a/doc/htmlcmds.doc
+++ b/doc/htmlcmds.doc
@@ -17,8 +17,9 @@
/*! \page htmlcmds HTML Commands
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
-(the HREF and NAME attributes for the A tag are the only exception).
+documentation. Note that all attributes of a HTML tag are passed on to
+the HTML output only (the HREF and NAME attributes for the A tag are the
+only exception).
<ul>
<li><tt>\<A HREF="..."\></tt> Starts a HTML hyper-link (HTML only).
diff --git a/doc/language.doc b/doc/language.doc
index c3e2fda..5b13d41 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
-Currently (version 1.2.18-20021020), 28 languages
+Currently (version 1.3pre1), 28 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
diff --git a/examples/class.h b/examples/class.h
index 8e7fb3b..e5a9121 100644
--- a/examples/class.h
+++ b/examples/class.h
@@ -2,7 +2,7 @@
class Test
{
-}
+};
/*! \class Test class.h "inc/class.h"
* \brief This is a test class.
diff --git a/examples/example.cfg b/examples/example.cfg
index 9f87df1..1815a76 100644
--- a/examples/example.cfg
+++ b/examples/example.cfg
@@ -1,11 +1,11 @@
-PROJECT_NAME = "Example Command"
-OUTPUT_DIRECTORY = example
-GENERATE_TAGFILE = example.tag
-GENERATE_LATEX = NO
-GENERATE_MAN = NO
-GENERATE_RTF = NO
-CASE_SENSE_NAMES = NO
-INPUT = example.cpp
-EXAMPLE_PATH = example_test.cpp
-QUIET = YES
+PROJECT_NAME = "Example Command"
+OUTPUT_DIRECTORY = example
+GENERATE_TAGFILE = example.tag
+GENERATE_LATEX = NO
+GENERATE_MAN = NO
+GENERATE_RTF = NO
+CASE_SENSE_NAMES = NO
+INPUT = example.cpp
+EXAMPLE_PATH = example_test.cpp
+QUIET = YES
JAVADOC_AUTOBRIEF = YES
diff --git a/examples/page.doc b/examples/page.doc
index 41c9e02..747a4b8 100644
--- a/examples/page.doc
+++ b/examples/page.doc
@@ -1,6 +1,8 @@
/*! \page page1 A documentation page
+ Leading text.
+ \section sec An example section
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
Text.
\subsection subsection2 The second subsection
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 69cd6af..4d897ac 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,6 +1,6 @@
Summary: A documentation system for C/C++.
Name: doxygen
-Version: 1.2.18_20021106
+Version: 1.3_rc1
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
diff --git a/src/classdef.cpp b/src/classdef.cpp
index f4b0c9a..bfe7cac 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -727,7 +727,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
{
- ol.newParagraph();
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
+ ol.newParagraph();
+ ol.enableAll();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n\n");
+ ol.popGeneratorState();
}
// write documentation
if (!documentation().isEmpty())
@@ -1032,14 +1038,12 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.endDotGraph(usageImplGraph);
if (Config_getBool("GENERATE_LEGEND"))
{
- ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">[");
ol.startHtmlLink("graph_legend"+Doxygen::htmlFileExtension);
ol.docify(theTranslator->trLegend());
ol.endHtmlLink();
ol.writeString("]</font></center>");
- ol.popGeneratorState();
}
ol.popGeneratorState();
}
@@ -1051,11 +1055,13 @@ void ClassDef::writeDocumentation(OutputList &ol)
/* && !Config_getBool("INLINE_INHERITED_MEMB") */
)
{
+ ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(m_memListFileName,0);
ol.parseText(theTranslator->trListOfAllMembers());
ol.endTextLink();
ol.enableAll();
+ ol.popGeneratorState();
}
ol.endTextBlock();
diff --git a/src/config.l b/src/config.l
index a2ace80..88442d2 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1396,7 +1396,7 @@ void Config::create()
"overviews. This option has no effect if EXTRACT_ALL is enabled. \n",
FALSE
);
- cb = addBool(
+ cb = addBool(
"HIDE_FRIEND_COMPOUNDS",
"If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \n"
"friend (class|struct|union) declarations. \n"
@@ -1405,6 +1405,14 @@ void Config::create()
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(
"BRIEF_MEMBER_DESC",
"If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n"
"include brief member descriptions after the members that are listed in \n"
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 4b15a2b..53f58bc 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -423,7 +423,11 @@ static bool findDocsForMemberOrCompound(const char *commandName,
NamespaceDef *nd=0;
GroupDef *gd=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)
{
*pDoc=md->documentation();
@@ -4371,6 +4375,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
// pretty print the result
PrintDocVisitor *v = new PrintDocVisitor;
root->accept(v);
+ delete v;
}
checkUndocumentedParams();
@@ -4413,6 +4418,14 @@ DocNode *validatingParseText(const char *input)
DocText *txt = new DocText;
txt->parse();
+ if (Debug::isFlagSet(Debug::PrintTree))
+ {
+ // pretty print the result
+ PrintDocVisitor *v = new PrintDocVisitor;
+ txt->accept(v);
+ delete v;
+ }
+
delete g_token;
return txt;
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index f92a6f3..879ca2c 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -319,7 +319,7 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
g_token->name=yytext;
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;
return TK_URL;
}
@@ -383,7 +383,10 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
<St_Para,St_Text>{WORD1} |
<St_Para,St_Text>{WORD2} { /* function call */
- g_token->name = yytext;
+ if (yytext[0]=='%') // strip % if present
+ g_token->name = &yytext[1];
+ else
+ g_token->name = yytext;
return TK_WORD;
/* the following is dummy code to please the
@@ -465,7 +468,10 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
}
<St_TitleN>{WORD1} |
<St_TitleN>{WORD2} { /* word */
- g_token->name = yytext;
+ if (yytext[0]=='%') // strip % if present
+ g_token->name = &yytext[1];
+ else
+ g_token->name = yytext;
return TK_WORD;
}
<St_TitleN>[ \t]+ {
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 22b12e5..e32300c 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -4556,7 +4556,7 @@ static void findMember(Entry *root,
warn_cont("%s ",md->typeString());
}
warn_cont("%s::%s%s\n",
- cd->name().data(),
+ cd->qualifiedNameWithTemplateParameters().data(),
md->name().data(),md->argsString());
}
}
@@ -7806,6 +7806,7 @@ void generateOutput()
msg("Generating group index...\n");
writeGroupIndex(*outputList);
+
//msg("Generating package index...\n");
//generatePackageDocs();
@@ -7831,6 +7832,7 @@ void generateOutput()
generateSearchIndex();
msg("Generating style sheet...\n");
+ //printf("writing style info\n");
outputList->writeStyleInfo(0); // write first part
outputList->disableAllBut(OutputGenerator::Latex);
outputList->parseText(
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 02716ee..e2e6be0 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -122,7 +122,13 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
{
- ol.newParagraph();
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
+ ol.newParagraph();
+ ol.enableAll();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n\n");
+ ol.popGeneratorState();
}
if (!documentation().isEmpty())
{
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index fd2ef70..02f2b91 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -313,10 +313,12 @@ void HtmlGenerator::endProjectNumber()
void HtmlGenerator::writeStyleInfo(int part)
{
+ //printf("writeStyleInfo(%d)\n",part);
if (part==0)
{
if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet
{
+ //printf("write doxygen.css\n");
startPlainFile("doxygen.css");
// alternative, cooler looking titles
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 8712328..06f0204 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -619,6 +619,5 @@ void ManGenerator::printDoc(DocNode *n)
ManDocVisitor *visitor = new ManDocVisitor(t,*this);
n->accept(visitor);
delete visitor;
- t << endl;
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 0f32a94..b0842f5 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -207,7 +207,13 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
!documentation().isEmpty())
{
- ol.newParagraph();
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
+ ol.newParagraph();
+ ol.enableAll();
+ ol.disableAllBut(OutputGenerator::Man);
+ ol.writeString("\n\n");
+ ol.popGeneratorState();
}
if (!documentation().isEmpty())
{
diff --git a/src/pre.l b/src/pre.l
index 8123ae2..d85023f 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -971,11 +971,11 @@ static void readIncludeFile(const QCString &inc)
g_includeStack.push(fs);
// 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
- //QCString lineStr;
- //lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
- //outputArray(lineStr.data(),lineStr.length());
+ QCString lineStr;
+ lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
+ outputArray(lineStr.data(),lineStr.length());
//fprintf(stderr,"Switching to include file %s\n",incFileName.data());
preYYin=f;
@@ -1624,9 +1624,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCPPComment);
}
<SkipCComment>"*/" {
+ outputChar('*');outputChar('/');
if (--g_commentCount<=0)
{
- outputChar('*');outputChar('/');
BEGIN(g_lastCContext);
}
}
@@ -1803,11 +1803,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
setFileName(fs->fileName.copy());
//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
- //QCString lineStr;
- //lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
- //outputArray(lineStr.data(),lineStr.length());
+ QCString lineStr;
+ lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
+ outputArray(lineStr.data(),lineStr.length());
delete fs; fs=0;
}
diff --git a/src/scanner.l b/src/scanner.l
index 6d055eb..67ec602 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -657,6 +657,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x GetCallType
%x JavaImport
%x CSAccessorDecl
+%x PreLineCtrl
%%
@@ -1356,6 +1357,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->bodyLine = yyLineNr;
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>\\[\r]*"\n"[\r]* { yyLineNr++ ; }
<SkipCPP>[\r]*\n[\r]* { yyLineNr++ ;
@@ -2587,6 +2599,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
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;
BEGIN( lastCurlyContext ) ;
}
@@ -2943,16 +2963,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
//printf("Start doc block at %d\n",yyLineNr);
removeSlashes=(yytext[1]=='/');
tmpDocType=-1;
- if (YY_START==ReadBody)
- {
- current->doc+="\n\n";
- }
- else
+ if (YY_START!=SkipCurly)
{
- current->doc.resize(0);
+ current->doc.resize(0);
+ current->docLine = yyLineNr;
+ current->docFile = yyFileName;
}
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK)
{
@@ -2978,27 +2994,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
{
tmpDocType=-1;
- if (YY_START==ReadBody)
+ if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
+ YY_START==SkipCurly) // inside body
{
current->doc+="\n\n";
}
else
{
current->doc.resize(0);
+ current->docLine = yyLineNr;
+ current->docFile = yyFileName;
}
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
BEGIN( Doc );
}
else // Use the javadoc style
{
- if (YY_START==ReadBody)
+ if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
+ YY_START==SkipCurly) // inside body
{
tmpDocType=-1;
current->doc+="\n\n";
- lastDocContext = ReadBody;
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
+ lastDocContext = SkipCurly;
BEGIN( Doc );
}
else
@@ -3014,10 +3030,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
}
-<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"//!" {
- current->brief.resize(0);
- current->briefFile=yyFileName;
- current->briefLine=yyLineNr;
+<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"//!" {
+ if (YY_START!=SkipCurly)
+ {
+ current->brief.resize(0);
+ current->briefFile=yyFileName;
+ current->briefLine=yyLineNr;
+ }
tmpDocType=-1;
lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK)
@@ -3030,10 +3049,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
BEGIN( LineDoc );
}
-<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] {
- current->brief.resize(0);
- current->briefFile=yyFileName;
- current->briefLine=yyLineNr;
+<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"///"/[^/] {
+ if (YY_START!=SkipCurly)
+ {
+ current->brief.resize(0);
+ current->briefFile=yyFileName;
+ current->briefLine=yyLineNr;
+ }
tmpDocType=-1;
lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK)
@@ -4089,6 +4111,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
else
{
current->brief += " ";
+ if (!current->doc.isEmpty())
+ {
+ current->doc += "<p>";
+ }
yyLineNr++ ;
}
}
@@ -4194,6 +4220,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<LineDoc>[\n\r]+{B}*"//"[!/] { lineCount(); }
<LineDoc>\n {
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 );
}
<DefLineDoc>\n {
@@ -4318,6 +4354,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
checkDocs();
current->doc += "\n\n";
//printf("End of docs at line %d\n",yyLineNr);
+ if (lastDocContext==SkipCurly && Config_getBool("HIDE_IN_BODY_DOCS"))
+ {
+ current->doc.resize(0);
+ }
BEGIN( lastDocContext );
}
<JavaDoc>"*/" {
diff --git a/src/translator_sr.h b/src/translator_sr.h
index 3047274..dab7d15 100644
--- a/src/translator_sr.h
+++ b/src/translator_sr.h
@@ -272,7 +272,7 @@ private:
result+="članova klasa";
}
result+=" sa linkovima na ";
- if (!extractAll)
+ if (extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
@@ -331,7 +331,7 @@ private:
/*! This is an introduction to the page with the list of related pages */
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 */
virtual QCString trModulesDescription()
@@ -945,11 +945,11 @@ private:
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return decode( "Član" );
+ return decode( "Članovi" );
}
else
{
- return decode( "Javni član" );
+ return decode( "Javni članovi" );
}
}
virtual QCString trStaticPublicAttribs()
@@ -1403,7 +1403,17 @@ private:
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" );
+ }
};
diff --git a/src/util.cpp b/src/util.cpp
index 56f61c3..b445c34 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -308,7 +308,7 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
QCString generateMarker(int id)
{
QCString result;
- result.sprintf("@%d\n",id);
+ result.sprintf("@%d",id);
return result;
}
@@ -1228,7 +1228,69 @@ static QCString trimTemplateSpecifiers(
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)
{
int scopeOffset=name.length();
@@ -1239,11 +1301,11 @@ static QCString trimScope(const QCString &name,const QCString &s)
QCString scope=name.left(scopeOffset)+"::";
//printf("Trying with scope=`%s'\n",scope.data());
- int i,p=0;
- while ((i=result.find(scope,p))!=-1) // for each occurrence
+ int i,p=0,l;
+ while ((i=findScopePattern(scope,result,p,&l))!=-1) // for each occurrence
{
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
@@ -1462,6 +1524,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
stripIrrelevantConstVolatile(srcAType);
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);
dstAType = removeRedundantWhiteSpace(dstAType);
@@ -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,"()"))
{
// no exact match found, but if args="()" an arbitrary
@@ -2167,6 +2239,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mn->prev();
}
}
+ //printf("found %d candidate members\n",members.count());
if (members.count()==1 || currentFile!=0)
{
md=members.first();