diff options
-rw-r--r-- | INSTALL | 7 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | addon/doxmlparser/include/doxmlintf.h | 2 | ||||
-rw-r--r-- | addon/doxmlparser/src/doxmlintf.h | 2 | ||||
-rw-r--r-- | doc/config.doc | 72 | ||||
-rw-r--r-- | doc/doxysearch_usage.doc | 2 | ||||
-rw-r--r-- | doc/features.doc | 3 | ||||
-rw-r--r-- | doc/htmlcmds.doc | 5 | ||||
-rw-r--r-- | doc/language.doc | 2 | ||||
-rw-r--r-- | examples/class.h | 2 | ||||
-rw-r--r-- | examples/example.cfg | 20 | ||||
-rw-r--r-- | examples/page.doc | 4 | ||||
-rw-r--r-- | packages/rpm/doxygen.spec | 2 | ||||
-rw-r--r-- | src/classdef.cpp | 12 | ||||
-rw-r--r-- | src/config.l | 10 | ||||
-rw-r--r-- | src/docparser.cpp | 15 | ||||
-rw-r--r-- | src/doctokenizer.l | 12 | ||||
-rw-r--r-- | src/doxygen.cpp | 4 | ||||
-rw-r--r-- | src/filedef.cpp | 8 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/mangen.cpp | 1 | ||||
-rw-r--r-- | src/namespacedef.cpp | 8 | ||||
-rw-r--r-- | src/pre.l | 18 | ||||
-rw-r--r-- | src/scanner.l | 86 | ||||
-rw-r--r-- | src/translator_sr.h | 18 | ||||
-rw-r--r-- | src/util.cpp | 85 |
27 files changed, 325 insertions, 83 deletions
@@ -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) @@ -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) @@ -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()) { @@ -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(); |