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.
......@@ -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)
1.2.18-20021106
1.3-rc1
......@@ -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.
*
......
......@@ -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.
*
......
......@@ -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>
......
......@@ -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.
......
......@@ -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.
......
......@@ -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).
......
......@@ -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,
......
......@@ -2,7 +2,7 @@
class Test
{
}
};
/*! \class Test class.h "inc/class.h"
* \brief This is a test class.
......
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
/*! \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
......
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
......
......@@ -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();
......
......@@ -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"
......@@ -1404,6 +1404,14 @@ void Config::create()
"documentation. \n",
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"
......
......@@ -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;
......
......@@ -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]+ {
......
......@@ -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(
......
......@@ -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())
{
......
......@@ -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
......
......@@ -619,6 +619,5 @@ void ManGenerator::printDoc(DocNode *n)
ManDocVisitor *visitor = new ManDocVisitor(t,*this);
n->accept(visitor);
delete visitor;
t << endl;
}
......@@ -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())
{
......
......@@ -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;
}
......
......@@ -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>"*/" {
......
......@@ -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" );
}
};
......
......@@ -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();
......
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