diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2014-08-04 12:08:44 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2014-08-04 12:08:44 (GMT) |
commit | 7d204d1d76c6531dd55e7d59415d07e846596f98 (patch) | |
tree | 9f5bacca36d0ec1aaf23a3a167d154dcc957db5e | |
parent | fe533aeb3d6618d30d2b1c99527812a8cf8cf1fe (diff) | |
parent | 0dd59398b3f62288897c8c3405977a27a94fbfee (diff) | |
download | Doxygen-7d204d1d76c6531dd55e7d59415d07e846596f98.zip Doxygen-7d204d1d76c6531dd55e7d59415d07e846596f98.tar.gz Doxygen-7d204d1d76c6531dd55e7d59415d07e846596f98.tar.bz2 |
Merge branch 'bug734099'
-rw-r--r-- | doc/commands.doc | 14 | ||||
-rw-r--r-- | doc/docblocks.doc | 19 | ||||
-rw-r--r-- | src/doxygen.cpp | 4 | ||||
-rw-r--r-- | src/fileparser.cpp | 51 | ||||
-rw-r--r-- | src/fileparser.h | 50 | ||||
-rw-r--r-- | src/libdoxygen.pro.in | 2 | ||||
-rw-r--r-- | src/parserintf.h | 10 | ||||
-rw-r--r-- | src/util.cpp | 32 | ||||
-rw-r--r-- | winbuild/Doxygen.vcproj | 8 |
9 files changed, 179 insertions, 11 deletions
diff --git a/doc/commands.doc b/doc/commands.doc index 5743832..9175856 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -2356,6 +2356,20 @@ Commands for visual enhancements \endcode \endverbatim + If the contents of the code block are in a language that doxygen cannot parse, doxygen + will just show the output as-is. You can make this explicit using .unparsed, or by + giving some other extension that doxygen doesn't support, e.g. + +\verbatim + \code{.unparsed} + Show this as-is please + \endcode + + \code{.sh} + echo "This is a shell script" + \endcode +\endverbatim + \sa section \ref cmdendcode "\\endcode" and section \ref cmdverbatim "\\verbatim". <hr> diff --git a/doc/docblocks.doc b/doc/docblocks.doc index c74211c..333e5d2 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -371,7 +371,7 @@ typedef, enum or preprocessor definition you must first document the file that contains it (usually this will be a header file, because that file contains the information that is exported to other source files). -Let's repeat that, because it is often overlooked: +@attention Let's repeat that, because it is often overlooked: to document global objects (functions, typedefs, enum, macros, etc), you <em>must</em> document the file in which they are defined. In other words, there <em>must</em> at least be a \verbatim /*! \file */ \endverbatim @@ -395,6 +395,23 @@ using structural commands: in comment blocks which are place in front of a function. This is clearly a case where the \\fn command is redundant and will only lead to problems. + When you place a comment block in a file with one of the following extensions + `.dox`, `.txt`, or `.doc` then doxygen will hide this file from the file list. + + If you have a file that doxygen cannot parse but still would like to document it, + you can show it as-is using \ref cmdverbinclude "\\verbinclude", e.g. + +\verbatim +/*! \file myscript.sh + * Look at this nice script: + * \verbinclude myscript.sh + */ +\endverbatim + +Make sure that the script is explicitly listed in the \ref cfg_input "INPUT" or +that \ref cfg_file_patterns "FILE_PATTERNS" includes the `.sh` extention and the +the script can be found in the path set via \ref cfg_example_path "EXAMPLE_PATH". + \subsection pythonblocks Comment blocks in Python For Python there is a standard way of documenting the code using diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c012050..7caac5e 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -98,6 +98,7 @@ #include "formula.h" #include "settings.h" #include "context.h" +#include "fileparser.h" #define RECURSE_ENTRYTREE(func,var) \ do { if (var->children()) { \ @@ -9895,7 +9896,8 @@ void initDoxygen() initPreprocessor(); Doxygen::parserManager = new ParserManager; - Doxygen::parserManager->registerParser("c", new CLanguageScanner, TRUE); + Doxygen::parserManager->registerDefaultParser( new FileParser); + Doxygen::parserManager->registerParser("c", new CLanguageScanner); Doxygen::parserManager->registerParser("python", new PythonLanguageScanner); Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner); Doxygen::parserManager->registerParser("fortranfree", new FortranLanguageScannerFree); diff --git a/src/fileparser.cpp b/src/fileparser.cpp new file mode 100644 index 0000000..31434a8 --- /dev/null +++ b/src/fileparser.cpp @@ -0,0 +1,51 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2014 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#include "fileparser.h" +#include "outputgen.h" + +void FileParser::parseCode(CodeOutputInterface &codeOutIntf, + const char *, // scopeName + const QCString & input, + SrcLangExt, // lang + bool, // isExampleBlock + const char *, // exampleName + FileDef *, // fileDef + int startLine, + int endLine, + bool, // inlineFragment + MemberDef *, // memberDef + bool showLineNumbers, + Definition *, // searchCtx, + bool // collectXRefs + ) +{ + int lineNr = startLine!=-1 ? startLine : 1; + int length = input.length(); + int i=0; + while (i<length && (endLine==-1 || lineNr<=endLine)) + { + int j=i; + while (j<length && input[j]!='\n') j++; + QCString lineStr = input.mid(i,j-i); + codeOutIntf.startCodeLine(showLineNumbers); + if (showLineNumbers) codeOutIntf.writeLineNumber(0,0,0,lineNr); + codeOutIntf.codify(lineStr); + codeOutIntf.endCodeLine(); + lineNr++; + i=j+1; + } +} + diff --git a/src/fileparser.h b/src/fileparser.h new file mode 100644 index 0000000..f9a7c7b --- /dev/null +++ b/src/fileparser.h @@ -0,0 +1,50 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2014 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef FILEPARSER_H +#define FILEPARSER_H + +#include "parserintf.h" + +/** @brief General file parser */ +class FileParser : public ParserInterface +{ + public: + virtual ~FileParser() {} + void startTranslationUnit(const char *) {} + void finishTranslationUnit() {} + void parseInput(const char *, const char *,Entry *, bool, QStrList &) {} + bool needsPreprocessing(const QCString &) { return FALSE; } + void parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + SrcLangExt lang, + bool isExampleBlock, + const char *exampleName=0, + FileDef *fileDef=0, + int startLine=-1, + int endLine=-1, + bool inlineFragment=FALSE, + MemberDef *memberDef=0, + bool showLineNumbers=TRUE, + Definition *searchCtx=0, + bool collectXRefs=TRUE + ); + void resetCodeParserState() {} + void parsePrototype(const char *) {} +}; + + +#endif diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index 435a4c5..f50f987 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -50,6 +50,7 @@ HEADERS = arguments.h \ example.h \ filedef.h \ filename.h \ + fileparser.h \ formula.h \ ftextstream.h \ ftvhelp.h \ @@ -146,6 +147,7 @@ SOURCES = arguments.cpp \ entry.cpp \ filedef.cpp \ filename.cpp \ + fileparser.cpp \ formula.cpp \ ftextstream.cpp \ ftvhelp.cpp \ diff --git a/src/parserintf.h b/src/parserintf.h index c389597..019b4a9 100644 --- a/src/parserintf.h +++ b/src/parserintf.h @@ -148,17 +148,19 @@ class ParserManager ParserManager() : m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); } + void registerDefaultParser(ParserInterface *parser) + { + m_defaultParser = parser; + } + /** Registers an additional parser. * @param[in] name A symbolic name of the parser, i.e. "c", * "python", "fortran", "vhdl", ... * @param[in] parser The parser that is to be used for the * given name. - * @param[in] defParser Use this parser as the default parser, used - * for unregistered file extensions. */ - void registerParser(const char *name,ParserInterface *parser,bool defParser=FALSE) + void registerParser(const char *name,ParserInterface *parser) { - if (defParser && m_defaultParser==0) m_defaultParser=parser; m_parsers.insert(name,parser); } diff --git a/src/util.cpp b/src/util.cpp index 73a863a..bcb1390 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -6704,15 +6704,37 @@ void initDefaultExtensionMapping() { g_extLookup.setAutoDelete(TRUE); // extension parser id - updateLanguageMapping(".idl", "idl"); - updateLanguageMapping(".ddl", "idl"); - updateLanguageMapping(".odl", "idl"); + updateLanguageMapping(".dox", "c"); + updateLanguageMapping(".txt", "c"); + updateLanguageMapping(".doc", "c"); + updateLanguageMapping(".c", "c"); + updateLanguageMapping(".C", "c"); + updateLanguageMapping(".cc", "c"); + updateLanguageMapping(".CC", "c"); + updateLanguageMapping(".cxx", "c"); + updateLanguageMapping(".cpp", "c"); + updateLanguageMapping(".c++", "c"); + updateLanguageMapping(".ii", "c"); + updateLanguageMapping(".ixx", "c"); + updateLanguageMapping(".ipp", "c"); + updateLanguageMapping(".i++", "c"); + updateLanguageMapping(".inl", "c"); + updateLanguageMapping(".h", "c"); + updateLanguageMapping(".H", "c"); + updateLanguageMapping(".hh", "c"); + updateLanguageMapping(".HH", "c"); + updateLanguageMapping(".hxx", "c"); + updateLanguageMapping(".hpp", "c"); + updateLanguageMapping(".h++", "c"); + updateLanguageMapping(".idl", "idl"); + updateLanguageMapping(".ddl", "idl"); + updateLanguageMapping(".odl", "idl"); updateLanguageMapping(".java", "java"); - updateLanguageMapping(".as", "javascript"); + updateLanguageMapping(".as", "javascript"); updateLanguageMapping(".js", "javascript"); updateLanguageMapping(".cs", "csharp"); updateLanguageMapping(".d", "d"); - updateLanguageMapping(".php", "php"); + updateLanguageMapping(".php", "php"); updateLanguageMapping(".php4", "php"); updateLanguageMapping(".php5", "php"); updateLanguageMapping(".inc", "php"); diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj index dabaa4b..f539511 100644 --- a/winbuild/Doxygen.vcproj +++ b/winbuild/Doxygen.vcproj @@ -687,6 +687,10 @@ >
</File>
<File
+ RelativePath="..\src\fileparser.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\formula.cpp"
>
</File>
@@ -2383,6 +2387,10 @@ >
</File>
<File
+ RelativePath="..\src\fileparser.h"
+ >
+ </File>
+ <File
RelativePath="$(IntDir)\footer_html.h"
>
</File>
|