diff options
265 files changed, 16049 insertions, 8445 deletions
diff --git a/.codedocs b/.codedocs new file mode 100644 index 0000000..699b915 --- /dev/null +++ b/.codedocs @@ -0,0 +1,3 @@ +EXCLUDE = addon cmake doc examples jquery templates testing winbuild src/logos.cpp src/lodepng.cpp +FILE_PATTERNS = *.h *.cpp *.md +USE_MDFILE_AS_MAINPAGE = src/doxygen.md diff --git a/.travis.yml b/.travis.yml index 0ae48e8..0e60295 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,10 @@ before_install: - sudo apt-get update -qq install: - - sudo apt-get install -qq texlive texlive-extra-utils texlive-latex-extra libxml2-utils + - sudo apt-get install -qq texlive + - sudo apt-get install -qq texlive-extra-utils + - sudo apt-get install -q -y texlive-latex-extra + - sudo apt-get install -qq libxml2-utils - sudo apt-get install -qq cmake cmake-data script: @@ -1,5 +1,5 @@ Doxygen uses cmake (http://www.cmake.org/) to build executables for various platforms. -It's required at least cmake version 3.0. +It's required at least cmake version 2.8.12 The first step is to create a build directory where the output should be stored. Doxygen can be fully build outside of the source tree. @@ -35,6 +35,7 @@ Doxygen's cmake configuration provides a number of options: - use_libclang Add support for libclang parsing. - win_static Link with /MT in stead of /MD on windows. - english_only Only compile in support for the English language. +- force_qt4 Forces doxywizard to build using Qt4 even if Qt5 is installed An option can be turned on, by adding -D<option>=ON as a command line option, this can be done when generating the initial build files, but also afterwards, i.e. to enable building diff --git a/CMakeLists.txt b/CMakeLists.txt index 666c76d..6127de2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,14 @@ if (WIN32) add_definitions(-DLIBICONV_STATIC -D_CRT_SECURE_NO_WARNINGS) endif() +if ("${CMAKE_GENERATOR}" MATCHES "Ninja") + set(LEX_FLAGS ) + set(YACC_FLAGS ) +else ("${CMAKE_GENERATOR}" MATCHES "Ninja") + set(LEX_FLAGS $(LEX_FLAGS)) + set(YACC_FLAGS $(YACC_FLAGS)) +endif ("${CMAKE_GENERATOR}" MATCHES "Ninja") + find_program(DOT NAMES dot) find_package(PythonInterp REQUIRED) find_package(FLEX REQUIRED) @@ -35,6 +35,7 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO @@ -1,12 +1,12 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not @@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE + + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -225,7 +225,7 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it @@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> - Copyright (C) yyyy <name of author> + Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -303,17 +303,16 @@ the "copyright" line and a pointer to where the full notice is found. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) yyyy name of author + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names: This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. @@ -33,6 +33,8 @@ Developers * Coverity Scan Build Status: <a href="https://scan.coverity.com/projects/2860"> <img alt="Coverity Scan Build Status" src="https://scan.coverity.com/projects/2860/badge.svg"/> </a> +* Doxygen's Doxygen Documentation: <a href="https://codedocs.xyz/doxygen/doxygen/"><img src="https://codedocs.xyz/doxygen/doxygen.svg"/></a> + * Install * Quick install see (./INSTALL) * else http://www.doxygen.org/manual/install.html @@ -1 +1 @@ -1.8.11 +1.8.14 diff --git a/addon/doxyapp/CMakeLists.txt b/addon/doxyapp/CMakeLists.txt index 99a6fd4..423aea6 100644 --- a/addon/doxyapp/CMakeLists.txt +++ b/addon/doxyapp/CMakeLists.txt @@ -1,9 +1,18 @@ if (build_app) +# configvalues.h +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h + DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py + OUTPUT ${GENERATED_SRC}/configvalues.h +) +set_source_files_properties(${GENERATED_SRC}/configvalues.h PROPERTIES GENERATED 1) + find_package(Iconv) include_directories( ${CMAKE_SOURCE_DIR}/src + ${GENERATED_SRC} ${CMAKE_SOURCE_DIR}/qtools ${ICONV_INCLUDE_DIR} ${CLANG_INCLUDEDIR} diff --git a/addon/doxyapp/doxyapp.cpp b/addon/doxyapp/doxyapp.cpp index 6564981..45e71fc 100644 --- a/addon/doxyapp/doxyapp.cpp +++ b/addon/doxyapp/doxyapp.cpp @@ -262,28 +262,28 @@ int main(int argc,char **argv) // setup the non-default configuration options // we need a place to put intermediate files - Config_getString("OUTPUT_DIRECTORY")="/tmp/doxygen"; + Config_getString(OUTPUT_DIRECTORY)="/tmp/doxygen"; // disable html output - Config_getBool("GENERATE_HTML")=FALSE; + Config_getBool(GENERATE_HTML)=FALSE; // disable latex output - Config_getBool("GENERATE_LATEX")=FALSE; + Config_getBool(GENERATE_LATEX)=FALSE; // be quiet - Config_getBool("QUIET")=TRUE; + Config_getBool(QUIET)=TRUE; // turn off warnings - Config_getBool("WARNINGS")=FALSE; - Config_getBool("WARN_IF_UNDOCUMENTED")=FALSE; - Config_getBool("WARN_IF_DOC_ERROR")=FALSE; + Config_getBool(WARNINGS)=FALSE; + Config_getBool(WARN_IF_UNDOCUMENTED)=FALSE; + Config_getBool(WARN_IF_DOC_ERROR)=FALSE; // Extract as much as possible - Config_getBool("EXTRACT_ALL")=TRUE; - Config_getBool("EXTRACT_STATIC")=TRUE; - Config_getBool("EXTRACT_PRIVATE")=TRUE; - Config_getBool("EXTRACT_LOCAL_METHODS")=TRUE; + Config_getBool(EXTRACT_ALL)=TRUE; + Config_getBool(EXTRACT_STATIC)=TRUE; + Config_getBool(EXTRACT_PRIVATE)=TRUE; + Config_getBool(EXTRACT_LOCAL_METHODS)=TRUE; // Extract source browse information, needed // to make doxygen gather the cross reference info - Config_getBool("SOURCE_BROWSER")=TRUE; + Config_getBool(SOURCE_BROWSER)=TRUE; // set the input - Config_getList("INPUT").append(argv[1]); + Config_getList(INPUT).append(argv[1]); // check and finialize the configuration checkConfiguration(); diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt index bf2eda8..8207971 100644 --- a/addon/doxywizard/CMakeLists.txt +++ b/addon/doxywizard/CMakeLists.txt @@ -76,7 +76,7 @@ OUTPUT ${GENERATED_SRC_WIZARD}/configdoc.cpp ) set_source_files_properties(${GENERATED_SRC_WIZARD}/configdoc.cpp PROPERTIES GENERATED 1) -FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "$(LEX_FLAGS) -Pconfig_doxywYY") +FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "${LEX_FLAGS}") qt_wrap_cpp(doxywizard_MOC doxywizard.h diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l index 90bd09e..7874a19 100644 --- a/addon/doxywizard/config_doxyw.l +++ b/addon/doxywizard/config_doxyw.l @@ -13,6 +13,7 @@ */ %option never-interactive +%option prefix="config_doxywYY" %{ /* diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index e292d0c..492912b 100644..100755 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -10,7 +10,7 @@ #include <QVBoxLayout> #include <QLineEdit> #include <QLabel> -#include <QTextEdit> +#include <QTextBrowser> #include <QStatusBar> #include <QProcess> #include <QTimer> @@ -31,6 +31,10 @@ const int messageTimeout = 5000; //!< status bar message timeout in milliseconds. +#define APPQT(x) QString::fromLatin1("<qt><pre>") + x + QString::fromLatin1("</pre></qt>") + +static QString text1 = QString::fromLatin1(""); + MainWindow &MainWindow::instance() { static MainWindow *theInstance = new MainWindow; @@ -101,7 +105,9 @@ MainWindow::MainWindow() runTabLayout->addLayout(runLayout); runTabLayout->addWidget(new QLabel(tr("Output produced by doxygen"))); QGridLayout *grid = new QGridLayout; - m_outputLog = new QTextEdit; + //m_outputLog = new QTextEdit; + m_outputLog = new QTextBrowser; + //m_outputLog = new QPlainTextEdit; m_outputLog->setReadOnly(true); m_outputLog->setFontFamily(QString::fromLatin1("courier")); m_outputLog->setMinimumWidth(600); @@ -368,14 +374,16 @@ void MainWindow::loadSettings() } } - for (int i=0;i<MAX_RECENT_FILES;i++) + /* due to prepend use list in reversed order */ + for (int i=MAX_RECENT_FILES;i>=0;i--) { QString entry = m_settings.value(QString().sprintf("recent/config%d",i)).toString(); if (!entry.isEmpty() && QFileInfo(entry).exists()) { - addRecentFile(entry); + addRecentFileList(entry); } } + updateRecentFile(); } @@ -402,6 +410,11 @@ void MainWindow::selectRunTab() void MainWindow::addRecentFile(const QString &fileName) { + addRecentFileList(fileName); + updateRecentFile(); +} +void MainWindow::addRecentFileList(const QString &fileName) +{ int i=m_recentFiles.indexOf(fileName); if (i!=-1) m_recentFiles.removeAt(i); @@ -415,8 +428,11 @@ void MainWindow::addRecentFile(const QString &fileName) m_recentFiles.removeLast(); m_recentFiles.prepend(fileName); } +} +void MainWindow::updateRecentFile(void) +{ m_recentMenu->clear(); - i=0; + int i=0; foreach( QString str, m_recentFiles ) { m_recentMenu->addAction(str); @@ -474,11 +490,12 @@ void MainWindow::runDoxygen() args << QString::fromLatin1("-"); // read config from stdin m_outputLog->clear(); + text1 = QString::fromLatin1(""); m_runProcess->start(doxygenPath + QString::fromLatin1("doxygen"), args); if (!m_runProcess->waitForStarted()) { - m_outputLog->append(QString::fromLatin1("*** Failed to run doxygen\n")); + m_outputLog->append(APPQT(QString::fromLatin1("*** Failed to run doxygen\n"))); return; } QTextStream t(m_runProcess); @@ -487,7 +504,7 @@ void MainWindow::runDoxygen() if (m_runProcess->state() == QProcess::NotRunning) { - m_outputLog->append(QString::fromLatin1("*** Failed to run doxygen\n")); + m_outputLog->append(APPQT(QString::fromLatin1("*** Failed to run doxygen\n"))); } else { @@ -517,7 +534,9 @@ void MainWindow::readStdout() QString text = QString::fromUtf8(data); if (!text.isEmpty()) { - m_outputLog->append(text.trimmed()); + text1 += text; + m_outputLog->clear(); + m_outputLog->append(APPQT(text1.trimmed())); } } } @@ -526,11 +545,11 @@ void MainWindow::runComplete() { if (m_running) { - m_outputLog->append(tr("*** Doxygen has finished\n")); + m_outputLog->append(APPQT(tr("*** Doxygen has finished\n"))); } else { - m_outputLog->append(tr("*** Cancelled by user\n")); + m_outputLog->append(APPQT(tr("*** Cancelled by user\n"))); } m_outputLog->ensureCursorVisible(); m_run->setText(tr("Run doxygen")); @@ -592,7 +611,7 @@ void MainWindow::showSettings() QTextStream t(&text); m_expert->writeConfig(t,true); m_outputLog->clear(); - m_outputLog->append(text); + m_outputLog->append(APPQT(text)); m_outputLog->ensureCursorVisible(); m_saveLog->setEnabled(true); } diff --git a/addon/doxywizard/doxywizard.h b/addon/doxywizard/doxywizard.h index 189972f..49b7c02 100644..100755 --- a/addon/doxywizard/doxywizard.h +++ b/addon/doxywizard/doxywizard.h @@ -10,7 +10,7 @@ class Wizard; class QLabel; class QLineEdit; class QPushButton; -class QTextEdit; +class QTextBrowser; class QMenu; class QProcess; class QTimer; @@ -58,6 +58,8 @@ class MainWindow : public QMainWindow MainWindow(); void saveConfig(const QString &fileName); void addRecentFile(const QString &fileName); + void addRecentFileList(const QString &fileName); + void updateRecentFile(void); void updateConfigFileName(const QString &fileName); void setWorkingDir(const QString &dirName); void updateLaunchButtonState(); @@ -69,7 +71,7 @@ class MainWindow : public QMainWindow QPushButton *m_saveLog; QPushButton *m_launchHtml; QPushButton *m_launchPdf; - QTextEdit *m_outputLog; + QTextBrowser *m_outputLog; QLabel *m_runStatus; Expert *m_expert; Wizard *m_wizard; diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake index d96e3c0..a30f1fd 100644 --- a/cmake/FindIconv.cmake +++ b/cmake/FindIconv.cmake @@ -71,6 +71,11 @@ endif() set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARY}) + +if(MSVC_VERSION GREATER 1800) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} legacy_stdio_definitions.lib) +endif() + check_cxx_source_compiles( "#include <iconv.h> int main() { @@ -91,6 +96,10 @@ if(ICONV_FOUND) set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) + if(MSVC_VERSION GREATER 1800) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} legacy_stdio_definitions.lib) + endif() + if (NOT DEFINED ICONV_ACCEPTS_NONCONST_INPUT) # Display a useful message first time we come through here message(STATUS "One (and only one) of the ICONV_ACCEPTS_... tests must pass") diff --git a/cmake/FindLibClang.cmake b/cmake/FindLibClang.cmake index 2835b1f..e7462d4 100644 --- a/cmake/FindLibClang.cmake +++ b/cmake/FindLibClang.cmake @@ -38,7 +38,11 @@ if (NOT CLANG_LIBS) if (NOT EXISTS ${CLANG_CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT}) find_library(CLANG_LIBS NAMES clang libclang) if (NOT EXISTS ${CLANG_LIBS}) - set (CLANG_LIBS "-L${CLANG_LIBDIR}" "-lclang" "-Wl,-rpath,${CLANG_LIBDIR}") + if (MSVC) + set (CLANG_LIBS "${CLANG_LIBDIR}/libclang.lib") + else() + set (CLANG_LIBS "-L${CLANG_LIBDIR}" "-lclang" "-Wl,-rpath,${CLANG_LIBDIR}") + endif() endif () else () set(CLANG_LIBS "${CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT}") diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 345e898..8b51134 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -146,9 +146,9 @@ add_custom_target(doxygen_pdf COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/doxygen_manual.tex . COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/manual.sty . COMMAND ${EPSTOPDF} ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.eps --outfile=doxygen_logo.pdf - COMMAND ${PDFLATEX} doxygen_manual.tex + COMMAND ${PDFLATEX} -shell-escape doxygen_manual.tex COMMAND ${MAKEINDEX} doxygen_manual.idx - COMMAND ${PDFLATEX} doxygen_manual.tex + COMMAND ${PDFLATEX} -shell-escape doxygen_manual.tex DEPENDS run_doxygen WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/latex ) diff --git a/doc/arch.doc b/doc/arch.doc index 95cb270..4b17d7c 100644 --- a/doc/arch.doc +++ b/doc/arch.doc @@ -115,7 +115,7 @@ on the tree of entries, built during language parsing. Look at the "Gathering information" part of \c parseInput() for details. The result of this step is a number of dictionaries, which can be -found in the Doxygen "namespace" defined in \c src/doxygen.h. Most +found in the doxygen "namespace" defined in \c src/doxygen.h. Most elements of these dictionaries are derived from the class \c Definition; The class \c MemberDef, for instance, holds all information for a member. An instance of such a class can be part of a file ( class \c FileDef ), @@ -188,7 +188,7 @@ could extract information from the XML output. Possible tools could be: <h3>Debugging</h3> Since doxygen uses a lot of \c flex code it is important to understand -how \c flex works (for this one should read the man page) +how \c flex works (for this one should read the \c man page) and to understand what it is doing when \c flex is parsing some input. Fortunately, when flex is used with the `-d` option it outputs what rules matched. This makes it quite easy to follow what is going on for a @@ -203,52 +203,47 @@ from the correct line in the \c Makefile: $file = shift @ARGV; print "Toggle debugging mode for $file\n"; - -# add or remove the -d flex flag in the makefile -unless (rename "Makefile.libdoxygen","Makefile.libdoxygen.old") { - print STDERR "Error: cannot rename Makefile.libdoxygen!\n"; +if (!-e "../src/${file}.l") +{ + print STDERR "Error: file ../src/${file}.l does not exist!"; + exit 1; +} +system("touch ../src/${file}.l"); +unless (rename "src/CMakeFiles/_doxygen.dir/build.make","src/CMakefiles/_doxygen.dir/build.make.old") { + print STDERR "Error: cannot rename src/CMakeFiles/_doxygen.dir/build.make!\n"; exit 1; } -if (open(F,"<Makefile.libdoxygen.old")) { - unless (open(G,">Makefile.libdoxygen")) { - print STDERR "Error: opening file Makefile.libdoxygen for writing\n"; - exit 1; +if (open(F,"<src/CMakeFiles/_doxygen.dir/build.make.old")) { + unless (open(G,">src/CMakefiles/_doxygen.dir/build.make")) { + print STDERR "Error: opening file build.make for writing\n"; + exit 1; } - print "Processing Makefile.libdoxygen...\n"; + print "Processing build.make...\n"; while (<F>) { - if ( s/\(LEX\) (-i )?-P([a-zA-Z]+)YY -t $file/(LEX) -d \1-P\2YY -t $file/g ) { - print "Enabling debug info for $file\n"; + if ( s/flex \$\(LEX_FLAGS\) -P${file}YY/flex \$(LEX_FLAGS) -d -P${file}YY/ ) { + print "Enabling debug info for $file.l\n"; } - elsif ( s/\(LEX\) -d (-i )?-P([a-zA-Z]+)YY -t $file/(LEX) \1-P\2YY -t $file/g ) { + elsif ( s/flex \$\(LEX_FLAGS\) -d -P${file}YY/flex \$(LEX_FLAGS) -P${file}YY/ ) { print "Disabling debug info for $file\n"; } print G "$_"; } close F; - unlink "Makefile.libdoxygen.old"; + unlink "src/CMakeFiles/_doxygen.dir/build.make.old"; } else { - print STDERR "Warning file Makefile.libdoxygen.old does not exist!\n"; + print STDERR "Warning file src/CMakeFiles/_doxygen.dir/build.make does not exist!\n"; } # touch the file $now = time; utime $now, $now, $file - -\endverbatim -Another way to get rules matching / debugging information from the flex code is in the following way: -\verbatim -touch src/<flex code file>.l -make LEX="flex -d" -\endverbatim -to remove the rules / debug information again: -\verbatim -touch src/<flex codefile>.l -make \endverbatim +Another way to get rules matching / debugging information +from the \c flex code is setting LEX_FLAGS with \c make (`make LEX_FLAGS=-d`). -Note that by running doxygen with `-d lex` you get information about which flex -codefile is used. +Note that by running doxygen with `-d lex` you get information about which +`flex codefile` is used. \htmlonly Return to the <a href="index.html">index</a>. diff --git a/doc/autolink.doc b/doc/autolink.doc index b434dd2..98556c5 100644 --- a/doc/autolink.doc +++ b/doc/autolink.doc @@ -38,7 +38,7 @@ documentation by links (in HTML). To manually specify link text, use the HTML '<tt>a</tt>' tag: \verbatim <a href="linkURL">link text</a> \endverbatim - which will be automatically translated to other output formats by Doxygen. + which will be automatically translated to other output formats by doxygen. \section linkclass Links to classes @@ -113,7 +113,7 @@ \include autolink.cpp \htmlonly Click <a href="examples/autolink/html/index.html">here</a> - for the corresponding HTML documentation that is generated by Doxygen. + for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly \latexonly See \hyperlink{autolink_example}{Autolink example} @@ -133,7 +133,7 @@ typedef struct StructName TypeName \include restypedef.cpp \htmlonly Click <a href="examples/restypedef/html/restypedef_8cpp.html">here</a> - for the corresponding HTML documentation that is generated by Doxygen. + for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly \latexonly See \hyperlink{restypedef_8cpp}{Typedef example} diff --git a/doc/changelog.doc b/doc/changelog.doc index a2c540a..c5b2e3f 100644 --- a/doc/changelog.doc +++ b/doc/changelog.doc @@ -2,10 +2,392 @@ \tableofcontents \section log_1_8 1.8 Series +\subsection log_1_8_13 Release 1.8.13 +\htmlonly +<b>(release date 29-12-2016)</b> +<a name="1.8.13"></a> +</p> +<ul> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707266">707266</a> - C++/CLI indexed property not documented [<a href="http://github.com/doxygen/doxygen/commit/80656d68a0838483ea2988adf028e2d85292a109">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707278">707278</a> - Grouping of results fail when using built-in javascript search [<a href="http://github.com/doxygen/doxygen/commit/0615b1b023f7888dfdbeee7673d6d0bcc7b803df">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722112">722112</a> - 'static' and 'throw' C++ keywords not colored [<a href="http://github.com/doxygen/doxygen/commit/794ae9cbc40b73d00cce5f0096b53f18e1d3e325">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=729921">729921</a> - wrong collaboration diagram when in template used scoped argument type [<a href="http://github.com/doxygen/doxygen/commit/adb44ae6ef1d102caea1338373be078bf4a5d640">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=756185">756185</a> - Multiline //!< behavior changed [<a href="http://github.com/doxygen/doxygen/commit/d4accb68ff6536dcf128236b7e1e8d0239d4ffc2">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759402">759402</a> - C++11 "using" type alias for function pointer with no arguments is formatted incorrectly [<a href="http://github.com/doxygen/doxygen/commit/d4c24c28ffcf7143bcdfecee1c8b55f704274d37">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=760678">760678</a> - fails to build with an unreleased python version [<a href="http://github.com/doxygen/doxygen/commit/5c6f0fdf1ebbd4c28f524a0347fe556ff2421504">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=769552">769552</a> - doxygen warning parsing C++11 "using" declaration [<a href="http://github.com/doxygen/doxygen/commit/5730198d20511d93c20aa7870fc2bd11f478db85">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=770973">770973</a> - Tag file size double between each run [<a href="http://github.com/doxygen/doxygen/commit/155bd0110585d401d0f898baf9c69b2ec46833ff">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=771152">771152</a> - C++11 ref-qualifiers do not appear in Member Function Documentation section [<a href="http://github.com/doxygen/doxygen/commit/9ef1bf94eef1af591c40102b930fef95250b8142">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=771199">771199</a> - Web-page bug: Comment blocks in VHDL [<a href="http://github.com/doxygen/doxygen/commit/6c6b847bcd16cc818165b51e62dc11a947f7e084">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=771310">771310</a> - French description for "Namespace Members" is wrong and causes fatal javascript error [<a href="http://github.com/doxygen/doxygen/commit/b5e1e195bc207c7bb93df4e51253f9f3a1026a3d">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=771344">771344</a> - Class name 'internal' breaks class hierarchy in C++ [<a href="http://github.com/doxygen/doxygen/commit/b93dbcdab6dfc5681ec49f1d567698b7c4dc6846">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=772574">772574</a> - __xxx__ not interpreted as markdown when xxx begins with a non-word character (e.g. __-1__) [<a href="http://github.com/doxygen/doxygen/commit/a95c07ecc0a2f1205883d8420a8280c5701c901c">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=773231">773231</a> - Underscores in type or member name cause unwanted hyphenation in PDF output Data Fields [<a href="http://github.com/doxygen/doxygen/commit/d571efb062fbe17d7257f3971e3db6c9cba833d0">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=773354">773354</a> - "name" attribute of image map not urlencoded, not working in Chrome [<a href="http://github.com/doxygen/doxygen/commit/6300c03b6201ca7981388a6d3c01486f8a8adba0">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=774138">774138</a> - Please add HTML classes to "Definition at..." & "Referenced by..." for CSS [<a href="http://github.com/doxygen/doxygen/commit/d2593e56cd52ecee2424d844916f95e12fef27c8">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=774273">774273</a> - INLINE_SIMPLE_STRUCTS with enums in classes does not work [<a href="http://github.com/doxygen/doxygen/commit/71d7a9399db016cba83ccd63c6ba7e0fac1cd44d">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=774514">774514</a> - Modify in some pronounciation expression in Korean [<a href="http://github.com/doxygen/doxygen/commit/cd3e39d7db634d9e11afc8e46269eb509ae10e40">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=774949">774949</a> - Unknown reference in manual [<a href="http://github.com/doxygen/doxygen/commit/dde15c9748053ecb68ba046ebd0fdfe625be0e2e">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=775245">775245</a> - referencing Python files via tagfile broken [<a href="http://github.com/doxygen/doxygen/commit/dc02bb977ebc6c683012c106e16e0190ac72b454">view</a>] +<li>Add NVARCHAR as a SQL type [<a href="http://github.com/doxygen/doxygen/commit/6a85240e65bb5e3d59d2cd161eb8cf241e27ed7d">view</a>] +<li>Add mscgen images to index.qhp [<a href="http://github.com/doxygen/doxygen/commit/f50d9ed4cdc7d4e7884bb64fddb01b017b880778">view</a>] +<li>Add sql syntax highlighting to code blocks [<a href="http://github.com/doxygen/doxygen/commit/adf4a90340921cf7a120ae918af776355cf8ca0f">view</a>] +<li>Add support for more CSS formatting and column/row spanning in markdown tables [<a href="http://github.com/doxygen/doxygen/commit/7f35695022d3baa8fc8c8d1b9a9f3368a0963871">view</a>] +<li>Added missing language value for SQL to XML output [<a href="http://github.com/doxygen/doxygen/commit/b196b1a28151d75d9546dcc407947fbf29789cc5">view</a>] +<li>Adds plantuml support Qt compressed help file [<a href="http://github.com/doxygen/doxygen/commit/c7b740d96288f19e31bd35405306c49bb9fc20c4">view</a>] +<li>Check for undocumented params warnings if members detailed documentation is not written [<a href="http://github.com/doxygen/doxygen/commit/bae3c91812f8a6f845337f8c32d55495c4aa3522">view</a>] +<li>Cleanup: removed redundant =NULL from interfaces, or replaced by =0 where it was needed. [<a href="http://github.com/doxygen/doxygen/commit/3b8b2e1a4b846a5c1b87f4a8ddc837462709895a">view</a>] +<li>Clear header/footer information in ConfigImpl for postProcess [<a href="http://github.com/doxygen/doxygen/commit/5881b1bb624ee6115dc635ba44366d259cc6a10f">view</a>] +<li>Documentation small corrections [<a href="http://github.com/doxygen/doxygen/commit/ae033324fed6ff9b3febe12b5777f19c04e065d2">view</a>] +<li>Doxygen error: Found ';' while parsing initializer list [<a href="http://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60">view</a>] +<li>Fix for PlantUML configuration [<a href="http://github.com/doxygen/doxygen/commit/701598719c7c4301f2614b38184dfb37cd1704bc">view</a>] +<li>Fix plantuml generation issue [<a href="http://github.com/doxygen/doxygen/commit/6c87c75e197e673d74949839d59fe8b0842e86ff">view</a>] +<li>Fix: Add missing jquery.js, dynsections.js & optional svgpan.js to QCH file [<a href="http://github.com/doxygen/doxygen/commit/bf9415698e53d79b4b94bdf64a52be4347eb3150">view</a>] +<li>Fix: replace deprecated {\bf with \textbf{ in LaTeX generator [<a href="http://github.com/doxygen/doxygen/commit/1d85e00dd1238f74babf0a1d7eeeaf3e2ba659f2">view</a>] +<li>Fixed constexp.y bison issue [<a href="http://github.com/doxygen/doxygen/commit/e12ec76f044b07d4e4fe167c93103be2879abaca">view</a>] +<li>Fixed cross referencing issue when using bitfields. [<a href="http://github.com/doxygen/doxygen/commit/2a5357a0fac644ffb1bf49569344b9bc57603a29">view</a>] +<li>Fixed jump to anchor issue when navigating to source file [<a href="http://github.com/doxygen/doxygen/commit/94b726f4273df805846d7fdcd2e9d5bd7627f628">view</a>] +<li>Fixed problem generating per letter namespace member index pages. [<a href="http://github.com/doxygen/doxygen/commit/2b722b57f20e044b061423109bfa7168a7a1b913">view</a>] +<li>Fixed svgpan.js issue with Chrome causing empty SVG graphs [<a href="http://github.com/doxygen/doxygen/commit/5f01f783e2387a5d44ad70fbff5365aa0e5df938">view</a>] +<li>Fixed typedef and define strings for Spanish translation [<a href="http://github.com/doxygen/doxygen/commit/f69eb5d79885788d6bfc6303f34f5f016b326f1c">view</a>] +<li>Fixup man only output to use generator state push pop [<a href="http://github.com/doxygen/doxygen/commit/051fb8a536e1d52aa0a0422186975852dd139c06">view</a>] +<li>For manpages remove trailing dash when no brief description [<a href="http://github.com/doxygen/doxygen/commit/98d3f8e7d581c589e7bd1a7faf98fc6736847cf1">view</a>] +<li>Made the RTF output honor the PAPER_TYPE option. [<a href="http://github.com/doxygen/doxygen/commit/5e894a760a6584ade2f5417e2577b66c65b51fd9">view</a>] +<li>New classes for generated HTML div elements. [<a href="http://github.com/doxygen/doxygen/commit/84017cac3bc9d08aa95a90cf0e44b913c492c939">view</a>] +<li>Option for PlantUML configuration file [<a href="http://github.com/doxygen/doxygen/commit/d4b0b88e189027d514fa84de75100ff1fe6e681a">view</a>] +<li>Removed x flag from util* source files [<a href="http://github.com/doxygen/doxygen/commit/16d57031188698c7e79dd64554efc56044e91c8f">view</a>] +<li>Replaced section marker before members by diamond shaped bullet [<a href="http://github.com/doxygen/doxygen/commit/da21ad5b5147182c2117751d8c517b81dd57277f">view</a>] +<li>Reverting pull request #537 until it will be fixed [<a href="http://github.com/doxygen/doxygen/commit/fd67ef1f66afb0b51a784866b806ba8f04e12dfb">view</a>] +<li>Update Swedish translation [<a href="http://github.com/doxygen/doxygen/commit/78b43ec9b5469a9e757cd658d21907fa593ed1aa">view</a>] +<li>Updated the Polish translation [<a href="http://github.com/doxygen/doxygen/commit/158b7bdb697d19736692105161af3e891ae7732e">view</a>] +<li>bison: use %declarations instead of command line options. [<a href="http://github.com/doxygen/doxygen/commit/97c2c1d6f323d6d38dda4820c00ca8ca8f5b6940">view</a>] +<li>flex: use %option instead of command line options. [<a href="http://github.com/doxygen/doxygen/commit/0bdb01d4b6ced07750d8e449fd4ffab5554d8a24">view</a>] +</ul> +<p> +\endhtmlonly + +\subsection log_1_8_12 Release 1.8.12 +\htmlonly +<b>(release date 05-09-2016)</b> +<a name="1.8.12"></a> +</p> +<ul> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306025">306025</a> - Fix missing title in non-page docanchors from tag files [<a href="http://github.com/doxygen/doxygen/commit/616b392e9bc8984251d969577a5b63974efb1eef">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=504305">504305</a> - FILTER_PATTERNS won't take command with arguments [<a href="http://github.com/doxygen/doxygen/commit/ce7a983c2849e4c8fa72189a896e594a8497dd4c">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675165">675165</a> - Uses <img> instead of <object> html tag for SVG images [<a href="http://github.com/doxygen/doxygen/commit/8ccd98643a3b88aaa3245b76202666900a2cd401">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700381">700381</a> - error state 21 with fortran code (fixed format) [<a href="http://github.com/doxygen/doxygen/commit/fdee5e9fade0ff5a578817048c6205f2a9acbced">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=710611">710611</a> - Missing Page References in the Index Chapters of the LaTex/PDF output [<a href="http://github.com/doxygen/doxygen/commit/efd49dacfbae1ad55d7922a748e2c1d60068b014">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722654">722654</a> - Inherited member of template class issues warning and is not documented [<a href="http://github.com/doxygen/doxygen/commit/4dfc5887660284b345eb93b6c07dc1f91e780fac">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=742452">742452</a> - Fortran: attributes after a blank line are ignored / Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625602">625602</a> - FORTRAN: comment in subroutine argument list [<a href="http://github.com/doxygen/doxygen/commit/e9ebf43585bffee80c31dd69538feae2a4525178">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=749924">749924</a> - Doxygen handles comments in Objective-C code blocks incorrectly. [<a href="http://github.com/doxygen/doxygen/commit/c2e0ce14c65584f42e875f0abdbe5466d1414636">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=750930">750930</a> - Representation of arrows [<a href="http://github.com/doxygen/doxygen/commit/ab96c077a8cd99308e6ae90c3c861ab1c0e911d7">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751416">751416</a> - Markdown: > escaped within backticks [<a href="http://github.com/doxygen/doxygen/commit/5f9d80b2ce73a7e7fb0f4fc16f3ef5fee0cf8105">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751984">751984</a> - Use UTC timezone when displaying QDateTimes parsed from SOURCE_DATE_EPOCH [<a href="http://github.com/doxygen/doxygen/commit/5801460b3141871222569fb99e7964e9a2925d71">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=752712">752712</a> - last entry missing in a @name group of typedefs [<a href="http://github.com/doxygen/doxygen/commit/ee2d6faecab57c1f929d6868ae6eb9bdaa53d654">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=753608">753608</a> - Link of typedef within namespace on group pages missing [<a href="http://github.com/doxygen/doxygen/commit/0bd419e0a4fabf615fb72eb92bf561d3dfc96a11">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=757509">757509</a> - __init__.py causes to ignore some inheritance [<a href="http://github.com/doxygen/doxygen/commit/607b8a302297169e4319280dba2a61dcbe042965">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=760086">760086</a> - Figure title needs to be on separate line in order for it to work [<a href="http://github.com/doxygen/doxygen/commit/07521a7f050607609b9d04e8f3c58ed4754c47c3">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=760836">760836</a> - Phantom variables/functions in XML, created from non-code files [<a href="http://github.com/doxygen/doxygen/commit/7dc9b378a107b1ccae2245b3f3f3d628db2bd008">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=760970">760970</a> - CASE_SENSE_NAMES ignored [<a href="http://github.com/doxygen/doxygen/commit/fab854a10f358c15a69291a59388ea0c184bce20">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=761007">761007</a> - Spaces between the closing bracket of the typename and the opening bracket of the parameter list cause detection issues. [<a href="http://github.com/doxygen/doxygen/commit/622d18637f9d633b184e43fd3594b661cf4e9375">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=761139">761139</a> - python unicode docstrings are ignored [<a href="http://github.com/doxygen/doxygen/commit/936f242956350825d870f7396ae5d6106fe3081d">view</a>] +, [<a href="http://github.com/doxygen/doxygen/commit/be100f882604a23d94025fee6d059bdb5ec28d3e">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=761471">761471</a> - Do not allow ligatures in log output [<a href="http://github.com/doxygen/doxygen/commit/894bdfdf268ba24a268fa72d7b33899a9f3a126b">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=762670">762670</a> - References for one function can inherit References from subsequent non documented function [<a href="http://github.com/doxygen/doxygen/commit/9abcad810b8d41d338d501ff5b32524e1ced7f33">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=762934">762934</a> - External search does not properly escape user supplied data, resulting in vulnerability [<a href="http://github.com/doxygen/doxygen/commit/1cc1adad2de03a0f013881b8960daf89aa155081">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=762982">762982</a> - regression, Unescaped percent sign in doxygen output [<a href="http://github.com/doxygen/doxygen/commit/d4ab02c2da7df472bebbf2724419ba00f2de229c">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=763104">763104</a> - hyperref link label drop underscores [<a href="http://github.com/doxygen/doxygen/commit/537a1c67f316c5a9d2d4542e94a4ace439a78b3a">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=763105">763105</a> - Directory list is not generated in HTML output [<a href="http://github.com/doxygen/doxygen/commit/b6b87054121422009f2d5316a279869faaa33d16">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=763471">763471</a> - imported section anchors are copied in project tagfile [<a href="http://github.com/doxygen/doxygen/commit/8542ec9c8647da15de486635de40c25f99fc8c63">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=763720">763720</a> - Exclusion of a new line at the end of source code file causing nesting of HTML code for function documentation [<a href="http://github.com/doxygen/doxygen/commit/7228bca81e8d054413f85f8758fc13866ab4b85b">view</a>] +, [<a href="http://github.com/doxygen/doxygen/commit/c2c9ed6bd2a94ad25f31a22f70489406c52e5e6f">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=764359">764359</a> - Recent File list allows only 2 entries [<a href="http://github.com/doxygen/doxygen/commit/0f53af1270a0032d4c24d93aeb7cce245427bf8d">view</a>] +, [<a href="http://github.com/doxygen/doxygen/commit/48b1c6e240238f7dc3965735dfb00900d2c75383">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=764515">764515</a> - doxygen crashes no resolved [<a href="http://github.com/doxygen/doxygen/commit/0e45c10d7db6dc82aa0828df7e30ec4c8c5a1f97">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=764656">764656</a> - generated xml has errors [<a href="http://github.com/doxygen/doxygen/commit/d3078f4e2e0fcb6dd5f82781b54dab8647f7ccc4">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=764711">764711</a> - quick link index in alphabetical class list in classes.html doesn't work [<a href="http://github.com/doxygen/doxygen/commit/ec1ef7b4971540bbe042b16d7ebd3f2a0e0e57f1">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=765001">765001</a> - Bad character escaping scheme in HTML anchor generation. [<a href="http://github.com/doxygen/doxygen/commit/6136cf9e3ad70d58cac4d8022cce8c8729805119">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=765002">765002</a> - `@addindex`entries fail to link to the exact location in Compiled HTML Help. [<a href="http://github.com/doxygen/doxygen/commit/8dea6e11faf3969c3b6b17b700533f43c9ca73f8">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=765070">765070</a> - Java: final keyword on a parameter brakes docs inherinance [<a href="http://github.com/doxygen/doxygen/commit/dfd0336f1a97e189d49e29860db1c43915aced76">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=765692">765692</a> - Using `@page` to add title to Markdown file generates surplus empty page. [<a href="http://github.com/doxygen/doxygen/commit/42c7d88ffc11651d1fb6b997fd23cc938bce4a39">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766059">766059</a> - DOT_PATH not expanded [<a href="http://github.com/doxygen/doxygen/commit/752523cd122d6ffdd72c89955005d77819740675">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766069">766069</a> - Files with incorrect extensions (.doc) are picked up by doxygen [<a href="http://github.com/doxygen/doxygen/commit/14b04be2af279e1093f17d6b933d1e9ab530e128">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766464">766464</a> - python: missing cross-links in sources (option SOURCE_BROWSER = YES) [<a href="http://github.com/doxygen/doxygen/commit/f3aeedf7b570c0c06af44a4f8bb66eba6b78c2f2">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766698">766698</a> - VHDL: missing last sign in html documentation of constant declaration [<a href="http://github.com/doxygen/doxygen/commit/b00761b30a1d399f95adfe823937c05a64476155">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766787">766787</a> - HTML Tables with 10+ columns are broken for LaTeX based output [<a href="http://github.com/doxygen/doxygen/commit/61919f5483c717370742f2d238dcac88695d1990">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=766809">766809</a> - Enumerations heading present but none listed [<a href="http://github.com/doxygen/doxygen/commit/e7ac59b018cdf609cc7c6819f38a7de05c699058">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=767171">767171</a> - ALIASES stop working after verbatim with formula and /** */ [<a href="http://github.com/doxygen/doxygen/commit/36731bc9b573cdee6d699d0f66b4b34ad5b8f9ac">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=768830">768830</a> - Doxygen segfault (return code 134) when parsing a c++ enum class contained in a class [<a href="http://github.com/doxygen/doxygen/commit/f37c0e58c47c43e96417d4dcf1559e3f9d1b323b">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=768954">768954</a> - Segmentation fault when processing md containing only header [<a href="http://github.com/doxygen/doxygen/commit/0d9fc8dc45de49a050b1d13f03ff9f4713f736fb">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=769018">769018</a> - Invalid XHTML if the directives brief and exception are following immediately [<a href="http://github.com/doxygen/doxygen/commit/1c8d2ecc67997ee88dfabbeafdbc2e9805a10e3f">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=769028">769028</a> - Can't scroll using finger documentation in Chrome browser on Android OS [<a href="http://github.com/doxygen/doxygen/commit/478c1475ba8cbe508c39589c639662e317b959db">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=769736">769736</a> - doxygen generates incorrect documentation for C enum in latex [<a href="http://github.com/doxygen/doxygen/commit/5b2e30aa0847f622e053b6ac6aa9c727f7ea42b3">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=770660">770660</a> - Code snippet always shows line numbers from 1 [<a href="http://github.com/doxygen/doxygen/commit/9ae1af9b8679a0f14cb568d1db3afcc6e3ba40a6">view</a>] +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=770747">770747</a> - Broken links in HTML output with SHOW_FILES=NO [<a href="http://github.com/doxygen/doxygen/commit/d2eeb765ffcf808812e7ac1c846dee97b85ad4bf">view</a>] +<li>Add caption in verbatim blocks. [<a href="http://github.com/doxygen/doxygen/commit/f075557bf207d67cf2638298cbdd843cc1a2f7d7">view</a>] +<li>Add parameter in/out specifiers to output. [<a href="http://github.com/doxygen/doxygen/commit/5592c705d8ac98f579e2675c12777330c4c322c9">view</a>] +<li>Add section title to output. [<a href="http://github.com/doxygen/doxygen/commit/989a0137df8f8e11df67de1a2ded73712b46a8fd">view</a>] +<li>Added .codedocs file [<a href="http://github.com/doxygen/doxygen/commit/5dee6e8aab6f8c76203a3296ef374e035cf55d34">view</a>] +<li>Added an option to add "anonymous" headings to the table of contents (currently Markdown only). [<a href="http://github.com/doxygen/doxygen/commit/7e564896fcc41c2b1a6bd5c86ebebab0de7ea5f9">view</a>] +<li>Added generating template files and reading templates from disk if present [<a href="http://github.com/doxygen/doxygen/commit/d38d33cef2241cd8d29c99f519d21ae225453357">view</a>] +<li>Added missing free [<a href="http://github.com/doxygen/doxygen/commit/4dc6c6c2f01b7b7bda82f5c3dbf4f78e489341bc">view</a>] +<li>Added support for encoding tag to the template engine used for HTML help indices [<a href="http://github.com/doxygen/doxygen/commit/7b887cfbffd73ea12fe0171c149f49c4540aac40">view</a>] +<li>Adding compilation options for flex/lex and bison/yacc [<a href="http://github.com/doxygen/doxygen/commit/c873fad0b4c2948551e53c082a3829243c4ccb9f">view</a>] +<li>Adding partial htmlhelp support to template system [<a href="http://github.com/doxygen/doxygen/commit/d3f2fcd53000fc4a09cf56c90930f8c8e2ad02b4">view</a>] +<li>Adjusted Doxygen to doxygen in running text in the manual [<a href="http://github.com/doxygen/doxygen/commit/4f80d144f98fc998de5118855eec73797a65bf2e">view</a>] +<li>Allow verbatim code block to be placed on the output. [<a href="http://github.com/doxygen/doxygen/commit/4530978dba88a0d6ccc369e480e6b9a98d29fa1e">view</a>] +<li>Also map .f95, .f03 and .f08 file types to Fortran [<a href="http://github.com/doxygen/doxygen/commit/dc6019413c4609c49322e80d1ec2b089e85486f3">view</a>] +<li>Another possible fix [<a href="http://github.com/doxygen/doxygen/commit/445347566078a1cc64705f28932e1da5bf9f531f">view</a>] +<li>Applied responsive design to menu bar using smartmenus [<a href="http://github.com/doxygen/doxygen/commit/8480d35beef57ed08139b58972bfb83a3b37422c">view</a>] +<li>Assertion failure generation documentation [<a href="http://github.com/doxygen/doxygen/commit/fdefe70a955c8140f080974319bbf97364d3e610">view</a>] +<li>Bug fix for rendering the VHDL Hierarchy (thanks to a patch by Martin Kreis) [<a href="http://github.com/doxygen/doxygen/commit/10256be351f8f00ba5986750a08df1108bf6a4f7">view</a>] +<li>Building doxyapp fails after update of config methodology to improve performance [<a href="http://github.com/doxygen/doxygen/commit/cf1706776bd93367dd357f505d04a7b10553f65f">view</a>] +<li>Bump version for GIT repo [<a href="http://github.com/doxygen/doxygen/commit/295a467a2ebee260d95c7bb3e3c616554b7782b1">view</a>] +<li>CMAKE: Fix building on Windows with VS 2015 [<a href="http://github.com/doxygen/doxygen/commit/6b80cc4181dc73a061b049e3283e6e2d8a4e5346">view</a>] +<li>Changed configuration mechanism to directly access options in order to improve performance [<a href="http://github.com/doxygen/doxygen/commit/a93ec7221d1a258f0268e0c081782478372efe0b">view</a>] +<li>Code with "extension" unparsed shows line numbers [<a href="http://github.com/doxygen/doxygen/commit/2b229f69041023f5f473385ee587ef7743850f55">view</a>] +<li>Color code word OPERATOR and ASSIGNMENT as keyword in FORTRAN code [<a href="http://github.com/doxygen/doxygen/commit/3f559575d63f2fd29888107afae85f4cc902b189">view</a>] +<li>Color code word RESULT as keyword in FORTRAN code [<a href="http://github.com/doxygen/doxygen/commit/0f047eb1862193713889d10bccb4894df1f7c23d">view</a>] +<li>Determination of end of parameter list [<a href="http://github.com/doxygen/doxygen/commit/80f08d11c9a21db86bbeb106194f4e76f67bd50e">view</a>] +<li>Disable selecting line number [<a href="http://github.com/doxygen/doxygen/commit/7bda78adac5d72396526c503325020a11cc12464">view</a>] +<li>Disabled debug prints [<a href="http://github.com/doxygen/doxygen/commit/3e03e42e2b10bf2ccba5ab35e52c665ac35cfa15">view</a>] +<li>Documentation for extensions .f95, .f03 and .f08 [<a href="http://github.com/doxygen/doxygen/commit/4c2e91c10dc6d007c410cd282a00fc7a42d38a0d">view</a>] +<li>Doxygen fails to copy logo image to LaTex output dir [<a href="http://github.com/doxygen/doxygen/commit/711c6c0bee87d47d70b3ffa9ca8b39b704e91723">view</a>] +<li>FORTRAN determination string in preprocessing [<a href="http://github.com/doxygen/doxygen/commit/4a7673fed2f28a24e0c7e8bb94621b0e14ac9ed5">view</a>] +<li>Feature: Translations for german language (changes since 1.8.4) [<a href="http://github.com/doxygen/doxygen/commit/261077497f2bcc3364e182e338d914c470a0a235">view</a>] +<li>Fix STRIP_FROM_PATH when running from drive root [<a href="http://github.com/doxygen/doxygen/commit/fd808ae3c1e37a8d476d250cf6b4325624a9eccb">view</a>] +<li>Fix Windows build instructions. [<a href="http://github.com/doxygen/doxygen/commit/eec8d0a31161746041fc94ccbba5a54aecd8cf93">view</a>] +<li>Fix documentation typos [<a href="http://github.com/doxygen/doxygen/commit/770adb37b2072bbea5412f9cc2058d98d1de60e4">view</a>] +<li>Fix for HTML output when using server side search and the the new menu bar [<a href="http://github.com/doxygen/doxygen/commit/0faf45600c6c640bfaf11b017d43a4b9de193ebf">view</a>] +<li>Fix for changed references due to different removeRedudantWhiteSpace() implementation [<a href="http://github.com/doxygen/doxygen/commit/f26cc41d0d3d436c809c293a56c66c1f5f953745">view</a>] +<li>Fix for empty file name [<a href="http://github.com/doxygen/doxygen/commit/0fead5249b8ef2c3c5cbbbd712855bae877aa27b">view</a>] +<li>Fix for error in travis.yml [<a href="http://github.com/doxygen/doxygen/commit/81cf39f249c58db66368d60d596ac164d886ae90">view</a>] +<li>Fix issue escaping backslash inside markdown style code span [<a href="http://github.com/doxygen/doxygen/commit/402970f77f961b85b6371c8e53bd69981435c2d7">view</a>] +<li>Fix linker flags for building with clang on Windows [<a href="http://github.com/doxygen/doxygen/commit/41846b467bea58b904e26ce139394f7371ea5870">view</a>] +<li>Fix order of member initilaization [<a href="http://github.com/doxygen/doxygen/commit/6b1ebb6bcb345d8997054492c21276dc2dc36416">view</a>] +<li>Fix return-type warnings with -DNDEBUG [<a href="http://github.com/doxygen/doxygen/commit/f4574baf118da6aa2051b865040a9948bb0d22c9">view</a>] +<li>Fix search box rendering in HTML when menu bar is disabled [<a href="http://github.com/doxygen/doxygen/commit/ee9a0664c03c306d0aeb127295ced29f8078ae03">view</a>] +<li>Fix uppercase letters B-Z being unnecessarily escaped in index HTML anchors. [<a href="http://github.com/doxygen/doxygen/commit/0f699ab17cb88beff0ae4aa9b10042c0ccaff937">view</a>] +<li>Fixed for index.hhp output when using template engine [<a href="http://github.com/doxygen/doxygen/commit/e629fc64d42121e86bf2230a3b515d1d0d868dcd">view</a>] +<li>Fixed issue escaping ndashes (\--) and mdashes (\---) [<a href="http://github.com/doxygen/doxygen/commit/ef56187f733d946e4df130d9783eadea41ec1c97">view</a>] +<li>Fixed problem with -w command when no Doxyfile was present and specified [<a href="http://github.com/doxygen/doxygen/commit/7c3126407bbb46717a4e0a09b61ee001702af7bf">view</a>] +<li>Fixed two regressions found during extensive testing [<a href="http://github.com/doxygen/doxygen/commit/d9166baf589f50e94597829b04d0cabee4573130">view</a>] +<li>Fixed typos. [<a href="http://github.com/doxygen/doxygen/commit/a787b94d11e9f337570bfab1d36a36b37438ccea">view</a>] +<li>Fixed wrong <p> nesting issue for call/caller graphs [<a href="http://github.com/doxygen/doxygen/commit/50c78a6f0d720617c5a82045b5b2cd18882a15a9">view</a>] +<li>Fortran inline source code and crash on Linux [<a href="http://github.com/doxygen/doxygen/commit/661991e55f7ae18e8143733f364d9d7864ec66d9">view</a>] +<li>Improve output on mobile devices [<a href="http://github.com/doxygen/doxygen/commit/e0dc837a14a466dd4fb58a0a1e6e72b5c400f563">view</a>] +<li>Improved list of files in htmlhelp.hhp [<a href="http://github.com/doxygen/doxygen/commit/f7a05140593d854955151e4286205ef1f908e07b">view</a>] +<li>Improved sorting performance for directories and files [<a href="http://github.com/doxygen/doxygen/commit/5475bf2e9a0f1517567186b47595b8dad2b6b3a3">view</a>] +<li>Include command show line number (e.g. LaTeX) [<a href="http://github.com/doxygen/doxygen/commit/a4bde1e1e71a24d6c714377be4265e95deb1acf3">view</a>] +<li>Initialization of python variables and type determination [<a href="http://github.com/doxygen/doxygen/commit/46ba7769c4a0600c47f3de6871815398bab7ca91">view</a>] +<li>Introducing commands includedoc and snippetdoc [<a href="http://github.com/doxygen/doxygen/commit/ba848363081c44c9aa9e91b193054983f562e90c">view</a>] +<li>Latex page numbering [<a href="http://github.com/doxygen/doxygen/commit/044f2c49882815f58c88b12a0086ad71dd97f071">view</a>] +<li>Minor build fixes [<a href="http://github.com/doxygen/doxygen/commit/5a7a5477cd60ea7cc10b8132862a4928af788028">view</a>] +<li>Minor correction for BUILD.txt [<a href="http://github.com/doxygen/doxygen/commit/89ef13dbb6c8ac81a9c118f4f031c45cdc66e3a3">view</a>] +<li>Minor performance improvement sorting directories [<a href="http://github.com/doxygen/doxygen/commit/67827956351f78516a7c48df366dcf521c51c6eb">view</a>] +<li>Minor update to the installation instructions [<a href="http://github.com/doxygen/doxygen/commit/840d3d18a172edaf92f7780340b1aee4198846fe">view</a>] +<li>Missing semicolon in navtree.css [<a href="http://github.com/doxygen/doxygen/commit/360987c61462c185942e5055a345dd777920216a">view</a>] +<li>Modified (readability) layout for member title in HTML and LaTex [<a href="http://github.com/doxygen/doxygen/commit/a2ae382198092537b6b5c85f9c7e5615046d3c78">view</a>] +<li>Optimized use of convertNameToFile to improve performance [<a href="http://github.com/doxygen/doxygen/commit/d168f8bfef6aac5a71eccad36dced78d55765ae1">view</a>] +<li>PDF generation stops when image with caption is included in a table. [<a href="http://github.com/doxygen/doxygen/commit/1d77a4ed407aaa24eae53f501d1a5ce38b352504">view</a>] +, [<a href="http://github.com/doxygen/doxygen/commit/7b0b7ef746ae15df3894847f5b43a29ae20c9599">view</a>] +<li>Parse more than 1 size indiction in defaultHandleTitleAndSize [<a href="http://github.com/doxygen/doxygen/commit/2bcf196332084067c3d2409fa07992a6b833473d">view</a>] +<li>Problem jumping to line number in source code due to wrong hypertarget name [<a href="http://github.com/doxygen/doxygen/commit/ed875603dc42d3a5ebbcfd89540b1f7ecf472ece">view</a>] +<li>Python strip code comments [<a href="http://github.com/doxygen/doxygen/commit/a19feec4a7864dc17fcb570330ae2f7b9a5c6e45">view</a>] +<li>Reimplemented node renumbering for dot graph to improve performance [<a href="http://github.com/doxygen/doxygen/commit/fb66cae35cd59d1026fe3c6de46ae3a2ed6f9f91">view</a>] +<li>Remove unused variables [<a href="http://github.com/doxygen/doxygen/commit/aa61a4b33e2dd5c0f4809dd23f4561bd225270f9">view</a>] +, [<a href="http://github.com/doxygen/doxygen/commit/e698e53d2c04833143e5ab60f0983e3c683cf85d">view</a>] +<li>Removed ambiguity in the XML schema definition [<a href="http://github.com/doxygen/doxygen/commit/13946338f9e5fcdb6dca7f8e4c2429ca000455fb">view</a>] +<li>Revert #291 [<a href="http://github.com/doxygen/doxygen/commit/6ea76e0d89aff8399117e602a3eab1f7d93e466b">view</a>] +<li>Simplified code of fix for Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=765001">765001</a> [<a href="http://github.com/doxygen/doxygen/commit/e70b45fa4398450b588122f9d36b1ed514fc336a">view</a>] +<li>Sorting in latex index and missing \@ in index [<a href="http://github.com/doxygen/doxygen/commit/558958dca5e5cb50bd33f3344cab151aba9ce076">view</a>] +<li>Split apt-get install commands in travis config in an attempt to reduce timeouts [<a href="http://github.com/doxygen/doxygen/commit/2f6f48567cb48d21361237a7905e27744e0acf91">view</a>] +<li>Style fixes and added numbering to overloaded members [<a href="http://github.com/doxygen/doxygen/commit/5af8d5e87657a2d3986783493c618df335b3771c">view</a>] +<li>Table of contents breaks when documentation spans multiple comment blocks with same @page [<a href="http://github.com/doxygen/doxygen/commit/7f7f7273f816335d556668b86aa99d05f7f09992">view</a>] +<li>Unified display of enum values across output formats and languages [<a href="http://github.com/doxygen/doxygen/commit/9c915b83bc06babe6f0127f6446143ea50d00b62">view</a>] +<li>Unify handling of extra packages in formula.cpp and latexgen.cpp so formula.cpp handles package arguments correctly [<a href="http://github.com/doxygen/doxygen/commit/4d2e203a55a2af8f15a3933b86201e6e9b6901b3">view</a>] +<li>Update LICENSE file to latest from FSF [<a href="http://github.com/doxygen/doxygen/commit/48eb44a00b4b805fda0da82620d7efb135116d23">view</a>] +<li>Update copyright year in docs [<a href="http://github.com/doxygen/doxygen/commit/b721f6e1707f8cc446c0d7f9956e6d4aa9f17bc9">view</a>] +<li>Updated README.md to include code docs [<a href="http://github.com/doxygen/doxygen/commit/3911ebdad44a91a6b825051a1ae0f7b280c84567">view</a>] +<li>Updated stylesheet for the manual to fix layout issue in the navigation tree [<a href="http://github.com/doxygen/doxygen/commit/64597bbe46169c08b591a8714f48d314c5341cc2">view</a>] +<li>Warnings from CLANG compiler [<a href="http://github.com/doxygen/doxygen/commit/fdfb027f346c30d6cd209b366e6cb879fb11cbcb">view</a>] +<li>fix ninja build error [<a href="http://github.com/doxygen/doxygen/commit/c4cdfdf65073824d7badb38a1f535310b93d50a9">view</a>] +<li>fixed rtf subsection [<a href="http://github.com/doxygen/doxygen/commit/17bd813313cf073a437001f2fa550f286458586e">view</a>] +<li>mangen.h: remove italic in brief member descriptions [<a href="http://github.com/doxygen/doxygen/commit/5716f0aee08bfc9daf7ab7e22566e5acc51446d0">view</a>] +<li>reimplemented removeRedundantWhiteSpace() to improve performance [<a href="http://github.com/doxygen/doxygen/commit/00ee930a1d73e11885197102c54fd4c8141127da">view</a>] +<li>sqlite3gen: defnname -> defname [<a href="http://github.com/doxygen/doxygen/commit/79a53cc464ef814adf6b64d45a15fee6676f15d6">view</a>] +<li>sqlite3gen: export proper memberdef refid [<a href="http://github.com/doxygen/doxygen/commit/918cf6871359da9d14dd6d3e7c4d00d6ca9a496e">view</a>] +<li>sqlite3gen: insert xrefs using integer refids [<a href="http://github.com/doxygen/doxygen/commit/bac76c1957de71e3e0bddc23ccd46b7b2537c8a1">view</a>] +<li>sqlite3gen: stripFromPath on all calls to insertFile [<a href="http://github.com/doxygen/doxygen/commit/87222afcfe6089899c8ded60b23692fd40997856">view</a>] +<li>sqlite3gen: stripWhitespace on bitfield's text [<a href="http://github.com/doxygen/doxygen/commit/6f4561608adaf8230c2fa015770dfeeab5ce3ba8">view</a>] +<li>sqlite3gen: sync with xmlgen [<a href="http://github.com/doxygen/doxygen/commit/8208b2d5514a3c29659ae967da544adc21585212">view</a>] +<li>sqlite3gen: use the refid stored in the refids table [<a href="http://github.com/doxygen/doxygen/commit/9b02db93e7e78aedc0a0ca7fd2701c81dc153487">view</a>] +</ul> +<p> +\endhtmlonly + +\subsection log_1_8_11 Release 1.8.11 +\htmlonly +<b>(release date 30-12-2015)</b> +<a name="1.8.11"></a> +</p> +<ul> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=149792">149792</a> - Mainpage title has wrong style in RTF [<a href="http://github.com/doxygen/doxygen/commit/021dfd44f2dbeeaac1b9aff95ddc2a3eae173eb4">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/83f23a4f7f7d1351ef89a4e54db6628a9d582dc5">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=333106">333106</a> - $line param [<a href="http://github.com/doxygen/doxygen/commit/993972cd242527ddf929756141a68cccfc8ecef9">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=361814">361814</a> - python: tuple assignment not recognized as variable initialization [<a href="http://github.com/doxygen/doxygen/commit/015955e0badb6082a1e553392acaeb6890734c31">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=485701">485701</a> - Fixes angle brackets (< and >) not escaped in HTML formula alt text [<a href="http://github.com/doxygen/doxygen/commit/64adce8b82c332b3855cdfaaa71afc984ffc4ca9">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=578720">578720</a> - [Python] Add pyw as a valid extension [<a href="http://github.com/doxygen/doxygen/commit/5924acd279f82d8db7ddb33a6ec67937084d7c31">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593642">593642</a> - Python: STRIP_CODE_COMMENTS Doesn't work within the source code [<a href="http://github.com/doxygen/doxygen/commit/4cad0c9ac3492dd504104b15c9a03ef903950e15">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595186">595186</a> - Python ignores \private tag [<a href="http://github.com/doxygen/doxygen/commit/8782107300b24ac5501d8a5ada9be0859a0ee432">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606104">606104</a> - Deprecated list: Wrong prefix '<globalScope>::' for global functions [<a href="http://github.com/doxygen/doxygen/commit/a5288aca31ccecb78b561b4f382fe6c559bea9f9">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629249">629249</a> - Incorrect "References" and "Referenced by" [<a href="http://github.com/doxygen/doxygen/commit/43c415708be4c2d4065ecda9870d361b0beb0f09">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641036">641036</a> - python script with #!/usr/bin/python are not documented correctly [<a href="http://github.com/doxygen/doxygen/commit/322d09de48c07cf7258825e3e7733d5d994e70cf">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646002">646002</a> - htmlonly content appears in generated XML output [<a href="http://github.com/doxygen/doxygen/commit/02ce4f0b2b58ef32dd783b359daf7cc01079462a">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/6004d659c1ca280acc6588351176be63b55faf70">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=648865">648865</a> - PYTHON: stops processing the file after encountering \"""" [<a href="http://github.com/doxygen/doxygen/commit/59fdba0dd1e3765a2f53b222fdc9455114f720b1">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661814">661814</a> - writeMemberNavIndex template calls static fixSpaces [<a href="http://github.com/doxygen/doxygen/commit/69d5ffaa68210a6e63a618ef304c63462f6e1fac">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682373">682373</a> - Math does not work in LaTeX with custom header and footer. [<a href="http://github.com/doxygen/doxygen/commit/c713984bf6a4c9e8c2ea393b304682ce4a56358f">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731509">731509</a> - Markdown backticks not processed within Markdown links. [<a href="http://github.com/doxygen/doxygen/commit/205f7335bca570e87afc0df07bd355848c7af2e3">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732356">732356</a> - doxygen's \param command is confused by some python default values [<a href="http://github.com/doxygen/doxygen/commit/6447c90acb51807d272ce2f24a94574a413d36e0">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=735152">735152</a> - Python: Allow undocumented "cls" parameter for class methods [<a href="http://github.com/doxygen/doxygen/commit/0a5dfb77a7d0dfaac2baf8f3e61014a29ba2883b">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=742715">742715</a> - Unnamed structs gives: QGDict::hashAsciiKey: Invalid null key [<a href="http://github.com/doxygen/doxygen/commit/17b66265ace3418413b5cfab0335b4378e9c176b">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=744938">744938</a> - PATCH: add option to build latex without timestamps [<a href="http://github.com/doxygen/doxygen/commit/9ef2dc156c37da7fb736c39c3c3fa5074e4d1829">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=745659">745659</a> - The table in classes.html has no class attribute [<a href="http://github.com/doxygen/doxygen/commit/0b4b2d76e4cc8fcb85d9b3ad7252e676e5a1d784">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=746162">746162</a> - formulas creating invalid HTML code [<a href="http://github.com/doxygen/doxygen/commit/d5905871951cde51c6dcaa01d745de2f884ce9a9">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=746361">746361</a> - Doxygen thinks C++ class is Objective-C [<a href="http://github.com/doxygen/doxygen/commit/8da86f8adfb826f13321c7d163431f9671ba20b7">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751300">751300</a> - Doxygen don't support longer key in bibtex [<a href="http://github.com/doxygen/doxygen/commit/b0fc11e4a891e51bb4d982730efecddac2ef807e">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751321">751321</a> - \cite still rejects valid BibTeX keys [<a href="http://github.com/doxygen/doxygen/commit/b1601548308c8a6ec586a406155d24f80d75aafd">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751755">751755</a> - using plantuml cause a popup "openwith" windows when calling java.exe [<a href="http://github.com/doxygen/doxygen/commit/51ee1b0633fbfa935da08c8a13f70da6fc1c074d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=751984">751984</a> - PATCH: Honour SOURCE_DATE_EPOCH environment variable for reproducible output [<a href="http://github.com/doxygen/doxygen/commit/b31266c1076c6284116f17241d9e8aa048f88e60">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=752657">752657</a> - XML not documenting a class in python [<a href="http://github.com/doxygen/doxygen/commit/288afe7d4fe0953f5717b0ac85f805f78d96afa4">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=752658">752658</a> - XML empty <argsstring/> in python [<a href="http://github.com/doxygen/doxygen/commit/a1b3f7b1157b8e7b392bfcd6c6452c664bf5a7c2">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=752712">752712</a> - last entry missing in a @name group of typedefs [<a href="http://github.com/doxygen/doxygen/commit/21d14b3c7697f8807065070f5850259b1b6550e4">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=752845">752845</a> - Non-alphanumeric characters in Markdown links don't work properly [<a href="http://github.com/doxygen/doxygen/commit/e89eb77b14810649c679dc7d377ddb4e6a942d82">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=753500">753500</a> - $file when using @name is wrong [<a href="http://github.com/doxygen/doxygen/commit/790887ea3f63c051954a4cd49f044fa4f536867d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=753909">753909</a> - Copy and paste of code fragment from CHM merges all pasted text into single line [<a href="http://github.com/doxygen/doxygen/commit/663544cc0caf9109ea10c33f38b1e07e7a01a575">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=754130">754130</a> - class="current" not applied to <li> for module tab within 'group__*.html' module html files [<a href="http://github.com/doxygen/doxygen/commit/0e2e8916f81892c891a33c5435024776ca0f570f">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=754184">754184</a> - \bug paragraph doesn't end with a new sectioning command [<a href="http://github.com/doxygen/doxygen/commit/13e2b18c93df1351c4e91d13a7fe224b4841fa73">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=754606">754606</a> - Double anchors when using groups [<a href="http://github.com/doxygen/doxygen/commit/e44780a7579ca865cc52801e920b1d20d2a3b438">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755080">755080</a> - xrefitem link to list incorrect when using SHORT_NAMES [<a href="http://github.com/doxygen/doxygen/commit/af5c5b37c5464afb6a2df71edf6f9e82ece75187">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755293">755293</a> - Tree view pane overlaps with content tabs [<a href="http://github.com/doxygen/doxygen/commit/8fc243491cbae2442c1e07faca99a8f6dc6f2e19">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755783">755783</a> - RTF output has incomplete "References" and "Referenced by" sections [<a href="http://github.com/doxygen/doxygen/commit/6184c70c515941212380006a2e6c879e1663daec">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755786">755786</a> - fatal: Cannot open 'graph_legend': No such file or directory [<a href="http://github.com/doxygen/doxygen/commit/08cf278fb80ffb7844b4339458cf4ad03453e827">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755939">755939</a> - Warning refers to incorrect line for undocumented member function (C++) [<a href="http://github.com/doxygen/doxygen/commit/a112c70c7a5d590286e0fad1382b9bb3fd86118b">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=756241">756241</a> - Race condition in parallel DOT runs [<a href="http://github.com/doxygen/doxygen/commit/f196c9f1d69238a814ff3152103f3bd310efdf0d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=756604">756604</a> - Unable to prevent a numbered list [<a href="http://github.com/doxygen/doxygen/commit/3fbb1b66bd5303fa789a36317694bd77eb22ee19">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/5487f855ad12d0b7f3ba70aab72fd2debedae16d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=756724">756724</a> - Inline markdown links don't support reference targets that contain ) [<a href="http://github.com/doxygen/doxygen/commit/59a42f974f15fa0154317900ffd9b82babd985ad">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=757300">757300</a> - Failed to document nested classes with "reference to array" parameters [<a href="http://github.com/doxygen/doxygen/commit/3bcef269a4fe5bfc1921d7ba934bc09c715eae9c">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=757621">757621</a> - unclosed tag, c# generics method with where [<a href="http://github.com/doxygen/doxygen/commit/1bb819f5b680d600f010761b21e44df2f5e35ccc">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=757812">757812</a> - Doxygen do not support comparison angle bracket in template [<a href="http://github.com/doxygen/doxygen/commit/f836266a4538153a1164642e168bb04c529a4d51">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=758132">758132</a> - Brief description of non documented functions [<a href="http://github.com/doxygen/doxygen/commit/7a2164d252a0cb5410ab13b0ca1611a8e94e3c99">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/1b402f49a0638dd0eec2a123462862c6d4c4084d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=758495">758495</a> - Bug in VHDL parser + other fixes [<a href="http://github.com/doxygen/doxygen/commit/4bef27771fec1892331df637dd6184abac36fd8f">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=758900">758900</a> - C++ templated member-function appears both as public and private [<a href="http://github.com/doxygen/doxygen/commit/bb4e403968dc1ac4deb3b47c0b79b4304f1be288">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759177">759177</a> - Markdown fenced code blocks not parsed properly in comment [<a href="http://github.com/doxygen/doxygen/commit/ae6311ea0855d576a7c4b589dd5f4b994a47fd6c">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759247">759247</a> - C++11 unified initializer for array with templates treated as function [<a href="http://github.com/doxygen/doxygen/commit/692544fb47407a3f2c5a5a5e4b80185428adda25">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759281">759281</a> - Doxygen parser confused by C++11 attributes [<a href="http://github.com/doxygen/doxygen/commit/6c005b1e9458430a77bfeba6d08deed4778ad71d">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759381">759381</a> - unable to @ref or @link C++ templated operator overloads [<a href="http://github.com/doxygen/doxygen/commit/da09bff6dc9cad40c72b6a858728093cc41dff47">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=759622">759622</a> - problems with charset using plantuml [<a href="http://github.com/doxygen/doxygen/commit/165498dc9ea33bc9991c5ab5234b5e51d74569d0">view</a>]</li> +<li>Actually using value of GROUP_NESTED_COMPOUNDS option [<a href="http://github.com/doxygen/doxygen/commit/3b314b5d856f6f7a25d512737e640a6b7b17c8d4">view</a>]</li> +<li>Add RPM build for Red Hat [<a href="http://github.com/doxygen/doxygen/commit/7f8f31cb8318e663f2ec145b63fb31278bdd7a76">view</a>]</li> +<li>Add WARN_AS_ERROR option to stop execution at first warning (equivalent of compilers' -Werror option) [<a href="http://github.com/doxygen/doxygen/commit/38277f1da56c212c9b33f774de412edef1156544">view</a>]</li> +<li>Add examples to LaTeX / PDF doxygen manual [<a href="http://github.com/doxygen/doxygen/commit/3a236fd01dc23d2d979e06d848f61b002cb4e6ee">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/5e11f885eea694c2ecfeae6ff5774b66eea312e4">view</a>]</li> +<li>Add mathjax support to template & context. [<a href="http://github.com/doxygen/doxygen/commit/56987af3987f40ac77e70cd39ebbdac3702c1ce2">view</a>]</li> +<li>Add support for "value" attribute in FORTRAN scanner [<a href="http://github.com/doxygen/doxygen/commit/6dacbd9b22bdd6cd1a8c3e9b5ec8c2f7d15977b8">view</a>]</li> +<li>Added documentation for creating tables [<a href="http://github.com/doxygen/doxygen/commit/23faa449843eeb4c9e40e650df8844abec024bb7">view</a>]</li> +<li>Added javascript search engine data to the template context [<a href="http://github.com/doxygen/doxygen/commit/6bb0d2908b4ca7908a8e655a5abcf7615a5f4c77">view</a>]</li> +<li>Added missing html resources to the html template file [<a href="http://github.com/doxygen/doxygen/commit/43a0883022f64539498b84220d487b16ffd49a7e">view</a>]</li> +<li>Added missing information to template version of the all members list [<a href="http://github.com/doxygen/doxygen/commit/f16c156065ac8bc6242870c2ae701252b5d4f9b2">view</a>]</li> +<li>Added support for directory dependency graphs to template engine [<a href="http://github.com/doxygen/doxygen/commit/abe254fbe2235f5b913653acd076d2acd579d5e1">view</a>]</li> +<li>Adding compilation options for flex/lex and bison/yacc [<a href="http://github.com/doxygen/doxygen/commit/beb2ff6c39fefbd6aaeecd5de9827d1b1947740b">view</a>]</li> +<li>Adjusted used option for CLANG usage with CMake in documentation [<a href="http://github.com/doxygen/doxygen/commit/82063c0601b9f7b11c1774a1a42e13295c486467">view</a>]</li> +<li>Alignment in LaTeX parameter table [<a href="http://github.com/doxygen/doxygen/commit/a0880ff1c41a1c57bc92c1ccf99cf750064e2995">view</a>]</li> +<li>Avoid using Resource::data as string, as it is not null terminated. [<a href="http://github.com/doxygen/doxygen/commit/15a87a623791bf407b3076960cdd1133c8973357">view</a>]</li> +<li>Better handling of implicit statement in source code browser [<a href="http://github.com/doxygen/doxygen/commit/404468ac5484d54e47129ce2a00b3ad6e1c2c72a">view</a>]</li> +<li>Bug 149792 - Mainpage title has wrong style in RTF [<a href="http://github.com/doxygen/doxygen/commit/077aeb768767e62407abb4759d44671619bc62fd">view</a>]</li> +<li>Bump version so that the GIT repo represents the version for the "next" release [<a href="http://github.com/doxygen/doxygen/commit/42c376cdb41db392bd025611ccfcaddb49d05e92">view</a>]</li> +<li>Cmake tries to remove directory refman.tex instead of file refman.tex [<a href="http://github.com/doxygen/doxygen/commit/63094c8bb34a2e02e8490860660303d849e4a984">view</a>]</li> +<li>Copy user EXTRA_FILES at the end to overrule files generated by default by doxygen [<a href="http://github.com/doxygen/doxygen/commit/82f08138ad08fa5b8906c162283c4df0e9819d83">view</a>]</li> +<li>Correct / set types for python variables [<a href="http://github.com/doxygen/doxygen/commit/c47920b217491fc861cdac73d44ab4f93d08423e">view</a>]</li> +<li>Correcting print format error in config.l [<a href="http://github.com/doxygen/doxygen/commit/9947c11284542a74c56e52b55be032350c6bbc3e">view</a>]</li> +<li>DO NOT hardcode x86-64 architecture. [<a href="http://github.com/doxygen/doxygen/commit/031780293d2838da2643b46878061598ebb56822">view</a>]</li> +<li>Don't show a console when launching doxywizard on Windows. [<a href="http://github.com/doxygen/doxygen/commit/942efcb758977fe95fafc473813528085b56e4ee">view</a>]</li> +<li>Fix computeCommonDirPrefix sometimes not finding the correct prefix [<a href="http://github.com/doxygen/doxygen/commit/c6bf96520bcff56d3fd67d4277c05b8db9ac2128">view</a>]</li> +<li>Fix error documentation of in flex debug script [<a href="http://github.com/doxygen/doxygen/commit/09c4e990e4e214900e613343fb9bfbbb08f1bc53">view</a>]</li> +<li>Fix for broken link in the manual [<a href="http://github.com/doxygen/doxygen/commit/355370151b61f79633b3867634d76eaf8bacce54">view</a>]</li> +<li>Fix hexChar for inputs 0 <= i < 10 [<a href="http://github.com/doxygen/doxygen/commit/327422d131ed5e6ddf280043b5a56a6fb92d3bbc">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/62da4521880a03b8a92887539eaf76ccad2ee770">view</a>]</li> +<li>Fix spelling in doc/commands.doc (descriptionm) [<a href="http://github.com/doxygen/doxygen/commit/bd7da008fac074202e3265787907434fbfb40e71">view</a>]</li> +<li>Fix typo in function name [<a href="http://github.com/doxygen/doxygen/commit/ace0af42e330a96ad691b2d9a08dd3ff4abb2629">view</a> and [<a href="http://github.com/doxygen/doxygen/commit/b890f40d195b9dc5db12aaa398707de138093c66">view</a>]</li> +<li>Fixed a couple of small memory leaks [<a href="http://github.com/doxygen/doxygen/commit/85ddfc814f33943199928447b4627d05b0920b99">view</a>]</li> +<li>Fixed a number of memory leaks in the template engine [<a href="http://github.com/doxygen/doxygen/commit/d14bcd1f8f5bd4a2034bae842000630f4e098eb6">view</a>]</li> +<li>Fixed compiler warning for MacOSX [<a href="http://github.com/doxygen/doxygen/commit/0aa27346b8728f6698dd2b363959e89d02e03ff6">view</a>]</li> +<li>Fixed link issue for MacOSX 10.11 [<a href="http://github.com/doxygen/doxygen/commit/0918a19225daedfbd5e23388124a5de3860d5420">view</a>]</li> +<li>Fixed minor typos in comments [<a href="http://github.com/doxygen/doxygen/commit/29c500434d30cd4d9c20f6b295475ed42dba2930">view</a>]</li> +<li>Fixed preprocessor macros for flex version check [<a href="http://github.com/doxygen/doxygen/commit/a8c73cdbe37cc53c398002d20e94037552a8fb55">view</a>]</li> +<li>Fixed problem with latex and PDF bookmarks [<a href="http://github.com/doxygen/doxygen/commit/499ecaedf1ee1222535be27f77050ee633595685">view</a>]</li> +<li>Fixed various issues found by PVS-Studio. [<a href="http://github.com/doxygen/doxygen/commit/48ced3ea8071b3141216482e2821e10250910947">view</a>]</li> +<li>Fixes bug 485701: Angle brackets (< and >) not escaped in HTML formula alt text [<a href="http://github.com/doxygen/doxygen/commit/08aa01cb0ee9b2dd6403f753156d8b58d8e62145">view</a>]</li> +<li>Fixes to support nested tables again [<a href="http://github.com/doxygen/doxygen/commit/883989fced827524354297009fde396ca6264a31">view</a>]</li> +<li>Fortran module private variables and EXTRACT_PRIVATE = NO [<a href="http://github.com/doxygen/doxygen/commit/61820a08200ec62c754cacf8dd3a1121ce6dee69">view</a> and <a href="http://github.com/doxygen/doxygen/commit/8504fc3a06e3430242eab9ac1c1f20319112e6a9">view</a>]</li> +<li>Improved handling of <caption> in tables for LaTeX output. [<a href="http://github.com/doxygen/doxygen/commit/fa6585b2fc6847c2b242b226b163810c7a6366de">view</a>]</li> +<li>IncludeInfo class had uninitialized member variable [<a href="http://github.com/doxygen/doxygen/commit/76a9892b190efaeb3c764d824bd285ff3d2c57dc">view</a>]</li> +<li>Made paragraph spacing more flexible in the LaTeX output to prevent page overflows [<a href="http://github.com/doxygen/doxygen/commit/17b3b41e12e890187f6b7dcc98ed9e2451b14018">view</a>]</li> +<li>Made several improvements to the performance of template engine [<a href="http://github.com/doxygen/doxygen/commit/ded4e9a92670d0157cdcc5cbf7a4a1e3193e179a">view</a>]</li> +<li>Make doxywizard compatible with Qt5 [<a href="http://github.com/doxygen/doxygen/commit/333c7c44f1aa3c62f9401b190e45eaff15056d5c">view</a>]</li> +<li>Make list of default extensions consistent with language mapping list [<a href="http://github.com/doxygen/doxygen/commit/bf35f16863f067286260ad4b68ec4c0ae7febdf1">view</a>]</li> +<li>Markdown with @cond and @endcond [<a href="http://github.com/doxygen/doxygen/commit/c5a7911741850777b699a63ae5b7702e379a5ada">view</a>]</li> +<li>Markdown with @cond and @endcond [<a href="http://github.com/doxygen/doxygen/commit/dc26830396970d402ad42d20f1b99bd86f4a5961">view</a>]</li> +<li>Merge remote-tracking branch 'upstream/master' [<a href="http://github.com/doxygen/doxygen/commit/6aba65a4dfaec1aa1131e160ed252d0713403760">view</a>]</li> +<li>Minor change to pycode.l:codifyLines [<a href="http://github.com/doxygen/doxygen/commit/bbd71be14986e637af9958b2cc18d1d62743ba8e">view</a>]</li> +<li>Moved creation of inline class documentation to separate template file [<a href="http://github.com/doxygen/doxygen/commit/4bd50c9f0dc1d7b1413a6bda587b8a5999cd7a19">view</a>]</li> +<li>RTF improvement: Example section was merged with next function title [<a href="http://github.com/doxygen/doxygen/commit/ca617e1e1cd42ee0080c8c13ce3884c8671629dd">view</a>]</li> +<li>Remove obsolete py files [<a href="http://github.com/doxygen/doxygen/commit/183f36fe97cb95636f1947c2c4be61f7b78f87e0">view</a>]</li> +<li>Removed BOM marker from greek translator to avoid Visual C warnings [<a href="http://github.com/doxygen/doxygen/commit/9ee8f777f5a4b7a49e644c2da5247fa509038feb">view</a>]</li> +<li>Repaired breaking @include for LaTeX output [<a href="http://github.com/doxygen/doxygen/commit/ab861c197c596f78c7aea4f45c0e1252de10fc1f">view</a>]</li> +<li>Revert "Spelling correction for error message with USE_HTAGS usage" [<a href="http://github.com/doxygen/doxygen/commit/a888543ca5f3fd28121f7eea4dbd25898fa7be57">view</a>]</li> +<li>Revert using container-based infra as sudo is needed :-( [<a href="http://github.com/doxygen/doxygen/commit/f089c3fa4f47dc8bedd25d9d857d004525ee82c0">view</a>]</li> +<li>Reverted change that caused doxygen to return error code 2 when it produced a warning [<a href="http://github.com/doxygen/doxygen/commit/f9e6fe0bf3886be7e603083b3b200dbd60fbd529">view</a>]</li> +<li>Rework the generation of packages DEB/RPM/... (CPack) [<a href="http://github.com/doxygen/doxygen/commit/8c0c80e44e1e9cb1ce4e88a3e1d01b65536dc60c">view</a>]</li> +<li>Right alignment of in page table of contents [<a href="http://github.com/doxygen/doxygen/commit/a653f7499929f3f0a5b68614dec91242fbc0edf5">view</a>]</li> +<li>Small correction of errors in case of CSharp XML tags [<a href="http://github.com/doxygen/doxygen/commit/68dd27139e50e048f081549394e6fc6dc04fc699">view</a>]</li> +<li>Small documentation corrections [<a href="http://github.com/doxygen/doxygen/commit/564c8cd257e0dd1797d94633a0e92ddc5a496540">view</a>]</li> +<li>Spelling correction for error message with USE_HTAGS usage [<a href="http://github.com/doxygen/doxygen/commit/0d060c455207ab32092e5a7edcd5457bb00f4653">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/5cc45244002d1d7560233cfae01f9d5d735e1a3f">view</a>]</li> +<li>Started with generating LaTeX output via the template engine [<a href="http://github.com/doxygen/doxygen/commit/02a0c353a8947290a3191aead59db08dc84766ce">view</a>]</li> +<li>Stop when doxygen configuration file ("Doxyfile") cannot be read [<a href="http://github.com/doxygen/doxygen/commit/b8bd3d84590d9adee7084f066f0e3e8c75a99245">view</a>]</li> +<li>Support flex-2.6.0 [<a href="http://github.com/doxygen/doxygen/commit/8c51120ad55b440b738ef0b96f8169d84a7ae88a">view</a>] and [<a href="http://github.com/doxygen/doxygen/commit/cf936efb8ae99dd297b6afb9c6a06beb81f5b0fb">view</a>]</li> +<li>Support set in code highlighting [<a href="http://github.com/doxygen/doxygen/commit/1cbcce4ef3460f48ab9c8e9435eec21075dcc788">view</a>]</li> +<li>Template enhancements and various other small fixes [<a href="http://github.com/doxygen/doxygen/commit/e58fb0a46f73f37d16859f43fda1eb5ba4a15c5d">view</a>]</li> +<li>Title in case of USE_MDFILE_AS_MAINPAGE [<a href="http://github.com/doxygen/doxygen/commit/09251b805b3c9d96917fedebb3768945d7559b1e">view</a>]</li> +<li>Tooltip can still contain < and > signs [<a href="http://github.com/doxygen/doxygen/commit/1df28fe4b9a0187f8fa6ed077e4a81002fa50fda">view</a>]</li> +<li>Tweaked the htmlonly sections in the manual so it produces valid HTML output [<a href="http://github.com/doxygen/doxygen/commit/de03970396e6f7edec359e2b71f3d2aa9d6a6237">view</a>]</li> +<li>Undo _doxygen to libdoxygen target change [<a href="http://github.com/doxygen/doxygen/commit/940048580f2d61a137e7abbb67b3aed567bfe865">view</a>]</li> +<li>Updated instructions to toggle debugging flex code [<a href="http://github.com/doxygen/doxygen/commit/368f4f057be0ded4673be826c9a08cd771a023ce">view</a>]</li> +<li>Updated Italian translation and translator email address [<a href="http://github.com/doxygen/doxygen/commit/a9ad21b4e541d91c804ac39e393cc0c1db4f45f3">view</a>]</li> +<li>Updated the Greek translation [<a href="http://github.com/doxygen/doxygen/commit/4e0b7f0b9a2a04d0bb5e66871da6d7ffa786836e">view</a>]</li> +<li>Use CPack to generate rpm/deb packages [<a href="http://github.com/doxygen/doxygen/commit/ba6eb1478d24dc32d4e123951e2f62c75b4b88bd">view</a>]</li> +<li>Use STATIC libraries to prevent them being shared [<a href="http://github.com/doxygen/doxygen/commit/37a148f6e35523fd2bbbdbc37e6ed838684c6d90">view</a>]</li> +<li>Using tabu package for LaTeX tables [<a href="http://github.com/doxygen/doxygen/commit/647b6ac8669cd8ba1e8c60eeb3c2de961c7d6a1b">view</a>]</li> +<li>[Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=755225">755225</a>] On Windows, generated layout is with UNIX EOL [<a href="http://github.com/doxygen/doxygen/commit/78a80001223af290c7c7321ad2d210fb3cd16f11">view</a>]</li> +<li>[Doxygen-users] plugin / filter not behaving as expected [<a href="http://github.com/doxygen/doxygen/commit/0c7f182016c7c2604a484367738e76cb40c0541b">view</a>]</li> +<li>add spaces like "Doyxgen"CN_SPC->"Doyxgen" CN_SPC [<a href="http://github.com/doxygen/doxygen/commit/35d1aa8bf9208302601fa96462e246c98aa0b0e5">view</a>]</li> +<li>allow building with custom iconv on Windows [<a href="http://github.com/doxygen/doxygen/commit/3d684f6d123abdbf630bb19bc6095cc9d69efb68">view</a>]</li> +<li>doc: generate doxygen's documentation. [<a href="http://github.com/doxygen/doxygen/commit/3c4a1ea2ee56f2604c2277f13737d53b3a0b0353">view</a>]</li> +<li>doc: put man pages under share/man/man1 [<a href="http://github.com/doxygen/doxygen/commit/95d28153779810dc95afafa38ed838f32516a1f4">view</a>]</li> +<li>docparser: warn when finding a documented empty return type [<a href="http://github.com/doxygen/doxygen/commit/10989e2dade3bb35a421787c5315d2630d665842">view</a>]</li> +<li>docs: add examples as a dependency of docs [<a href="http://github.com/doxygen/doxygen/commit/ec5fde6913935fbe2015220259b611a17a437de3">view</a>]</li> +<li>doxyapp and CLANG linking [<a href="http://github.com/doxygen/doxygen/commit/a58a2cafbc136f7821b9313bd6c1413eaab3e868">view</a>]</li> +<li>fixed for travis ci config file [<a href="http://github.com/doxygen/doxygen/commit/ecbb77b40892df8740476023545769ffbda6fd6f">view</a>]</li> +<li>libpng warning: iCCP: known incorrect sRGB profile [<a href="http://github.com/doxygen/doxygen/commit/c82ac124812dd2f9a5e8b36fcdcf7daf20cfbdda">view</a>]</li> +<li>rename build target _doxygen to libdoxygen [<a href="http://github.com/doxygen/doxygen/commit/4116648d3c62aee54c385644a4fe754ee7a4261d">view</a>]</li> +<li>run_translator.cmake is no longer used [<a href="http://github.com/doxygen/doxygen/commit/45e153f2238d0fa031d147cfe207e52b913845eb">view</a>]</li> +<li>runtests: Simplify dictionary usage [<a href="http://github.com/doxygen/doxygen/commit/95d99a4c857d7d5208d8faf974b01354a798eba4">view</a>]</li> +</ul> +<p> +\endhtmlonly + \subsection log_1_8_10 Release 1.8.10 \htmlonly <b>(release date 27-06-2015)</b> <a name="1.8.10"></a> +</p> <ul> <li>change the build system to use cmake [<a href="http://github.com/doxygen/doxygen/commit/2e099b1950eee2c3a0d5d8ae4b25575caeb938b1">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/ba9bb02abf6f6922a83beb2092e7bc270e6f25c1">view</a>], @@ -72,7 +454,7 @@ <li>Documenting RESULT variable of Fortran FUNCTION [<a href="http://github.com/doxygen/doxygen/commit/21f9e87db8085fb1b5e0a9a9a25dee159b3fd324">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/4d52beec3760244d959ab4d5528aea1acba505e7">view</a>]</li> <li>Doxygen LaTeX / PDF links point to page 1 [<a href="http://github.com/doxygen/doxygen/commit/e34913dcbe0bee2c3e21d6e21b2bcc6970003a5c">view</a>]</li> <li>Enable relative paths referenced source files [<a href="http://github.com/doxygen/doxygen/commit/ed178335e8c123b58c4fee24766bceae0fc80aa2">view</a>]</li> -<li>Escape "@" in names as it is not allowed in XML / Docbook names (comming from anon namespaces) [<a href="http://github.com/doxygen/doxygen/commit/65c35c435ae93d5f39c3ddec93008b2f544544ca">view</a>]</li> +<li>Escape "@" in names as it is not allowed in XML / Docbook names (coming from anon namespaces) [<a href="http://github.com/doxygen/doxygen/commit/65c35c435ae93d5f39c3ddec93008b2f544544ca">view</a>]</li> <li>Fix for bug 746673. [<a href="http://github.com/doxygen/doxygen/commit/effbbcc72295f5843377ddce2794bcf6e7000322">view</a>]</li> <li>Fix for building diagram example conditionally [<a href="http://github.com/doxygen/doxygen/commit/f415b624a6cf6b9e577ec6131a23cb4a0e830aaf">view</a>]</li> <li>Fix for issue 744670 [<a href="http://github.com/doxygen/doxygen/commit/0d684381ac40574f6a948c56eb2da0445c3ee3bf">view</a>]</li> @@ -114,7 +496,7 @@ <li>Removed OS version check for MACOSX (was not used anywhere) [<a href="http://github.com/doxygen/doxygen/commit/1e3e9f03e746d4ac46c9c7b1b80e7e3100ee42f0">view</a>]</li> <li>Removed dbus XML parser, various refinements [<a href="http://github.com/doxygen/doxygen/commit/551012f2647c53d8532d638361011d003d5b81f3">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/bf4aee305879406d9057864ab7f8938e01ca8bd0">view</a>]</li> <li>Removed old build files, added install targets and other options [<a href="http://github.com/doxygen/doxygen/commit/7bcf8e9a379ec0599160e5562f07b93f8fb9557a">view</a>]</li> -<li>Repair Doxygen generate invalid styleSheetFile and extensionsFile of RTF [<a href="http://github.com/doxygen/doxygen/commit/0d208bc1c9a32718a93eb9911220ba72ad27fb9a">view</a>]</li> +<li>Repair doxygen generate invalid styleSheetFile and extensionsFile of RTF [<a href="http://github.com/doxygen/doxygen/commit/0d208bc1c9a32718a93eb9911220ba72ad27fb9a">view</a>]</li> <li>Replace to_c_cmd by resource compiler [<a href="http://github.com/doxygen/doxygen/commit/2e39e5c7c1427ac6b24c64b7ef01be8d5a20092b">view</a>]</li> <li>Restore deleted file [<a href="http://github.com/doxygen/doxygen/commit/dfe93f9fde39167eae2aeeab929641a9c56cc916">view</a>]</li> <li>Showing grey/gray in documentation [<a href="http://github.com/doxygen/doxygen/commit/320ebb35dd4a615a7a692d71de4587be9ce8b99b">view</a>]</li> @@ -152,12 +534,14 @@ <li>version.py pass configure file path as parameter [<a href="http://github.com/doxygen/doxygen/commit/75e8f4c80ab5c06a33eaaf7ec587ee35ed9c1b1a">view</a>]</li> <li>xml: use STRIP_FROM_PATH on @file attributes. [<a href="http://github.com/doxygen/doxygen/commit/29ae707794042a97412eaa137fa7b30f2367294d">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/5a0379944f8bdf883fdb25e94e0cdb1e5d2f4366">view</a>]</li> </ul> +<p> \endhtmlonly \subsection log_1_8_9_1 Release 1.8.9.1 \htmlonly <b>(release date 04-01-2015)</b> <a name="1.8.9.1"></a> +</p> <ul> <li>Fixed a couple of cases where sharing string data could lead to corruption [<a href="http://github.com/doxygen/doxygen/commit/312bef563a5be72f6423377247db1b80044bf711">view</a>]</li> <li>Various VHDL related fixes [<a href="http://github.com/doxygen/doxygen/commit/34b00c442308efe169cc89fad62588fdce1d84e8">view</a>]</li> @@ -175,12 +559,14 @@ <li>Suggestion to use stripPrefix has been implemented for RESULT. For consistency also implemented for arguments. [<a href="http://github.com/doxygen/doxygen/commit/6720a714461b9454c7cdbae7ceff7eb735feeb3b">view</a>]</li> <li>Switched back to version 6.2 of JavaCC for VHDL parser generation. [<a href="http://github.com/doxygen/doxygen/commit/088896f27f460b6ac03c2d64df148e3617c1e519">view</a>]</li> </ul> +<p> \endhtmlonly \subsection log_1_8_9 Release 1.8.9 \htmlonly <b>(release date 25-12-2014)</b> <a name="1.8.9"></a> +</p> <ul> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/8f78eff7e8b2650f9a8364ff5c5b6925279e6b5a">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634763">634763</a> - Fortran: external subroutine as dummy argument not recognized [<a href="http://github.com/doxygen/doxygen/commit/fabd1194a2e3c2536dddc19945c568a690b17031">view</a>]</li> @@ -263,13 +649,13 @@ <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741417">741417</a> - Crash when building gtkmm documentation [<a href="http://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=741778">741778</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="http://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li> <li>fix docbook output [<a href="http://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>] - <ol><li>support other than english - <li>fix broken example link id - <li>fix incomplete TOC : no Classe etc. - <li>add brief description for Functions etc. - <li>Comply with REPEAT_BRIEF - <li>Do not output duplicated contents when detailed descripton is missing. - <li>set table colwidth for Param/RetVal + <ol><li>support other than english</li> + <li>fix broken example link id</li> + <li>fix incomplete TOC : no Classe etc.</li> + <li>add brief description for Functions etc.</li> + <li>Comply with REPEAT_BRIEF </li> + <li>Do not output duplicated contents when detailed description is missing.</li> + <li>set table colwidth for Param/RetVal</li> </ol> </li> <li>Add missing escape in doxysearch.cpp when result contained a double quote [<a href="http://github.com/doxygen/doxygen/commit/08c9689157d7edc5d8e3369ef96f2ccd4b01c10c">view</a>]</li> @@ -354,11 +740,13 @@ <li>various fixes and restructuring [<a href="http://github.com/doxygen/doxygen/commit/223e7de6478019c8eebcfd87085fe22d3bfeec0e">view</a>]</li> <li>Various latex problems [<a href="http://github.com/doxygen/doxygen/commit/fb4dad1e1d9774e92d1509d1c2d3f8cb341826a1">view</a>]</li> </ul> +<p> \endhtmlonly \subsection log_1_8_8 Release 1.8.8 \htmlonly <b>(release date 21-08-2014)</b> <a name="1.8.8"></a> +</p> <h3>New features</h3> <ul> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731947">731947</a> - Support for PlantUML [<a href="http://github.com/doxygen/doxygen/commit/7506404e646f1fcc5a26ca6fca91a7f65154f05a">view</a>]</li> @@ -388,7 +776,7 @@ <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731238">731238</a> Dead links in html documentation when using tabs for indentation in c++ [<a href="http://github.com/doxygen/doxygen/commit/2cc3b18da39bde323c5739483e507a133e93ac22">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731363">731363</a> Callgraphs for C# only generated for methods inside the same class [<a href="http://github.com/doxygen/doxygen/commit/7edbf2b2e705eccc0d99cce86149228473bc7f3e">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=731985">731985</a> Variadic macros failing to expand if trailing ... is empty [<a href="http://github.com/doxygen/doxygen/commit/070c35549da108695074239be3ab4268f3722261">view</a>]</li> -<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732594">732594</a> Two entries for a single member in Doxygen XML [<a href="http://github.com/doxygen/doxygen/commit/ed8ce3cf405204916f9832e26797cb15d1490fd1">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732594">732594</a> Two entries for a single member in doxygen XML [<a href="http://github.com/doxygen/doxygen/commit/ed8ce3cf405204916f9832e26797cb15d1490fd1">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=732768">732768</a> nested html tables cause pdflatex to hang (1.8.4 and 1.8.6) [<a href="http://github.com/doxygen/doxygen/commit/3cb963061343aa5b3b8a044cdfa62848723a02ee">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733451">733451</a> volatile declaration on member functions is not handled as xml attribute [<a href="http://github.com/doxygen/doxygen/commit/97d12d058a7831adcc8c6f2cfe8c20ddd2ae5bc2">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=733605">733605</a> Incorrect LaTeX generation for private union member in C++ [<a href="http://github.com/doxygen/doxygen/commit/a36ddbe0ee97c5ee248b7b391b4c30fd4b3c884b">view</a>]</li> @@ -453,7 +841,7 @@ <li>Messages truncated in warnings file [<a href="http://github.com/doxygen/doxygen/commit/cc4f3b454cae7d3e9eaa44342bcbae1061f5e790">view</a>]</li> <li>Minor fixes [<a href="http://github.com/doxygen/doxygen/commit/c31a81a85e0396fb276beefd06bb71c2819571ed">view</a>]</li> <li>Minor fixes to the template context [<a href="http://github.com/doxygen/doxygen/commit/963e0adfd76e6a59ace5e7318f948632322b1e51">view</a>]</li> -<li>Missing word after \n command in Doxygen rtf output, version 1.8.5 & up [<a href="http://github.com/doxygen/doxygen/commit/ea9f3b1d727b22973c0176b2564304fb160aa70b">view</a>]</li> +<li>Missing word after \n command in doxygen rtf output, version 1.8.5 & up [<a href="http://github.com/doxygen/doxygen/commit/ea9f3b1d727b22973c0176b2564304fb160aa70b">view</a>]</li> <li>More robust extraction of scope information from tag files [<a href="http://github.com/doxygen/doxygen/commit/6a60477b418e21dbadd3e62dc557a038e319581b">view</a>]</li> <li>No warning in case cite definition is missing [<a href="http://github.com/doxygen/doxygen/commit/1f77638174f715f0f2bcf5b2e32ebb329d531f85">view</a>]</li> <li>Preparations for release 1.8.8 [<a href="http://github.com/doxygen/doxygen/commit/f16be0113f8d47d4f04e69d0c45ccc4b24e3c426">view</a>]</li> @@ -488,17 +876,19 @@ <li>resolves the error of unbalanced tags opened/closed in docbook output: parser error : Opening and ending tag mismatch: para line 358 and tbody [<a href="http://github.com/doxygen/doxygen/commit/d7b0858e079419bb7ea862e16946218a9352d5b5">view</a>]</li> <li>winbuild/pack_the_distribution_for_windows.py minor updates [<a href="http://github.com/doxygen/doxygen/commit/6d969cab51f4c32784966a28b8b9d5fe2d5b2089">view</a>]</li> </ul> +<p> \endhtmlonly \subsection log_1_8_7 Release 1.8.7 \htmlonly <b>(release date 21-04-2014)</b> <a name="1.8.7"></a> +</p> <ul> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=436885">436885</a> - c-source and h-source missing for latex [<a href="http://github.com/doxygen/doxygen/commit/d5d34325fb9bed776cf2b4facc0c341f701e780b">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625601">625601</a> - FORTRAN: recognition free versus fixed formatted code [<a href="http://github.com/doxygen/doxygen/commit/2dec1060623165057628ee678eb3580351922408">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626172">626172</a> - Latex $projectname with "&" gets no escaped [<a href="http://github.com/doxygen/doxygen/commit/586b3b69238fb09d55a03c5d50fc1b7d3e65ed97">view</a>]</li> -<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643618">643618</a> - Fortran: variable with name "type" confuses Doxygen [<a href="http://github.com/doxygen/doxygen/commit/17c5b6160d013d118296663e133cf8884c74a939">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643618">643618</a> - Fortran: variable with name "type" confuses doxygen [<a href="http://github.com/doxygen/doxygen/commit/17c5b6160d013d118296663e133cf8884c74a939">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674851">674851</a> - Percent to prevent auto-linking in page title is not removed for navpath [<a href="http://github.com/doxygen/doxygen/commit/5d44acc0a49bd7b990bfe649efa312f5f0bb594b">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678436">678436</a> - Nested \if messes up list items [<a href="http://github.com/doxygen/doxygen/commit/7f4414b92a1c2147b073dd3cf58e0db7c8a88be6">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678436">678436</a> - Nested \if messes up list items [<a href="http://github.com/doxygen/doxygen/commit/de502ca71fc1c20ed93209f6a223c488eee38297">view</a>]</li> @@ -512,13 +902,13 @@ <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721169">721169</a> - Wrong call graph in simple situation [<a href="http://github.com/doxygen/doxygen/commit/e12d6b506862c8ad843b7853bc1c9ceb5d0ccb4d">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721302">721302</a> - [Latex/PDF] Merging brief and detailed description in file section [<a href="http://github.com/doxygen/doxygen/commit/a99c33838057acba20768ca32681e1f379f36ca0">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721462">721462</a> - Parsing problem with C++11 empty initializer lists [<a href="http://github.com/doxygen/doxygen/commit/1bfacc3b8e589907352eff923b7b3aa73cfc5138">view</a>]</li> -<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721618">721618</a> - Move contructors and move assignment operators of embedded classes of template classes cannot be matched. [<a href="http://github.com/doxygen/doxygen/commit/1d0c9b6fefb6c2e0a9a2b7a7ea3192ccace33710">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721618">721618</a> - Move constructors and move assignment operators of embedded classes of template classes cannot be matched. [<a href="http://github.com/doxygen/doxygen/commit/1d0c9b6fefb6c2e0a9a2b7a7ea3192ccace33710">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=721878">721878</a> - Dia diagrams not displayed by Firefox [<a href="http://github.com/doxygen/doxygen/commit/5ea2f2a123e473d5964435369fd925d7f103b456">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722457">722457</a> - regression referencing namespaced type [<a href="http://github.com/doxygen/doxygen/commit/9b76c1a9bb7039962933aeef398bb7aa2f59c3a5">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722603">722603</a> - doxygen nested \if \endif sample not working [<a href="http://github.com/doxygen/doxygen/commit/cc78b12b0019fbcb17692b231d38ba75d0952201">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722619">722619</a> - doxygen 1.8.6 sorts the contents of a namespace by group within the Class List [<a href="http://github.com/doxygen/doxygen/commit/f9b80aff6d20524dd0838aff12033fe3df66ba98">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722711">722711</a> - Link refs with no title swallow an extra newline [<a href="http://github.com/doxygen/doxygen/commit/60ea06a68f2e355e34b61bf45babc6405bfbfe84">view</a>]</li> -<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722759">722759</a> - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading Doxygen from 1.8.3.1 to 1.8.6 [<a href="http://github.com/doxygen/doxygen/commit/0e9da9fb27147c5685088019afd428a0aaa901fa">view</a>]</li> +<li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722759">722759</a> - Documentation for derived classes no longer has an "Additional Inherited Members" section after upgrading doxygen from 1.8.3.1 to 1.8.6 [<a href="http://github.com/doxygen/doxygen/commit/0e9da9fb27147c5685088019afd428a0aaa901fa">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722786">722786</a> - configure --prefix=/opt/foo not accepted [<a href="http://github.com/doxygen/doxygen/commit/bc7e6301e2d1474592f6cd6cc07624852d1b5016">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=722788">722788</a> - Command \| not working when last character in markdown table line [<a href="http://github.com/doxygen/doxygen/commit/8309fbd9e639eaf9e763e83ca7a228c659450a57">view</a>]</li> <li>Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=723299">723299</a> - Last line of code block lost if it is only one character and there is no text afterward [<a href="http://github.com/doxygen/doxygen/commit/4d1951ebb648bbc92464904305cafc7fc0dba557">view</a>]</li> @@ -601,7 +991,7 @@ <li>List only the project pages in "Related Pages" [<a href="http://github.com/doxygen/doxygen/commit/a2c7f91d6320f72951f1e3ef092e077a89562670">view</a>]</li> <li>Made documentation more consistent [<a href="http://github.com/doxygen/doxygen/commit/b81fe14c7fe8b3eaafa4ce8ddcd0f1815c2c7ff0">view</a>]</li> <li>Make sure all ids in g_linkRefs are lower case [<a href="http://github.com/doxygen/doxygen/commit/3df31762585075033a04e40c3cdfb52781aa258f">view</a>]</li> -<li>Make the MAN_SUBDIR setting overide the name of the directry the man pages are placed in. [<a href="http://github.com/doxygen/doxygen/commit/83b344db49b27bf68994eb8ec6be87d6d0f24e86">view</a>]</li> +<li>Make the MAN_SUBDIR setting override the name of the directory the man pages are placed in. [<a href="http://github.com/doxygen/doxygen/commit/83b344db49b27bf68994eb8ec6be87d6d0f24e86">view</a>]</li> <li>Meta tag in the HTML search page was not closed properly [<a href="http://github.com/doxygen/doxygen/commit/4ccfb9efa8382de50dfc5b176cb147fd1b05870c">view</a>]</li> <li>Minor fixes for the new build locations [<a href="http://github.com/doxygen/doxygen/commit/d86520ef4920a9a47a4d6e33eadfc62b8b983748">view</a>]</li> <li>Missing & and chars after " in tree of chm documentation [<a href="http://github.com/doxygen/doxygen/commit/89638fbc9961bd9a1e9cb7bc25e5f739936e8a43">view</a>]</li> @@ -617,7 +1007,7 @@ <li>Removed generated file src/settings.h from source repository [<a href="http://github.com/doxygen/doxygen/commit/43461e44d49200fd1564c4e416db7384e7e5eab8">view</a>]</li> <li>Removed message, minor restructuring [<a href="http://github.com/doxygen/doxygen/commit/ea436bd659e022d6375dd37f651d4bb18a1c01db">view</a>]</li> <li>Removed remark about installdox from the FAQ [<a href="http://github.com/doxygen/doxygen/commit/68080883535bb146e2e4f65943c8b836da6b68e0">view</a>]</li> -<li>Restructered html entity handling [<a href="http://github.com/doxygen/doxygen/commit/dfa20277697fe904a0846b60a01cc388fc13c933">view</a>]</li> +<li>Restructured html entity handling [<a href="http://github.com/doxygen/doxygen/commit/dfa20277697fe904a0846b60a01cc388fc13c933">view</a>]</li> <li>Reverted #132 after submitter reported that it did not work [<a href="http://github.com/doxygen/doxygen/commit/fdc81edcd47ce176648d7507d0597294098ae8aa">view</a>]</li> <li>Showing error message on windows in case on error on startup [<a href="http://github.com/doxygen/doxygen/commit/6a0651d9328262271ade2b733c125aae4415e3c3">view</a>]</li> <li>Simplified LaTeX header/footer escaping [<a href="http://github.com/doxygen/doxygen/commit/3337add3a6e05e26800c9e269b23fff272a9534c">view</a>]</li> @@ -659,480 +1049,489 @@ <li>util/patternMatch: break when pattern is found [<a href="http://github.com/doxygen/doxygen/commit/6d8c3184fadb1834223236b13471797089e4a004">view</a>]</li> <li>util/patternMatch: don't extract a QCString(QFileInfo) each time we QRegExp.match [<a href="http://github.com/doxygen/doxygen/commit/8991d11cc824f40c11a28ccc38c09e9b10f722c3">view</a>]</li> </ul> +<p> \endhtmlonly \subsection log_1_8_6 Release 1.8.6 \htmlonly <b>(release date 24-12-2013)</b> <a name="1.8.6"></a> +</p> <h3>Bug fixes</h3> <ul> -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=154880">154880</a> - if "using namespace" used, call of a static member function in C++ is not recognized or recognized wrong -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=647517">647517</a> - make install prepends a slash to the installation path Removed superfluous / -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668424">668424</a> - HTML links in RTF output are broken -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683897">683897</a> - class list not sorted? -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692004">692004</a> - show includes for free functions -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693537">693537</a> - Create possibility to keep user comments in Doxyfile -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701949">701949</a> - Latex: Hyperlinks for \secreflist / \refitem -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702265">702265</a> - Generated Doxyfile differs from result of doxygen -u (partial fix) -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705910">705910</a> - Indexing and searching cannot treat non ASCII identifiers -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706520">706520</a> - Fortran: in body documentation lands on wrong place In some cases, in propriety code, with in body Fortran documentation doxygen crashed. I REOPENED Bug_706520 for this -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706804">706804</a> - Fortran: Doxygen mixes up function-attributes with the return type test string should not be equal to "function" but should contain "function" -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706813">706813</a> - RPM build via spec file fails -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706874">706874</a> - Doxygen crash if missing new-line in a snippet -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706916">706916</a> - C++ exception specifications are no longer parsed correctly -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707102">707102</a> - update the Japanese translation -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707353">707353</a> - Accept IDs using unicode(non ASCII) characters in python codes -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707389">707389</a> - GENERATE_TREEVIEW=YES disables touch scrolling with Android 3.x -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707431">707431</a> - Cannot @ref or @link C++ operator overloads -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707483">707483</a> - Wrong page number and header in pdf output -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707554">707554</a> - When I use @INCLUDE DoxyWizard is closed Current directory was not changed at the right time so the include files could not be found in the "current" directory (i.e. the directory where the Doxyfile resides too, as this directory is shown as the current directory in the doxywizard). This is also important when the doxywizard is started from a shortcut. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707567">707567</a> - Asterisks in comment wrongly displayed for @code -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707641">707641</a> - `FILTER_SOURCE_FILES=YES` required to build CALL_GRAPHS https://bugzilla.gnome.org/show_bug.cgi?id=707641 -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707685">707685</a> - Fortran: error message when missing last EOL In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707713">707713</a> - Add support for dia diagrams -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707825">707825</a> - Const treatment -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707925">707925</a> - False warning for Java "warning: missing ( in exception list on member" -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707985">707985</a> - Strange output when : appended to an parameter description -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707995">707995</a> - @copydoc not working for const member overloads -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708446">708446</a> - Deprecated list breaks HTML tree with xhtml extension -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708455">708455</a> - Enabling INLINE_SIMPLE_STRUCTS messes up Data Structures in tree -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708806">708806</a> - Wrong path to graph_legend figure in graph_legend.html when CREATE_SUBDIRS = YES -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709052">709052</a> - Templated and non-templated method mixup documentation -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709226">709226</a> - Struct member fields not documented with INLINE_SIMPLE_STRUCTS -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709526">709526</a> - C++ parsing problem with operators <<, <, >, >> inside templates -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709706">709706</a> - Terminating C comments within markdown files breaks aliases -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709780">709780</a> - Copying of files via \image tag can get confused by symlinks at the destination -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709803">709803</a> - Generated hhc file contains an error for a section of a mainpage -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709845">709845</a> - Fortran: problem with types with name starting with is -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709870">709870</a> - Broken links on members HTML page when using BUILTIN_STL_SUPPORT -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709921">709921</a> - position of linebreak in template argument list affects inheritance relation -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=710917">710917</a> - Segfault while parsing a C file -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=710998">710998</a> - latex_count=5 is not enough -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711004">711004</a> - Vertical bars cannot be sent straight to makeindex -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711097">711097</a> - Compiler warnings because char is unsigned on ARM/PPC: "comparison is always false" -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711378">711378</a> - Nested Aliases fail when the nested alias has two or more arguments. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711639">711639</a> - [PATCH] #include does not work with absolute paths -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711723">711723</a> - Comment /**/ confuses doxygen -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711787">711787</a> - Long initialization line in C stops doxygen An extra "breakpoint" in the input string has been created in the form of a , (comma), so for initialization lines the line will be shorter and the , (comma) will be copied later on. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=712795">712795</a> - segmentation fault in memberdef.cpp -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=712819">712819</a> - Some external namespaces appear in list despite having ALLEXTERNALS = NO -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=715172">715172</a> - Consistently document Fortran's equivalent function bodies -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719389">719389</a> - HTML escaping incorrectly applied in source tooltips -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719422">719422</a> - private java class is mentioned in inherited by list of super class -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719463">719463</a> - Invalid null key and segmentation fault -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719489">719489</a> - Label "abstract" instead of "pure virtual" for Java language -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719525">719525</a> - Can't build because the definitions of ***YY_flex_debug are missing. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719591">719591</a> - expand_as_defined macro does not properly work -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719639">719639</a> - @xrefitem with empty heading string -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720046">720046</a> - Document inline objective-C blocks -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720092">720092</a> - USE_MDFILE_AS_MAINPAGE doesn't work if full path is specified. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720580">720580</a> - inline source browser shows wrong code with muilti-line c++11's raw strings -<li> Add support for honoring svg image format preference in msc -<li> Added @parblock and @endparblock commands -<li> Added compile support for Mavericks -<li> Added fix to avoid errors with older compilers. -<li> Added generated files to gitignore -<li> Added missing docs tag -<li> Added missing pthread lib to doxyapp -<li> Added missing space after @parblock -<li> Added rudimentary support for Django like template system for output creation. -<li> Added the possibility to specify the -d option in the Visual studio GUI on windows for the lex rules -<li> Adjust internationalization part to current situation -<li> Alignment of @code and @verbatim section When having a code and a verbatim section the boxes are not alligned, this patch fixes this. Example code, aa.c; standard Doxyfile: /** \file -<li> Allow @ref to unlabeled markdown page by name, i.e. @ref mypage.md -<li> Allow links to other markdown pages of the form [link text](page.md) -<li> Avoid accessing uninitialized memory in fileToString -<li> Build problem with unistd.h and Cygwin The standard g++ compiler under windows (win32-g++) has unistd.gh file; Microsoft windows does not have it, therfore it is better to use the winbuild directory in case of windows adn no dependency otherwise -<li> Consistency in language part of the documentation Made documentation more inline with other parts of the documentation (regarding the way e.g. filenames are presented) Corrected some spelling errors Corrected the warning in the language.doc by placing ta reference to the files from which language.doc is generated Corrected the color for the languages that are still v1.4.6 (language name now also red in stead of a pink background, was confusing with languages that were 1.5 / 1.6 compatible) -<li> Corrected some inconsistencies in the comments -<li> Debug output for lexical analyzer -<li> Deleted generated files from source repository -<li> Doxygen didn't allow @ref to parameters of type reference to an array. -<li> Doxysearch under Cygwin should not have extension cgi.exe but just .cgi -<li> Esperanto not supported by htmlhelp compiler reverting for esperanto to default language (US English) -<li> Fixed a number of compiler warnings reported by newer clang compiler -<li> Fixed compilation issues in doxyapp -<li> Fixed compile warning -<li> Fixed compiler warning related to implicit size_t to int conversion -<li> Fixed constness warning -<li> Fixed invalid if statement found by cppcheck -<li> Fixed issue with Romanian translator preventing treeview from working -<li> Fixed regression autolinking C# template such as MyGenericClass<T>.g() -<li> Fixed regression in argument matching for the template example -<li> Fortran added keyword IMPURE -<li> French translator up-to-date. -<li> Internal documentation for debug possibilities Documentation regarding usage of -d option with [f]lex Initial documentation regarding the -d options with doxygen -<li> LaTeX: Fix ToC entries of index/bibliography -<li> Made lexer rule explicit -<li> Make Python detection in configure work with version older than 2.7 -<li> Minor layout tweaks and extra guard -<li> More fixes for the Windows build -<li> Patch regarding generating the rules file for the windows build regarding languages, some inconsistencies in the (windows) build system, corrections to some spelling. -<li> Regenerated language.doc -<li> Removed japanese characters in maintainers.txt as they break the build -<li> Removed redundant backslashes in regexp pattern -<li> Report details about fork() failure in logs. -<li> Russian translator updated, new Russian maintainer added. -<li> Small spelling correction to generate an rtf extensions file -> to generate a rtf extensions file -<li> Some texts can be independent of \htmlonly / \latexonly -<li> Space missing in error message. the word 'in' and the vale of filesOption were concatenated -<li> This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commends have been replaced with python scripts so that on windows only python is need (besides flex and and bison). On *nix also perl is required for the generation using tmake. -<li> Updated Visual Studio project files to include new source files -<li> Usage of the -d opion corrected Giving an error when a wrong -d option is given. Made some error mesages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used. -<li> VHDL-2008 and arrays on unconstrained elements -<li> consider currentFile when searching for global symbols -<li> doc/language.doc generated from the updated sources (bgcolored) -<li> doc/language.tpl -- UTF-8 reflected in the langhowto template -<li> doc/language.tpl -- trailing spaces removed -<li> doc/translator.py -- coloured status in HTML -<li> doxygen /** style creates spurious code blocks with markdown enabled -<li> doxygen version 1.8.5 throws many "Internal Inconsistency" errors when parsing .idl files -<li> doxygen.sty.h was not ignored and not included/generated properly -<li> testing dir was missing from 'make archive' -<li> usage: make -d print dev doxygen options +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=154880">154880</a> - if "using namespace" used, call of a static member function in C++ is not recognized or recognized wrong</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=647517">647517</a> - make install prepends a slash to the installation path Removed superfluous /</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668424">668424</a> - HTML links in RTF output are broken</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683897">683897</a> - class list not sorted?</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692004">692004</a> - show includes for free functions</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693537">693537</a> - Create possibility to keep user comments in Doxyfile</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701949">701949</a> - Latex: Hyperlinks for \secreflist / \refitem</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702265">702265</a> - Generated Doxyfile differs from result of doxygen -u (partial fix)</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705910">705910</a> - Indexing and searching cannot treat non ASCII identifiers</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706520">706520</a> - Fortran: in body documentation lands on wrong place In some cases, in propriety code, with in body Fortran documentation doxygen crashed. I REOPENED Bug_706520 for this</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706804">706804</a> - Fortran: Doxygen mixes up function-attributes with the return type test string should not be equal to "function" but should contain "function"</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706813">706813</a> - RPM build via spec file fails</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706874">706874</a> - Doxygen crash if missing new-line in a snippet</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706916">706916</a> - C++ exception specifications are no longer parsed correctly</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707102">707102</a> - update the Japanese translation</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707353">707353</a> - Accept IDs using unicode(non ASCII) characters in python codes</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707389">707389</a> - GENERATE_TREEVIEW=YES disables touch scrolling with Android 3.x</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707431">707431</a> - Cannot @ref or @link C++ operator overloads</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707483">707483</a> - Wrong page number and header in pdf output</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707554">707554</a> - When I use @INCLUDE DoxyWizard is closed Current directory was not changed at the right time so the include files could not be found in the "current" directory (i.e. the directory where the Doxyfile resides too, as this directory is shown as the current directory in the doxywizard). This is also important when the doxywizard is started from a shortcut.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707567">707567</a> - Asterisks in comment wrongly displayed for @code</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707641">707641</a> - `FILTER_SOURCE_FILES=YES` required to build CALL_GRAPHS https://bugzilla.gnome.org/show_bug.cgi?id=707641</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707685">707685</a> - Fortran: error message when missing last EOL In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707713">707713</a> - Add support for dia diagrams</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707825">707825</a> - Const treatment</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707925">707925</a> - False warning for Java "warning: missing ( in exception list on member"</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707985">707985</a> - Strange output when : appended to an parameter description</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=707995">707995</a> - @copydoc not working for const member overloads</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708446">708446</a> - Deprecated list breaks HTML tree with xhtml extension</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708455">708455</a> - Enabling INLINE_SIMPLE_STRUCTS messes up Data Structures in tree</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=708806">708806</a> - Wrong path to graph_legend figure in graph_legend.html when CREATE_SUBDIRS = YES</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709052">709052</a> - Templated and non-templated method mixup documentation</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709226">709226</a> - Struct member fields not documented with INLINE_SIMPLE_STRUCTS</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709526">709526</a> - C++ parsing problem with operators <<, <, >, >> inside templates</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709706">709706</a> - Terminating C comments within markdown files breaks aliases</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709780">709780</a> - Copying of files via \image tag can get confused by symlinks at the destination</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709803">709803</a> - Generated hhc file contains an error for a section of a mainpage</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709845">709845</a> - Fortran: problem with types with name starting with is</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709870">709870</a> - Broken links on members HTML page when using BUILTIN_STL_SUPPORT</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=709921">709921</a> - position of linebreak in template argument list affects inheritance relation</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=710917">710917</a> - Segfault while parsing a C file</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=710998">710998</a> - latex_count=5 is not enough</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711004">711004</a> - Vertical bars cannot be sent straight to makeindex</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711097">711097</a> - Compiler warnings because char is unsigned on ARM/PPC: "comparison is always false"</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711378">711378</a> - Nested Aliases fail when the nested alias has two or more arguments.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711639">711639</a> - [PATCH] #include does not work with absolute paths</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711723">711723</a> - Comment /**/ confuses doxygen</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=711787">711787</a> - Long initialization line in C stops doxygen An extra "breakpoint" in the input string has been created in the form of a , (comma), so for initialization lines the line will be shorter and the , (comma) will be copied later on.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=712795">712795</a> - segmentation fault in memberdef.cpp</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=712819">712819</a> - Some external namespaces appear in list despite having ALLEXTERNALS = NO</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=715172">715172</a> - Consistently document Fortran's equivalent function bodies</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719389">719389</a> - HTML escaping incorrectly applied in source tooltips</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719422">719422</a> - private java class is mentioned in inherited by list of super class</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719463">719463</a> - Invalid null key and segmentation fault</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719489">719489</a> - Label "abstract" instead of "pure virtual" for Java language</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719525">719525</a> - Can't build because the definitions of ***YY_flex_debug are missing.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719591">719591</a> - expand_as_defined macro does not properly work</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=719639">719639</a> - @xrefitem with empty heading string</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720046">720046</a> - Document inline objective-C blocks</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720092">720092</a> - USE_MDFILE_AS_MAINPAGE doesn't work if full path is specified.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=720580">720580</a> - inline source browser shows wrong code with multi-line c++11's raw strings</li> +<li> Add support for honoring svg image format preference in msc</li> +<li> Added @parblock and @endparblock commands</li> +<li> Added compile support for Mavericks</li> +<li> Added fix to avoid errors with older compilers.</li> +<li> Added generated files to gitignore</li> +<li> Added missing docs tag</li> +<li> Added missing pthread lib to doxyapp</li> +<li> Added missing space after @parblock</li> +<li> Added rudimentary support for Django like template system for output creation.</li> +<li> Added the possibility to specify the -d option in the Visual studio GUI on windows for the lex rules</li> +<li> Adjust internationalization part to current situation</li> +<li> Alignment of @code and @verbatim section When having a code and a verbatim section the boxes are not aligned, this patch fixes this. Example code, aa.c; standard Doxyfile: /** \file</li> +<li> Allow @ref to unlabeled markdown page by name, i.e. @ref mypage.md</li> +<li> Allow links to other markdown pages of the form [link text](page.md)</li> +<li> Avoid accessing uninitialized memory in fileToString</li> +<li> Build problem with unistd.h and Cygwin The standard g++ compiler under windows (win32-g++) has unistd.gh file; Microsoft windows does not have it, therefore it is better to use the winbuild directory in case of windows and no dependency otherwise</li> +<li> Consistency in language part of the documentation Made documentation more inline with other parts of the documentation (regarding the way e.g. filenames are presented) Corrected some spelling errors Corrected the warning in the language.doc by placing ta reference to the files from which language.doc is generated Corrected the color for the languages that are still v1.4.6 (language name now also red in stead of a pink background, was confusing with languages that were 1.5 / 1.6 compatible)</li> +<li> Corrected some inconsistencies in the comments</li> +<li> Debug output for lexical analyzer</li> +<li> Deleted generated files from source repository</li> +<li> Doxygen didn't allow @ref to parameters of type reference to an array.</li> +<li> Doxysearch under Cygwin should not have extension cgi.exe but just .cgi</li> +<li> Esperanto not supported by htmlhelp compiler reverting for Esperanto to default language (US English)</li> +<li> Fixed a number of compiler warnings reported by newer clang compiler</li> +<li> Fixed compilation issues in doxyapp</li> +<li> Fixed compile warning</li> +<li> Fixed compiler warning related to implicit size_t to int conversion</li> +<li> Fixed constness warning</li> +<li> Fixed invalid if statement found by cppcheck</li> +<li> Fixed issue with Romanian translator preventing treeview from working</li> +<li> Fixed regression autolinking C# template such as MyGenericClass<T>.g()</li> +<li> Fixed regression in argument matching for the template example</li> +<li> Fortran added keyword IMPURE</li> +<li> French translator up-to-date.</li> +<li> Internal documentation for debug possibilities Documentation regarding usage of -d option with [f]lex Initial documentation regarding the -d options with doxygen</li> +<li> LaTeX: Fix ToC entries of index/bibliography</li> +<li> Made lexer rule explicit</li> +<li> Make Python detection in configure work with version older than 2.7</li> +<li> Minor layout tweaks and extra guard</li> +<li> More fixes for the Windows build</li> +<li> Patch regarding generating the rules file for the windows build regarding languages, some inconsistencies in the (windows) build system, corrections to some spelling.</li> +<li> Regenerated language.doc</li> +<li> Removed Japanese characters in maintainers.txt as they break the build</li> +<li> Removed redundant backslashes in regexp pattern</li> +<li> Report details about fork() failure in logs.</li> +<li> Russian translator updated, new Russian maintainer added.</li> +<li> Small spelling correction to generate an rtf extensions file -> to generate a rtf extensions file</li> +<li> Some texts can be independent of \htmlonly / \latexonly</li> +<li> Space missing in error message. the word 'in' and the vale of filesOption were concatenated</li> +<li> This patch contains changes regarding the build system so that the *nix and Windows systems use the same information (consistency). Some use names routine names have been changed (from .l files with -P option) to reflect the file name that generated the routines, this makes it easier to create a general procedure. A number of include / header files are files are generated from different file types (html, xml, js), due some limitations of the windows build system the generated file names had to be changed (the extension in the windows build system is only available including the '.' so e.g. the file jquery_fx.js generates now jquery_fx.js.h instead of jquery_fx_js.h) In the windows version the creation of .cpp files from .l files has been adjusted to correct for the YY_BUF_SIZE problems. Furthermore on windows (and also used on *nix) some commends have been replaced with python scripts so that on windows only python is need (besides flex and bison). On *nix also perl is required for the generation using tmake.</li> +<li> Updated Visual Studio project files to include new source files</li> +<li> Usage of the -d option corrected Giving an error when a wrong -d option is given. Made some error messages more consistent. Corrected usage of the exit call, in case of an error: exit(1) otherwise exit(0). A closer look should be made on exitDoxygen as it does not contain any exit statements and it is unclear (to me) when it is used.</li> <li> VHDL-2008 and arrays on unconstrained elements</li> +<li> consider currentFile when searching for global symbols</li> +<li> doc/language.doc generated from the updated sources (bgcolored)</li> +<li> doc/language.tpl -- UTF-8 reflected in the langhowto template</li> +<li> doc/language.tpl -- trailing spaces removed</li> +<li> doc/translator.py -- coloured status in HTML</li> +<li> doxygen /** style creates spurious code blocks with markdown enabled</li> +<li> doxygen version 1.8.5 throws many "Internal Inconsistency" errors when parsing .idl files</li> +<li> doxygen.sty.h was not ignored and not included/generated properly</li> +<li> testing dir was missing from 'make archive'</li> +<li> usage: make -d print dev doxygen options</li> </ul> +<p> \endhtmlonly \subsection log_1_8_5 Release 1.8.5 \htmlonly <b>(release date 23-08-2013)</b> <a name="1.8.5"></a> +</p> <h3>Changes</h3> <ul> <li>Doxygen's source code is now managed using git and GitHub. Automatic builds - and regression tests are scheduled via Travis CI. + and regression tests are scheduled via Travis CI.</li> <li>Configuration data for the config file, the documentation, and the wizard - are now produced from a single source (thanks to Albert) -<li>All translation files have been migrated to UTF-8 (thanks to Petr Prikryl) -<li>Added black box testing framework and a set of tests. + are now produced from a single source (thanks to Albert)</li> +<li>All translation files have been migrated to UTF-8 (thanks to Petr Prikryl)</li> +<li>Added black box testing framework and a set of tests.</li> </ul> <h3>New features</h3> <ul> -<li>Added SOURCE_TOOLTIPS option for advanced tooltip support while source browsing. +<li>Added SOURCE_TOOLTIPS option for advanced tooltip support while source browsing.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668007">668007</a> - HTML commands - documentation of </dd> tag missing -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676879">676879</a> - parameter on doxywizard manual Added sentenc in respect to possible argument for doxywizard Added images to the LaTex / pdf version of the manual -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684324">684324</a> - Strange behavior when placing cite within brief. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688858">688858</a> - SHORT_NAMES break references to \page in PDF output -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691315">691315</a> - Line breaks are not copied/displayed properly when using @copydoc. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691830">691830</a> - Logical confusion with DISABLE_INDEX and GENERATE_TREEVIEW -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694147">694147</a> - #undef is ignored by doxygen -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698998">698998</a> - vhdldocgen fails to generate proper latex for VHDL record type -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700385">700385</a> - Incorrectly parsed Q_PROPERTY with 'unsigned int' type -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700646">700646</a> - XML output does not handle HTML entities in titles -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700693">700693</a> - Duplicate entry for class template member function with no parameter -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700696">700696</a> - Template static member functions duplicated as non-static public -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700709">700709</a> - typedef warning when "using" some operator functions -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700710">700710</a> - Docbook output produces invalid XML for <programlisting> elements -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700740">700740</a> - Doxygen does not create links on C++ 11 style enum classes -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700788">700788</a> - support @cite within brief description. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700908">700908</a> - code after \@cond is removed -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701295">701295</a> - Doxygen 1.8.4 goes into an endless loop -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701314">701314</a> - URLs are not created on C# classes in some cases -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701550">701550</a> - Error List window in Visual Studio no longer recognizes doxygen warnings -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701771">701771</a> - EXPAND_AS_DEFINED not working with some project structures -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701919">701919</a> - VHDL cross-references fail when unpaired apostrophe present -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702066">702066</a> - VHDL: Bad HTML formatting when using inline sources -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702170">702170</a> - Missing space before optional option in method argument list -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702189">702189</a> - Markdown and @image -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702491">702491</a> - UTF-16LE BOM not handled by source browser and \snippet -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702590">702590</a> - Crash with TAB_SIZE=-1 -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702676">702676</a> - Closing ) of function in function documentation is in wrong color -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703574">703574</a> - Add configure options to enable static SQLite and non-standard SQLite -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703112">703112</a> - Backward documentation comments are not allowed in Fortran type-bound procedures -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703133">703133</a> - "operator--()" transformed to "operator&ndash;()" in @copydoc -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703170">703170</a> - Segmentation fault parsing a fortran file -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703213">703213</a> - Can't use @ref instead of \ref with msc -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703301">703301</a> - Misleading warning about DOT font -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703791">703791</a> - Out-of-line docs for class template specialisations failing -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704079">704079</a> - Generated XML is malformed -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704172">704172</a> - Nested Aliases fail when the nested alias has two or more arguments. -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704412">704412</a> - doxygen don't hide private Inherited Members -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704971">704971</a> - Can't build with MinGW -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704973">704973</a> - Doxywizard can't show file names using non-ASCII(Unicode) -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705190">705190</a> - Incorrectly parsed Q_PROPERTY with 'long long' or 'long int' type -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705217">705217</a> - Can't use unicode characters to execute external commands -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705218">705218</a> - QRegExp doesn't work with 80-FF -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705219">705219</a> - Accept IDs using unicode for C/C++ preprocessor -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705586">705586</a> - @code tag as the last line of a comment block causes the parser to hang -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705702">705702</a> - Post-comment blocks on C++11 using definitions attach to following entity -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706236">706236</a> - Confusing use of GENERATE_TAGFILE -<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706520">706520</a> - Fortran: in body documentation lands on wrong place -<li> Small typo correceted in doxywizard_usage.doc Generated config.doc file in git is not identical to the generated one -<li> Various improvements to the (still experimental) sqlite3 support (thanks to Adrian Negreanu) -<li> jquery: use the env MINIFIER if specified -<li> Some words now in code style __attribute__ was seen (markdown) as the bold word attribute Reformulation of a sentence due to a not nice split of word (__declspec was split directly after __ in pdf) -<li> Extended list with supported options for automatic link generation -<li> Added -v option (analogous to --version). In case option started with -- and is not a known valuue (help or version) and error is given instead of starting Doxygen -<li> Fixed regression when nested class were processed before their parent -<li> Minor changes to the way the code for config options is generated (thanks to Albert for the patch) -<li> Brief description did not appear in the page index, when a page did not have any details. -<li> Using & in the project name caused invalid HTML and LaTeX output -<li> Fixed regression caused by the patch for bug 705219 -<li> Fixed issue running dot on files with non-ascii characters -<li> Delayed expanding the HTML navigation tree until after the page has loaded -<li> Made some fixed to the configure script for Cygwin (thanks to David Stacey) -<li> config.xml is now used to generate configoptions.cpp and config.doc -<li> Fixed whitespace issue when using \overload without arguments -<li> Avoid space in the output after \n command following by a newline. -<li> Fixed problem handling C comments inside a \code block. -<li> Improved handling of \internal and \endinternal -<li> Removed extra newline when reading in an input file -<li> Make XML output adhere to MAX_INITIALIZER_LINES -<li> Fixed issue handling \elseif after \ifnot -<li> Fixed regression that could cause double nested classes -<li> Fixed issue handling \docbookonly..\enddocbookonly section -<li> The language specifier in e.g. \code{.py} was ignored for the XML output -<li> Fix reference to scoped enum imported via a tag file. -<li> Replaced utf8 character that broke latex compilation of the manual -<li> Fixed unused parameter warnings -<li> Add support for writing and importing C++11 style enums to and from tag files -<li> Fixed regression introduced by fixed bug Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700740">700740</a> -<li> Fixed type in function name -<li> Remove some unneeded and still enabled debug info -<li> Included fix for "Constant Groups" regression on file pages (thanks to Michael Stahl) -<li> Add scopes to Fortran prototype name parsing (thanks to Oleg Batrashev). -<li> Prototype scan for function, does not yet catch parameter types (thanks to Oleg Batrashev). +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668007">668007</a> - HTML commands - documentation of </dd> tag missing</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676879">676879</a> - parameter on doxywizard manual Added sentence in respect to possible argument for doxywizard Added images to the LaTex / pdf version of the manual</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684324">684324</a> - Strange behavior when placing cite within brief. </li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688858">688858</a> - SHORT_NAMES break references to \page in PDF output</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691315">691315</a> - Line breaks are not copied/displayed properly when using @copydoc. </li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691830">691830</a> - Logical confusion with DISABLE_INDEX and GENERATE_TREEVIEW</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694147">694147</a> - #undef is ignored by doxygen</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698998">698998</a> - vhdldocgen fails to generate proper latex for VHDL record type</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700385">700385</a> - Incorrectly parsed Q_PROPERTY with 'unsigned int' type</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700646">700646</a> - XML output does not handle HTML entities in titles</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700693">700693</a> - Duplicate entry for class template member function with no parameter</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700696">700696</a> - Template static member functions duplicated as non-static public</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700709">700709</a> - typedef warning when "using" some operator functions</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700710">700710</a> - Docbook output produces invalid XML for <programlisting> elements</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700740">700740</a> - Doxygen does not create links on C++ 11 style enum classes</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700788">700788</a> - support @cite within brief description.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700908">700908</a> - code after \@cond is removed</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701295">701295</a> - Doxygen 1.8.4 goes into an endless loop</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701314">701314</a> - URLs are not created on C# classes in some cases</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701550">701550</a> - Error List window in Visual Studio no longer recognizes doxygen warnings</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701771">701771</a> - EXPAND_AS_DEFINED not working with some project structures</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=701919">701919</a> - VHDL cross-references fail when unpaired apostrophe present</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702066">702066</a> - VHDL: Bad HTML formatting when using inline sources</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702170">702170</a> - Missing space before optional option in method argument list</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702189">702189</a> - Markdown and @image</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702491">702491</a> - UTF-16LE BOM not handled by source browser and \snippet</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702590">702590</a> - Crash with TAB_SIZE=-1</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=702676">702676</a> - Closing ) of function in function documentation is in wrong color</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703574">703574</a> - Add configure options to enable static SQLite and non-standard SQLite</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703112">703112</a> - Backward documentation comments are not allowed in Fortran type-bound procedures</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703133">703133</a> - "operator--()" transformed to "operator&ndash;()" in @copydoc</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703170">703170</a> - Segmentation fault parsing a fortran file</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703213">703213</a> - Can't use @ref instead of \ref with msc</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703301">703301</a> - Misleading warning about DOT font</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=703791">703791</a> - Out-of-line docs for class template specialisations failing</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704079">704079</a> - Generated XML is malformed</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704172">704172</a> - Nested Aliases fail when the nested alias has two or more arguments.</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704412">704412</a> - doxygen don't hide private Inherited Members</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704971">704971</a> - Can't build with MinGW</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=704973">704973</a> - Doxywizard can't show file names using non-ASCII(Unicode)</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705190">705190</a> - Incorrectly parsed Q_PROPERTY with 'long long' or 'long int' type</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705217">705217</a> - Can't use unicode characters to execute external commands</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705218">705218</a> - QRegExp doesn't work with 80-FF</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705219">705219</a> - Accept IDs using unicode for C/C++ preprocessor</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705586">705586</a> - @code tag as the last line of a comment block causes the parser to hang</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=705702">705702</a> - Post-comment blocks on C++11 using definitions attach to following entity</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706236">706236</a> - Confusing use of GENERATE_TAGFILE</li> +<li> Bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=706520">706520</a> - Fortran: in body documentation lands on wrong place</li> +<li> Small typo corrected in doxywizard_usage.doc Generated config.doc file in git is not identical to the generated one</li> +<li> Various improvements to the (still experimental) sqlite3 support (thanks to Adrian Negreanu)</li> +<li> jquery: use the env MINIFIER if specified</li> +<li> Some words now in code style __attribute__ was seen (markdown) as the bold word attribute Reformulation of a sentence due to a not nice split of word (__declspec was split directly after __ in pdf)</li> +<li> Extended list with supported options for automatic link generation</li> +<li> Added -v option (analogous to --version). In case option started with -- and is not a known value (help or version) and error is given instead of starting doxygen</li> +<li> Fixed regression when nested class were processed before their parent</li> +<li> Minor changes to the way the code for config options is generated (thanks to Albert for the patch)</li> +<li> Brief description did not appear in the page index, when a page did not have any details.</li> +<li> Using & in the project name caused invalid HTML and LaTeX output</li> +<li> Fixed regression caused by the patch for bug 705219</li> +<li> Fixed issue running dot on files with non-ascii characters</li> +<li> Delayed expanding the HTML navigation tree until after the page has loaded</li> +<li> Made some fixed to the configure script for Cygwin (thanks to David Stacey)</li> +<li> config.xml is now used to generate configoptions.cpp and config.doc</li> +<li> Fixed whitespace issue when using \overload without arguments</li> +<li> Avoid space in the output after \n command following by a newline.</li> +<li> Fixed problem handling C comments inside a \code block.</li> +<li> Improved handling of \internal and \endinternal</li> +<li> Removed extra newline when reading in an input file</li> +<li> Make XML output adhere to MAX_INITIALIZER_LINES</li> +<li> Fixed issue handling \elseif after \ifnot</li> +<li> Fixed regression that could cause double nested classes</li> +<li> Fixed issue handling \docbookonly..\enddocbookonly section</li> +<li> The language specifier in e.g. \code{.py} was ignored for the XML output</li> +<li> Fix reference to scoped enum imported via a tag file.</li> +<li> Replaced utf8 character that broke latex compilation of the manual</li> +<li> Fixed unused parameter warnings</li> +<li> Add support for writing and importing C++11 style enums to and from tag files</li> +<li> Fixed regression introduced by fixed bug <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700740">700740</a></li> +<li> Fixed type in function name</li> +<li> Remove some unneeded and still enabled debug info</li> +<li> Included fix for "Constant Groups" regression on file pages (thanks to Michael Stahl) </li> +<li> Add scopes to Fortran prototype name parsing (thanks to Oleg Batrashev).</li> +<li> Prototype scan for function, does not yet catch parameter types (thanks to Oleg Batrashev).</li> </ul> +<p> \endhtmlonly \subsection log_1_8_4 Release 1.8.4 \htmlonly <b>(release date 19-05-2013)</b> <a name="1.8.4"></a> +</p> <h3>Changes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686384">686384</a>: When INLINE_SIMPLE_STRUCTS is enabled, also structs with - simple typedefs will be inlined. + simple typedefs will be inlined.</li> <li> Doxywizard: scrolling with mouse wheel no longer affects the values in - the expert view. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681733">681733</a>: More consistent warnings and errors. + the expert view.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681733">681733</a>: More consistent warnings and errors.</li> </ul> <h3>New features</h3> <ul> <li> Added support for "clang assisted parsing", which allows the code to also be parsed via libclang (C/C++ frontend of LLVM) - and can improve the quality of the syntax highting, cross-references, + and can improve the quality of the syntax highlighting, cross-references, and call graphs, especially for template heavy C++ code. To enable this feature you have to configure doxygen with the --with-libclang option. Then you get two new configuration options: CLANG_ASSISTED_PARSING to enable or disable parsing via clang and CLANG_OPTIONS to pass additional compiler options needed to compile the files. Note that enabling this feature - has a significant performance penality. + has a significant performance penalty.</li> <li> Included patch donated by Intel which adds Docbook support. This can be enabled via GENERATE_DOCBOOK and the output location can be controlled using DOCBOOK_OUTPUT. Docbook specific sections can be - added using \docbookonly ... \enddocbookonly -<li> Added support for UNO IDL (interace language used in Open/Libre Office), thanks to - Michael Stahl for the patch. + added using \docbookonly ... \enddocbookonly</li> +<li> Added support for UNO IDL (interface language used in Open/Libre Office), thanks to + Michael Stahl for the patch.</li> <li> Included patch by Adrian Negreanu which stores data gathered by doxygen in a sqlite3 database. Currently still work in progress and - can only be enabled using --with-sqlite3 during ./configure. + can only be enabled using --with-sqlite3 during ./configure.</li> <li> For interactive SVG graphs, edges are now highlighted when hovered by - the mouse. + the mouse.</li> <li> Include patch by Adrian Negreanu to show duration statistics after a run. - You can enable this by running doxygen with the "-d Time" option. + You can enable this by running doxygen with the "-d Time" option.</li> <li> Included patch by Markus Geimer which adds a new option - LATEX_EXTRA_FILES which works similarily to HTML_EXTRA_FILES in that - it copied specified files to the LaTeX output directory. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698223">698223</a>: Added support for C++11 keyword alignas + LATEX_EXTRA_FILES which works similarly to HTML_EXTRA_FILES in that + it copied specified files to the LaTeX output directory.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698223">698223</a>: Added support for C++11 keyword alignas</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693178">693178</a>: Added support for processing DocSets with Dash (thanks to - Bogdan Popescu for the patch + Bogdan Popescu for the patch </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684782">684782</a>: Added option EXTERNAL_PAGES which can be used to determine whether or not pages importated via tags will appear under related - pages (similar to EXTERNAL_GROUPS). + pages (similar to EXTERNAL_GROUPS).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692227">692227</a>: Added new MathJax command MATHJAX_CODEFILE which supports including a file with MathJax related scripting to be inserted before - the MathJax script is loaded. Thanks to Albert for the patch. + the MathJax script is loaded. Thanks to Albert for the patch.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693537">693537</a>: Comments in the config file starting with ## will now be kept when upgrading the file with doxygen -u (and doxygen -s -u). - Thanks to Albert for the patch. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693422">693422</a>: Adds support for Latvian (thanks to a patch by Lauris). -<li> Included language updates for Ukrainian, Romanian, and Korean + Thanks to Albert for the patch.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693422">693422</a>: Adds support for Latvian (thanks to a patch by Lauris).</li> +<li> Included language updates for Ukrainian, Romanian, and Korean</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=145294">145294</a>: Fixed parse issue when using less than inside a template - argument. + argument.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=325266">325266</a> man page output was missing a linebreak before .SH when - definition a group with a section. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=338205">338205</a>: @anchor were wrong when CREATE_SUBDIRS was enabled. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=427012">427012</a>: Putting a @todo in front of an anonoymous namespace caused - bogus entry in the todo list. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=564462">564462</a>: Fixed alignment issue with tabs and multibyte characters. + definition a group with a section.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=338205">338205</a>: @anchor were wrong when CREATE_SUBDIRS was enabled.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=427012">427012</a>: Putting a @todo in front of an anonymous namespace caused + bogus entry in the todo list.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=564462">564462</a>: Fixed alignment issue with tabs and multibyte characters.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567542">567542</a>: Character entities in titles were not rendered correctly - in the HTML navigation tree. + in the HTML navigation tree.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=571561">571561</a>: No space between * and tag (e.g. \endcode) made parser - misbehave + misbehave</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=583233">583233</a>: Included patch to limit generated Doxyfile comments to 80 - columns -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592626">592626</a>: Fixed off-by-one with MAX_DOT_GRAPH_DEPTH. + columns</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592626">592626</a>: Fixed off-by-one with MAX_DOT_GRAPH_DEPTH.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619790">619790</a>: Improved linking to template specializations. - Thanks to David Haney for the patch. + Thanks to David Haney for the patch.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=627712">627712</a>: Doxygen Header in C Files makes empty Lines in HTML Source - Code when starts in Line 1 + Code when starts in Line 1</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=639954">639954</a>: Fortran: array constructors with brackets were not correctly - recognized. + recognized.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646428">646428</a>: The generated man pages had a .PP just before the subject - description + description</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646431">646431</a>: On generated manpages the return section is incorrectly - indented + indented</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650004">650004</a>: use \page now generates a man page were the . is not - replaced by _8. + replaced by _8.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=657704">657704</a>: Fixed issue with PROJECT_LOGO when using backslashes in - the path. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666008">666008</a>: Fortran: Using @var at module levele didn't work. - expect a file/path name. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673218">673218</a>: Replaced "echo -n" with "printf" in the configure script. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674856">674856</a>: Removed warning when using \endinternal -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675607">675607</a>: Added &, @, and # as allowed characters for commands that -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679626">679626</a>: Included patch by Abert to correctly link pages in the manual -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681874">681874</a>: Added support for single column Markdown tables. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682369">682369</a>: Incomplete documentation on doxygen -w latex + the path.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666008">666008</a>: Fortran: Using @var at module level didn't work. + expect a file/path name.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673218">673218</a>: Replaced "echo -n" with "printf" in the configure script.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674856">674856</a>: Removed warning when using \endinternal</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675607">675607</a>: Added &, @, and # as allowed characters for commands that</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679626">679626</a>: Included patch by Abert to correctly link pages in the manual</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681874">681874</a>: Added support for single column Markdown tables.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682369">682369</a>: Incomplete documentation on doxygen -w latex</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683516">683516</a>: Doxygen crashed when structural commands (like \var) appeared - in .md files. + in .md files.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686259">686259</a>: Fixed character encoding problem when multibytes characters - were used in anchors. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691071">691071</a>: Documentation before an anonymous member did not appear. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692162">692162</a>: Fixed Markdown related indentation problem. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692320">692320</a>: Regression: Text after @copydoc was not visible anymore. + were used in anchors.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691071">691071</a>: Documentation before an anonymous member did not appear.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692162">692162</a>: Fixed Markdown related indentation problem.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692320">692320</a>: Regression: Text after @copydoc was not visible anymore.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692537">692537</a>: Linked to external pages was done using the page label - rather than the file name. + rather than the file name.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693331">693331</a>: build using ./configure ; make did not work if the path - contained a space. + contained a space.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=693406">693406</a>: Tag files are now identfied by the full path instead of - only the name of the tag file. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694376">694376</a>: In some cases members were missing from the tag file. + only the name of the tag file.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694376">694376</a>: In some cases members were missing from the tag file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694027">694027</a>: Fortran: derive intent from documentation in case no - intent is specified -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694610">694610</a>: Warning was not reported at the correct line in two cases. + intent is specified</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694610">694610</a>: Warning was not reported at the correct line in two cases.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694631">694631</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694632">694632</a>: @cond..@endcond did not work properly for removing - macro definitions. + macro definitions.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694685">694685</a>: Fixed crash when adding two different functions with the - same name to the same group. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694726">694726</a>: VHDL: fixed issue generating LaTeX output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=695277">695277</a>: Fortran: improved handling of protected statement + same name to the same group.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=694726">694726</a>: VHDL: fixed issue generating LaTeX output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=695277">695277</a>: Fortran: improved handling of protected statement</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=695974">695974</a>: Fortran: Fixed issue resulting in - "Stack buffers nested too deeply" error. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=696708">696708</a>: @cond was not handled properly by the preprocessor. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697233">697233</a>: @copyright command did not end a brief description. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697249">697249</a>: Markdown tables caused errors reported at wrong line number. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697494">697494</a>: Removed double entry from the messages produced by doxygen. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698818">698818</a>: Fixed problem handling @cond for #define's -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698007">698007</a>: Fixed potential crash when searching files. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=696925">696925</a>: #include's inside namespace could result in duplicate entries. + "Stack buffers nested too deeply" error.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=696708">696708</a>: @cond was not handled properly by the preprocessor.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697233">697233</a>: @copyright command did not end a brief description.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697249">697249</a>: Markdown tables caused errors reported at wrong line number.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697494">697494</a>: Removed double entry from the messages produced by doxygen.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698818">698818</a>: Fixed problem handling @cond for #define's</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=698007">698007</a>: Fixed potential crash when searching files.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=696925">696925</a>: #include's inside namespace could result in duplicate entries.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=696954">696954</a>: Doxywizard: Labels of items are now also grayed out - when an item is disabled (thanks to Albert for the patch). + when an item is disabled (thanks to Albert for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699195">699195</a>: Changed Markdown page label to support multiple .md files - with the same name. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699218">699218</a>: Fixed issue with margin computation in resize.js. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699381">699381</a>: Lonely h4,h5,h6 end tag caused assert. + with the same name.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699218">699218</a>: Fixed issue with margin computation in resize.js.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699381">699381</a>: Lonely h4,h5,h6 end tag caused assert.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699437">699437</a>: Trailing comments were not always rendered properly if - MARKDOWN_SUPPORT was enabled. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699460">699460</a>: Updated doxygen man page (thanks to Manuel for the patch). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699464">699464</a>: Added reference to \xmlonly and \docbookonly in \htmlonly + MARKDOWN_SUPPORT was enabled.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699460">699460</a>: Updated doxygen man page (thanks to Manuel for the patch).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699464">699464</a>: Added reference to \xmlonly and \docbookonly in \htmlonly</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699731">699731</a>: LaTeX: switch to using the xtabular package instead of - longtable to prevent overfull vbox errors. + longtable to prevent overfull vbox errors.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=699732">699732</a>: Template parameters and Exceptions were rendered differently - than Parameters and Return Values in the LaTeX output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700153">700153</a>: Tcl: Fixed crash when parsing certain Tcl code. + than Parameters and Return Values in the LaTeX output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700153">700153</a>: Tcl: Fixed crash when parsing certain Tcl code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700345">700345</a>: Comment blocking ending with ///// made slashes appear in - the output. + the output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=700456">700456</a>: Added support for separating auto list items with an - empty paragraph. -<li> Included a couple of VHDL fixes (thanks to Martin Kreis for the patch) -<li> \include and \includelineno both showed line numbers. + empty paragraph.</li> +<li> Included a couple of VHDL fixes (thanks to Martin Kreis for the patch)</li> +<li> \include and \includelineno both showed line numbers.</li> <li> Putting '// @endverbatim' inside a C comment block was not handled - properly by the preprocessor. + properly by the preprocessor.</li> <li> Fixed various typo's in the manual and improved cross referencing - (thanks to Albert and Guillem Jover for their help) -<li> Added a couple of missing configuration dependencies. + (thanks to Albert and Guillem Jover for their help)</li> +<li> Added a couple of missing configuration dependencies.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_3_1 Release 1.8.3.1 \htmlonly <b>(release date 20-01-2013)</b> <a name="1.8.3.1"></a> +</p> <h3>Changes</h3> <ul> <li> Changed to way the search results for multiple projects can be linked together. A project is now no longer identified by the tag files name but - via new option EXTERNAL_SEARCH_ID giving a bit more flexibility. + via new option EXTERNAL_SEARCH_ID giving a bit more flexibility.</li> <li> Disabled the disk cache for member data. Allows removing quite some complexity in doxygen and is not really needed now that 64bit systems with >4GB RAM - are becoming more common. Let me know if you think you benefit from this caching. + are becoming more common. Let me know if you think you benefit from this caching.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691607">691607</a>: Using $relpath$ in a custom footer could lead to ambiguities when followed by a name that could also be a marker, like 'search'. Now $relpath^ should be used instead. $relpath$ is still supported for - backward compatibility. + backward compatibility.</li> </ul> <h3>New features</h3> <ul> <li> You can now use EXTENSION_MAPPING on files without any extension using - no_extension as placeholder (thanks to Jason Majors for the patch). + no_extension as placeholder (thanks to Jason Majors for the patch).</li> <li> To make navindex section inside a layout file that links to - a specific URL you can use usergroup with the url attribute. + a specific URL you can use usergroup with the url attribute.</li> <li> To make navindex section without any link inside a layout file you - can use usergroup with special title [none]. + can use usergroup with special title [none].</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=644350">644350</a>: Fortran: Included patch to improve parsing line continuation - characters. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=645423">645423</a>: Fortran: added support for protected attribute + characters.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=645423">645423</a>: Fortran: added support for protected attribute</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682550">682550</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691315">691315</a>: When using @copydoc, paragraphs breaks did not appear - in the copied documentation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686581">686581</a>: Fortran: handle single quotes in normal Fortran comment. + in the copied documentation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686581">686581</a>: Fortran: handle single quotes in normal Fortran comment.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686689">686689</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691335">691335</a>: Scope of forwardly declared template class was lost - in the output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689713">689713</a>: Tcl: Inline source code was not rendered correctly. + in the output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689713">689713</a>: Tcl: Inline source code was not rendered correctly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690787">690787</a>: Fixed case were a cyclic inheritance relation could crash - doxygen. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690831">690831</a>: Using @subpage in a -# style list was not handled properly. + doxygen.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690831">690831</a>: Using @subpage in a -# style list was not handled properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691000">691000</a>: For a mainpage without title the project name is now shown as - the title in the XML output. + the title in the XML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691277">691277</a>: The generated list of citations is now no longer included in - the tag file. + the tag file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691073">691073</a>: Documenting strongly typed enum values outside of the enum - did not work. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691310">691310</a>: Python: = was missing in the output for variable assignment. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691323">691323</a>: Doxygen could crash when creating inline msc graphs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691340">691340</a>: Members didn't have a More.. link to jump to detailed docs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691602">691602</a>: Doxygen did not probably distinguish between two template + did not work.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691310">691310</a>: Python: = was missing in the output for variable assignment.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691323">691323</a>: Doxygen could crash when creating inline msc graphs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691340">691340</a>: Members didn't have a More.. link to jump to detailed docs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691602">691602</a>: Doxygen did not probably distinguish between two template</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=691798">691798</a>: regression: C++ style comments that started with a line of - slashes did not get processed correctly anymore. + slashes did not get processed correctly anymore. </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=692031">692031</a>: Fixed parse error when left shift operator occurred as a default parameter. - members or functions that only differ in the return type. + members or functions that only differ in the return type.</li> <li> Setting SEARCH_INCLUDES to NO resulted in no include graphs and no - include files being listed in the output. -<li> Improved support for MinGW (thanks to a patch by Brecht Sanders). + include files being listed in the output.</li> +<li> Improved support for MinGW (thanks to a patch by Brecht Sanders).</li> <li> Removed the Graphviz/dot dependency when building the doxygen - documentation. -<li> Anchors to sub pages were wrong in the XML output. + documentation.</li> +<li> Anchors to sub pages were wrong in the XML output.</li> <li> Included VHDL patch by Martin Kreis that improves the flow chart - generation. + generation.</li> <li> corrected several code pages and fontsets for proper RTF output for - a number of languages such as Greek. + a number of languages such as Greek.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_3 Release 1.8.3 \htmlonly <a name="1.8.3"></a> <b>(release date 26-12-2012)</b> +</p> <h3>Changes</h3> <ul> <li> Expanding the tree in an index page of the HTML output, will now expand only one level instead of the whole sub-tree (thanks to - Pez Cuckow for the patch). + Pez Cuckow for the patch).</li> <li> A blockquote in Markdown does no longer require a whitespace - after the last '>' if the '>' is followed by a newline. + after the last '>' if the '>' is followed by a newline.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682718">682718</a>: Included patch to add version info to all generated - template files (headers, footers, stylesheets, layout files, etc). + template files (headers, footers, stylesheets, layout files, etc).</li> </ul> <h3>New features</h3> <ul> @@ -1144,343 +1543,351 @@ feature), SEARCHENGINE_URL (to specify the URL of the search engine), SEARCHDATA_FILE (to specify the name of the raw search data to index), EXTRA_SEARCH_MAPPINGS (for search through multiple projects). - See the <a href="extsearch.html">manual</a> for details. + See the <a href="extsearch.html">manual</a> for details.</li> <li> Added USE_MDFILE_AS_MAINPAGE config option to select a markdown page to - be used as the main page. + be used as the main page.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=630645">630645</a>: This patch (contributed by Albert) adds support for simple logic expressions for \cond, \if, and friends, i.e. you can do - \if (SOME_SECTION_NAME && (!THIS_ALTERNATIVE || THAT_ALTERNATIVE)) + \if (SOME_SECTION_NAME && (!THIS_ALTERNATIVE || THAT_ALTERNATIVE))</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684152">684152</a>: Patch (contributed by Albert) adds a new configuration option MATHJAX_FORMAT to select the MathJax output format. Options are - HTML-CSS, NativeMML, or SVG. + HTML-CSS, NativeMML, or SVG.</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670853">670853</a>: Fixed compile issues with 0 to QCString cast for - old compilers. + old compilers.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678139">678139</a>: A class A deriving from another class B inside a namespace - not known to doxygen, caused class B to appear in the global scope. + not known to doxygen, caused class B to appear in the global scope.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681209">681209</a>: Fixed problem processing .bib files when they were located - in a path containing spaces. + in a path containing spaces.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681830">681830</a>: Using \addindex in a page will now produce a link to the - word, instead of the start of the page. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681831">681831</a>: The TREEVIEW_WIDTH option did not have any effect. + word, instead of the start of the page.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681831">681831</a>: The TREEVIEW_WIDTH option did not have any effect.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681898">681898</a>: Jumping from a level 3 section to a level 1 section did - not appear correctly in the page TOC. + not appear correctly in the page TOC.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681976">681976</a>: C++11: Improved handling of noexcept expressions, e.g.: - <code>Test() noexcept ( noexcept(T::T()) ) = default;</code> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682048">682048</a>: Improved SIGINT handling when running multiple dot instances. + <code>Test() noexcept ( noexcept(T::T()) ) = default;</code></li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682048">682048</a>: Improved SIGINT handling when running multiple dot instances.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682602">682602</a>: Fixed problem processing .bib files when using a non default - output directory. + output directory.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682713">682713</a>: Comment for IDL_PROPERTY_SUPPORT in the config file template - did not have line wrapping. + did not have line wrapping.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682728">682728</a>: Setting SHOW_FILES to NO prevented call graphs from being - generated. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682740">682740</a>: Fortran: In initialization statement the "=" was missing -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683284">683284</a>: Fortran: ALIASes where not replaced in !! and !< comments. + generated.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=682740">682740</a>: Fortran: In initialization statement the "=" was missing</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683284">683284</a>: Fortran: ALIASes where not replaced in !! and !< comments.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=683976">683976</a>: Added meta tag "generator" to HTML output (thanks to - Albert for the patch). + Albert for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684781">684781</a>: Sections of the main page did not appear in the navigation tree until the main page had sub pages. Also fixed bug in treeview that caused mainpage with title and - sections to appear at the same level as the sections. + sections to appear at the same level as the sections.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685125">685125</a>: Doxygen could select the wrong overloaded method when the only difference in parameter types was the template type of - a typedef. + a typedef.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685181">685181</a>: Inheriting member documentation did not work in combination - with Java interfaces. + with Java interfaces.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685623">685623</a>: Enum values did not appear in the detailed documentation - when using C++11 style enums. + when using C++11 style enums.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685879">685879</a>: Even though HIDE_UNDOC_MEMBERS was enabled, the navigation - still showed undocumented members. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685940">685940</a>: Fixed back button behaviour when using the navigation tree. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686284">686284</a>: Added anchors to refs in the index.qhp TOC. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686826">686826</a>: Added XML declaration to index.qhp TOC. + still showed undocumented members.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=685940">685940</a>: Fixed back button behaviour when using the navigation tree.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686284">686284</a>: Added anchors to refs in the index.qhp TOC.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686826">686826</a>: Added XML declaration to index.qhp TOC.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686956">686956</a>: When a class and its base class has the same nested class, - the collaboration diagram could point to the wrong class. + the collaboration diagram could point to the wrong class.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=686983">686983</a>: Comments inside a function macro parameter appeared before - the expanded macro, instead of being treated as part of the parameter. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687301">687301</a>: Allow minus in the name of a HTML attribute. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687572">687572</a>: Code fragments were wrapped too early in the latex output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688226">688226</a>: Fixed Qt version number in ./configure --help text. + the expanded macro, instead of being treated as part of the parameter.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687301">687301</a>: Allow minus in the name of a HTML attribute.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=687572">687572</a>: Code fragments were wrapped too early in the latex output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688226">688226</a>: Fixed Qt version number in ./configure --help text.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688463">688463</a>: Included patch to prevent processing identifiers starting - with _ or __ as markdown. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688531">688531</a>: Horizontal ruler inside paragraph caused missing </p> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688542">688542</a>: Using "usergroup" in the layout.xml caused missing <div> + with _ or __ as markdown.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688531">688531</a>: Horizontal ruler inside paragraph caused missing </p></li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688542">688542</a>: Using "usergroup" in the layout.xml caused missing <div></li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688739">688739</a>: Fixed problem with user defined entries in the eclipse help - index (thanks to Rene Papenhoven for the fix). + index (thanks to Rene Papenhoven for the fix).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=688647">688647</a>: Fixed problem parsing initializer list with C++11 style - uniform types. + uniform types.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689341">689341</a>: \if around list item preceded by whitespace caused wrong - list in the output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689461">689461</a>: Correct link in documentation of SIP_SUPPORT option. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689720">689720</a>: Fixed bug that could prevent refman.tex from being generated. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689833">689833</a>: Fixed missing space in Chinese translation. + list in the output. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689461">689461</a>: Correct link in documentation of SIP_SUPPORT option.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689720">689720</a>: Fixed bug that could prevent refman.tex from being generated.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=689833">689833</a>: Fixed missing space in Chinese translation.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690093">690093</a>: Files added via HTML_EXTRA_STYLESHEET did not correct refer - to files that where placed in a subdirectory. + to files that where placed in a subdirectory.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690190">690190</a>: Searching for multibyte characters did not work with the - server based search engine. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690250">690250</a>: Fixed case where line numbers got out of sync with the code. + server based search engine.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690250">690250</a>: Fixed case where line numbers got out of sync with the code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690341">690341</a>: First member of an anonymous C++11 style enum was not shown - properly. + properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690385">690385</a>: Fixed case where _'s where falsely converted to Markdown - emphasis. + emphasis.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690403">690403</a>: Title not used when \ref'ing to a \section imported via - a tag file. + a tag file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690418">690418</a>: Behavior of @cond was accidentally reversed by new expression - parser. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690602">690602</a>: Fixed problems handling @cond inside /// comments. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690629">690629</a>: Fixed case where doxygen would during preprocessing. + parser.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690602">690602</a>: Fixed problems handling @cond inside /// comments.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690629">690629</a>: Fixed case where doxygen would during preprocessing.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=690685">690685</a>: A file specified using HTML_EXTRA_STYLEHSHEET did not end - up in the Qt Help index. -<li> Improved the way enum's are rendered in the HTML output. + up in the Qt Help index.</li> +<li> Improved the way enum's are rendered in the HTML output.</li> <li> When inlining structs (INLINE_SIMPLE_STRUCTS=YES) a <p> was missing - for members with a detailed description, causing invalid XHTML. + for members with a detailed description, causing invalid XHTML.</li> <li> Fixed problem loading the navigation tree when using .xhtml as the - file extension. + file extension.</li> <li> The navigation tree was not always correctly positioned upon initial - load when using Chrome. + load when using Chrome.</li> <li> HTML Navigation tree showed static members even when EXTRACT_STATIC was - set to NO. + set to NO.</li> <li> Same word could appear multiple times in the match list for an entry - in the search results when using server based search. + in the search results when using server based search.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_2 Release 1.8.2 \htmlonly <a name="1.8.2"></a> <b>(release date 11-08-2012)</b> +</p> <h3>Changes</h3> <ul> -<li> Using a fenched block (~~~~) in Markdown without explicit extension will +<li> Using a fenced block (~~~~) in Markdown without explicit extension will now be interpreted as a @code..@endcode block instead - of @verbatim..@endverbatim. + of @verbatim..@endverbatim.</li> <li> Classes inheriting from an class that is outside the scope of doxygen - are still shown in diagrams. This does not hold for usage relations. + are still shown in diagrams. This does not hold for usage relations.</li> </ul> <h3>New features</h3> <ul> <li> Added support for C++11: <ul> <li> strongly typed enums, e.g.: - <pre>enum class E</pre> + <pre>enum class E</pre></li> <li> enums with explicit type, e.g.: - <pre>enum E : unsigned int { ... }</pre> - <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678097">678097</a>: added support for final keyword on classes and methods. - <li> support for override keyword for methods. - <li> <code>nullptr</code> is new a type keyword in code fragments. + <pre>enum E : unsigned int { ... }</pre></li> + <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678097">678097</a>: added support for final keyword on classes and methods.</li> + <li> support for override keyword for methods.</li> + <li> <code>nullptr</code> is new a type keyword in code fragments.</li> <li> support for variables with initializer lists, - e.g.: <pre>const int var {10};</pre> + e.g.: <pre>const int var {10};</pre></li> <li> support for trailing return types, - e.g.: <pre>auto foo() -> Bar;</pre> + e.g.: <pre>auto foo() -> Bar;</pre></li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672372">672372</a>: added support for template aliases, - e.g.: <pre>template<typename T> using A = B<T>;</pre> + e.g.: <pre>template<typename T> using A = B<T>;</pre></li> <li> support for C++11 variadic templates, - e.g.: <pre>template<typename... Values> class C;</pre> - <li> support for documenting template class declarations. - <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680098">680098</a>: <code>static_assert(...);</code> inside a class is now ignored. + e.g.: <pre>template<typename... Values> class C;</pre></li> + <li> support for documenting template class declarations.</li> + <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680098">680098</a>: <code>static_assert(...);</code> inside a class is now ignored.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679740">679740</a>: Add support parameters with default lambda functions, - e.g.: <pre>int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })</pre> + e.g.: <pre>int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })</pre></li> <li> default initializers for non-static data members, - e.g.: <pre>class C { public: int x = 4; int y {6}; int z = y*func(); };</pre> + e.g.: <pre>class C { public: int x = 4; int y {6}; int z = y*func(); };</pre></li> <li> support for decltype as a way selecting a type for a variable, - e.g.: <pre>int x; decltype(x) y;</pre> + e.g.: <pre>int x; decltype(x) y;</pre></li> <li> support for new string literals, - e.g. <pre>u8"utf8", u"utf-16", U"utf-32", L"wchar"</pre> + e.g. <pre>u8"utf8", u"utf-16", U"utf-32", L"wchar"</pre></li> <li> support for raw string literals (with and without user defined delimiter), - e.g. <pre>R"(some"thing)", u8R"raw(some)"thing)raw"</pre> - <li> support for explictly deleted and defaulted special members - (<code>=default</code> and <code>=delete</code>). - </ul> + e.g. <pre>R"(some"thing)", u8R"raw(some)"thing)raw"</pre></li> + <li> support for explicitly deleted and defaulted special members + (<code>=default</code> and <code>=delete</code>).</li> + </ul></li> <li> Made several improvements to the way Objective-C categories and protocols are handled: <ul> <li> Class extensions are now treated as part of the class, whereas - categories are listed separately. - <li> Fixed parse problem where category had a { } section. - <li> Fixed parse problem for categories that implemented protocols. - <li> Fixed render bug for protocols in class diagrams. - <li> Attributes with the same name as a method are now no longer matched. - <li> Internal properties are now also marked with [implementation] + categories are listed separately.</li> + <li> Fixed parse problem where category had a { } section.</li> + <li> Fixed parse problem for categories that implemented protocols.</li> + <li> Fixed render bug for protocols in class diagrams.</li> + <li> Attributes with the same name as a method are now no longer matched.</li> + <li> Internal properties are now also marked with [implementation]</li> <li> Members of categories are shown in the class they extend as well, and - cross reference links are made between these members. + cross reference links are made between these members.</li> <li> Class extension implementing protocols are now shown as protocols - inherited by the class itself, including the "Implemented by" relation. - </ul> + inherited by the class itself, including the "Implemented by" relation.</li> + </ul></li> <li> Added option HTML_EXTRA_STYLESHEET which allows adding an additional - stylesheet without completely replacing doxygen.css. + stylesheet without completely replacing doxygen.css.</li> <li> Added option AUTOLINK_SUPPORT which can be used to enable/disable - autolinking globally. + autolinking globally.</li> <li> Included language updates for Czech, Spanish, Greek, Slovak, and - Esparanto. + Esparanto.</li> </ul> <h3>Bug fixes</h3> <ul> <li> Fixed render glitch where template member of a base class was not - properly hidden in the derived class. + properly hidden in the derived class.</li> <li> Privately nested classes no longer appear in the declaration section - of their parent if EXTRACT_PRIVATE is disabled. + of their parent if EXTRACT_PRIVATE is disabled.</li> <li> In the declaration section the separator line was in between the - member and its brief description. -<li> Fixed a couple of compiler warning with the new XCode 4.4 compiler. -<li> Added compilation support for Mountain Lion (Mac OS X 10.8). + member and its brief description.</li> +<li> Fixed a couple of compiler warning with the new XCode 4.4 compiler.</li> +<li> Added compilation support for Mountain Lion (Mac OS X 10.8).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679631">679631</a>: Nested namespaces did not appear in the namespace list if the - parent namespace was undocumented. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680227">680227</a>: Fixed some spelling errors in the code comments. + parent namespace was undocumented.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680227">680227</a>: Fixed some spelling errors in the code comments.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680398">680398</a>: Fortran: comma at begin of argument list description in - case of implicit type + case of implicit type</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680405">680405</a>: Fortran: Entities on line with USE, ONLY were not hyperlinked - in code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680408">680408</a>: Fortran: handle carriage return in non terminated strings. + in code.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680408">680408</a>: Fortran: handle carriage return in non terminated strings.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680492">680492</a>: Using Markdown formatting in @todo/@bug/.. like descriptions - did not work. + did not work.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680575">680575</a>: Fixed potential crash when <code> appeared inside <summary> - for C# code. + for C# code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680697">680697</a>: \xrefitems of the same type are not grouped together under - the same heading (just like \todo and friends). + the same heading (just like \todo and friends). </li> <li> Fixed case where full directory path was shown even though - FULL_PATH_NAMES was set to NO. + FULL_PATH_NAMES was set to NO.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680709">680709</a>: HTML output of template-derived classes contained unescaped - characters. + characters.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679963">679963</a>: "Class Index" appeared twice in the PDF TOC, Index at the - end did not appear at all. + end did not appear at all.</li> <li> In a declaration no link was created when referring to a class inside - an undocumented namespace imported via a tag file. + an undocumented namespace imported via a tag file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681281">681281</a>: Make default for TAB_SIZE 4 and added remark in Markdown section of the manual about the effect of TAB_SIZE on code block - processing when using tabs in the comment block. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681023">681023</a>: Project logo was not included in the Qt help output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680992">680992</a>: Fixed a couple of typos in the comments. + processing when using tabs in the comment block.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681023">681023</a>: Project logo was not included in the Qt help output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680992">680992</a>: Fixed a couple of typos in the comments.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=681350">681350</a>: Fixed a problem with Markdown processing of a @code block - inside an indented /// style comment. + inside an indented /// style comment.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679928">679928</a>: Disabled section level correction for Markdown pages as - is was confusing. + it was confusing.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_1_2 Release 1.8.1.2 \htmlonly <a name="1.8.1.2"></a> <b>(release date 12-07-2012)</b> +</p> <h3>Changes</h3> <ul> <li> doxygen now strips the leading indentation shared by the lines in a - @code..@endcode block. + @code..@endcode block.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678218">678218</a>: Changed title of the SVG graphs from 'G' to the root node - of the graph. + of the graph.</li> </ul> <h3>New features</h3> <ul> <li> Added button in the navigation tree to allow enabling/disabling - syncing the navigation tree with the content. + syncing the navigation tree with the content.</li> <li> Extended the number of HTML entities with Greek letters and other - symbols (thanks to Charles Karney for the patch). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=663645">663645</a>: Added support for C++11 strongly typed enums - (enum class E { ... }). + symbols (thanks to Charles Karney for the patch).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=663645">663645</a>: Added support for C++11 strongly typed enums + (enum class E { ... }).</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=590518">590518</a>: Added missing class member initialization to a - class in doxmlparser and made the library compile again. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667678">667678</a>: Added support for Obj-C property attribute "unsafe_retained". -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674842">674842</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676984">676984</a>: Unmatched quote in a comment prevented alias expansion. + class in doxmlparser and made the library compile again.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667678">667678</a>: Added support for Obj-C property attribute "unsafe_retained".</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674842">674842</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676984">676984</a>: Unmatched quote in a comment prevented alias expansion.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676019">676019</a>: Fixed another case where local include path did not appear - correctly in the class documentation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676966">676966</a>: Fortran: Some keyword were not colored in the source view. + correctly in the class documentation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676966">676966</a>: Fortran: Some keyword were not colored in the source view.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676981">676981</a>: Fortran: Argument type was wrong type of in case of out of - place !> comment + place !> comment</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677935">677935</a>: Included patch to fix problem compiling for x86 release on - Windows. + Windows.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677992">677992</a>: Section without title could result in an invalid Qt Help - index. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678022">678022</a>: Anonymous enum could result in an invalid Qt Help index. + index.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678022">678022</a>: Anonymous enum could result in an invalid Qt Help index.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678102">678102</a>: Superfluous trailing comma in javascript - prevented navigation tree to load in IE7. + prevented navigation tree to load in IE7.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678177">678177</a>: a + at the start of a line inside a <pre> block, triggered the start of a list. Also -- and --- where not kept untouched - inside a <pre> block. + inside a <pre> block.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678180">678180</a>: ndash (--) appearing in a brief description could lead - to invalid SVG images. + to invalid SVG images.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=678288">678288</a>: -- and --- inside a Markdown code block were not handled - properly. + properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679331">679331</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675766">675766</a>: In body documentation with a different indentation then the - main documentation was not rendered correctly (MARKDOWN=YES). + main documentation was not rendered correctly (MARKDOWN=YES).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679436">679436</a>: Using an escaped pipe symbol in a Markdown table did not get - unescaped in the output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679533">679533</a>: Code fragments did not appear properly in the doxygen manual. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679615">679615</a>: Added missing delete call in a piece of debugging code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679626">679626</a>: Fixed some navigation issues in the manual + unescaped in the output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679533">679533</a>: Code fragments did not appear properly in the doxygen manual.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679615">679615</a>: Added missing delete call in a piece of debugging code.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=679626">679626</a>: Fixed some navigation issues in the manual</li> <li> Not all inherited members appeared in the "Additional inherited members" - list. + list.</li> <li> Link to call after "Inherited members" was not correct when - CREATE_SUBDIRS was enabled. -<li> New VHDL diagram was not generated if the path contained spaces. -<li> Fixed a couple of problems handling Objective-C categories. + CREATE_SUBDIRS was enabled.</li> +<li> New VHDL diagram was not generated if the path contained spaces.</li> +<li> Fixed a couple of problems handling Objective-C categories.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_1_1 Release 1.8.1.1 \htmlonly <a name="1.8.1.1"></a> <b>(release date 10-06-2012)</b> +</p> <h3>Changes</h3> <ul> -<li> Integrated the root navigation tree in navtree.js for faster loading. +<li> Integrated the root navigation tree in navtree.js for faster loading.</li> <li> When the navigation tree is enabled, clicking jump to a line in - the source code view will now highlight the line. + the source code view will now highlight the line.</li> </ul> <h3>New features</h3> <ul> <li> VHDL code now has a new Design Overview page (thanks for Martin Kreis - for the patch). Requires HAVE_DOT=YES, and DOT_IMAGE_FORMAT=svg. + for the patch). Requires HAVE_DOT=YES, and DOT_IMAGE_FORMAT=svg.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677678">677678</a>: Added support for strong and weak attributes in Objective-C - properties. + properties.</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=618462">618462</a>: Fortran: Appearance of comments in the HTML output - are now customizable via CSS again. + are now customizable via CSS again.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673660">673660</a>: <code> inside a <summary> or <remarks> section is now treated - as @code (was already the code for C#). + as @code (was already the code for C#).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673921">673921</a>: When a comment started at indent >= 4 after a /** and continued at the same indent without leading * after a blank line, - the continued part appeared at as a code block when Markdown was enabled. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675036">675036</a>: If a file was not indexed, the navigation tree became empty. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676019">676019</a>: Include path using quotes did not work as documented. + the continued part appeared at as a code block when Markdown was enabled.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675036">675036</a>: If a file was not indexed, the navigation tree became empty.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676019">676019</a>: Include path using quotes did not work as documented.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676877">676877</a>: @warning did not end at blank line when followed by - a numbered list. + a numbered list.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676902">676902</a>: An anonymous namespace could introduce an invalid entry in - the navigation list. + the navigation list.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676948">676948</a>: Breadcrumb navigation path had wrong links when - CREATE_SUBDIRS was enabled. + CREATE_SUBDIRS was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677315">677315</a>: Fixed case where function was incorrectly detected as a - variable. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677589">677589</a>: Fixed typo in the documentation of the LAYOUT_FILE option. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677771">677771</a>: Fixed visual misalignment for first argument. + variable.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677589">677589</a>: Fixed typo in the documentation of the LAYOUT_FILE option.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=677771">677771</a>: Fixed visual misalignment for first argument.</li> <li> The "arrow out" button in interactive SVG did not work when - served from a web server, due to the use of an absolute path. -<li> If a declation was too wide for a page, the content in HTML spilled - over the boundary of its box, which looked ugly. -<li> Empty lines in a code fragment were collapsed. + served from a web server, due to the use of an absolute path.</li> +<li> If a declaration was too wide for a page, the content in HTML spilled + over the boundary of its box, which looked ugly.</li> +<li> Empty lines in a code fragment were collapsed.</li> <li> Navigation tree entries of the hierarchy appeared under class index as - well. -<li> Grouped globals and enum values were not added to the navigation index. -<li> Inlined class were not properly shows in the navigation index. + well.</li> +<li> Grouped globals and enum values were not added to the navigation index.</li> +<li> Inlined class were not properly shows in the navigation index.</li> <li> Documented class in undocumented namespace did not show up in - class list and navigation tree. -<li> ALLEXTERNALS=YES did not show all external classes in the class list. + class list and navigation tree.</li> +<li> ALLEXTERNALS=YES did not show all external classes in the class list.</li> <li> External reference via URL did not work for new - "Additional Inherited Members" section + inherited from class link. + "Additional Inherited Members" section + inherited from class link.</li> <li> Objective-C protocols and C# generics were not index and listed - properly in the navigation tree and indices. -<li> Undocumented files could produce a broken link in the navigation tree. + properly in the navigation tree and indices.</li> +<li> Undocumented files could produce a broken link in the navigation tree.</li> <li> Additional Inherited Members could turn up empty of all members of - the inherited class were grouped and SUBGROUPING was set to NO. + the inherited class were grouped and SUBGROUPING was set to NO.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_1 Release 1.8.1 \htmlonly <a name="1.8.1"></a> <b>(release date 19-05-2012)</b> +</p> <h3>Changes</h3> <ul> <li> Changed the way indexes (Class,File,Namespace,Groups) are rendered: @@ -1488,159 +1895,162 @@ There are now shown in a uniform way in the HTML output as a tree. Trees can be expanded and collapsed interactively (this makes USE_INLINE_TREES obsolete). - <p> + </p><p> The class list now also shows namespaces and nested classes. The file list now also shows directories (this makes SHOW_DIRECTORIES obsolete). - <p> + </p><p> Member sections are now each rendered in a separate table. This makes the HTML_ALIGN_MEMBERS option obsolete. - <p> + </p><p> <b>Note:</b> If you use a custom header for the HTML output (HTML_HEADER) make sure you add the following: + </p> <pre> <script type="text/javascript" src="$relpath$jquery.js"></script> -<script type="text/javascript" src="$relpath$dynsections.js"></script></pre> +<script type="text/javascript" src="$relpath$dynsections.js"></script></pre><p> Otherwise the interactivity of the trees does not work. - <p> - -<li> Included a couple of performance improvements (thanks to Dirk Reiners) + </p> +</li> +<li> Included a couple of performance improvements (thanks to Dirk Reiners)</li> <li> Changed the way member attributes (like protected, virtual, and static) - are rendered in the HTML output. -<li> Changed the look of the source code output. + are rendered in the HTML output.</li> +<li> Changed the look of the source code output.</li> <li> Included language updates for Chinese, Czech, German, Esperanto, - Italian, Slovak, Spanish, Hungarian, and Polish. -<li> Syntax highlighing in source code fragments is no longer dependent - on LATEX_SOURCE_CODE being set to YES. + Italian, Slovak, Spanish, Hungarian, and Polish.</li> +<li> Syntax highlighting in source code fragments is no longer dependent + on LATEX_SOURCE_CODE being set to YES.</li> <li> Added natural scrolling for tablet devices (like the iPad) - when using the treeview. + when using the treeview.</li> <li> For interactive SVGs the print button has been replaced by a "arrow out" button that opens the original non-interactive SVG in a - new window for easy printing or saving. + new window for easy printing or saving. </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661499">661499</a>: Long names are now wrapped in the dot nodes to avoid - very wide graphs. + very wide graphs.</li> </ul> <h3>New features</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666527">666527</a>: Added support for <inheritdoc/> C# XML command - (thanks to John Werner for the patch). + (thanks to John Werner for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670965">670965</a>, Added support for resolving environment variables of the - form $(PROGRAMFILES(X86)) inside the config file + form $(PROGRAMFILES(X86)) inside the config file</li> <li> Doxygen now shows Objective-C properties in collaboration diagrams - (thanks to Sven Weidauer for the patch). -<li> Added ability to search for group or page titles. + (thanks to Sven Weidauer for the patch).</li> +<li> Added ability to search for group or page titles.</li> <li> Inherited class members are now shown as expandable sections in the member overview (default is collapsed). Each section is rendered as - a table. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674349">674349</a>: Included build support for NetBSD. + a table. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674349">674349</a>: Included build support for NetBSD.</li> <li> A -- will now be rendered as an 'en dash', similarly, --- will produce an - mdash. + mdash.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=523156">523156</a>: Fortran: Prefix of routines got stripped. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666088">666088</a>: Include VHDL patch (thanks to Martin Kreis). +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=523156">523156</a>: Fortran: Prefix of routines got stripped.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666088">666088</a>: Include VHDL patch (thanks to Martin Kreis).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670235">670235</a>: Fixed include guard detection problem when using - #pragma once + #pragma once</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670805">670805</a>: A numbered list (1. 2. 3.) where each list item ended with an empty line is no longer treated as a set of separate lists (all - starting with 1.). + starting with 1.).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670889">670889</a>: Java: last enum value did not appear in the output unless it was - followed by a comma. + followed by a comma.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671023">671023</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671312">671312</a>: Regression: Autolist items starting on a new paragraph - at indent level larger than 0 were not processed correctly. + at indent level larger than 0 were not processed correctly. </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671076">671076</a>: Sections could be missing from the navigation tree in - some situations. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671158">671158</a>: @tableofcontents did not work for the main page (@mainpage) + some situations.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671158">671158</a>: @tableofcontents did not work for the main page (@mainpage)</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671159">671159</a>: Sections in a separate markdown page did not appear in the - table of contents. + table of contents.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671166">671166</a>: Fortran: Fixed problem causing call/caller graphs not to be - generated. + generated.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671171">671171</a>: RPM spec file was updated to make it work with RHEL 6.2 - (thanks to Peter Klotz for the patch) + (thanks to Peter Klotz for the patch)</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671240">671240</a>: Corrected line number of error message reported for - pages. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671291">671291</a>: C# regression: enum values where not shown in the docs. + pages.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671291">671291</a>: C# regression: enum values where not shown in the docs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671395">671395</a>: When #some_member appeared at the start of a line it was seen as a level one header instead of a link to a member when - Markdown processing was enable. Now at least one space is required - after the # to make it a header. + Markdown processing was enabled. Now at least one space is required + after the # to make it a header.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671426">671426</a>: Fixed case where doxygen could crash when a section and - subsection had the same label. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671591">671591</a>: docset creating could fail due to invalid Nodes.xml + subsection had the same label.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671591">671591</a>: docset creating could fail due to invalid Nodes.xml</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671702">671702</a>: Using \internal in a group or member did not hide it - from the navigation tree if there was no documentation. + from the navigation tree if there was no documentation.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=671709">671709</a>: Backticks in C# comments did not appear as inline - fragments, like was the case for other languages. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672119">672119</a>: PHP: defines are now shown as constants rather than enums. + fragments, like was the case for other languages.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672119">672119</a>: PHP: defines are now shown as constants rather than enums.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672662">672662</a>: File with .md or .markdown extension were not included - with the default setting of FILE_PATTERNS. + with the default setting of FILE_PATTERNS.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672366">672366</a>: mailto style URLs did not work correctly in combination with - CREATE_SUBDIRS = YES. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672472">672472</a>: Removed bogus </b> when using @par. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672475">672475</a>: Added "warning:" prefix to "missing \endcode" message. + CREATE_SUBDIRS = YES.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672472">672472</a>: Removed bogus </b> when using @par.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672475">672475</a>: Added "warning:" prefix to "missing \endcode" message.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672479">672479</a>: Doxygen comments after a macro definition were not - removed in the source browser view. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672526">672526</a>: Removed black line in front of custom paragraphs. + removed in the source browser view.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672526">672526</a>: Removed black line in front of custom paragraphs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672536">672536</a>: PHP: use keyword was not handled correctly when importing - classes from another namespace. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672620">672620</a>: Switched to using "Macro" in the output instead of "Define". + classes from another namespace.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672620">672620</a>: Switched to using "Macro" in the output instead of "Define".</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=672656">672656</a>: Using ![caption](filename.png) did not work correctly for - local images pointed to with IMAGE_PATH. + local images pointed to with IMAGE_PATH.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673045">673045</a>: A block of ///'s inside a verbatim block inside a .md - file was replaced by /** .. */ + file was replaced by /** .. */</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673066">673066</a>: Doxygen now skips scanning files in directories starting with - a dot (e.g. .svn). + a dot (e.g. .svn).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673219">673219</a>: Included patch by Ryan Schmidt to make the Mac versions - in qglobal.h match that of Apple header files. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673870">673870</a>: Added C++11 classes when BUILTIN_STL_SUPPORT is enabled. + in qglobal.h match that of Apple header files.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673870">673870</a>: Added C++11 classes when BUILTIN_STL_SUPPORT is enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=673983">673983</a>: Using a backslash in a section cause 026E30F to appear in the - latex TOC. + latex TOC.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674563">674563</a>: Fortran: case sensitiveness for routines and functions - did not work -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674583">674583</a>: Fortran: continuation by ampersand not placed in code output. + did not work</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=674583">674583</a>: Fortran: continuation by ampersand not placed in code output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=675757">675757</a>: Fixed indenting issue after the end of a markdown code block - inside a list. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676116">676116</a>: Use new index style for page index. + inside a list.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676116">676116</a>: Use new index style for page index.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=676294">676294</a>: Fixed LaTeX error when backslash appeared in a hyperlinked - code fragment. -<li> Tag files had wrong character encoding set in the header. -<li> C# in/out did not appear in generics using covariance or contravariance. + code fragment.</li> +<li> Tag files had wrong character encoding set in the header.</li> +<li> C# in/out did not appear in generics using covariance or contravariance.</li> <li> When marker of an alias appeared at the end of the alias text it was - not expanded. -<li> Aliases did not work in Markdown files. -<li> Fixed some problems with the navigation tree for IE9 and Opera. + not expanded.</li> +<li> Aliases did not work in Markdown files.</li> +<li> Fixed some problems with the navigation tree for IE9 and Opera.</li> <li> Included patch by Jake Colman to make the configgen.py work with older - Python version such as 2.4.3. -<li> Fixed problem parsing \code{.py}...\endcode -<li> UML_LIMIT_NUM_FIELDS did not work correctly in all cases. + Python version such as 2.4.3.</li> +<li> Fixed problem parsing \code{.py}...\endcode </li> +<li> UML_LIMIT_NUM_FIELDS did not work correctly in all cases.</li> <li> Setting SORT_GROUP_NAMES to YES, had no effect on child groups within - a group. + a group.</li> </ul> +<p> \endhtmlonly \subsection log_1_8_0 Release 1.8.0 \htmlonly <a name="1.8.0"></a> <b>(release date 25-02-2012)</b> +</p> <h3>Changes</h3> <ul> <li> Auto list items can now consist of multiple paragraphs. The indentation of the (first line) of a new paragraph detemines to which list item the paragraph belongs or if it marks the end of the - list. + list. </li> <li> When UML_LOOK is enabled, relations shown on the edge of a graph - are not shown as attributes (conform to the UML notation) -<li> Updated the manual and improved the look. + are not shown as attributes (conform to the UML notation)</li> +<li> Updated the manual and improved the look.</li> <li> Made the contents in the navigation tree more consistent for - groups, pages with subpages, and grouped subpages. + groups, pages with subpages, and grouped subpages.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669079">669079</a>: Latex: made the margins of latex page layout smaller using - the geometry package. + the geometry package.</li> <li> The tool doxytag has been declared obsolete and is removed (it wasn't working properly anyway). Same goes for the installdox - script. -<li> Updated the copyright in source code and doxywizard "about" to 2012. + script.</li> +<li> Updated the copyright in source code and doxywizard "about" to 2012.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668008">668008</a>: HTML version of the manual now has the treeview enabled - for easier navigation. + for easier navigation.</li> </ul> <h3>New features</h3> <ul> @@ -1651,132 +2061,134 @@ make sure you add the following: setting MARKDOWN_SUPPORT to NO. When enabled the following is processed differently: <ul> - <li> tabs are converted to spaces according to TAB_SIZE. + <li> tabs are converted to spaces according to TAB_SIZE.</li> <li> blockquotes are created for lines that start with one or more >'s - (amount of >'s detemine the indentation level). + (amount of >'s determine the indentation level).</li> <li> emphasis using *emphasize this* or _emphasis this_ or strong emphasis using **emphasis this**. Unlike classic - Markdown 'some_great_indentifier' is not touched. - <li> code spans can be created using back-ticks, i.e. `here's an example` + Markdown 'some_great_indentifier' is not touched.</li> + <li> code spans can be created using back-ticks, i.e. `here's an example`</li> <li> Using three or more -'s or *'s alone on a line with only spaces - will produce a horizontal ruler. + will produce a horizontal ruler.</li> <li> A header can be created by putting a ===== (for h1) or ----- (for h2) on the next line or by using 1 to 6 #'s at the start of a line - for h1-h6. - <li> auto lists item can also start with + or * instead of only - - <li> ordered lists can be made using 1. 2. ... labels. + for h1-h6.</li> + <li> auto lists item can also start with + or * instead of only -</li> + <li> ordered lists can be made using 1. 2. ... labels.</li> <li> verbatim blocks can be produced by indenting 4 additional spaces. Note that doxygen uses a relative indent of 4 spaces, not an - absolute indent like Markdown does. - <li> Markdown style hyperlinks and hyperlink references. - <li> Simple tables can be created using the <a href="http://michelf.com/projects/php-markdown/extra/#table">Markdown Extra format</a>. - <li> <a href="http://freewisdom.org/projects/python-markdown/Fenced_Code_Blocks">Fenced code blocks</a> are also supported, include language selection. - <li> files with extension .md or .markdown are converted to related pages. + absolute indent like Markdown does. </li> + <li> Markdown style hyperlinks and hyperlink references.</li> + <li> Simple tables can be created using the <a href="http://michelf.com/projects/php-markdown/extra/#table">Markdown Extra format</a>.</li> + <li> <a href="http://freewisdom.org/projects/python-markdown/Fenced_Code_Blocks">Fenced code blocks</a> are also supported, include language selection.</li> + <li> files with extension .md or .markdown are converted to related pages.</li> </ul> - See the section about Markdown support in the manual for details. + See the section about Markdown support in the manual for details.</li> <li> It is now possible to add user defined tabs or groups of tabs to the navigation menu using the layout file (see the section of the manual - about customizing the output for details). + about customizing the output for details).</li> <li> Added new command \tableofcontents (or [TOC] if you prefer Markdown) which can be used in a related page with sections to produce a table of contents at the top of the HTML page (for other formats the - command has no effect). + command has no effect).</li> <li> When using SVG images and INTERACTIVE_SVG is enabled, a print icon will be visible along with the navigation controls to facilitate - printing of the part of the graph that is visible on screen. + printing of the part of the graph that is visible on screen.</li> <li> Added obfuscation of email addresses for the HTML output to make - email harvesting more difficult. + email harvesting more difficult.</li> <li> Added build targets for 64 bit Windows (thanks to Vladimir Simonov). The installer script is also updated to install a 64 bit version of - doxygen on 64 bit systems and the 32 bit version on 32 bit systems. -<li> Added support for using the HTML tag <blockquote> in comments. + doxygen on 64 bit systems and the 32 bit version on 32 bit systems.</li> +<li> Added support for using the HTML tag <blockquote> in comments.</li> <li> Included patch by Gauthier Haderer that fixes some issues with the - dbus XML parser. -<li> Added support for Markdown style fenced code blocks. + dbus XML parser.</li> +<li> Added support for Markdown style fenced code blocks.</li> <li> Added option to @code command to force parsing and syntax highlighting - according to a particular language. -<li> Section of pages are now added to the navigation index. + according to a particular language.</li> +<li> Section of pages are now added to the navigation index.</li> <li> Added support for cell alignment and table header shading in - LaTeX and RTF output. + LaTeX and RTF output. </li> <li> Added -d filteroutput option to show the output of an input filter - (thanks to Albert for the patch). + (thanks to Albert for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668010">668010</a>: Latex: for Windows doxygen new generates a makepdf.bat - file in the latex output dir to create the latex documentation. + file in the latex output dir to create the latex documentation.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=498703">498703</a>: Fixed encoding issue in CHM index file for group titles. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=498703">498703</a>: Fixed encoding issue in CHM index file for group titles.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=510975">510975</a>: FORTRAN: Keywords like .GT. recognized as symbols for - cross ref. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=511906">511906</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=581303">581303</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622749">622749</a>: \copydoc did copy the brief description + cross ref.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=511906">511906</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=581303">581303</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622749">622749</a>: \copydoc did copy the brief description into the detailed section, causing a difference between the original - and the copy. + and the copy.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=555327">555327</a>: Using @ref for an example file, caused it to appear as - file::ext. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567494">567494</a>: Fortran: Included patch for blockdata sub-programs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628417">628417</a>: Fortran: doxygen filter, preparsing fixed form of null -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=662286">662286</a>: TCL: Inlcuded patch to fixed UTF-8 support. + file::ext.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567494">567494</a>: Fortran: Included patch for blockdata sub-programs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628417">628417</a>: Fortran: doxygen filter, preparsing fixed form of null</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=662286">662286</a>: TCL: Included patch to fixed UTF-8 support.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=662289">662289</a>: TCL: Included patch to prevent ##### from appearing in the - output. + output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646319">646319</a>: Using a file name with path for HTML_STYLESHEET caused the - path to appear in the HTML output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664826">664826</a>: Fixed one more problem with include guard detection. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665629">665629</a>: Fixed parse problem when a #define appeared inside an enum. + path to appear in the HTML output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664826">664826</a>: Fixed one more problem with include guard detection.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665629">665629</a>: Fixed parse problem when a #define appeared inside an enum.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665855">665855</a>: Fixed problem parsing C++ template specialization of the - form A<func(T*)> such as used in boost::signal2 types. + form A<func(T*)> such as used in boost::signal2 types.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666047">666047</a>: A </p> followed by an htmlonly..endhtmlonly section - caused invalid XHTML output. + caused invalid XHTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666085">666085</a>: Fixed include handling in case the include guard was - documented. + documented.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666124">666124</a>: Fixed problem loading the navigation tree in IE8 when - serving pages via a web server. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666337">666337</a>: Included patch to avoid hypenation hints in front of the - first captial in a word. + serving pages via a web server.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666337">666337</a>: Included patch to avoid hyphenation hints in front of the + first capital in a word.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666568">666568</a>: When SHOW_FILES was NO, a grouped function did not appear - in the javascript based search index. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666909">666909</a>: \copybrief introduced extra spacing in the HTML output. + in the javascript based search index.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666909">666909</a>: \copybrief introduced extra spacing in the HTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666986">666986</a>: Fixed case where search engine specific code appeared - twice in the HTML output. + twice in the HTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=666993">666993</a>: Fixed bug in the generated makefile causing index not - to be generated when using pdflatex. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667020">667020</a>: HTML output for example pages was not well-formed. + to be generated when using pdflatex.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667020">667020</a>: HTML output for example pages was not well-formed.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667192">667192</a>: Include statements in latex output where placed all on - one line in the LaTeX output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667835">667835</a>: PHP: Fixed problem handling heredoc blocks + one line in the LaTeX output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667835">667835</a>: PHP: Fixed problem handling heredoc blocks</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=667844">667844</a>: For aliases with a single argument it is no longer required - to escape commas that appear inside the argument text. + to escape commas that appear inside the argument text.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668037">668037</a>: Latex: tables can now span multiple pages by using the xtab - package. + package.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668218">668218</a>: Doxygen will ignore the common prefix shared by all directories when computing a names for the directory's output files. - This will make the names of the output more stable. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668519">668519</a>: Added missing newline in man page output. + This will make the names of the output more stable.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=668519">668519</a>: Added missing newline in man page output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669071">669071</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669072">669072</a>: Fixed parse problem for Q_PROPERTY when a template - with a namespaced type was used. + with a namespaced type was used.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669078">669078</a>: Included patch which changes MATHJAX_RELPATH to use the - content delivery network by default. + content delivery network by default.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669138">669138</a>: Fortran: Fixed problem handling multiple definition - statements on one line. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669406">669406</a>: Using -d Preprocessor now also works when QUIET is YES. + statements on one line.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669406">669406</a>: Using -d Preprocessor now also works when QUIET is YES.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669434">669434</a>: Latex: citations where only generated properly if the - bib files specified via CITE_BIB_FILES did not have a path. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669758">669758</a>: Tcl: Same function in multiple Tcl namespaces not added. + bib files specified via CITE_BIB_FILES did not have a path.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=669758">669758</a>: Tcl: Same function in multiple Tcl namespaces not added.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670289">670289</a>: Fixed case where doxygen would not correctly detect - >> as a termination of a nested template. + >> as a termination of a nested template.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=670571">670571</a>: subpages generate empty pages in latex/rtf output and - broken links when SHORT_NAME was set to YES. -<li> Included VHDL fixes provided by Martin Kreis. + broken links when SHORT_NAME was set to YES.</li> +<li> Included VHDL fixes provided by Martin Kreis.</li> <li> The word "dummy" wrongly appeared before the first parameter type in - the LaTeX output for an Objective-C method. -<li> Fixed several small glitches in the tree view javascript code. + the LaTeX output for an Objective-C method.</li> +<li> Fixed several small glitches in the tree view javascript code.</li> <li> Included a patch by Vladimir Simonov to make it possible to compile - doxygen with Visual Studio 2005. -<li> Fixed some typos in the manual (thanks Albert). + doxygen with Visual Studio 2005.</li> +<li> Fixed some typos in the manual (thanks Albert).</li> </ul> +<p> \endhtmlonly \section log_1_7 1.7 Series \htmlonly <a name="1.7.6.1"></a> +</p> <h1>Doxygen Release 1.7.6.1</h1> <h2>(release date 10-12-2011)</h2> <h3>Changes</h3> @@ -1784,26 +2196,26 @@ make sure you add the following: <li> Doxygen now reports its cache usage (for the symbol and the lookup cache) at the end of a run (if QUIET=NO), and recommends settings for SYMBOL_CACHE_SIZE and LOOKUP_CACHE_SIZE for your - project if either cache is too small. + project if either cache is too small.</li> </ul> <h3>New features</h3> <ul> <li> Added new option LOOKUP_CACHE_SIZE to control the internal cache - doxygen uses to find symbols given their name and a context. -<li> Python: added support for @staticmethod + doxygen uses to find symbols given their name and a context.</li> +<li> Python: added support for @staticmethod</li> </ul> <h3>Bug fixes</h3> <ul> -<li> Python: scopes are now shown with . instead of :: +<li> Python: scopes are now shown with . instead of ::</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665313">665313</a>: Space before @if was not preserved, causing problems - with inline @if .. @endif constructs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665583">665583</a>: Fixed XHTML validity problem when using mscgen graphs. + with inline @if .. @endif constructs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665583">665583</a>: Fixed XHTML validity problem when using mscgen graphs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665641">665641</a>: Fixed XHTML validity problem when GENERATE_TREEVIEW was - disabled. + disabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665720">665720</a>: Included patch to fix hang issue when non-empty - INCLUDE_PATH was used. + INCLUDE_PATH was used.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665778">665778</a>: Fixed parse issue when a comma appeared as part of an - enum's value. + enum's value.</li> </ul> <a name="1.7.6"></a> <h1>Doxygen Release 1.7.6</h1> @@ -1812,105 +2224,105 @@ make sure you add the following: <ul> <li> To improve the performance of loading the navigation tree, the data is now split into multiple javascript files which - are loaded dynamically. + are loaded dynamically.</li> <li> The selected member is now briefly highlighted in the HTML output - (when GENERATE_TREEVIEW is enabled). + (when GENERATE_TREEVIEW is enabled).</li> <li> The navigation tree (GENERATE_TREEVIEW) now shows the same information - as the index. + as the index.</li> <li> The navindex section of layout now also controls what is shown in - the navigation tree. -<li> Improved HTML output support for IE9. -<li> Included redesigned VHDL parser (thanks to Martin Kreis for the patch) + the navigation tree.</li> +<li> Improved HTML output support for IE9.</li> +<li> Included redesigned VHDL parser (thanks to Martin Kreis for the patch)</li> <li> When a class/structs has many (>15) members of the same type, only - the first 10 are shown in the UML diagram. -<li> Made the output of the javascript based search engine more compact. + the first 10 are shown in the UML diagram. </li> +<li> Made the output of the javascript based search engine more compact.</li> </ul> <h3>New features</h3> <ul> -<li> Update of the French translation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607305">607305</a>: Added support for PHP heredoc and nowdoc constructs. +<li> Update of the French translation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607305">607305</a>: Added support for PHP heredoc and nowdoc constructs.</li> <li> Added support for cross-referencing in case of operator-> overloading. This includes support for std::auto_ptr,std::smart_ptr,std::unique_ptr - and std::weak_ptr when BUILTIN_STL_SUPPORT is enabled. + and std::weak_ptr when BUILTIN_STL_SUPPORT is enabled.</li> </ul> <h3>Bug fixes</h3> <ul> <li> Regression: some information was no longer available for a class, - due to accidental deletion of a code block. -<li> Regression: fixed matching problem in the code parser. + due to accidental deletion of a code block.</li> +<li> Regression: fixed matching problem in the code parser.</li> <li> Included fixes for TCL to support commands with \ and command - definitions preceded by whitespace (thanks to Rene Zaumseil) + definitions preceded by whitespace (thanks to Rene Zaumseil)</li> <li> When using "static int a,b" variable "b" incorrectly appeared in the - output even though EXTRACT_STATIC was set to NO. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521717">521717</a>: .spec file was only updated after running ./configure -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656642">656642</a>: Fixed potential crash when using doxygen for large projects. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656878">656878</a>: Fixed problem running bibtex with \cite command on Windows. + output even though EXTRACT_STATIC was set to NO.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521717">521717</a>: .spec file was only updated after running ./configure</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656642">656642</a>: Fixed potential crash when using doxygen for large projects.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656878">656878</a>: Fixed problem running bibtex with \cite command on Windows.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=657152">657152</a>: Fixed constant expression evaluation error in the - preprocessor. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652277">652277</a>: Removed bogus ' from the man page output. + preprocessor.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652277">652277</a>: Removed bogus ' from the man page output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=659244">659244</a>: Quotes in the brief description could appear unescaped in - the tooltip. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641336">641336</a>: #includes with ../ were not always processed correctly. + the tooltip.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641336">641336</a>: #includes with ../ were not always processed correctly.</li> <li> Fixed potential crash when INLINE_GROUPED_CLASSES and INLINE_SIMPLE_STRUCTS - are set to YES. + are set to YES.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658896">658896</a>: Fixed preprocessor problem handling #defines whose value was - a constant string containing ///. + a constant string containing ///.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=660332">660332</a>: Using a \ at the end of a comment line could cause - parsing problems for C# as the \ was treated as a line continuation. + parsing problems for C# as the \ was treated as a line continuation.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658033">658033</a>: Fixed parser problem when using multiple member groups - inside a macro definition. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=503239">503239</a>: Fixed several issues related to \cite handling. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658587">658587</a>: Improved the way macro definitions are collected. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=660501">660501</a>: Fixed LaTeX error when using \name with a description. + inside a macro definition.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=503239">503239</a>: Fixed several issues related to \cite handling.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658587">658587</a>: Improved the way macro definitions are collected.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=660501">660501</a>: Fixed LaTeX error when using \name with a description.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661292">661292</a>: The documentation for \mainpage incorrectly mentioned that one has to use \ref main in case GENERATE_TREEVIEW was set to YES, which - is no longer the case. + is no longer the case.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=659096">659096</a>: Nested aliases definitions where not always expanded properly - (regression w.r.t version 1.7.4) + (regression w.r.t version 1.7.4)</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658038">658038</a>: Fixed preprocessor problem where the @ character inside a - macro definition could appear as @@. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658646">658646</a>: Fixed problem running mscgen for LaTeX and RTF output. + macro definition could appear as @@.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=658646">658646</a>: Fixed problem running mscgen for LaTeX and RTF output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661723">661723</a>: Using ClassName%'s did not work anymore, and also - ClassName's wasn't autolinked. + ClassName's wasn't autolinked.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=662044">662044</a>: Fixed potential printing of null pointer when using - a version filter that returned blanks. + a version filter that returned blanks.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625518">625518</a>: Fortran: first problem where subroutine using results - variable appeared as a function. + variable appeared as a function.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654153">654153</a>: If an URL appeared at the end of a sentence, the period - was included in the URL. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656560">656560</a>: Fortran: Added support for the Double Complex type. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=663640">663640</a>: Included workaround for Solaris CC issue in index.cpp + was included in the URL.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656560">656560</a>: Fortran: Added support for the Double Complex type.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=663640">663640</a>: Included workaround for Solaris CC issue in index.cpp</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=662190">662190</a>: Included patch to fix some TCL issues and add the TCL_SUBST - configuration option. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661672">661672</a>: Fortran: Added support for ALIAS expansion in comment blocks. + configuration option.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=661672">661672</a>: Fortran: Added support for ALIAS expansion in comment blocks.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=663101">663101</a>: Fixed case where a macro was not corrected found in the header - file when it could only be found via INCLUDE_PATH. + file when it could only be found via INCLUDE_PATH.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664718">664718</a>: using multiple <para>'s inside a <summary> block caused - text to be joined without spacing. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656556">656556</a>: Java enums are now parsed as classes. + text to be joined without spacing.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656556">656556</a>: Java enums are now parsed as classes. </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664826">664826</a>: Fixed problem in the preprocessor regarding the handling - of include guards. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664893">664893</a>: Fixed typo in the docs for EXCLUDE_SYMLINKS. + of include guards.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=664893">664893</a>: Fixed typo in the docs for EXCLUDE_SYMLINKS.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665466">665466</a>: Using a relative URL with <a href> did not work when - CREATE_SUBDIRS was enabled. + CREATE_SUBDIRS was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=665464">665464</a>: Using an absolute URL with <img> did not work when - CREATE_SUBDIRS was enabled. + CREATE_SUBDIRS was enabled.</li> </ul> <a name="1.7.5.1"></a> <h1>Doxygen Release 1.7.5.1</h1> <h2>(release date 21-08-2011)</h2> <h3>New features</h3> <ul> -<li>Update of the French translation. +<li>Update of the French translation.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521717">521717</a>: .spec file was only updated after running ./configure -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656642">656642</a>: Fixed potential crash when using doxygen for large projects. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656878">656878</a>: Fixed problem running bibtex with \cite command on Windows. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521717">521717</a>: .spec file was only updated after running ./configure</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656642">656642</a>: Fixed potential crash when using doxygen for large projects.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656878">656878</a>: Fixed problem running bibtex with \cite command on Windows.</li> <li>Regression: some information was no longer available for a class, - due to accidental deletion of a code block. -<li>Regression: fixed matching problem in the code parser. + due to accidental deletion of a code block.</li> +<li>Regression: fixed matching problem in the code parser.</li> </ul> <a name="1.7.5"></a> <h1>Doxygen Release 1.7.5</h1> @@ -1918,142 +2330,142 @@ make sure you add the following: <h3>Changes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641904">641904</a>: Function in the call graphs are now shown based on first - appearance rather then alphabetical order. + appearance rather then alphabetical order.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616213">616213</a>: When customizing the HTML header $title now only generates the title excluding the project name (which can still be added using - $projectname) -<li> Improved the look of the class index: all items now have equal spacing. + $projectname)</li> +<li> Improved the look of the class index: all items now have equal spacing.</li> </ul> <h3>New features</h3> <ul> <li> New option INTERACTIVE_SVG which when set to YES in combination with DOT_IMAGE_FORMAT=svg will make doxygen generate interactive SVG diagrams that support zooming and - panning via the mouse (only for large graphs). + panning via the mouse (only for large graphs). </li> <li> Added support for the Tcl programming language - (thanks to Rene Zaumseil and Samuel Bentley for the patch). -<li> Added @copyright command. + (thanks to Rene Zaumseil and Samuel Bentley for the patch).</li> +<li> Added @copyright command.</li> <li> added option MATHJAX_EXTENSIONS to provide additional extensions for - MathJax (thanks to David Munger for the patch). + MathJax (thanks to David Munger for the patch).</li> <li> added option INLINE_SIMPLE_STRUCTS which when enabled shows the fields of simple classes and structs (with only public data fields) as a table and inline in context (file/group/namespace/class) provided this context - is documented. + is documented.</li> <li> When using the server based search engine (SEARCHENGINE=YES and SERVER_BASED_SEARCH=YES) doxygen now advertises a opensearch provider for your project, that allows integrating the search directly in - the search field of the browser (thanks to Phil Lello for the patch). + the search field of the browser (thanks to Phil Lello for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=503239">503239</a>: Added new option CITE_BIB_FILES and LATEX_BIB_STYLE and a new command \cite, allowing you to make references to literature (as defined in one or more .bib files). This also works for output formats other than LaTeX. The tool bibtex is required for this to work though. Thanks - to David Munger for the initial patch upon which this feature is based. -<li> PHP namespaces are now shown as A\B in the output. + to David Munger for the initial patch upon which this feature is based.</li> +<li> PHP namespaces are now shown as A\B in the output.</li> <li> Added new \snippet command that can be used to include marked sections from a source file. See - http://www.doxygen.org/commands.html#cmdsnippet for more info. + http://www.doxygen.org/commands.html#cmdsnippet for more info.</li> <li> Added translation support for Armenian, thank to Armen Tangamyan. - and included translation updates for a number of languages. + and included translation updates for a number of languages.</li> </ul> <h3>Bug fixes</h3> <ul> <li> Fixed a couple of potential race conditions found by Helgrind while - running dot from multiple threads. + running dot from multiple threads.</li> <li> Graphs did not appear when enabling both INTERACTIVE_SVG and - HTML_DYNAMIC_SECTIONS. + HTML_DYNAMIC_SECTIONS.</li> <li> PDFs generated by newer versions of dot (i.e. 2.28) did not appear - in the output, because doxygen failed to extract the bounding box. -<li> Improved call graph and cross-reference support for Python. + in the output, because doxygen failed to extract the bounding box.</li> +<li> Improved call graph and cross-reference support for Python.</li> <li> INTERACTIVE_SVG now also works with IE9 if the html file extension is - set to xhtml. + set to xhtml.</li> <li> Fixed several cases where the LaTeX output could produce too long - lines. + lines.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=318061">318061</a>: Putting two functions in the same group that only - different in the number of template arguments did not work. + different in the number of template arguments did not work.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=437346">437346</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=564614">564614</a>: Fixed proper encoding of multibyte output in RTF - depending on the code page (thanks to Hirao for the patch). + depending on the code page (thanks to Hirao for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521717">521717</a>: The .spec file in the source distribution did not get - updated to the latest version. + updated to the latest version.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521861">521861</a>: Fortran: Continuation character was not recognised in - fixed format code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=522496">522496</a>: Fortran: @param checking was not case insensitive. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=560105">560105</a>: Fixed problem combining @cond with preprocessor directives. + fixed format code.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=522496">522496</a>: Fortran: @param checking was not case insensitive.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=560105">560105</a>: Fixed problem combining @cond with preprocessor directives.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=577359">577359</a>: Using "struct A : C, D {};" showed a private inheritance - relation for D. + relation for D.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=584194">584194</a>: Some links to typedef where pointing to the typedef'ed - class instead. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619560">619560</a>: Anonymous enums caused an invalid entry in the LaTeX TOC. + class instead. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619560">619560</a>: Anonymous enums caused an invalid entry in the LaTeX TOC.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622935">622935</a>: Deriving from an unknown template class could cause the - class to appear with a -g postfix in C# -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625731">625731</a>: Fortran: Fixed issue handling private subroutines. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632946">632946</a>: LaTeX now starts a new page when starting a new module. + class to appear with a -g postfix in C# </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625731">625731</a>: Fortran: Fixed issue handling private subroutines.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632946">632946</a>: LaTeX now starts a new page when starting a new module.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634837">634837</a>: Fortran: Prefix of function was overwritten and the word - 'function' not specified. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637099">637099</a>: Fortran: Included fix for using collaboration diagrams. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642468">642468</a>: Added PHP support for namespace with curly braces. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643219">643219</a>: Fortran: Improved handling of semicolons. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643617">643617</a>: Fortran: Added support for "type is". + 'function' not specified.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637099">637099</a>: Fortran: Included fix for using collaboration diagrams.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642468">642468</a>: Added PHP support for namespace with curly braces.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643219">643219</a>: Fortran: Improved handling of semicolons.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643617">643617</a>: Fortran: Added support for "type is".</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643944">643944</a>: A macro added to a group appeared twice in the group - documentation if was also made related to a class using \relates. + documentation if was also made related to a class using \relates.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646321">646321</a>: Fixed problem were the search box was missing when using - a custom HTML header. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646447">646447</a>: Fixed unterminated img tab in the XHTML output. + a custom HTML header.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646447">646447</a>: Fixed unterminated img tab in the XHTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646463">646463</a>: Fixed problem handling MSCFILE_DIRS option with multiple - paths. + paths.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646533">646533</a>: Included patch to sort overloaded members by appearance in - the code. + the code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646747">646747</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646879">646879</a>: Putting an autolist inside a @todo, @bug or similar - section did not work anymore. + section did not work anymore.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=646922">646922</a>: Referring to a logo with a relative path, caused - a broken image target when using a custom HTML header. + a broken image target when using a custom HTML header.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=647499">647499</a>: Fixed HTML rendering problem on older browsers when - GENERATE_TREEVIEW was enabled. + GENERATE_TREEVIEW was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=647768">647768</a>: Linking to a section on the main page could result in a - broken link when GENERATE_TREEVIEW was enabled. + broken link when GENERATE_TREEVIEW was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=647889">647889</a>: Fixed invalid warning when using @deparated method with - default values for parameters. + default values for parameters.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=648302">648302</a>: A function made related using @relates could end up in the wrong class if there was already a method with a matching - argument list in that other class. + argument list in that other class.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=649103">649103</a>: Return types containing multiple *'s ended up in the - output with only one * in some cases. + output with only one * in some cases.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650397">650397</a>: Fixed problem with alias substitution if the alias had - more then 9 parameters. + more then 9 parameters.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650430">650430</a>: For nested anonymous structs @xx markers could appear in - the output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650463">650463</a>: Added compilation support for MacOSX 10.7 (aka Lion). + the output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650463">650463</a>: Added compilation support for MacOSX 10.7 (aka Lion).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=650958">650958</a>: Fixed issue printing HTML pages when the - GENERATE_TREEVIEW option is set to YES. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=651611">651611</a>: Fixed broken link to an undocumented namespace. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652138">652138</a>: Fixed potential crash while parsing Fortran code. + GENERATE_TREEVIEW option is set to YES.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=651611">651611</a>: Fixed broken link to an undocumented namespace.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652138">652138</a>: Fixed potential crash while parsing Fortran code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652188">652188</a>: Fixed problem parsing comment which included - an unterminated alias within quotes (i.e. "\word{") -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652277">652277</a>: Lines starting with . did not appear in the man page output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652389">652389</a>: Fortran: Fixed text is detailed function section. + an unterminated alias within quotes (i.e. "\word{")</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652277">652277</a>: Lines starting with . did not appear in the man page output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652389">652389</a>: Fortran: Fixed text is detailed function section.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652396">652396</a>: When enabling INTERACTIVE_SVG wide graphs are now also - fit to the screen width. + fit to the screen width.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652695">652695</a>: Added missing space between parameter type and name in - the RTF output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652741">652741</a>: Use background-color instead of background in doxygen.css. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653344">653344</a>: Fixed potential segfault while creating man pages. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653666">653666</a>: Fortran: add a space to "type" in argument list. + the RTF output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=652741">652741</a>: Use background-color instead of background in doxygen.css.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653344">653344</a>: Fixed potential segfault while creating man pages.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653666">653666</a>: Fortran: add a space to "type" in argument list.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653801">653801</a>: Fixed problem handling include guard when multiple - blocks guarded by the same guard were used in a header file. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653963">653963</a>: Fortran: Unified handling of @params at various places. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654108">654108</a>: make clean failed on a system without qmake. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654244">654244</a>: Fixed compile issue for HP Itanium. + blocks guarded by the same guard were used in a header file. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=653963">653963</a>: Fortran: Unified handling of @params at various places.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654108">654108</a>: make clean failed on a system without qmake.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654244">654244</a>: Fixed compile issue for HP Itanium.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654779">654779</a>: Fortran: Interface was seen as a class with constructor / - destructor. + destructor.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654869">654869</a>: Using the word "property" as a type in C caused wrong - results. + results.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=654866">654866</a>: Fortran: fixed issue parsing function type that looked like - C function pointers. + C function pointers.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=655178">655178</a>: Fortran: Fixed parse issue when using variable name - starting with the word interface. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=655591">655591</a>: Improved error handling for empty html style list. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=655935">655935</a>: Fixed case where %s could end up in a warning messge. + starting with the word interface.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=655591">655591</a>: Improved error handling for empty html style list.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=655935">655935</a>: Fixed case where %s could end up in a warning messge.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=656005">656005</a>: Methods of Objective-C categories defined in an .m file are - now marked as private. + now marked as private.</li> </ul> <a name="1.7.4"></a> <h1>Doxygen Release 1.7.4</h1> @@ -2061,86 +2473,86 @@ make sure you add the following: <h3>Changes</h3> <ul> <li> doxygen -w html now reads the default Doxyfile even if not specified - explicitly + explicitly</li> <li> doxygen -w html now produces a template header and footer that can - be used independent of the configuration options used. + be used independent of the configuration options used.</li> </ul> <h3>New features</h3> <ul> <li> New option INLINE_GROUPED_CLASSES that when enabled shows grouped - classes inside the group documentation, instead of on a separate page. -<li> Included updates for the Italian and Russian translation. + classes inside the group documentation, instead of on a separate page.</li> +<li> Included updates for the Italian and Russian translation.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640875">640875</a>: Added option HTML_EXTRA_FILES which makes it easier to copy - additional files to the HTML output and also add them to the index files. + additional files to the HTML output and also add them to the index files.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642579">642579</a>: Included patch that adds new LATEX_FOOTER option to - customize the end of refman.tex in the LaTeX output. + customize the end of refman.tex in the LaTeX output.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=140259">140259</a>: Jumping to a @section did not work in the RTF output. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=140259">140259</a>: Jumping to a @section did not work in the RTF output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521854">521854</a>: Fortran: included patch for supporting multiple argument - declarations on one line. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521861">521861</a>: Fixed problem with line continuation in Fortran. + declarations on one line.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=521861">521861</a>: Fixed problem with line continuation in Fortran.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=566921">566921</a>: %A::B now prevents a link for A::B, instead of only for A - and generating a warning that ::B cannot be linked. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=598481">598481</a>: Fortran: Added support for extends keyword. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=618374">618374</a>: Added support for inlining code in the VHDL output. + and generating a warning that ::B cannot be linked.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=598481">598481</a>: Fortran: Added support for extends keyword.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=618374">618374</a>: Added support for inlining code in the VHDL output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625519">625519</a>: Fortran: argument name starting with a reserved word was - not handled properly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634415">634415</a>: Fixed problem parsing an array of character literals. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=635537">635537</a>: Links to file members were not made when found in tag files. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638637">638637</a>: The Doxyfile documentation contained some very long lines. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638655">638655</a>: Double quote in page or group title broke treeview. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638733">638733</a>: Improved documentation for DOT_IMAGE_FORMAT option. + not handled properly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634415">634415</a>: Fixed problem parsing an array of character literals.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=635537">635537</a>: Links to file members were not made when found in tag files.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638637">638637</a>: The Doxyfile documentation contained some very long lines.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638655">638655</a>: Double quote in page or group title broke treeview.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638733">638733</a>: Improved documentation for DOT_IMAGE_FORMAT option.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638829">638829</a>: Added documentation to warn for consequences of using - HTML_HEADER. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638856">638856</a>: Fixed problem autolinking to struct field using #S::a + HTML_HEADER.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=638856">638856</a>: Fixed problem autolinking to struct field using #S::a</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=639272">639272</a>: using @dot...@endot produced an image referenced with - absolute path. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=639521">639521</a>: \mscfile did not work properly for LaTeX output. + absolute path.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=639521">639521</a>: \mscfile did not work properly for LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=639716">639716</a>: Fixed problem where #include's could cause phantom __pad__ - members to appear in the output (appeared on Windows only). + members to appear in the output (appeared on Windows only).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640259">640259</a>: Options PROJECT_LOGO and PROJECT_BRIEF were missing - from the manual. + from the manual.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640463">640463</a>: Fixed problem parsing PHP "use" statement when the argument - did not have a namespace scope. + did not have a namespace scope.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640588">640588</a>: Included fix for proper splitting of multiple arguments - given to the QHP_CUST_FILTER_ATTRS option. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640646">640646</a>: Long error messages could cause memory corruption. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640742">640742</a>: XML: switched indent option to no in the combine.xslt script. + given to the QHP_CUST_FILTER_ATTRS option.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640646">640646</a>: Long error messages could cause memory corruption.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640742">640742</a>: XML: switched indent option to no in the combine.xslt script.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640754">640754</a>: Comment with XML style list of type table was not rendered - properly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640822">640822</a>: Added support for overloading of C# indexer operators. + properly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640822">640822</a>: Added support for overloading of C# indexer operators.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640828">640828</a>: Internal section marked with @internal was not shown as - such anymore in the XML output. + such anymore in the XML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640847">640847</a>: PHP: Fixed parse problem referring to class in global - namespace. + namespace.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640924">640924</a>: Included patch by Haffmans to make the custom header and - footer independent of the chosen config options. + footer independent of the chosen config options.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=640927">640927</a>: Included fix to prevent a warning in the server side PHP - search script. + search script.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641026">641026</a>: Included patch to fix broken hyperlink to page entry - in xreflists. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641188">641188</a>: Header of \page was wrong in Man page output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641336">641336</a>: #include's to other directories were not always linked. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641673">641673</a>: Using "use Foo\Foo;" in PHP could cause doxygen to hang. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641814">641814</a>: In some cases the HTML output could contain an extra </p>. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642030">642030</a>: Tooltips with HTML entities could be wrongly truncated. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642475">642475</a>: Include graphs could be incomplete. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643056">643056</a>: Fixed problem with macro expansion. + in xreflists.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641188">641188</a>: Header of \page was wrong in Man page output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641336">641336</a>: #include's to other directories were not always linked.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641673">641673</a>: Using "use Foo\Foo;" in PHP could cause doxygen to hang.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=641814">641814</a>: In some cases the HTML output could contain an extra </p>.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642030">642030</a>: Tooltips with HTML entities could be wrongly truncated.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=642475">642475</a>: Include graphs could be incomplete.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643056">643056</a>: Fixed problem with macro expansion.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643279">643279</a>: Fixed potential crash when generating a warning for - void f(int %x) style parameter, which is valid in C++/CLI. + void f(int %x) style parameter, which is valid in C++/CLI.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643280">643280</a>: Included patch to enabled LargeAddressAware for Windows - builds. + builds.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643276">643276</a>: Fixed cases where FILE_VERSION_FILTER was called for - dummy files with name "generated". + dummy files with name "generated".</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=643655">643655</a>: Fixed argument matching issue when one of match candidates - was a typedef of a method pointer. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=645754">645754</a>: mscfile tag was closed with dotfile in the XML output. + was a typedef of a method pointer.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=645754">645754</a>: mscfile tag was closed with dotfile in the XML output.</li> <li> doxygen -w html now ignores the values for HTML_HEADER and HTML_FOOTER - found in the config file. + found in the config file.</li> <li> Importing a group via a tag file could overrule a local group with - the same name even when EXTERNAL_GROUPS was disabled. + the same name even when EXTERNAL_GROUPS was disabled.</li> </ul> <a name="1.7.3"></a> <h1>Doxygen Release 1.7.3</h1> @@ -2152,81 +2564,81 @@ make sure you add the following: Disabling the index (with DISABLE_INDEX) still shows the new header (you can still customize this using HTML_HEADER). This now works nicely in combination with GENERATE_TREEVIEW = YES and/or - SEARCH_ENGINE = YES. + SEARCH_ENGINE = YES.</li> <li> Redesigned the treeview feature. Instead of using frames, the navigation tree is now loaded on each page dynamically. This allows bookmarking a page and always keeps the top menu visible. Also the current item is automatically highlighted in the tree. Also updated the icons in the treeview to match the overall look'n'feel. Note: if you now use a custom HTML header, please update it using - doxygen with the -w and the edit the default header. + doxygen with the -w and the edit the default header.</li> </ul> <h3>New features</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=499544">499544</a>: Added SVG support to doxygen's dot output - (setting DOT_IMAGE_FORMAT to svg now works as expected) + (setting DOT_IMAGE_FORMAT to svg now works as expected)</li> <li> Added control to the wizard to configure the color of the output - visually. + visually.</li> <li> Added options to specify project synopsis and select a - project logo to the wizard. + project logo to the wizard.</li> <li> Added option PROJECT_LOGO which can be used to specify an image which will be shown in the header of each HTML page along with - the project name (PROJECT_NAME option). + the project name (PROJECT_NAME option).</li> <li> Added option PROJECT_BRIEF which can be used to specify a brief description which will be shown in the header of each HTML page - just below the project name. + just below the project name.</li> <li> Added new option FILTER_SOURCE_PATTERNS which can be used in combination with FILTER_SOURCE_FILES to filter files used for the source browser based on file extension, which can overwrite - the filter set by FILTER_PATTERNS and/or INPUT_FILTER. + the filter set by FILTER_PATTERNS and/or INPUT_FILTER.</li> <li> Added new option STRICT_PROTO_MATCHING which is disabled by default, and makes the parameter matching to be less strict, resulting in - fewer "No matching class member found" warnings. + fewer "No matching class member found" warnings.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306076">306076</a>: code blocks with using directives did not get hyperlinked. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=313527">313527</a>: enum values with bitfields did not get parsed correctly. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306076">306076</a>: code blocks with using directives did not get hyperlinked.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=313527">313527</a>: enum values with bitfields did not get parsed correctly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=565715">565715</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=630582">630582</a>: Included a patch that fixes a couple of Fortran issues - (thanks to Albert). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615507">615507</a>: Fixed problem handling @cond..@endcond in Fortran code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619040">619040</a>: Scope was missing in Tokens.xml when using docsets. + (thanks to Albert).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615507">615507</a>: Fixed problem handling @cond..@endcond in Fortran code.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619040">619040</a>: Scope was missing in Tokens.xml when using docsets.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625517">625517</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=523156">523156</a>: Applied patch tp avoid stripping prefixes for Fortran - subroutines. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626476">626476</a>: allow label before end statement in Fortran -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=630901">630901</a>: </see> was not handled properly in comment block. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632311">632311</a>: Fixed potential crash for empty verbatim section. + subroutines.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626476">626476</a>: allow label before end statement in Fortran</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=630901">630901</a>: </see> was not handled properly in comment block.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632311">632311</a>: Fixed potential crash for empty verbatim section.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632426">632426</a>: closing brace of a function with one parameter has wrong - color in HTML. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632543">632543</a>: Added support for Fortan TYPEs with languge bindings. - (thanks to a patch by Daniel Franke) + color in HTML.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632543">632543</a>: Added support for Fortran TYPEs with language bindings. + (thanks to a patch by Daniel Franke)</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=632879">632879</a>: An explicit link request such as #blah did not longer produce - a warning if no symbol named blah was found. + a warning if no symbol named blah was found.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=633891">633891</a>: warnings in "inbody" documentation were shown with "unknown" - file name. + file name.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634116">634116</a>: Titles customized via the layout file did not appear in - the title page and navigation tree, only in the top menu. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634600">634600</a>: Fixed problem resolving typedef. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634775">634775</a>: Fixed a problem were // inside a code block got removed. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634857">634857</a>: Added support for escaping :: by using \:: (or @::) + the title page and navigation tree, only in the top menu.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634600">634600</a>: Fixed problem resolving typedef.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634775">634775</a>: Fixed a problem were // inside a code block got removed.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634857">634857</a>: Added support for escaping :: by using \:: (or @::)</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634962">634962</a>: #include with relative path to parent dir did not get - hyperlinked. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634986">634986</a>: Removed double definition of docParamName in compound.xsd. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=635198">635198</a>: C++/CLI Finalizer methods were not parsed properly. + hyperlinked.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=634986">634986</a>: Removed double definition of docParamName in compound.xsd.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=635198">635198</a>: C++/CLI Finalizer methods were not parsed properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=636475">636475</a>: Objective-C method names can now be used as the - the first argument of \ref. + the first argument of \ref.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=636588">636588</a>: Fixed a couple of problems in the compound.xsd schema used - for XML output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=636598">636598</a>: DISTRIBUTE_GROUP_DOC now works again for enum values. + for XML output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=636598">636598</a>: DISTRIBUTE_GROUP_DOC now works again for enum values.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=636947">636947</a>: Improved matching of typedef'ed array parameter and non - typedef'ed array parameter. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637610">637610</a>: Added a number of fixed for Fortran interfaces. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637712">637712</a>: Handle files with the .for extension as Fortran. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637987">637987</a>: Fixed error in the grouping documentation. + typedef'ed array parameter.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637610">637610</a>: Added a number of fixed for Fortran interfaces.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637712">637712</a>: Handle files with the .for extension as Fortran.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=637987">637987</a>: Fixed error in the grouping documentation.</li> <li> Fixed line number sync problem when using Objective-C #import - statements. -<li> Fixed problem handling /** @cond */ in the preprocessor. -<li> Member groups could get reordered in the output. + statements.</li> +<li> Fixed problem handling /** @cond */ in the preprocessor.</li> +<li> Member groups could get reordered in the output.</li> </ul> <a name="1.7.2"></a> <h1>Doxygen Release 1.7.2</h1> @@ -2234,106 +2646,106 @@ make sure you add the following: <h3>Changes</h3> <ul> -<li> Changed the default font of the LaTeX output to helvetica. +<li> Changed the default font of the LaTeX output to helvetica.</li> <li> Changed the way parameters and return values are represented in the - LaTeX and RTF output. They are now listed using tables. + LaTeX and RTF output. They are now listed using tables.</li> </ul> <h3>New features</h3> <ul> -<li> added support for Apple's block object extension for C/Obj-C/C++. -<li> added support for detecting Python constructors and destructors. +<li> added support for Apple's block object extension for C/Obj-C/C++.</li> +<li> added support for detecting Python constructors and destructors.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624575">624575</a>: Added \endinternal command that can be used to force - the end of a section started with \internal. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=552605">552605</a>: Added parsing support for PHP 5.3+ style namespaces. + the end of a section started with \internal.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=552605">552605</a>: Added parsing support for PHP 5.3+ style namespaces.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582532">582532</a>: added \mscfile command which can be used to insert a message sequence chart given a .msc file. Also added a new config option MSCFILE_DIRS to provide directories - were msc files are searched (Thanks to Adrien for the patch). + were msc files are searched (Thanks to Adrien for the patch).</li> <li> Added support for type specifiers for documenting PHP parameters, - format: "@param type $paramname docs" + format: "@param type $paramname docs"</li> <li> Added support for rendering formulas in the HTML output using MathJax instead of using prerendered bitmaps. For this purpose the options USE_MATHJAX and MATHJAX_RELPATH were - added. + added.</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306076">306076</a>: Fixed case where using of a namespace did not work inside - an example. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=336053">336053</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=487871">487871</a>: /// were not stripped from formulas and \dot..\enddot + an example.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=336053">336053</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=487871">487871</a>: /// were not stripped from formulas and \dot..\enddot</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=563698">563698</a>: dropped support for a4wide paper format for LaTeX, since - it is on the LaTeX taboo list. + it is on the LaTeX taboo list.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=571014">571014</a>: Behaviour of CLASS_DIAGRAM=NO in combination with - HAVE_DOT=YES, was not propely documented. + HAVE_DOT=YES, was not propely documented.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=576291">576291</a>: Python comments for next class or method could end up in - code of a method/class when enabling INLINE_SOURCES. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611174">611174</a>: Fixed problem handling nestes classes in Python. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621733">621733</a>: removed unexpected warnings about undocumented return types + code of a method/class when enabling INLINE_SOURCES.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611174">611174</a>: Fixed problem handling nested classes in Python.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621733">621733</a>: removed unexpected warnings about undocumented return types</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622737">622737</a>: Undefined function macros could cause constant expression - errors. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622780">622780</a>: updated copyright statement in PDF docs. + errors.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622780">622780</a>: updated copyright statement in PDF docs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622935">622935</a>: C# generics appeared with -g extension in the output in - some situations. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623023">623023</a>: Fixed parsing problem for "int &foo1(),&foo2();" -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623052">623052</a>: Link to destructor was wrong in the member index. + some situations.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623023">623023</a>: Fixed parsing problem for "int &foo1(),&foo2();"</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623052">623052</a>: Link to destructor was wrong in the member index.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623424">623424</a>: Fixed problem where struct description gets added to variable - of struct type. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623673">623673</a>: Anchors were missing in the Qhp index for members. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623733">623733</a>: Fixed potential crash due to uninitialized line number. + of struct type.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623673">623673</a>: Anchors were missing in the Qhp index for members.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623733">623733</a>: Fixed potential crash due to uninitialized line number.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=623765">623765</a>: closed.png was wrongly linked when GENERATE_SUBDIRS and - HTML_DYNAMIC_SECTIONS were enabled. + HTML_DYNAMIC_SECTIONS were enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624014">624014</a>: Function macro was not handled properly when there was - a line continuation directly after the name. + a line continuation directly after the name.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624095">624095</a>: Linking to a class via a tag file did not work if the class - was in an undocumented namespace. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624104">624104</a>: Fixed a couple of typos in lodepng.h -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624323">624323</a>: Graph legend image was missing form the index files. + was in an undocumented namespace.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624104">624104</a>: Fixed a couple of typos in lodepng.h</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624323">624323</a>: Graph legend image was missing form the index files.</li> <li> Fixed a number of typos in the config file documentation - (thanks to Jens Schweikhardt) -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624514">624514</a>: Some enums were not cross-referenced. + (thanks to Jens Schweikhardt)</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624514">624514</a>: Some enums were not cross-referenced.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=624829">624829</a>: Missing \endcond could cause preprocessor issues in - next file(s) to be parsed. + next file(s) to be parsed.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625070">625070</a>: a function definition in a namespace, documented in the - header did not always get cross-referenced. + header did not always get cross-referenced.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625296">625296</a>: Removed superfluous <td></td> from parameter list in - HTML output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625317">625317</a>: Unterminated comment could crash doxygen. + HTML output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625317">625317</a>: Unterminated comment could crash doxygen.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625531">625531</a>: Inherited documentation was only included for the - last derived class in case of multiple inheritance. + last derived class in case of multiple inheritance.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625578">625578</a>: In the HTML output </div> was missing for built-in - class diagrams. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625555">625555</a>: References in example files with underscores were wrong. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625982">625982</a>: When using japanese characters mixed with ascii characters - doxygen incorrected ended the brief description with a dot. + class diagrams.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625555">625555</a>: References in example files with underscores were wrong.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625982">625982</a>: When using Japanese characters mixed with ascii characters + doxygen incorrectly ended the brief description with a dot.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=625952">625952</a>: setting MULTILINE_CPP_IS_BRIEF to YES, cause /// to appear - in the output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626033">626033</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567774">567774</a>: EXTENSION_MAPPING did not work if a the mapped + in the output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626033">626033</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567774">567774</a>: EXTENSION_MAPPING did not work if a mapped language was handled by the same parser as used for the original - extension. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626175">626175</a>: Fixed bracket bug in LaTeX fancy headers. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626508">626508</a>: Allow hyphen in key argument of \xrefitem. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626647">626647</a>: \copydoc did not work for array type arguments (e.g. int[]). + extension.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626175">626175</a>: Fixed bracket bug in LaTeX fancy headers.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626508">626508</a>: Allow hyphen in key argument of \xrefitem.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=626647">626647</a>: \copydoc did not work for array type arguments (e.g. int[]).</li> <li> Use \dotfile did not produce the correct map file, so URLs in dot - files did not work. + files did not work.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=627371">627371</a>: #define's in files only found via INCLUDE_PATH were not - correctly handled. + correctly handled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628065">628065</a>: auto brief description ending with .) cause the ) to - end up in the detailed part. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628242">628242</a>: Fixed encoding issue for the Spanish translation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628678">628678</a>: Fixed segmentation fault in case of very long errors. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629040">629040</a>: Fixed type in search page of the documentation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629182">629182</a>: Fixed problem detecting include guard. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629270">629270</a>: Made file extension to parser mapping case insensitive. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629485">629485</a>: Latex makefile clean target used rm command also for Windows. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629942">629942</a>: the EXCLUDE_SYMBOLS option was missing form the online docs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=631094">631094</a>: \htmlinclude and \verbinclude ended the brief description. + end up in the detailed part.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628242">628242</a>: Fixed encoding issue for the Spanish translation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=628678">628678</a>: Fixed segmentation fault in case of very long errors.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629040">629040</a>: Fixed type in search page of the documentation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629182">629182</a>: Fixed problem detecting include guard.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629270">629270</a>: Made file extension to parser mapping case insensitive.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629485">629485</a>: Latex makefile clean target used rm command also for Windows.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=629942">629942</a>: the EXCLUDE_SYMBOLS option was missing form the online docs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=631094">631094</a>: \htmlinclude and \verbinclude ended the brief description.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=631380">631380</a>: Inconsistent behaviour when a brief description was given - following by a detailed comment block with JAVADOC_AUTOBRIEF enabled. + following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.</li> <li> Fixed a number of typos in the documentation - (thanks to Albert van der Meer) + (thanks to Albert van der Meer)</li> <li> Fixed potential hangup when scanning directories defined as - symlinks to absolute paths. -<li> HTML attributes other than src were not copied for the <img> tag. + symlinks to absolute paths.</li> +<li> HTML attributes other than src were not copied for the <img> tag.</li> </ul> <a name="1.7.1"></a> <h1>Doxygen Release 1.7.1</h1> @@ -2342,49 +2754,49 @@ make sure you add the following: <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621695">621695</a>: Made warning and error messages appear with lower case "warning:" and "error:" prefix to make it easier to use the messages - from Visual Studio. + from Visual Studio.</li> </ul> <h3>New features</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621908">621908</a>: Added new config option FORMULA_TRANSPARENT which allows selecting between transparent (YES) or non-transparent (NO) PNGs for - formulas in the HTML output. -<li> Update for Turkish translation. + formulas in the HTML output.</li> +<li> Update for Turkish translation.</li> </ul> <h3>Bug fixes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=533821">533821</a>: Inheritance relation for a C# class deriving from - a generic class was not handled correctly. + a generic class was not handled correctly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=554638">554638</a>: Changing DOT_IMAGE_FORMAT did not cause the graphs to be - regenerated. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=576533">576533</a>: A field of the form "enum E *p" was ignore. + regenerated.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=576533">576533</a>: A field of the form "enum E *p" was ignore.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597016">597016</a>: Hide scope name was not working properly for todo items - inside class members, where the class was inside a namespace. + inside class members, where the class was inside a namespace.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=617761">617761</a>: In dot graphs now also @ref worked (previously only \ref was - supported). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621653">621653</a>: Fixed error when compiling doxygen for Solaris 8. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621733">621733</a>: Removed bogus warning about undocument return type for - define when WARN_NO_PARAMDOC was enabled. + supported).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621653">621653</a>: Fixed error when compiling doxygen for Solaris 8.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621733">621733</a>: Removed bogus warning about undocumented return type for + define when WARN_NO_PARAMDOC was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621780">621780</a>: Fixed parsing support for a function that returns a - struct definition. + struct definition.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621785">621785</a>: Doxygen could hang when using \copydoc in a function with - \param. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621805">621805</a>: Using //!< after a #define no longer worked. + \param.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621805">621805</a>: Using //!< after a #define no longer worked.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621854">621854</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622219">622219</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622593">622593</a>: html help compiler (and also the Qt - help compiler) was called before all dot images were generated. + help compiler) was called before all dot images were generated.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=621984">621984</a>: Using a auto-list in combination with \subpage cause the - items to be inlined. + items to be inlined.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622018">622018</a>: Fixed problem parsing a @param command where the - text part started with a formula. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622019">622019</a>: Added some instructions how to document Fortran code. + text part started with a formula.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622019">622019</a>: Added some instructions how to document Fortran code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622041">622041</a>: Using \var multiple times in a comment block did not - work properly. + work properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622413">622413</a>: Tooltips could get wrongly truncated when multi-byte - UTF-8 characters were used. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622471">622471</a>: Argument matching failed for typedef in another namespace. -<li> Fixed crash situation while handling commands inside a @ref section. + UTF-8 characters were used.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=622471">622471</a>: Argument matching failed for typedef in another namespace.</li> +<li> Fixed crash situation while handling commands inside a @ref section.</li> <li> Treeview icons were missing in the HTML output when setting - GENERATE_TREEVIEW to NO and USE_INLINE_TREES to YES. + GENERATE_TREEVIEW to NO and USE_INLINE_TREES to YES.</li> </ul> <a name="1.7.0"></a> @@ -2392,192 +2804,194 @@ make sure you add the following: <h2>(release date 15-06-2010)</h2> <h3>Changes</h3> <ul> -<li> Changed the look of the HTML output. +<li> Changed the look of the HTML output.</li> <li> Made several internal changes that should have a positive effect on the - overall performance. + overall performance.</li> </ul> <h3>New features</h3> <ul> <li> The color of the HTML output can now easily be adjusted using three new options: HTML_COLORSTYLE_HUE, HTML_COLORSTYLE_SAT, and HTML_COLORSTYLE_GAMMA, which control respectively the hue, - saturation, and gamma of all elements in the HTML output. + saturation, and gamma of all elements in the HTML output.</li> <li> Moved dot invocations to the end of a doxygen run. Doxygen will now run multiple instances of dot in parallel (for better CPU utilisation on multi-core systems). The new config option DOT_NUM_THREADS - determines the number of threads used (were 0 is auto-detect). + determines the number of threads used (were 0 is auto-detect).</li> <li> Added option EXT_LINKS_IN_WINDOW which controls whether or not - links to symbols imported via tag files will be opened in a new window. -<li> Included various language updates (thanks to Petr for coordinating). + links to symbols imported via tag files will be opened in a new window.</li> +<li> Included various language updates (thanks to Petr for coordinating).</li> <li> Included patch by Stefan Oberhumer that allows customizing the - way parameter lists are shown in the LaTeX output. + way parameter lists are shown in the LaTeX output.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306076">306076</a>: source browser could miss links for used namespaces. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=361476">361476</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=620924">620924</a>: \if and \endif did not work properly inside auto lists. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=306076">306076</a>: source browser could miss links for used namespaces.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=361476">361476</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=620924">620924</a>: \if and \endif did not work properly inside auto lists.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=557164">557164</a>: No warning for missing return type documentation even though - WARN_NO_PARAMDOC was set to YES. + WARN_NO_PARAMDOC was set to YES.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=577005">577005</a>: Handling of nesting \defgroup's was not always working - properly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=578739">578739</a>: ø was not translated correctly in the LaTeX output. + properly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=578739">578739</a>: ø was not translated correctly in the LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=583526">583526</a>: Use relative paths for mscgen diagrams to avoid errors in the - LaTeX output. + LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592991">592991</a>: The "Use current settings at startup" feature of Doxywizard - was broken. + was broken.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593679">593679</a>: Links in the search results were broken if they pointed to - symbols imported via tag files using an absolute path or URL. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593760">593760</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615682">615682</a>: Fixed man page output problem when using @par. + symbols imported via tag files using an absolute path or URL.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593760">593760</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615682">615682</a>: Fixed man page output problem when using @par.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594021">594021</a>: A C comment before a #endif caused the preprocessor - statement to be ignored. + statement to be ignored.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597013">597013</a>: When HIDE_SCOPE_NAMES was enabled also the scope for nested classes was stripped. Now only the namespace scope will be - stripped as before. + stripped as before.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600829">600829</a>: Autolinks to namespace members did not work if - an explicit # or :: was used. + an explicit # or :: was used.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=602732">602732</a>: Slashes inside strings in java annotations were not handled - properly. + properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606335">606335</a>: Fixed the "show html output" button in doxywizard - for Windows when IE was set as the default browser. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608292">608292</a>: Formatting was lost for section copied with \copydoc. + for Windows when IE was set as the default browser.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608292">608292</a>: Formatting was lost for section copied with \copydoc.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608359">608359</a>: Fixed C++ parse issue for "class : public base {} var;" - construct. + construct.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611056">611056</a>: Generated HTML footer file did not have UTF-8 encoding and - the relative path marker needed when using CREATE_SUBDIRS = YES. + the relative path marker needed when using CREATE_SUBDIRS = YES.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611193">611193</a>: Fixed parsing problem with try-functions having multiple - catch handlers. + catch handlers.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611642">611642</a>: Specialized private template member function appeared as - public. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611888">611888</a>: Include dependency graphs were sometimes wrong. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612170">612170</a>: Some lines in the generated Doxyfile where too long. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612275">612275</a>: Fixed auto-link problem for certain URLs. + public.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=611888">611888</a>: Include dependency graphs were sometimes wrong.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612170">612170</a>: Some lines in the generated Doxyfile where too long.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612275">612275</a>: Fixed auto-link problem for certain URLs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612292">612292</a>: Improved handling of ellipsis inside brief description when - JAVADOC_AUTOBRIEF is enabled. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612364">612364</a>: Accessibility of macros was not handled properly in all cases. + JAVADOC_AUTOBRIEF is enabled.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612364">612364</a>: Accessibility of macros was not handled properly in all cases.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612310">612310</a>: Enabling REFERENCED_BY_RELATION without SOURCE_BROWSER could - result in broken links. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612458">612458</a>: Fixed problem handling @copydoc for function operators. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612609">612609</a>: A raw C# string constant could end up in the next string. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612969">612969</a>: subpages were not part of the XML output. + result in broken links.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612458">612458</a>: Fixed problem handling @copydoc for function operators.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612609">612609</a>: A raw C# string constant could end up in the next string.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612969">612969</a>: subpages were not part of the XML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=613024">613024</a>: First list item in the paragraph after a @todo - item was not parsed properly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614204">614204</a>: Generated man page links were having a heading underscore. + item was not parsed properly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614204">614204</a>: Generated man page links were having a heading underscore.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614443">614443</a>: Made include guard detect a bit more strict to avoid false - positives. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614447">614447</a>: The labels of CVS tags were missing a colon. + positives.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614447">614447</a>: The labels of CVS tags were missing a colon.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614438">614438</a>: Fixed problem parsing Q_PROPERTY with template type and - spaces. + spaces.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615165">615165</a>: Made the date string in the HTML footer translatable, - along with some other sentences on the directory pages. + along with some other sentences on the directory pages.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612858">612858</a>: Inline attribute was shown also for non-inline template - members. + members.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615583">615583</a>: Fixed problem handling @copy for operators with - const qualifier. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615755">615755</a>: Fixed problem handling '"' inside comments. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615957">615957</a>: Made the LaTeX output a bit less spatious using \input. + const qualifier.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615755">615755</a>: Fixed problem handling '"' inside comments.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615957">615957</a>: Made the LaTeX output a bit less spacious using \input.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615695">615695</a>: Fixed preprocessor issue where a macro that was redefined - was not resolved. -<li> Fixed character encoding issue on the search results page. + was not resolved.</li> +<li> Fixed character encoding issue on the search results page.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=615670">615670</a>: C# namespaces are now extracted also without comment block - (the language spec does not allow XML documentation). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616209">616209</a>: included patch that fixes some typos in the code. + (the language spec does not allow XML documentation).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616209">616209</a>: included patch that fixes some typos in the code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616344">616344</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=610604">610604</a>: Pages with an underscore in the label generated a - file name containing two underscores. + file name containing two underscores.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616387">616387</a>: text of the form something.symbol got autolinked when - symbol had a global scope. + symbol had a global scope.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616761">616761</a>: Call graph could be wrong when local variable has the same - name as a global function. + name as a global function.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616947">616947</a>: Added documentation patch on how to create URL links with - custom text. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616988">616988</a>: Doxywizard now removes non-existant files from the - recent list and has an option to clear the list completely. + custom text.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=616988">616988</a>: Doxywizard now removes non-existent files from the + recent list and has an option to clear the list completely.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=617051">617051</a>: A macro defined via PREDEFINED did not always overrule a - macro definition in the code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=617278">617278</a>: Enabling call graphs produced invalid XHTML output. + macro definition in the code.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=617278">617278</a>: Enabling call graphs produced invalid XHTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=617871">617871</a>: Non ascii characters in file or directory names - caused problems on Windows. + caused problems on Windows.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=618079">618079</a>: An ALIAS with parameters spanning multiple lines - caused problems with /// style comments. + caused problems with /// style comments. </li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=618632">618632</a>: Included patch to prevent image overflowing the page in - the LaTeX output. + the LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619728">619728</a>: Fixed problem using EXTENSION_MAPPING for C# (thanks to - Vsevolod Kukol for the patch). + Vsevolod Kukol for the patch).</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=619978">619978</a>: Links to external files could be wrong when CREATE_SUBDIR - was enabled. + was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=620229">620229</a>: /* characters in a print broke parsing within an conditional - section. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=620926">620926</a>: \if and \endif did not work properly inside HTML tables. + section.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=620926">620926</a>: \if and \endif did not work properly inside HTML tables.</li> <li> Using @include in combination with LATEX_SOURCE_CODE caused wrong - output. + output.</li> <li> Included a patch by Guido Tack which adds two new options for docsets (DOCSET_PUBLISHER_ID and DOCSET_PUBLISHER_NAME) and - fixes an issue with linking to docset members. + fixes an issue with linking to docset members.</li> <li> Included patch by Stefan Oberhumer to support escaped {}'s in alias - definition and parameters. + definition and parameters.</li> </ul> +<p> \endhtmlonly \section log_1_6 1.6 Series \htmlonly <a name="1.6.3"></a> +</p> <h1>Doxygen Release 1.6.3</h1> <h2>(release date 21-02-2010)</h2> <h3>New features</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608480">608480</a>: Using \dir without argument will create directory documentation for the directory in which the \dir command - was found. + was found.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=590161">590161</a>: perlmod output was wrong when using paragraph commands. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600525">600525</a>: Included patch for VHDL. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=590161">590161</a>: perlmod output was wrong when using paragraph commands.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600525">600525</a>: Included patch for VHDL.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=605698">605698</a>: Replaced size attribute of hr tag by class attribute in the - HTML output. + HTML output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606030">606030</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606192">606192</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607563">607563</a>: Using \dot produced "Error opening map file" or - could even crash doxygen. + could even crash doxygen.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606084">606084</a>: Loading a new config file in doxywizard did not reset all - values of a previously loaded config file. + values of a previously loaded config file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606104">606104</a>: Grouped members with todo-like items were shown with - "GlobalScope" prefix. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606156">606156</a>: Fixed RTF rendering problem with group index. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606206">606206</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=610133">610133</a>: Added missing line break in LaTeX output. + "GlobalScope" prefix.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606156">606156</a>: Fixed RTF rendering problem with group index.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606206">606206</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=610133">610133</a>: Added missing line break in LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606330">606330</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608056">608056</a>: The title of pages whose label had an underscore - was not shown + was not shown</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606717">606717</a>: Include guard not starting with #ifndef SOME_GUARD_H were not - recognised as such. + recognised as such.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606718">606718</a>: Setting SEARCHENGINE to YES and GENERATE_HTML to NO caused - error that search results directory could not be created. + error that search results directory could not be created.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606772">606772</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608493">608493</a>: typedef'ed enums or struct with the same as the - typedef did no longer show up. + typedef did no longer show up.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607088">607088</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607946">607946</a>: Related pages (manual and automatic like the todo page) - caused broken links when SHORT_NAMES was enabled. + caused broken links when SHORT_NAMES was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607432">607432</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608002">608002</a>: Automatically generated related pages (like the - todo page) caused broken links when CREATE_SUBDIR was enabled. + todo page) caused broken links when CREATE_SUBDIR was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607736">607736</a>: comments after #if could cause next function call not to be - cross-referenced. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607743">607743</a>: \internal inside a conditional section caused warning. + cross-referenced.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=607743">607743</a>: \internal inside a conditional section caused warning.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608016">608016</a>: Using \internal inside a \section did not end at the - next \section as documented. + next \section as documented.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608018">608018</a>: \internal command produced message with .: in - the LaTeX output. + the LaTeX output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608072">608072</a>: HTML Tables with custom attributes were not rendered - properly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608227">608227</a>: Man pages with underscore got double underscore in the name. + properly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608227">608227</a>: Man pages with underscore got double underscore in the name.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608590">608590</a>: Buffer overflow when using non-ascii characters as class - name. + name.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=608921">608921</a>: Macro definition had effect even if the definition was not - actually included. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=609504">609504</a>: config.h and config.l where missing from the SVN repository. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=609624">609624</a>: Todo items were merged for overloaded functions. + actually included.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=609504">609504</a>: config.h and config.l where missing from the SVN repository.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=609624">609624</a>: Todo items were merged for overloaded functions.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=609709">609709</a>: C# enum values with @todo items were missing from the todo - list. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=610437">610437</a>: Removed bogus warning when using <br/> tag. + list.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=610437">610437</a>: Removed bogus warning when using <br/> tag.</li> <li> Fixed parsing problem for function pointer type starting with - "typedef enum". + "typedef enum".</li> <li> Preprocessor did not take EXCLUDE_PATTERNS into account, which - could cause parse issues when importing a .tlb file. + could cause parse issues when importing a .tlb file.</li> </ul> @@ -2587,104 +3001,104 @@ make sure you add the following: <h3>Changes</h3> <ul> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594787">594787</a>: Autolinking to all-lower case words has been disabled, - in accordance with the documentation. + in accordance with the documentation.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=604543">604543</a>: Doxygen now allows any extension supported by dot via the - DOT_IMAGE_FORMAT option. + DOT_IMAGE_FORMAT option.</li> <li> Switched back to using PNGs for built-in diagrams and formulas using - the Lode Vandevenne's PNG encoder. + the Lode Vandevenne's PNG encoder.</li> </ul> <h3>New features</h3> <ul> <li> Added new option SERVER_BASED_SEARCH to re-enable searching via a PHP enabled web browser instead of only using javascript locally. This method better scales to larger projects and allows full text - search. + search.</li> <li> Added new options GENERATE_ECLIPSEHELP and ECLIPSE_DOC_ID to generate an index file that can be used to embed doxygen's HTML output into Eclipse as a help plugin - (thanks to a patch by Ondrej Starek). + (thanks to a patch by Ondrej Starek).</li> <li> Wrote new <a href="http://www.doxygen.org/searching.html">documentation</a> - regarding the methods of searching in the HTML output. + regarding the methods of searching in the HTML output.</li> <li> Included patch by Ed Rosten to render formulas with - proper anti-aliasing on non-white backgrounds using transparency. + proper anti-aliasing on non-white backgrounds using transparency.</li> <li> Add new option FORCE_LOCAL_INCLUDES to make the default #include - appearance in class documentation with "" i.s.o sharp brackets. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=558457">558457</a>: Make \addindex put keywords into the .qhp file. + appearance in class documentation with "" i.s.o sharp brackets.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=558457">558457</a>: Make \addindex put keywords into the .qhp file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595214">595214</a>: #cmakedefine is now treated the same was as #define - (for users of the CMake build system). -<li> Added compilation support for OSX 10.6 (aka Snow Leopard) -<li> Included language update for Brazilian. + (for users of the CMake build system).</li> +<li> Added compilation support for OSX 10.6 (aka Snow Leopard)</li> +<li> Included language update for Brazilian.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> Doxywizard did not warn when it failed to save its config file. +<li> Doxywizard did not warn when it failed to save its config file.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=557035">557035</a>: Empty class definitions were not included in Tokens file - for docsets. + for docsets.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=563233">563233</a>: GENERATE_QHP details was considered even though it is - not defined. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567346">567346</a>: Comment parser could get stuck in certain cases. + not defined.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567346">567346</a>: Comment parser could get stuck in certain cases.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=570369">570369</a>: GENERATE_QHP should generate keywords for classes in - generated *.qhc. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=571964">571964</a>: Fixed two issues in the compound.xsd schema definition. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592991">592991</a>: Fixed wrong default destination directory. + generated *.qhc.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=571964">571964</a>: Fixed two issues in the compound.xsd schema definition.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592991">592991</a>: Fixed wrong default destination directory.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593040">593040</a>: Fixed problem with distributing member group documentation - for anonymous member groups. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593273">593273</a>: GENERATE_TODOLIST=NO and friends not longer worked. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593928">593928</a>: Added support for UCS-2 encoded input files. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594391">594391</a>: Fixed problem parsing fully-qualified java annotations. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594592">594592</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596815">596815</a>: Fixed problem handling quotes. + for anonymous member groups.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593273">593273</a>: GENERATE_TODOLIST=NO and friends not longer worked.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=593928">593928</a>: Added support for UCS-2 encoded input files.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594391">594391</a>: Fixed problem parsing fully-qualified java annotations.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=594592">594592</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596815">596815</a>: Fixed problem handling quotes.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595191">595191</a>: Not all configuration options appeared in the index of - the documentation and some were not sorted correctly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595253">595253</a>: formulas had the .png extension while they were gifs. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595833">595833</a>: Fixed recursive lockup while resolving template relations. + the documentation and some were not sorted correctly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595253">595253</a>: formulas had the .png extension while they were gifs.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595833">595833</a>: Fixed recursive lockup while resolving template relations.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595935">595935</a>: Doxygen's preprocessor got confused when /**/ appeared as - part of a macro definition. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596085">596085</a>: Removed obsolete option USE_WINDOWS_ENCODING from the docs. + part of a macro definition.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596085">596085</a>: Removed obsolete option USE_WINDOWS_ENCODING from the docs.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596233">596233</a>: RTF output was missing a new paragraph for brief - member descriptions. + member descriptions.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596807">596807</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596819">596819</a>: Code reformatting done for the LaTeX output could - break multibyte UTF-8 characters causing invalid output. + break multibyte UTF-8 characters causing invalid output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596809">596809</a>: Using multibyte characters in a page label caused invalid - output. + output.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596816">596816</a>: Documented the interaction between LATEX_CMD_NAME and - USE_PDFLATEX. + USE_PDFLATEX.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597015">597015</a>: Todo items for two inner classes with the same name where collapsed together in the todo list when HIDE_SCOPE_NAMES - was enabled. + was enabled.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597016">597016</a>: Scope was not hidden for members in the todo list even - though HIDE_SCOPE_NAMES was set to YES. + though HIDE_SCOPE_NAMES was set to YES.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=598497">598497</a>: Struct variable with explicit struct keyword got labelled - with [read] attribute. + with [read] attribute.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=596902">596902</a>: PHP was not parsed properly when it appeared in a - <script language="php"> section. + <script language="php"> section.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597415">597415</a>: Fixed problem matching base class member against the - member in the derived class. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597518">597518</a>: Makefile for Docsets now honors DESTDIR. + member in the derived class.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597518">597518</a>: Makefile for Docsets now honors DESTDIR.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=598298">598298</a>: Made browsing for HHC_LOCATION via the wizard - yield an absolute path. + yield an absolute path.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=599128">599128</a>: Changed default for CHM_INDEX_ENCODING to CP1250 to avoid - issues in a Solaris environment. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595931">595931</a>: Removed unnecessary paragraphs from HTML table cells. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597541">597541</a>: referring to page labels of the form a-1 did not work. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=599224">599224</a>: Code generators could produce extra </span> tags. + issues in a Solaris environment.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=595931">595931</a>: Removed unnecessary paragraphs from HTML table cells.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=597541">597541</a>: referring to page labels of the form a-1 did not work.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=599224">599224</a>: Code generators could produce extra </span> tags.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=599974">599974</a>: Included the PHP search engine again (with new config - option SERVER_BASED_SEARCH to enable it) -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600544">600544</a>: Doxygen produced invalid Latex output for RCS tags. + option SERVER_BASED_SEARCH to enable it)</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600544">600544</a>: Doxygen produced invalid Latex output for RCS tags.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600563">600563</a>: Fixed issue with include dependency tracking that could - cause macro expansion not to work properly. + cause macro expansion not to work properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=600940">600940</a>: Fixed issue with VHDL call graph (thank to Martin Kreis - for the fix). -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601138">601138</a>: Fixed problem parsing C++ function-try-blocks. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601222">601222</a>: #include inside a class could cause line numbers to be off. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601223">601223</a>: Fixed parsing problem skipping over /**/ comment. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601694">601694</a>: Fixed problem handling Javadoc style {@code ... } blocks. + for the fix).</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601138">601138</a>: Fixed problem parsing C++ function-try-blocks.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601222">601222</a>: #include inside a class could cause line numbers to be off.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601223">601223</a>: Fixed parsing problem skipping over /**/ comment.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601694">601694</a>: Fixed problem handling Javadoc style {@code ... } blocks.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=601771">601771</a>: Special commands did not work in the title of - the @mainpage. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=602818">602818</a>: Fixed problem parsing files that start with UTF-8 BOM. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=603001">603001</a>: Fixed problem parsing friend function with explicit scope. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=603238">603238</a>: Fixed perlmod generation issue. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=604948">604948</a>: Project number was not centered anymore in the HTML output. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=604503">604503</a>: Using %word in a page title incorrectly did show the %. + the @mainpage.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=602818">602818</a>: Fixed problem parsing files that start with UTF-8 BOM.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=603001">603001</a>: Fixed problem parsing friend function with explicit scope.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=603238">603238</a>: Fixed perlmod generation issue.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=604948">604948</a>: Project number was not centered anymore in the HTML output.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=604503">604503</a>: Using %word in a page title incorrectly did show the %.</li> </ul> <a name="1.6.1"></a> @@ -2694,16 +3108,16 @@ make sure you add the following: <ul> <li> Fixed file handle leak when parsing include files. Also fixed the logic that determines whether or not an include file need to be - parsed. -<li> Search result pages were not using UTF-8 character encoding. -<li> Search results pointing to external references were not linked correctly. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=133418">133418</a>: Multiline second argument of \ref caused unexpected " warning. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592454">592454</a>: Feeding invalid XML could crash doxygen's DBus XML parser. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592485">592485</a>: Include patch to fix problem with building rpms. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592511">592511</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592625">592625</a>: Doxywizard problem with GENERATE_TREEVIEW. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592650">592650</a>: SHOW_USED_FILES now works again. + parsed.</li> +<li> Search result pages were not using UTF-8 character encoding.</li> +<li> Search results pointing to external references were not linked correctly.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=133418">133418</a>: Multiline second argument of \ref caused unexpected " warning.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592454">592454</a>: Feeding invalid XML could crash doxygen's DBus XML parser.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592485">592485</a>: Include patch to fix problem with building rpms.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592511">592511</a>, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592625">592625</a>: Doxywizard problem with GENERATE_TREEVIEW.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592650">592650</a>: SHOW_USED_FILES now works again.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=592808">592808</a>: xrefitems (like @todo) did not appear in the list when - found in comments marked with @enum or @name. + found in comments marked with @enum or @name.</li> </ul> <h1>Doxygen Release 1.6.0</h1> <h2>(release date 20-08-2009)</h2> @@ -2713,83 +3127,81 @@ make sure you add the following: Javascript/DHTML based one. As a result the search feature no longer requires a HTTP server with PHP enabled to be usable. Searching is limited to symbols - though, but it is now possible to filter on symbol type. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=519886">519886</a>: Make the HTML output XHTML 1.0 compliant. + though, but it is now possible to filter on symbol type.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=519886">519886</a>: Make the HTML output XHTML 1.0 compliant.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=579950">579950</a>: Objective-C categories are now merged with their base - class, unless there is no base class. + class, unless there is no base class.</li> <li> Member groups with the same header within the same scope are now - merged. This also works for Objective-C categories. + merged. This also works for Objective-C categories.</li> <li> Changed the LaTeX style sheet such that more of the markup is - configurable. Please update your style sheet if you use a custom one. + configurable. Please update your style sheet if you use a custom one.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=584844">584844</a>: Treat \details inside a brief description as a new paragraph - command. + command.</li> <li> Split GENERATE_TREEVIEW into two separate options: - GENERATE_TREEVIEW and USE_INLINE_TREES. + GENERATE_TREEVIEW and USE_INLINE_TREES.</li> <li> Removed the dependencies on libpng and libz, doxygen now generates - gifs again for internal class diagrams (like it did 7 years ago ;-) + gifs again for internal class diagrams (like it did 7 years ago ;-)</li> </ul> <h3>New features</h3> <ul> <li> Added option SORT_MEMBERS_CTORS_1ST, which when enabled places the - constructors and destructors first in an otherwise sorted list. + constructors and destructors first in an otherwise sorted list.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=581518">581518</a>: Applied patch by Tobias Hunger that adds support for - documenting DBus XML interface descriptions. + documenting DBus XML interface descriptions. </li> <li> Included QtHelp patch by Karsten Heimrich which adds missing - reference and keyword for methods. -<li> Included updates for the Korean and Polish translation. + reference and keyword for methods.</li> +<li> Included updates for the Korean and Polish translation.</li> </ul> <h3>Bug fixes</h3> <ul> -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=131989">131989</a>: Fixed preprocessor handling for C# code. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=133418">133418</a>: -- was not rendered correctly for LaTeX output -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=157485">157485</a>: Missing link in todo page. +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=131989">131989</a>: Fixed preprocessor handling for C# code. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=133418">133418</a>: -- was not rendered correctly for LaTeX output</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=157485">157485</a>: Missing link in todo page.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=318061">318061</a>: Two template functions that only differed in the number - of template arguments were seen as the same function. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=443939">443939</a>: HIDE_UNDOC_CLASSES did not work properly. + of template arguments were seen as the same function.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=443939">443939</a>: HIDE_UNDOC_CLASSES did not work properly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=509348">509348</a>: Fixed problem with syncing the information of declaration and definition in the presence of an extra forward - declaration in the source code. + declaration in the source code.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=522193">522193</a>: For C# enum values were merged together if the same enum - name was used in different scopes. + name was used in different scopes.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=523167">523167</a>: Included patch to handle PROGRAM statement in Fortran as - subroutines/functions. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=554636">554636</a>: Remove spacing around brackets for Obj-C protocols. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=557026">557026</a>: Included patch for fixing wrongly labeled items in docsets. + subroutines/functions.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=554636">554636</a>: Remove spacing around brackets for Obj-C protocols.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=557026">557026</a>: Included patch for fixing wrongly labeled items in docsets.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=560512">560512</a>: Improved parser to better disambiguate - nested templates ending with >> from the bitshift right operator. + nested templates ending with >> from the bitshift right operator.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=570238">570238</a>: Fixed matching problem for method in nested class, where - the outer class is a template. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=581746">581746</a>: Segfault/realloc error when a very long path was used. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582469">582469</a>: documented #define with guard caused wrong documentation. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582276">582276</a>: Doxywizard could crash on exit in some cases. + the outer class is a template.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=581746">581746</a>: Segfault/realloc error when a very long path was used.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582469">582469</a>: documented #define with guard caused wrong documentation.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582276">582276</a>: Doxywizard could crash on exit in some cases.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=582676">582676</a>: Regression: a struct ivar in ObjC class screws up method - identification. + identification.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=583213">583213</a>: Included patch that avoids trailing spaces in the - generated Doxyfile template. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=584192">584192</a>: Included VHDL patch by Martin Klein + generated Doxyfile template.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=584192">584192</a>: Included VHDL patch by Martin Klein</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=585543">585543</a>: Fixed case where matching declaration and definition did - not work correctly. + not work correctly.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=585260">585260</a>: The "more..." link for files was broken, since the anchor - was not generated. + was not generated.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=586925">586925</a>: Fixed parsing problem when an unpaired apostrophe - appeared in a Python comment. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588291">588291</a>: Included fix for doxywizard makefile. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588587">588587</a>: Added missing virtual destructor to CompAccept base class. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588968">588968</a>: Fixed segmentation fault for specific case in PHP code. -<li> Fixed some issues building for Windows. -<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=589514">589514</a>: Fixed problem handling strings like a"\b" within a comment. + appeared in a Python comment.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588291">588291</a>: Included fix for doxywizard makefile. </li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588587">588587</a>: Added missing virtual destructor to CompAccept base class.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=588968">588968</a>: Fixed segmentation fault for specific case in PHP code.</li> +<li> Fixed some issues building for Windows.</li> +<li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=589514">589514</a>: Fixed problem handling strings like a"\b" within a comment.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=589616">589616</a>: Fixed problem matching explicitly scoped parameter in a - template class. + template class.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=590712">590712</a>: A namespaced with name "internal" (C++/CLI keyword) - could confuse doxygen's C++ parser. + could confuse doxygen's C++ parser.</li> <li> id <a href="https://bugzilla.gnome.org/show_bug.cgi?id=591749">591749</a>: @optional/@required attributes for Objective-C were missing - from the XML output. + from the XML output.</li> </ul> <h1><a href="http://www.doxygen.org/changelog_1.5.html">Doxygen Release 1.5 and earlier</a></h1> -<p> -<hr> -<p> +<hr/> Go <a href="index.html">back</a> to the main page. - +<p> \endhtmlonly */ diff --git a/doc/commands.doc b/doc/commands.doc index df120a2..6cb7a4d 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -115,6 +115,7 @@ documentation: \refitem cmdimage \\image \refitem cmdimplements \\implements \refitem cmdinclude \\include +\refitem cmdincludedoc \\includedoc \refitem cmdincludelineno \\includelineno \refitem cmdingroup \\ingroup \refitem cmdinternal \\internal @@ -177,6 +178,8 @@ documentation: \refitem cmdskip \\skip \refitem cmdskipline \\skipline \refitem cmdsnippet \\snippet +\refitem cmdsnippetdoc \\snippetdoc +\refitem cmdsnippetlineno \\snippetlineno \refitem cmdstartuml \\startuml \refitem cmdstruct \\struct \refitem cmdsubpage \\subpage @@ -221,13 +224,13 @@ The following subsections provide a list of all commands that are recognized by doxygen. Unrecognized commands are treated as normal text. -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Structural indicators \htmlonly --- \endhtmlonly </h2> -\htmlonly </center> \endhtmlonly +\htmlonly</p></center><p>\endhtmlonly \section cmdaddtogroup \\addtogroup <name> [(title)] \addindex \\addtogroup @@ -368,7 +371,7 @@ Structural indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmddef \\def <name> \addindex \\def @@ -386,8 +389,7 @@ Structural indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly - -<hr> +</p><hr> \section cmddefgroup \\defgroup <name> (group title) \addindex \\defgroup @@ -439,7 +441,7 @@ Structural indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmdexample \\example <file-name> \addindex \\example @@ -476,7 +478,7 @@ Structural indicators \sa section \ref cmdinclude "\\include". -<hr> +</p><hr> \section cmdendinternal \\endinternal \addindex \\endinternal @@ -498,6 +500,7 @@ Structural indicators \htmlonly Click <a href="examples/manual/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. + </p> \endhtmlonly \latexonly See \hyperlink{extends_example}{Extends example} @@ -535,7 +538,7 @@ Structural indicators \note In the above example \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" has been set to \c YES in the configuration file. -<hr> +</p><hr> \section cmdfn \\fn (function declaration) \addindex \\fn @@ -573,7 +576,7 @@ Structural indicators \sa sections \ref cmdvar "\\var", \ref cmdproperty "\\property", and \ref cmdtypedef "\\typedef". -<hr> +</p><hr> \section cmdheaderfile \\headerfile <header-file> [<header-name>] \addindex \\headerfile @@ -649,6 +652,7 @@ Structural indicators \htmlonly Click <a href="examples/manual/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. + </p> \endhtmlonly \latexonly See \hyperlink{extends_example}{Implements example} @@ -759,7 +763,7 @@ Structural indicators \ref cmdpublic "\\public", \ref cmdprotected "\\protected" and \ref cmdprivate "\\private". -<hr> +</p><hr> \section cmdname \\name [(header)] \addindex \\name @@ -827,7 +831,7 @@ Structural indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmdpackage \\package <name> \addindex \\package @@ -868,14 +872,14 @@ Structural indicators \ref cmdsubsection "\\subsection", and section \ref cmdref "\\ref". -<hr> +</p><hr> \section cmdprivate \\private \addindex \\private Indicates that the member documented by the comment block is private, i.e., should only be accessed by other members in the same class. - Note that Doxygen automatically detects the protection level of members + Note that doxygen automatically detects the protection level of members in object-oriented languages. This command is intended for use only when the language does not support the concept of protection level natively (e.g. C, PHP 4). @@ -918,7 +922,7 @@ Structural indicators i.e., should only be accessed by other members in the same or derived classes. - Note that Doxygen automatically detects the protection level of members + Note that doxygen automatically detects the protection level of members in object-oriented languages. This command is intended for use only when the language does not support the concept of protection level natively (e.g. C, PHP 4). @@ -959,7 +963,7 @@ Structural indicators Indicates that the member documented by the comment block is public, i.e., can be accessed by any other class or function. - Note that Doxygen automatically detects the protection level of members + Note that doxygen automatically detects the protection level of members in object-oriented languages. This command is intended for use only when the language does not support the concept of protection level natively (e.g. C, PHP 4). @@ -1015,7 +1019,7 @@ Structural indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmdrelated \\related <name> \addindex \\related @@ -1126,13 +1130,13 @@ Structural indicators <hr> -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Section indicators \htmlonly --- \endhtmlonly </h2> -\htmlonly </center>\endhtmlonly +\htmlonly</p></center><p>\endhtmlonly <hr> \section cmdattention \\attention { attention text } @@ -1170,7 +1174,7 @@ Section indicators for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmdauthors \\authors { list of authors } \addindex \\authors @@ -1517,7 +1521,7 @@ ALIASES = "english=\if english" \ for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly -<hr> +</p><hr> \section cmdparam \\param [(dir)] <parameter-name> { parameter description } \addindex \\param @@ -1859,13 +1863,13 @@ void setPosition(double x,double y,double z,double t) <hr> -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Commands to create links \htmlonly --- \endhtmlonly </h2> -\htmlonly </center>\endhtmlonly +\htmlonly</p></center><p>\endhtmlonly <hr> \section cmdaddindex \\addindex (text) @@ -2084,13 +2088,13 @@ Make sure you have first read \ref intro "the introduction". <hr> -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Commands for displaying examples \htmlonly --- \endhtmlonly </h2> -\htmlonly </center>\endhtmlonly +\htmlonly</p></center><p>\endhtmlonly <hr> \section cmddontinclude \\dontinclude <file-name> @@ -2135,7 +2139,7 @@ Commands for displaying examples \ref cmdskipline "\\skipline", \ref cmduntil "\\until", and \ref cmdinclude "\\include". -<hr> +</p><hr> \section cmdinclude \\include <file-name> \addindex \\include @@ -2170,8 +2174,8 @@ Commands for displaying examples \note Doxygen's special commands do not work inside blocks of code. It is allowed to nest C-style comments inside a code block though. - \sa sections \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude", and - \ref cmdverbatim "\\verbatim". + \sa sections \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude", + \ref cmdverbatim "\\verbatim" and \ref cmdincludedoc "\\includedoc". <hr> \section cmdincludelineno \\includelineno <file-name> @@ -2180,6 +2184,22 @@ Commands for displaying examples This command works the same way as \ref cmdinclude "\\include", but will add line numbers to the included file. + \sa sections \ref cmdinclude "\\include" and \ref cmdsnippetlineno "\\snippetlineno". + +<hr> +\section cmdincludedoc \\includedoc <file-name> + + \addindex \\includedoc + This command works the same way as \ref cmdinclude "\\include", but it will include + the content of the file as if it were at the place where this command is called. + The result is that the content is parsed by doxygen and placed in the documentation. + + \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with + this command due to the moment of parsing. + + \note The included documentation should not have comment signs in it as the will appear + in the documentation as well. + \sa section \ref cmdinclude "\\include". <hr> @@ -2284,6 +2304,32 @@ Commands for displaying examples see section \ref cmddontinclude "\\dontinclude" for an alternative way to include fragments of a source file that does not require markers. + \sa section \ref cmdsnippetdoc "\\snippetdoc" and \ref cmdsnippetlineno "\\snippetlineno". +<hr> +\section cmdsnippetlineno \\snippetlineno <file-name> ( block_id ) + + \addindex \\snippetlineno + This command works the same way as \ref cmdsnippet "\\snippet", but will add line + numbers to the included snippet. + + \sa sections \ref cmdsnippet "\\snippet" and \ref cmdincludelineno "\\includelineno". + +<hr> +\section cmdsnippetdoc \\snippetdoc <file-name> ( block_id ) + + \addindex \\snippetdoc + This command works the same way as \ref cmdsnippet "\\snippet", but it will include + the content of the file between the `block-id`s as if it were at the place where this command is called. + The result is that the content is parsed by doxygen and placed in the documentation. + + \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with + this command due to the moment of parsing. + + \note The included documentation should not have comment signs in it as the will appear + in the documentation as well. + + \sa section \ref cmdsnippet "\\snippet" and \ref cmdincludedoc "\\includedoc". + <hr> \section cmduntil \\until ( pattern ) @@ -2339,13 +2385,13 @@ Commands for displaying examples <hr> -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Commands for visual enhancements \htmlonly --- \endhtmlonly </h2> -\htmlonly </center>\endhtmlonly +\htmlonly</p></center><p>\endhtmlonly \section cmda \\a <word> @@ -3176,7 +3222,7 @@ class Receiver \c \\verbatim command or the parser will get confused! \sa sections \ref cmdcode "\\code", - \ref cmdendverbatim "\\endverbatim", and + \ref cmdendverbatim "\\endverbatim" and \ref cmdverbinclude "\\verbinclude". <hr> @@ -3318,16 +3364,16 @@ class Receiver \addindex \\\--- This command writes three dashes (\---) to the output. This allows - writing three consecutuve dashes to the output instead of one m-dash character (---). + writing three consecutive dashes to the output instead of one m-dash character (---). <hr> -\htmlonly <center> \endhtmlonly +\htmlonly</p><center><p>\endhtmlonly <h2> \htmlonly --- \endhtmlonly Commands included for Qt compatibility \htmlonly --- \endhtmlonly </h2> -\htmlonly </center>\endhtmlonly +\htmlonly</p></center><p>\endhtmlonly The following commands are supported to remain compatible to the Qt class browser generator. Do \e not use these commands in your own documentation. @@ -3346,8 +3392,10 @@ browser generator. Do \e not use these commands in your own documentation. \htmlonly +</p> Go to the <a href="htmlcmds.html">next</a> section or return to the <a href="index.html">index</a>. +<p> \endhtmlonly */ diff --git a/doc/diagrams.doc b/doc/diagrams.doc index 2660b8e..49be5d6 100644 --- a/doc/diagrams.doc +++ b/doc/diagrams.doc @@ -138,6 +138,7 @@ that doxygen can generate: \include diagrams_e.h \htmlonly +</p> Click <a href="examples/diagrams/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen<br/> (<code>EXTRACT_ALL</code> = <code>YES</code> is used here). @@ -151,7 +152,7 @@ for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen. \endlatexonly \htmlonly -<br><br> +<br/><br/> Go to the <a href="preprocessing.html">next</a> section or return to the <a href="index.html">index</a>. \endhtmlonly diff --git a/doc/docblocks.doc b/doc/docblocks.doc index 7f91db5..f0499c6 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -259,6 +259,7 @@ located in front of the block instead of after the block. Here is an example of the use of these comment blocks: \include afterdoc.h \htmlonly + </p> Click <a href="examples/afterdoc/html/class_test.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -279,6 +280,7 @@ Here is an example of the use of these comment blocks: Here is an example of a documented piece of C++ code using the Qt style: \include qtstyle.cpp \htmlonly + </p> Click <a href="examples/qtstyle/html/class_test.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -313,6 +315,7 @@ Here is the same piece of code as shown above, this time documented using the JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES: \include jdstyle.cpp \htmlonly + </p> Click <a href="examples/jdstyle/html/class_test.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -393,6 +396,7 @@ Here is an example of a C header named \c structcmd.h that is documented using structural commands: \include structcmd.h \htmlonly + </p> Click <a href="examples/structcmd/html/structcmd_8h.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -425,7 +429,7 @@ using structural commands: \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 +that \ref cfg_file_patterns "FILE_PATTERNS" includes the `.sh` extension and the the script can be found in the path set via \ref cfg_example_path "EXAMPLE_PATH". \subsection pythonblocks Comment blocks in Python @@ -437,6 +441,7 @@ and assume they have to be represented in a preformatted way. \include docstring.py \htmlonly + </p> Click <a href="examples/docstring/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -457,6 +462,7 @@ Here is the same example again but now using doxygen style comments: \include pyexample.py \htmlonly + </p> Click <a href="examples/pyexample/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -486,6 +492,7 @@ Here is an example VHDL file with doxygen comments: \include mux.vhdl \htmlonly + </p> Click <a href="examples/mux/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly @@ -599,6 +606,7 @@ Following is an example using doxygen style comments: \include tclexample.tcl \htmlonly + </p> Click <a href="examples/tclexample/html/index.html">here</a> for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css index 3286004..51cc8b0 100644 --- a/doc/doxygen_manual.css +++ b/doc/doxygen_manual.css @@ -1,42 +1,48 @@ -/* The standard CSS for doxygen */ +/* The standard CSS for doxygen 1.8.12 */ body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 13px; - line-height: 1.3; + font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ -h1 { +h1.groupheader { font-size: 150%; } .title { + font: 400 14px/28px Roboto,sans-serif; font-size: 150%; font-weight: bold; margin: 10px 2px; } -h2 { - font-size: 120%; +h2.groupheader { + border-bottom: 1px solid #A9A9A9; + color: #585858; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; } -h3 { +h3.groupheader { font-size: 100%; } h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; + text-shadow: 0 0 15px cyan; } dt { @@ -50,10 +56,14 @@ div.multicol { -webkit-column-count: 3; } -p.startli, p.startdd, p.starttd { +p.startli, p.startdd { margin-top: 2px; } +p.starttd { + margin-top: 0px; +} + p.endli { margin-bottom: 0px; } @@ -100,13 +110,13 @@ div.navtab { /* @group Link Styling */ a { - color: #646494; + color: #646464; font-weight: normal; text-decoration: none; } .contents a:visited { - color: #7474A4; + color: #747474; } a:hover { @@ -135,11 +145,11 @@ a.el { a.elRef { } -a.code, a.code:visited { +a.code, a.code:visited, a.line, a.line:visited { color: #4665A2; } -a.codeRef, a.codeRef:visited { +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } @@ -163,44 +173,75 @@ pre.fragment { } div.fragment { - padding: 4px; - margin: 4px; - background-color: #FCFCFC; - border: 1px solid #D5D5D5; + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FCFCFC; + border: 1px solid #D5D5D5; } div.line { - font-family: monospace, fixed; + font-family: monospace, fixed; font-size: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; } +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; white-space: pre; } span.lineno a { - background-color: #D8D8D8; + background-color: #D8D8D8; } span.lineno a:hover { - background-color: #C8C8C8; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } -div.ah { +div.ah, span.ah { background-color: black; font-weight: bold; color: #ffffff; @@ -215,7 +256,16 @@ div.ah { -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; } div.groupHeader { @@ -230,18 +280,18 @@ div.groupText { } body { - background-color: #CCCCCC; - color: black; + background-color: #CCCCCC; + color: black; margin: 0; } div.contents { - margin-bottom: 10px; - padding: 12px; - margin-left: auto; - margin-right: auto; - width: 800px; - background-color: white; + margin-bottom: 10px; + padding: 12px; + margin-left: auto; + margin-right: auto; + width: 800px; + background-color: white; -moz-border-radius-bottomleft: 8px; -moz-border-radius-bottomright: 8px; /* firefox specific markup */ @@ -297,8 +347,6 @@ div.center img { address.footer { text-align: right; padding-right: 12px; - background-color: #8080A0; - color: white; } img.footer { @@ -402,7 +450,7 @@ hr { } hr.footer { - display: none; + height: 1px; } /* @group Member Descriptions */ @@ -412,6 +460,24 @@ table.memberdecls { padding: 0px; } +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { @@ -426,8 +492,11 @@ table.memberdecls { color: #555; } -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #D5D5D5; +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; } .memItemLeft, .memTemplItemLeft { @@ -441,6 +510,7 @@ table.memberdecls { .memTemplParams { color: #747474; white-space: nowrap; + font-size: 80%; } /* @end */ @@ -478,6 +548,8 @@ table.memberdecls { -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; } .memitem.glow { @@ -485,11 +557,14 @@ table.memberdecls { } .memname { - white-space: nowrap; font-weight: bold; margin-left: 6px; } +.memname td { + vertical-align: bottom; +} + .memproto, dl.reflist dt { border-top: 1px solid #C0C0C0; border-left: 1px solid #C0C0C0; @@ -498,21 +573,21 @@ table.memberdecls { color: #3D3D3D; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #EAEAEA; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 8px; - -moz-border-radius-topleft: 8px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 8px; - -webkit-border-top-left-radius: 8px; - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #EAEAEA; + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; } @@ -520,23 +595,24 @@ table.memberdecls { border-bottom: 1px solid #C0C0C0; border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0; - padding: 2px 5px; + padding: 6px 10px 2px 10px; background-color: #FCFCFC; border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; /* opera specific markup */ - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F9F9F9 95%, #F2F2F2); /* webkit specific markup */ - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F9F9F9), to(#F2F2F2)); } dl.reflist dt { @@ -563,9 +639,13 @@ dl.reflist dd { .paramname em { font-style: normal; } +.paramname code { + line-height: 14px; +} .params, .retval, .exception, .tparams { - border-spacing: 6px 2px; + margin-left: 0px; + padding-left: 0px; } .params .paramname, .retval .paramname { @@ -583,105 +663,191 @@ dl.reflist dd { vertical-align: top; } +table.mlabels { + border-spacing: 0px; +} - - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0px; +td.mlabels-left { + width: 100%; + padding: 0px; } -/* these are for tree view when used as main index */ +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} -.directory { - font-size: 9pt; - font-weight: bold; - margin: 5px; +span.mlabels { + margin-left: 8px; } -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; +span.mlabel { + background-color: #9A9A9A; + border-top:1px solid #848484; + border-left:1px solid #848484; + border-right:1px solid #D5D5D5; + border-bottom:1px solid #D5D5D5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; } -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ -.directory > h3 { - margin-top: 0; -} +/* @end */ -.directory p { - margin: 0px; - white-space: nowrap; -} +/* these are for tree view inside a (index) page */ -.directory div { - display: none; - margin: 0px; +div.directory { + margin: 10px 0px; + border-top: 1px solid #B8B8B8; + border-bottom: 1px solid #B8B8B8; + width: 100%; } -.directory img { - vertical-align: -30%; +.directory table { + border-collapse:collapse; } -/* these are for tree view when not used as main index */ +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} -.directory-alt { - font-size: 100%; - font-weight: bold; +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; } -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; +.directory td.entry a { + outline:none; } -.directory-alt > h3 { - margin-top: 0; +.directory td.entry a img { + border: none; } -.directory-alt p { - margin: 0px; - white-space: nowrap; +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); } -.directory-alt div { - display: none; - margin: 0px; +.directory tr.even { + padding-left: 6px; + background-color: #F9F9F9; } -.directory-alt img { +.directory img { vertical-align: -30%; } +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #646464; +} + +.arrow { + color: #B8B8B8; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #9A9A9A; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + /* @end */ div.dynheader { margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } address { @@ -689,6 +855,10 @@ address { color: #464646; } +table.doxtable caption { + caption-side: top; +} + table.doxtable { border-collapse:collapse; margin-top: 4px; @@ -706,11 +876,10 @@ table.doxtable th { font-size: 110%; padding-bottom: 4px; padding-top: 5px; - text-align:left; } table.fieldtable { - width: 100%; + /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #C0C0C0; border-spacing: 0px; @@ -733,9 +902,21 @@ table.fieldtable { vertical-align: top; } +.fieldtable td.fieldname { + padding-top: 3px; +} + .fieldtable td.fielddoc { border-bottom: 1px solid #C0C0C0; - width: 100%; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; } .fieldtable tr:last-child td { @@ -776,6 +957,7 @@ table.fieldtable { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; + background-position: 0 -5px; height:30px; line-height:30px; color:#ABABAB; @@ -803,6 +985,10 @@ table.fieldtable { display:block; text-decoration: none; outline: none; + color: #434343; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; } .navpath li.navelem a:hover @@ -838,11 +1024,21 @@ div.summary a white-space: nowrap; } +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + div.ingroups { - margin-left: 5px; font-size: 8pt; - padding-left: 5px; width: 50%; text-align: left; } @@ -857,21 +1053,23 @@ div.header background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #FAFAFA; + margin: 0px; border-bottom: 1px solid #D5D5D5; - margin-left: auto; - margin-right: auto; - width: 800px; - padding-left: 12px; - padding-right: 12px; + margin-left: auto; + margin-right: auto; + width: 800px; + padding-left: 12px; + padding-right: 12px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 5px; /* webkit specific markup */ -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.15); + } div.headertitle { - padding: 5px 5px 5px 0px; + padding: 5px 5px 5px 10px; } dl @@ -879,9 +1077,11 @@ dl padding: 0 0 0 10px; } +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ dl.section { - padding: 0 0 0 6px; + margin-left: 0px; + padding-left: 0px; } dl.note @@ -941,9 +1141,10 @@ dl.bug } dl.section dd { - margin-bottom: 1em; + margin-bottom: 6px; } + #projectlogo { text-align: center; @@ -956,6 +1157,11 @@ dl.section dd { border: 0px none; } +#projectalign +{ + vertical-align: middle; +} + #projectname { font: 300% Tahoma, Arial,sans-serif; @@ -984,7 +1190,7 @@ dl.section dd { width: 100%; border-bottom: 1px solid #848484; visibility: hidden; - height: 0px; + height: 0px; } .image @@ -1002,6 +1208,11 @@ dl.section dd { text-align: center; } +.diagraph +{ + text-align: center; +} + .caption { font-weight: bold; @@ -1031,12 +1242,12 @@ dl.citelist dd { div.toc { padding: 14px 25px; - background-color: #F6F6F6; - border: 1px solid #DDDDDD; + background-color: #F7F7F7; + border: 1px solid #E3E3E3; border-radius: 7px 7px 7px 7px; float: right; height: auto; - margin: 0 20px 10px 10px; + margin: 0 8px 10px 10px; width: 200px; } @@ -1050,8 +1261,8 @@ div.toc li { div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #747474; border-bottom: 0 none; - color: #606060; margin: 0; } @@ -1059,7 +1270,7 @@ div.toc ul { list-style: none outside none; border: medium none; padding: 0px; -} +} div.toc li.level1 { margin-left: 0px; @@ -1077,6 +1288,202 @@ div.toc li.level4 { margin-left: 45px; } +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + @media print { #top { display: none; } @@ -1094,15 +1501,85 @@ div.toc li.level4 { overflow:inherit; display:inline; } - pre.fragment - { - overflow: visible; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - } } + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: ##47; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index 9f96adf..3e4cd49 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -74,6 +74,7 @@ \hbadness=750 \tolerance=750 \begin{document} +\pagenumbering{alph} \begin{titlepage} \includegraphics[width=\textwidth]{doxygen_logo} \begin{center} @@ -82,8 +83,8 @@ Written by Dimitri van Heesch\\[2ex] \copyright 1997-\thisyear \end{center} \end{titlepage} -\pagenumbering{Roman} \clearemptydoublepage +\pagenumbering{Roman} \tableofcontents \clearemptydoublepage \pagenumbering{arabic} diff --git a/doc/extsearch.doc b/doc/extsearch.doc index 6429766..cead851 100644 --- a/doc/extsearch.doc +++ b/doc/extsearch.doc @@ -116,7 +116,7 @@ You should now get the following message: Test successful. -Now you should be enable to search for words and symbols from the HTML output. +Now you should be able to search for words and symbols from the HTML output. \subsection extsearch_multi Multi project index diff --git a/doc/faq.doc b/doc/faq.doc index bd327a1..5af3db8 100644 --- a/doc/faq.doc +++ b/doc/faq.doc @@ -97,12 +97,12 @@ with a \ref cmdcond "\\cond" command at the start and one comment block with a \ref cmdendcond "\\endcond" command at the end of the piece of code that should be ignored. This should be within the same file of course. -But you can also use Doxygen's preprocessor for this: +But you can also use doxygen's preprocessor for this: If you put \verbatim #ifndef DOXYGEN_SHOULD_SKIP_THIS - /* code that must be skipped by Doxygen */ + /* code that must be skipped by doxygen */ #endif /* DOXYGEN_SHOULD_SKIP_THIS */ \endverbatim @@ -110,7 +110,7 @@ around the blocks that should be hidden and put: \verbatim PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS \endverbatim -in the config file then all blocks should be skipped by Doxygen as long +in the config file then all blocks should be skipped by doxygen as long as \ref cfg_enable_preprocessing "ENABLE_PREPROCESSING" is set to `YES`. \section faq_code_inc How can I change what is after the <code>\#include</code> in the class documentation? @@ -247,7 +247,7 @@ option \ref cfg_builtin_stl_support "BUILTIN_STL_SUPPORT" is turned on. \section faq_search I have problems getting the search engine to work with PHP5 and/or windows -Please read <a href="searchengine.html">this</a> for hints on where to look. +Please read <a href="http://www.doxygen.org/searchengine.html">this</a> for hints on where to look. \section faq_cmdline Can I configure doxygen from the command line? diff --git a/doc/features.doc b/doc/features.doc index dd75a9d..f6aa7c1 100644 --- a/doc/features.doc +++ b/doc/features.doc @@ -107,7 +107,7 @@ one that is generated by Qt Software. Doxygen understands the C++ extensions used by Qt such as signals and slots and many of the markup commands used in the Qt sources. Doxygen can also automatically generate links to existing documentation -that was generated with Doxygen or with Qt's non-public class browser +that was generated with doxygen or with Qt's non-public class browser generator. For a Qt based project this means that whenever you refer to members or classes belonging to the Qt toolkit, a link will be generated to the Qt documentation. This is done independent of where this documentation diff --git a/doc/grouping.doc b/doc/grouping.doc index 4357d27..bbb577c 100644 --- a/doc/grouping.doc +++ b/doc/grouping.doc @@ -128,7 +128,7 @@ This is the \ref group_label "link" to this group. The priorities of grouping definitions are (from highest to lowest): \ref cmdingroup "\\ingroup", \ref cmddefgroup "\\defgroup", \ref cmdaddtogroup "\\addtogroup", \ref cmdweakgroup "\\weakgroup". -The last command is exactly like \ref cmdaddtogroup "\\addtogroup" +The \ref cmdweakgroup "\\weakgroup" command is exactly like \ref cmdaddtogroup "\\addtogroup" with a lower priority. It was added to allow "lazy" grouping definitions: you can use commands with a higher priority in your .h files to define the hierarchy and \ref cmdweakgroup "\\weakgroup" @@ -138,8 +138,9 @@ in .c files without having to duplicate the hierarchy exactly. \include group.cpp \htmlonly +</p> Click <a href="examples/group/html/modules.html">here</a> -for the corresponding HTML documentation that is generated by Doxygen. +for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly \latexonly See \hyperlink{modules_example}{Modules example} @@ -195,8 +196,9 @@ documentation of the class. \include memgrp.cpp \htmlonly +</p> Click <a href="examples/memgrp/html/class_test.html">here</a> -for the corresponding HTML documentation that is generated by Doxygen. +for the corresponding HTML documentation that is generated by doxygen. \endhtmlonly \latexonly See \hyperlink{memgrp_example}{Member Groups example} @@ -224,8 +226,10 @@ two groups GA and GB, where GB is part of GA, page A is put in group GA, and page B is put in group GB. \htmlonly +</p> Go to the <a href="formulas.html">next</a> section or return to the <a href="index.html">index</a>. +<p> \endhtmlonly */ diff --git a/doc/index.doc b/doc/index.doc index 8b0d403..c8950c4 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -118,7 +118,7 @@ The third part provides information for developers: \addindex license \addindex GPL -Copyright © 1997-2015 by +Copyright © 1997-2016 by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p> Permission to use, copy, modify, and distribute this software and its diff --git a/doc/install.doc b/doc/install.doc index 295154f..fd4f28d 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -78,6 +78,7 @@ Compilation is now done by performing the following steps: cd doxygen-$VERSION mkdir build + cd build <li>Run cmake with the makefile generator @@ -89,11 +90,11 @@ Compilation is now done by performing the following steps: If you have Qt-4.3 or higher installed and want to build the GUI front-end, you should enable it as follows: - cmake -Dbuild_wizard=YES + cmake -Dbuild_wizard=YES .. For an overview of other configuration options use - cmake -L + cmake -L .. <li>Compile the program by running make: @@ -105,7 +106,7 @@ Compilation is now done by performing the following steps: <li>Optional: Generate the user manual. - cmake -Dbuild_doc=YES + cmake -Dbuild_doc=YES .. make docs To let doxygen generate the HTML and PDF documentation. @@ -182,7 +183,7 @@ cd into the \c doxygen-x.y.z directory, create and cd to a build directory \verbatim mkdir build cd build -cmake -G "Visual Studio 12 2013" +cmake -G "Visual Studio 12 2013" .. \endverbatim Note that compiling Doxywizard currently requires Qt version 4 diff --git a/doc/maintainers.txt b/doc/maintainers.txt index 2c11a17..3fa4fff 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -5,8 +5,8 @@ % The following one or more lines contain information about % the maintainer(s) for the language (one line, one maintainer) % in the form: <readable name><colon><e-mail> -% If the readable name name starts with '--' it will be displayed in HTML -% output as a highlighted text notice related to the langluage (usually +% If the readable name starts with '--' it will be displayed in HTML +% output as a highlighted text notice related to the language (usually % '-- searching for the maintainer --'). % If the <e-mail> is prefixed [some_text] it is not displayed in the table % of maintainers in the Doxygen documentation, nor it is used when building diff --git a/doc/manual.sty b/doc/manual.sty index 80fbda6..643bd40 100644 --- a/doc/manual.sty +++ b/doc/manual.sty @@ -31,3 +31,10 @@ \fancyfoot[CO]{\fancyplain{}{}} \fancyfoot[RO]{\fancyplain{}{}} +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + diff --git a/doc/markdown.doc b/doc/markdown.doc index cec2191..300d7fc 100644 --- a/doc/markdown.doc +++ b/doc/markdown.doc @@ -337,6 +337,40 @@ which will look as follows: | 10 | 10 | 10 | | 1000 | 1000 | 1000 | +Additionally, column and row spans are supported. Using a caret ("^") +in a cell indicates that the cell above should span rows. Sequences +of carets may be used for any number of row spans. For example: + + | Right | Center | Left | + | ----: | :----: | :---- | + | 10 | 10 | 10 | + | ^ | 1000 | 1000 | + +which will look as follows: + +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| ^ | 1000 | 1000 | + +Column spans are supported by means of directly adjacent vertical bars +("|"). Each additional vertical bar indicates an additional column to +be spanned. To put it another way, a single vertical bar indicates a +single column span, two vertical bars indicates a 2 columns span, and +so on. For example: + + | Right | Center | Left | + | ----: | :----: | :---- | + | 10 | 10 | 10 | + | 1000 ||| + +which will look as follows: + +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| 1000 ||| + For more complex tables in doxygen please have a look at: \ref tables \subsection md_fenced Fenced Code Blocks @@ -511,7 +545,7 @@ is noticeable: code In this case Markdown will put the word code in a code block, -whereas Doxygen will treat it as normal text, since although the absolute +whereas doxygen will treat it as normal text, since although the absolute indentation is 4, the indentation with respect to the previous paragraph is only 1. diff --git a/doc/perlmod.doc b/doc/perlmod.doc index 8616dc6..3d2e2c2 100644 --- a/doc/perlmod.doc +++ b/doc/perlmod.doc @@ -2,19 +2,19 @@ \addindex perlmod -<p>Since version 1.2.18, Doxygen can generate a new output format we +<p>Since version 1.2.18, doxygen can generate a new output format we have called the "Perl Module output format". It has been designed as an intermediate format that can be used to generate new -and customized output without having to modify the Doxygen source. +and customized output without having to modify the doxygen source. Therefore, its purpose is similar to the XML output format that can be -also generated by Doxygen. The XML output format is more standard, +also generated by doxygen. The XML output format is more standard, but the Perl Module output format is possibly simpler and easier to use. <p>The Perl Module output format is still experimental at the moment and could be changed in incompatible ways in future versions, although this should not be very probable. It is also lacking some features of -other Doxygen backends. However, it can be already used to generate +other doxygen backends. However, it can be already used to generate useful output, as shown by the Perl Module-based \LaTeX generator. <p>Please report any bugs or problems you find in the Perl Module @@ -24,7 +24,7 @@ doxygen-develop mailing list. Suggestions are welcome as well. \section using_perlmod_fmt Usage <p>When the \ref cfg_generate_perlmod "GENERATE_PERLMOD" tag is enabled in the Doxyfile, -running Doxygen generates a number of files in the `perlmod/` +running doxygen generates a number of files in the `perlmod/` subdirectory of your output directory. These files are the following: <ul> @@ -48,12 +48,12 @@ file is intended to be included by your own Makefile. </ul> <p>To make use of the documentation stored in DoxyDocs.pm you can use -one of the default Perl Module-based generators provided by Doxygen +one of the default Perl Module-based generators provided by doxygen (at the moment this includes the Perl Module-based \LaTeX generator, see \ref perlmod_latex "below") or write your own customized generator. This should not be too hard if you have some knowledge of Perl and it's the main purpose of including the Perl Module backend in -Doxygen. See \ref doxydocs_format "below" for details on how +doxygen. See \ref doxydocs_format "below" for details on how to do this. <-- want to use \LaTeX but not possible in headings --> @@ -114,7 +114,7 @@ packages used by `doxylatex.tex`. \ref cfg_perlmod_latex "PERLMOD_LATEX" tags to \c YES in your Doxyfile. -<li>Run Doxygen on your Doxyfile: +<li>Run doxygen on your Doxyfile: <pre>doxygen Doxyfile</pre> @@ -137,7 +137,7 @@ in DVI format. \section doxydocs_format Documentation format. -<p>The Perl Module documentation generated by Doxygen is stored in +<p>The Perl Module documentation generated by doxygen is stored in `DoxyDocs.pm`. This is a very simple Perl module that contains only two statements: an assignment to the variable `$doxydocs` and the customary `1;` statement which usually ends Perl modules. @@ -183,12 +183,12 @@ present in \ref perlmod_tree "this page". <p>You might be interested in processing the documentation contained in `DoxyDocs.pm` without needing to take into account the semantics of each node of the documentation tree. For this purpose, -Doxygen generates a `DoxyModel.pm` file which contains a data +doxygen generates a `DoxyModel.pm` file which contains a data structure describing the type and children of each node in the documentation tree. <p>The rest of this section is to be written yet, but in the meantime -you can look at the Perl scripts generated by Doxygen (such as +you can look at the Perl scripts generated by doxygen (such as `doxylatex.pl` or `doxytemplate-latex.pl`) to get an idea on how to use `DoxyModel.pm`. diff --git a/doc/starting.doc b/doc/starting.doc index 081ef8b..bfb8e8f 100644 --- a/doc/starting.doc +++ b/doc/starting.doc @@ -24,7 +24,7 @@ detailed usage information. Optionally, the executable \c doxywizard can be used, which is a \ref doxywizard_usage "graphical front-end" for editing the configuration file that is used by doxygen and for running doxygen in a graphical environment. -For Mac OS X doxywizard will be started by clicking on the Doxygen application +For Mac OS X doxywizard will be started by clicking on the doxygen application icon. The following figure shows the relation between the tools and the flow @@ -37,7 +37,7 @@ tries to be complete): \section step0 Step 0: Check if doxygen supports your programming language First, assure that your programming language has a reasonable chance of being -recognized by Doxygen. These languages are supported by default: C, C++, C#, +recognized by doxygen. These languages are supported by default: C, C++, C#, Objective-C, IDL, Java, VHDL, PHP, Python, Tcl, Fortran, and D. It is possible to configure certain file type extensions to use certain parsers: see the \ref cfg_extension_mapping "Configuration/ExtensionMappings" for details. @@ -126,6 +126,9 @@ Extension | Language .f |Fortran .for |Fortran .f90 |Fortran +.f95 |Fortran +.f03 |Fortran +.f08 |Fortran .vhd |VHDL .vhdl |VHDL .tcl |TCL diff --git a/doc/translator.py b/doc/translator.py index 69e7de8..798774b 100644 --- a/doc/translator.py +++ b/doc/translator.py @@ -54,9 +54,9 @@ 2010/03/03 - Added [unreachable] prefix used in maintainers.txt.
2010/05/28 - BOM skipped; minor code cleaning.
2010/05/31 - e-mail mangled already in maintainers.txt
- 2010/08/20 - maintainers.txt to UTF-8, related processin of unicode strings
+ 2010/08/20 - maintainers.txt to UTF-8, related processing of unicode strings
- [any mark] introduced instead of [unreachable] only
- - marks hihglighted in HTML
+ - marks highlighted in HTML
2010/08/30 - Highlighting in what will be the table in langhowto.html modified.
2010/09/27 - The underscore in \latexonly part of the generated language.doc
was prefixed by backslash (was LaTeX related error).
@@ -83,15 +83,14 @@ def xopen(fname, mode='r', encoding='utf-8-sig'): the default 'utf-8-sig' is used (skips the BOM automatically).
'''
- major, minor, patch = (int(e) for e in platform.python_version_tuple())
- if major == 2:
+ if sys.version_info[0] == 2:
return open(fname, mode=mode) # Python 2 without encoding
else:
return open(fname, mode=mode, encoding=encoding) # Python 3 with encoding
def fill(s):
- """Returns string formated to the wrapped paragraph multiline string.
+ """Returns string formatted to the wrapped paragraph multiline string.
Replaces whitespaces by one space and then uses he textwrap.fill()."""
@@ -159,7 +158,7 @@ class Transl: The tokens have the form (tokenId, tokenString, lineNo). The
last returned token has the form ('eof', None, None). When trying
- to access next token afer that, the exception would be raised."""
+ to access next token after that, the exception would be raised."""
# Set the dictionary for recognizing tokenId for keywords, separators
# and the similar categories. The key is the string to be recognized,
@@ -727,7 +726,7 @@ class Transl: The dictionary is filled by items: uniPrototype -> prototype.
The method is expected to be called only for TranslatorXxxx classes,
i.e. for the classes that implement translation to some language.
- It assumes that the openning curly brace of the class was already
+ It assumes that the opening curly brace of the class was already
consumed. The source is consumed until the end of the class.
The caller should consume the source until the eof to cause closing
the source file."""
@@ -738,7 +737,7 @@ class Transl: # The following finite automaton slightly differs from the one
# inside self.collectPureVirtualPrototypes(). It produces the
# dictionary item just after consuming the body of the method
- # (transition from from state 10 to state 2). It also does not allow
+ # (transition from state 10 to state 2). It also does not allow
# definitions of public pure virtual methods, except for
# TranslatorAdapterBase (states 8 and 9). Argument identifier inside
# method argument lists can be omitted or commented.
@@ -1234,7 +1233,7 @@ class TrManager: self.doc_path = os.path.join(self.doxy_path, 'doc')
self.src_path = os.path.join(self.doxy_path, 'src')
- # Create the empty dictionary for Transl object identitied by the
+ # Create the empty dictionary for Transl object identified by the
# class identifier of the translator.
self.__translDic = {}
@@ -1484,7 +1483,7 @@ class TrManager: def __emails(self, classId):
"""Returns the list of maintainer emails.
- The method returns the list of e-mail adresses for the translator
+ The method returns the list of e-mail addresses for the translator
class, but only the addresses that were not marked as [xxx]."""
lst = []
for m in self.__maintainersDic[classId]:
@@ -1814,6 +1813,7 @@ class TrManager: # Define templates for HTML table parts of the documentation.
htmlTableTpl = '''\
\\htmlonly
+ </p>
<table align="center" cellspacing="0" cellpadding="0" border="0">
<tr bgcolor="#000000">
<td>
@@ -1832,6 +1832,7 @@ class TrManager: </td>
</tr>
</table>
+ <p>
\\endhtmlonly
'''
htmlTableTpl = textwrap.dedent(htmlTableTpl)
@@ -1845,7 +1846,7 @@ class TrManager: for name, obj in self.langLst:
# Fill the table data elements for one row. The first element
# contains the readable name of the language. Only the oldest
- # translator are colour marked in the language columnt. Less
+ # translator are colour marked in the language column. Less
# "heavy" color is used (when compared with the Status column).
if obj.readableStatus.startswith('1.4'):
bkcolor = self.getBgcolorByReadableStatus('1.4')
@@ -1880,7 +1881,7 @@ class TrManager: lm.append(name)
mm = '<br/>'.join(lm)
- # The marked adresses (they start with the mark '[unreachable]',
+ # The marked addresses (they start with the mark '[unreachable]',
# '[resigned]', whatever '[xxx]') will not be displayed at all.
# Only the mark will be used instead.
rexMark = re.compile('(?P<mark>\\[.*?\\])')
@@ -1988,7 +1989,8 @@ class TrManager: if __name__ == '__main__':
# The Python 2.6+ or 3.3+ is required.
- major, minor, patch = (int(e) for e in platform.python_version_tuple())
+ major = sys.version_info[0]
+ minor = sys.version_info[1]
if (major == 2 and minor < 6) or (major == 3 and minor < 0):
print('Python 2.6+ or Python 3.0+ are required for the script')
sys.exit(1)
diff --git a/doc/trouble.doc b/doc/trouble.doc index 47ef623..9584c0c 100644 --- a/doc/trouble.doc +++ b/doc/trouble.doc @@ -81,9 +81,9 @@ \section howtohelp How to Help -The development of Doxygen highly depends on your input! +The development of doxygen highly depends on your input! -If you are trying Doxygen let me know what you think of it (do you +If you are trying doxygen let me know what you think of it (do you miss certain features?). Even if you decide not to use it, please let me know why. diff --git a/jquery/.gitignore b/jquery/.gitignore new file mode 100644 index 0000000..8436b24 --- /dev/null +++ b/jquery/.gitignore @@ -0,0 +1,4 @@ +.sass-cache +*-min.js +doxmenu*.css +jquery.js diff --git a/jquery/Makefile b/jquery/Makefile index 996f472..02cdd34 100644 --- a/jquery/Makefile +++ b/jquery/Makefile @@ -3,6 +3,8 @@ JQUERY_UI_VERSION = 1.8.18 HASHCHANGE_VERSION = 1.3 SCROLL_VERSION = 1.4.2 POWERTIP_VERSION = 1.2.0 +TOUCHPUNCH_VERSION = 0.2.3 +SMARTMENUS_VERSION = 1.0.0 MINIFIER ?= /usr/local/bin/yuicompressor-2.4.7 SCRIPTS = jquery-$(JQUERY_VERSION).js \ @@ -12,23 +14,36 @@ SCRIPTS = jquery-$(JQUERY_VERSION).js \ jquery.ui-$(JQUERY_UI_VERSION).resizable.js \ jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \ jquery.scrollTo-$(SCROLL_VERSION).js \ - jquery.powertip-$(POWERTIP_VERSION).js -RESULTS = jquery.js + jquery.powertip-$(POWERTIP_VERSION).js \ + jquery.ui-$(TOUCHPUNCH_VERSION).touch-punch.js \ + jquery.smartmenus-$(SMARTMENUS_VERSION).js +RESULTS = jquery.js doxmenu-min.css SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js) all: $(RESULTS) install: $(RESULTS) - cp $(RESULTS) ../templates/html/ + cp jquery.js ../templates/html/jquery.js + cp doxmenu-min.css ../templates/html/tabs.css -jquery.js: scripts +jquery.js: $(SCRIPTS_MIN) cat $(SCRIPTS_MIN) > jquery.js +doxmenu-min.css: sm-core-css.css \ + sass/sm-dox.scss \ + sass/_round-corners-last-item.scss \ + sass/_sm-dox.scss \ + sass/_sub-items-indentation.scss + compass compile --css-dir . --force sass/sm-dox.scss + cat sm-core-css.css sm-dox.css > doxmenu.css + java -jar $(MINIFIER).jar doxmenu.css > doxmenu-min.css + rm -f sm-dox.css doxmenu.css + scripts: $(SCRIPTS_MIN) clean: - rm -f $(SCRIPTS_MIN) $(RESULTS) + rm -rf $(SCRIPTS_MIN) $(RESULTS) doxmenu.css .sass-cache jquery.js %-min.js: %.js java -jar $(MINIFIER).jar $^ > $@ diff --git a/jquery/README b/jquery/README index 5e385a5..21590ff 100644 --- a/jquery/README +++ b/jquery/README @@ -7,8 +7,10 @@ packages: - jquery.ui.widget - jquery.ui.mouse - jquery.ui.resizable -- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/ -- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo -- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/ +- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/ +- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo +- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/ +- jquery.touchpunch: 0.2.3: http://touchpunch.furf.com/ +- jquery.smartmenus: 1.0.0: http://www.smartmenus.org/ The Makefile will built the jquery.js files used by doxygen. diff --git a/jquery/jquery.smartmenus-1.0.0.js b/jquery/jquery.smartmenus-1.0.0.js new file mode 100644 index 0000000..9c3a494 --- /dev/null +++ b/jquery/jquery.smartmenus-1.0.0.js @@ -0,0 +1,1214 @@ +/*! + * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016 + * http://www.smartmenus.org/ + * + * Copyright Vasil Dinkov, Vadikom Web Ltd. + * http://vadikom.com + * + * Licensed MIT + */ + +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof module === 'object' && typeof module.exports === 'object') { + // CommonJS + module.exports = factory(require('jquery')); + } else { + // Global jQuery + factory(jQuery); + } +} (function($) { + + var menuTrees = [], + IE = !!window.createPopup, // detect it for the iframe shim + mouse = false, // optimize for touch by default - we will detect for mouse input + touchEvents = 'ontouchstart' in window, // we use this just to choose between toucn and pointer events, not for touch screen detection + mouseDetectionEnabled = false, + requestAnimationFrame = window.requestAnimationFrame || function(callback) { return setTimeout(callback, 1000 / 60); }, + cancelAnimationFrame = window.cancelAnimationFrame || function(id) { clearTimeout(id); }; + + // Handle detection for mouse input (i.e. desktop browsers, tablets with a mouse, etc.) + function initMouseDetection(disable) { + var eNS = '.smartmenus_mouse'; + if (!mouseDetectionEnabled && !disable) { + // if we get two consecutive mousemoves within 2 pixels from each other and within 300ms, we assume a real mouse/cursor is present + // in practice, this seems like impossible to trick unintentianally with a real mouse and a pretty safe detection on touch devices (even with older browsers that do not support touch events) + var firstTime = true, + lastMove = null; + $(document).bind(getEventsNS([ + ['mousemove', function(e) { + var thisMove = { x: e.pageX, y: e.pageY, timeStamp: new Date().getTime() }; + if (lastMove) { + var deltaX = Math.abs(lastMove.x - thisMove.x), + deltaY = Math.abs(lastMove.y - thisMove.y); + if ((deltaX > 0 || deltaY > 0) && deltaX <= 2 && deltaY <= 2 && thisMove.timeStamp - lastMove.timeStamp <= 300) { + mouse = true; + // if this is the first check after page load, check if we are not over some item by chance and call the mouseenter handler if yes + if (firstTime) { + var $a = $(e.target).closest('a'); + if ($a.is('a')) { + $.each(menuTrees, function() { + if ($.contains(this.$root[0], $a[0])) { + this.itemEnter({ currentTarget: $a[0] }); + return false; + } + }); + } + firstTime = false; + } + } + } + lastMove = thisMove; + }], + [touchEvents ? 'touchstart' : 'pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut', function(e) { + if (isTouchEvent(e.originalEvent)) { + mouse = false; + } + }] + ], eNS)); + mouseDetectionEnabled = true; + } else if (mouseDetectionEnabled && disable) { + $(document).unbind(eNS); + mouseDetectionEnabled = false; + } + } + + function isTouchEvent(e) { + return !/^(4|mouse)$/.test(e.pointerType); + } + + // returns a jQuery bind() ready object + function getEventsNS(defArr, eNS) { + if (!eNS) { + eNS = ''; + } + var obj = {}; + $.each(defArr, function(index, value) { + obj[value[0].split(' ').join(eNS + ' ') + eNS] = value[1]; + }); + return obj; + } + + $.SmartMenus = function(elm, options) { + this.$root = $(elm); + this.opts = options; + this.rootId = ''; // internal + this.accessIdPrefix = ''; + this.$subArrow = null; + this.activatedItems = []; // stores last activated A's for each level + this.visibleSubMenus = []; // stores visible sub menus UL's (might be in no particular order) + this.showTimeout = 0; + this.hideTimeout = 0; + this.scrollTimeout = 0; + this.clickActivated = false; + this.focusActivated = false; + this.zIndexInc = 0; + this.idInc = 0; + this.$firstLink = null; // we'll use these for some tests + this.$firstSub = null; // at runtime so we'll cache them + this.disabled = false; + this.$disableOverlay = null; + this.$touchScrollingSub = null; + this.cssTransforms3d = 'perspective' in elm.style || 'webkitPerspective' in elm.style; + this.wasCollapsible = false; + this.init(); + }; + + $.extend($.SmartMenus, { + hideAll: function() { + $.each(menuTrees, function() { + this.menuHideAll(); + }); + }, + destroy: function() { + while (menuTrees.length) { + menuTrees[0].destroy(); + } + initMouseDetection(true); + }, + prototype: { + init: function(refresh) { + var self = this; + + if (!refresh) { + menuTrees.push(this); + + this.rootId = (new Date().getTime() + Math.random() + '').replace(/\D/g, ''); + this.accessIdPrefix = 'sm-' + this.rootId + '-'; + + if (this.$root.hasClass('sm-rtl')) { + this.opts.rightToLeftSubMenus = true; + } + + // init root (main menu) + var eNS = '.smartmenus'; + this.$root + .data('smartmenus', this) + .attr('data-smartmenus-id', this.rootId) + .dataSM('level', 1) + .bind(getEventsNS([ + ['mouseover focusin', $.proxy(this.rootOver, this)], + ['mouseout focusout', $.proxy(this.rootOut, this)], + ['keydown', $.proxy(this.rootKeyDown, this)] + ], eNS)) + .delegate('a', getEventsNS([ + ['mouseenter', $.proxy(this.itemEnter, this)], + ['mouseleave', $.proxy(this.itemLeave, this)], + ['mousedown', $.proxy(this.itemDown, this)], + ['focus', $.proxy(this.itemFocus, this)], + ['blur', $.proxy(this.itemBlur, this)], + ['click', $.proxy(this.itemClick, this)] + ], eNS)); + + // hide menus on tap or click outside the root UL + eNS += this.rootId; + if (this.opts.hideOnClick) { + $(document).bind(getEventsNS([ + ['touchstart', $.proxy(this.docTouchStart, this)], + ['touchmove', $.proxy(this.docTouchMove, this)], + ['touchend', $.proxy(this.docTouchEnd, this)], + // for Opera Mobile < 11.5, webOS browser, etc. we'll check click too + ['click', $.proxy(this.docClick, this)] + ], eNS)); + } + // hide sub menus on resize + $(window).bind(getEventsNS([['resize orientationchange', $.proxy(this.winResize, this)]], eNS)); + + if (this.opts.subIndicators) { + this.$subArrow = $('<span/>').addClass('sub-arrow'); + if (this.opts.subIndicatorsText) { + this.$subArrow.html(this.opts.subIndicatorsText); + } + } + + // make sure mouse detection is enabled + initMouseDetection(); + } + + // init sub menus + this.$firstSub = this.$root.find('ul').each(function() { self.menuInit($(this)); }).eq(0); + + this.$firstLink = this.$root.find('a').eq(0); + + // find current item + if (this.opts.markCurrentItem) { + var reDefaultDoc = /(index|default)\.[^#\?\/]*/i, + reHash = /#.*/, + locHref = window.location.href.replace(reDefaultDoc, ''), + locHrefNoHash = locHref.replace(reHash, ''); + this.$root.find('a').each(function() { + var href = this.href.replace(reDefaultDoc, ''), + $this = $(this); + if (href == locHref || href == locHrefNoHash) { + $this.addClass('current'); + if (self.opts.markCurrentTree) { + $this.parentsUntil('[data-smartmenus-id]', 'ul').each(function() { + $(this).dataSM('parent-a').addClass('current'); + }); + } + } + }); + } + + // save initial state + this.wasCollapsible = this.isCollapsible(); + }, + destroy: function(refresh) { + if (!refresh) { + var eNS = '.smartmenus'; + this.$root + .removeData('smartmenus') + .removeAttr('data-smartmenus-id') + .removeDataSM('level') + .unbind(eNS) + .undelegate(eNS); + eNS += this.rootId; + $(document).unbind(eNS); + $(window).unbind(eNS); + if (this.opts.subIndicators) { + this.$subArrow = null; + } + } + this.menuHideAll(); + var self = this; + this.$root.find('ul').each(function() { + var $this = $(this); + if ($this.dataSM('scroll-arrows')) { + $this.dataSM('scroll-arrows').remove(); + } + if ($this.dataSM('shown-before')) { + if (self.opts.subMenusMinWidth || self.opts.subMenusMaxWidth) { + $this.css({ width: '', minWidth: '', maxWidth: '' }).removeClass('sm-nowrap'); + } + if ($this.dataSM('scroll-arrows')) { + $this.dataSM('scroll-arrows').remove(); + } + $this.css({ zIndex: '', top: '', left: '', marginLeft: '', marginTop: '', display: '' }); + } + if (($this.attr('id') || '').indexOf(self.accessIdPrefix) == 0) { + $this.removeAttr('id'); + } + }) + .removeDataSM('in-mega') + .removeDataSM('shown-before') + .removeDataSM('ie-shim') + .removeDataSM('scroll-arrows') + .removeDataSM('parent-a') + .removeDataSM('level') + .removeDataSM('beforefirstshowfired') + .removeAttr('role') + .removeAttr('aria-hidden') + .removeAttr('aria-labelledby') + .removeAttr('aria-expanded'); + this.$root.find('a.has-submenu').each(function() { + var $this = $(this); + if ($this.attr('id').indexOf(self.accessIdPrefix) == 0) { + $this.removeAttr('id'); + } + }) + .removeClass('has-submenu') + .removeDataSM('sub') + .removeAttr('aria-haspopup') + .removeAttr('aria-controls') + .removeAttr('aria-expanded') + .closest('li').removeDataSM('sub'); + if (this.opts.subIndicators) { + this.$root.find('span.sub-arrow').remove(); + } + if (this.opts.markCurrentItem) { + this.$root.find('a.current').removeClass('current'); + } + if (!refresh) { + this.$root = null; + this.$firstLink = null; + this.$firstSub = null; + if (this.$disableOverlay) { + this.$disableOverlay.remove(); + this.$disableOverlay = null; + } + menuTrees.splice($.inArray(this, menuTrees), 1); + } + }, + disable: function(noOverlay) { + if (!this.disabled) { + this.menuHideAll(); + // display overlay over the menu to prevent interaction + if (!noOverlay && !this.opts.isPopup && this.$root.is(':visible')) { + var pos = this.$root.offset(); + this.$disableOverlay = $('<div class="sm-jquery-disable-overlay"/>').css({ + position: 'absolute', + top: pos.top, + left: pos.left, + width: this.$root.outerWidth(), + height: this.$root.outerHeight(), + zIndex: this.getStartZIndex(true), + opacity: 0 + }).appendTo(document.body); + } + this.disabled = true; + } + }, + docClick: function(e) { + if (this.$touchScrollingSub) { + this.$touchScrollingSub = null; + return; + } + // hide on any click outside the menu or on a menu link + if (this.visibleSubMenus.length && !$.contains(this.$root[0], e.target) || $(e.target).is('a')) { + this.menuHideAll(); + } + }, + docTouchEnd: function(e) { + if (!this.lastTouch) { + return; + } + if (this.visibleSubMenus.length && (this.lastTouch.x2 === undefined || this.lastTouch.x1 == this.lastTouch.x2) && (this.lastTouch.y2 === undefined || this.lastTouch.y1 == this.lastTouch.y2) && (!this.lastTouch.target || !$.contains(this.$root[0], this.lastTouch.target))) { + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = 0; + } + // hide with a delay to prevent triggering accidental unwanted click on some page element + var self = this; + this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, 350); + } + this.lastTouch = null; + }, + docTouchMove: function(e) { + if (!this.lastTouch) { + return; + } + var touchPoint = e.originalEvent.touches[0]; + this.lastTouch.x2 = touchPoint.pageX; + this.lastTouch.y2 = touchPoint.pageY; + }, + docTouchStart: function(e) { + var touchPoint = e.originalEvent.touches[0]; + this.lastTouch = { x1: touchPoint.pageX, y1: touchPoint.pageY, target: touchPoint.target }; + }, + enable: function() { + if (this.disabled) { + if (this.$disableOverlay) { + this.$disableOverlay.remove(); + this.$disableOverlay = null; + } + this.disabled = false; + } + }, + getClosestMenu: function(elm) { + var $closestMenu = $(elm).closest('ul'); + while ($closestMenu.dataSM('in-mega')) { + $closestMenu = $closestMenu.parent().closest('ul'); + } + return $closestMenu[0] || null; + }, + getHeight: function($elm) { + return this.getOffset($elm, true); + }, + // returns precise width/height float values + getOffset: function($elm, height) { + var old; + if ($elm.css('display') == 'none') { + old = { position: $elm[0].style.position, visibility: $elm[0].style.visibility }; + $elm.css({ position: 'absolute', visibility: 'hidden' }).show(); + } + var box = $elm[0].getBoundingClientRect && $elm[0].getBoundingClientRect(), + val = box && (height ? box.height || box.bottom - box.top : box.width || box.right - box.left); + if (!val && val !== 0) { + val = height ? $elm[0].offsetHeight : $elm[0].offsetWidth; + } + if (old) { + $elm.hide().css(old); + } + return val; + }, + getStartZIndex: function(root) { + var zIndex = parseInt(this[root ? '$root' : '$firstSub'].css('z-index')); + if (!root && isNaN(zIndex)) { + zIndex = parseInt(this.$root.css('z-index')); + } + return !isNaN(zIndex) ? zIndex : 1; + }, + getTouchPoint: function(e) { + return e.touches && e.touches[0] || e.changedTouches && e.changedTouches[0] || e; + }, + getViewport: function(height) { + var name = height ? 'Height' : 'Width', + val = document.documentElement['client' + name], + val2 = window['inner' + name]; + if (val2) { + val = Math.min(val, val2); + } + return val; + }, + getViewportHeight: function() { + return this.getViewport(true); + }, + getViewportWidth: function() { + return this.getViewport(); + }, + getWidth: function($elm) { + return this.getOffset($elm); + }, + handleEvents: function() { + return !this.disabled && this.isCSSOn(); + }, + handleItemEvents: function($a) { + return this.handleEvents() && !this.isLinkInMegaMenu($a); + }, + isCollapsible: function() { + return this.$firstSub.css('position') == 'static'; + }, + isCSSOn: function() { + return this.$firstLink.css('display') == 'block'; + }, + isFixed: function() { + var isFixed = this.$root.css('position') == 'fixed'; + if (!isFixed) { + this.$root.parentsUntil('body').each(function() { + if ($(this).css('position') == 'fixed') { + isFixed = true; + return false; + } + }); + } + return isFixed; + }, + isLinkInMegaMenu: function($a) { + return $(this.getClosestMenu($a[0])).hasClass('mega-menu'); + }, + isTouchMode: function() { + return !mouse || this.opts.noMouseOver || this.isCollapsible(); + }, + itemActivate: function($a, focus) { + var $ul = $a.closest('ul'), + level = $ul.dataSM('level'); + // if for some reason the parent item is not activated (e.g. this is an API call to activate the item), activate all parent items first + if (level > 1 && (!this.activatedItems[level - 2] || this.activatedItems[level - 2][0] != $ul.dataSM('parent-a')[0])) { + var self = this; + $($ul.parentsUntil('[data-smartmenus-id]', 'ul').get().reverse()).add($ul).each(function() { + self.itemActivate($(this).dataSM('parent-a')); + }); + } + // hide any visible deeper level sub menus + if (!this.isCollapsible() || focus) { + this.menuHideSubMenus(!this.activatedItems[level - 1] || this.activatedItems[level - 1][0] != $a[0] ? level - 1 : level); + } + // save new active item for this level + this.activatedItems[level - 1] = $a; + if (this.$root.triggerHandler('activate.smapi', $a[0]) === false) { + return; + } + // show the sub menu if this item has one + var $sub = $a.dataSM('sub'); + if ($sub && (this.isTouchMode() || (!this.opts.showOnClick || this.clickActivated))) { + this.menuShow($sub); + } + }, + itemBlur: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + this.$root.triggerHandler('blur.smapi', $a[0]); + }, + itemClick: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + if (this.$touchScrollingSub && this.$touchScrollingSub[0] == $a.closest('ul')[0]) { + this.$touchScrollingSub = null; + e.stopPropagation(); + return false; + } + if (this.$root.triggerHandler('click.smapi', $a[0]) === false) { + return false; + } + var subArrowClicked = $(e.target).is('span.sub-arrow'), + $sub = $a.dataSM('sub'), + firstLevelSub = $sub ? $sub.dataSM('level') == 2 : false; + // if the sub is not visible + if ($sub && !$sub.is(':visible')) { + if (this.opts.showOnClick && firstLevelSub) { + this.clickActivated = true; + } + // try to activate the item and show the sub + this.itemActivate($a); + // if "itemActivate" showed the sub, prevent the click so that the link is not loaded + // if it couldn't show it, then the sub menus are disabled with an !important declaration (e.g. via mobile styles) so let the link get loaded + if ($sub.is(':visible')) { + this.focusActivated = true; + return false; + } + } else if (this.isCollapsible() && subArrowClicked) { + this.itemActivate($a); + this.menuHide($sub); + return false; + } + if (this.opts.showOnClick && firstLevelSub || $a.hasClass('disabled') || this.$root.triggerHandler('select.smapi', $a[0]) === false) { + return false; + } + }, + itemDown: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + $a.dataSM('mousedown', true); + }, + itemEnter: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + if (!this.isTouchMode()) { + if (this.showTimeout) { + clearTimeout(this.showTimeout); + this.showTimeout = 0; + } + var self = this; + this.showTimeout = setTimeout(function() { self.itemActivate($a); }, this.opts.showOnClick && $a.closest('ul').dataSM('level') == 1 ? 1 : this.opts.showTimeout); + } + this.$root.triggerHandler('mouseenter.smapi', $a[0]); + }, + itemFocus: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + // fix (the mousedown check): in some browsers a tap/click produces consecutive focus + click events so we don't need to activate the item on focus + if (this.focusActivated && (!this.isTouchMode() || !$a.dataSM('mousedown')) && (!this.activatedItems.length || this.activatedItems[this.activatedItems.length - 1][0] != $a[0])) { + this.itemActivate($a, true); + } + this.$root.triggerHandler('focus.smapi', $a[0]); + }, + itemLeave: function(e) { + var $a = $(e.currentTarget); + if (!this.handleItemEvents($a)) { + return; + } + if (!this.isTouchMode()) { + $a[0].blur(); + if (this.showTimeout) { + clearTimeout(this.showTimeout); + this.showTimeout = 0; + } + } + $a.removeDataSM('mousedown'); + this.$root.triggerHandler('mouseleave.smapi', $a[0]); + }, + menuHide: function($sub) { + if (this.$root.triggerHandler('beforehide.smapi', $sub[0]) === false) { + return; + } + $sub.stop(true, true); + if ($sub.css('display') != 'none') { + var complete = function() { + // unset z-index + $sub.css('z-index', ''); + }; + // if sub is collapsible (mobile view) + if (this.isCollapsible()) { + if (this.opts.collapsibleHideFunction) { + this.opts.collapsibleHideFunction.call(this, $sub, complete); + } else { + $sub.hide(this.opts.collapsibleHideDuration, complete); + } + } else { + if (this.opts.hideFunction) { + this.opts.hideFunction.call(this, $sub, complete); + } else { + $sub.hide(this.opts.hideDuration, complete); + } + } + // remove IE iframe shim + if ($sub.dataSM('ie-shim')) { + $sub.dataSM('ie-shim').remove().css({ '-webkit-transform': '', transform: '' }); + } + // deactivate scrolling if it is activated for this sub + if ($sub.dataSM('scroll')) { + this.menuScrollStop($sub); + $sub.css({ 'touch-action': '', '-ms-touch-action': '', '-webkit-transform': '', transform: '' }) + .unbind('.smartmenus_scroll').removeDataSM('scroll').dataSM('scroll-arrows').hide(); + } + // unhighlight parent item + accessibility + $sub.dataSM('parent-a').removeClass('highlighted').attr('aria-expanded', 'false'); + $sub.attr({ + 'aria-expanded': 'false', + 'aria-hidden': 'true' + }); + var level = $sub.dataSM('level'); + this.activatedItems.splice(level - 1, 1); + this.visibleSubMenus.splice($.inArray($sub, this.visibleSubMenus), 1); + this.$root.triggerHandler('hide.smapi', $sub[0]); + } + }, + menuHideAll: function() { + if (this.showTimeout) { + clearTimeout(this.showTimeout); + this.showTimeout = 0; + } + // hide all subs + // if it's a popup, this.visibleSubMenus[0] is the root UL + var level = this.opts.isPopup ? 1 : 0; + for (var i = this.visibleSubMenus.length - 1; i >= level; i--) { + this.menuHide(this.visibleSubMenus[i]); + } + // hide root if it's popup + if (this.opts.isPopup) { + this.$root.stop(true, true); + if (this.$root.is(':visible')) { + if (this.opts.hideFunction) { + this.opts.hideFunction.call(this, this.$root); + } else { + this.$root.hide(this.opts.hideDuration); + } + // remove IE iframe shim + if (this.$root.dataSM('ie-shim')) { + this.$root.dataSM('ie-shim').remove(); + } + } + } + this.activatedItems = []; + this.visibleSubMenus = []; + this.clickActivated = false; + this.focusActivated = false; + // reset z-index increment + this.zIndexInc = 0; + this.$root.triggerHandler('hideAll.smapi'); + }, + menuHideSubMenus: function(level) { + for (var i = this.activatedItems.length - 1; i >= level; i--) { + var $sub = this.activatedItems[i].dataSM('sub'); + if ($sub) { + this.menuHide($sub); + } + } + }, + menuIframeShim: function($ul) { + // create iframe shim for the menu + if (IE && this.opts.overlapControlsInIE && !$ul.dataSM('ie-shim')) { + $ul.dataSM('ie-shim', $('<iframe/>').attr({ src: 'javascript:0', tabindex: -9 }) + .css({ position: 'absolute', top: 'auto', left: '0', opacity: 0, border: '0' }) + ); + } + }, + menuInit: function($ul) { + if (!$ul.dataSM('in-mega')) { + // mark UL's in mega drop downs (if any) so we can neglect them + if ($ul.hasClass('mega-menu')) { + $ul.find('ul').dataSM('in-mega', true); + } + // get level (much faster than, for example, using parentsUntil) + var level = 2, + par = $ul[0]; + while ((par = par.parentNode.parentNode) != this.$root[0]) { + level++; + } + // cache stuff for quick access + var $a = $ul.prevAll('a').eq(-1); + // if the link is nested (e.g. in a heading) + if (!$a.length) { + $a = $ul.prevAll().find('a').eq(-1); + } + $a.addClass('has-submenu').dataSM('sub', $ul); + $ul.dataSM('parent-a', $a) + .dataSM('level', level) + .parent().dataSM('sub', $ul); + // accessibility + var aId = $a.attr('id') || this.accessIdPrefix + (++this.idInc), + ulId = $ul.attr('id') || this.accessIdPrefix + (++this.idInc); + $a.attr({ + id: aId, + 'aria-haspopup': 'true', + 'aria-controls': ulId, + 'aria-expanded': 'false' + }); + $ul.attr({ + id: ulId, + 'role': 'group', + 'aria-hidden': 'true', + 'aria-labelledby': aId, + 'aria-expanded': 'false' + }); + // add sub indicator to parent item + if (this.opts.subIndicators) { + $a[this.opts.subIndicatorsPos](this.$subArrow.clone()); + } + } + }, + menuPosition: function($sub) { + var $a = $sub.dataSM('parent-a'), + $li = $a.closest('li'), + $ul = $li.parent(), + level = $sub.dataSM('level'), + subW = this.getWidth($sub), + subH = this.getHeight($sub), + itemOffset = $a.offset(), + itemX = itemOffset.left, + itemY = itemOffset.top, + itemW = this.getWidth($a), + itemH = this.getHeight($a), + $win = $(window), + winX = $win.scrollLeft(), + winY = $win.scrollTop(), + winW = this.getViewportWidth(), + winH = this.getViewportHeight(), + horizontalParent = $ul.parent().is('[data-sm-horizontal-sub]') || level == 2 && !$ul.hasClass('sm-vertical'), + rightToLeft = this.opts.rightToLeftSubMenus && !$li.is('[data-sm-reverse]') || !this.opts.rightToLeftSubMenus && $li.is('[data-sm-reverse]'), + subOffsetX = level == 2 ? this.opts.mainMenuSubOffsetX : this.opts.subMenusSubOffsetX, + subOffsetY = level == 2 ? this.opts.mainMenuSubOffsetY : this.opts.subMenusSubOffsetY, + x, y; + if (horizontalParent) { + x = rightToLeft ? itemW - subW - subOffsetX : subOffsetX; + y = this.opts.bottomToTopSubMenus ? -subH - subOffsetY : itemH + subOffsetY; + } else { + x = rightToLeft ? subOffsetX - subW : itemW - subOffsetX; + y = this.opts.bottomToTopSubMenus ? itemH - subOffsetY - subH : subOffsetY; + } + if (this.opts.keepInViewport) { + var absX = itemX + x, + absY = itemY + y; + if (rightToLeft && absX < winX) { + x = horizontalParent ? winX - absX + x : itemW - subOffsetX; + } else if (!rightToLeft && absX + subW > winX + winW) { + x = horizontalParent ? winX + winW - subW - absX + x : subOffsetX - subW; + } + if (!horizontalParent) { + if (subH < winH && absY + subH > winY + winH) { + y += winY + winH - subH - absY; + } else if (subH >= winH || absY < winY) { + y += winY - absY; + } + } + // do we need scrolling? + // 0.49 used for better precision when dealing with float values + if (horizontalParent && (absY + subH > winY + winH + 0.49 || absY < winY) || !horizontalParent && subH > winH + 0.49) { + var self = this; + if (!$sub.dataSM('scroll-arrows')) { + $sub.dataSM('scroll-arrows', $([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0], $('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]) + .bind({ + mouseenter: function() { + $sub.dataSM('scroll').up = $(this).hasClass('scroll-up'); + self.menuScroll($sub); + }, + mouseleave: function(e) { + self.menuScrollStop($sub); + self.menuScrollOut($sub, e); + }, + 'mousewheel DOMMouseScroll': function(e) { e.preventDefault(); } + }) + .insertAfter($sub) + ); + } + // bind scroll events and save scroll data for this sub + var eNS = '.smartmenus_scroll'; + $sub.dataSM('scroll', { + y: this.cssTransforms3d ? 0 : y - itemH, + step: 1, + // cache stuff for faster recalcs later + itemH: itemH, + subH: subH, + arrowDownH: this.getHeight($sub.dataSM('scroll-arrows').eq(1)) + }) + .bind(getEventsNS([ + ['mouseover', function(e) { self.menuScrollOver($sub, e); }], + ['mouseout', function(e) { self.menuScrollOut($sub, e); }], + ['mousewheel DOMMouseScroll', function(e) { self.menuScrollMousewheel($sub, e); }] + ], eNS)) + .dataSM('scroll-arrows').css({ top: 'auto', left: '0', marginLeft: x + (parseInt($sub.css('border-left-width')) || 0), width: subW - (parseInt($sub.css('border-left-width')) || 0) - (parseInt($sub.css('border-right-width')) || 0), zIndex: $sub.css('z-index') }) + .eq(horizontalParent && this.opts.bottomToTopSubMenus ? 0 : 1).show(); + // when a menu tree is fixed positioned we allow scrolling via touch too + // since there is no other way to access such long sub menus if no mouse is present + if (this.isFixed()) { + $sub.css({ 'touch-action': 'none', '-ms-touch-action': 'none' }) + .bind(getEventsNS([ + [touchEvents ? 'touchstart touchmove touchend' : 'pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp', function(e) { + self.menuScrollTouch($sub, e); + }] + ], eNS)); + } + } + } + $sub.css({ top: 'auto', left: '0', marginLeft: x, marginTop: y - itemH }); + // IE iframe shim + this.menuIframeShim($sub); + if ($sub.dataSM('ie-shim')) { + $sub.dataSM('ie-shim').css({ zIndex: $sub.css('z-index'), width: subW, height: subH, marginLeft: x, marginTop: y - itemH }); + } + }, + menuScroll: function($sub, once, step) { + var data = $sub.dataSM('scroll'), + $arrows = $sub.dataSM('scroll-arrows'), + end = data.up ? data.upEnd : data.downEnd, + diff; + if (!once && data.momentum) { + data.momentum *= 0.92; + diff = data.momentum; + if (diff < 0.5) { + this.menuScrollStop($sub); + return; + } + } else { + diff = step || (once || !this.opts.scrollAccelerate ? this.opts.scrollStep : Math.floor(data.step)); + } + // hide any visible deeper level sub menus + var level = $sub.dataSM('level'); + if (this.activatedItems[level - 1] && this.activatedItems[level - 1].dataSM('sub') && this.activatedItems[level - 1].dataSM('sub').is(':visible')) { + this.menuHideSubMenus(level - 1); + } + data.y = data.up && end <= data.y || !data.up && end >= data.y ? data.y : (Math.abs(end - data.y) > diff ? data.y + (data.up ? diff : -diff) : end); + $sub.add($sub.dataSM('ie-shim')).css(this.cssTransforms3d ? { '-webkit-transform': 'translate3d(0, ' + data.y + 'px, 0)', transform: 'translate3d(0, ' + data.y + 'px, 0)' } : { marginTop: data.y }); + // show opposite arrow if appropriate + if (mouse && (data.up && data.y > data.downEnd || !data.up && data.y < data.upEnd)) { + $arrows.eq(data.up ? 1 : 0).show(); + } + // if we've reached the end + if (data.y == end) { + if (mouse) { + $arrows.eq(data.up ? 0 : 1).hide(); + } + this.menuScrollStop($sub); + } else if (!once) { + if (this.opts.scrollAccelerate && data.step < this.opts.scrollStep) { + data.step += 0.2; + } + var self = this; + this.scrollTimeout = requestAnimationFrame(function() { self.menuScroll($sub); }); + } + }, + menuScrollMousewheel: function($sub, e) { + if (this.getClosestMenu(e.target) == $sub[0]) { + e = e.originalEvent; + var up = (e.wheelDelta || -e.detail) > 0; + if ($sub.dataSM('scroll-arrows').eq(up ? 0 : 1).is(':visible')) { + $sub.dataSM('scroll').up = up; + this.menuScroll($sub, true); + } + } + e.preventDefault(); + }, + menuScrollOut: function($sub, e) { + if (mouse) { + if (!/^scroll-(up|down)/.test((e.relatedTarget || '').className) && ($sub[0] != e.relatedTarget && !$.contains($sub[0], e.relatedTarget) || this.getClosestMenu(e.relatedTarget) != $sub[0])) { + $sub.dataSM('scroll-arrows').css('visibility', 'hidden'); + } + } + }, + menuScrollOver: function($sub, e) { + if (mouse) { + if (!/^scroll-(up|down)/.test(e.target.className) && this.getClosestMenu(e.target) == $sub[0]) { + this.menuScrollRefreshData($sub); + var data = $sub.dataSM('scroll'), + upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH; + $sub.dataSM('scroll-arrows').eq(0).css('margin-top', upEnd).end() + .eq(1).css('margin-top', upEnd + this.getViewportHeight() - data.arrowDownH).end() + .css('visibility', 'visible'); + } + } + }, + menuScrollRefreshData: function($sub) { + var data = $sub.dataSM('scroll'), + upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH; + if (this.cssTransforms3d) { + upEnd = -(parseFloat($sub.css('margin-top')) - upEnd); + } + $.extend(data, { + upEnd: upEnd, + downEnd: upEnd + this.getViewportHeight() - data.subH + }); + }, + menuScrollStop: function($sub) { + if (this.scrollTimeout) { + cancelAnimationFrame(this.scrollTimeout); + this.scrollTimeout = 0; + $sub.dataSM('scroll').step = 1; + return true; + } + }, + menuScrollTouch: function($sub, e) { + e = e.originalEvent; + if (isTouchEvent(e)) { + var touchPoint = this.getTouchPoint(e); + // neglect event if we touched a visible deeper level sub menu + if (this.getClosestMenu(touchPoint.target) == $sub[0]) { + var data = $sub.dataSM('scroll'); + if (/(start|down)$/i.test(e.type)) { + if (this.menuScrollStop($sub)) { + // if we were scrolling, just stop and don't activate any link on the first touch + e.preventDefault(); + this.$touchScrollingSub = $sub; + } else { + this.$touchScrollingSub = null; + } + // update scroll data since the user might have zoomed, etc. + this.menuScrollRefreshData($sub); + // extend it with the touch properties + $.extend(data, { + touchStartY: touchPoint.pageY, + touchStartTime: e.timeStamp + }); + } else if (/move$/i.test(e.type)) { + var prevY = data.touchY !== undefined ? data.touchY : data.touchStartY; + if (prevY !== undefined && prevY != touchPoint.pageY) { + this.$touchScrollingSub = $sub; + var up = prevY < touchPoint.pageY; + // changed direction? reset... + if (data.up !== undefined && data.up != up) { + $.extend(data, { + touchStartY: touchPoint.pageY, + touchStartTime: e.timeStamp + }); + } + $.extend(data, { + up: up, + touchY: touchPoint.pageY + }); + this.menuScroll($sub, true, Math.abs(touchPoint.pageY - prevY)); + } + e.preventDefault(); + } else { // touchend/pointerup + if (data.touchY !== undefined) { + if (data.momentum = Math.pow(Math.abs(touchPoint.pageY - data.touchStartY) / (e.timeStamp - data.touchStartTime), 2) * 15) { + this.menuScrollStop($sub); + this.menuScroll($sub); + e.preventDefault(); + } + delete data.touchY; + } + } + } + } + }, + menuShow: function($sub) { + if (!$sub.dataSM('beforefirstshowfired')) { + $sub.dataSM('beforefirstshowfired', true); + if (this.$root.triggerHandler('beforefirstshow.smapi', $sub[0]) === false) { + return; + } + } + if (this.$root.triggerHandler('beforeshow.smapi', $sub[0]) === false) { + return; + } + $sub.dataSM('shown-before', true) + .stop(true, true); + if (!$sub.is(':visible')) { + // highlight parent item + var $a = $sub.dataSM('parent-a'); + if (this.opts.keepHighlighted || this.isCollapsible()) { + $a.addClass('highlighted'); + } + if (this.isCollapsible()) { + $sub.removeClass('sm-nowrap').css({ zIndex: '', width: 'auto', minWidth: '', maxWidth: '', top: '', left: '', marginLeft: '', marginTop: '' }); + } else { + // set z-index + $sub.css('z-index', this.zIndexInc = (this.zIndexInc || this.getStartZIndex()) + 1); + // min/max-width fix - no way to rely purely on CSS as all UL's are nested + if (this.opts.subMenusMinWidth || this.opts.subMenusMaxWidth) { + $sub.css({ width: 'auto', minWidth: '', maxWidth: '' }).addClass('sm-nowrap'); + if (this.opts.subMenusMinWidth) { + $sub.css('min-width', this.opts.subMenusMinWidth); + } + if (this.opts.subMenusMaxWidth) { + var noMaxWidth = this.getWidth($sub); + $sub.css('max-width', this.opts.subMenusMaxWidth); + if (noMaxWidth > this.getWidth($sub)) { + $sub.removeClass('sm-nowrap').css('width', this.opts.subMenusMaxWidth); + } + } + } + this.menuPosition($sub); + // insert IE iframe shim + if ($sub.dataSM('ie-shim')) { + $sub.dataSM('ie-shim').insertBefore($sub); + } + } + var complete = function() { + // fix: "overflow: hidden;" is not reset on animation complete in jQuery < 1.9.0 in Chrome when global "box-sizing: border-box;" is used + $sub.css('overflow', ''); + }; + // if sub is collapsible (mobile view) + if (this.isCollapsible()) { + if (this.opts.collapsibleShowFunction) { + this.opts.collapsibleShowFunction.call(this, $sub, complete); + } else { + $sub.show(this.opts.collapsibleShowDuration, complete); + } + } else { + if (this.opts.showFunction) { + this.opts.showFunction.call(this, $sub, complete); + } else { + $sub.show(this.opts.showDuration, complete); + } + } + // accessibility + $a.attr('aria-expanded', 'true'); + $sub.attr({ + 'aria-expanded': 'true', + 'aria-hidden': 'false' + }); + // store sub menu in visible array + this.visibleSubMenus.push($sub); + this.$root.triggerHandler('show.smapi', $sub[0]); + } + }, + popupHide: function(noHideTimeout) { + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = 0; + } + var self = this; + this.hideTimeout = setTimeout(function() { + self.menuHideAll(); + }, noHideTimeout ? 1 : this.opts.hideTimeout); + }, + popupShow: function(left, top) { + if (!this.opts.isPopup) { + alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'); + return; + } + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = 0; + } + this.$root.dataSM('shown-before', true) + .stop(true, true); + if (!this.$root.is(':visible')) { + this.$root.css({ left: left, top: top }); + // IE iframe shim + this.menuIframeShim(this.$root); + if (this.$root.dataSM('ie-shim')) { + this.$root.dataSM('ie-shim').css({ zIndex: this.$root.css('z-index'), width: this.getWidth(this.$root), height: this.getHeight(this.$root), left: left, top: top }).insertBefore(this.$root); + } + // show menu + var self = this, + complete = function() { + self.$root.css('overflow', ''); + }; + if (this.opts.showFunction) { + this.opts.showFunction.call(this, this.$root, complete); + } else { + this.$root.show(this.opts.showDuration, complete); + } + this.visibleSubMenus[0] = this.$root; + } + }, + refresh: function() { + this.destroy(true); + this.init(true); + }, + rootKeyDown: function(e) { + if (!this.handleEvents()) { + return; + } + switch (e.keyCode) { + case 27: // reset on Esc + var $activeTopItem = this.activatedItems[0]; + if ($activeTopItem) { + this.menuHideAll(); + $activeTopItem[0].focus(); + var $sub = $activeTopItem.dataSM('sub'); + if ($sub) { + this.menuHide($sub); + } + } + break; + case 32: // activate item's sub on Space + var $target = $(e.target); + if ($target.is('a') && this.handleItemEvents($target)) { + var $sub = $target.dataSM('sub'); + if ($sub && !$sub.is(':visible')) { + this.itemClick({ currentTarget: e.target }); + e.preventDefault(); + } + } + break; + } + }, + rootOut: function(e) { + if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) { + return; + } + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = 0; + } + if (!this.opts.showOnClick || !this.opts.hideOnClick) { + var self = this; + this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, this.opts.hideTimeout); + } + }, + rootOver: function(e) { + if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) { + return; + } + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = 0; + } + }, + winResize: function(e) { + if (!this.handleEvents()) { + // we still need to resize the disable overlay if it's visible + if (this.$disableOverlay) { + var pos = this.$root.offset(); + this.$disableOverlay.css({ + top: pos.top, + left: pos.left, + width: this.$root.outerWidth(), + height: this.$root.outerHeight() + }); + } + return; + } + // hide sub menus on resize - on mobile do it only on orientation change + if (!('onorientationchange' in window) || e.type == 'orientationchange') { + var isCollapsible = this.isCollapsible(); + // if it was collapsible before resize and still is, don't do it + if (!(this.wasCollapsible && isCollapsible)) { + if (this.activatedItems.length) { + this.activatedItems[this.activatedItems.length - 1][0].blur(); + } + this.menuHideAll(); + } + this.wasCollapsible = isCollapsible; + } + } + } + }); + + $.fn.dataSM = function(key, val) { + if (val) { + return this.data(key + '_smartmenus', val); + } + return this.data(key + '_smartmenus'); + } + + $.fn.removeDataSM = function(key) { + return this.removeData(key + '_smartmenus'); + } + + $.fn.smartmenus = function(options) { + if (typeof options == 'string') { + var args = arguments, + method = options; + Array.prototype.shift.call(args); + return this.each(function() { + var smartmenus = $(this).data('smartmenus'); + if (smartmenus && smartmenus[method]) { + smartmenus[method].apply(smartmenus, args); + } + }); + } + var opts = $.extend({}, $.fn.smartmenus.defaults, options); + return this.each(function() { + new $.SmartMenus(this, opts); + }); + } + + // default settings + $.fn.smartmenus.defaults = { + isPopup: false, // is this a popup menu (can be shown via the popupShow/popupHide methods) or a permanent menu bar + mainMenuSubOffsetX: 0, // pixels offset from default position + mainMenuSubOffsetY: 0, // pixels offset from default position + subMenusSubOffsetX: 0, // pixels offset from default position + subMenusSubOffsetY: 0, // pixels offset from default position + subMenusMinWidth: '10em', // min-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored + subMenusMaxWidth: '20em', // max-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored + subIndicators: true, // create sub menu indicators - creates a SPAN and inserts it in the A + subIndicatorsPos: 'prepend', // position of the SPAN relative to the menu item content ('prepend', 'append') + subIndicatorsText: '+', // [optionally] add text in the SPAN (e.g. '+') (you may want to check the CSS for the sub indicators too) + scrollStep: 30, // pixels step when scrolling long sub menus that do not fit in the viewport height + scrollAccelerate: true, // accelerate scrolling or use a fixed step + showTimeout: 250, // timeout before showing the sub menus + hideTimeout: 500, // timeout before hiding the sub menus + showDuration: 0, // duration for show animation - set to 0 for no animation - matters only if showFunction:null + showFunction: null, // custom function to use when showing a sub menu (the default is the jQuery 'show') + // don't forget to call complete() at the end of whatever you do + // e.g.: function($ul, complete) { $ul.fadeIn(250, complete); } + hideDuration: 0, // duration for hide animation - set to 0 for no animation - matters only if hideFunction:null + hideFunction: function($ul, complete) { $ul.fadeOut(200, complete); }, // custom function to use when hiding a sub menu (the default is the jQuery 'hide') + // don't forget to call complete() at the end of whatever you do + // e.g.: function($ul, complete) { $ul.fadeOut(250, complete); } + collapsibleShowDuration:0, // duration for show animation for collapsible sub menus - matters only if collapsibleShowFunction:null + collapsibleShowFunction:function($ul, complete) { $ul.slideDown(200, complete); }, // custom function to use when showing a collapsible sub menu + // (i.e. when mobile styles are used to make the sub menus collapsible) + collapsibleHideDuration:0, // duration for hide animation for collapsible sub menus - matters only if collapsibleHideFunction:null + collapsibleHideFunction:function($ul, complete) { $ul.slideUp(200, complete); }, // custom function to use when hiding a collapsible sub menu + // (i.e. when mobile styles are used to make the sub menus collapsible) + showOnClick: false, // show the first-level sub menus onclick instead of onmouseover (i.e. mimic desktop app menus) (matters only for mouse input) + hideOnClick: true, // hide the sub menus on click/tap anywhere on the page + noMouseOver: false, // disable sub menus activation onmouseover (i.e. behave like in touch mode - use just mouse clicks) (matters only for mouse input) + keepInViewport: true, // reposition the sub menus if needed to make sure they always appear inside the viewport + keepHighlighted: true, // keep all ancestor items of the current sub menu highlighted (adds the 'highlighted' class to the A's) + markCurrentItem: false, // automatically add the 'current' class to the A element of the item linking to the current URL + markCurrentTree: true, // add the 'current' class also to the A elements of all ancestor items of the current item + rightToLeftSubMenus: false, // right to left display of the sub menus (check the CSS for the sub indicators' position) + bottomToTopSubMenus: false, // bottom to top display of the sub menus + overlapControlsInIE: true // make sure sub menus appear on top of special OS controls in IE (i.e. SELECT, OBJECT, EMBED, etc.) + }; + + return $; +})); diff --git a/jquery/jquery.ui-0.2.3.touch-punch.js b/jquery/jquery.ui-0.2.3.touch-punch.js new file mode 100644 index 0000000..16ce41d --- /dev/null +++ b/jquery/jquery.ui-0.2.3.touch-punch.js @@ -0,0 +1,180 @@ +/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +(function ($) { + + // Detect touch support + $.support.touch = 'ontouchend' in document; + + // Ignore browsers without touch support + if (!$.support.touch) { + return; + } + + var mouseProto = $.ui.mouse.prototype, + _mouseInit = mouseProto._mouseInit, + _mouseDestroy = mouseProto._mouseDestroy, + touchHandled; + + /** + * Simulate a mouse event based on a corresponding touch event + * @param {Object} event A touch event + * @param {String} simulatedType The corresponding mouse event + */ + function simulateMouseEvent (event, simulatedType) { + + // Ignore multi-touch events + if (event.originalEvent.touches.length > 1) { + return; + } + + event.preventDefault(); + + var touch = event.originalEvent.changedTouches[0], + simulatedEvent = document.createEvent('MouseEvents'); + + // Initialize the simulated mouse event using the touch event's coordinates + simulatedEvent.initMouseEvent( + simulatedType, // type + true, // bubbles + true, // cancelable + window, // view + 1, // detail + touch.screenX, // screenX + touch.screenY, // screenY + touch.clientX, // clientX + touch.clientY, // clientY + false, // ctrlKey + false, // altKey + false, // shiftKey + false, // metaKey + 0, // button + null // relatedTarget + ); + + // Dispatch the simulated event to the target element + event.target.dispatchEvent(simulatedEvent); + } + + /** + * Handle the jQuery UI widget's touchstart events + * @param {Object} event The widget element's touchstart event + */ + mouseProto._touchStart = function (event) { + + var self = this; + + // Ignore the event if another widget is already being handled + if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { + return; + } + + // Set the flag to prevent other widgets from inheriting the touch event + touchHandled = true; + + // Track movement to determine if interaction was a click + self._touchMoved = false; + + // Simulate the mouseover event + simulateMouseEvent(event, 'mouseover'); + + // Simulate the mousemove event + simulateMouseEvent(event, 'mousemove'); + + // Simulate the mousedown event + simulateMouseEvent(event, 'mousedown'); + }; + + /** + * Handle the jQuery UI widget's touchmove events + * @param {Object} event The document's touchmove event + */ + mouseProto._touchMove = function (event) { + + // Ignore event if not handled + if (!touchHandled) { + return; + } + + // Interaction was not a click + this._touchMoved = true; + + // Simulate the mousemove event + simulateMouseEvent(event, 'mousemove'); + }; + + /** + * Handle the jQuery UI widget's touchend events + * @param {Object} event The document's touchend event + */ + mouseProto._touchEnd = function (event) { + + // Ignore event if not handled + if (!touchHandled) { + return; + } + + // Simulate the mouseup event + simulateMouseEvent(event, 'mouseup'); + + // Simulate the mouseout event + simulateMouseEvent(event, 'mouseout'); + + // If the touch interaction did not move, it should trigger a click + if (!this._touchMoved) { + + // Simulate the click event + simulateMouseEvent(event, 'click'); + } + + // Unset the flag to allow other widgets to inherit the touch event + touchHandled = false; + }; + + /** + * A duck punch of the $.ui.mouse _mouseInit method to support touch events. + * This method extends the widget with bound touch event handlers that + * translate touch events to mouse events and pass them to the widget's + * original mouse event handling methods. + */ + mouseProto._mouseInit = function () { + + var self = this; + + // Delegate the touch handlers to the widget's element + self.element.bind({ + touchstart: $.proxy(self, '_touchStart'), + touchmove: $.proxy(self, '_touchMove'), + touchend: $.proxy(self, '_touchEnd') + }); + + // Call the original $.ui.mouse init method + _mouseInit.call(self); + }; + + /** + * Remove the touch event handlers + */ + mouseProto._mouseDestroy = function () { + + var self = this; + + // Delegate the touch handlers to the widget's element + self.element.unbind({ + touchstart: $.proxy(self, '_touchStart'), + touchmove: $.proxy(self, '_touchMove'), + touchend: $.proxy(self, '_touchEnd') + }); + + // Call the original $.ui.mouse destroy method + _mouseDestroy.call(self); + }; + +})(jQuery);
\ No newline at end of file diff --git a/jquery/sass/_round-corners-last-item.scss b/jquery/sass/_round-corners-last-item.scss new file mode 100644 index 0000000..70a8391 --- /dev/null +++ b/jquery/sass/_round-corners-last-item.scss @@ -0,0 +1,23 @@ +// Generate rules to round the corners of the last collapsible item + +@mixin sm-dox__round-corners-last-item($amount, $chainable: 'ul > li:last-child > ', $level: 4, $chain_prefix: '> li:last-child > ', $chain: '', $selector: '') { + $chain: $chain_prefix; + $selector: $chain + 'a, ' + $chain + '*:not(ul) a, ' + $chain + 'ul'; + @for $i from 1 through $level { + $chain: $chain + $chainable; + $selector: $selector + ', ' + $chain + ' a, ' + $chain + '*:not(ul) a, ' + $chain + ' ul'; + } + #{$selector} { + @include border-radius(0 0 $amount $amount); + } + // highlighted items, don't need rounding since their sub is open + $chain: $chain_prefix; + $selector: $chain + 'a.highlighted, ' + $chain + '*:not(ul) a.highlighted'; + @for $i from 1 through $level { + $chain: $chain + $chainable; + $selector: $selector + ', ' + $chain + ' a.highlighted, ' + $chain + '*:not(ul) a.highlighted'; + } + #{$selector} { + @include border-radius(0); + } +} diff --git a/jquery/sass/_sm-dox.scss b/jquery/sass/_sm-dox.scss new file mode 100644 index 0000000..81a4e74 --- /dev/null +++ b/jquery/sass/_sm-dox.scss @@ -0,0 +1,594 @@ +@import 'compass'; + +// This file is best viewed with Tab size 4 code indentation + + +// ----------------------------------------------------------------------------------------------------------------- +// 1. Theme Quick Settings (Variables) +// (for further control, you will need to dig into the actual CSS in 2.) +// ----------------------------------------------------------------------------------------------------------------- + + +// ---------------------------------------------------------- +// :: 1.1. Colors +// ---------------------------------------------------------- + +$sm-dox__white: #fff !default; +$sm-dox__gray: darken($sm-dox__white, 6.5%) !default; +$sm-dox__gray-dark: darken($sm-dox__white, 26.5%) !default; +$sm-dox__gray-darker: darken($sm-dox__white, 66.5%) !default; +$sm-dox__red: #D23600 !default; + +$sm-dox__box-shadow: rgba(0, 0, 0, 0.2) !default; + + +// ---------------------------------------------------------- +// :: 1.2. Breakpoints +// ---------------------------------------------------------- + +$sm-dox__desktop-vp: 768px !default; // switch from collapsible to desktop + + +// ---------------------------------------------------------- +// :: 1.3. Typography +// ---------------------------------------------------------- + +$sm-dox__font-family: "Lucida Grande", "Geneva", "Helvetica", Arial, sans-serif !default; +$sm-dox__font-size-base: 13px !default; +$sm-dox__font-size-small: 12px !default; +$sm-dox__line-height: 15px !default; + + +// ---------------------------------------------------------- +// :: 1.4. Borders +// ---------------------------------------------------------- + +$sm-dox__border-width: 1px !default; +$sm-dox__border-radius: 5px !default; + + +// ---------------------------------------------------------- +// :: 1.5. Collapsible main menu +// ---------------------------------------------------------- + +// Menu box +//$sm-dox__collapsible-bg: $sm-dox__gray !default; +$sm-dox__collapsible-bg: url('tab_b.png') !default; +$sm-dox__collapsible-border-radius: $sm-dox__border-radius !default; + +// Items +$sm-dox__collapsible-item-color: $sm-dox__gray-darker !default; +$sm-dox__collapsible-item-current-color: $sm-dox__red !default; +$sm-dox__collapsible-item-disabled-color: darken($sm-dox__gray, 20%) !default; +$sm-dox__collapsible-item-padding-vertical: 0px !default; +$sm-dox__collapsible-item-padding-horizontal: 12px !default; + +// Items separators +$sm-dox__collapsible-separators-color: rgba(0, 0, 0, 0.05) !default; + +// Toggle button (sub menu indicators) +$sm-dox__collapsible-toggle-bg: rgba(255, 255, 255, 0.5) !default; + + +// ---------------------------------------------------------- +// :: 1.6. Collapsible sub menus +// ---------------------------------------------------------- + +// Menu box +$sm-dox__collapsible-sub-bg: rgba(darken($sm-dox__gray, 30%), 0.1) !default; + +// Items text indentation for deeper levels +$sm-dox__collapsible-sub-item-indentation: 8px !default; + + +// ---------------------------------------------------------- +// :: 1.7. Desktop main menu +// ---------------------------------------------------------- + +// Menu box +//$sm-dox__desktop-bg: $sm-dox__gray !default; +$sm-dox__desktop-bg: url('tab_b.png') !default; +//$sm-dox__desktop-border-radius: 100px !default; +$sm-dox__desktop-padding-horizontal: 10px !default; + +// Items +$sm-dox__desktop-item-color: $sm-dox__gray_darker !default; +$sm-dox__desktop-item-hover-color: $sm-dox__red !default; +$sm-dox__desktop-item-current-color: $sm-dox__red !default; +$sm-dox__desktop-item-disabled-color: darken($sm-dox__gray, 20%) !default; +$sm-dox__desktop-item-padding-vertical: 0px !default; +$sm-dox__desktop-item-padding-horizontal: 12px !default; + +// Sub menu indicators +$sm-dox__desktop-arrow-size: 4px !default; // border-width +$sm-dox__desktop-arrow-color: $sm-dox__gray-darker !default; +$sm-dox__desktop-arrow-spacing: 4px !default; + +// Vertical menu box +$sm-dox__desktop-vertical-border-radius: $sm-dox__border-radius !default; +$sm-dox__desktop-vertical-padding-vertical: 10px !default; + +// Vertical items +$sm-dox__desktop-vertical-item-hover-bg: $sm-dox__white !default; +$sm-dox__desktop-vertical-item-padding-vertical: 10px !default; +$sm-dox__desktop-vertical-item-padding-horizontal: 20px !default; + +$sm-dox__main-text-color: #283A5D !default; +$sm-dox__main-highlight-color: white !default; + +// ---------------------------------------------------------- +// :: 1.8. Desktop sub menus +// ---------------------------------------------------------- + +// Menu box +$sm-dox__desktop-sub-bg: $sm-dox__white !default; +$sm-dox__desktop-sub-border-color: $sm-dox__gray-dark !default; +$sm-dox__desktop-sub-border-radius: $sm-dox__border-radius !default; +$sm-dox__desktop-sub-box-shadow: 0 5px 9px $sm-dox__box-shadow !default; +$sm-dox__desktop-sub-padding-vertical: 5px !default; +$sm-dox__desktop-sub-padding-horizontal: 0 !default; + +// Items +$sm-dox__desktop-sub-item-color: $sm-dox__gray_darker !default; +$sm-dox__desktop-sub-item-hover-color: $sm-dox__red !default; +$sm-dox__desktop-sub-item-hover-bg: $sm-dox__gray !default; +$sm-dox__desktop-sub-item-current-color: $sm-dox__red !default; +$sm-dox__desktop-sub-item-disabled-color: darken($sm-dox__white, 20%) !default; +$sm-dox__desktop-sub-item-padding-vertical: 10px !default; +$sm-dox__desktop-sub-item-padding-horizontal: 20px !default; + +// Sub menu indicators +$sm-dox__desktop-sub-arrow-size: 5px !default; // border-width + +// Sub menu carets +$sm-dox__desktop-sub-caret-size: 8px !default; // border-width +$sm-dox__desktop-sub-caret-left: 30px !default; + +$sm-dox__main-row-height: 36px !default; + +// ----------------------------------------------------------------------------------------------------------------- +// 2. Theme CSS +// ----------------------------------------------------------------------------------------------------------------- + + +// ---------------------------------------------------------- +// :: 2.1. Collapsible mode (mobile first) +// ---------------------------------------------------------- + +// calc item height and sub menus toggle button size +$sm-dox__item-height: $sm-dox__line-height + $sm-dox__collapsible-item-padding-vertical * 2; +// set toggle button size to 80% of item height +$sm-dox__toggle-size: floor($sm-dox__main-row-height * 0.8); +$sm-dox__toggle-spacing: floor($sm-dox__main-row-height * 0.1); + +// Main menu box +.sm-dox { + background-image: $sm-dox__collapsible-bg; + //@include border-radius($sm-dox__collapsible-border-radius); + + // Main menu items + a { + &, + &:focus, + &:hover, + &:active { + padding: $sm-dox__collapsible-item-padding-vertical $sm-dox__collapsible-item-padding-horizontal; + /* make room for the toggle button (sub indicator) */ + padding-right: $sm-dox__collapsible-item-padding-horizontal + $sm-dox__toggle-size + $sm-dox__toggle-spacing; + /* color: $sm-dox__collapsible-item-color; */ + font-family: $sm-dox__font-family; + font-size: $sm-dox__font-size-base; + font-weight: bold; + line-height: 36px; //$sm-dox__line-height; + text-decoration: none; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + color: $sm-dox__main-text-color; + outline: none; + } + + &:hover { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: $sm-dox__main-highlight-color; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + } + + &.current { + color: $sm-dox__collapsible-item-current-color; + } + + &.disabled { + color: $sm-dox__collapsible-item-disabled-color; + } + + // Toggle buttons (sub menu indicators) + span.sub-arrow { + position: absolute; + top: 50%; + margin-top: -(ceil($sm-dox__toggle-size / 2)); + left: auto; + right: $sm-dox__toggle-spacing; + width: $sm-dox__toggle-size; + height: $sm-dox__toggle-size; + overflow: hidden; + font: bold #{$sm-dox__font-size-small}/#{$sm-dox__toggle-size} monospace !important; + text-align: center; + text-shadow: none; + background: $sm-dox__collapsible-toggle-bg; + @include border-radius($sm-dox__border-radius); + } + // Change + to - on sub menu expand + &.highlighted span.sub-arrow:before { + display: block; + content: '-'; + } + } + + // round the corners of the first item + > li:first-child > a, > li:first-child > :not(ul) a { + @include border-radius($sm-dox__collapsible-border-radius $sm-dox__collapsible-border-radius 0 0); + } + // round the corners of the last item + @include sm-dox__round-corners-last-item($sm-dox__collapsible-border-radius); + + // Main menu items separators + //li { + // /*border-top: 1px solid $sm-dox__collapsible-separators-color;*/ + // border-top: 0; + //} + //> li:first-child { + // border-top: 0; + //} + + // Sub menus box + ul { + background: $sm-dox__collapsible-sub-bg; + + // Sub menus items + a { + &, + &:focus, + &:hover, + &:active { + font-size: $sm-dox__font-size-small; + // add indentation for sub menus text + border-left: $sm-dox__collapsible-sub-item-indentation solid transparent; + //line-height: $sm-dox__line-height; + line-height: $sm-dox__main-row-height; + text-shadow: none; + background-color: white; + background-image: none; + } + + &:hover { + // color: $sm-dox__collapsible-item-current-color; + // background-color: $sm-dox__gray; + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: $sm-dox__main-highlight-color; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + } + + } + + // Add indentation for sub menus text for deeper levels + @include sm-dox__sub-items-indentation($sm-dox__collapsible-sub-item-indentation); + } +} + + +// ---------------------------------------------------------- +// :: 2.2. Desktop mode +// ---------------------------------------------------------- + +@media (min-width: $sm-dox__desktop-vp) { + + /* Switch to desktop layout + ----------------------------------------------- + These transform the menu tree from + collapsible to desktop (navbar + dropdowns) + -----------------------------------------------*/ + /* start... (it's not recommended editing these rules) */ + .sm-dox ul{position:absolute;width:12em;} + .sm-dox li{float:left;} + .sm-dox.sm-rtl li{float:right;} + .sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none;} + .sm-dox a{white-space:nowrap;} + .sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal;} + .sm-dox .sm-nowrap > li > a,.sm-dox .sm-nowrap > li > :not(ul) a{white-space:nowrap;} + /* ...end */ + + // Main menu box + .sm-dox { + padding: 0 $sm-dox__desktop-padding-horizontal; + background-image: $sm-dox__desktop-bg; + line-height: 36px; + //@include border-radius($sm-dox__desktop-border-radius); + + // Main menu items + a { + // Sub menu indicators + span.sub-arrow { + top: 50%; + margin-top: -(ceil($sm-dox__desktop-arrow-size / 2)); + right: $sm-dox__desktop-item-padding-horizontal; + width: 0; + height: 0; + border-width: $sm-dox__desktop-arrow-size; + border-style: solid dashed dashed dashed; + border-color: $sm-dox__main-text-color transparent transparent transparent; + background: transparent; + @include border-radius(0); + } + + &, + &:focus, + &:active, + &:hover, + &.highlighted { + padding: $sm-dox__desktop-item-padding-vertical $sm-dox__desktop-item-padding-horizontal; + /*color: $sm-dox__desktop-item-color;*/ + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + @include border-radius(0 !important); + } + &:hover { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: $sm-dox__main-highlight-color; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + span.sub-arrow { + border-color: $sm-dox__main-highlight-color transparent transparent transparent; + } + } + + // Make room for the sub arrows + &.has-submenu { + padding-right: $sm-dox__desktop-item-padding-horizontal + $sm-dox__desktop-arrow-size * 2 + $sm-dox__desktop-arrow-spacing; + } + } + + // No main menu items separators + li { + border-top: 0; + } + + // First sub level carets + > li > ul:before, + > li > ul:after { + content: ''; + position: absolute; + top: -($sm-dox__desktop-sub-caret-size * 2 + $sm-dox__border-width * 2); + left: $sm-dox__desktop-sub-caret-left; + width: 0; + height: 0; + overflow: hidden; + border-width: ($sm-dox__desktop-sub-caret-size + $sm-dox__border-width); + border-style: dashed dashed solid dashed; + border-color: transparent transparent $sm-dox__gray-dark transparent; + } + > li > ul:after { + top: -($sm-dox__desktop-sub-caret-size * 2); + left: ($sm-dox__desktop-sub-caret-left + $sm-dox__border-width); + border-width: $sm-dox__desktop-sub-caret-size; + border-color: transparent transparent $sm-dox__desktop-sub-bg transparent; + } + + // Sub menus box + ul { + border: $sm-dox__border-width solid $sm-dox__gray-dark; + padding: $sm-dox__desktop-sub-padding-vertical $sm-dox__desktop-sub-padding-horizontal; + background: $sm-dox__desktop-sub-bg; + @include border-radius($sm-dox__desktop-sub-border-radius !important); + @include box-shadow($sm-dox__desktop-sub-box-shadow); + + // Sub menus items + a { + span.sub-arrow { + right: 8px; + top: 50%; + margin-top: -$sm-dox__desktop-sub-arrow-size; + border-width: $sm-dox__desktop-sub-arrow-size; + border-color: transparent transparent transparent $sm-dox__desktop-sub-item-color; + border-style: dashed dashed dashed solid; + } + + &, + &:hover, + &:focus, + &:active, + &.highlighted { + color: $sm-dox__desktop-sub-item-color; + background-image:none; + border: 0 !important; + color: $sm-dox__desktop-sub-item-color; + background-image:none; + } + + &:hover { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: $sm-dox__main-highlight-color; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + span.sub-arrow { + border-color: transparent transparent transparent $sm-dox__main-highlight-color; + } + } + } + } + + // Scrolling arrows containers for tall sub menus - test sub menu: "Sub test" -> "more..." in the default download package + span.scroll-up, + span.scroll-down { + position: absolute; + display: none; + visibility: hidden; + overflow: hidden; + background: $sm-dox__desktop-sub-bg; + height: 36px; + // width and position will be set automatically by the script + + &:hover { + background: $sm-dox__desktop-sub-item-hover-bg; + } + } + span.scroll-up:hover span.scroll-up-arrow { + border-color: transparent transparent $sm-dox__desktop-sub-item-hover-color transparent; + } + span.scroll-down:hover span.scroll-down-arrow { + border-color: $sm-dox__desktop-sub-item-hover-color transparent transparent transparent; + } + span.scroll-up-arrow { + position: absolute; + top: 0; + left: 50%; + margin-left: -6px; + // we will use one-side border to create a triangle so that we don't use a real background image, of course, you can use a real image if you like too + width: 0; + height: 0; + overflow: hidden; + border-width: 6px; // tweak size of the arrow + border-style: dashed dashed solid dashed; + border-color: transparent transparent $sm-dox__desktop-sub-item-color transparent; + } + span.scroll-down-arrow { + @extend span.scroll-up-arrow; + top: 8px; + border-style: solid dashed dashed dashed; + border-color: $sm-dox__desktop-sub-item-color transparent transparent transparent; + } + + + // Rigth-to-left + + // Main menu box + &.sm-rtl { + + // Main menu items + a { + + // Make room for the sub arrows + &.has-submenu { + padding-right: $sm-dox__desktop-item-padding-horizontal; + padding-left: $sm-dox__desktop-item-padding-horizontal + $sm-dox__desktop-arrow-size * 2 + $sm-dox__desktop-arrow-spacing; + } + + // Sub menu indicators + span.sub-arrow { + right: auto; + left: $sm-dox__desktop-item-padding-horizontal; + } + } + + // Vertical main menu items + &.sm-vertical { + a { + + // No need for additional room for the sub arrows + &.has-submenu { + padding: $sm-dox__desktop-vertical-item-padding-vertical $sm-dox__desktop-vertical-item-padding-horizontal; + } + + // Sub menu indicators + span.sub-arrow { + right: auto; + left: 8px; + border-style: dashed solid dashed dashed; + border-color: transparent $sm-dox__desktop-arrow-color transparent transparent; + } + } + } + + // First sub level carets + > li > ul:before { + left: auto; + right: $sm-dox__desktop-sub-caret-left; + } + > li > ul:after { + left: auto; + right: ($sm-dox__desktop-sub-caret-left + $sm-dox__border-width); + } + + // Sub menus box + ul { + a { + + // No need for additional room for the sub arrows + &.has-submenu { + padding: $sm-dox__desktop-sub-item-padding-vertical $sm-dox__desktop-sub-item-padding-horizontal !important; + } + + // Sub menu indicators + span.sub-arrow { + right: auto; + left: 8px; + border-style: dashed solid dashed dashed; + border-color: transparent $sm-dox__desktop-arrow-color transparent transparent; + } + } + } + } + + + // Vertical main menu + + // Main menu box + &.sm-vertical { + padding: $sm-dox__desktop-vertical-padding-vertical 0; + @include border-radius($sm-dox__desktop-vertical-border-radius); + + // Main menu items + a { + padding: $sm-dox__desktop-vertical-item-padding-vertical $sm-dox__desktop-vertical-item-padding-horizontal; + + &:hover, + &:focus, + &:active, + &.highlighted { + background: $sm-dox__desktop-vertical-item-hover-bg; + } + + &.disabled { + background-image: $sm-dox__desktop-bg; + } + + // Sub menu indicators + span.sub-arrow { + right: 8px; + top: 50%; + margin-top: -$sm-dox__desktop-sub-arrow-size; + border-width: $sm-dox__desktop-sub-arrow-size; + border-style: dashed dashed dashed solid; + border-color: transparent transparent transparent $sm-dox__desktop-arrow-color; + } + } + + // No sub level carets + > li > ul:before, + > li > ul:after { + display: none; + } + + // Sub menus box + ul { + + // Sub menus items + a { + padding: $sm-dox__desktop-sub-item-padding-vertical $sm-dox__desktop-sub-item-padding-horizontal; + + &:hover, + &:focus, + &:active, + &.highlighted { + background: $sm-dox__desktop-sub-item-hover-bg; + } + + &.disabled { + background: $sm-dox__desktop-sub-bg; + } + } + } + } + } +} diff --git a/jquery/sass/_sub-items-indentation.scss b/jquery/sass/_sub-items-indentation.scss new file mode 100644 index 0000000..5e43999 --- /dev/null +++ b/jquery/sass/_sub-items-indentation.scss @@ -0,0 +1,15 @@ +// Generate rules to indent sub menus text +// +// We'll use left border to avoid messing with the padding. + +@mixin sm-dox__sub-items-indentation($amount, $chainable: 'ul ', $level: 4, $chain: '') { + @for $i from 1 through $level { + $chain: $chain + $chainable; + #{$chain} a, + #{$chain} a:hover, + #{$chain} a:focus, + #{$chain} a:active { + border-left: ($amount * ($i + 1)) solid transparent; + } + } +} diff --git a/jquery/sass/sm-dox.scss b/jquery/sass/sm-dox.scss new file mode 100644 index 0000000..19fb444 --- /dev/null +++ b/jquery/sass/sm-dox.scss @@ -0,0 +1,5 @@ +@import '_sub-items-indentation.scss'; +@import '_round-corners-last-item.scss'; + +// the variables + the CSS +@import '_sm-dox.scss'; diff --git a/jquery/sm-core-css.css b/jquery/sm-core-css.css new file mode 100644 index 0000000..c586599 --- /dev/null +++ b/jquery/sm-core-css.css @@ -0,0 +1,10 @@ +.sm{position:relative;z-index:9999;} +.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0);} +.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right;} +.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0;} +.sm ul{display:none;} +.sm li,.sm a{position:relative;} +.sm a{display:block;} +.sm a.disabled{cursor:not-allowed;} +.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden;} +.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} diff --git a/qtools/Doxyfile b/qtools/Doxyfile index 2943270..1e4fcf7 100644 --- a/qtools/Doxyfile +++ b/qtools/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.4 +# Doxyfile 1.8.14 #--------------------------------------------------------------------------- # Project related configuration options @@ -10,6 +10,7 @@ PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = ../qtools_docs CREATE_SUBDIRS = YES +ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES @@ -34,12 +35,14 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 0 AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO @@ -62,7 +65,9 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = NO HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES @@ -84,17 +89,18 @@ FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text " WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = . INPUT_ENCODING = UTF-8 @@ -116,7 +122,7 @@ FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO @@ -127,16 +133,14 @@ REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = YES -CLANG_ASSISTED_PARSING = NO -CLANG_OPTIONS = #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 4 IGNORE_PREFIX = Q #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = @@ -150,7 +154,8 @@ HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = YES -HTML_DYNAMIC_SECTIONS = YES +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = YES DOCSET_FEEDNAME = "Doxygen generated docs" @@ -175,7 +180,7 @@ QHG_LOCATION = GENERATE_ECLIPSEHELP = YES ECLIPSE_DOC_ID = org.doxygen.qtools DISABLE_INDEX = NO -GENERATE_TREEVIEW = YES +GENERATE_TREEVIEW = NO ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO @@ -194,7 +199,7 @@ SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- -# configuration options related to the LaTeX output +# Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = YES LATEX_OUTPUT = @@ -205,6 +210,7 @@ PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES USE_PDFLATEX = YES @@ -212,8 +218,9 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = YES LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO #--------------------------------------------------------------------------- -# configuration options related to the RTF output +# Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = @@ -221,32 +228,33 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO #--------------------------------------------------------------------------- -# configuration options related to the man page output +# Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = MAN_EXTENSION = .3 +MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- -# configuration options related to the XML output +# Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- -# configuration options related to the DOCBOOK output +# Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output +# Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- -# configuration options related to the Perl module output +# Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO @@ -265,7 +273,7 @@ PREDEFINED = Q_EXPORT= EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ../qtools_docs/qtools.tag @@ -278,6 +286,7 @@ PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = +DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES DOT_NUM_THREADS = 0 @@ -292,8 +301,8 @@ UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES -CALL_GRAPH = YES -CALLER_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = svg @@ -301,6 +310,10 @@ INTERACTIVE_SVG = YES DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = YES diff --git a/qtools/qdatetime.cpp b/qtools/qdatetime.cpp index d0cc36e..88569f8 100644 --- a/qtools/qdatetime.cpp +++ b/qtools/qdatetime.cpp @@ -1158,6 +1158,29 @@ void QDateTime::setTime_t( uint secsSince1Jan1970UTC ) /*! + Sets the UTC date and time given the number of seconds that have passed + since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC). + + Note that Microsoft Windows supports only a limited range of values for + \a secsSince1Jan1970UTC. +*/ + +void QDateTime::setTimeUtc_t( uint secsSince1Jan1970UTC ) +{ + time_t tmp = (time_t) secsSince1Jan1970UTC; + tm *tM = gmtime( &tmp ); + if ( !tM ) { + d.jd = QDate::greg2jul( 1970, 1, 1 ); + t.ds = 0; + return; + } + d.jd = QDate::greg2jul( tM->tm_year + 1900, tM->tm_mon + 1, tM->tm_mday ); + t.ds = MSECS_PER_HOUR*tM->tm_hour + MSECS_PER_MIN*tM->tm_min + + 1000*tM->tm_sec; +} + + +/*! Returns the datetime as a string. The string format is "Sat May 20 03:40:13 1998". diff --git a/qtools/qdatetime.h b/qtools/qdatetime.h index 2d5869c..010ae73 100644 --- a/qtools/qdatetime.h +++ b/qtools/qdatetime.h @@ -173,6 +173,7 @@ public: void setDate( const QDate &date ) { d=date; } void setTime( const QTime &time ) { t=time; } void setTime_t( uint secsSince1Jan1970UTC ); + void setTimeUtc_t( uint secsSince1Jan1970UTC ); QString toString() const; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6763cf5..08c8439 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -36,6 +36,21 @@ file(GENERATE OUTPUT ${GENERATED_SRC}/version.cpp ) set_source_files_properties(${GENERATED_SRC}/version.cpp PROPERTIES GENERATED 1) +# configvalues.h +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h + DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py + OUTPUT ${GENERATED_SRC}/configvalues.h +) +set_source_files_properties(${GENERATED_SRC}/configvalues.h PROPERTIES GENERATED 1) + +# configvalues.cpp +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maps ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.cpp + DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py + OUTPUT ${GENERATED_SRC}/configvalues.cpp +) +set_source_files_properties(${GENERATED_SRC}/configvalues.cpp PROPERTIES GENERATED 1) # configoptions.cpp add_custom_command( @@ -85,31 +100,33 @@ add_custom_command( set_source_files_properties(${GENERATED_SRC}/layout_default.xml.h PROPERTIES GENERATED 1) # Targets for flex/bison generated files -FLEX_TARGET(scanner scanner.l ${GENERATED_SRC}/scanner.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PscannerYY") -FLEX_TARGET(code code.l ${GENERATED_SRC}/code.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PcodeYY") -FLEX_TARGET(pyscanner pyscanner.l ${GENERATED_SRC}/pyscanner.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PpyscannerYY") -FLEX_TARGET(pycode pycode.l ${GENERATED_SRC}/pycode.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PpycodeYY") -FLEX_TARGET(fortranscanner fortranscanner.l ${GENERATED_SRC}/fortranscanner.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PfortranscannerYY -i") -FLEX_TARGET(fortrancode fortrancode.l ${GENERATED_SRC}/fortrancode.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PfortrancodeYY -i") -FLEX_TARGET(vhdlcode vhdlcode.l ${GENERATED_SRC}/vhdlcode.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PvhdlcodeYY -i") -FLEX_TARGET(tclscanner tclscanner.l ${GENERATED_SRC}/tclscanner.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PtclscannerYY -i") -FLEX_TARGET(pre pre.l ${GENERATED_SRC}/pre.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PpreYY") -FLEX_TARGET(declinfo declinfo.l ${GENERATED_SRC}/declinfo.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PdeclinfoYY") -FLEX_TARGET(defargs defargs.l ${GENERATED_SRC}/defargs.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PdefargsYY") -FLEX_TARGET(doctokenizer doctokenizer.l ${GENERATED_SRC}/doctokenizer.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PdoctokenizerYY") -FLEX_TARGET(commentcnv commentcnv.l ${GENERATED_SRC}/commentcnv.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PcommentcnvYY") -FLEX_TARGET(commentscan commentscan.l ${GENERATED_SRC}/commentscan.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PcommentscanYY") -FLEX_TARGET(constexp constexp.l ${GENERATED_SRC}/constexp.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PconstexpYY") -FLEX_TARGET(xmlcode xmlcode.l ${GENERATED_SRC}/xmlcode.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PxmlcodeYY") -FLEX_TARGET(config config.l ${GENERATED_SRC}/config.cpp COMPILE_FLAGS "$(LEX_FLAGS) -PconfigYY") - -BISON_TARGET(vhdlparser vhdlparser.y ${GENERATED_SRC}/vhdlparser.cpp COMPILE_FLAGS "$(YACC_FLAGS) -l -p vhdlscannerYY") -BISON_TARGET(constexp constexp.y ${GENERATED_SRC}/ce_parse.cpp COMPILE_FLAGS "$(YACC_FLAGS) -l -p constexpYY") +FLEX_TARGET(scanner scanner.l ${GENERATED_SRC}/scanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(code code.l ${GENERATED_SRC}/code.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pyscanner pyscanner.l ${GENERATED_SRC}/pyscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pycode pycode.l ${GENERATED_SRC}/pycode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(fortranscanner fortranscanner.l ${GENERATED_SRC}/fortranscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(fortrancode fortrancode.l ${GENERATED_SRC}/fortrancode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(vhdlcode vhdlcode.l ${GENERATED_SRC}/vhdlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(tclscanner tclscanner.l ${GENERATED_SRC}/tclscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pre pre.l ${GENERATED_SRC}/pre.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(declinfo declinfo.l ${GENERATED_SRC}/declinfo.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(defargs defargs.l ${GENERATED_SRC}/defargs.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(doctokenizer doctokenizer.l ${GENERATED_SRC}/doctokenizer.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(commentcnv commentcnv.l ${GENERATED_SRC}/commentcnv.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(commentscan commentscan.l ${GENERATED_SRC}/commentscan.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(constexp constexp.l ${GENERATED_SRC}/constexp.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(xmlcode xmlcode.l ${GENERATED_SRC}/xmlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(sqlcode sqlcode.l ${GENERATED_SRC}/sqlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(configimpl configimpl.l ${GENERATED_SRC}/configimpl.cpp COMPILE_FLAGS "${LEX_FLAGS}") + +BISON_TARGET(constexp constexp.y ${GENERATED_SRC}/ce_parse.cpp COMPILE_FLAGS "${YACC_FLAGS}") add_library(doxycfg STATIC ${GENERATED_SRC}/lang_cfg.h - ${GENERATED_SRC}/config.cpp + ${GENERATED_SRC}/configvalues.h + ${GENERATED_SRC}/configimpl.cpp ${GENERATED_SRC}/configoptions.cpp + ${GENERATED_SRC}/configvalues.cpp portable.cpp portable_c.c ) @@ -121,6 +138,7 @@ add_library(_doxygen STATIC ${GENERATED_SRC}/layout_default.xml.h ${GENERATED_SRC}/version.cpp ${GENERATED_SRC}/ce_parse.h + ${GENERATED_SRC}/configvalues.h ${GENERATED_SRC}/resources.cpp # generated by flex/bison ${GENERATED_SRC}/scanner.cpp @@ -139,6 +157,7 @@ add_library(_doxygen STATIC ${GENERATED_SRC}/commentscan.cpp ${GENERATED_SRC}/constexp.cpp ${GENERATED_SRC}/xmlcode.cpp + ${GENERATED_SRC}/sqlcode.cpp # ${GENERATED_SRC}/ce_parse.cpp # diff --git a/src/arguments.cpp b/src/arguments.cpp index 095aa96..a828dab 100644 --- a/src/arguments.cpp +++ b/src/arguments.cpp @@ -33,6 +33,7 @@ ArgumentList *ArgumentList::deepCopy() const argList->pureSpecifier = pureSpecifier; argList->trailingReturnType = trailingReturnType; argList->isDeleted = isDeleted; + argList->refQualifier = refQualifier; return argList; } @@ -63,6 +64,7 @@ ArgumentList *ArgumentList::unmarshal(StorageIntf *s) result->pureSpecifier = unmarshalBool(s); result->trailingReturnType = unmarshalQCString(s); result->isDeleted = unmarshalBool(s); + result->refQualifier = (RefQualifierType)unmarshalInt(s); return result; } @@ -81,13 +83,13 @@ void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList) Argument *a; for (ali.toFirst();(a=ali.current());++ali) { - marshalQCString(s,a->attrib); - marshalQCString(s,a->type); - marshalQCString(s,a->canType); - marshalQCString(s,a->name); - marshalQCString(s,a->array); - marshalQCString(s,a->defval); - marshalQCString(s,a->docs); + marshalQCString(s,a->attrib); + marshalQCString(s,a->type); + marshalQCString(s,a->canType); + marshalQCString(s,a->name); + marshalQCString(s,a->array); + marshalQCString(s,a->defval); + marshalQCString(s,a->docs); marshalQCString(s,a->typeConstraint); } } @@ -96,6 +98,7 @@ void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList) marshalBool(s,argList->pureSpecifier); marshalQCString(s,argList->trailingReturnType); marshalBool(s,argList->isDeleted); + marshalInt(s,(int)argList->refQualifier); } } diff --git a/src/arguments.h b/src/arguments.h index 555b573..3af7134 100644 --- a/src/arguments.h +++ b/src/arguments.h @@ -73,6 +73,13 @@ struct Argument QCString typeConstraint; /*!< Used for Java generics: \<T extends C\> */ }; +enum RefQualifierType +{ + RefQualifierNone, + RefQualifierLValue, + RefQualifierRValue +}; + /*! \brief This class represents an function or template argument list. * * This class also stores some information about member that is typically @@ -87,7 +94,8 @@ class ArgumentList : public QList<Argument> constSpecifier(FALSE), volatileSpecifier(FALSE), pureSpecifier(FALSE), - isDeleted(FALSE) + isDeleted(FALSE), + refQualifier(RefQualifierNone) { setAutoDelete(TRUE); } /*! Destroys the argument list */ ~ArgumentList() {} @@ -105,6 +113,8 @@ class ArgumentList : public QList<Argument> QCString trailingReturnType; /*! method with =delete */ bool isDeleted; + /*! C++11 ref qualifier */ + RefQualifierType refQualifier; static ArgumentList *unmarshal(StorageIntf *s); static void marshal(StorageIntf *s,ArgumentList *argList); diff --git a/src/cite.cpp b/src/cite.cpp index 3125f35..d934d0a 100644 --- a/src/cite.cpp +++ b/src/cite.cpp @@ -43,18 +43,18 @@ void CiteDict::writeLatexBibliography(FTextStream &t) if (m_entries.isEmpty()) return; - QCString style = Config_getString("LATEX_BIB_STYLE"); + QCString style = Config_getString(LATEX_BIB_STYLE); if (style.isEmpty()) style="plain"; QCString unit; - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) unit = "section"; else unit = "chapter"; t << "% Bibliography\n" "\\newpage\n" "\\phantomsection\n"; - bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (!pdfHyperlinks) { t << "\\clearemptydoublepage\n"; @@ -62,7 +62,7 @@ void CiteDict::writeLatexBibliography(FTextStream &t) } t << "\\bibliographystyle{" << style << "}\n" "\\bibliography{"; - QStrList &citeDataList = Config_getList("CITE_BIB_FILES"); + QStrList &citeDataList = Config_getList(CITE_BIB_FILES); int i = 0; const char *bibdata = citeDataList.first(); while (bibdata) @@ -107,7 +107,7 @@ void CiteDict::clear() bool CiteDict::isEmpty() const { - QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES"); + QStrList &citeBibFiles = Config_getList(CITE_BIB_FILES); return (citeBibFiles.count()==0 || m_entries.isEmpty()); } @@ -120,7 +120,7 @@ void CiteDict::generatePage() const // 1. generate file with markers and citations to OUTPUT_DIRECTORY QFile f; - QCString outputDir = Config_getString("OUTPUT_DIRECTORY"); + QCString outputDir = Config_getString(OUTPUT_DIRECTORY); QCString citeListFile = outputDir+"/citelist.doc"; f.setName(citeListFile); if (!f.open(IO_WriteOnly)) @@ -154,7 +154,7 @@ void CiteDict::generatePage() const // so bibtex can find them without path (bibtex doesn't support paths or // filenames with spaces!) // Strictly not required when only latex is generated - QStrList &citeDataList = Config_getList("CITE_BIB_FILES"); + QStrList &citeDataList = Config_getList(CITE_BIB_FILES); QCString bibOutputDir = outputDir+"/"+bibTmpDir; QCString bibOutputFiles = ""; QDir thisDir; @@ -251,11 +251,11 @@ void CiteDict::generatePage() const // 8. for latex we just copy the bib files to the output and let // latex do this work. - if (Config_getBool("GENERATE_LATEX")) + if (Config_getBool(GENERATE_LATEX)) { // copy bib files to the latex output dir - QStrList &citeDataList = Config_getList("CITE_BIB_FILES"); - QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/"; + QStrList &citeDataList = Config_getList(CITE_BIB_FILES); + QCString latexOutputDir = Config_getString(LATEX_OUTPUT)+"/"; int i = 0; const char *bibdata = citeDataList.first(); while (bibdata) diff --git a/src/clangparser.cpp b/src/clangparser.cpp index 9913b12..67e754b 100644 --- a/src/clangparser.cpp +++ b/src/clangparser.cpp @@ -64,7 +64,7 @@ class ClangParser::Private static QCString detab(const QCString &s) { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); GrowBuf out; int size = s.length(); const char *data = s.data(); @@ -157,9 +157,9 @@ void ClangParser::determineInputFilesInSameTu(QStrList &files) void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit) { - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); - static QStrList &includePath = Config_getList("INCLUDE_PATH"); - static QStrList clangOptions = Config_getList("CLANG_OPTIONS"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); + static QStrList &includePath = Config_getList(INCLUDE_PATH); + static QStrList clangOptions = Config_getList(CLANG_OPTIONS); if (!clangAssistedParsing) return; //printf("ClangParser::start(%s)\n",fileName); p->fileName = fileName; @@ -230,7 +230,7 @@ void ClangParser::start(const char *fileName,QStrList &filesInTranslationUnit) // provide the input and and its dependencies as unsaved files so we can // pass the filtered versions argv[argc++]=strdup(fileName); - static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); + static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); //printf("source %s ----------\n%s\n-------------\n\n", // fileName,p->source.data()); uint numUnsavedFiles = filesInTranslationUnit.count()+1; @@ -339,7 +339,7 @@ void ClangParser::switchToFile(const char *fileName) void ClangParser::finish() { - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (!clangAssistedParsing) return; if (p->tu) { @@ -381,7 +381,7 @@ QCString ClangParser::lookup(uint line,const char *symbol) //printf("ClangParser::lookup(%d,%s)\n",line,symbol); QCString result; if (symbol==0) return result; - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (!clangAssistedParsing) return result; int sl = strlen(symbol); @@ -615,7 +615,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d, const char *text) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); diff --git a/src/classdef.cpp b/src/classdef.cpp index 7d9e118..111d59b 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -62,6 +62,15 @@ class ClassDefImpl */ QCString fileName; + /*! file name used for the list of all members */ + QCString memberListFileName; + + /*! file name used for the collaboration diagram */ + QCString collabFileName; + + /*! file name used for the inheritance graph */ + QCString inheritFileName; + /*! Include information about the header file should be included * in the documentation. 0 by default, set by setIncludeFile(). */ @@ -221,7 +230,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name, constraintClassDict=0; memberGroupSDict = 0; innerClasses = 0; - subGrouping=Config_getBool("SUBGROUPING"); + subGrouping=Config_getBool(SUBGROUPING); templateInstances = 0; variableInstances = 0; templateMaster =0; @@ -232,7 +241,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name, membersMerged = FALSE; categoryOf = 0; usedOnly = FALSE; - isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS"); + isSimple = Config_getBool(INLINE_SIMPLE_STRUCTS); arrowOperator = 0; taggedInnerClasses = 0; tagLessRef = 0; @@ -296,6 +305,13 @@ ClassDef::ClassDef( m_impl->compType = ct; m_impl->isJavaEnum = isJavaEnum; m_impl->init(defFileName,name(),compoundTypeString(),fName); + m_impl->memberListFileName = convertNameToFile(compoundTypeString()+name()+"-members"); + m_impl->collabFileName = convertNameToFile(m_impl->fileName+"_coll_graph"); + m_impl->inheritFileName = convertNameToFile(m_impl->fileName+"_inherit_graph"); + if (!lref) + { + m_impl->fileName = convertNameToFile(m_impl->fileName); + } } // destroy the class definition @@ -306,14 +322,14 @@ ClassDef::~ClassDef() QCString ClassDef::getMemberListFileName() const { - return convertNameToFile(compoundTypeString()+name()+"-members"); + return m_impl->memberListFileName; } QCString ClassDef::displayName(bool includeScope) const { - //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool optimizeOutputForJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); SrcLangExt lang = getLanguage(); - //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); QCString n; if (lang==SrcLangExt_VHDL) { @@ -374,7 +390,7 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p, Specifier s,const char *t) { //printf("*** insert sub class %s into %s\n",cd->name().data(),name().data()); - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); if (!extractPrivate && cd->protection()==Private) return; if (m_impl->inheritedBy==0) { @@ -557,7 +573,9 @@ void ClassDef::internalInsertMember(MemberDef *md, break; case Public: addMemberToList(MemberListType_pubTypes,md,TRUE); - isSimple=QCString(md->typeString()).find(")(")==-1; + isSimple=!md->isEnumerate() && + !md->isEnumValue() && + QCString(md->typeString()).find(")(")==-1; // func ptr typedef break; case Private: addMemberToList(MemberListType_priTypes,md,TRUE); @@ -682,7 +700,7 @@ void ClassDef::internalInsertMember(MemberDef *md, //::addClassMemberNameToIndex(md); if (addToAllList && - !(Config_getBool("HIDE_FRIEND_COMPOUNDS") && + !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && md->isFriend() && (QCString(md->typeString())=="friend class" || QCString(md->typeString())=="friend struct" || @@ -718,7 +736,7 @@ void ClassDef::insertMember(MemberDef *md) // compute the anchors for all members void ClassDef::computeAnchors() { - //ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0; + //ClassDef *context = Config_getBool(INLINE_INHERITED_MEMB) ? this : 0; //const char *letters = "abcdefghijklmnopqrstuvwxyz0123456789"; QListIterator<MemberList> mli(m_impl->memberLists); MemberList *ml; @@ -938,6 +956,10 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag) if (hasBriefDescription()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.generateDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); ol.pushGeneratorState(); @@ -958,7 +980,7 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag) void ClassDef::writeDetailedDocumentationBody(OutputList &ol) { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); ol.startTextBlock(); @@ -1006,8 +1028,8 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol) bool ClassDef::hasDetailedDescription() const { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty() || (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef())); @@ -1103,7 +1125,7 @@ void ClassDef::showUsedFiles(OutputList &ol) ol.startItemListItem(); QCString path=fd->getPath(); - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { ol.docify(stripFromPath(path)); } @@ -1184,8 +1206,8 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) const int count=countInheritanceNodes(); bool renderDiagram = FALSE; - if (Config_getBool("HAVE_DOT") && - (Config_getBool("CLASS_DIAGRAMS") || Config_getBool("CLASS_GRAPH"))) + if (Config_getBool(HAVE_DOT) && + (Config_getBool(CLASS_DIAGRAMS) || Config_getBool(CLASS_GRAPH))) // write class diagram using dot { DotClassGraph inheritanceGraph(this,DotNode::Inheritance); @@ -1200,7 +1222,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) renderDiagram = TRUE; } } - else if (Config_getBool("CLASS_DIAGRAMS") && count>0) + else if (Config_getBool(CLASS_DIAGRAMS) && count>0) // write class diagram using build-in generator { ClassDiagram diagram(this); // create a diagram of this class. @@ -1305,7 +1327,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) void ClassDef::writeCollaborationGraph(OutputList &ol) { - if (Config_getBool("HAVE_DOT") /*&& Config_getBool("COLLABORATION_GRAPH")*/) + if (Config_getBool(HAVE_DOT) /*&& Config_getBool(COLLABORATION_GRAPH)*/) { DotClassGraph usageImplGraph(this,DotNode::Collaboration); if (!usageImplGraph.isTrivial()) @@ -1340,7 +1362,7 @@ QCString ClassDef::includeStatement() const void ClassDef::writeIncludeFiles(OutputList &ol) { - if (m_impl->incInfo /*&& Config_getBool("SHOW_INCLUDE_FILES")*/) + if (m_impl->incInfo /*&& Config_getBool(SHOW_INCLUDE_FILES)*/) { QCString nm=m_impl->incInfo->includeName.isEmpty() ? (m_impl->incInfo->fileDef ? @@ -1389,7 +1411,7 @@ void ClassDef::writeAllMembersLink(OutputList &ol) { // write link to list of all members (HTML only) if (m_impl->allMemberNameInfoSDict && - !Config_getBool("OPTIMIZE_OUTPUT_FOR_C") + !Config_getBool(OPTIMIZE_OUTPUT_FOR_C) ) { ol.pushGeneratorState(); @@ -1448,7 +1470,7 @@ void ClassDef::writeInlineClasses(OutputList &ol) void ClassDef::startMemberDocumentation(OutputList &ol) { //printf("%s: ClassDef::startMemberDocumentation()\n",name().data()); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.disable(OutputGenerator::Html); Doxygen::suppressDocWarnings = TRUE; @@ -1458,7 +1480,7 @@ void ClassDef::startMemberDocumentation(OutputList &ol) void ClassDef::endMemberDocumentation(OutputList &ol) { //printf("%s: ClassDef::endMemberDocumentation()\n",name().data()); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.enable(OutputGenerator::Html); Doxygen::suppressDocWarnings = FALSE; @@ -1474,7 +1496,7 @@ void ClassDef::startMemberDeclarations(OutputList &ol) void ClassDef::endMemberDeclarations(OutputList &ol) { //printf("%s: ClassDef::endMemberDeclarations()\n",name().data()); - static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB"); + static bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB); if (!inlineInheritedMembers && countAdditionalInheritedMembers()>0) { ol.startMemberHeader("inherited"); @@ -1493,7 +1515,7 @@ void ClassDef::writeAuthorSection(OutputList &ol) ol.startGroupHeader(); ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME))); ol.popGeneratorState(); } @@ -1523,7 +1545,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol) } else if (lde->kind()==LayoutDocEntry::ClassAllMembersLink && m_impl->allMemberNameInfoSDict && - !Config_getBool("OPTIMIZE_OUTPUT_FOR_C") + !Config_getBool(OPTIMIZE_OUTPUT_FOR_C) ) { ol.writeSummaryLink(getMemberListFileName(),"all-members-list",theTranslator->trListOfAllMembers(),first); @@ -1593,7 +1615,7 @@ void ClassDef::writeTagFile(FTextStream &tagFile) ClassDef *cd=ibcd->classDef; if (cd && cd->isLinkable()) { - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + if (!Config_getString(GENERATE_TAGFILE).isEmpty()) { tagFile << " <base"; if (ibcd->prot==Protected) @@ -1690,7 +1712,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol) ol.disableAllBut(OutputGenerator::Html); { // only HTML only ol.writeAnchor(0,anchor()); - ol.startMemberDoc(0,0,0,0,FALSE); + ol.startMemberDoc(0,0,anchor(),name(),1,1,FALSE); ol.startMemberDocName(FALSE); ol.parseText(s); ol.endMemberDocName(); @@ -1793,9 +1815,9 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor) { // TODO: clean up this mess by moving it to // the output generators... - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool rtfHyperlinks = Config_getBool("RTF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool rtfHyperlinks = Config_getBool(RTF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); // HTML only ol.pushGeneratorState(); @@ -1834,9 +1856,9 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor) bool ClassDef::visibleInParentsDeclList() const { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); - static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); - static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); + static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES); + static bool extractLocalClasses = Config_getBool(EXTRACT_LOCAL_CLASSES); bool linkable = isLinkable(); return (!isAnonymous() && !isExtension() && (protection()!=::Private || extractPrivate) && @@ -1846,10 +1868,10 @@ bool ClassDef::visibleInParentsDeclList() const void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames) { - //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + //static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); SrcLangExt lang = getLanguage(); - if (visibleInParentsDeclList() && hasDocumentation()) + if (visibleInParentsDeclList()) { if (!found) // first class { @@ -1906,7 +1928,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade ol.endMemberItem(); // add the brief description if available - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, briefDescription(),FALSE,FALSE,0,TRUE,FALSE); @@ -2102,7 +2124,7 @@ QCString ClassDef::title() const } else { - if (Config_getBool("HIDE_COMPOUND_REFERENCE")) + if (Config_getBool(HIDE_COMPOUND_REFERENCE)) { pageTitle = displayName(); } @@ -2119,9 +2141,9 @@ QCString ClassDef::title() const // write all documentation for this class void ClassDef::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + //static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); QCString pageTitle = title(); startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView); @@ -2143,7 +2165,7 @@ void ClassDef::writeDocumentation(OutputList &ol) endFileWithNavPath(this,ol); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { writeMemberPages(ol); } @@ -2174,7 +2196,7 @@ void ClassDef::writeMemberPages(OutputList &ol) void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { - static bool createSubDirs=Config_getBool("CREATE_SUBDIRS"); + static bool createSubDirs=Config_getBool(CREATE_SUBDIRS); ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); @@ -2249,9 +2271,9 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol) // write the list of all (inherited) members for this class void ClassDef::writeMemberList(OutputList &ol) { - static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); - //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool cOpt = Config_getBool(OPTIMIZE_OUTPUT_FOR_C); + //static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); if (m_impl->allMemberNameInfoSDict==0 || cOpt) return; // only for HTML ol.pushGeneratorState(); @@ -2354,7 +2376,7 @@ void ClassDef::writeMemberList(OutputList &ol) memberWritten=TRUE; } else if (!cd->isArtificial() && - !Config_getBool("HIDE_UNDOC_MEMBERS") && + !Config_getBool(HIDE_UNDOC_MEMBERS) && (protectionLevelVisible(md->protection()) || md->isFriend()) ) // no documentation, // generate link to the class instead. @@ -2426,7 +2448,7 @@ void ClassDef::writeMemberList(OutputList &ol) if ( (prot!=Public || (virt!=Normal && getLanguage()!=SrcLangExt_ObjC) || md->isFriend() || md->isRelated() || md->isExplicit() || - md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) || + md->isMutable() || (md->isInline() && Config_getBool(INLINE_INFO)) || md->isSignal() || md->isSlot() || (getLanguage()==SrcLangExt_IDL && (md->isOptional() || md->isAttribute() || md->isUNOProperty())) || @@ -2444,7 +2466,7 @@ void ClassDef::writeMemberList(OutputList &ol) else if (md->isRelated()) sl.append("related"); else { - if (Config_getBool("INLINE_INFO") && md->isInline()) + if (Config_getBool(INLINE_INFO) && md->isInline()) sl.append("inline"); if (md->isExplicit()) sl.append("explicit"); if (md->isMutable()) sl.append("mutable"); @@ -2529,7 +2551,7 @@ bool ClassDef::hasExamples() const void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &type) { //printf("addTypeContraint(%s,%s)\n",type.data(),typeConstraint.data()); - static bool hideUndocRelation = Config_getBool("HIDE_UNDOC_RELATIONS"); + static bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS); if (typeConstraint.isEmpty() || type.isEmpty()) return; ClassDef *cd = getResolvedClass(this,getFileDef(),typeConstraint); if (cd==0 && !hideUndocRelation) @@ -2706,9 +2728,9 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup, /*! a link to this class is possible within this project */ bool ClassDef::isLinkableInProject() const { - static bool extractLocal = Config_getBool("EXTRACT_LOCAL_CLASSES"); - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); - static bool hideUndoc = Config_getBool("HIDE_UNDOC_CLASSES"); + static bool extractLocal = Config_getBool(EXTRACT_LOCAL_CLASSES); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); + static bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES); if (m_impl->templateMaster) { return m_impl->templateMaster->isLinkableInProject(); @@ -2742,9 +2764,9 @@ bool ClassDef::isLinkable() const /*! the class is visible in a class diagram, or class hierarchy */ bool ClassDef::isVisibleInHierarchy() { - static bool allExternals = Config_getBool("ALLEXTERNALS"); - static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); + static bool allExternals = Config_getBool(ALLEXTERNALS); + static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); return // show all classes or a subclass is visible (allExternals || hasNonReferenceSuperClass()) && @@ -2845,15 +2867,15 @@ void ClassDef::mergeMembers() { if (m_impl->membersMerged) return; - //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool optimizeOutputForJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + //static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); SrcLangExt lang = getLanguage(); QCString sep=getLanguageSpecificSeparator(lang,TRUE); int sepLen = sep.length(); m_impl->membersMerged=TRUE; //printf(" mergeMembers for %s\n",name().data()); - bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" ); + bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB); if (baseClasses()) { //printf(" => has base classes!\n"); @@ -3094,7 +3116,7 @@ void ClassDef::mergeMembers() */ void ClassDef::mergeCategory(ClassDef *category) { - static bool extractLocalMethods = Config_getBool("EXTRACT_LOCAL_METHODS"); + static bool extractLocalMethods = Config_getBool(EXTRACT_LOCAL_METHODS); bool makePrivate = category->isLocal(); // in case extract local methods is not enabled we don't add the methods // of the category in case it is defined in the .m file. @@ -3233,8 +3255,8 @@ void ClassDef::mergeCategory(ClassDef *category) void ClassDef::addUsedClass(ClassDef *cd,const char *accessName, Protection prot) { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); - static bool umlLook = Config_getBool("UML_LOOK"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); + static bool umlLook = Config_getBool(UML_LOOK); if (prot==Private && !extractPrivate) return; //printf("%s::addUsedClass(%s,%s)\n",name().data(),cd->name().data(),accessName); if (m_impl->usesImplClassDict==0) @@ -3267,8 +3289,8 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName, void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName, Protection prot) { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); - static bool umlLook = Config_getBool("UML_LOOK"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); + static bool umlLook = Config_getBool(UML_LOOK); if (prot==Private && !extractPrivate) return; //printf("%s::addUsedByClass(%s,%s)\n",name().data(),cd->name().data(),accessName); if (m_impl->usedByImplClassDict==0) @@ -3532,8 +3554,8 @@ QCString ClassDef::compoundTypeString() const QCString ClassDef::getOutputFileBase() const { - static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); - static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); + static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS); if (!Doxygen::generatingXmlOutput) { Definition *scope=0; @@ -3564,40 +3586,12 @@ QCString ClassDef::getOutputFileBase() const // point to the template of which this class is an instance return m_impl->templateMaster->getOutputFileBase(); } - else if (isReference()) - { - // point to the external location - return m_impl->fileName; - } - else - { - // normal locally defined class - return convertNameToFile(m_impl->fileName); - } + return m_impl->fileName; } QCString ClassDef::getInstanceOutputFileBase() const { - if (isReference()) - { - return m_impl->fileName; - } - else - { - return convertNameToFile(m_impl->fileName); - } -} - -QCString ClassDef::getFileBase() const -{ - if (m_impl->templateMaster) - { - return m_impl->templateMaster->getFileBase(); - } - else - { - return m_impl->fileName; - } + return m_impl->fileName; } QCString ClassDef::getSourceFileBase() const @@ -3855,8 +3849,8 @@ void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const QCString ClassDef::qualifiedNameWithTemplateParameters( QList<ArgumentList> *actualParams,int *actualParamIndex) const { - //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); + //static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES); //printf("qualifiedNameWithTemplateParameters() localName=%s\n",localName().data()); QCString scName; Definition *d=getOuterScope(); @@ -4034,8 +4028,8 @@ MemberList *ClassDef::getMemberList(MemberListType lt) void ClassDef::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); - static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); + static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); MemberList *ml = createMemberList(lt); ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs)); ml->append(md); @@ -4090,7 +4084,7 @@ int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom, if (lt2!=1) count+=mg->countGroupedInheritedMembers((MemberListType)lt2); } } - static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB"); + static bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB); if (!inlineInheritedMembers) // show inherited members as separate lists { count+=countInheritedDecMembers(lt,inheritedFrom,invert,showAlways,visitedClasses); @@ -4324,7 +4318,7 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC //printf(" writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers()); ml2->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt); } - static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB"); + static bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB); if (!inlineInheritedMembers) // show inherited members as separate lists { QPtrDict<void> visited(17); @@ -4613,15 +4607,9 @@ QCString ClassDef::anchor() const // point to the template of which this class is an instance anc = m_impl->templateMaster->getOutputFileBase(); } - else if (isReference()) - { - // point to the external location - anc = m_impl->fileName; - } else { - // normal locally defined class - anc = convertNameToFile(m_impl->fileName); + anc = m_impl->fileName; } } return anc; @@ -4629,8 +4617,8 @@ QCString ClassDef::anchor() const bool ClassDef::isEmbeddedInOuterScope() const { - static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); - static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); + static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS); Definition *container = getOuterScope(); @@ -4750,3 +4738,14 @@ bool ClassDef::isAnonymous() const { return m_impl->isAnonymous; } + +QCString ClassDef::collaborationGraphFileName() const +{ + return m_impl->collabFileName; +} + +QCString ClassDef::inheritanceGraphFileName() const +{ + return m_impl->inheritFileName; +} + diff --git a/src/classdef.h b/src/classdef.h index 6cdd491..524bb96 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -108,7 +108,6 @@ class ClassDef : public Definition /** Returns the unique base name (without extension) of the class's file on disk */ QCString getOutputFileBase() const; QCString getInstanceOutputFileBase() const; - QCString getFileBase() const; /** Returns the base name for the source code file */ QCString getSourceFileBase() const; @@ -130,6 +129,12 @@ class ClassDef : public Definition /** returns TRUE if this class has a non-empty detailed description */ bool hasDetailedDescription() const; + + /** returns the file name to use for the collaboration graph */ + QCString collaborationGraphFileName() const; + + /** returns the file name to use for the inheritance graph */ + QCString inheritanceGraphFileName() const; /** Returns the name as it is appears in the documentation */ QCString displayName(bool includeScope=TRUE) const; diff --git a/src/classlist.cpp b/src/classlist.cpp index 81b7d26..c752fd3 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -36,7 +36,7 @@ ClassList::~ClassList() static int compItems(const ClassDef *c1,const ClassDef *c2) { - static bool b = Config_getBool("SORT_BY_SCOPE_NAME"); + static bool b = Config_getBool(SORT_BY_SCOPE_NAME); if (b) { return qstricmp(c1->name(), c2->name()); @@ -64,8 +64,8 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) : bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const { - static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); - static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); + static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES); + static bool extractLocalClasses = Config_getBool(EXTRACT_LOCAL_CLASSES); if (count()>0) { ClassSDict::Iterator sdi(*this); @@ -94,7 +94,7 @@ bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); if (count()>0) { ClassSDict::Iterator sdi(*this); @@ -118,10 +118,10 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f void ClassSDict::writeDocumentation(OutputList &ol,Definition * container) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); - static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); - static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); + static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS); if (!inlineGroupedClasses && !inlineSimpleClasses) return; if (count()>0) diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index 6784b3e..2c8effc 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -88,6 +88,8 @@ CommandMap cmdMap[] = { "secreflist", CMD_SECREFLIST }, { "section", CMD_SECTION }, { "snippet", CMD_SNIPPET }, + { "snippetdoc", CMD_SNIPPETDOC }, + { "snippetlineno", CMD_SNIPWITHLINES }, { "subpage", CMD_SUBPAGE }, { "subsection", CMD_SUBSECTION }, { "subsubsection", CMD_SUBSUBSECTION }, @@ -130,6 +132,7 @@ CommandMap cmdMap[] = { "manonly", CMD_MANONLY }, { "endmanonly", CMD_ENDMANONLY }, { "includelineno", CMD_INCWITHLINES }, + { "includedoc", CMD_INCLUDEDOC }, { "inheritdoc", CMD_INHERITDOC }, { "mscfile", CMD_MSCFILE }, { "rtfonly", CMD_RTFONLY }, diff --git a/src/cmdmapper.h b/src/cmdmapper.h index 92c906a..8cb529d 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -133,7 +133,10 @@ enum CommandType CMD_SETSCOPE = 103, CMD_PUNT = 104, CMD_PLUS = 105, - CMD_MINUS = 106 + CMD_MINUS = 106, + CMD_INCLUDEDOC = 107, + CMD_SNIPPETDOC = 108, + CMD_SNIPWITHLINES= 109 }; enum HtmlTagType @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="codeYY" + %{ /* @@ -109,6 +111,7 @@ static int g_lastSpecialCContext; static int g_lastStringContext; static int g_lastSkipCppContext; static int g_lastVerbStringContext; +static int g_lastObjCCallContext; static int g_memCallContext; static int g_lastCContext; static int g_skipInlineInitContext; @@ -132,6 +135,7 @@ struct ObjCCallCtx int id; QCString methodName; QCString objectTypeOrName; + QGString comment; ClassDef *objectType; MemberDef *objectVar; MemberDef *method; @@ -146,11 +150,13 @@ static int g_currentCtxId=0; static int g_currentNameId=0; static int g_currentObjId=0; static int g_currentWordId=0; +static int g_currentCommentId=0; static QStack<ObjCCallCtx> g_contextStack; static QIntDict<ObjCCallCtx> g_contextDict; static QIntDict<QCString> g_nameDict; static QIntDict<QCString> g_objectDict; static QIntDict<QCString> g_wordDict; +static QIntDict<QCString> g_commentDict; static int g_braceCount=0; static void saveObjCContext(); @@ -600,7 +606,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d, const char *text) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); @@ -858,42 +864,51 @@ static bool getLinkInScope(const QCString &c, // scope GroupDef *gd; DBG_CTX((stderr,"getLinkInScope: trying `%s'::`%s' varOnly=%d\n",c.data(),m.data(),varOnly)); if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) && - md->isLinkable() && (!varOnly || md->isVariable())) + (!varOnly || md->isVariable())) { - //printf("found it %s!\n",md->qualifiedName().data()); - if (g_exampleBlock) + if (md->isLinkable()) { - QCString anchor; - anchor.sprintf("a%d",g_anchorCount); - //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(), - // g_exampleFile.data()); - if (md->addExample(anchor,g_exampleName,g_exampleFile)) + //printf("found it %s!\n",md->qualifiedName().data()); + if (g_exampleBlock) { - ol.writeCodeAnchor(anchor); - g_anchorCount++; + QCString anchor; + anchor.sprintf("a%d",g_anchorCount); + //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(), + // g_exampleFile.data()); + if (md->addExample(anchor,g_exampleName,g_exampleFile)) + { + ol.writeCodeAnchor(anchor); + g_anchorCount++; + } } - } - - Definition *d = md->getOuterScope()==Doxygen::globalScope ? - md->getFileDef() : md->getOuterScope(); - if (md->getGroupDef()) d = md->getGroupDef(); - if (d && d->isLinkable()) - { - g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope())); - //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n", - // g_currentDefinition,g_currentMemberDef,g_insideBody); - if (g_currentDefinition && g_currentMemberDef && - md!=g_currentMemberDef && g_insideBody && g_collectXRefs) + Definition *d = md->getOuterScope()==Doxygen::globalScope ? + md->getFileDef() : md->getOuterScope(); + if (md->getGroupDef()) d = md->getGroupDef(); + if (d && d->isLinkable()) { - addDocCrossReference(g_currentMemberDef,md); + g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope())); + //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n", + // g_currentDefinition,g_currentMemberDef,g_insideBody); + + if (g_currentDefinition && g_currentMemberDef && + md!=g_currentMemberDef && g_insideBody && g_collectXRefs) + { + addDocCrossReference(g_currentMemberDef,md); + } + //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data()); + + writeMultiLineCodeLink(ol,md, text ? text : memberText); + addToSearchIndex(text ? text : memberText); + return TRUE; } - //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data()); - - writeMultiLineCodeLink(ol,md, text ? text : memberText); - addToSearchIndex(text ? text : memberText); - return TRUE; - } + } + else // found member, but is is not linkable, so make sure content inside is not assign + // to the previous member, see bug762760 + { + DBG_CTX((stderr,"unlinkable member %s\n",md->name().data())); + g_currentMemberDef = 0; + } } return FALSE; } @@ -1705,6 +1720,21 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx) codifyLines(pWord->data()); } } + else if (nc=='d') // comment block + { + nc=*p++; + QCString refIdStr; + while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; } + p--; + int refId=refIdStr.toInt(); + QCString *pComment = g_commentDict.find(refId); + if (pComment) + { + startFontClass("comment"); + codifyLines(pComment->data()); + endFontClass(); + } + } else // illegal marker { ASSERT(!"invalid escape sequence"); @@ -1717,7 +1747,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx) s[0]=c;s[1]=0; codifyLines(s); } - } + } //printf("%s %s]\n",ctx->objectTypeOrName.data(),ctx->methodName.data()); //printf("}=(type='%s',name='%s')", // ctx->objectTypeOrName.data(), @@ -1754,6 +1784,15 @@ static QCString escapeWord(const char *s) return result; } +static QCString escapeComment(const char *s) +{ + QCString result; + result.sprintf("$d%d",g_currentCommentId); + g_commentDict.insert(g_currentCommentId,new QCString(s)); + g_currentCommentId++; + return result; +} + /* ----------------------------------------------------------------- */ #undef YY_INPUT @@ -1827,6 +1866,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" %x ObjCCall %x ObjCMName %x ObjCSkipStr +%x ObjCCallComment %x OldStyleArgs %x UsingName %x RawString @@ -2526,7 +2566,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" generateClassOrGlobalLink(*g_code,yytext); g_name+=yytext; } -<Body>{SCOPENAME}/{BN}*[;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" +<Body>{SCOPENAME}/{BN}*[:;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" , or int var : 5; addType(); // changed this to generateFunctionLink, see bug 624514 //generateClassOrGlobalLink(*g_code,yytext,FALSE,TRUE); @@ -2723,10 +2763,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" g_nameDict.setAutoDelete(TRUE); g_objectDict.setAutoDelete(TRUE); g_wordDict.setAutoDelete(TRUE); + g_commentDict.setAutoDelete(TRUE); g_contextDict.clear(); g_nameDict.clear(); g_objectDict.clear(); g_wordDict.clear(); + g_commentDict.clear(); g_currentCtxId = 0; g_currentNameId = 0; g_currentObjId = 0; @@ -2811,13 +2853,13 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" BEGIN(Body); } */ -<ObjCCall,ObjCMName>"[" { - saveObjCContext(); - g_currentCtx->format+=*yytext; - BEGIN(ObjCCall); - //printf("open\n"); - } -<ObjCCall,ObjCMName>"]" { +<ObjCCall,ObjCMName>"["|"{" { + saveObjCContext(); + g_currentCtx->format+=*yytext; + BEGIN(ObjCCall); + //printf("open\n"); + } +<ObjCCall,ObjCMName>"]"|"}" { g_currentCtx->format+=*yytext; restoreObjCContext(); BEGIN(ObjCMName); @@ -2829,6 +2871,23 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } //printf("close\n"); } +<ObjCCall,ObjCMName>"//".* { + g_currentCtx->format+=escapeComment(yytext); + } +<ObjCCall,ObjCMName>"/*" { + g_lastObjCCallContext = YY_START; + g_currentCtx->comment=yytext; + BEGIN(ObjCCallComment); + } +<ObjCCallComment>"*/" { + g_currentCtx->comment+=yytext; + g_currentCtx->format+=escapeComment(g_currentCtx->comment); + BEGIN(g_lastObjCCallContext); + } +<ObjCCallComment>[^*\n]+ { g_currentCtx->comment+=yytext; } +<ObjCCallComment>"//"|"/*" { g_currentCtx->comment+=yytext; } +<ObjCCallComment>\n { g_currentCtx->comment+=*yytext; } +<ObjCCallComment>. { g_currentCtx->comment+=*yytext; } <ObjCCall>{ID} { g_currentCtx->format+=escapeObject(yytext); if (g_braceCount==0) @@ -2981,12 +3040,18 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" if (yytext[0]==')') // no a pointer cast { //printf("addVariable(%s,%s)\n",g_parmType.data(),g_parmName.data()); + if (g_parmType.isEmpty()) + { + g_parmType=g_parmName; + g_parmName.resize(0); + } g_theVarContext.addVariable(g_parmType,g_parmName); } else { - g_parmType.resize(0); + g_parmType = g_parmName; g_parmName.resize(0); + g_theVarContext.addVariable(g_parmType,g_parmName); } g_theCallContext.popScope(); g_inForEachExpression = FALSE; @@ -3274,7 +3339,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } <*>\n({B}*"//"[!/][^\n]*\n)+ { // remove special one-line comment if (YY_START==SkipCPP) REJECT; - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr+=((QCString)yytext).contains('\n'); nextCodeLine(); @@ -3297,7 +3362,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" BEGIN( g_lastSkipCppContext ) ; } <*>\n{B}*"//@"[{}].*\n { // remove one-line group marker - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr+=2; nextCodeLine(); @@ -3315,7 +3380,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } } <*>\n{B}*"/*@"[{}] { // remove one-line group marker - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_lastSpecialCContext = YY_START; g_yyLineNr++; @@ -3334,7 +3399,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } } <*>^{B}*"//@"[{}].*\n { // remove one-line group marker - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr++; nextCodeLine(); @@ -3347,7 +3412,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } } <*>^{B}*"/*@"[{}] { // remove multi-line group marker - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_lastSpecialCContext = YY_START; BEGIN(RemoveSpecialCComment); @@ -3365,7 +3430,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } } <*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr++; //nextCodeLine(); @@ -3379,7 +3444,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } <*>"//"[!/][^\n]*\n { // strip special one-line comment if (YY_START==SkipComment || YY_START==SkipString) REJECT; - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { char c[2]; c[0]='\n'; c[1]=0; codifyLines(c); @@ -3398,7 +3463,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" g_forceTagReference = g_forceTagReference.mid(s+1,e-s-1); } <*>\n{B}*"/*"[!*]/[^/*] { - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_lastSpecialCContext = YY_START; g_yyLineNr++; @@ -3417,7 +3482,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } } <*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_lastSpecialCContext = YY_START; BEGIN(RemoveSpecialCComment); @@ -3436,7 +3501,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } <*>"/*"[!*]/[^/*] { // special C comment block half way a line if (YY_START==SkipString) REJECT; - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_lastSpecialCContext = YY_START; BEGIN(RemoveSpecialCComment); @@ -3455,7 +3520,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } <*>"/*"("!"?)"*/" { if (YY_START==SkipString) REJECT; - if (!Config_getBool("STRIP_CODE_COMMENTS")) + if (!Config_getBool(STRIP_CODE_COMMENTS)) { startFontClass("comment"); g_code->codify(yytext); @@ -3602,16 +3667,17 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, g_searchCtx = searchCtx; g_collectXRefs = collectXRefs; g_inFunctionTryBlock = FALSE; - if (endLine!=-1) - g_inputLines = endLine+1; - else - g_inputLines = countLines(); if (startLine!=-1) g_yyLineNr = startLine; else g_yyLineNr = 1; + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + g_curlyCount = 0; g_bodyCurlyCount = 0; g_bracketCount = 0; diff --git a/src/commentcnv.l b/src/commentcnv.l index f65c073..6fea6c9 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="commentcnvYY" + %{ @@ -134,7 +136,7 @@ static void replaceCommentMarker(const char *s,int len) static inline int computeIndent(const char *s) { int col=0; - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); const char *p=s; char c; while ((c=*p++)) @@ -164,7 +166,7 @@ static inline void copyToOutput(const char *s,int len) else if (len>0) { ADDARRAY(s,len); - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); for (i=0;i<len;i++) { switch (s[i]) @@ -379,6 +381,12 @@ void replaceComment(int offset); g_inRoseComment=TRUE; BEGIN(SComment); } +<Scan>"//"[!\/]/.*\n[ \t]*"//"[|\/][ \t]*[@\\]"}" { // next line contains an end marker, see bug 752712 + g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!'; + copyToOutput(yytext,(int)yyleng); + g_readLineCtx=YY_START; + BEGIN(ReadLine); + } <Scan>"//"/.*\n { /* one line C++ comment */ g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!'; copyToOutput(yytext,(int)yyleng); @@ -459,7 +467,7 @@ void replaceComment(int offset); } BEGIN(VerbatimCode); } -<CComment,ReadLine>[\\@]("f$"|"f["|"f{"[a-z]*) { +<CComment,ReadLine>[\\@]("f$"|"f["|"f{") { copyToOutput(yytext,(int)yyleng); g_blockName=&yytext[1]; if (g_blockName.at(1)=='[') @@ -482,9 +490,9 @@ void replaceComment(int offset); <Scan>. { /* any ather character */ copyToOutput(yytext,(int)yyleng); } -<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"docbookonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */ +<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */ copyToOutput(yytext,(int)yyleng); - if (yytext[1]=='f') // end of formula + if (&yytext[1]==g_blockName) // end of formula { BEGIN(g_lastCommentContext); } @@ -983,7 +991,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) g_outBuf = outBuf; g_inBufPos = 0; g_col = 0; - g_mlBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF"); + g_mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF); g_skip = FALSE; g_fileName = fileName; g_lang = getLanguageFromFileName(fileName); diff --git a/src/commentscan.l b/src/commentscan.l index ffed075..f26cabd 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -14,6 +14,8 @@ */ %option never-interactive +%option prefix="commentscanYY" + %{ /* @@ -123,6 +125,8 @@ static bool handleCopyBrief(const QCString &); static bool handleCopyDetails(const QCString &); static bool handleParBlock(const QCString &); static bool handleEndParBlock(const QCString &); +static bool handleParam(const QCString &); +static bool handleRetval(const QCString &); typedef bool (*DocCmdFunc)(const QCString &name); @@ -245,7 +249,7 @@ static DocCmdMap docCmdMap[] = { "line", 0, TRUE }, { "note", 0, TRUE }, { "par", 0, TRUE }, - { "param", 0, TRUE }, + { "param", &handleParam, TRUE }, { "tparam", 0, TRUE }, { "post", 0, TRUE }, { "pre", 0, TRUE }, @@ -254,7 +258,8 @@ static DocCmdMap docCmdMap[] = { "result", 0, TRUE }, { "return", 0, TRUE }, { "returns", 0, TRUE }, - { "retval", 0, TRUE }, + { "exception", 0, TRUE }, + { "retval", &handleRetval, TRUE }, { "sa", 0, TRUE }, { "see", 0, TRUE }, { "since", 0, TRUE }, @@ -968,6 +973,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" %x XRefItemParam2 %x XRefItemParam3 %x FileDocArg1 +%x ParamArg1 %x EnumDocArg1 %x NameSpaceDocArg1 %x PackageDocArg1 @@ -1153,7 +1159,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" <Comment>{B}*{CMD}"~"[a-z_A-Z-]* { // language switch command QCString langId = QString(yytext).stripWhiteSpace().data()+2; if (!langId.isEmpty() && - qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0) + qstricmp(Config_getEnum(OUTPUT_LANGUAGE),langId)!=0) { // enable language specific section BEGIN(SkipLang); } @@ -1561,6 +1567,30 @@ RCSTAG "$"{ID}":"[^\n$]+"$" BEGIN( Comment ); } + /* --------- handle arguments of the param command ------------ */ +<ParamArg1>{ID}/{B}*"," { + if (yytext[0]=='_' && Config_getBool(MARKDOWN_SUPPORT)) + { + addOutput('\\'); + } + addOutput(yytext); + } +<ParamArg1>"," { + addOutput(" , "); + } +<ParamArg1>{ID} { + if (yytext[0]=='_' && Config_getBool(MARKDOWN_SUPPORT)) + { + addOutput('\\'); + } + addOutput(yytext); + BEGIN( Comment ); + } +<ParamArg1>. { + unput(yytext[0]); + BEGIN( Comment ); + } + /* --------- handle arguments of the file/dir/example command ------------ */ <FileDocArg1>{DOCNL} { // no file name specfied @@ -2176,7 +2206,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" <SkipLang>[\\@]"~"[a-zA-Z-]* { /* language switch */ QCString langId = &yytext[2]; if (langId.isEmpty() || - qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0) + qstricmp(Config_getEnum(OUTPUT_LANGUAGE),langId)==0) { // enable language specific section BEGIN(Comment); } @@ -2397,6 +2427,22 @@ static bool handleFile(const QCString &) return stop; } +static bool handleParam(const QCString &) +{ + // we need process param and retval arguments to escape leading underscores in case of + // markdown processing, see bug775493 + addOutput("@param "); + BEGIN( ParamArg1 ); + return FALSE; +} + +static bool handleRetval(const QCString &) +{ + addOutput("@retval "); + BEGIN( ParamArg1 ); + return FALSE; +} + static bool handleDir(const QCString &) { bool stop=makeStructuralIndicator(Entry::DIRDOC_SEC); @@ -2722,7 +2768,7 @@ static bool handleHideCallergraph(const QCString &) static bool handleInternal(const QCString &) { - if (!Config_getBool("INTERNAL_DOCS")) + if (!Config_getBool(INTERNAL_DOCS)) { // make sure some whitespace before a \internal command // is not treated as "documentation" diff --git a/src/condparser.cpp b/src/condparser.cpp index b3bea3a..69f8d29 100644 --- a/src/condparser.cpp +++ b/src/condparser.cpp @@ -303,7 +303,7 @@ bool CondParser::evalOperator(int opId, bool lhs, bool rhs) */ bool CondParser::evalVariable(const char *varName) { - if (Config_getList("ENABLED_SECTIONS").find(varName)==-1) return FALSE; + if (Config_getList(ENABLED_SECTIONS).find(varName)==-1) return FALSE; return TRUE; } diff --git a/src/config.h b/src/config.h index 344e007..e86e950 100644 --- a/src/config.h +++ b/src/config.h @@ -1,13 +1,10 @@ /****************************************************************************** * - * - * - * * Copyright (C) 1997-2015 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 + * 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. * @@ -19,558 +16,58 @@ #ifndef CONFIG_H #define CONFIG_H -#include <qstrlist.h> -#include <qdict.h> -#include <qlist.h> -#include <qregexp.h> -#include "ftextstream.h" - - -/** Abstract base class for any configuration option. - */ -class ConfigOption -{ - friend class Config; - - public: - - /*! The type of option */ - enum OptionType - { - O_Info, //<! A section header - O_List, //<! A list of items - O_Enum, //<! A fixed set of items - O_String, //<! A single item - O_Int, //<! An integer value - O_Bool, //<! A boolean value - O_Obsolete, //<! An obsolete option - O_Disabled //<! Disabled compile time option - }; - enum - { - /*! Maximum length of an option in the config file. Used for - * alignment purposes. - */ - MAX_OPTION_LENGTH = 23 - }; - ConfigOption(OptionType t) : m_kind(t) - { - m_spaces.fill(' ',40); - } - virtual ~ConfigOption() - { - } - - /*! returns the kind of option this is. */ - OptionType kind() const { return m_kind; } - QCString name() const { return m_name; } - QCString docs() const { return m_doc; } - - QCString dependsOn() const { return m_dependency; } - void addDependency(const char *dep) { m_dependency = dep; } - void setEncoding(const QCString &e) { m_encoding = e; } - void setUserComment(const QCString &u) { m_userComment += u; } - - protected: - virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0; - virtual void convertStrToVal() {} - virtual void substEnvVars() = 0; - virtual void init() {} - - void writeBoolValue(FTextStream &t,bool v); - void writeIntValue(FTextStream &t,int i); - void writeStringValue(FTextStream &t,QCString &s); - void writeStringList(FTextStream &t,QStrList &l); - - QCString m_spaces; - QCString m_name; - QCString m_doc; - QCString m_dependency; - QCString m_encoding; - QCString m_userComment; - OptionType m_kind; -}; - -/** Section marker for grouping the configuration options. - */ -class ConfigInfo : public ConfigOption -{ - public: - ConfigInfo(const char *name,const char *doc) - : ConfigOption(O_Info) - { - m_name = name; - m_doc = doc; - } - void writeTemplate(FTextStream &t, bool sl,bool); - void substEnvVars() {} -}; - -/** Class respresenting a list type option. - */ -class ConfigList : public ConfigOption -{ - public: - enum WidgetType { String, File, Dir, FileAndDir }; - ConfigList(const char *name,const char *doc) - : ConfigOption(O_List) - { - m_name = name; - m_doc = doc; - m_widgetType = String; - } - void addValue(const char *v) { m_value.append(v); } - void setWidgetType(WidgetType w) { m_widgetType = w; } - WidgetType widgetType() const { return m_widgetType; } - QStrList *valueRef() { return &m_value; } - void writeTemplate(FTextStream &t,bool sl,bool); - void substEnvVars(); - void init() { m_value.clear(); } - private: - QStrList m_value; - WidgetType m_widgetType; -}; - -/** Class representing an enum type option. - */ -class ConfigEnum : public ConfigOption -{ - public: - ConfigEnum(const char *name,const char *doc,const char *defVal) - : ConfigOption(O_Enum) - { - m_name = name; - m_doc = doc; - m_value = defVal; - m_defValue = defVal; - } - void addValue(const char *v) { m_valueRange.append(v); } - QStrListIterator iterator() - { - return QStrListIterator(m_valueRange); - } - QCString *valueRef() { return &m_value; } - void substEnvVars(); - void writeTemplate(FTextStream &t,bool sl,bool); - void init() { m_value = m_defValue.copy(); } - - private: - QStrList m_valueRange; - QCString m_value; - QCString m_defValue; -}; - -/** Class representing a string type option. - */ -class ConfigString : public ConfigOption -{ - public: - enum WidgetType { String, File, Dir, Image }; - ConfigString(const char *name,const char *doc) - : ConfigOption(O_String) - { - m_name = name; - m_doc = doc; - m_widgetType = String; - } - ~ConfigString() - { - } - void setWidgetType(WidgetType w) { m_widgetType = w; } - WidgetType widgetType() const { return m_widgetType; } - void setDefaultValue(const char *v) { m_defValue = v; } - QCString *valueRef() { return &m_value; } - void writeTemplate(FTextStream &t,bool sl,bool); - void substEnvVars(); - void init() { m_value = m_defValue.copy(); } - - private: - QCString m_value; - QCString m_defValue; - WidgetType m_widgetType; -}; - -/** Class representing an integer type option. - */ -class ConfigInt : public ConfigOption -{ - public: - ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal) - : ConfigOption(O_Int) - { - m_name = name; - m_doc = doc; - m_value = defVal; - m_defValue = defVal; - m_minVal = minVal; - m_maxVal = maxVal; - } - QCString *valueStringRef() { return &m_valueString; } - int *valueRef() { return &m_value; } - int minVal() const { return m_minVal; } - int maxVal() const { return m_maxVal; } - void convertStrToVal(); - void substEnvVars(); - void writeTemplate(FTextStream &t,bool sl,bool upd); - void init() { m_value = m_defValue; } - private: - int m_value; - int m_defValue; - int m_minVal; - int m_maxVal; - QCString m_valueString; -}; - -/** Class representing a Boolean type option. - */ -class ConfigBool : public ConfigOption -{ - public: - ConfigBool(const char *name,const char *doc,bool defVal) - : ConfigOption(O_Bool) - { - m_name = name; - m_doc = doc; - m_value = defVal; - m_defValue = defVal; - } - QCString *valueStringRef() { return &m_valueString; } - bool *valueRef() { return &m_value; } - void convertStrToVal(); - void substEnvVars(); - void setValueString(const QCString &v) { m_valueString = v; } - void writeTemplate(FTextStream &t,bool sl,bool upd); - void init() { m_value = m_defValue; } - private: - bool m_value; - bool m_defValue; - QCString m_valueString; -}; - -/** Section marker for obsolete options - */ -class ConfigObsolete : public ConfigOption -{ - public: - ConfigObsolete(const char *name) : ConfigOption(O_Obsolete) - { m_name = name; } - void writeTemplate(FTextStream &,bool,bool); - void substEnvVars() {} -}; - -/** Section marker for compile time optional options - */ -class ConfigDisabled : public ConfigOption -{ - public: - ConfigDisabled(const char *name) : ConfigOption(O_Disabled) - { m_name = name; } - void writeTemplate(FTextStream &,bool,bool); - void substEnvVars() {} -}; - - -// some convenience macros for access the config options -#define Config_getString(val) Config::instance()->getString(__FILE__,__LINE__,val) -#define Config_getInt(val) Config::instance()->getInt(__FILE__,__LINE__,val) -#define Config_getList(val) Config::instance()->getList(__FILE__,__LINE__,val) -#define Config_getEnum(val) Config::instance()->getEnum(__FILE__,__LINE__,val) -#define Config_getBool(val) Config::instance()->getBool(__FILE__,__LINE__,val) +class FTextStream; + +// note: this header file is generated from config.xml +#include "configvalues.h" + +//! @{ +//! some convenience macros for accessing the config options +//! mainly done like this for backward compatibility +#if DYNAMIC_LOOKUP // for debug purposes +#define Config_getString(val) (ConfigValues::instance().*((ConfigValues::InfoString*)ConfigValues::instance().get(#val))->item) +#define Config_getBool(val) (ConfigValues::instance().*((ConfigValues::InfoBool*)ConfigValues::instance().get(#val))->item) +#define Config_getInt(val) (ConfigValues::instance().*((ConfigValues::InfoInt*)ConfigValues::instance().get(#val))->item) +#define Config_getEnum(val) (ConfigValues::instance().*((ConfigValues::InfoString*)ConfigValues::instance().get(#val))->item) +#define Config_getList(val) (ConfigValues::instance().*((ConfigValues::InfoList*)ConfigValues::instance().get(#val))->item) +#else // direct access +#define Config_getString(val) (ConfigValues::instance().val) +#define Config_getBool(val) (ConfigValues::instance().val) +#define Config_getInt(val) (ConfigValues::instance().val) +#define Config_getEnum(val) (ConfigValues::instance().val) +#define Config_getList(val) (ConfigValues::instance().val) +#endif +//! @} -/** Singleton for configuration variables. - * - * This object holds the global static variables - * read from a user-supplied configuration file. - * The static member instance() can be used to get - * a pointer to the one and only instance. - * - * Set all variables to their default values by - * calling Config::instance()->init() - * - */ -class Config +/** \brief Public function to deal with the configuration file. */ +namespace Config { - public: - ///////////////////////////// - // public API - ///////////////////////////// - - /*! Returns the one and only instance of this class */ - static Config *instance() - { - if (m_instance==0) m_instance = new Config; - return m_instance; - } - /*! Delete the instance */ - static void deleteInstance() - { - delete m_instance; - m_instance=0; - } - - /*! Returns an iterator that can by used to iterate over the - * configuration options. - */ - QListIterator<ConfigOption> iterator() - { - return QListIterator<ConfigOption>(*m_options); - } - - /*! - * @name Getting configuration values. - * @{ - */ - - /*! Returns the value of the string option with name \a fileName. - * The arguments \a num and \a name are for debugging purposes only. - * There is a convenience function Config_getString() for this. - */ - QCString &getString(const char *fileName,int num,const char *name) const; - - /*! Returns the value of the list option with name \a fileName. - * The arguments \a num and \a name are for debugging purposes only. - * There is a convenience function Config_getList() for this. - */ - QStrList &getList(const char *fileName,int num,const char *name) const; - - /*! Returns the value of the enum option with name \a fileName. - * The arguments \a num and \a name are for debugging purposes only. - * There is a convenience function Config_getEnum() for this. - */ - QCString &getEnum(const char *fileName,int num,const char *name) const; - - /*! Returns the value of the integer option with name \a fileName. - * The arguments \a num and \a name are for debugging purposes only. - * There is a convenience function Config_getInt() for this. - */ - int &getInt(const char *fileName,int num,const char *name) const; - - /*! Returns the value of the boolean option with name \a fileName. - * The arguments \a num and \a name are for debugging purposes only. - * There is a convenience function Config_getBool() for this. - */ - bool &getBool(const char *fileName,int num,const char *name) const; - - /*! Returns the ConfigOption corresponding with \a name or 0 if - * the option is not supported. - */ - ConfigOption *get(const char *name) const - { - return m_dict->find(name); - } - /* @} */ - - /*! - * @name Adding configuration options. - * @{ - */ - - /*! Starts a new configuration section with \a name and description \a doc. - * \returns An object representing the option. - */ - ConfigInfo *addInfo(const char *name,const char *doc) - { - ConfigInfo *result = new ConfigInfo(name,doc); - m_options->append(result); - return result; - } - - /*! Adds a new string option with \a name and documentation \a doc. - * \returns An object representing the option. - */ - ConfigString *addString(const char *name, - const char *doc) - { - ConfigString *result = new ConfigString(name,doc); - m_options->append(result); - m_dict->insert(name,result); - return result; - } - - /*! Adds a new enumeration option with \a name and documentation \a doc - * and initial value \a defVal. - * \returns An object representing the option. - */ - ConfigEnum *addEnum(const char *name, - const char *doc, - const char *defVal) - { - ConfigEnum *result = new ConfigEnum(name,doc,defVal); - m_options->append(result); - m_dict->insert(name,result); - return result; - } - - /*! Adds a new string option with \a name and documentation \a doc. - * \returns An object representing the option. - */ - ConfigList *addList(const char *name, - const char *doc) - { - ConfigList *result = new ConfigList(name,doc); - m_options->append(result); - m_dict->insert(name,result); - return result; - } - - /*! Adds a new integer option with \a name and documentation \a doc. - * The integer has a range between \a minVal and \a maxVal and a - * default value of \a defVal. - * \returns An object representing the option. - */ - ConfigInt *addInt(const char *name, - const char *doc, - int minVal,int maxVal,int defVal) - { - ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal); - m_options->append(result); - m_dict->insert(name,result); - return result; - } - - /*! Adds a new boolean option with \a name and documentation \a doc. - * The boolean has a default value of \a defVal. - * \returns An object representing the option. - */ - ConfigBool *addBool(const char *name, - const char *doc, - bool defVal) - { - ConfigBool *result = new ConfigBool(name,doc,defVal); - m_options->append(result); - m_dict->insert(name,result); - return result; - } - /*! Adds an option that has become obsolete. */ - ConfigOption *addObsolete(const char *name) - { - ConfigObsolete *option = new ConfigObsolete(name); - m_dict->insert(name,option); - m_obsolete->append(option); - return option; - } - /*! Adds an option that has been disabled at compile time. */ - ConfigOption *addDisabled(const char *name) - { - ConfigDisabled *option = new ConfigDisabled(name); - m_dict->insert(name,option); - m_disabled->append(option); - return option; - } - /*! @} */ - - /*! Writes a template configuration to stream \a t. If \a shortIndex - * is \c TRUE the description of each configuration option will - * be omitted. - */ - void writeTemplate(FTextStream &t,bool shortIndex,bool updateOnly); - - void setHeader(const char *header) { m_header = header; } - - ///////////////////////////// - // internal API - ///////////////////////////// - - /*! Converts the string values read from the configuration file - * to real values for non-string type options (like int, and bools) - */ - void convertStrToVal(); - - /*! Replaces references to environment variable by the actual value - * of the environment variable. - */ - void substituteEnvironmentVars(); - - /*! Checks if the values of the variable are correct, adjusts them - * if needed, and report any errors. - */ - void check(); - - /*! Initialize config variables to their default value */ - void init(); - - /*! Parse a configuration data in string \a str. - * \returns TRUE if successful, or FALSE if the string could not be - * parsed. - */ - //bool parseString(const char *fn,const char *str); - bool parseString(const char *fn,const char *str,bool upd = FALSE); - - /*! Parse a configuration file with name \a fn. - * \returns TRUE if successful, FALSE if the file could not be - * opened or read. - */ - bool parse(const char *fn,bool upd = FALSE); - - /*! Called from the constructor, will add doxygen's default options - * to the configuration object - */ - void create(); - - /*! Append user start comment - */ - void appendStartComment(const QCString &u) - { - m_startComment += u; - } - /*! Append user comment - */ - void appendUserComment(const QCString &u) - { - m_userComment += u; - } - /*! Take the user start comment and reset it internally - * \returns user start comment - */ - QCString takeStartComment() - { - QCString result=m_startComment; - m_startComment.resize(0); - return result.replace(QRegExp("\r"),""); - } - /*! Take the user comment and reset it internally - * \returns user comment - */ - QCString takeUserComment() - { - QCString result=m_userComment; - m_userComment.resize(0); - return result.replace(QRegExp("\r"),""); - } - - protected: - - Config() - { - m_options = new QList<ConfigOption>; - m_obsolete = new QList<ConfigOption>; - m_disabled = new QList<ConfigOption>; - m_dict = new QDict<ConfigOption>(257); - m_options->setAutoDelete(TRUE); - m_obsolete->setAutoDelete(TRUE); - m_disabled->setAutoDelete(TRUE); - m_initialized = FALSE; - create(); - } - ~Config() - { - delete m_options; - delete m_obsolete; - delete m_disabled; - delete m_dict; - } - - private: - void checkFileName(const char *); - QList<ConfigOption> *m_options; - QList<ConfigOption> *m_obsolete; - QList<ConfigOption> *m_disabled; - QDict<ConfigOption> *m_dict; - static Config *m_instance; - QCString m_startComment; - QCString m_userComment; - bool m_initialized; - QCString m_header; -}; + /*! Initialize configuration variables to their default value */ + void init(); + + /*! Writes a template configuration to stream \a t. If \a shortList + * is \c TRUE the description of each configuration option will + * be omitted. + */ + void writeTemplate(FTextStream &t,bool shortList,bool updateOnly=FALSE); + + /*! Parses a configuration file with name \a fn. + * \returns TRUE if successful, FALSE if the file could not be + * opened or read. + */ + bool parse(const char *fileName,bool update=FALSE); + + /*! Post processed the parsed data. Replaces raw string values by the actual values. + * and replaces environment variables. + * \param clearHeaderAndFooter set to TRUE when writing header and footer templates. + */ + void postProcess(bool clearHeaderAndFooter); + + /*! Check the validity of the parsed options and correct or warn the user where needed. */ + void checkAndCorrect(); + + /*! Clean up any data */ + void deinit(); +} #endif diff --git a/src/config.xml b/src/config.xml index 9d54e29..227f8bf 100644 --- a/src/config.xml +++ b/src/config.xml @@ -617,6 +617,16 @@ Go to the <a href="commands.html">next</a> section or return to the ]]> </docs> </option> + <option type='int' id='TOC_INCLUDE_HEADINGS' minval='0' maxval='99' defval='0' depends='MARKDOWN_SUPPORT'> + <docs> +<![CDATA[ + When the \c TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings + up to that level are automatically included in the table of contents, even if + they do not have an id attribute. + \note This feature currently applies only to Markdown headings. +]]> + </docs> + </option> <option type='bool' id='AUTOLINK_SUPPORT' defval='1'> <docs> <![CDATA[ @@ -1221,6 +1231,14 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ]]> </docs> </option> + <option type='bool' id='WARN_AS_ERROR' defval='0'> + <docs> +<![CDATA[ + If the \c WARN_AS_ERROR tag is set to \c YES then doxygen will immediately stop + when a warning is encountered. +]]> + </docs> + </option> <option type='string' id='WARN_FORMAT' format='string' defval='$file:$line: $text'> <docs> <![CDATA[ @@ -1317,7 +1335,11 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <value name='*.mm'/> <value name='*.dox'/> <value name='*.py'/> + <value name='*.pyw'/> <value name='*.f90'/> + <value name='*.f95'/> + <value name='*.f03'/> + <value name='*.f08'/> <value name='*.f'/> <value name='*.for'/> <value name='*.tcl'/> @@ -1325,8 +1347,6 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" <value name='*.vhdl'/> <value name='*.ucf'/> <value name='*.qsf'/> - <value name='*.as'/> - <value name='*.js'/> </option> <option type='bool' id='RECURSIVE' defval='0'> <docs> @@ -1921,6 +1941,18 @@ hr.footer { ]]> </docs> </option> + <option type='bool' id='HTML_DYNAMIC_MENUS' defval='1' depends='GENERATE_HTML'> + <docs> +<![CDATA[ + If the \c HTML_DYNAMIC_MENUS tag is set to \c YES then the generated HTML + documentation will contain a main index with vertical navigation menus that + are dynamically created via Javascript. If disabled, the navigation index will consists of + multiple levels of tabs that are statically embedded in every HTML page. + Disable this option to support browsers that do not have Javascript, like + the Qt help browser. +]]> + </docs> + </option> <option type='bool' id='HTML_DYNAMIC_SECTIONS' defval='0' depends='GENERATE_HTML'> <docs> <![CDATA[ @@ -3394,6 +3426,14 @@ to be found in the default search path. ]]> </docs> </option> + <option type='string' id='PLANTUML_CFG_FILE' format='file' defval=''> + <docs> +<![CDATA[ + When using plantuml, the \c PLANTUML_CFG_FILE tag can be used to specify a configuration + file for plantuml. +]]> + </docs> + </option> <option type='list' id='PLANTUML_INCLUDE_PATH' format='dir' defval=''> <docs> <![CDATA[ diff --git a/src/configgen.py b/src/configgen.py index 1647fa2..3b86954 100755 --- a/src/configgen.py +++ b/src/configgen.py @@ -353,6 +353,48 @@ def parseGroups(node): if n.nodeType == Node.ELEMENT_NODE: parseOption(n) +def parseGroupMap(node): + map = { 'bool':'bool', 'string':'QCString', 'enum':'QCString', 'int':'int', 'list':'QStrList' } + for n in node.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + setting = n.getAttribute('setting') + if len(setting) > 0: + print("#if %s" % (setting)) + type = n.getAttribute('type') + name = n.getAttribute('id') + if type in map: + print(" %-8s %s;" % (map[type],name)) + if len(setting) > 0: + print("#endif") + +def parseGroupInit(node): + map = { 'bool':'Bool', 'string':'String', 'enum':'Enum', 'int':'Int', 'list':'List' } + for n in node.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + setting = n.getAttribute('setting') + if len(setting) > 0: + print("#if %s" % (setting)) + type = n.getAttribute('type') + name = n.getAttribute('id') + if type in map: + print(" %-25s = ConfigImpl::instance()->get%s(__FILE__,__LINE__,\"%s\");" % (name,map[type],name)) + if len(setting) > 0: + print("#endif") + +def parseGroupMapInit(node): + map = { 'bool':'Bool', 'string':'String', 'enum':'String', 'int':'Int', 'list':'List' } + for n in node.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + setting = n.getAttribute('setting') + if len(setting) > 0: + print("#if %s" % (setting)) + type = n.getAttribute('type') + name = n.getAttribute('id') + if type in map: + print(" m_map.insert(\"%s\",new Info%s(&ConfigValues::%s));" % (name,map[type],name)) + if len(setting) > 0: + print("#endif") + def parseGroupCDocs(node): for n in node.childNodes: if n.nodeType == Node.ELEMENT_NODE: @@ -556,8 +598,8 @@ def parseFooterDoc(node): def main(): - if len(sys.argv)<3 or (not sys.argv[1] in ['-doc','-cpp','-wiz']): - sys.exit('Usage: %s -doc|-cpp|-wiz config.xml' % sys.argv[0]) + if len(sys.argv)<3 or (not sys.argv[1] in ['-doc','-cpp','-wiz','-maph','-maps']): + sys.exit('Usage: %s -doc|-cpp|-wiz|-maph|-maps config.xml' % sys.argv[0]) try: doc = xml.dom.minidom.parse(sys.argv[2]) except Exception as inst: @@ -597,6 +639,89 @@ def main(): if n.nodeType == Node.ELEMENT_NODE: if (n.nodeName == "footer"): parseFooterDoc(n) + elif (sys.argv[1] == "-maph"): + print("/* WARNING: This file is generated!") + print(" * Do not edit this file, but edit config.xml instead and run") + print(" * python configgen.py -map config.xml to regenerate this file!") + print(" */") + print("#ifndef CONFIGVALUES_H") + print("#define CONFIGVALUES_H") + print("") + print("#include <qdict.h>") + print("#include <qstrlist.h>") + print("#include <qcstring.h>") + print("#include \"settings.h\"") + print("") + print("class ConfigValues") + print("{") + print(" public:") + print(" static ConfigValues &instance() { static ConfigValues theInstance; return theInstance; }") + for n in elem.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + if (n.nodeName == "group"): + parseGroupMap(n) + print(" void init();") + print(" struct Info") + print(" {") + print(" enum Type { Bool, Int, String, List, Unknown };") + print(" Info(Type t) : type(t) {}") + print(" virtual ~Info() {}") + print(" Type type;") + print(" };") + print(" struct InfoBool : public Info") + print(" {") + print(" InfoBool(bool ConfigValues::*ptm) : Info(Info::Bool), item(ptm) {}") + print(" bool ConfigValues::*item;") + print(" };") + print(" struct InfoInt : public Info") + print(" {") + print(" InfoInt(int ConfigValues::*ptm) : Info(Info::Int), item(ptm) {}") + print(" int ConfigValues::*item;") + print(" };") + print(" struct InfoString : public Info") + print(" {") + print(" InfoString(QCString ConfigValues::*ptm) : Info(Info::String), item(ptm) {}") + print(" QCString ConfigValues::*item;") + print(" };") + print(" struct InfoList : public Info") + print(" {") + print(" InfoList(QStrList ConfigValues::*ptm) : Info(Info::List), item(ptm) {}") + print(" QStrList ConfigValues::*item;") + print(" };") + print(" const Info *get(const char *tag) const") + print(" {") + print(" return m_map.find(tag);") + print(" }") + print(" private:") + print(" ConfigValues();") + print(" QDict<Info> m_map;") + print("};") + print("") + print("#endif") + elif (sys.argv[1] == "-maps"): + print("/* WARNING: This file is generated!") + print(" * Do not edit this file, but edit config.xml instead and run") + print(" * python configgen.py -maps config.xml to regenerate this file!") + print(" */") + print("#include \"configvalues.h\"") + print("#include \"configimpl.h\"") + print("") + print("ConfigValues::ConfigValues() : m_map(257)") + print("{") + print(" m_map.setAutoDelete(TRUE);") + for n in elem.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + if (n.nodeName == "group"): + parseGroupMapInit(n) + print("}") + print("") + print("void ConfigValues::init()") + print("{") + for n in elem.childNodes: + if n.nodeType == Node.ELEMENT_NODE: + if (n.nodeName == "group"): + parseGroupInit(n) + print("}") elif (sys.argv[1] == "-cpp"): print("/* WARNING: This file is generated!") print(" * Do not edit this file, but edit config.xml instead and run") @@ -604,11 +729,11 @@ def main(): print(" */") print("") print("#include \"configoptions.h\"") - print("#include \"config.h\"") + print("#include \"configimpl.h\"") print("#include \"portable.h\"") print("#include \"settings.h\"") print("") - print("void addConfigOptions(Config *cfg)") + print("void addConfigOptions(ConfigImpl *cfg)") print("{") print(" ConfigString *cs;") print(" ConfigEnum *ce;") diff --git a/src/configimpl.h b/src/configimpl.h new file mode 100644 index 0000000..c901198 --- /dev/null +++ b/src/configimpl.h @@ -0,0 +1,571 @@ +/****************************************************************************** + * + * + * + * + * Copyright (C) 1997-2015 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 CONFIGIMPL_H +#define CONFIGIMPL_H + +#include <qstrlist.h> +#include <qdict.h> +#include <qlist.h> +#include <qregexp.h> +#include "ftextstream.h" + + +/** Abstract base class for any configuration option. + */ +class ConfigOption +{ + friend class ConfigImpl; + + public: + + /*! The type of option */ + enum OptionType + { + O_Info, //<! A section header + O_List, //<! A list of items + O_Enum, //<! A fixed set of items + O_String, //<! A single item + O_Int, //<! An integer value + O_Bool, //<! A boolean value + O_Obsolete, //<! An obsolete option + O_Disabled //<! Disabled compile time option + }; + enum + { + /*! Maximum length of an option in the config file. Used for + * alignment purposes. + */ + MAX_OPTION_LENGTH = 23 + }; + ConfigOption(OptionType t) : m_kind(t) + { + m_spaces.fill(' ',40); + } + virtual ~ConfigOption() + { + } + + /*! returns the kind of option this is. */ + OptionType kind() const { return m_kind; } + QCString name() const { return m_name; } + QCString docs() const { return m_doc; } + + QCString dependsOn() const { return m_dependency; } + void addDependency(const char *dep) { m_dependency = dep; } + void setEncoding(const QCString &e) { m_encoding = e; } + void setUserComment(const QCString &u) { m_userComment += u; } + + protected: + virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0; + virtual void convertStrToVal() {} + virtual void substEnvVars() = 0; + virtual void init() {} + + void writeBoolValue(FTextStream &t,bool v); + void writeIntValue(FTextStream &t,int i); + void writeStringValue(FTextStream &t,QCString &s); + void writeStringList(FTextStream &t,QStrList &l); + + QCString m_spaces; + QCString m_name; + QCString m_doc; + QCString m_dependency; + QCString m_encoding; + QCString m_userComment; + OptionType m_kind; +}; + +/** Section marker for grouping the configuration options. + */ +class ConfigInfo : public ConfigOption +{ + public: + ConfigInfo(const char *name,const char *doc) + : ConfigOption(O_Info) + { + m_name = name; + m_doc = doc; + } + void writeTemplate(FTextStream &t, bool sl,bool); + void substEnvVars() {} +}; + +/** Class respresenting a list type option. + */ +class ConfigList : public ConfigOption +{ + public: + enum WidgetType { String, File, Dir, FileAndDir }; + ConfigList(const char *name,const char *doc) + : ConfigOption(O_List) + { + m_name = name; + m_doc = doc; + m_widgetType = String; + } + void addValue(const char *v) { m_defaultValue.append(v); } + void setWidgetType(WidgetType w) { m_widgetType = w; } + WidgetType widgetType() const { return m_widgetType; } + QStrList *valueRef() { return &m_value; } + void writeTemplate(FTextStream &t,bool sl,bool); + void substEnvVars(); + void init() { m_value = m_defaultValue; } + private: + QStrList m_value; + QStrList m_defaultValue; + WidgetType m_widgetType; +}; + +/** Class representing an enum type option. + */ +class ConfigEnum : public ConfigOption +{ + public: + ConfigEnum(const char *name,const char *doc,const char *defVal) + : ConfigOption(O_Enum) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + } + void addValue(const char *v) { m_valueRange.append(v); } + QStrListIterator iterator() + { + return QStrListIterator(m_valueRange); + } + QCString *valueRef() { return &m_value; } + void substEnvVars(); + void writeTemplate(FTextStream &t,bool sl,bool); + void init() { m_value = m_defValue.copy(); } + + private: + QStrList m_valueRange; + QCString m_value; + QCString m_defValue; +}; + +/** Class representing a string type option. + */ +class ConfigString : public ConfigOption +{ + public: + enum WidgetType { String, File, Dir, Image }; + ConfigString(const char *name,const char *doc) + : ConfigOption(O_String) + { + m_name = name; + m_doc = doc; + m_widgetType = String; + } + ~ConfigString() + { + } + void setWidgetType(WidgetType w) { m_widgetType = w; } + WidgetType widgetType() const { return m_widgetType; } + void setDefaultValue(const char *v) { m_defValue = v; } + QCString *valueRef() { return &m_value; } + void writeTemplate(FTextStream &t,bool sl,bool); + void substEnvVars(); + void init() { m_value = m_defValue.copy(); } + + private: + QCString m_value; + QCString m_defValue; + WidgetType m_widgetType; +}; + +/** Class representing an integer type option. + */ +class ConfigInt : public ConfigOption +{ + public: + ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal) + : ConfigOption(O_Int) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + m_minVal = minVal; + m_maxVal = maxVal; + } + QCString *valueStringRef() { return &m_valueString; } + int *valueRef() { return &m_value; } + int minVal() const { return m_minVal; } + int maxVal() const { return m_maxVal; } + void convertStrToVal(); + void substEnvVars(); + void writeTemplate(FTextStream &t,bool sl,bool upd); + void init() { m_value = m_defValue; } + private: + int m_value; + int m_defValue; + int m_minVal; + int m_maxVal; + QCString m_valueString; +}; + +/** Class representing a Boolean type option. + */ +class ConfigBool : public ConfigOption +{ + public: + ConfigBool(const char *name,const char *doc,bool defVal) + : ConfigOption(O_Bool) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + } + QCString *valueStringRef() { return &m_valueString; } + bool *valueRef() { return &m_value; } + void convertStrToVal(); + void substEnvVars(); + void setValueString(const QCString &v) { m_valueString = v; } + void writeTemplate(FTextStream &t,bool sl,bool upd); + void init() { m_value = m_defValue; } + private: + bool m_value; + bool m_defValue; + QCString m_valueString; +}; + +/** Section marker for obsolete options + */ +class ConfigObsolete : public ConfigOption +{ + public: + ConfigObsolete(const char *name) : ConfigOption(O_Obsolete) + { m_name = name; } + void writeTemplate(FTextStream &,bool,bool); + void substEnvVars() {} +}; + +/** Section marker for compile time optional options + */ +class ConfigDisabled : public ConfigOption +{ + public: + ConfigDisabled(const char *name) : ConfigOption(O_Disabled) + { m_name = name; } + void writeTemplate(FTextStream &,bool,bool); + void substEnvVars() {} +}; + +// some convenience macros for access the config options +#define ConfigImpl_getString(val) ConfigImpl::instance()->getString(__FILE__,__LINE__,val) +#define ConfigImpl_getInt(val) ConfigImpl::instance()->getInt(__FILE__,__LINE__,val) +#define ConfigImpl_getList(val) ConfigImpl::instance()->getList(__FILE__,__LINE__,val) +#define ConfigImpl_getEnum(val) ConfigImpl::instance()->getEnum(__FILE__,__LINE__,val) +#define ConfigImpl_getBool(val) ConfigImpl::instance()->getBool(__FILE__,__LINE__,val) + + +/** Singleton for configuration variables. + * + * This object holds the global static variables + * read from a user-supplied configuration file. + * The static member instance() can be used to get + * a pointer to the one and only instance. + * + * Set all variables to their default values by + * calling Config::instance()->init() + * + */ +class ConfigImpl +{ + public: + ///////////////////////////// + // public API + ///////////////////////////// + + /*! Returns the one and only instance of this class */ + static ConfigImpl *instance() + { + if (m_instance==0) m_instance = new ConfigImpl; + return m_instance; + } + /*! Delete the instance */ + static void deleteInstance() + { + delete m_instance; + m_instance=0; + } + + /*! Returns an iterator that can by used to iterate over the + * configuration options. + */ + QListIterator<ConfigOption> iterator() + { + return QListIterator<ConfigOption>(*m_options); + } + + /*! + * @name Getting configuration values. + * @{ + */ + + /*! Returns the value of the string option with name \a fileName. + * The arguments \a num and \a name are for debugging purposes only. + * There is a convenience function Config_getString() for this. + */ + QCString &getString(const char *fileName,int num,const char *name) const; + + /*! Returns the value of the list option with name \a fileName. + * The arguments \a num and \a name are for debugging purposes only. + * There is a convenience function Config_getList() for this. + */ + QStrList &getList(const char *fileName,int num,const char *name) const; + + /*! Returns the value of the enum option with name \a fileName. + * The arguments \a num and \a name are for debugging purposes only. + * There is a convenience function Config_getEnum() for this. + */ + QCString &getEnum(const char *fileName,int num,const char *name) const; + + /*! Returns the value of the integer option with name \a fileName. + * The arguments \a num and \a name are for debugging purposes only. + * There is a convenience function Config_getInt() for this. + */ + int &getInt(const char *fileName,int num,const char *name) const; + + /*! Returns the value of the boolean option with name \a fileName. + * The arguments \a num and \a name are for debugging purposes only. + * There is a convenience function Config_getBool() for this. + */ + bool &getBool(const char *fileName,int num,const char *name) const; + + /*! Returns the ConfigOption corresponding with \a name or 0 if + * the option is not supported. + */ + ConfigOption *get(const char *name) const + { + return m_dict->find(name); + } + /* @} */ + + /*! + * @name Adding configuration options. + * @{ + */ + + /*! Starts a new configuration section with \a name and description \a doc. + * \returns An object representing the option. + */ + ConfigInfo *addInfo(const char *name,const char *doc) + { + ConfigInfo *result = new ConfigInfo(name,doc); + m_options->append(result); + return result; + } + + /*! Adds a new string option with \a name and documentation \a doc. + * \returns An object representing the option. + */ + ConfigString *addString(const char *name, + const char *doc) + { + ConfigString *result = new ConfigString(name,doc); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + + /*! Adds a new enumeration option with \a name and documentation \a doc + * and initial value \a defVal. + * \returns An object representing the option. + */ + ConfigEnum *addEnum(const char *name, + const char *doc, + const char *defVal) + { + ConfigEnum *result = new ConfigEnum(name,doc,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + + /*! Adds a new string option with \a name and documentation \a doc. + * \returns An object representing the option. + */ + ConfigList *addList(const char *name, + const char *doc) + { + ConfigList *result = new ConfigList(name,doc); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + + /*! Adds a new integer option with \a name and documentation \a doc. + * The integer has a range between \a minVal and \a maxVal and a + * default value of \a defVal. + * \returns An object representing the option. + */ + ConfigInt *addInt(const char *name, + const char *doc, + int minVal,int maxVal,int defVal) + { + ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + + /*! Adds a new boolean option with \a name and documentation \a doc. + * The boolean has a default value of \a defVal. + * \returns An object representing the option. + */ + ConfigBool *addBool(const char *name, + const char *doc, + bool defVal) + { + ConfigBool *result = new ConfigBool(name,doc,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + /*! Adds an option that has become obsolete. */ + ConfigOption *addObsolete(const char *name) + { + ConfigObsolete *option = new ConfigObsolete(name); + m_dict->insert(name,option); + m_obsolete->append(option); + return option; + } + /*! Adds an option that has been disabled at compile time. */ + ConfigOption *addDisabled(const char *name) + { + ConfigDisabled *option = new ConfigDisabled(name); + m_dict->insert(name,option); + m_disabled->append(option); + return option; + } + /*! @} */ + + /*! Writes a template configuration to stream \a t. If \a shortIndex + * is \c TRUE the description of each configuration option will + * be omitted. + */ + void writeTemplate(FTextStream &t,bool shortIndex,bool updateOnly); + + void setHeader(const char *header) { m_header = header; } + + ///////////////////////////// + // internal API + ///////////////////////////// + + /*! Converts the string values read from the configuration file + * to real values for non-string type options (like int, and bools) + */ + void convertStrToVal(); + + /*! Replaces references to environment variable by the actual value + * of the environment variable. + */ + void substituteEnvironmentVars(); + + /*! Initialize config variables to their default value */ + void init(); + + /*! Parse a configuration data in string \a str. + * \returns TRUE if successful, or FALSE if the string could not be + * parsed. + */ + //bool parseString(const char *fn,const char *str); + bool parseString(const char *fn,const char *str,bool upd = FALSE); + + /*! Parse a configuration file with name \a fn. + * \returns TRUE if successful, FALSE if the file could not be + * opened or read. + */ + bool parse(const char *fn,bool upd = FALSE); + + /*! Called from the constructor, will add doxygen's default options + * to the configuration object + */ + void create(); + + /*! Append user start comment + */ + void appendStartComment(const QCString &u) + { + m_startComment += u; + } + /*! Append user comment + */ + void appendUserComment(const QCString &u) + { + m_userComment += u; + } + /*! Take the user start comment and reset it internally + * \returns user start comment + */ + QCString takeStartComment() + { + QCString result=m_startComment; + m_startComment.resize(0); + return result.replace(QRegExp("\r"),""); + } + /*! Take the user comment and reset it internally + * \returns user comment + */ + QCString takeUserComment() + { + QCString result=m_userComment; + m_userComment.resize(0); + return result.replace(QRegExp("\r"),""); + } + + protected: + + ConfigImpl() + { + m_options = new QList<ConfigOption>; + m_obsolete = new QList<ConfigOption>; + m_disabled = new QList<ConfigOption>; + m_dict = new QDict<ConfigOption>(257); + m_options->setAutoDelete(TRUE); + m_obsolete->setAutoDelete(TRUE); + m_disabled->setAutoDelete(TRUE); + m_initialized = FALSE; + create(); + } + ~ConfigImpl() + { + delete m_options; + delete m_obsolete; + delete m_disabled; + delete m_dict; + } + + private: + QList<ConfigOption> *m_options; + QList<ConfigOption> *m_obsolete; + QList<ConfigOption> *m_disabled; + QDict<ConfigOption> *m_dict; + static ConfigImpl *m_instance; + QCString m_startComment; + QCString m_userComment; + bool m_initialized; + QCString m_header; +}; + +#endif diff --git a/src/config.l b/src/configimpl.l index 26e0283..df032a6 100644 --- a/src/config.l +++ b/src/configimpl.l @@ -10,6 +10,8 @@ * */ %option never-interactive +%option prefix="configimplYY" + %{ /* @@ -29,7 +31,7 @@ #include <qstack.h> #include <qglobal.h> -#include "config.h" +#include "configimpl.h" #include "version.h" #include "portable.h" #include "util.h" @@ -38,22 +40,9 @@ #include "lang_cfg.h" #include "configoptions.h" -#undef Config_getString -#undef Config_getInt -#undef Config_getList -#undef Config_getEnum -#undef Config_getBool - #define YY_NO_INPUT 1 #define YY_NO_UNISTD_H 1 -// use in-class definitions -#define Config_getString(val) getString(__FILE__,__LINE__,val) -#define Config_getInt(val) getInt(__FILE__,__LINE__,val) -#define Config_getList(val) getList(__FILE__,__LINE__,val) -#define Config_getEnum(val) getEnum(__FILE__,__LINE__,val) -#define Config_getBool(val) getBool(__FILE__,__LINE__,val) - static const char *warning_str = "warning: "; static const char *error_str = "error: "; @@ -175,7 +164,7 @@ void ConfigOption::writeStringList(FTextStream &t,QStrList &l) /* ----------------------------------------------------------------- */ -Config *Config::m_instance = 0; +ConfigImpl *ConfigImpl::m_instance = 0; void ConfigInt::convertStrToVal() { @@ -216,7 +205,7 @@ void ConfigBool::convertStrToVal() } } -QCString &Config::getString(const char *fileName,int num,const char *name) const +QCString &ConfigImpl::getString(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); if (opt==0) @@ -232,7 +221,7 @@ QCString &Config::getString(const char *fileName,int num,const char *name) const return *((ConfigString *)opt)->valueRef(); } -QStrList &Config::getList(const char *fileName,int num,const char *name) const +QStrList &ConfigImpl::getList(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); if (opt==0) @@ -248,7 +237,7 @@ QStrList &Config::getList(const char *fileName,int num,const char *name) const return *((ConfigList *)opt)->valueRef(); } -QCString &Config::getEnum(const char *fileName,int num,const char *name) const +QCString &ConfigImpl::getEnum(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); if (opt==0) @@ -264,7 +253,7 @@ QCString &Config::getEnum(const char *fileName,int num,const char *name) const return *((ConfigEnum *)opt)->valueRef(); } -int &Config::getInt(const char *fileName,int num,const char *name) const +int &ConfigImpl::getInt(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); if (opt==0) @@ -280,7 +269,7 @@ int &Config::getInt(const char *fileName,int num,const char *name) const return *((ConfigInt *)opt)->valueRef(); } -bool &Config::getBool(const char *fileName,int num,const char *name) const +bool &ConfigImpl::getBool(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); if (opt==0) @@ -439,10 +428,8 @@ static QStrList includePathList; static QStack<ConfigFileState> includeStack; static int includeDepth; static bool config_upd = FALSE; - -static QCString encoding; - -static Config *config; +static QCString encoding; +static ConfigImpl *config; /* ----------------------------------------------------------------- */ @@ -858,7 +845,7 @@ static void readIncludeFile(const char *incName) /*@ ---------------------------------------------------------------------------- */ -void Config::writeTemplate(FTextStream &t,bool sl,bool upd) +void ConfigImpl::writeTemplate(FTextStream &t,bool sl,bool upd) { /* print first lines of user comment that were at the beginning of the file, might have special meaning for editors */ if (m_startComment) @@ -884,7 +871,7 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd) } } -void Config::convertStrToVal() +void ConfigImpl::convertStrToVal() { QListIterator<ConfigOption> it = iterator(); ConfigOption *option; @@ -1024,7 +1011,9 @@ void ConfigEnum::substEnvVars() substEnvVarsInString(m_value); } -void Config::substituteEnvironmentVars() +//--------------------------------------------- + +void ConfigImpl::substituteEnvironmentVars() { QListIterator<ConfigOption> it = iterator(); ConfigOption *option; @@ -1034,6 +1023,129 @@ void Config::substituteEnvironmentVars() } } +void ConfigImpl::init() +{ + QListIterator<ConfigOption> it = iterator(); + ConfigOption *option; + for (;(option=it.current());++it) + { + option->init(); + } + + // sanity check if all depends relations are valid + for (it.toFirst();(option=it.current());++it) + { + QCString depName = option->dependsOn(); + if (!depName.isEmpty()) + { + ConfigOption * opt = ConfigImpl::instance()->get(depName); + if (opt==0) + { + config_warn("Config option '%s' has invalid depends relation on unknown option '%s'\n", + option->name().data(),depName.data()); + exit(1); + } + } + } +} + +void ConfigImpl::create() +{ + if (m_initialized) return; + m_initialized = TRUE; + addConfigOptions(this); +} + +static QCString configFileToString(const char *name) +{ + if (name==0 || name[0]==0) return 0; + QFile f; + + bool fileOpened=FALSE; + if (name[0]=='-' && name[1]==0) // read from stdin + { + fileOpened=f.open(IO_ReadOnly,stdin); + if (fileOpened) + { + const int bSize=4096; + QCString contents(bSize); + int totalSize=0; + int size; + while ((size=f.readBlock(contents.rawData()+totalSize,bSize))==bSize) + { + totalSize+=bSize; + contents.resize(totalSize+bSize); + } + totalSize+=size+2; + contents.resize(totalSize); + contents.at(totalSize-2)='\n'; // to help the scanner + contents.at(totalSize-1)='\0'; + return contents; + } + } + else // read from file + { + QFileInfo fi(name); + if (!fi.exists() || !fi.isFile()) + { + config_err("file `%s' not found\n",name); + return ""; + } + f.setName(name); + fileOpened=f.open(IO_ReadOnly); + if (fileOpened) + { + int fsize=f.size(); + QCString contents(fsize+2); + f.readBlock(contents.rawData(),fsize); + f.close(); + if (fsize==0 || contents[fsize-1]=='\n') + contents[fsize]='\0'; + else + contents[fsize]='\n'; // to help the scanner + contents[fsize+1]='\0'; + return contents; + } + } + if (!fileOpened) + { + config_err("cannot open file `%s' for reading\n",name); + exit(1); + } + return ""; +} + +bool ConfigImpl::parseString(const char *fn,const char *str,bool update) +{ + config = ConfigImpl::instance(); + inputString = str; + inputPosition = 0; + yyFileName = fn; + yyLineNr = 1; + includeStack.setAutoDelete(TRUE); + includeStack.clear(); + includeDepth = 0; + configimplYYrestart( configimplYYin ); + BEGIN( PreStart ); + config_upd = update; + configimplYYlex(); + config_upd = FALSE; + inputString = 0; + return TRUE; +} + +bool ConfigImpl::parse(const char *fn,bool update) +{ + int retval; + encoding = "UTF-8"; + printlex(yy_flex_debug, TRUE, __FILE__, fn); + retval = parseString(fn,configFileToString(fn), update); + printlex(yy_flex_debug, FALSE, __FILE__, fn); + return retval; +} + +//---------------------------------------------------------------------- + static void cleanUpPaths(QStrList &str) { char *sfp = str.first(); @@ -1045,50 +1157,54 @@ static void cleanUpPaths(QStrList &str) char c; while ((c=*p)) { - if (c=='\\') *p='/'; - p++; + if (c=='\\') *p='/'; + p++; } } QCString path = sfp; if ((path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':')) || - path.at(path.length()-1)!='/' + path.at(path.length()-1)!='/' ) { QFileInfo fi(path); if (fi.exists() && fi.isDir()) { - int i = str.at(); - str.remove(); - if (str.at()==i) // did not remove last item - str.insert(i,fi.absFilePath().utf8()+"/"); - else - str.append(fi.absFilePath().utf8()+"/"); + int i = str.at(); + QString p = fi.absFilePath(); + if (p.at(p.length()-1)!='/') + p.append('/'); + str.remove(); + if (str.at()==i) // did not remove last item + str.insert(i,p.utf8()); + else + str.append(p.utf8()); } } sfp = str.next(); } } -void Config::checkFileName(const char *optionName) +static void checkFileName(QCString &s,const char *optionName) { - QCString &s = Config_getString(optionName); QCString val = s.stripWhiteSpace().lower(); if ((val=="yes" || val=="true" || val=="1" || val=="all") || - (val=="no" || val=="false" || val=="0" || val=="none")) + (val=="no" || val=="false" || val=="0" || val=="none")) { - config_err("file name expected for option %s, got %s instead. Ignoring...\n",optionName,s.data()); + err("file name expected for option %s, got %s instead. Ignoring...\n",optionName,s.data()); s=""; // note the use of &s above: this will change the option value! } } -void Config::check() +#include "config.h" + +void Config::init() { - //if (!projectName.isEmpty()) - //{ - // projectName[0]=toupper(projectName[0]); - //} + ConfigImpl::instance()->init(); +} - QCString &warnFormat = Config_getString("WARN_FORMAT"); +void Config::checkAndCorrect() +{ + QCString &warnFormat = ConfigImpl_getString("WARN_FORMAT"); if (warnFormat.stripWhiteSpace().isEmpty()) { warnFormat="$file:$line $text"; @@ -1097,59 +1213,63 @@ void Config::check() { if (warnFormat.find("$file")==-1) { - config_warn("warning format does not contain a $file tag!\n"); + warn_uncond("warning format does not contain a $file tag!\n"); + } if (warnFormat.find("$line")==-1) { - config_warn("warning format does not contain a $line tag!\n"); + warn_uncond("warning format does not contain a $line tag!\n"); } if (warnFormat.find("$text")==-1) { - config_warn("warning format foes not contain a $text tag!\n"); + warn_uncond("warning format foes not contain a $text tag!\n"); } } - QCString &manExtension = Config_getString("MAN_EXTENSION"); - + QCString &manExtension = ConfigImpl_getString("MAN_EXTENSION"); + // set default man page extension if non is given by the user if (manExtension.isEmpty()) { manExtension=".3"; } - - QCString &paperType = Config_getEnum("PAPER_TYPE"); - paperType=paperType.lower().stripWhiteSpace(); + + QCString &paperType = ConfigImpl_getEnum("PAPER_TYPE"); + paperType=paperType.lower().stripWhiteSpace(); if (paperType.isEmpty() || paperType=="a4wide") { paperType = "a4"; } - if (paperType!="a4" && paperType!="letter" && + if (paperType!="a4" && paperType!="letter" && paperType!="legal" && paperType!="executive") { - config_err("Unknown page type specified\n"); + err("Unknown page type specified\n"); paperType="a4"; } - - QCString &outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + + QCString &outputLanguage=ConfigImpl_getEnum("OUTPUT_LANGUAGE"); outputLanguage=outputLanguage.stripWhiteSpace(); if (outputLanguage.isEmpty()) { outputLanguage = "English"; } - QCString &htmlFileExtension=Config_getString("HTML_FILE_EXTENSION"); + QCString &htmlFileExtension=ConfigImpl_getString("HTML_FILE_EXTENSION"); htmlFileExtension=htmlFileExtension.stripWhiteSpace(); if (htmlFileExtension.isEmpty()) { htmlFileExtension = ".html"; } - + // expand the relative stripFromPath values - QStrList &stripFromPath = Config_getList("STRIP_FROM_PATH"); + QStrList &stripFromPath = ConfigImpl_getList("STRIP_FROM_PATH"); char *sfp = stripFromPath.first(); if (sfp==0) // by default use the current path { - stripFromPath.append(QDir::currentDirPath().utf8()+"/"); + QString p = QDir::currentDirPath(); + if (p.at(p.length()-1)!='/') + p.append('/'); + stripFromPath.append(p.utf8()); } else { @@ -1157,49 +1277,49 @@ void Config::check() } // expand the relative stripFromPath values - QStrList &stripFromIncPath = Config_getList("STRIP_FROM_INC_PATH"); + QStrList &stripFromIncPath = ConfigImpl_getList("STRIP_FROM_INC_PATH"); cleanUpPaths(stripFromIncPath); - + // Test to see if HTML header is valid - QCString &headerFile = Config_getString("HTML_HEADER"); + QCString &headerFile = ConfigImpl_getString("HTML_HEADER"); if (!headerFile.isEmpty()) { QFileInfo fi(headerFile); if (!fi.exists()) { - config_err("tag HTML_HEADER: header file `%s' " + err("tag HTML_HEADER: header file `%s' " "does not exist\n",headerFile.data()); exit(1); } } // Test to see if HTML footer is valid - QCString &footerFile = Config_getString("HTML_FOOTER"); + QCString &footerFile = ConfigImpl_getString("HTML_FOOTER"); if (!footerFile.isEmpty()) { QFileInfo fi(footerFile); if (!fi.exists()) { - config_err("tag HTML_FOOTER: footer file `%s' " + err("tag HTML_FOOTER: footer file `%s' " "does not exist\n",footerFile.data()); exit(1); } } // Test to see if MathJax code file is valid - if (Config_getBool("USE_MATHJAX")) + if (ConfigImpl_getBool("USE_MATHJAX")) { - QCString &MathJaxCodefile = Config_getString("MATHJAX_CODEFILE"); + QCString &MathJaxCodefile = ConfigImpl_getString("MATHJAX_CODEFILE"); if (!MathJaxCodefile.isEmpty()) { QFileInfo fi(MathJaxCodefile); if (!fi.exists()) { - config_err("tag MATHJAX_CODEFILE file `%s' " + err("tag MATHJAX_CODEFILE file `%s' " "does not exist\n",MathJaxCodefile.data()); exit(1); } } - QCString &path = Config_getString("MATHJAX_RELPATH"); + QCString &path = ConfigImpl_getString("MATHJAX_RELPATH"); if (!path.isEmpty() && path.at(path.length()-1)!='/') { path+="/"; @@ -1208,43 +1328,43 @@ void Config::check() } // Test to see if LaTeX header is valid - QCString &latexHeaderFile = Config_getString("LATEX_HEADER"); + QCString &latexHeaderFile = ConfigImpl_getString("LATEX_HEADER"); if (!latexHeaderFile.isEmpty()) { QFileInfo fi(latexHeaderFile); if (!fi.exists()) { - config_err("tag LATEX_HEADER: header file `%s' " + err("tag LATEX_HEADER: header file `%s' " "does not exist\n",latexHeaderFile.data()); exit(1); } } // Test to see if LaTeX footer is valid - QCString &latexFooterFile = Config_getString("LATEX_FOOTER"); + QCString &latexFooterFile = ConfigImpl_getString("LATEX_FOOTER"); if (!latexFooterFile.isEmpty()) { QFileInfo fi(latexFooterFile); if (!fi.exists()) { - config_err("tag LATEX_FOOTER: footer file `%s' " + err("tag LATEX_FOOTER: footer file `%s' " "does not exist\n",latexFooterFile.data()); exit(1); } } // check include path - QStrList &includePath = Config_getList("INCLUDE_PATH"); + QStrList &includePath = ConfigImpl_getList("INCLUDE_PATH"); char *s=includePath.first(); while (s) { QFileInfo fi(s); - if (!fi.exists()) config_warn("tag INCLUDE_PATH: include path `%s' " + if (!fi.exists()) warn_uncond("tag INCLUDE_PATH: include path `%s' " "does not exist\n",s); s=includePath.next(); } // check aliases - QStrList &aliasList = Config_getList("ALIASES"); + QStrList &aliasList = ConfigImpl_getList("ALIASES"); s=aliasList.first(); while (s) { @@ -1254,33 +1374,33 @@ void Config::check() alias=alias.stripWhiteSpace(); if (alias.find(re1)!=0 && alias.find(re2)!=0) { - config_err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n", + err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n", alias.data()); } s=aliasList.next(); } // check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled - if (Config_getBool("GENERATE_TREEVIEW") && Config_getBool("GENERATE_HTMLHELP")) + if (ConfigImpl_getBool("GENERATE_TREEVIEW") && ConfigImpl_getBool("GENERATE_HTMLHELP")) { - config_err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n"); - Config_getBool("GENERATE_TREEVIEW")=FALSE; + err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n"); + ConfigImpl_getBool("GENERATE_TREEVIEW")=FALSE; } - if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTMLHELP")) + if (ConfigImpl_getBool("SEARCHENGINE") && ConfigImpl_getBool("GENERATE_HTMLHELP")) { - config_err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n"); - Config_getBool("SEARCHENGINE")=FALSE; + err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n"); + ConfigImpl_getBool("SEARCHENGINE")=FALSE; } // check if SEPARATE_MEMBER_PAGES and INLINE_GROUPED_CLASSES are both enabled - if (Config_getBool("SEPARATE_MEMBER_PAGES") && Config_getBool("INLINE_GROUPED_CLASSES")) + if (ConfigImpl_getBool("SEPARATE_MEMBER_PAGES") && ConfigImpl_getBool("INLINE_GROUPED_CLASSES")) { - config_err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n"); - Config_getBool("SEPARATE_MEMBER_PAGES")=FALSE; + err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n"); + ConfigImpl_getBool("SEPARATE_MEMBER_PAGES")=FALSE; } - + // check dot image format - QCString &dotImageFormat=Config_getEnum("DOT_IMAGE_FORMAT"); + QCString &dotImageFormat=ConfigImpl_getEnum("DOT_IMAGE_FORMAT"); dotImageFormat=dotImageFormat.stripWhiteSpace(); if (dotImageFormat.isEmpty()) { @@ -1288,21 +1408,21 @@ void Config::check() } //else if (dotImageFormat!="gif" && dotImageFormat!="png" && dotImageFormat!="jpg") //{ - // config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data()); + // err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data()); // dotImageFormat = "png"; //} - QCString &dotFontName=Config_getString("DOT_FONTNAME"); + QCString &dotFontName=ConfigImpl_getString("DOT_FONTNAME"); if (dotFontName=="FreeSans" || dotFontName=="FreeSans.ttf") { - config_warn("doxygen no longer ships with the FreeSans font.\n" + warn_uncond("doxygen no longer ships with the FreeSans font.\n" "You may want to clear or change DOT_FONTNAME.\n" "Otherwise you run the risk that the wrong font is being used for dot generated graphs.\n"); } - - + + // check dot path - QCString &dotPath = Config_getString("DOT_PATH"); + QCString &dotPath = ConfigImpl_getString("DOT_PATH"); if (!dotPath.isEmpty()) { QFileInfo fi(dotPath); @@ -1315,7 +1435,7 @@ void Config::check() QFileInfo dp(dotPath+"/dot"+portable_commandExtension()); if (!dp.exists() || !dp.isFile()) { - config_warn("the dot tool could not be found at %s\n",dotPath.data()); + warn_uncond("the dot tool could not be found at %s\n",dotPath.data()); dotPath=""; } else @@ -1334,13 +1454,13 @@ void Config::check() } // check mscgen path - QCString &mscgenPath = Config_getString("MSCGEN_PATH"); + QCString &mscgenPath = ConfigImpl_getString("MSCGEN_PATH"); if (!mscgenPath.isEmpty()) { QFileInfo dp(mscgenPath+"/mscgen"+portable_commandExtension()); if (!dp.exists() || !dp.isFile()) { - config_warn("the mscgen tool could not be found at %s\n",mscgenPath.data()); + warn_uncond("the mscgen tool could not be found at %s\n",mscgenPath.data()); mscgenPath=""; } else @@ -1358,7 +1478,7 @@ void Config::check() } // check plantuml path - QCString &plantumlJarPath = Config_getString("PLANTUML_JAR_PATH"); + QCString &plantumlJarPath = ConfigImpl_getString("PLANTUML_JAR_PATH"); if (!plantumlJarPath.isEmpty()) { QFileInfo pu(plantumlJarPath); @@ -1371,7 +1491,7 @@ void Config::check() } else { - config_err("Jar file plantuml.jar not found at location " + err("Jar file plantuml.jar not found at location " "specified via PLANTUML_JAR_PATH: '%s'\n",plantumlJarPath.data()); plantumlJarPath=""; } @@ -1382,20 +1502,20 @@ void Config::check() } else { - config_err("path specified via PLANTUML_JAR_PATH does not exist or not a directory: %s\n", + err("path specified via PLANTUML_JAR_PATH does not exist or not a directory: %s\n", plantumlJarPath.data()); plantumlJarPath=""; } } // check dia path - QCString &diaPath = Config_getString("DIA_PATH"); + QCString &diaPath = ConfigImpl_getString("DIA_PATH"); if (!diaPath.isEmpty()) { QFileInfo dp(diaPath+"/dia"+portable_commandExtension()); if (!dp.exists() || !dp.isFile()) { - config_warn("dia could not be found at %s\n",diaPath.data()); + warn_uncond("dia could not be found at %s\n",diaPath.data()); diaPath=""; } else @@ -1413,7 +1533,7 @@ void Config::check() } // check input - QStrList &inputSources=Config_getList("INPUT"); + QStrList &inputSources=ConfigImpl_getList("INPUT"); if (inputSources.count()==0) { // use current dir as the default @@ -1427,74 +1547,83 @@ void Config::check() QFileInfo fi(s); if (!fi.exists()) { - config_warn("tag INPUT: input source `%s' does not exist\n",s); + warn_uncond("tag INPUT: input source `%s' does not exist\n",s); } s=inputSources.next(); } } - initFilePattern(); + // add default file patterns if needed + QStrList &filePatternList = ConfigImpl_getList("FILE_PATTERNS"); + if (filePatternList.isEmpty()) + { + ConfigOption * opt = ConfigImpl::instance()->get("FILE_PATTERNS"); + if (opt->kind()==ConfigOption::O_List) + { + ((ConfigList*)opt)->init(); + } + } // add default pattern if needed - QStrList &examplePatternList = Config_getList("EXAMPLE_PATTERNS"); + QStrList &examplePatternList = ConfigImpl_getList("EXAMPLE_PATTERNS"); if (examplePatternList.isEmpty()) { examplePatternList.append("*"); } // if no output format is enabled, warn the user - if (!Config_getBool("GENERATE_HTML") && - !Config_getBool("GENERATE_LATEX") && - !Config_getBool("GENERATE_MAN") && - !Config_getBool("GENERATE_RTF") && - !Config_getBool("GENERATE_XML") && - !Config_getBool("GENERATE_PERLMOD") && - !Config_getBool("GENERATE_RTF") && - !Config_getBool("GENERATE_DOCBOOK") && - !Config_getBool("GENERATE_AUTOGEN_DEF") && - Config_getString("GENERATE_TAGFILE").isEmpty() + if (!ConfigImpl_getBool("GENERATE_HTML") && + !ConfigImpl_getBool("GENERATE_LATEX") && + !ConfigImpl_getBool("GENERATE_MAN") && + !ConfigImpl_getBool("GENERATE_RTF") && + !ConfigImpl_getBool("GENERATE_XML") && + !ConfigImpl_getBool("GENERATE_PERLMOD") && + !ConfigImpl_getBool("GENERATE_RTF") && + !ConfigImpl_getBool("GENERATE_DOCBOOK") && + !ConfigImpl_getBool("GENERATE_AUTOGEN_DEF") && + ConfigImpl_getString("GENERATE_TAGFILE").isEmpty() ) { - config_warn("No output formats selected! Set at least one of the main GENERATE_* options to YES.\n"); + warn_uncond("No output formats selected! Set at least one of the main GENERATE_* options to YES.\n"); } // check HTMLHELP creation requirements - if (!Config_getBool("GENERATE_HTML") && - Config_getBool("GENERATE_HTMLHELP")) + if (!ConfigImpl_getBool("GENERATE_HTML") && + ConfigImpl_getBool("GENERATE_HTMLHELP")) { - config_warn("GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n"); + warn_uncond("GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n"); } // check QHP creation requirements - if (Config_getBool("GENERATE_QHP")) + if (ConfigImpl_getBool("GENERATE_QHP")) { - if (Config_getString("QHP_NAMESPACE").isEmpty()) + if (ConfigImpl_getString("QHP_NAMESPACE").isEmpty()) { - config_err("GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n"); - Config_getString("QHP_NAMESPACE")="org.doxygen.doc"; + err("GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n"); + ConfigImpl_getString("QHP_NAMESPACE")="org.doxygen.doc"; } - if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty()) + if (ConfigImpl_getString("QHP_VIRTUAL_FOLDER").isEmpty()) { - config_err("GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n"); - Config_getString("QHP_VIRTUAL_FOLDER")="doc"; + err("GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n"); + ConfigImpl_getString("QHP_VIRTUAL_FOLDER")="doc"; } } - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO")) + if (ConfigImpl_getBool("OPTIMIZE_OUTPUT_JAVA") && ConfigImpl_getBool("INLINE_INFO")) { - // don't show inline info for Java output, since Java has no inline + // don't show inline info for Java output, since Java has no inline // concept. - Config_getBool("INLINE_INFO")=FALSE; + ConfigImpl_getBool("INLINE_INFO")=FALSE; } - int &depth = Config_getInt("MAX_DOT_GRAPH_DEPTH"); + int &depth = ConfigImpl_getInt("MAX_DOT_GRAPH_DEPTH"); if (depth==0) { depth=1000; } - int &hue = Config_getInt("HTML_COLORSTYLE_HUE"); + int &hue = ConfigImpl_getInt("HTML_COLORSTYLE_HUE"); if (hue<0) { hue=0; @@ -1504,7 +1633,7 @@ void Config::check() hue=hue%360; } - int &sat = Config_getInt("HTML_COLORSTYLE_SAT"); + int &sat = ConfigImpl_getInt("HTML_COLORSTYLE_SAT"); if (sat<0) { sat=0; @@ -1513,7 +1642,7 @@ void Config::check() { sat=255; } - int &gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + int &gamma = ConfigImpl_getInt("HTML_COLORSTYLE_GAMMA"); if (gamma<40) { gamma=40; @@ -1523,16 +1652,16 @@ void Config::check() gamma=240; } - QCString mathJaxFormat = Config_getEnum("MATHJAX_FORMAT"); + QCString mathJaxFormat = ConfigImpl_getEnum("MATHJAX_FORMAT"); if (!mathJaxFormat.isEmpty() && mathJaxFormat!="HTML-CSS" && mathJaxFormat!="NativeMML" && mathJaxFormat!="SVG") { - config_err("Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n"); - Config_getEnum("MATHJAX_FORMAT")="HTML-CSS"; + err("Unsupported value for MATHJAX_FORMAT: Should be one of HTML-CSS, NativeMML, or SVG\n"); + ConfigImpl_getEnum("MATHJAX_FORMAT")="HTML-CSS"; } // add default words if needed - QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF"); + QStrList &annotationFromBrief = ConfigImpl_getList("ABBREVIATE_BRIEF"); if (annotationFromBrief.isEmpty()) { annotationFromBrief.append("The $name class"); @@ -1549,21 +1678,21 @@ void Config::check() } // some default settings for vhdl - if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") && - (Config_getBool("INLINE_INHERITED_MEMB") || - Config_getBool("INHERIT_DOCS") || - !Config_getBool("HIDE_SCOPE_NAMES") || - !Config_getBool("EXTRACT_PRIVATE") || - !Config_getBool("EXTRACT_PACKAGE") + if (ConfigImpl_getBool("OPTIMIZE_OUTPUT_VHDL") && + (ConfigImpl_getBool("INLINE_INHERITED_MEMB") || + ConfigImpl_getBool("INHERIT_DOCS") || + !ConfigImpl_getBool("HIDE_SCOPE_NAMES") || + !ConfigImpl_getBool("EXTRACT_PRIVATE") || + !ConfigImpl_getBool("EXTRACT_PACKAGE") ) ) { - bool b1 = Config_getBool("INLINE_INHERITED_MEMB"); - bool b2 = Config_getBool("INHERIT_DOCS"); - bool b3 = Config_getBool("HIDE_SCOPE_NAMES"); - bool b4 = Config_getBool("EXTRACT_PRIVATE"); - bool b5 = Config_getBool("SKIP_FUNCTION_MACROS"); - bool b6 = Config_getBool("EXTRACT_PACKAGE"); + bool b1 = ConfigImpl_getBool("INLINE_INHERITED_MEMB"); + bool b2 = ConfigImpl_getBool("INHERIT_DOCS"); + bool b3 = ConfigImpl_getBool("HIDE_SCOPE_NAMES"); + bool b4 = ConfigImpl_getBool("EXTRACT_PRIVATE"); + bool b5 = ConfigImpl_getBool("SKIP_FUNCTION_MACROS"); + bool b6 = ConfigImpl_getBool("EXTRACT_PACKAGE"); const char *s1,*s2,*s3,*s4,*s5,*s6; if (b1) s1=" INLINE_INHERITED_MEMB = NO (was YES)\n"; else s1=""; if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2=""; @@ -1573,19 +1702,19 @@ void Config::check() if (!b6) s6=" EXTRACT_PACKAGE = YES (was NO)\n"; else s6=""; - config_warn("enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n" + warn_uncond("enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n" "%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6 ); - Config_getBool("INLINE_INHERITED_MEMB") = FALSE; - Config_getBool("INHERIT_DOCS") = FALSE; - Config_getBool("HIDE_SCOPE_NAMES") = TRUE; - Config_getBool("EXTRACT_PRIVATE") = TRUE; - Config_getBool("ENABLE_PREPROCESSING") = FALSE; - Config_getBool("EXTRACT_PACKAGE") = TRUE; - } + ConfigImpl_getBool("INLINE_INHERITED_MEMB") = FALSE; + ConfigImpl_getBool("INHERIT_DOCS") = FALSE; + ConfigImpl_getBool("HIDE_SCOPE_NAMES") = TRUE; + ConfigImpl_getBool("EXTRACT_PRIVATE") = TRUE; + ConfigImpl_getBool("ENABLE_PREPROCESSING") = FALSE; + ConfigImpl_getBool("EXTRACT_PACKAGE") = TRUE; + } - checkFileName("GENERATE_TAGFILE"); + checkFileName(ConfigImpl_getString("GENERATE_TAGFILE"),"GENERATE_TAGFILE"); #if 0 // TODO: this breaks test 25; SOURCEBROWSER = NO and SOURCE_TOOLTIPS = YES. // So this and other regressions should be analysed and fixed before this can be enabled @@ -1599,140 +1728,50 @@ void Config::check() { ConfigOption * dep = Config::instance()->get(depName); if (dep->kind()==ConfigOption::O_Bool && - Config_getBool(depName)==FALSE) // dependent option is disabled + ConfigImpl_getBool("depName")==FALSE) // dependent option is disabled { if (option->kind()==ConfigOption::O_Bool) { printf("disabling option %s\n",option->name().data()); - Config_getBool(option->name())=FALSE; // also disable this option + ConfigImpl_getBool("option->name("))=FALSE; // also disable this option } } } } #endif + + ConfigValues::instance().init(); + } -void Config::init() +void Config::writeTemplate(FTextStream &t,bool shortList,bool update) { - QListIterator<ConfigOption> it = iterator(); - ConfigOption *option; - for (;(option=it.current());++it) - { - option->init(); - } - - // sanity check if all depends relations are valid - for (it.toFirst();(option=it.current());++it) - { - QCString depName = option->dependsOn(); - if (!depName.isEmpty()) - { - ConfigOption * opt = Config::instance()->get(depName); - if (opt==0) - { - config_warn("Config option '%s' has invalid depends relation on unknown option '%s'\n", - option->name().data(),depName.data()); - exit(1); - } - } - } + ConfigImpl::instance()->writeTemplate(t,shortList,update); } -void Config::create() +bool Config::parse(const char *fileName,bool update) { - if (m_initialized) return; - m_initialized = TRUE; - addConfigOptions(this); + return ConfigImpl::instance()->parse(fileName,update); } -static QCString configFileToString(const char *name) +void Config::postProcess(bool clearHeaderAndFooter) { - if (name==0 || name[0]==0) return 0; - QFile f; + ConfigImpl::instance()->substituteEnvironmentVars(); + ConfigImpl::instance()->convertStrToVal(); - bool fileOpened=FALSE; - if (name[0]=='-' && name[1]==0) // read from stdin + // avoid bootstrapping issues when the config file already + // refers to the files that we are supposed to parse. + if (clearHeaderAndFooter) { - fileOpened=f.open(IO_ReadOnly,stdin); - if (fileOpened) - { - const int bSize=4096; - QCString contents(bSize); - int totalSize=0; - int size; - while ((size=f.readBlock(contents.rawData()+totalSize,bSize))==bSize) - { - totalSize+=bSize; - contents.resize(totalSize+bSize); - } - totalSize+=size+2; - contents.resize(totalSize); - contents.at(totalSize-2)='\n'; // to help the scanner - contents.at(totalSize-1)='\0'; - return contents; - } - } - else // read from file - { - QFileInfo fi(name); - if (!fi.exists() || !fi.isFile()) - { - config_err("file `%s' not found\n",name); - return ""; - } - f.setName(name); - fileOpened=f.open(IO_ReadOnly); - if (fileOpened) - { - int fsize=f.size(); - QCString contents(fsize+2); - f.readBlock(contents.rawData(),fsize); - f.close(); - if (fsize==0 || contents[fsize-1]=='\n') - contents[fsize]='\0'; - else - contents[fsize]='\n'; // to help the scanner - contents[fsize+1]='\0'; - return contents; - } - } - if (!fileOpened) - { - config_err("cannot open file `%s' for reading\n",name); - exit(1); + ConfigImpl_getString("HTML_HEADER")=""; + ConfigImpl_getString("HTML_FOOTER")=""; + ConfigImpl_getString("LATEX_HEADER")=""; + ConfigImpl_getString("LATEX_FOOTER")=""; } - return ""; } -bool Config::parseString(const char *fn,const char *str,bool update) +void Config::deinit() { - config = Config::instance(); - inputString = str; - inputPosition = 0; - yyFileName = fn; - yyLineNr = 1; - includeStack.setAutoDelete(TRUE); - includeStack.clear(); - includeDepth = 0; - configYYrestart( configYYin ); - BEGIN( PreStart ); - config_upd = update; - configYYlex(); - config_upd = FALSE; - inputString = 0; - return TRUE; + ConfigImpl::instance()->deleteInstance(); } -bool Config::parse(const char *fn,bool update) -{ - int retval; - encoding = "UTF-8"; - printlex(yy_flex_debug, TRUE, __FILE__, fn); - retval = parseString(fn,configFileToString(fn), update); - printlex(yy_flex_debug, FALSE, __FILE__, fn); - return retval; -} - -extern "C" { // some bogus code to keep the compiler happy - //int configYYwrap() { return 1 ; } -} diff --git a/src/configoptions.h b/src/configoptions.h index 3979f7a..ec14bd2 100644 --- a/src/configoptions.h +++ b/src/configoptions.h @@ -16,8 +16,8 @@ #ifndef CONFIGOPTIONS #define CONFIGOPTIONS -class Config; +class ConfigImpl; -void addConfigOptions(Config *cfg); +void addConfigOptions(ConfigImpl *cfg); #endif diff --git a/src/constexp.l b/src/constexp.l index e3ff3f1..8a7db04 100644 --- a/src/constexp.l +++ b/src/constexp.l @@ -16,6 +16,8 @@ * */ %option never-interactive +%option prefix="constexpYY" + %{ #include "constexp.h" diff --git a/src/constexp.y b/src/constexp.y index c63fa5e..f87ebf3 100644 --- a/src/constexp.y +++ b/src/constexp.y @@ -42,6 +42,9 @@ int constexpYYlex(); %} +%no-lines +%name-prefix="constexpYY" + %token TOK_QUESTIONMARK %token TOK_COLON %token TOK_OR diff --git a/src/context.cpp b/src/context.cpp index 2412010..e5d98c1 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -35,6 +35,7 @@ #include "docparser.h" #include "htmlgen.h" #include "htmldocvisitor.h" +#include "htmlhelp.h" #include "latexgen.h" #include "latexdocvisitor.h" #include "dot.h" @@ -46,12 +47,11 @@ #include "arguments.h" #include "groupdef.h" #include "searchindex.h" +#include "resourcemgr.h" // TODO: pass the current file to Dot*::writeGraph, so the user can put dot graphs in other // files as well -#define ADD_PROPERTY(name) addProperty(#name,this,&Private::name); - enum ContextOutputFormat { ContextOutputFormat_Unspecified=0, @@ -332,22 +332,31 @@ TemplateVariant ConfigContext::get(const char *name) const TemplateVariant result; if (name) { - ConfigOption *option = Config::instance()->get(name); + const ConfigValues::Info *option = ConfigValues::instance().get(name); if (option) { - switch (option->kind()) - { - case ConfigOption::O_Bool: - return TemplateVariant(*((ConfigBool*)option)->valueRef()); - case ConfigOption::O_Int: - return TemplateVariant(*((ConfigInt*)option)->valueRef()); - case ConfigOption::O_Enum: - return TemplateVariant(*((ConfigEnum*)option)->valueRef()); - case ConfigOption::O_String: - return TemplateVariant(*((ConfigString*)option)->valueRef()); - case ConfigOption::O_List: - return p->fetchList(name,((ConfigList*)option)->valueRef()); - break; + switch (option->type) + { + case ConfigValues::Info::Bool: + { + bool b = ConfigValues::instance().*((ConfigValues::InfoBool*)option)->item; + return TemplateVariant(b); + } + case ConfigValues::Info::Int: + { + int i = ConfigValues::instance().*((ConfigValues::InfoInt*)option)->item; + return TemplateVariant(i); + } + case ConfigValues::Info::String: + { + QCString s = ConfigValues::instance().*((ConfigValues::InfoString*)option)->item; + return TemplateVariant(s); + } + case ConfigValues::Info::List: + { + const QStrList &l = ConfigValues::instance().*((ConfigValues::InfoList*)option)->item; + return p->fetchList(name,&l); + } default: break; } @@ -396,7 +405,7 @@ class DoxygenContext::Private private: struct Cachable { - Cachable() { maxJaxCodeFile=fileToString(Config_getString("MATHJAX_CODEFILE")); } + Cachable() { maxJaxCodeFile=fileToString(Config_getString(MATHJAX_CODEFILE)); } QCString maxJaxCodeFile; }; mutable Cachable m_cache; @@ -722,12 +731,12 @@ class TranslateContext::Private } TemplateVariant fileMembersDescription() const { - static bool extractAll = Config_getBool("EXTRACT_ALL"); + static bool extractAll = Config_getBool(EXTRACT_ALL); return theTranslator->trFileMembersDescription(extractAll); } TemplateVariant namespaceMembersDescription() const { - static bool extractAll = Config_getBool("EXTRACT_ALL"); + static bool extractAll = Config_getBool(EXTRACT_ALL); return theTranslator->trNamespaceMemberDescription(extractAll); } TemplateVariant classHierarchyDescription() const @@ -744,8 +753,8 @@ class TranslateContext::Private } TemplateVariant classMembersDescription() const { - static bool extractAll = Config_getBool("EXTRACT_ALL"); - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool extractAll = Config_getBool(EXTRACT_ALL); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); if (fortranOpt) { return theTranslator->trCompoundMembersDescriptionFortran(extractAll); @@ -893,17 +902,17 @@ class TranslateContext::Private } TemplateVariant fileListDescription() const { - bool extractAll = Config_getBool("EXTRACT_ALL"); + bool extractAll = Config_getBool(EXTRACT_ALL); return theTranslator->trFileListDescription(extractAll); } TemplateVariant modulesDescription() const { - bool extractAll = Config_getBool("EXTRACT_ALL"); + bool extractAll = Config_getBool(EXTRACT_ALL); return theTranslator->trModulesListDescription(extractAll); } TemplateVariant namespaceListDescription() const { - bool extractAll = Config_getBool("EXTRACT_ALL"); + bool extractAll = Config_getBool(EXTRACT_ALL); return theTranslator->trNamespaceListDescription(extractAll); } TemplateVariant directories() const @@ -916,8 +925,8 @@ class TranslateContext::Private } TemplateVariant functions() const { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); return fortranOpt ? theTranslator->trSubprograms() : vhdlOpt ? VhdlDocGen::trFunctionAndProc() : theTranslator->trFunctions(); @@ -998,6 +1007,10 @@ class TranslateContext::Private { return theTranslator->trExamplesDescription(); } + TemplateVariant langString() const + { + return HtmlHelp::getLanguageString(); + } Private() { static bool init=FALSE; @@ -1187,13 +1200,15 @@ class TranslateContext::Private s_inst.addProperty("extendsClass", &Private::extendsClass); //%% string examplesDescription s_inst.addProperty("examplesDescription",&Private::examplesDescription); + //%% string langstring + s_inst.addProperty("langString", &Private::langString); init=TRUE; } - m_javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - m_fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - m_vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + m_javaOpt = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + m_fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + m_vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); } TemplateVariant get(const char *n) const { @@ -1296,7 +1311,7 @@ static TemplateVariant parseCode(MemberDef *md,const QCString &scopeName,const Q static TemplateVariant parseCode(FileDef *fd,const QCString &relPath) { - static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); + static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); ParserInterface *pIntf = Doxygen::parserManager->getParser(fd->getDefFileExtension()); pIntf->resetCodeParserState(); QGString s; @@ -1430,7 +1445,7 @@ class DefinitionContext } QCString relPathAsString() const { - static bool createSubdirs = Config_getBool("CREATE_SUBDIRS"); + static bool createSubdirs = Config_getBool(CREATE_SUBDIRS); return createSubdirs ? QCString("../../") : QCString(""); } virtual TemplateVariant relPath() const @@ -1507,6 +1522,7 @@ class DefinitionContext case SrcLangExt_Fortran: result="fortran"; break; case SrcLangExt_VHDL: result="vhdl"; break; case SrcLangExt_XML: result="xml"; break; + case SrcLangExt_SQL: result="sql"; break; case SrcLangExt_Tcl: result="tcl"; break; case SrcLangExt_Markdown: result="markdown"; break; } @@ -1910,9 +1926,9 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> TemplateVariant hasInheritanceDiagram() const { bool result=FALSE; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool classDiagrams = Config_getBool("CLASS_DIAGRAMS"); - static bool classGraph = Config_getBool("CLASS_GRAPH"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool classDiagrams = Config_getBool(CLASS_DIAGRAMS); + static bool classGraph = Config_getBool(CLASS_GRAPH); if (haveDot && (classDiagrams || classGraph)) { DotClassGraph *cg = getClassGraph(); @@ -1927,9 +1943,9 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> TemplateVariant inheritanceDiagram() const { QGString result; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool classDiagrams = Config_getBool("CLASS_DIAGRAMS"); - static bool classGraph = Config_getBool("CLASS_GRAPH"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool classDiagrams = Config_getBool(CLASS_DIAGRAMS); + static bool classGraph = Config_getBool(CLASS_GRAPH); if (haveDot && (classDiagrams || classGraph)) { DotClassGraph *cg = getClassGraph(); @@ -1974,7 +1990,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> t << "<img src=\""; t << relPathAsString() << m_classDef->getOutputFileBase(); t << ".png\" usemap=\"#" << convertToId(name) << "_map\" alt=\"\"/>" << endl; - t << "<map id=\"" << convertToId(name) << "_map\" name=\"" << name << "_map\">" << endl; + t << "<map id=\"" << convertToId(name) << "_map\" name=\"" << convertToId(name) << "_map\">" << endl; d.writeImage(t,g_globals.outputDir, relPathAsString(), m_classDef->getOutputFileBase()); @@ -2006,12 +2022,12 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private> } TemplateVariant hasCollaborationDiagram() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); return haveDot && !getCollaborationGraph()->isTrivial(); } TemplateVariant collaborationDiagram() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); QGString result; if (haveDot) { @@ -3009,13 +3025,13 @@ class FileContext::Private : public DefinitionContext<FileContext::Private> } TemplateVariant hasIncludeGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); DotInclDepGraph *incGraph = getIncludeGraph(); return (haveDot && !incGraph->isTooBig() && !incGraph->isTrivial()); } TemplateVariant includeGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); QGString result; if (haveDot) { @@ -3061,13 +3077,13 @@ class FileContext::Private : public DefinitionContext<FileContext::Private> } TemplateVariant hasIncludedByGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); DotInclDepGraph *incGraph = getIncludedByGraph(); return (haveDot && !incGraph->isTooBig() && !incGraph->isTrivial()); } TemplateVariant includedByGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); QGString result; if (haveDot) { @@ -3470,8 +3486,8 @@ class DirContext::Private : public DefinitionContext<DirContext::Private> TemplateVariant hasDirGraph() const { bool result=FALSE; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool dirGraph = Config_getBool("DIRECTORY_GRAPH"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool dirGraph = Config_getBool(DIRECTORY_GRAPH); if (haveDot && dirGraph) { DotDirDeps *graph = getDirDepsGraph(); @@ -3482,8 +3498,8 @@ class DirContext::Private : public DefinitionContext<DirContext::Private> TemplateVariant dirGraph() const { QGString result; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool dirGraph = Config_getBool("DIRECTORY_GRAPH"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool dirGraph = Config_getBool(DIRECTORY_GRAPH); if (haveDot && dirGraph) { DotDirDeps *graph = getDirDepsGraph(); @@ -3785,7 +3801,7 @@ class TextGeneratorLatex : public TextGeneratorIntf const char *anchor,const char *text ) const { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (!ref && pdfHyperlinks) { m_ts << "\\hyperlink{"; @@ -3798,7 +3814,7 @@ class TextGeneratorLatex : public TextGeneratorIntf } else { - m_ts << "{\\bf "; + m_ts << "\\textbf{ "; filterLatexString(m_ts,text); m_ts << "}"; } @@ -3954,6 +3970,8 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> s_inst.addProperty("parameters", &Private::parameters); s_inst.addProperty("hasConstQualifier", &Private::hasConstQualifier); s_inst.addProperty("hasVolatileQualifier",&Private::hasVolatileQualifier); + s_inst.addProperty("hasRefQualifierLValue", &Private::hasRefQualifierLValue); + s_inst.addProperty("hasRefQualifierRValue", &Private::hasRefQualifierRValue); s_inst.addProperty("trailingReturnType", &Private::trailingReturnType); s_inst.addProperty("extraTypeChars", &Private::extraTypeChars); s_inst.addProperty("templateDecls", &Private::templateDecls); @@ -4556,6 +4574,16 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> ArgumentList *al = getDefArgList(); return al ? al->volatileSpecifier : FALSE; } + TemplateVariant hasRefQualifierLValue() const + { + ArgumentList *al = getDefArgList(); + return al ? al->refQualifier==RefQualifierLValue : FALSE; + } + TemplateVariant hasRefQualifierRValue() const + { + ArgumentList *al = getDefArgList(); + return al ? al->refQualifier==RefQualifierRValue : FALSE; + } TemplateVariant trailingReturnType() const { ArgumentList *al = getDefArgList(); @@ -4881,7 +4909,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> } TemplateVariant hasCallGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); if (m_memberDef->hasCallGraph() && haveDot && (m_memberDef->isFunction() || m_memberDef->isSlot() || m_memberDef->isSignal())) { @@ -4941,7 +4969,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private> } TemplateVariant hasCallerGraph() const { - static bool haveDot = Config_getBool("HAVE_DOT"); + static bool haveDot = Config_getBool(HAVE_DOT); if (m_memberDef->hasCallerGraph() && haveDot && (m_memberDef->isFunction() || m_memberDef->isSlot() || m_memberDef->isSignal())) { @@ -5200,8 +5228,8 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private> TemplateVariant hasGroupGraph() const { bool result=FALSE; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool groupGraphs = Config_getBool("GROUP_GRAPHS"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool groupGraphs = Config_getBool(GROUP_GRAPHS); if (haveDot && groupGraphs) { DotGroupCollaboration *graph = getGroupGraph(); @@ -5212,8 +5240,8 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private> TemplateVariant groupGraph() const { QGString result; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool groupGraphs = Config_getBool("GROUP_GRAPHS"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool groupGraphs = Config_getBool(GROUP_GRAPHS); if (haveDot && groupGraphs) { DotGroupCollaboration *graph = getGroupGraph(); @@ -5792,8 +5820,8 @@ class ClassIndexContext::Private } TemplateVariant title() const { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (fortranOpt) { return theTranslator->trDataTypes(); @@ -5879,7 +5907,7 @@ static int computeNumNodesAtLevel(const TemplateStructIntf *s,int level,int maxL static int computePreferredDepth(const TemplateListIntf *list,int maxDepth) { - int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES"); + int preferredNumEntries = Config_getInt(HTML_INDEX_NUM_ENTRIES); int preferredDepth=1; if (preferredNumEntries>0) { @@ -5991,7 +6019,7 @@ class ClassHierarchyContext::Private } TemplateVariant title() const { - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (vhdlOpt) { return VhdlDocGen::trDesignUnitHierarchy(); @@ -6227,7 +6255,7 @@ class NestingNodeContext::Private } QCString relPathAsString() const { - static bool createSubdirs = Config_getBool("CREATE_SUBDIRS"); + static bool createSubdirs = Config_getBool(CREATE_SUBDIRS); return createSubdirs ? QCString("../../") : QCString(""); } TemplateVariant brief() const @@ -6512,7 +6540,7 @@ class NestingContext::Private : public GenericNodeListContext GroupDef *gd; for (gli.toFirst();(gd=gli.current());++gli) { - static bool externalGroups = Config_getBool("EXTERNAL_GROUPS"); + static bool externalGroups = Config_getBool(EXTERNAL_GROUPS); if (!gd->isASubGroup() && gd->isVisible() && (!gd->isReference() || externalGroups) ) @@ -6744,8 +6772,8 @@ class ClassTreeContext::Private } TemplateVariant title() const { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (fortranOpt) { return theTranslator->trCompoundListFortran(); @@ -6912,9 +6940,9 @@ class NamespaceTreeContext::Private } TemplateVariant title() const { - static bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool javaOpt = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (javaOpt || vhdlOpt) { return theTranslator->trPackages(); @@ -7668,7 +7696,7 @@ class NavPathElemContext::Private } QCString relPathAsString() const { - static bool createSubdirs = Config_getBool("CREATE_SUBDIRS"); + static bool createSubdirs = Config_getBool(CREATE_SUBDIRS); return createSubdirs ? QCString("../../") : QCString(""); } TemplateVariant externalReference() const @@ -8302,8 +8330,8 @@ class InheritanceGraphContext::Private TemplateVariant graph() const { QGString result; - static bool haveDot = Config_getBool("HAVE_DOT"); - static bool graphicalHierarchy = Config_getBool("GRAPHICAL_HIERARCHY"); + static bool haveDot = Config_getBool(HAVE_DOT); + static bool graphicalHierarchy = Config_getBool(GRAPHICAL_HIERARCHY); if (haveDot && graphicalHierarchy) { FTextStream t(&result); @@ -8637,7 +8665,7 @@ class AllMembersListContext::Private : public GenericNodeListContext { if (ml) { - static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); MemberNameInfoSDict::Iterator mnii(*ml); MemberNameInfo *mni; for (mnii.toFirst();(mni=mnii.current());++mnii) @@ -10157,18 +10185,19 @@ void generateOutputViaTemplate() //%% string space ctx->set("space"," "); - //if (Config_getBool("GENERATE_HTML")) + //if (Config_getBool(GENERATE_HTML)) { // render HTML output + e.setTemplateDir("templates/html"); // TODO: make template part user configurable Template *tpl = e.loadByName("htmllayout.tpl",1); if (tpl) { g_globals.outputFormat = ContextOutputFormat_Html; g_globals.dynSectionId = 0; - g_globals.outputDir = Config_getString("HTML_OUTPUT"); + g_globals.outputDir = Config_getString(HTML_OUTPUT); QDir dir(g_globals.outputDir); createSubDirs(dir); HtmlEscaper htmlEsc; - ctx->setEscapeIntf(Config_getString("HTML_FILE_EXTENSION"),&htmlEsc); + ctx->setEscapeIntf(Config_getString(HTML_FILE_EXTENSION),&htmlEsc); HtmlSpaceless spl; ctx->setSpacelessIntf(&spl); ctx->setOutputDirectory(g_globals.outputDir); @@ -10180,15 +10209,16 @@ void generateOutputViaTemplate() // TODO: clean index before each run... - //if (Config_getBool("GENERATE_LATEX")) + //if (Config_getBool(GENERATE_LATEX)) if (0) { // render LaTeX output + e.setTemplateDir("templates/latex"); // TODO: make template part user configurable Template *tpl = e.loadByName("latexlayout.tpl",1); if (tpl) { g_globals.outputFormat = ContextOutputFormat_Latex; g_globals.dynSectionId = 0; - g_globals.outputDir = Config_getString("LATEX_OUTPUT"); + g_globals.outputDir = Config_getString(LATEX_OUTPUT); QDir dir(g_globals.outputDir); createSubDirs(dir); LatexEscaper latexEsc; @@ -10232,3 +10262,20 @@ void generateOutputViaTemplate() #endif } +void generateTemplateFiles(const char *templateDir) +{ + if (!templateDir) return; + QDir thisDir; + if (!thisDir.exists(templateDir) && !thisDir.mkdir(templateDir)) + { + err("Failed to create output directory '%s'\n",templateDir); + return; + } + QCString outDir = QCString(templateDir)+"/html"; + if (!thisDir.exists(outDir) && !thisDir.mkdir(outDir)) + { + err("Failed to create output directory '%s'\n",templateDir); + return; + } + ResourceMgr::instance().writeCategory("html",outDir); +} diff --git a/src/context.h b/src/context.h index 7c98222..e082c4b 100644 --- a/src/context.h +++ b/src/context.h @@ -1347,5 +1347,6 @@ class SearchIndicesContext : public RefCountedContext, public TemplateListIntf //---------------------------------------------------- void generateOutputViaTemplate(); +void generateTemplateFiles(const char *templateDir); #endif diff --git a/src/declinfo.l b/src/declinfo.l index 0f24d9e..a91f832 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="declinfoYY" + %{ /* diff --git a/src/defargs.l b/src/defargs.l index 9032d8e..a55ad27 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -40,6 +40,8 @@ * further determine the correct separation. */ %option never-interactive +%option prefix="defargsYY" + %{ /* @@ -346,7 +348,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" int bi=g_curArgTypeName.find('('); int fi=bi-1; //printf("func arg fi=%d\n",fi); - while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--; + while (fi>=0 && (isId(g_curArgTypeName.at(fi)) || g_curArgTypeName.at(fi)==':')) fi--; if (fi>=0) { a->type = g_curArgTypeName.left(fi+1); @@ -477,6 +479,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" <FuncQual>"volatile" { g_argList->volatileSpecifier=TRUE; } +<FuncQual>"&" { + g_argList->refQualifier=RefQualifierLValue; + } +<FuncQual>"&&" { + g_argList->refQualifier=RefQualifierRValue; + } <FuncQual,TrailingReturn>"="{B}*"0" { g_argList->pureSpecifier=TRUE; BEGIN(FuncQual); diff --git a/src/defgen.cpp b/src/defgen.cpp index 90ae0a2..cd69ab2 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -557,7 +557,7 @@ void generateDEFForFile(FileDef *fd,FTextStream &t) void generateDEF() { - QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); + QCString outputDirectory = Config_getString(OUTPUT_DIRECTORY); if (outputDirectory.isEmpty()) { outputDirectory=QDir::currentDirPath().utf8(); diff --git a/src/define.cpp b/src/define.cpp index 121f5cb..b5d9170 100644 --- a/src/define.cpp +++ b/src/define.cpp @@ -50,5 +50,5 @@ Define::~Define() bool Define::hasDocumentation() { - return definition && (doc || Config_getBool("EXTRACT_ALL")); + return definition && (doc || Config_getBool(EXTRACT_ALL)); } diff --git a/src/definition.cpp b/src/definition.cpp index d04dd59..68201da 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -149,7 +149,7 @@ void DefinitionImpl::init(const char *df, const char *n) static bool matchExcludedSymbols(const char *name) { - static QStrList &exclSyms = Config_getList("EXCLUDE_SYMBOLS"); + static QStrList &exclSyms = Config_getList(EXCLUDE_SYMBOLS); if (exclSyms.count()==0) return FALSE; // nothing specified const char *pat = exclSyms.first(); QCString symName = name; @@ -206,7 +206,7 @@ static bool matchExcludedSymbols(const char *name) void Definition::addToMap(const char *name,Definition *d) { - bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); QCString symbolName = name; int index=computeQualifiedIndex(symbolName); if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2); @@ -526,7 +526,7 @@ void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile) SectionInfo *si; for (;(si=sdi.current());++sdi) { - if (!si->generated) + if (!si->generated && si->ref.isEmpty()) { //printf("write an entry!\n"); if (definitionType()==TypeMember) tagFile << " "; @@ -631,7 +631,7 @@ static bool lastCharIsMultibyte(const QCString &s) void Definition::_setBriefDescription(const char *b,const char *briefFile,int briefLine) { - static QCString outputLanguage = Config_getEnum("OUTPUT_LANGUAGE"); + static QCString outputLanguage = Config_getEnum(OUTPUT_LANGUAGE); static bool needsDot = outputLanguage!="Japanese" && outputLanguage!="Chinese" && outputLanguage!="Korean"; @@ -728,8 +728,8 @@ void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int bool readCodeFragment(const char *fileName, int &startLine,int &endLine,QCString &result) { - static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); - static int tabSize = Config_getInt("TAB_SIZE"); + static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); + static int tabSize = Config_getInt(TAB_SIZE); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name QCString filter = getFileFilter(fileName,TRUE); @@ -878,6 +878,7 @@ bool readCodeFragment(const char *fileName, } } result = transcodeCharacterStringToUTF8(result); + if (!result.isEmpty() && result.at(result.length()-1)!='\n') result += "\n"; //fprintf(stderr,"readCodeFragement(%d-%d)=%s\n",startLine,endLine,result.data()); return found; } @@ -886,7 +887,7 @@ QCString Definition::getSourceFileBase() const { ASSERT(definitionType()!=Definition::TypeFile); // file overloads this method QCString fn; - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); if (sourceBrowser && m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) { @@ -917,8 +918,8 @@ QCString Definition::getSourceAnchor() const /*! Write a reference to the source code defining this definition */ void Definition::writeSourceDef(OutputList &ol,const char *) { - static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); - static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE"); + static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE); + static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE); ol.pushGeneratorState(); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); QCString fn = getSourceFileBase(); @@ -932,7 +933,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) QCString lineStr; lineStr.sprintf("%d",m_impl->body->startLine); QCString anchorStr = getSourceAnchor(); - ol.startParagraph(); + ol.startParagraph("definition"); if (lineMarkerPos<fileMarkerPos) // line marker before file marker { // write text left from linePos marker @@ -1066,7 +1067,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) } else { - err("translation error: invalid markers in trDefinedInSourceFile()\n"); + err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n"); } } ol.popGeneratorState(); @@ -1096,7 +1097,7 @@ bool Definition::hasSources() const /*! Write code of this definition into the documentation */ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) { - static bool inlineSources = Config_getBool("INLINE_SOURCES"); + static bool inlineSources = Config_getBool(INLINE_SOURCES); ol.pushGeneratorState(); //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); @@ -1142,16 +1143,16 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, const QCString &text,MemberSDict *members,bool /*funcOnly*/) { - static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); - static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); - static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE"); + static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE); + static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + static bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE); ol.pushGeneratorState(); if (members) { members->sort(); - ol.startParagraph(); + ol.startParagraph("reference"); ol.parseText(text); ol.docify(" "); @@ -1276,7 +1277,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) { - if (Config_getBool("REFERENCED_BY_RELATION")) + if (Config_getBool(REFERENCED_BY_RELATION)) { _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE); } @@ -1284,7 +1285,7 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) { - if (Config_getBool("REFERENCES_RELATION")) + if (Config_getBool(REFERENCES_RELATION)) { _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE); } @@ -1292,8 +1293,8 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) bool Definition::hasDocumentation() const { - static bool extractAll = Config_getBool("EXTRACT_ALL"); - //static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + static bool extractAll = Config_getBool(EXTRACT_ALL); + //static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); bool hasDocs = (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description @@ -1507,19 +1508,6 @@ QList<ListItemInfo> *Definition::xrefListItems() const return m_impl->xrefListItems; } - -QCString Definition::convertNameToFile(const char *name,bool allowDots) const -{ - if (!m_impl->ref.isEmpty()) - { - return name; - } - else - { - return ::convertNameToFile(name,allowDots); - } -} - QCString Definition::pathFragment() const { QCString result; @@ -1741,7 +1729,7 @@ QCString abbreviate(const char *s,const char *name) result=result.left(result.length()-1); // strip any predefined prefix - QStrList &briefDescAbbrev = Config_getList("ABBREVIATE_BRIEF"); + QStrList &briefDescAbbrev = Config_getList(ABBREVIATE_BRIEF); const char *p = briefDescAbbrev.first(); while (p) { @@ -1888,6 +1876,21 @@ GroupList *Definition::partOfGroups() const return m_impl->partOfGroups; } +bool Definition::isLinkableViaGroup() const +{ + GroupList *gl = partOfGroups(); + if (gl) + { + GroupListIterator gli(*gl); + GroupDef *gd; + for (gli.toFirst();(gd=gli.current());++gli) + { + if (gd->isLinkable()) return TRUE; + } + } + return FALSE; +} + Definition *Definition::getOuterScope() const { return m_impl->outerScope; @@ -1941,7 +1944,7 @@ void Definition::_setSymbolName(const QCString &name) bool Definition::hasBriefDescription() const { - static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC"); + static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC); return !briefDescription().isEmpty() && briefMemberDesc; } diff --git a/src/definition.h b/src/definition.h index 6277c6c..48c572d 100644 --- a/src/definition.h +++ b/src/definition.h @@ -257,6 +257,7 @@ class Definition : public DefinitionIntf SrcLangExt getLanguage() const; GroupList *partOfGroups() const; + bool isLinkableViaGroup() const; QList<ListItemInfo> *xrefListItems() const; @@ -326,7 +327,6 @@ class Definition : public DefinitionIntf // --- actions ---- //----------------------------------------------------------------------------------- - QCString convertNameToFile(const char *name,bool allowDots=FALSE) const; void writeSourceDef(OutputList &ol,const char *scopeName); void writeInlineCode(OutputList &ol,const char *scopeName); void writeSourceRefs(OutputList &ol,const char *scopeName); diff --git a/src/dia.cpp b/src/dia.cpp index 347acba..5adbc7c 100644 --- a/src/dia.cpp +++ b/src/dia.cpp @@ -37,7 +37,7 @@ void writeDiaGraphFromFile(const char *inFile,const char *outDir, // go to the html output directory (i.e. path) QDir::setCurrent(outDir); //printf("Going to dir %s\n",QDir::currentDirPath().data()); - QCString diaExe = Config_getString("DIA_PATH")+"dia"+portable_commandExtension(); + QCString diaExe = Config_getString(DIA_PATH)+"dia"+portable_commandExtension(); QCString diaArgs; QCString extension; diaArgs+="-n "; @@ -69,7 +69,7 @@ void writeDiaGraphFromFile(const char *inFile,const char *outDir, goto error; } portable_sysTimerStop(); - if ( (format==DIA_EPS) && (Config_getBool("USE_PDFLATEX")) ) + if ( (format==DIA_EPS) && (Config_getBool(USE_PDFLATEX)) ) { QCString epstopdfArgs(maxCmdLine); epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"", diff --git a/src/diagram.cpp b/src/diagram.cpp index 8a6ccf6..42792ad 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -321,7 +321,7 @@ QCString DiagramItem::label() const { result=classDef->displayName(); } - if (Config_getBool("HIDE_SCOPE_NAMES")) result=stripScope(result); + if (Config_getBool(HIDE_SCOPE_NAMES)) result=stripScope(result); return result; } @@ -1332,7 +1332,7 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path, super->drawConnectors(t,0,FALSE,FALSE,baseRows,superRows,0,0); f1.close(); - if (Config_getBool("USE_PDFLATEX")) + if (Config_getBool(USE_PDFLATEX)) { QCString epstopdfArgs(4096); epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"", diff --git a/src/dirdef.cpp b/src/dirdef.cpp index ddd0c37..0a63c1e 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -20,7 +20,7 @@ static int g_dirCount=0; DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE) { - bool fullPathNames = Config_getBool("FULL_PATH_NAMES"); + bool fullPathNames = Config_getBool(FULL_PATH_NAMES); // get display name (stipping the paths mentioned in STRIP_FROM_PATH) // get short name (last part of path) m_shortName = path; @@ -67,17 +67,23 @@ bool DirDef::isLinkable() const void DirDef::addSubDir(DirDef *subdir) { - m_subdirs.inSort(subdir); + m_subdirs.append(subdir); subdir->setOuterScope(this); subdir->m_parent=this; } void DirDef::addFile(FileDef *fd) { - m_fileList->inSort(fd); + m_fileList->append(fd); fd->setDirDef(this); } +void DirDef::sort() +{ + m_subdirs.sort(); + m_fileList->sort(); +} + static QCString encodeDirName(const QCString &anchor) { // convert to md5 hash @@ -119,7 +125,7 @@ QCString DirDef::getOutputFileBase() const void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title) { - if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || + if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) || !documentation().isEmpty()) { ol.pushGeneratorState(); @@ -135,12 +141,12 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.endGroupHeader(); // repeat brief description - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) { ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE); } // separator between brief and details - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) && !documentation().isEmpty()) { ol.pushGeneratorState(); @@ -164,20 +170,24 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title) void DirDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc( briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); ol.writeString(" \n"); ol.enable(OutputGenerator::RTF); - if (Config_getBool("REPEAT_BRIEF") || + if (Config_getBool(REPEAT_BRIEF) || !documentation().isEmpty() ) { @@ -198,7 +208,7 @@ void DirDef::writeBriefDescription(OutputList &ol) void DirDef::writeDirectoryGraph(OutputList &ol) { // write graph dependency graph - if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT")) + if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT)) { DotDirDeps dirDep(this); if (!dirDep.isTrivial()) @@ -217,37 +227,48 @@ void DirDef::writeDirectoryGraph(OutputList &ol) void DirDef::writeSubDirList(OutputList &ol) { + int numSubdirs = 0; + QListIterator<DirDef> it(m_subdirs); + DirDef *dd; + for (it.toFirst();(dd=it.current());++it) + { + if (dd->hasDocumentation() || dd->getFiles()->count()>0) + { + numSubdirs++; + } + } + // write subdir list - if (m_subdirs.count()>0) + if (numSubdirs>0) { ol.startMemberHeader("subdirs"); ol.parseText(theTranslator->trDir(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); - QListIterator<DirDef> it(m_subdirs); - DirDef *dd; - for (;(dd=it.current());++it) + for (it.toFirst();(dd=it.current());++it) { - if (!dd->hasDocumentation()) continue; - ol.startMemberDeclaration(); - ol.startMemberItem(dd->getOutputFileBase(),0); - ol.parseText(theTranslator->trDir(FALSE,TRUE)+" "); - ol.insertMemberAlign(); - ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); - ol.endMemberItem(); - if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (dd->hasDocumentation() || dd->getFiles()->count()==0) { - ol.startMemberDescription(dd->getOutputFileBase()); - ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(), - FALSE, // indexWords - FALSE, // isExample - 0, // exampleName - TRUE, // single line - TRUE // link from index - ); - ol.endMemberDescription(); + ol.startMemberDeclaration(); + ol.startMemberItem(dd->getOutputFileBase(),0); + ol.parseText(theTranslator->trDir(FALSE,TRUE)+" "); + ol.insertMemberAlign(); + ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); + ol.endMemberItem(); + if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) + { + ol.startMemberDescription(dd->getOutputFileBase()); + ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(), + FALSE, // indexWords + FALSE, // isExample + 0, // exampleName + TRUE, // single line + TRUE // link from index + ); + ol.endMemberDescription(); + } + ol.endMemberDeclaration(0,0); } - ol.endMemberDeclaration(0,0); } ol.endMemberList(); @@ -256,8 +277,19 @@ void DirDef::writeSubDirList(OutputList &ol) void DirDef::writeFileList(OutputList &ol) { + int numFiles = 0; + QListIterator<FileDef> it(*m_fileList); + FileDef *fd; + for (it.toFirst();(fd=it.current());++it) + { + if (fd->hasDocumentation()) + { + numFiles++; + } + } + // write file list - if (m_fileList->count()>0) + if (numFiles>0) { ol.startMemberHeader("files"); ol.parseText(theTranslator->trFile(TRUE,FALSE)); @@ -267,47 +299,49 @@ void DirDef::writeFileList(OutputList &ol) FileDef *fd; for (;(fd=it.current());++it) { - if (!fd->hasDocumentation()) continue; - ol.startMemberDeclaration(); - ol.startMemberItem(fd->getOutputFileBase(),0); - ol.docify(theTranslator->trFile(FALSE,TRUE)+" "); - ol.insertMemberAlign(); - if (fd->isLinkable()) + if (fd->hasDocumentation()) { - ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); - } - else - { - ol.startBold(); - ol.docify(fd->name()); - ol.endBold(); - } - if (fd->generateSourceFile()) - { - ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); - ol.docify(" "); - ol.startTextLink(fd->includeName(),0); - ol.docify("["); - ol.parseText(theTranslator->trCode()); - ol.docify("]"); - ol.endTextLink(); - ol.popGeneratorState(); - } - ol.endMemberItem(); - if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) - { - ol.startMemberDescription(fd->getOutputFileBase()); - ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(), - FALSE, // indexWords - FALSE, // isExample - 0, // exampleName - TRUE, // single line - TRUE // link from index - ); - ol.endMemberDescription(); + ol.startMemberDeclaration(); + ol.startMemberItem(fd->getOutputFileBase(),0); + ol.docify(theTranslator->trFile(FALSE,TRUE)+" "); + ol.insertMemberAlign(); + if (fd->isLinkable()) + { + ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); + } + else + { + ol.startBold(); + ol.docify(fd->name()); + ol.endBold(); + } + if (fd->generateSourceFile()) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.docify(" "); + ol.startTextLink(fd->includeName(),0); + ol.docify("["); + ol.parseText(theTranslator->trCode()); + ol.docify("]"); + ol.endTextLink(); + ol.popGeneratorState(); + } + ol.endMemberItem(); + if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) + { + ol.startMemberDescription(fd->getOutputFileBase()); + ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(), + FALSE, // indexWords + FALSE, // isExample + 0, // exampleName + TRUE, // single line + TRUE // link from index + ); + ol.endMemberDescription(); + } + ol.endMemberDeclaration(0,0); } - ol.endMemberDeclaration(0,0); } ol.endMemberList(); } @@ -330,7 +364,7 @@ QCString DirDef::shortTitle() const bool DirDef::hasDetailedDescription() const { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty(); } @@ -383,7 +417,7 @@ void DirDef::writeTagFile(FTextStream &tagFile) void DirDef::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); ol.pushGeneratorState(); QCString title=theTranslator->trDirReference(m_dispName); @@ -593,11 +627,20 @@ void DirDef::computeDependencies() //printf(" %d: add dependency %s->%s\n",count++,name().data(),usedDir->name().data()); addUsesDependency(usedDir,fd,ii->fileDef,FALSE); } - } + } } } } } + if (m_usedDirs) + { + QDictIterator<UsedDir> udi(*m_usedDirs); + UsedDir *udir; + for (udi.toFirst();(udir=udi.current());++udi) + { + udir->sort(); + } + } } bool DirDef::isParentOf(DirDef *dir) const @@ -620,8 +663,9 @@ bool DirDef::depGraphIsTrivial() const int FilePairDict::compareValues(const FilePair *left,const FilePair *right) const { int orderHi = qstricmp(left->source()->name(),right->source()->name()); + if (orderHi!=0) return orderHi; int orderLo = qstricmp(left->destination()->name(),right->destination()->name()); - return orderHi==0 ? orderLo : orderHi; + return orderLo; } //---------------------------------------------------------------------- @@ -639,10 +683,15 @@ UsedDir::~UsedDir() void UsedDir::addFileDep(FileDef *srcFd,FileDef *dstFd) { - m_filePairs.inSort(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(), + m_filePairs.append(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(), new FilePair(srcFd,dstFd)); } +void UsedDir::sort() +{ + m_filePairs.sort(); +} + FilePair *UsedDir::findFilePair(const char *name) { QCString n=name; @@ -658,7 +707,7 @@ DirDef *DirDef::createNewDir(const char *path) //printf("Adding new dir %s\n",path); dir = new DirDef(path); //printf("createNewDir %s short=%s\n",path,dir->shortName().data()); - Doxygen::directories->inSort(path,dir); + Doxygen::directories->append(path,dir); } return dir; } @@ -679,7 +728,7 @@ bool DirDef::matchPath(const QCString &path,QStrList &l) } /*! strip part of \a path if it matches - * one of the paths in the Config_getList("STRIP_FROM_PATH") list + * one of the paths in the Config_getList(STRIP_FROM_PATH) list */ DirDef *DirDef::mergeDirectoryInTree(const QCString &path) { @@ -689,7 +738,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path) while ((i=path.find('/',p))!=-1) { QCString part=path.left(i+1); - if (!matchPath(part,Config_getList("STRIP_FROM_PATH")) && (part!="/" && part!="//")) + if (!matchPath(part,Config_getList(STRIP_FROM_PATH)) && (part!="/" && part!="//")) { dir=createNewDir(part); } @@ -731,7 +780,7 @@ static void writePartialFilePath(OutputList &ol,const DirDef *root,const FileDef void DirRelation::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); @@ -903,7 +952,6 @@ void buildDirectories() DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { - //printf("New dir %s\n",dir->displayName().data()); QCString name = dir->name(); int i=name.findRev('/',name.length()-2); if (i>0) @@ -918,6 +966,11 @@ void buildDirectories() } } } + for (sdi.toFirst();(dir=sdi.current());++sdi) + { + dir->sort(); + } + Doxygen::directories->sort(); computeCommonDirPrefix(); } @@ -947,7 +1000,7 @@ void generateDirDocs(OutputList &ol) { dir->writeDocumentation(ol); } - if (Config_getBool("DIRECTORY_GRAPH")) + if (Config_getBool(DIRECTORY_GRAPH)) { SDict<DirRelation>::Iterator rdi(Doxygen::dirRelations); DirRelation *dr; diff --git a/src/dirdef.h b/src/dirdef.h index 611ba3e..2fb04f5 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -76,6 +76,7 @@ class DirDef : public Definition static DirDef *mergeDirectoryInTree(const QCString &path); bool visited; void setDiskName(const QCString &name) { m_diskName = name; } + void sort(); private: friend void computeDirDependencies(); @@ -138,6 +139,7 @@ class UsedDir const FilePairDict &filePairs() const { return m_filePairs; } const DirDef *dir() const { return m_dir; } bool inherited() const { return m_inherited; } + void sort(); private: DirDef *m_dir; diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp index ac00e1f..345629e 100644 --- a/src/docbookgen.cpp +++ b/src/docbookgen.cpp @@ -116,7 +116,7 @@ inline void writeDocbookCodeString(FTextStream &t,const char *s, int &col) { case '\t': { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); int spacesToNextTabStop = tabSize - (col%tabSize); col+=spacesToNextTabStop; while (spacesToNextTabStop--) t << " "; @@ -355,7 +355,7 @@ void writeDocbookCodeBlock(FTextStream &t,FileDef *fd) DocbookCodeGenerator *docbookGen = new DocbookCodeGenerator(t); pIntf->parseCode(*docbookGen, // codeOutIntf 0, // scopeName - fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")), + fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)), langExt, // lang FALSE, // isExampleBlock 0, // exampleName @@ -372,7 +372,7 @@ void writeDocbookCodeBlock(FTextStream &t,FileDef *fd) static QCString classOutputFileBase(ClassDef *cd) { - //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); + //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); //if (inlineGroupedClasses && cd->partOfGroups()!=0) return cd->getOutputFileBase(); //else @@ -381,7 +381,7 @@ static QCString classOutputFileBase(ClassDef *cd) static QCString memberOutputFileBase(MemberDef *md) { - //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); + //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0) // return md->getClassDef()->getDocbookOutputFileBase(); //else @@ -663,7 +663,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de writeDocbookString(t,emd->name()); t << "</term>" << endl; t << " <listitem>" << endl; - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { t << " <para>"; writeDocbookString(t,emd->briefDescription()); @@ -706,7 +706,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de } t << "_1" << md->anchor() << "\">" << endl; t << " <title>" << convertToXML(md->definition()) << "</title>"; - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { t << " <emphasis>"; writeDocbookString(t,md->briefDescription()); @@ -730,7 +730,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de } t << "_1" << md->anchor() << "\">" << endl; t << " <title>" << convertToXML(md->definition()) << " " << convertToXML(md->argsString()) << "</title>"; - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { t << " <emphasis>"; writeDocbookString(t,md->briefDescription()); @@ -795,7 +795,7 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de } t << "_1" << md->anchor() << "\">" << endl; t << " <title>" << convertToXML(md->definition()) << "</title>"; - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { t << " <emphasis>"; writeDocbookString(t,md->briefDescription()); @@ -849,7 +849,7 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c { for (mli.toFirst();(md=mli.current());++mli) { - if (md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF")) + if (md->documentation().isEmpty() && !Config_getBool(REPEAT_BRIEF)) { continue; } @@ -892,7 +892,7 @@ static void generateDocbookSection(Definition *d,FTextStream &t,MemberList *ml,c // to prevent this duplication in the Docbook output, we filter those here. if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { - if (detailed && md->documentation().isEmpty() && !Config_getBool("REPEAT_BRIEF")) + if (detailed && md->documentation().isEmpty() && !Config_getBool(REPEAT_BRIEF)) { continue; } @@ -1137,7 +1137,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) //Add the file Documentation info to index file ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml"; QCString relPath = relativePathToRoot(fileName); QFile f(fileName); @@ -1194,18 +1194,18 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) } } - if (Config_getBool("HAVE_DOT") && (Config_getBool("CLASS_DIAGRAMS") || Config_getBool("CLASS_GRAPH"))) + if (Config_getBool(HAVE_DOT) && (Config_getBool(CLASS_DIAGRAMS) || Config_getBool(CLASS_GRAPH))) { t << "<para>Inheritance diagram for " << convertToXML(cd->name()) << "</para>" << endl; DotClassGraph inheritanceGraph(cd,DotNode::Inheritance); - inheritanceGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,TRUE,FALSE); + inheritanceGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE); } - if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH")) + if (Config_getBool(HAVE_DOT) && Config_getBool(COLLABORATION_GRAPH)) { t << "<para>Collaboration diagram for " << convertToXML(cd->name()) << "</para>" << endl; DotClassGraph collaborationGraph(cd,DotNode::Collaboration); - collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,TRUE,FALSE); + collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,TRUE,FALSE); } writeInnerClasses(cd->getClassSDict(),t); @@ -1233,7 +1233,7 @@ static void generateDocbookForClass(ClassDef *cd,FTextStream &ti) } } - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { if (cd->briefDescription()) { @@ -1316,7 +1316,7 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti) //Add the file Documentation info to index file ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1356,7 +1356,7 @@ static void generateDocbookForNamespace(NamespaceDef *nd,FTextStream &ti) } } - if(Config_getBool("REPEAT_BRIEF")) + if(Config_getBool(REPEAT_BRIEF)) { if (nd->briefDescription()) { @@ -1402,7 +1402,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) //Add the file Documentation info to index file ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml"; QCString relPath = relativePathToRoot(fileName); @@ -1449,19 +1449,19 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) t << "</programlisting>" << endl; } } - if (Config_getBool("HAVE_DOT")) + if (Config_getBool(HAVE_DOT)) { - if (Config_getBool("INCLUDE_GRAPH")) + if (Config_getBool(INCLUDE_GRAPH)) { t << "<para>Include dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl; DotInclDepGraph idepGraph(fd, FALSE); - idepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE); + idepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } - if (Config_getBool("INCLUDED_BY_GRAPH")) + if (Config_getBool(INCLUDED_BY_GRAPH)) { t << "<para>Included by dependency diagram for " << convertToXML(fd->name()) << "</para>" << endl; DotInclDepGraph ibdepGraph(fd, TRUE); - ibdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE); + ibdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } } @@ -1499,7 +1499,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) t << " <title>" << theTranslator->trDetailedDescription() << "</title>" << endl; writeDocbookDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); writeDocbookDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation()); - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { t << " <para>Definition in file " << fd->getDefFileName() << "</para>" << endl; } @@ -1509,7 +1509,7 @@ static void generateDocbookForFile(FileDef *fd,FTextStream &ti) } t << " </simplesect>" << endl; - if (Config_getBool("DOCBOOK_PROGRAMLISTING")) + if (Config_getBool(DOCBOOK_PROGRAMLISTING)) { t << " <literallayout><computeroutput>" << endl; writeDocbookCodeBlock(t,fd); @@ -1542,7 +1542,7 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; } - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml"; QCString relPath = relativePathToRoot(fileName); @@ -1559,11 +1559,11 @@ static void generateDocbookForGroup(GroupDef *gd,FTextStream &ti) t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl; - if (Config_getBool("GROUP_GRAPHS") && Config_getBool("HAVE_DOT")) + if (Config_getBool(GROUP_GRAPHS) && Config_getBool(HAVE_DOT)) { t << "<para>Collaboration diagram for " << convertToXML(gd->groupTitle()) << "</para>" << endl; DotGroupCollaboration collaborationGraph(gd); - collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE); + collaborationGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } if (gd->briefDescription()) @@ -1630,7 +1630,7 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) //Add the file Documentation info to index file ti << " <xi:include href=\"" << fileDocbook << "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\"/>" << endl; - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml"; QFile f(fileName); QCString relPath = relativePathToRoot(fileName); @@ -1648,11 +1648,11 @@ static void generateDocbookForDir(DirDef *dd,FTextStream &ti) t << " <title>"; t << theTranslator->trDirReference(dd->displayName()); t << "</title>" << endl; - if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT")) + if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT)) { t << "<para>Directory dependency diagram for " << convertToXML(dd->displayName()) << "</para>" << endl; DotDirDeps dirdepGraph(dd); - dirdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString("DOCBOOK_OUTPUT"),fileName,relPath,FALSE); + dirdepGraph.writeGraph(t,GOF_BITMAP,EOF_DocBook,Config_getString(DOCBOOK_OUTPUT),fileName,relPath,FALSE); } writeInnerDirs(&dd->subDirs(),t); @@ -1686,7 +1686,7 @@ static void generateDocbookForPage(PageDef *pd,FTextStream &ti,bool isExample) pageName="mainpage"; // to prevent overwriting the generated index page. } - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); QCString fileName=outputDirectory+"/"+pageName+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1767,7 +1767,7 @@ void generateDocbook() // + related pages // - examples - QCString outputDirectory = Config_getString("DOCBOOK_OUTPUT"); + QCString outputDirectory = Config_getString(DOCBOOK_OUTPUT); if (outputDirectory.isEmpty()) { outputDirectory=QDir::currentDirPath().utf8(); @@ -1808,7 +1808,7 @@ void generateDocbook() createSubDirs(docbookDir); QCString fileName=outputDirectory+"/index.xml"; - QCString dbk_projectName = Config_getString("PROJECT_NAME"); + QCString dbk_projectName = Config_getString(PROJECT_NAME); QFile f(fileName); f.setName(fileName); @@ -1921,7 +1921,7 @@ void generateDocbook() // FILE DOCUMENTATION - static bool showFiles = Config_getBool("SHOW_FILES"); + static bool showFiles = Config_getBool(SHOW_FILES); if (showFiles) { FileNameListIterator fnli(*Doxygen::inputNameList); @@ -1953,7 +1953,7 @@ void generateDocbook() } // DIRECTORY DOCUMENTATION - if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT")) + if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT)) { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index 70e9c53..ab10da0 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -242,7 +242,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s) m_t << "<para>" << endl; name.sprintf("%s%d", "dot_inline_dotgraph_", dotindex); baseName.sprintf("%s%d", - (Config_getString("DOCBOOK_OUTPUT")+"/inline_dotgraph_").data(), + (Config_getString(DOCBOOK_OUTPUT)+"/inline_dotgraph_").data(), dotindex++ ); QFile file(baseName+".dot"); @@ -265,7 +265,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s) m_t << "<para>" << endl; name.sprintf("%s%d", "msc_inline_mscgraph_", mscindex); baseName.sprintf("%s%d", - (Config_getString("DOCBOOK_OUTPUT")+"/inline_mscgraph_").data(), + (Config_getString(DOCBOOK_OUTPUT)+"/inline_mscgraph_").data(), mscindex++ ); QFile file(baseName+".msc"); @@ -284,7 +284,7 @@ void DocbookDocVisitor::visit(DocVerbatim *s) break; case DocVerbatim::PlantUML: { - static QCString docbookOutput = Config_getString("DOCBOOK_OUTPUT"); + static QCString docbookOutput = Config_getString(DOCBOOK_OUTPUT); QCString baseName = writePlantUMLSource(docbookOutput,s->exampleFile(),s->text()); QCString shortName = baseName; int i; @@ -359,6 +359,33 @@ void DocbookDocVisitor::visit(DocInclude *inc) ); m_t << "</computeroutput></literallayout>"; break; + case DocInclude::SnipWithLines: + { + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + m_t << "<literallayout><computeroutput>"; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef + TRUE // show line number + ); + m_t << "</computeroutput></literallayout>"; + } + break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -913,7 +940,7 @@ void DocbookDocVisitor::visitPost(DocImage *img) m_file=fd->absFilePath(); } QFile inImage(m_file); - QFile outImage(Config_getString("DOCBOOK_OUTPUT")+"/"+baseName.data()); + QFile outImage(Config_getString(DOCBOOK_OUTPUT)+"/"+baseName.data()); if (inImage.open(IO_ReadOnly)) { if (outImage.open(IO_WriteOnly)) @@ -1220,7 +1247,7 @@ void DocbookDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s) { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_BITMAP); visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height()); visitCaption(this, s->children()); @@ -1235,7 +1262,7 @@ void DocbookDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); generatePlantUMLOutput(baseName,outDir,PUML_BITMAP); visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height()); visitCaption(this, s->children()); @@ -1259,7 +1286,7 @@ void DocbookDocVisitor::startMscFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("msc_"); - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); m_t << "<para>" << endl; visitPreStart(m_t, hasCaption, baseName + ".png", width, height); @@ -1280,7 +1307,7 @@ void DocbookDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s) { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_BITMAP); visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height()); visitCaption(this, s->children()); @@ -1304,7 +1331,7 @@ void DocbookDocVisitor::startDiaFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("dia_"); - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP); m_t << "<para>" << endl; visitPreStart(m_t, hasCaption, baseName + ".png", width, height); @@ -1325,7 +1352,7 @@ void DocbookDocVisitor::writeDotFile(const QCString &baseName, DocVerbatim *s) { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); writeDotGraphFromFile(baseName+".dot",outDir,shortName,GOF_BITMAP); visitPreStart(m_t, s->hasCaption(), baseName + ".dot", s->width(),s->height()); visitCaption(this, s->children()); @@ -1349,7 +1376,7 @@ void DocbookDocVisitor::startDotFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("dot_"); - QCString outDir = Config_getString("DOCBOOK_OUTPUT"); + QCString outDir = Config_getString(DOCBOOK_OUTPUT); QCString imgExt = getDotImageExtension(); writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP); m_t << "<para>" << endl; diff --git a/src/docparser.cpp b/src/docparser.cpp index b706c9b..2602f78 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -123,6 +123,7 @@ struct DocParserContext QStack<DocStyleChange> initialStyleStack; QList<Definition> copyStack; QCString fileName; + int lineNo; QCString relPath; bool hasParamCommand; @@ -144,7 +145,6 @@ struct DocParserContext static QStack<DocParserContext> g_parserStack; //--------------------------------------------------------------------------- - static void docParserPushContext(bool saveParamInfo=TRUE) { //QCString indent; @@ -163,6 +163,7 @@ static void docParserPushContext(bool saveParamInfo=TRUE) ctx->initialStyleStack = g_initialStyleStack; ctx->copyStack = g_copyStack; ctx->fileName = g_fileName; + ctx->lineNo = doctokenizerYYlineno; ctx->relPath = g_relPath; if (saveParamInfo) @@ -201,6 +202,7 @@ static void docParserPopContext(bool keepParamInfo=FALSE) g_initialStyleStack = ctx->initialStyleStack; g_copyStack = ctx->copyStack; g_fileName = ctx->fileName; + doctokenizerYYlineno = ctx->lineNo; g_relPath = ctx->relPath; if (!keepParamInfo) @@ -282,20 +284,20 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) switch(type) { case DocImage::Html: - if (!Config_getBool("GENERATE_HTML")) return result; - outputDir = Config_getString("HTML_OUTPUT"); + if (!Config_getBool(GENERATE_HTML)) return result; + outputDir = Config_getString(HTML_OUTPUT); break; case DocImage::Latex: - if (!Config_getBool("GENERATE_LATEX")) return result; - outputDir = Config_getString("LATEX_OUTPUT"); + if (!Config_getBool(GENERATE_LATEX)) return result; + outputDir = Config_getString(LATEX_OUTPUT); break; case DocImage::DocBook: - if (!Config_getBool("GENERATE_DOCBOOK")) return result; - outputDir = Config_getString("DOCBOOK_OUTPUT"); + if (!Config_getBool(GENERATE_DOCBOOK)) return result; + outputDir = Config_getString(DOCBOOK_OUTPUT); break; case DocImage::Rtf: - if (!Config_getBool("GENERATE_RTF")) return result; - outputDir = Config_getString("RTF_OUTPUT"); + if (!Config_getBool(GENERATE_RTF)) return result; + outputDir = Config_getString(RTF_OUTPUT); break; } QCString outputFile = outputDir+"/"+result; @@ -336,11 +338,11 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) "could not open image %s",qPrint(fileName)); } - if (type==DocImage::Latex && Config_getBool("USE_PDFLATEX") && + if (type==DocImage::Latex && Config_getBool(USE_PDFLATEX) && fd->name().right(4)==".eps" ) { // we have an .eps image in pdflatex mode => convert it to a pdf. - QCString outputDir = Config_getString("LATEX_OUTPUT"); + QCString outputDir = Config_getString(LATEX_OUTPUT); QCString baseName = fd->name().left(fd->name().length()-4); QCString epstopdfArgs(4096); epstopdfArgs.sprintf("\"%s/%s.eps\" --outfile=\"%s/%s.pdf\"", @@ -385,7 +387,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) */ static void checkArgumentName(const QCString &name,bool isParam) { - if (!Config_getBool("WARN_IF_DOC_ERROR")) return; + if (!Config_getBool(WARN_IF_DOC_ERROR)) return; if (g_memberDef==0) return; // not a member ArgumentList *al=g_memberDef->isDocsForDefinition() ? g_memberDef->argumentList() : @@ -454,7 +456,7 @@ static void checkArgumentName(const QCString &name,bool isParam) */ static void checkUndocumentedParams() { - if (g_memberDef && g_hasParamCommand && Config_getBool("WARN_IF_DOC_ERROR")) + if (g_memberDef && g_hasParamCommand && Config_getBool(WARN_IF_DOC_ERROR)) { ArgumentList *al=g_memberDef->isDocsForDefinition() ? g_memberDef->argumentList() : @@ -471,9 +473,9 @@ static void checkUndocumentedParams() if (lang==SrcLangExt_Fortran) argName = argName.lower(); argName=argName.stripWhiteSpace(); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); - if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self") + if (g_memberDef->getLanguage()==SrcLangExt_Python && (argName=="self" || argName=="cls")) { - // allow undocumented self parameter for Python + // allow undocumented self / cls parameter for Python } else if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a->docs.isEmpty()) { @@ -494,9 +496,9 @@ static void checkUndocumentedParams() QCString argName = g_memberDef->isDefine() ? a->type : a->name; if (lang==SrcLangExt_Fortran) argName = argName.lower(); argName=argName.stripWhiteSpace(); - if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self") + if (g_memberDef->getLanguage()==SrcLangExt_Python && (argName=="self" || argName=="cls")) { - // allow undocumented self parameter for Python + // allow undocumented self / cls parameter for Python } else if (!argName.isEmpty() && g_paramsFound.find(argName)==0) { @@ -526,7 +528,7 @@ static void checkUndocumentedParams() */ static void detectNoDocumentedParams() { - if (g_memberDef && Config_getBool("WARN_NO_PARAMDOC")) + if (g_memberDef && Config_getBool(WARN_NO_PARAMDOC)) { ArgumentList *al = g_memberDef->argumentList(); ArgumentList *declAl = g_memberDef->declArgumentList(); @@ -554,7 +556,7 @@ static void detectNoDocumentedParams() for (ali.toFirst();(a=ali.current()) && allDoc;++ali) { if (!a->name.isEmpty() && a->type!="void" && - !(isPython && a->name=="self") + !(isPython && (a->name=="self" || a->name=="cls")) ) { allDoc = !a->docs.isEmpty(); @@ -570,7 +572,7 @@ static void detectNoDocumentedParams() for (ali.toFirst();(a=ali.current()) && allDoc;++ali) { if (!a->name.isEmpty() && a->type!="void" && - !(isPython && a->name=="self") + !(isPython && (a->name=="self" || a->name=="cls")) ) { allDoc = !a->docs.isEmpty(); @@ -1054,7 +1056,7 @@ static void handleUnclosedStyleCommands() static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignoreAutoLinkFlag=FALSE) { QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE); - static bool autolinkSupport = Config_getBool("AUTOLINK_SUPPORT"); + static bool autolinkSupport = Config_getBool(AUTOLINK_SUPPORT); if (!autolinkSupport && !ignoreAutoLinkFlag) // no autolinking -> add as normal word { children.append(new DocWord(parent,name)); @@ -1264,9 +1266,6 @@ static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocN if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height=")) { // special case: no title, but we do have a size indicator - doctokenizerYYsetStateTitleAttrValue(); - // strip = - g_token->name = g_token->name.left(g_token->name.length()-1); break; } if (!defaultHandleToken(parent,tok,children)) @@ -1293,21 +1292,32 @@ static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocN { tok=doctokenizerYYlex(); } - while (tok==TK_WORD) // there are values following the title + while (tok==TK_WHITESPACE || tok==TK_WORD) // there are values following the title { - if (g_token->name=="width") - { - width = g_token->chars; - } - else if (g_token->name=="height") - { - height = g_token->chars; - } - else + if(tok == TK_WORD) { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'", - qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data()); + if (g_token->name=="width=" || g_token->name=="height=") + { + doctokenizerYYsetStateTitleAttrValue(); + g_token->name = g_token->name.left(g_token->name.length()-1); + } + + if (g_token->name=="width") + { + width = g_token->chars; + } + else if (g_token->name=="height") + { + height = g_token->chars; + } + else + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'", + qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data()); + break; + } } + tok=doctokenizerYYlex(); } doctokenizerYYsetStatePara(); @@ -1760,11 +1770,11 @@ static void readTextFileByName(const QCString &file,QCString &text) QFileInfo fi(file); if (fi.exists()) { - text = fileToString(file,Config_getBool("FILTER_SOURCE_FILES")); + text = fileToString(file,Config_getBool(FILTER_SOURCE_FILES)); return; } } - QStrList &examplePathList = Config_getList("EXAMPLE_PATH"); + QStrList &examplePathList = Config_getList(EXAMPLE_PATH); char *s=examplePathList.first(); while (s) { @@ -1772,7 +1782,7 @@ static void readTextFileByName(const QCString &file,QCString &text) QFileInfo fi(absFileName); if (fi.exists()) { - text = fileToString(absFileName,Config_getBool("FILTER_SOURCE_FILES")); + text = fileToString(absFileName,Config_getBool(FILTER_SOURCE_FILES)); return; } s=examplePathList.next(); @@ -1783,7 +1793,7 @@ static void readTextFileByName(const QCString &file,QCString &text) FileDef *fd; if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig))) { - text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")); + text = fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)); } else if (ambig) { @@ -1921,6 +1931,7 @@ void DocInclude::parse() readTextFileByName(m_file,m_text); break; case Snippet: + case SnipWithLines: readTextFileByName(m_file,m_text); // check here for the existence of the blockId inside the file, so we // only generate the warning once. @@ -1931,6 +1942,11 @@ void DocInclude::parse() m_blockId.data(),m_file.data(),count); } break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -2162,10 +2178,10 @@ bool DocXRefItem::parse() if (refList && ( // either not a built-in list or the list is enabled - (m_key!="todo" || Config_getBool("GENERATE_TODOLIST")) && - (m_key!="test" || Config_getBool("GENERATE_TESTLIST")) && - (m_key!="bug" || Config_getBool("GENERATE_BUGLIST")) && - (m_key!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST")) + (m_key!="todo" || Config_getBool(GENERATE_TODOLIST)) && + (m_key!="test" || Config_getBool(GENERATE_TESTLIST)) && + (m_key!="bug" || Config_getBool(GENERATE_BUGLIST)) && + (m_key!="deprecated" || Config_getBool(GENERATE_DEPRECATEDLIST)) ) ) { @@ -2599,7 +2615,7 @@ void DocRef::parse() DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //context) { - static uint numBibFiles = Config_getList("CITE_BIB_FILES").count(); + static uint numBibFiles = Config_getList(CITE_BIB_FILES).count(); m_parent = parent; //printf("DocCite::DocCite(target=%s)\n",target.data()); ASSERT(!target.isEmpty()); @@ -5132,7 +5148,6 @@ endref: doctokenizerYYsetStatePara(); } - void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) { DBG(("handleInclude(%s)\n",qPrint(cmdName))); @@ -5160,7 +5175,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) } QCString fileName = g_token->name; QCString blockId; - if (t==DocInclude::Snippet) + if (t==DocInclude::Snippet || t==DocInclude::SnipWithLines || t==DocInclude::SnippetDoc) { if (fileName == "this") fileName=g_fileName; doctokenizerYYsetStateSnippet(); @@ -5174,9 +5189,31 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) } blockId = "["+g_token->name+"]"; } - DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId); - m_children.append(inc); - inc->parse(); + + // This is the only place to handle the \includedoc and \snippetdoc commands, + // as the content is included here as if it is really here. + if (t==DocInclude::IncludeDoc || t==DocInclude::SnippetDoc) + { + QCString inc_text; + int inc_line = 1; + readTextFileByName(fileName,inc_text); + if (t==DocInclude::SnippetDoc) + { + inc_line = lineBlock(inc_text, blockId); + inc_text = extractBlock(inc_text, blockId); + } + docParserPushContext(); + g_fileName = fileName; + doctokenizerYYlineno=inc_line; + internalValidatingParseDoc(this,m_children,inc_text); + docParserPopContext(); + } + else + { + DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId); + m_children.append(inc); + inc->parse(); + } } void DocPara::handleSection(const QCString &cmdName) @@ -5411,15 +5448,15 @@ int DocPara::handleCommand(const QCString &cmdName) break; case CMD_LI: { - DocSimpleList *sl=new DocSimpleList(this); - m_children.append(sl); + DocSimpleList *sl=new DocSimpleList(this); + m_children.append(sl); retval = sl->parse(); } break; case CMD_SECTION: { handleSection(cmdName); - retval = RetVal_Section; + retval = RetVal_Section; } break; case CMD_SUBSECTION: @@ -5543,7 +5580,7 @@ int DocPara::handleCommand(const QCString &cmdName) break; case CMD_STARTUML: { - static QCString jarPath = Config_getString("PLANTUML_JAR_PATH"); + static QCString jarPath = Config_getString(PLANTUML_JAR_PATH); doctokenizerYYsetStatePlantUMLOpt(); retval = doctokenizerYYlex(); QCString plantFile(g_token->sectionId); @@ -5665,6 +5702,15 @@ int DocPara::handleCommand(const QCString &cmdName) case CMD_SNIPPET: handleInclude(cmdName,DocInclude::Snippet); break; + case CMD_SNIPWITHLINES: + handleInclude(cmdName,DocInclude::SnipWithLines); + break; + case CMD_INCLUDEDOC: + handleInclude(cmdName,DocInclude::IncludeDoc); + break; + case CMD_SNIPPETDOC: + handleInclude(cmdName,DocInclude::SnippetDoc); + break; case CMD_SKIP: handleIncludeOperator(cmdName,DocIncOperator::Skip); break; @@ -5964,7 +6010,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta { if (paramName.isEmpty()) { - if (Config_getBool("WARN_NO_PARAMDOC")) + if (Config_getBool(WARN_NO_PARAMDOC)) { warn_doc_error(g_fileName,doctokenizerYYlineno,"empty 'name' attribute for <param%s> tag.",tagId==XML_PARAM?"":"type"); } @@ -6152,8 +6198,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta case XML_INHERITDOC: handleInheritDoc(); break; - - default: + default: // we should not get here! ASSERT(0); break; @@ -7190,7 +7235,7 @@ DocRoot *validatingParseDoc(const char *fileName,int startLine, //g_token = new TokenInfo; // store parser state so we can re-enter this function if needed - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); docParserPushContext(); if (ctx && ctx!=Doxygen::globalScope && diff --git a/src/docparser.h b/src/docparser.h index 5af5e96..f5167dc 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -309,10 +309,18 @@ class DocCite : public DocNode class DocStyleChange : public DocNode { public: - enum Style { Bold, Italic, Code, Center, Small, - Subscript, Superscript, Preformatted, - Span, Div + enum Style { Bold = (1<<0), + Italic = (1<<1), + Code = (1<<2), + Center = (1<<3), + Small = (1<<4), + Subscript = (1<<5), + Superscript = (1<<6), + Preformatted = (1<<7), + Span = (1<<8), + Div = (1<<9) }; + DocStyleChange(DocNode *parent,uint position,Style s,bool enable, const HtmlAttribList *attribs=0) : m_position(position), m_style(s), m_enable(enable) @@ -475,7 +483,8 @@ class DocVerbatim : public DocNode class DocInclude : public DocNode { public: - enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude, IncWithLines, Snippet }; + enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude, + IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines}; DocInclude(DocNode *parent,const QCString &file, const QCString context, Type t, bool isExample,const QCString exampleFile, diff --git a/src/docsets.cpp b/src/docsets.cpp index 9772d4e..29b7616 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -43,22 +43,22 @@ DocSets::~DocSets() void DocSets::initialize() { // -- get config options - QCString projectName = Config_getString("PROJECT_NAME"); + QCString projectName = Config_getString(PROJECT_NAME); if (projectName.isEmpty()) projectName="root"; - QCString bundleId = Config_getString("DOCSET_BUNDLE_ID"); + QCString bundleId = Config_getString(DOCSET_BUNDLE_ID); if (bundleId.isEmpty()) bundleId="org.doxygen.Project"; - QCString feedName = Config_getString("DOCSET_FEEDNAME"); + QCString feedName = Config_getString(DOCSET_FEEDNAME); if (feedName.isEmpty()) feedName="FeedName"; - QCString publisherId = Config_getString("DOCSET_PUBLISHER_ID"); + QCString publisherId = Config_getString(DOCSET_PUBLISHER_ID); if (publisherId.isEmpty()) publisherId="PublisherId"; - QCString publisherName = Config_getString("DOCSET_PUBLISHER_NAME"); + QCString publisherName = Config_getString(DOCSET_PUBLISHER_NAME); if (publisherName.isEmpty()) publisherName="PublisherName"; - QCString projectNumber = Config_getString("PROJECT_NUMBER"); + QCString projectNumber = Config_getString(PROJECT_NUMBER); if (projectNumber.isEmpty()) projectNumber="ProjectNumber"; // -- write Makefile { - QCString mfName = Config_getString("HTML_OUTPUT") + "/Makefile"; + QCString mfName = Config_getString(HTML_OUTPUT) + "/Makefile"; QFile makefile(mfName); if (!makefile.open(IO_WriteOnly)) { @@ -109,7 +109,7 @@ void DocSets::initialize() // -- write Info.plist { - QCString plName = Config_getString("HTML_OUTPUT") + "/Info.plist"; + QCString plName = Config_getString(HTML_OUTPUT) + "/Info.plist"; QFile plist(plName); if (!plist.open(IO_WriteOnly)) { @@ -145,14 +145,14 @@ void DocSets::initialize() } // -- start Nodes.xml - QCString notes = Config_getString("HTML_OUTPUT") + "/Nodes.xml"; + QCString notes = Config_getString(HTML_OUTPUT) + "/Nodes.xml"; m_nf = new QFile(notes); if (!m_nf->open(IO_WriteOnly)) { err("Could not open file %s for writing\n",notes.data()); exit(1); } - //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index"; + //QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index"; QCString indexName="index"; m_nts.setDevice(m_nf); m_nts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; @@ -166,7 +166,7 @@ void DocSets::initialize() m_firstNode.resize(m_dc); m_firstNode.at(0)=TRUE; - QCString tokens = Config_getString("HTML_OUTPUT") + "/Tokens.xml"; + QCString tokens = Config_getString(HTML_OUTPUT) + "/Tokens.xml"; m_tf = new QFile(tokens); if (!m_tf->open(IO_WriteOnly)) { @@ -331,6 +331,7 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md, case SrcLangExt_Fortran: lang="fortran"; break; // Fortran case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL case SrcLangExt_XML: lang="xml"; break; // DBUS XML + case SrcLangExt_SQL: lang="sql"; break; // Sql case SrcLangExt_Tcl: lang="tcl"; break; // Tcl case SrcLangExt_Markdown:lang="markdown"; break; // Markdown case SrcLangExt_Unknown: lang="unknown"; break; // should not happen! diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 3169fc0..a89570e 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -17,6 +17,8 @@ */ %option never-interactive +%option prefix="doctokenizerYY" + %{ #include <ctype.h> @@ -128,7 +130,7 @@ static int computeIndent(const char *str,int length) { int i; int indent=0; - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); for (i=0;i<length;i++) { if (str[i]=='\t') diff --git a/src/dot.cpp b/src/dot.cpp index 2f245f6..4189748 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -232,7 +232,7 @@ static EdgeProperties umlEdgeProps = static QCString getDotFontName() { - static QCString dotFontName = Config_getString("DOT_FONTNAME"); + static QCString dotFontName = Config_getString(DOT_FONTNAME); if (dotFontName.isEmpty()) { //dotFontName="FreeSans.ttf"; @@ -243,14 +243,14 @@ static QCString getDotFontName() static int getDotFontSize() { - static int dotFontSize = Config_getInt("DOT_FONTSIZE"); + static int dotFontSize = Config_getInt(DOT_FONTSIZE); if (dotFontSize<4) dotFontSize=4; return dotFontSize; } static void writeGraphHeader(FTextStream &t,const QCString &title=QCString()) { - static bool interactiveSVG = Config_getBool("INTERACTIVE_SVG"); + static bool interactiveSVG = Config_getBool(INTERACTIVE_SVG); t << "digraph "; if (title.isEmpty()) { @@ -266,7 +266,7 @@ static void writeGraphHeader(FTextStream &t,const QCString &title=QCString()) { t << " // INTERACTIVE_SVG=YES\n"; } - if (Config_getBool("DOT_TRANSPARENT")) + if (Config_getBool(DOT_TRANSPARENT)) { t << " bgcolor=\"transparent\";" << endl; } @@ -397,55 +397,13 @@ static bool convertMapFile(FTextStream &t,const char *mapName, return TRUE; } -static QArray<int> s_newNumber; -static int s_max_newNumber=0; - -inline int reNumberNode(int number, bool doReNumbering) -{ - if (!doReNumbering) - { - return number; - } - else - { - int s = s_newNumber.size(); - if (number>=s) - { - int ns=0; - ns = s * 3 / 2 + 5; // new size - if (number>=ns) // number still doesn't fit - { - ns = number * 3 / 2 + 5; - } - s_newNumber.resize(ns); - for (int i=s;i<ns;i++) // clear new part of the array - { - s_newNumber.at(i)=0; - } - } - int i = s_newNumber.at(number); - if (i == 0) // not yet mapped - { - i = ++s_max_newNumber; // start from 1 - s_newNumber.at(number) = i; - } - return i; - } -} - -static void resetReNumbering() -{ - s_max_newNumber=0; - s_newNumber.resize(s_max_newNumber); -} - static QCString g_dotFontPath; static void setDotFontPath(const char *path) { ASSERT(g_dotFontPath.isEmpty()); g_dotFontPath = portable_getenv("DOTFONTPATH"); - QCString newFontPath = Config_getString("DOT_FONTPATH"); + QCString newFontPath = Config_getString(DOT_FONTPATH); QCString spath = path; if (!newFontPath.isEmpty() && !spath.isEmpty()) { @@ -519,7 +477,7 @@ static bool writeVecGfxFigure(FTextStream &out,const QCString &baseName, const QCString &figureName) { int width=400,height=550; - static bool usePdfLatex = Config_getBool("USE_PDFLATEX"); + static bool usePdfLatex = Config_getBool(USE_PDFLATEX); if (usePdfLatex) { if (!readBoundingBox(figureName+".pdf",&width,&height,FALSE)) @@ -713,7 +671,7 @@ static bool insertMapFile(FTextStream &out,const QCString &mapFile, static void removeDotGraph(const QCString &dotName) { - static bool dotCleanUp = Config_getBool("DOT_CLEANUP"); + static bool dotCleanUp = Config_getBool(DOT_CLEANUP); if (dotCleanUp) { QDir d; @@ -792,13 +750,13 @@ int DotNodeList::compareValues(const DotNode *n1,const DotNode *n2) const DotRunner::DotRunner(const QCString &file,const QCString &path, bool checkResult,const QCString &imageName) - : m_dotExe(Config_getString("DOT_PATH")+"dot"), + : m_dotExe(Config_getString(DOT_PATH)+"dot"), m_file(file), m_path(path), m_checkResult(checkResult), m_imageName(imageName), m_imgExt(getDotImageExtension()) { - static bool dotCleanUp = Config_getBool("DOT_CLEANUP"); - static bool dotMultiTargets = Config_getBool("DOT_MULTI_TARGETS"); + static bool dotCleanUp = Config_getBool(DOT_CLEANUP); + static bool dotMultiTargets = Config_getBool(DOT_MULTI_TARGETS); m_cleanUp = dotCleanUp; m_multiTargets = dotMultiTargets; m_jobs.setAutoDelete(TRUE); @@ -946,7 +904,7 @@ int DotFilePatcher::addSVGObject(const QCString &baseName, bool DotFilePatcher::run() { //printf("DotFilePatcher::run(): %s\n",m_patchFile.data()); - static bool interactiveSVG = Config_getBool("INTERACTIVE_SVG"); + static bool interactiveSVG = Config_getBool(INTERACTIVE_SVG); bool isSVGFile = m_patchFile.right(4)==".svg"; int graphId = -1; QCString relPath; @@ -1233,7 +1191,7 @@ DotManager::DotManager() : m_dotMaps(1009) m_dotMaps.setAutoDelete(TRUE); m_queue = new DotRunnerQueue; int i; - int numThreads = QMIN(32,Config_getInt("DOT_NUM_THREADS")); + int numThreads = QMIN(32,Config_getInt(DOT_NUM_THREADS)); if (numThreads!=1) { if (numThreads==0) numThreads = QMAX(2,QThread::idealThreadCount()+1); @@ -1333,19 +1291,19 @@ bool DotManager::run() QListIterator<DotRunner> li(m_dotRuns); bool setPath=FALSE; - if (Config_getBool("GENERATE_HTML")) + if (Config_getBool(GENERATE_HTML)) { - setDotFontPath(Config_getString("HTML_OUTPUT")); + setDotFontPath(Config_getString(HTML_OUTPUT)); setPath=TRUE; } - else if (Config_getBool("GENERATE_LATEX")) + else if (Config_getBool(GENERATE_LATEX)) { - setDotFontPath(Config_getString("LATEX_OUTPUT")); + setDotFontPath(Config_getString(LATEX_OUTPUT)); setPath=TRUE; } - else if (Config_getBool("GENERATE_RTF")) + else if (Config_getBool(GENERATE_RTF)) { - setDotFontPath(Config_getString("RTF_OUTPUT")); + setDotFontPath(Config_getString(RTF_OUTPUT)); setPath=TRUE; } portable_sysTimerStart(); @@ -1673,7 +1631,7 @@ static void writeBoxMemberList(FTextStream &t, if (mma->getClassDef() == scope && (skipNames==0 || skipNames->find(mma->name())==0)) { - static int limit = Config_getInt("UML_LIMIT_NUM_FIELDS"); + static int limit = Config_getInt(UML_LIMIT_NUM_FIELDS); if (limit>0 && (totalCount>limit*3/2 && count>=limit)) { t << theTranslator->trAndMore(QCString().sprintf("%d",totalCount-count)) << "\\l"; @@ -1722,16 +1680,16 @@ static QCString stripProtectionPrefix(const QCString &s) void DotNode::writeBox(FTextStream &t, GraphType gt, GraphOutputFormat /*format*/, - bool hasNonReachableChildren, - bool reNumber) + bool hasNonReachableChildren + ) { const char *labCol = m_url.isEmpty() ? "grey75" : // non link ( (hasNonReachableChildren) ? "red" : "black" ); - t << " Node" << reNumberNode(m_number,reNumber) << " [label=\""; - static bool umlLook = Config_getBool("UML_LOOK"); + t << " Node" << m_number << " [label=\""; + static bool umlLook = Config_getBool(UML_LOOK); if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration)) { @@ -1763,7 +1721,7 @@ void DotNode::writeBox(FTextStream &t, } //printf("DotNode::writeBox for %s\n",m_classDef->name().data()); - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); t << "{" << convertLabel(m_label); t << "\\n|"; writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberListType_pubAttribs),m_classDef,FALSE,&arrowNames); @@ -1819,7 +1777,7 @@ void DotNode::writeBox(FTextStream &t, } else { - static bool dotTransparent = Config_getBool("DOT_TRANSPARENT"); + static bool dotTransparent = Config_getBool(DOT_TRANSPARENT); if (!dotTransparent) { t << ",color=\"" << labCol << "\", fillcolor=\""; @@ -1856,24 +1814,23 @@ void DotNode::writeArrow(FTextStream &t, GraphOutputFormat format, DotNode *cn, EdgeInfo *ei, - bool topDown, - bool pointBack, - bool reNumber + bool topDown, + bool pointBack ) { t << " Node"; - if (topDown) - t << reNumberNode(cn->number(),reNumber); - else - t << reNumberNode(m_number,reNumber); + if (topDown) + t << cn->number(); + else + t << m_number; t << " -> Node"; - if (topDown) - t << reNumberNode(m_number,reNumber); - else - t << reNumberNode(cn->number(),reNumber); + if (topDown) + t << m_number; + else + t << cn->number(); t << " ["; - static bool umlLook = Config_getBool("UML_LOOK"); + static bool umlLook = Config_getBool(UML_LOOK); const EdgeProperties *eProps = umlLook ? ¨EdgeProps : &normalEdgeProps; QCString aStyle = eProps->arrowStyleMap[ei->m_color]; bool umlUseArrow = aStyle=="odiamond"; @@ -1908,14 +1865,13 @@ void DotNode::write(FTextStream &t, GraphOutputFormat format, bool topDown, bool toChildren, - bool backArrows, - bool reNumber + bool backArrows ) { //printf("DotNode::write(%d) name=%s this=%p written=%d visible=%d\n",m_distance,m_label.data(),this,m_written,m_visible); if (m_written) return; // node already written to the output if (!m_visible) return; // node is not visible - writeBox(t,gt,format,m_truncated==Truncated,reNumber); + writeBox(t,gt,format,m_truncated==Truncated); m_written=TRUE; QList<DotNode> *nl = toChildren ? m_children : m_parents; if (nl) @@ -1930,9 +1886,9 @@ void DotNode::write(FTextStream &t, if (cn->isVisible()) { //printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",cn->label().data()); - writeArrow(t,gt,format,cn,dnli2.current(),topDown,backArrows,reNumber); + writeArrow(t,gt,format,cn,dnli2.current(),topDown,backArrows); } - cn->write(t,gt,format,topDown,toChildren,backArrows,reNumber); + cn->write(t,gt,format,topDown,toChildren,backArrows); } } else // render parents @@ -1950,11 +1906,10 @@ void DotNode::write(FTextStream &t, pn, pn->m_edgeInfo->at(pn->m_children->findRef(this)), FALSE, - backArrows, - reNumber + backArrows ); } - pn->write(t,gt,format,TRUE,FALSE,backArrows,reNumber); + pn->write(t,gt,format,TRUE,FALSE,backArrows); } } } @@ -2229,6 +2184,20 @@ void DotNode::colorConnectedNodes(int curColor) } } +void DotNode::renumberNodes(int &number) +{ + m_number = number++; + if (m_children) + { + QListIterator<DotNode> dnlic(*m_children); + DotNode *cn; + for (dnlic.toFirst();(cn=dnlic.current());++dnlic) + { + cn->renumberNodes(number); + } + } +} + const DotNode *DotNode::findDocNode() const { if (!m_url.isEmpty()) return this; @@ -2266,15 +2235,13 @@ const DotNode *DotNode::findDocNode() const //-------------------------------------------------------------------- -int DotGfxHierarchyTable::m_curNodeNumber; - void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out, const char *path,const char *fileName,int id) const { QDir d(path); QCString baseName; QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); baseName.sprintf("inherit_graph_%d",id); QCString imgName = baseName+"."+ imgExt; QCString mapName = baseName+".map"; @@ -2300,11 +2267,10 @@ void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out, { if (node->m_subgraphId==n->m_subgraphId) { - node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE,TRUE); + node->write(md5stream,DotNode::Hierarchy,GOF_BITMAP,FALSE,TRUE,TRUE); } } writeGraphFooter(md5stream); - resetReNumbering(); uchar md5_sig[16]; QCString sigStr(33); MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig); @@ -2321,7 +2287,6 @@ void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out, FTextStream t(&f); t << theGraph; f.close(); - resetReNumbering(); DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName); dotRun->addJob(imgFmt,absImgName); @@ -2512,9 +2477,8 @@ void DotGfxHierarchyTable::addClassList(ClassSDict *cl) } } -DotGfxHierarchyTable::DotGfxHierarchyTable() +DotGfxHierarchyTable::DotGfxHierarchyTable() : m_curNodeNumber(0) { - m_curNodeNumber=0; m_rootNodes = new QList<DotNode>; m_usedNodes = new QDict<DotNode>(1009); m_usedNodes->setAutoDelete(TRUE); @@ -2556,15 +2520,17 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() } //printf("Number of independent subgraphs: %d\n",curColor); - //QListIterator<DotNode> dnli2(*m_rootSubgraphs); - //DotNode *n; - //for (dnli2.toFirst();(n=dnli2.current());++dnli2) - //{ - // printf("Node %s color=%d (c=%d,p=%d)\n", - // n->m_label.data(),n->m_subgraphId, - // n->m_children?n->m_children->count():0, - // n->m_parents?n->m_parents->count():0); - //} + QListIterator<DotNode> dnli2(*m_rootSubgraphs); + DotNode *n; + for (dnli2.toFirst();(n=dnli2.current());++dnli2) + { + //printf("Node %s color=%d (c=%d,p=%d)\n", + // n->m_label.data(),n->m_subgraphId, + // n->m_children?n->m_children->count():0, + // n->m_parents?n->m_parents->count():0); + int number=0; + n->renumberNodes(number); + } } DotGfxHierarchyTable::~DotGfxHierarchyTable() @@ -2585,16 +2551,19 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable() //-------------------------------------------------------------------- -int DotClassGraph::m_curNodeNumber = 0; - void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, const char *label,const char *usedName,const char *templSpec,bool base,int distance) { - if (Config_getBool("HIDE_UNDOC_CLASSES") && !cd->isLinkable()) return; + if (Config_getBool(HIDE_UNDOC_CLASSES) && !cd->isLinkable()) return; int edgeStyle = (label || prot==EdgeInfo::Orange || prot==EdgeInfo::Orange2) ? EdgeInfo::Dashed : EdgeInfo::Solid; QCString className; - if (usedName) // name is a typedef + if (cd->isAnonymous()) + { + className="anonymous:"; + className+=label; + } + else if (usedName) // name is a typedef { className=usedName; } @@ -2627,7 +2596,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, else // new class { QCString displayName=className; - if (Config_getBool("HIDE_SCOPE_NAMES")) displayName=stripScope(displayName); + if (Config_getBool(HIDE_SCOPE_NAMES)) displayName=stripScope(displayName); QCString tmp_url; if (cd->isLinkable() && !cd->isHidden()) { @@ -2714,7 +2683,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode, // despite being marked visible in the child loop while ((childQueue.count()>0 || parentQueue.count()>0) && maxNodes>0) { - static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH"); + static int maxDistance = Config_getInt(MAX_DOT_GRAPH_DEPTH); if (childQueue.count()>0) { DotNode *n = childQueue.take(0); @@ -2777,7 +2746,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode, } } } - if (Config_getBool("UML_LOOK")) return FALSE; // UML graph are always top to bottom + if (Config_getBool(UML_LOOK)) return FALSE; // UML graph are always top to bottom int maxWidth=0; int maxHeight=(int)QMAX(childTreeWidth.size(),parentTreeWidth.size()); uint i; @@ -2798,7 +2767,7 @@ bool DotClassGraph::determineVisibleNodes(DotNode *rootNode, void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance) { - static bool templateRelations = Config_getBool("TEMPLATE_RELATIONS"); + static bool templateRelations = Config_getBool(TEMPLATE_RELATIONS); //printf("DocClassGraph::buildGraph(%s,distance=%d,base=%d)\n", // cd->name().data(),distance,base); // ---- Add inheritance relations @@ -2822,9 +2791,9 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance) if (m_graphType == DotNode::Collaboration) { // ---- Add usage relations - - UsesClassDict *dict = - base ? cd->usedImplementationClasses() : + + UsesClassDict *dict = + base ? cd->usedImplementationClasses() : cd->usedByImplementationClasses() ; if (dict) @@ -2931,6 +2900,13 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance) } } +int DotClassGraph::m_curNodeNumber = 0; + +void DotClassGraph::resetNumbering() +{ + m_curNodeNumber = 0; +} + DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t) { //printf("--------------- DotClassGraph::DotClassGraph `%s'\n",cd->displayName().data()); @@ -2964,7 +2940,7 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t) if (t==DotNode::Inheritance) buildGraph(cd,m_startNode,FALSE,1); //} - static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES); //int directChildNodes = 1; //if (m_startNode->m_children!=0) // directChildNodes+=m_startNode->m_children->count(); @@ -2977,12 +2953,13 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t) openNodeQueue.append(m_startNode); determineTruncatedNodes(openNodeQueue,t==DotNode::Inheritance); - m_diskName = cd->getFileBase().copy(); + m_collabFileName = cd->collaborationGraphFileName(); + m_inheritFileName = cd->inheritanceGraphFileName(); } bool DotClassGraph::isTrivial() const { - static bool umlLook = Config_getBool("UML_LOOK"); + static bool umlLook = Config_getBool(UML_LOOK); if (m_graphType==DotNode::Inheritance) return m_startNode->m_children==0 && m_startNode->m_parents==0; else @@ -2991,7 +2968,7 @@ bool DotClassGraph::isTrivial() const bool DotClassGraph::isTooBig() const { - static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES); int numNodes = 0; numNodes+= m_startNode->m_children ? m_startNode->m_children->count() : 0; if (m_graphType==DotNode::Inheritance) @@ -3020,8 +2997,6 @@ QCString computeMd5Signature(DotNode *root, QCString &graphStr ) { - bool reNumber=TRUE; - //printf("computeMd5Signature\n"); QGString buf; FTextStream md5stream(&buf); @@ -3036,8 +3011,7 @@ QCString computeMd5Signature(DotNode *root, format, gt!=DotNode::CallGraph && gt!=DotNode::Dependency, TRUE, - backArrows, - reNumber); + backArrows); if (renderParents && root->m_parents) { QListIterator<DotNode> dnli(*root->m_parents); @@ -3052,8 +3026,7 @@ QCString computeMd5Signature(DotNode *root, pn, // child node pn->m_edgeInfo->at(pn->m_children->findRef(root)), // edge info FALSE, // topDown? - backArrows, // point back? - reNumber // renumber nodes + backArrows // point back? ); } pn->write(md5stream, // stream @@ -3061,8 +3034,7 @@ QCString computeMd5Signature(DotNode *root, format, // output format TRUE, // topDown? FALSE, // toChildren? - backArrows, // backward pointing arrows? - reNumber // renumber nodes? + backArrows // backward pointing arrows? ); } } @@ -3071,10 +3043,6 @@ QCString computeMd5Signature(DotNode *root, QCString sigStr(33); MD5Buffer((const unsigned char *)buf.data(),buf.length(),md5_sig); MD5SigToString(md5_sig,sigStr.rawData(),33); - if (reNumber) - { - resetReNumbering(); - } graphStr=buf.data(); //printf("md5: %s | file: %s\n",sigStr,baseName.data()); return sigStr; @@ -3104,27 +3072,6 @@ static bool updateDotGraph(DotNode *root, return checkAndUpdateMd5Signature(baseName,md5); // graph needs to be regenerated } -QCString DotClassGraph::diskName() const -{ - QCString result=m_diskName.copy(); - switch (m_graphType) - { - case DotNode::Collaboration: - result+="_coll_graph"; - break; - //case Interface: - // result+="_intf_graph"; - // break; - case DotNode::Inheritance: - result+="_inherit_graph"; - break; - default: - ASSERT(0); - break; - } - return result; -} - QCString DotClassGraph::writeGraph(FTextStream &out, GraphOutputFormat graphFormat, EmbeddedOutputFormat textFormat, @@ -3141,7 +3088,7 @@ QCString DotClassGraph::writeGraph(FTextStream &out, { err("Output dir %s does not exist!\n",path); exit(1); } - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); QCString baseName; QCString mapName; @@ -3149,22 +3096,20 @@ QCString DotClassGraph::writeGraph(FTextStream &out, { case DotNode::Collaboration: mapName="coll_map"; + baseName=m_collabFileName; break; - //case Interface: - // mapName="intf_map"; - // break; case DotNode::Inheritance: mapName="inherit_map"; + baseName=m_inheritFileName; break; default: ASSERT(0); break; } - baseName = convertNameToFile(diskName()); // derive target file names from baseName QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString absBaseName = d.absPath().utf8()+"/"+baseName; QCString absDotName = absBaseName+".dot"; QCString absMapName = absBaseName+".map"; @@ -3334,8 +3279,6 @@ void DotClassGraph::writeDEF(FTextStream &t) //-------------------------------------------------------------------- -int DotInclDepGraph::m_curNodeNumber = 0; - void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) { QList<IncludeInfo> *includeFiles = @@ -3356,7 +3299,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) doc = bfd->isLinkable() && !bfd->isHidden(); src = bfd->generateSourceFile(); } - if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS")) + if (doc || src || !Config_getBool(HIDE_UNDOC_RELATIONS)) { QCString url=""; if (bfd) url=bfd->getOutputFileBase().copy(); @@ -3404,7 +3347,7 @@ void DotInclDepGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes { while (queue.count()>0 && maxNodes>0) { - static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH"); + static int maxDistance = Config_getInt(MAX_DOT_GRAPH_DEPTH); DotNode *n = queue.take(0); if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed { @@ -3449,13 +3392,20 @@ void DotInclDepGraph::determineTruncatedNodes(QList<DotNode> &queue) } } +int DotInclDepGraph::m_curNodeNumber = 0; + +void DotInclDepGraph::resetNumbering() +{ + m_curNodeNumber = 0; +} DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse) { m_inverse = inverse; ASSERT(fd!=0); - m_diskName = fd->getFileBase().copy(); - QCString tmp_url=fd->getReference()+"$"+fd->getFileBase(); + m_inclDepFileName = fd->includeDependencyGraphFileName(); + m_inclByDepFileName = fd->includedByDependencyGraphFileName(); + QCString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase(); m_startNode = new DotNode(m_curNodeNumber++, fd->docName(), "", @@ -3467,7 +3417,7 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse) m_usedNodes->insert(fd->absFilePath(),m_startNode); buildGraph(m_startNode,fd,1); - static int nodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int nodes = Config_getInt(DOT_GRAPH_MAX_NODES); int maxNodes = nodes; //int directChildNodes = 1; //if (m_startNode->m_children!=0) @@ -3487,14 +3437,6 @@ DotInclDepGraph::~DotInclDepGraph() delete m_usedNodes; } -QCString DotInclDepGraph::diskName() const -{ - QCString result=m_diskName.copy(); - if (m_inverse) result+="_dep"; - result+="_incl"; - return convertNameToFile(result); -} - QCString DotInclDepGraph::writeGraph(FTextStream &out, GraphOutputFormat graphFormat, EmbeddedOutputFormat textFormat, @@ -3511,17 +3453,22 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out, { err("Output dir %s does not exist!\n",path); exit(1); } - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); - QCString baseName=m_diskName; - if (m_inverse) baseName+="_dep"; - baseName+="_incl"; - baseName=convertNameToFile(baseName); + QCString baseName; + if (m_inverse) + { + baseName=m_inclByDepFileName; + } + else + { + baseName=m_inclDepFileName; + } QCString mapName=escapeCharsInString(m_startNode->m_label,FALSE); if (m_inverse) mapName+="dep"; QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString absBaseName = d.absPath().utf8()+"/"+baseName; QCString absDotName = absBaseName+".dot"; QCString absMapName = absBaseName+".map"; @@ -3635,7 +3582,7 @@ bool DotInclDepGraph::isTrivial() const bool DotInclDepGraph::isTooBig() const { - static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES); int numNodes = m_startNode->m_children ? m_startNode->m_children->count() : 0; return numNodes>=maxNodes; } @@ -3662,8 +3609,6 @@ void DotInclDepGraph::writeDocbook(FTextStream &t) //------------------------------------------------------------- -int DotCallGraph::m_curNodeNumber = 0; - void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance) { MemberSDict *refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers(); @@ -3688,7 +3633,7 @@ void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance) else { QCString name; - if (Config_getBool("HIDE_SCOPE_NAMES")) + if (Config_getBool(HIDE_SCOPE_NAMES)) { name = rmd->getOuterScope()==m_scope ? rmd->name() : rmd->qualifiedName(); @@ -3721,7 +3666,7 @@ void DotCallGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes) { while (queue.count()>0 && maxNodes>0) { - static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH"); + static int maxDistance = Config_getInt(MAX_DOT_GRAPH_DEPTH); DotNode *n = queue.take(0); if (!n->isVisible() && n->distance()<=maxDistance) // not yet processed { @@ -3766,7 +3711,12 @@ void DotCallGraph::determineTruncatedNodes(QList<DotNode> &queue) } } +int DotCallGraph::m_curNodeNumber = 0; +void DotCallGraph::resetNumbering() +{ + m_curNodeNumber = 0; +} DotCallGraph::DotCallGraph(MemberDef *md,bool inverse) { @@ -3777,7 +3727,7 @@ DotCallGraph::DotCallGraph(MemberDef *md,bool inverse) uniqueId = md->getReference()+"$"+ md->getOutputFileBase()+"#"+md->anchor(); QCString name; - if (Config_getBool("HIDE_SCOPE_NAMES")) + if (Config_getBool(HIDE_SCOPE_NAMES)) { name = md->name(); } @@ -3796,7 +3746,7 @@ DotCallGraph::DotCallGraph(MemberDef *md,bool inverse) m_usedNodes->insert(uniqueId,m_startNode); buildGraph(m_startNode,md,1); - static int nodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int nodes = Config_getInt(DOT_GRAPH_MAX_NODES); int maxNodes = nodes; //int directChildNodes = 1; //if (m_startNode->m_children!=0) @@ -3828,13 +3778,13 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphForma { err("Output dir %s does not exist!\n",path); exit(1); } - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); QCString baseName = m_diskName + (m_inverse ? "_icgraph" : "_cgraph"); QCString mapName = baseName; QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString absBaseName = d.absPath().utf8()+"/"+baseName; QCString absDotName = absBaseName+".dot"; QCString absMapName = absBaseName+".map"; @@ -3953,7 +3903,7 @@ bool DotCallGraph::isTrivial() const bool DotCallGraph::isTooBig() const { - static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES"); + static int maxNodes = Config_getInt(DOT_GRAPH_MAX_NODES); int numNodes = m_startNode->m_children ? m_startNode->m_children->count() : 0; return numNodes>=maxNodes; } @@ -3985,13 +3935,13 @@ QCString DotDirDeps::writeGraph(FTextStream &out, { err("Output dir %s does not exist!\n",path); exit(1); } - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); QCString baseName=m_dir->getOutputFileBase()+"_dep"; QCString mapName=escapeCharsInString(baseName,FALSE); QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString absBaseName = d.absPath().utf8()+"/"+baseName; QCString absDotName = absBaseName+".dot"; QCString absMapName = absBaseName+".map"; @@ -4156,7 +4106,7 @@ void generateGraphLegend(const char *path) QCString absBaseName = (QCString)path+"/graph_legend"; QCString absDotName = absBaseName+".dot"; QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString imgName = "graph_legend."+imgExt; QCString absImgName = absBaseName+"."+imgExt; if (checkAndUpdateMd5Signature(absBaseName,sigStr) || @@ -4188,7 +4138,7 @@ void generateGraphLegend(const char *path) if (imgExt=="svg") { DotManager::instance()->addSVGObject( - absBaseName+Config_getString("HTML_FILE_EXTENSION"), + absBaseName+Config_getString(HTML_FILE_EXTENSION), "graph_legend", absImgName,QCString()); } @@ -4205,7 +4155,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, } QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString imgName = (QCString)outFile+"."+imgExt; QCString absImgName = d.absPath().utf8()+"/"+imgName; QCString absOutFile = d.absPath().utf8()+"/"+outFile; @@ -4215,7 +4165,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, dotRun.addJob(imgFmt,absImgName); else // format==GOF_EPS { - if (Config_getBool("USE_PDFLATEX")) + if (Config_getBool(USE_PDFLATEX)) { dotRun.addJob("pdf",absOutFile+".pdf"); } @@ -4261,7 +4211,7 @@ void writeDotImageMapFromFile(FTextStream &t, QCString mapName = baseName+".map"; QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString imgName = baseName+"."+imgExt; QCString absOutFile = d.absPath().utf8()+"/"+mapName; @@ -4298,12 +4248,18 @@ void writeDotImageMapFromFile(FTextStream &t, //------------------------------------------------------------- +int DotGroupCollaboration::m_curNodeNumber = 0; + +void DotGroupCollaboration::resetNumbering() +{ + m_curNodeNumber = 0; +} + DotGroupCollaboration::DotGroupCollaboration(GroupDef* gd) { - m_curNodeId = 0; QCString tmp_url = gd->getReference()+"$"+gd->getOutputFileBase(); m_usedNodes = new QDict<DotNode>(1009); - m_rootNode = new DotNode(m_curNodeId++, gd->groupTitle(), "", tmp_url, TRUE ); + m_rootNode = new DotNode(m_curNodeNumber++, gd->groupTitle(), "", tmp_url, TRUE ); m_rootNode->markAsVisible(); m_usedNodes->insert(gd->name(), m_rootNode ); m_edges.setAutoDelete(TRUE); @@ -4337,7 +4293,7 @@ void DotGroupCollaboration::buildGraph(GroupDef* gd) { // add node tmp_url = d->getReference()+"$"+d->getOutputFileBase(); QCString tooltip = d->briefDescriptionAsTooltip(); - nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_url ); + nnode = new DotNode(m_curNodeNumber++, d->groupTitle(), tooltip, tmp_url ); nnode->markAsVisible(); m_usedNodes->insert(d->name(), nnode ); } @@ -4358,7 +4314,7 @@ void DotGroupCollaboration::buildGraph(GroupDef* gd) { // add node tmp_url = def->getReference()+"$"+def->getOutputFileBase(); QCString tooltip = def->briefDescriptionAsTooltip(); - nnode = new DotNode(m_curNodeId++, def->groupTitle(), tooltip, tmp_url ); + nnode = new DotNode(m_curNodeNumber++, def->groupTitle(), tooltip, tmp_url ); nnode->markAsVisible(); m_usedNodes->insert(def->name(), nnode ); } @@ -4500,7 +4456,7 @@ void DotGroupCollaboration::addCollaborationMember( { // add node tmp_str = d->getReference()+"$"+d->getOutputFileBase(); QCString tooltip = d->briefDescriptionAsTooltip(); - nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_str ); + nnode = new DotNode(m_curNodeNumber++, d->groupTitle(), tooltip, tmp_str ); nnode->markAsVisible(); m_usedNodes->insert(d->name(), nnode ); } @@ -4522,7 +4478,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, { err("Output dir %s does not exist!\n",path); exit(1); } - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); QGString theGraph; FTextStream md5stream(&theGraph); @@ -4539,7 +4495,7 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, // write other nodes. for (dni.toFirst();(pn=dni.current());++dni) { - pn->write(md5stream,DotNode::Inheritance,graphFormat,TRUE,FALSE,FALSE,FALSE); + pn->write(md5stream,DotNode::Inheritance,graphFormat,TRUE,FALSE,FALSE); } // write edges @@ -4551,13 +4507,12 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t, } writeGraphFooter(md5stream); - resetReNumbering(); uchar md5_sig[16]; QCString sigStr(33); MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig); MD5SigToString(md5_sig,sigStr.rawData(),33); QCString imgExt = getDotImageExtension(); - QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT); QCString baseName = m_diskName; QCString imgName = baseName+"."+imgExt; QCString absPath = d.absPath().data(); @@ -4751,7 +4706,7 @@ void DotGroupCollaboration::writeGraphHeader(FTextStream &t, } t << endl; t << "{" << endl; - if (Config_getBool("DOT_TRANSPARENT")) + if (Config_getBool(DOT_TRANSPARENT)) { t << " bgcolor=\"transparent\";" << endl; } @@ -4764,7 +4719,7 @@ void DotGroupCollaboration::writeGraphHeader(FTextStream &t, void writeDotDirDepGraph(FTextStream &t,DirDef *dd,bool linkRelations) { t << "digraph \"" << dd->displayName() << "\" {\n"; - if (Config_getBool("DOT_TRANSPARENT")) + if (Config_getBool(DOT_TRANSPARENT)) { t << " bgcolor=transparent;\n"; } @@ -4854,7 +4809,7 @@ void writeDotDirDepGraph(FTextStream &t,DirDef *dd,bool linkRelations) << usedDir->shortName() << "\""; if (usedDir->isCluster()) { - if (!Config_getBool("DOT_TRANSPARENT")) + if (!Config_getBool(DOT_TRANSPARENT)) { t << " fillcolor=\"white\" style=\"filled\""; } @@ -4907,3 +4862,12 @@ void writeDotDirDepGraph(FTextStream &t,DirDef *dd,bool linkRelations) t << "}\n"; } + +void resetDotNodeNumbering() +{ + DotClassGraph::resetNumbering(); + DotInclDepGraph::resetNumbering(); + DotCallGraph::resetNumbering(); + DotGroupCollaboration::resetNumbering(); +} + @@ -78,7 +78,7 @@ class DotNode void removeParent(DotNode *n); int findParent( DotNode *n ); void write(FTextStream &t,GraphType gt,GraphOutputFormat f, - bool topDown,bool toChildren,bool backArrows,bool reNumber); + bool topDown,bool toChildren,bool backArrows); int m_subgraphId; void clearWriteFlag(); void writeXML(FTextStream &t,bool isClassGraph); @@ -89,13 +89,14 @@ class DotNode bool isVisible() const { return m_visible; } TruncState isTruncated() const { return m_truncated; } int distance() const { return m_distance; } + void renumberNodes(int &number); private: void colorConnectedNodes(int curColor); void writeBox(FTextStream &t,GraphType gt,GraphOutputFormat f, - bool hasNonReachableChildren, bool reNumber=FALSE); + bool hasNonReachableChildren); void writeArrow(FTextStream &t,GraphType gt,GraphOutputFormat f,DotNode *cn, - EdgeInfo *ei,bool topDown, bool pointBack=TRUE, bool reNumber=FALSE); + EdgeInfo *ei,bool topDown, bool pointBack=TRUE); void setDistance(int distance); const DotNode *findDocNode() const; // only works for acyclic graphs! void markAsVisible(bool b=TRUE) { m_visible=b; } @@ -160,7 +161,7 @@ class DotGfxHierarchyTable QList<DotNode> *m_rootNodes; QDict<DotNode> *m_usedNodes; - static int m_curNodeNumber; + int m_curNodeNumber; DotNodeList *m_rootSubgraphs; }; @@ -179,7 +180,7 @@ class DotClassGraph void writeXML(FTextStream &t); void writeDocbook(FTextStream &t); void writeDEF(FTextStream &t); - QCString diskName() const; + static void resetNumbering(); private: void buildGraph(ClassDef *cd,DotNode *n,bool base,int distance); @@ -193,7 +194,8 @@ class DotClassGraph QDict<DotNode> * m_usedNodes; static int m_curNodeNumber; DotNode::GraphType m_graphType; - QCString m_diskName; + QCString m_collabFileName; + QCString m_inheritFileName; bool m_lrRank; }; @@ -211,6 +213,8 @@ class DotInclDepGraph QCString diskName() const; void writeXML(FTextStream &t); void writeDocbook(FTextStream &t); + static void resetNumbering(); + private: void buildGraph(DotNode *n,FileDef *fd,int distance); void determineVisibleNodes(QList<DotNode> &queue,int &maxNodes); @@ -219,7 +223,8 @@ class DotInclDepGraph DotNode *m_startNode; QDict<DotNode> *m_usedNodes; static int m_curNodeNumber; - QCString m_diskName; + QCString m_inclDepFileName; + QCString m_inclByDepFileName; bool m_inverse; }; @@ -238,10 +243,11 @@ class DotCallGraph bool isTooBig() const; void determineVisibleNodes(QList<DotNode> &queue, int &maxNodes); void determineTruncatedNodes(QList<DotNode> &queue); - + static void resetNumbering(); + private: DotNode *m_startNode; - static int m_curNodeNumber; + static int m_curNodeNumber; QDict<DotNode> *m_usedNodes; bool m_inverse; QCString m_diskName; @@ -312,6 +318,8 @@ class DotGroupCollaboration bool writeImageMap=TRUE,int graphId=-1) const; void buildGraph(GroupDef* gd); bool isTrivial() const; + static void resetNumbering(); + private : void addCollaborationMember( Definition* def, QCString& url, EdgeType eType ); void addMemberList( class MemberList* ml ); @@ -320,7 +328,7 @@ class DotGroupCollaboration const QCString& _label, const QCString& _url ); DotNode *m_rootNode; - int m_curNodeId; + static int m_curNodeNumber; QDict<DotNode> *m_usedNodes; QCString m_diskName; QList<Edge> m_edges; @@ -488,4 +496,6 @@ void writeDotImageMapFromFile(FTextStream &t, const QCString& relPath,const QCString& baseName, const QCString& context,int graphId=-1); +void resetDotNodeNumbering(); + #endif diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 43bec1b..d3554cf 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -3,8 +3,8 @@ * Copyright (C) 1997-2015 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 + * 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. * @@ -72,6 +72,7 @@ #include "pyscanner.h" #include "fortranscanner.h" #include "xmlscanner.h" +#include "sqlscanner.h" #include "tclscanner.h" #include "code.h" #include "objcache.h" @@ -106,7 +107,7 @@ extern void initResources(); do { if (var->children()) { \ EntryNavListIterator eli(*var->children()); \ for (;eli.current();++eli) func(eli.current()); \ - } } while(0) + } } while(0) #if !defined(_WIN32) || defined(__CYGWIN__) @@ -119,9 +120,9 @@ ClassSDict *Doxygen::classSDict = 0; ClassSDict *Doxygen::hiddenClasses = 0; NamespaceSDict *Doxygen::namespaceSDict = 0; MemberNameSDict *Doxygen::memberNameSDict = 0; -MemberNameSDict *Doxygen::functionNameSDict = 0; +MemberNameSDict *Doxygen::functionNameSDict = 0; FileNameList *Doxygen::inputNameList = 0; // all input files -FileNameDict *Doxygen::inputNameDict = 0; +FileNameDict *Doxygen::inputNameDict = 0; GroupSDict *Doxygen::groupSDict = 0; FormulaList *Doxygen::formulaList = 0; // all formulas FormulaDict *Doxygen::formulaDict = 0; // all formulas @@ -173,14 +174,14 @@ GenericsSDict *Doxygen::genericsDict; // locally accessible globals static QDict<EntryNav> g_classEntries(1009); -static StringList g_inputFiles; +static StringList g_inputFiles; static QDict<void> g_compoundKeywordDict(7); // keywords recognised as compounds static OutputList *g_outputList = 0; // list of output generating objects static QDict<FileDef> g_usingDeclarations(1009); // used classes static FileStorage *g_storage = 0; static bool g_successfulRun = FALSE; static bool g_dumpSymbolMap = FALSE; -static bool g_useOutputTemplate = FALSE; +static bool g_useOutputTemplate = FALSE; void clearAll() { @@ -209,7 +210,7 @@ void clearAll() delete Doxygen::mainPage; Doxygen::mainPage=0; } -class Statistics +class Statistics { public: Statistics() { stats.setAutoDelete(TRUE); } @@ -242,7 +243,7 @@ class Statistics if (restore) Debug::setFlag("time"); } private: - struct stat + struct stat { const char *name; double elapsed; @@ -423,7 +424,7 @@ static void addSTLMember(EntryNav *rootNav,const char *type,const char *name) memEntry->protection = Public; memEntry->section = Entry::VARIABLE_SEC; memEntry->brief = "STL member"; - memEntry->hidden = FALSE; + memEntry->hidden = FALSE; memEntry->artificial = TRUE; //memEntry->parent = root; //root->addSubEntry(memEntry); @@ -463,7 +464,7 @@ static void addSTLClasses(EntryNav *rootNav) EntryNav *namespaceEntryNav = new EntryNav(rootNav,namespaceEntry); namespaceEntryNav->setEntry(namespaceEntry); rootNav->addChild(namespaceEntryNav); - + STLInfo *info = g_stlinfo; while (info->className) { @@ -524,7 +525,7 @@ static void addSTLClasses(EntryNav *rootNav) memEntry->protection = Public; memEntry->section = Entry::FUNCTION_SEC; memEntry->brief = "STL member"; - memEntry->hidden = FALSE; + memEntry->hidden = FALSE; memEntry->artificial = FALSE; EntryNav *memEntryNav = new EntryNav(classEntryNav,memEntry); memEntryNav->setEntry(memEntry); @@ -567,7 +568,7 @@ static void addPageToContext(PageDef *pd,EntryNav *rootNav) scope = stripAnonymousNamespaceScope(scope); scope+="::"+pd->name(); Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo()); - if (d) + if (d) { pd->setPageScope(d); } @@ -611,7 +612,7 @@ static void addRelatedPage(EntryNav *rootNav) static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool includeExternal) { - if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() && + if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() && ((!includeExternal && rootNav->tagInfo()==0) || ( includeExternal && rootNav->tagInfo()!=0)) ) @@ -697,7 +698,7 @@ static void buildGroupList(EntryNav *rootNav) static void findGroupScope(EntryNav *rootNav) { - if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() && + if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() && rootNav->parent() && !rootNav->parent()->name().isEmpty()) { GroupDef *gd; @@ -711,7 +712,7 @@ static void findGroupScope(EntryNav *rootNav) scope = stripAnonymousNamespaceScope(scope); scope+="::"+gd->name(); Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo()); - if (d) + if (d) { gd->setGroupScope(d); } @@ -766,7 +767,7 @@ static void organizeSubGroups(EntryNav *rootNav) static void buildFileList(EntryNav *rootNav) { if (((rootNav->section()==Entry::FILEDOC_SEC) || - ((rootNav->section() & Entry::FILE_MASK) && Config_getBool("EXTRACT_ALL"))) && + ((rootNav->section() & Entry::FILE_MASK) && Config_getBool(EXTRACT_ALL))) && !rootNav->name().isEmpty() && !rootNav->tagInfo() // skip any file coming from tag files ) { @@ -793,11 +794,11 @@ static void buildFileList(EntryNav *rootNav) #endif { //printf("Adding documentation!\n"); - // using FALSE in setDocumentation is small hack to make sure a file - // is documented even if a \file command is used without further + // using FALSE in setDocumentation is small hack to make sure a file + // is documented even if a \file command is used without further // documentation fd->setDocumentation(root->doc,root->docFile,root->docLine,FALSE); - fd->setBriefDescription(root->brief,root->briefFile,root->briefLine); + fd->setBriefDescription(root->brief,root->briefFile,root->briefLine); fd->addSectionsToDefinition(root->anchors); fd->setRefItems(root->sli); QListIterator<Grouping> gli(*root->groups); @@ -842,16 +843,16 @@ static void buildFileList(EntryNav *rootNav) static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) { - if ( - (!root->doc.stripWhiteSpace().isEmpty() || - !root->brief.stripWhiteSpace().isEmpty() || - Config_getBool("EXTRACT_ALL") + if ( + (!root->doc.stripWhiteSpace().isEmpty() || + !root->brief.stripWhiteSpace().isEmpty() || + Config_getBool(EXTRACT_ALL) ) && root->protection!=Private ) - { + { //printf(">>>>>> includeFile=%s\n",root->includeFile.data()); - bool local=Config_getBool("FORCE_LOCAL_INCLUDES"); + bool local=Config_getBool(FORCE_LOCAL_INCLUDES); QCString includeFile = root->includeFile; if (!includeFile.isEmpty() && includeFile.at(0)=='"') { @@ -868,7 +869,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) FileDef *fd=0; // see if we need to include a verbatim copy of the header file //printf("root->includeFile=%s\n",root->includeFile.data()); - if (!includeFile.isEmpty() && + if (!includeFile.isEmpty() && (fd=findFileDef(Doxygen::inputNameDict,includeFile,ambig))==0 ) { // explicit request @@ -900,7 +901,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) // if a file is found, we mark it as a source file. if (fd) { - QCString iName = !root->includeName.isEmpty() ? + QCString iName = !root->includeName.isEmpty() ? root->includeName : includeFile; if (!iName.isEmpty()) // user specified include file { @@ -915,7 +916,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) iName=fd->name(); } } - else if (!Config_getList("STRIP_FROM_INC_PATH").isEmpty()) + else if (!Config_getList(STRIP_FROM_INC_PATH).isEmpty()) { iName=stripFromIncludePath(fd->absFilePath()); } @@ -960,7 +961,7 @@ static bool addNamespace(Entry *root,ClassDef *cd) } } e=e->parent; - } + } } return FALSE; } @@ -994,7 +995,7 @@ static Definition *findScope(Entry *root,int level=0) } #endif -/*! returns the Definition object belonging to the first \a level levels of +/*! returns the Definition object belonging to the first \a level levels of * full qualified name \a name. Creates an artificial scope if the scope is * not found and set the parent/child scope relation if the scope is found. */ @@ -1016,7 +1017,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name, fullScope+=nsName; NamespaceDef *nd=Doxygen::namespaceSDict->find(fullScope); Definition *innerScope = nd; - ClassDef *cd=0; + ClassDef *cd=0; if (nd==0) cd = getClass(fullScope); if (nd==0 && cd) // scope is a class { @@ -1066,7 +1067,7 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr QCString scope=stripTemplateSpecifiersFromScope(n,FALSE); int l1=0,i1; i1=getScopeFragment(scope,0,&l1); - if (i1==-1) + if (i1==-1) { //printf(">no fragments!\n"); return resultScope; @@ -1079,12 +1080,12 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr //printf(" nestedNameSpecifier=%s\n",nestedNameSpecifier.data()); resultScope = resultScope->findInnerCompound(nestedNameSpecifier); //printf(" resultScope=%p\n",resultScope); - if (resultScope==0) + if (resultScope==0) { NamespaceSDict *usedNamespaces; if (orgScope==Doxygen::globalScope && fileScope && - (usedNamespaces = fileScope->getUsedNamespaces())) - // also search for used namespaces + (usedNamespaces = fileScope->getUsedNamespaces())) + // also search for used namespaces { NamespaceSDict::Iterator ni(*usedNamespaces); NamespaceDef *nd; @@ -1093,7 +1094,7 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr // restart search within the used namespace resultScope = findScopeFromQualifiedName(nd,n,fileScope,tagInfo); } - if (resultScope) + if (resultScope) { // for a nested class A::I in used namespace N, we get // N::A::I while looking for A, so we should compare @@ -1107,10 +1108,10 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr } } - // also search for used classes. Complication: we haven't been able + // also search for used classes. Complication: we haven't been able // to put them in the right scope yet, because we are still resolving // the scope relations! - // Therefore loop through all used classes and see if there is a right + // Therefore loop through all used classes and see if there is a right // scope match between the used class and nestedNameSpecifier. QDictIterator<FileDef> ui(g_usingDeclarations); FileDef *usedFd; @@ -1126,14 +1127,14 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr resultScope = buildScopeFromQualifiedName(fqn,fqn.contains("::"), startScope->getLanguage(),0); //printf("Creating scope from fqn=%s result %p\n",fqn.data(),resultScope); - if (resultScope) + if (resultScope) { //printf("> Match! resultScope=%s\n",resultScope->name().data()); return resultScope; } } } - + //printf("> name %s not found in scope %s\n",nestedNameSpecifier.data(),orgScope->name().data()); return 0; } @@ -1151,7 +1152,7 @@ ArgumentList *getTemplateArgumentsFromName( const QList<ArgumentList> *tArgLists) { if (tArgLists==0) return 0; - + QListIterator<ArgumentList> ali(*tArgLists); // for each scope fragment, check if it is a template and advance through // the list if so. @@ -1178,18 +1179,18 @@ ArgumentList *getTemplateArgumentsFromName( static ClassDef::CompoundType convertToCompoundType(int section,uint64 specifier) { - ClassDef::CompoundType sec=ClassDef::Class; - if (specifier&Entry::Struct) + ClassDef::CompoundType sec=ClassDef::Class; + if (specifier&Entry::Struct) sec=ClassDef::Struct; - else if (specifier&Entry::Union) + else if (specifier&Entry::Union) sec=ClassDef::Union; - else if (specifier&Entry::Category) + else if (specifier&Entry::Category) sec=ClassDef::Category; - else if (specifier&Entry::Interface) + else if (specifier&Entry::Interface) sec=ClassDef::Interface; - else if (specifier&Entry::Protocol) + else if (specifier&Entry::Protocol) sec=ClassDef::Protocol; - else if (specifier&Entry::Exception) + else if (specifier&Entry::Exception) sec=ClassDef::Exception; else if (specifier&Entry::Service) sec=ClassDef::Service; @@ -1198,29 +1199,29 @@ ClassDef::CompoundType convertToCompoundType(int section,uint64 specifier) switch(section) { - //case Entry::UNION_SEC: - case Entry::UNIONDOC_SEC: - sec=ClassDef::Union; + //case Entry::UNION_SEC: + case Entry::UNIONDOC_SEC: + sec=ClassDef::Union; break; //case Entry::STRUCT_SEC: - case Entry::STRUCTDOC_SEC: - sec=ClassDef::Struct; + case Entry::STRUCTDOC_SEC: + sec=ClassDef::Struct; break; //case Entry::INTERFACE_SEC: case Entry::INTERFACEDOC_SEC: - sec=ClassDef::Interface; + sec=ClassDef::Interface; break; //case Entry::PROTOCOL_SEC: case Entry::PROTOCOLDOC_SEC: - sec=ClassDef::Protocol; + sec=ClassDef::Protocol; break; //case Entry::CATEGORY_SEC: case Entry::CATEGORYDOC_SEC: - sec=ClassDef::Category; + sec=ClassDef::Category; break; //case Entry::EXCEPTION_SEC: case Entry::EXCEPTIONDOC_SEC: - sec=ClassDef::Exception; + sec=ClassDef::Exception; break; case Entry::SERVICEDOC_SEC: sec=ClassDef::Service; @@ -1318,7 +1319,7 @@ static void addClassToContext(EntryNav *rootNav) tagName = tagInfo->tagName; refFileName = tagInfo->fileName; if (fullName.find("::")!=-1) - // symbols imported via tag files may come without the parent scope, + // symbols imported via tag files may come without the parent scope, // so we artificially create it here { buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo); @@ -1343,26 +1344,26 @@ static void addClassToContext(EntryNav *rootNav) qPrint(fullName),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo); cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); - cd->setLanguage(root->lang); + cd->setLanguage(root->lang); cd->setId(root->id); - cd->setHidden(root->hidden); - cd->setArtificial(root->artificial); + cd->setHidden(root->hidden); + cd->setArtificial(root->artificial); cd->setClassSpecifier(root->spec); - cd->setTypeConstraints(root->typeConstr); - //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data()); + cd->setTypeConstraints(root->typeConstr); + //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data()); - //printf("class %s template args=%s\n",fullName.data(), - // tArgList ? tempArgListToString(tArgList,root->lang).data() : "<none>"); - cd->setTemplateArguments(tArgList); - cd->setProtection(root->protection); - cd->setIsStatic(root->stat); + //printf("class %s template args=%s\n",fullName.data(), + // tArgList ? tempArgListToString(tArgList,root->lang).data() : "<none>"); + cd->setTemplateArguments(tArgList); + cd->setProtection(root->protection); + cd->setIsStatic(root->stat); - // file definition containing the class cd - cd->setBodySegment(root->bodyLine,root->endBodyLine); - cd->setBodyDef(fd); + // file definition containing the class cd + cd->setBodySegment(root->bodyLine,root->endBodyLine); + cd->setBodyDef(fd); - // see if the class is found inside a namespace - //bool found=addNamespace(root,cd); + // see if the class is found inside a namespace + //bool found=addNamespace(root,cd); cd->insertUsedFile(fd); @@ -1383,7 +1384,7 @@ static void addClassToContext(EntryNav *rootNav) { addIncludeFile(cd,fd,root); } - if (fd && (root->section & Entry::COMPOUND_MASK)) + if (fd && (root->section & Entry::COMPOUND_MASK)) { //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n", // cd->name().data(), @@ -1398,14 +1399,14 @@ static void addClassToContext(EntryNav *rootNav) rootNav->releaseEntry(); } - + //---------------------------------------------------------------------- // build a list of all classes mentioned in the documentation // and all classes that have a documentation block before their definition. static void buildClassList(EntryNav *rootNav) { if ( - ((rootNav->section() & Entry::COMPOUND_MASK) || + ((rootNav->section() & Entry::COMPOUND_MASK) || rootNav->section()==Entry::OBJCIMPL_SEC) && !rootNav->name().isEmpty() ) { @@ -1443,7 +1444,7 @@ static void resolveClassNestingRelations() { QCString name = stripAnonymousNamespaceScope(cd->name()); //printf("processing=%s, iteration=%d\n",cd->name().data(),iteration); - // also add class to the correct structural context + // also add class to the correct structural context Definition *d = findScopeFromQualifiedName(Doxygen::globalScope, name,cd->getFileDef(),0); if (d) @@ -1473,7 +1474,7 @@ static void resolveClassNestingRelations() /// create the scope artificially // anyway, so we can at least relate scopes properly. Definition *d = buildScopeFromQualifiedName(name,name.contains("::"),cd->getLanguage(),0); - if (d!=cd && !cd->getDefFileName().isEmpty()) + if (d!=cd && !cd->getDefFileName().isEmpty()) // avoid recursion in case of redundant scopes, i.e: namespace N { class N::C {}; } // for this case doxygen assumes the exitance of a namespace N::N in which C is to be found! // also avoid warning for stuff imported via a tagfile. @@ -1491,7 +1492,7 @@ static void resolveClassNestingRelations() void distributeClassGroupRelations() { - //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); + //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); //if (!inlineGroupedClasses) return; //printf("** distributeClassGroupRelations()\n"); @@ -1598,8 +1599,8 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC } /** Look through the members of class \a cd and its public members. - * If there is a member m of a tag less struct/union, - * then we create a duplicate of the struct/union with the name of the + * If there is a member m of a tag less struct/union, + * then we create a duplicate of the struct/union with the name of the * member to identify it. * So if cd has name S, then the tag less struct/union will get name S.m * Since tag less structs can be nested we need to call this function @@ -1646,7 +1647,7 @@ static void processTagLessClasses(ClassDef *rootCd, // replace tag-less type for generated/original member // by newly created class name. // note the difference between changing cd and tagParentCd. - // for the initial call this is the same pointer, but for + // for the initial call this is the same pointer, but for // recursive calls cd is the original tag-less struct (of which // there is only one instance) and tagParentCd is the newly // generated tagged struct of which there can be multiple instances! @@ -1714,7 +1715,7 @@ static void buildNamespaceList(EntryNav *rootNav) (rootNav->section()==Entry::NAMESPACE_SEC || rootNav->section()==Entry::NAMESPACEDOC_SEC || rootNav->section()==Entry::PACKAGEDOC_SEC - ) && + ) && !rootNav->name().isEmpty() ) { @@ -1799,7 +1800,7 @@ static void buildNamespaceList(EntryNav *rootNav) // add class to the list Doxygen::namespaceSDict->inSort(fullName,nd); - // also add namespace to the correct structural context + // also add namespace to the correct structural context Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName,0,tagInfo); //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"<none>"); if (d==0) // we didn't find anything, create the scope artificially @@ -1881,12 +1882,12 @@ static void findUsingDirectives(EntryNav *rootNav) // find the scope in which the `using' namespace is defined by prepending // the possible scopes in which the using statement was found, starting - // with the most inner scope and going to the most outer scope (i.e. - // file scope). + // with the most inner scope and going to the most outer scope (i.e. + // file scope). int scopeOffset = nsName.length(); do { - QCString scope=scopeOffset>0 ? + QCString scope=scopeOffset>0 ? nsName.left(scopeOffset)+"::" : QCString(); usingNd = getResolvedNamespace(scope+name); //printf("Trying with scope=`%s' usingNd=%p\n",(scope+name).data(),usingNd); @@ -1967,7 +1968,7 @@ static void findUsingDirectives(EntryNav *rootNav) } // insert the namespace in the file definition - if (fd) + if (fd) { fd->insertNamespace(nd); fd->addUsingDirective(nd); @@ -2014,7 +2015,7 @@ static void buildListOfUsingDecls(EntryNav *rootNav) RECURSE_ENTRYTREE(buildListOfUsingDecls,rootNav); } - + static void findUsingDeclarations(EntryNav *rootNav) { if (rootNav->section()==Entry::USINGDECL_SEC && @@ -2048,14 +2049,20 @@ static void findUsingDeclarations(EntryNav *rootNav) // Assume the using statement was used to import a class. // Find the scope in which the `using' namespace is defined by prepending // the possible scopes in which the using statement was found, starting - // with the most inner scope and going to the most outer scope (i.e. + // with the most inner scope and going to the most outer scope (i.e. // file scope). QCString name = substitute(root->name,".","::"); //Java/C# scope->internal - usingCd = getClass(name); + usingCd = getClass(name); // try direct lookup first, this is needed to get + // builtin STL classes to properly resolve, e.g. + // vector -> std::vector if (usingCd==0) { - usingCd = Doxygen::hiddenClasses->find(name); + usingCd = getResolvedClass(nd,fd,name); // try via resolving (see also bug757509) + } + if (usingCd==0) + { + usingCd = Doxygen::hiddenClasses->find(name); // check if it is already hidden } //printf("%s -> %p\n",root->name.data(),usingCd); @@ -2130,7 +2137,7 @@ static void findUsingDeclImports(EntryNav *rootNav) MemberNameInfo *mni = mndict->find(memName); if (mni) { - MemberNameInfoIterator mnii(*mni); + MemberNameInfoIterator mnii(*mni); MemberInfo *mi; for ( ; (mi=mnii.current()) ; ++mnii ) { @@ -2205,7 +2212,7 @@ static void findUsingDeclImports(EntryNav *rootNav) static void findIncludedUsingDirectives() { // first mark all files as not visited - FileNameListIterator fnli(*Doxygen::inputNameList); + FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (fnli.toFirst();(fn=fnli.current());++fnli) { @@ -2224,7 +2231,7 @@ static void findIncludedUsingDirectives() FileDef *fd; for (fni.toFirst();(fd=fni.current());++fni) { - if (!fd->visited) + if (!fd->visited) { //printf("----- adding using directives for file %s\n",fd->name().data()); fd->addIncludedUsingDirectives(); @@ -2259,7 +2266,7 @@ static MemberDef *addVariableToClass( " class variable:\n" " `%s' `%s'::`%s' `%s' prot=`%d ann=%d init=`%s'\n", qPrint(root->type), - qPrint(qualScope), + qPrint(qualScope), qPrint(name), qPrint(root->args), root->protection, @@ -2270,9 +2277,9 @@ static MemberDef *addVariableToClass( QCString def; if (!root->type.isEmpty()) { - if (related || mtype==MemberType_Friend || Config_getBool("HIDE_SCOPE_NAMES")) + if (related || mtype==MemberType_Friend || Config_getBool(HIDE_SCOPE_NAMES)) { - if (root->spec&Entry::Alias) // turn 'typedef B A' into 'using A = B' + if (root->spec&Entry::Alias) // turn 'typedef B A' into 'using A = B' { def="using "+name+" = "+root->type.mid(7); } @@ -2283,7 +2290,7 @@ static MemberDef *addVariableToClass( } else { - if (root->spec&Entry::Alias) // turn 'typedef B C::A' into 'using C::A = B' + if (root->spec&Entry::Alias) // turn 'typedef B C::A' into 'using C::A = B' { def="using "+qualScope+scopeSeparator+name+" = "+root->type.mid(7); } @@ -2295,7 +2302,7 @@ static MemberDef *addVariableToClass( } else { - if (Config_getBool("HIDE_SCOPE_NAMES")) + if (Config_getBool(HIDE_SCOPE_NAMES)) { def=name+root->args; } @@ -2318,13 +2325,13 @@ static MemberDef *addVariableToClass( { //printf("md->getClassDef()=%p cd=%p type=[%s] md->typeString()=[%s]\n", // md->getClassDef(),cd,root->type.data(),md->typeString()); - if (md->getClassDef()==cd && - removeRedundantWhiteSpace(root->type)==md->typeString()) + if (md->getClassDef()==cd && + removeRedundantWhiteSpace(root->type)==md->typeString()) // member already in the scope { - if (root->lang==SrcLangExt_ObjC && - root->mtype==Property && + if (root->lang==SrcLangExt_ObjC && + root->mtype==Property && md->memberType()==MemberType_Variable) { // Objective-C 2.0 property // turn variable into a property @@ -2335,7 +2342,7 @@ static MemberDef *addVariableToClass( //printf(" Member already found!\n"); return md; } - } + } } QCString fileName = root->fileName; @@ -2377,7 +2384,7 @@ static MemberDef *addVariableToClass( md->setLanguage(root->lang); md->setId(root->id); addMemberToGroups(root,md); - //if (root->mGrpId!=-1) + //if (root->mGrpId!=-1) //{ // printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId); // md->setMemberGroup(memberGroupDict[root->mGrpId]); @@ -2437,7 +2444,7 @@ static MemberDef *addVariableToFile( FileDef *fd = rootNav->fileDef(); // see if we have a typedef that should hide a struct or union - if (mtype==MemberType_Typedef && Config_getBool("TYPEDEF_HIDES_STRUCT")) + if (mtype==MemberType_Typedef && Config_getBool(TYPEDEF_HIDES_STRUCT)) { QCString type = root->type; type.stripPrefix("typedef "); @@ -2479,8 +2486,8 @@ static MemberDef *addVariableToFile( QCString def; // determine the definition of the global variable - if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' && - !Config_getBool("HIDE_SCOPE_NAMES") + if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' && + !Config_getBool(HIDE_SCOPE_NAMES) ) // variable is inside a namespace, so put the scope before the name { @@ -2489,7 +2496,7 @@ static MemberDef *addVariableToFile( if (!root->type.isEmpty()) { - if (root->spec&Entry::Alias) // turn 'typedef B NS::A' into 'using NS::A = B' + if (root->spec&Entry::Alias) // turn 'typedef B NS::A' into 'using NS::A = B' { def="using "+nd->name()+sep+name+" = "+root->type; } @@ -2513,7 +2520,7 @@ static MemberDef *addVariableToFile( } else { - if (root->spec&Entry::Alias) // turn 'typedef B A' into 'using A = B' + if (root->spec&Entry::Alias) // turn 'typedef B A' into 'using A = B' { def="using "+root->name+" = "+root->type.mid(7); } @@ -2545,7 +2552,7 @@ static MemberDef *addVariableToFile( for (mni.toFirst();(md=mni.current());++mni) { if ( - ((nd==0 && md->getNamespaceDef()==0 && md->getFileDef() && + ((nd==0 && md->getNamespaceDef()==0 && md->getFileDef() && root->fileName==md->getFileDef()->absFilePath() ) // both variable names in the same file || (nd!=0 && md->getNamespaceDef()==nd) // both in same namespace @@ -2556,16 +2563,16 @@ static MemberDef *addVariableToFile( // variable already in the scope { bool isPHPArray = md->getLanguage()==SrcLangExt_PHP && - md->argsString()!=root->args && + md->argsString()!=root->args && root->args.find('[')!=-1; - bool staticsInDifferentFiles = - root->stat && md->isStatic() && + bool staticsInDifferentFiles = + root->stat && md->isStatic() && root->fileName!=md->getDefFileName(); if (md->getFileDef() && !isPHPArray && // not a php array !staticsInDifferentFiles - ) + ) // not a php array variable { @@ -2576,7 +2583,7 @@ static MemberDef *addVariableToFile( return md; } } - } + } } QCString fileName = root->fileName; @@ -2586,7 +2593,7 @@ static MemberDef *addVariableToFile( } Debug::print(Debug::Variables,0, - " new variable, nd=%s!\n",nd?qPrint(nd->name()):"<global>"); + " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",rootNav->tagInfo()); // new global variable, enum value or typedef MemberDef *md=new MemberDef( fileName,root->startLine,root->startColumn, @@ -2622,18 +2629,18 @@ static MemberDef *addVariableToFile( if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') { md->setNamespace(nd); - nd->insertMember(md); + nd->insertMember(md); } // add member to the file (we do this even if we have already inserted - // it into the namespace. + // it into the namespace. if (fd) { - md->setFileDef(fd); + md->setFileDef(fd); fd->insertMember(md); } - // add member definition to the list of globals + // add member definition to the list of globals if (mn) { mn->append(md); @@ -2648,13 +2655,16 @@ static MemberDef *addVariableToFile( return md; } -/*! See if the return type string \a type is that of a function pointer +/*! See if the return type string \a type is that of a function pointer * \returns -1 if this is not a function pointer variable or * the index at which the closing brace of (...*name) was found. */ static int findFunctionPtr(const QCString &type,int lang, int *pLength=0) { - if (lang == SrcLangExt_Fortran) return -1; // Fortran does not have function pointers + if (lang == SrcLangExt_Fortran || lang == SrcLangExt_VHDL) + { + return -1; // Fortran and VHDL do not have function pointers + } static const QRegExp re("([^)]*[\\*\\^][^)]*)"); int i=-1,l; int bb=type.find('<'); @@ -2709,12 +2719,12 @@ static bool isVarWithConstructor(EntryNav *rootNav) result=FALSE; goto done; } - if (root->type.isEmpty()) + if (root->type.isEmpty()) { result=FALSE; goto done; } - if (!rootNav->parent()->name().isEmpty()) + if (!rootNav->parent()->name().isEmpty()) { ctx=Doxygen::namespaceSDict->find(rootNav->parent()->name()); } @@ -2729,13 +2739,13 @@ static bool isVarWithConstructor(EntryNav *rootNav) { typeIsClass=getResolvedClass(ctx,fd,type.left(ti))!=0; } - if (typeIsClass) // now we still have to check if the arguments are + if (typeIsClass) // now we still have to check if the arguments are // types or values. Since we do not have complete type info // we need to rely on heuristics :-( { //printf("typeIsClass\n"); ArgumentList *al = root->argList; - if (al==0 || al->isEmpty()) + if (al==0 || al->isEmpty()) { result=FALSE; // empty arg list -> function prototype. goto done; @@ -2744,7 +2754,7 @@ static bool isVarWithConstructor(EntryNav *rootNav) Argument *a; for (ali.toFirst();(a=ali.current());++ali) { - if (!a->name.isEmpty() || !a->defval.isEmpty()) + if (!a->name.isEmpty() || !a->defval.isEmpty()) { if (a->name.find(initChars)==0) { @@ -2756,7 +2766,7 @@ static bool isVarWithConstructor(EntryNav *rootNav) } goto done; } - if (a->type.isEmpty() || getResolvedClass(ctx,fd,a->type)!=0) + if (a->type.isEmpty() || getResolvedClass(ctx,fd,a->type)!=0) { result=FALSE; // arg type is a known type goto done; @@ -2768,13 +2778,13 @@ static bool isVarWithConstructor(EntryNav *rootNav) goto done; } if (a->type.at(a->type.length()-1)=='*' || - a->type.at(a->type.length()-1)=='&') + a->type.at(a->type.length()-1)=='&') // type ends with * or & => pointer or reference { result=FALSE; goto done; } - if (a->type.find(initChars)==0) + if (a->type.find(initChars)==0) { result=TRUE; // argument type starts with typical initializer char goto done; @@ -2786,9 +2796,9 @@ static bool isVarWithConstructor(EntryNav *rootNav) { resType=resType.left(len); //printf("resType=%s\n",resType.data()); - if (resType=="int" || resType=="long" || resType=="float" || - resType=="double" || resType=="char" || resType=="signed" || - resType=="const" || resType=="unsigned" || resType=="void") + if (resType=="int" || resType=="long" || resType=="float" || + resType=="double" || resType=="char" || resType=="signed" || + resType=="const" || resType=="unsigned" || resType=="void") { result=FALSE; // type keyword -> function prototype goto done; @@ -2825,7 +2835,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) if (root->type.isEmpty() && root->name.find("operator")==-1 && (root->name.find('*')!=-1 || root->name.find('&')!=-1)) { - // recover from parse error caused by redundant braces + // recover from parse error caused by redundant braces // like in "int *(var[10]);", which is parsed as // type="" name="int *" args="(var[10])" @@ -2861,16 +2871,11 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) //printf("root->type=%s root->args=%s\n",root->type.data(),root->args.data()); } } - else if (root->type.find("typedef ")!=-1 && root->type.right(2)=="()") // typedef void (func)(int) - { - root->type=root->type.left(root->type.length()-1); - root->args.prepend(") "); - } } - + QCString scope,name=removeRedundantWhiteSpace(root->name); - // find the scope of this variable + // find the scope of this variable EntryNav *p = rootNav->parent(); while ((p->section() & Entry::SCOPE_MASK)) { @@ -2882,7 +2887,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) } p=p->parent(); } - + MemberType mtype; QCString type=root->type.stripWhiteSpace(); ClassDef *cd=0; @@ -2893,9 +2898,9 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) classScope=stripTemplateSpecifiersFromScope(classScope,FALSE); QCString annScopePrefix=scope.left(scope.length()-classScope.length()); - if (root->name.findRev("::")!=-1) + if (root->name.findRev("::")!=-1) { - if (root->type=="friend class" || root->type=="friend struct" || + if (root->type=="friend class" || root->type=="friend struct" || root->type=="friend union") { cd=getClass(scope); @@ -2913,7 +2918,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) } } goto nextMember; - /* skip this member, because it is a + /* skip this member, because it is a * static variable definition (always?), which will be * found in a class scope as well, but then we know the * correct protection level, so only then it will be @@ -2921,9 +2926,9 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) */ } - if (type=="@") + if (type=="@") mtype=MemberType_EnumValue; - else if (type.left(8)=="typedef ") + else if (type.left(8)=="typedef ") mtype=MemberType_Typedef; else if (type.left(7)=="friend ") mtype=MemberType_Friend; @@ -2940,17 +2945,17 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) isMemberOf=(root->relatesType == MemberOf); if (getClass(root->relates)==0 && !scope.isEmpty()) scope=mergeScopes(scope,root->relates); - else + else scope=root->relates; } - + cd=getClass(scope); if (cd==0 && classScope!=scope) cd=getClass(classScope); if (cd) { MemberDef *md=0; - // if cd is an anonymous (=tag less) scope we insert the member + // if cd is an anonymous (=tag less) scope we insert the member // into a non-anonymous parent scope as well. This is needed to // be able to refer to it using \var or \fn @@ -2958,8 +2963,8 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) int si=scope.find('@'); //int anonyScopes = 0; //bool added=FALSE; - - static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS"); + + static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS); if (si!=-1 && !inlineSimpleStructs) // anonymous scope or type { QCString pScope; @@ -2988,7 +2993,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) { if (mtype==MemberType_Variable) { - md=addVariableToFile(rootNav,mtype,pScope,name,TRUE,0); + md=addVariableToFile(rootNav,mtype,pScope,name,TRUE,0); } //added=TRUE; } @@ -3004,7 +3009,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) name, // name of the member FALSE, // from anonymous scope md, // from anonymous member - root->protection, + root->protection, isMemberOf ? Foreign : isRelated ? Related : Member); } else if (!name.isEmpty()) // global variable @@ -3026,7 +3031,7 @@ static void buildTypedefList(EntryNav *rootNav) if (!rootNav->name().isEmpty() && rootNav->section()==Entry::VARIABLE_SEC && rootNav->type().find("typedef ")!=-1 // its a typedef - ) + ) { addVariable(rootNav); } @@ -3036,7 +3041,7 @@ static void buildTypedefList(EntryNav *rootNav) EntryNav *e; for (;(e=eli.current());++eli) { - if (e->section()!=Entry::ENUM_SEC) + if (e->section()!=Entry::ENUM_SEC) { buildTypedefList(e); } @@ -3057,13 +3062,13 @@ static void buildVarList(EntryNav *rootNav) ( (rootNav->section()==Entry::VARIABLE_SEC // it's a variable ) || - (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable + (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable (isFuncPtr=findFunctionPtr(rootNav->type(),rootNav->lang()))!=-1 ) || (rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor isVarWithConstructor(rootNav) ) - ) + ) ) // documented variable { addVariable(rootNav,isFuncPtr); @@ -3074,7 +3079,7 @@ static void buildVarList(EntryNav *rootNav) EntryNav *e; for (;(e=eli.current());++eli) { - if (e->section()!=Entry::ENUM_SEC) + if (e->section()!=Entry::ENUM_SEC) { buildVarList(e); } @@ -3271,7 +3276,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, if ((fd==0 || fd->getLanguage()==SrcLangExt_Cpp) && name.left(9)!="operator " && (i=name.find('<'))!=-1 && name.find('>')!=-1) { - name=name.left(i); + name=name.left(i); } QCString fileName = root->fileName; @@ -3280,7 +3285,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, fileName = rootNav->tagInfo()->tagName; } - //printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n", + //printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n", // root->name.data(),root->args.data(),argListToString(root->argList).data() // ); @@ -3322,7 +3327,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, // for PHP we use Class::method and Namespace\method scopeSeparator="::"; } - if (!root->relates.isEmpty() || isFriend || Config_getBool("HIDE_SCOPE_NAMES")) + if (!root->relates.isEmpty() || isFriend || Config_getBool(HIDE_SCOPE_NAMES)) { if (!root->type.isEmpty()) { @@ -3459,7 +3464,7 @@ static void buildFunctionList(EntryNav *rootNav) if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A { // strip scope from name - rname=rname.right(rname.length()-rootNav->parent()->name().length()-2); + rname=rname.right(rname.length()-rootNav->parent()->name().length()-2); } NamespaceDef *nd = 0; @@ -3470,7 +3475,7 @@ static void buildFunctionList(EntryNav *rootNav) int te=rname.find('>'); if (memIndex>0 && (ts==-1 || te==-1)) { - // note: the following code was replaced by inMember=TRUE to deal with a + // note: the following code was replaced by inMember=TRUE to deal with a // function rname='X::foo' of class X inside a namespace also called X... // bug id 548175 //nd = Doxygen::namespaceSDict->find(rname.left(memIndex)); @@ -3494,11 +3499,11 @@ static void buildFunctionList(EntryNav *rootNav) int te=root->type.findRev('>'); int ti; if (!rootNav->parent()->name().isEmpty() && - (rootNav->parent()->section() & Entry::COMPOUND_MASK) && + (rootNav->parent()->section() & Entry::COMPOUND_MASK) && cd && - // do some fuzzy things to exclude function pointers - (root->type.isEmpty() || - ((ti=root->type.find(re,0))==-1 || // type does not contain ..(..* + // do some fuzzy things to exclude function pointers + (root->type.isEmpty() || + ((ti=root->type.find(re,0))==-1 || // type does not contain ..(..* (ts!=-1 && ts<te && ts<ti && ti<te) || // outside of < ... > root->args.find(")[")!=-1) || // and args not )[.. -> function pointer root->type.find(")(")!=-1 || root->type.find("operator")!=-1 || // type contains ..)(.. and not "operator" @@ -3510,14 +3515,14 @@ static void buildFunctionList(EntryNav *rootNav) qPrint(rname),qPrint(cd->name())); addMethodToClass(rootNav,cd,rname,isFriend); } - else if (!((rootNav->parent()->section() & Entry::COMPOUND_MASK) + else if (!((rootNav->parent()->section() & Entry::COMPOUND_MASK) || rootNav->parent()->section()==Entry::OBJCIMPL_SEC ) && !isMember && (root->relates.isEmpty() || root->relatesType == Duplicate) && - root->type.left(7)!="extern " && root->type.left(8)!="typedef " + root->type.left(7)!="extern " && root->type.left(8)!="typedef " ) - // no member => unrelated function + // no member => unrelated function { /* check the uniqueness of the function name in the file. * A file could contain a function prototype and a function definition @@ -3569,14 +3574,14 @@ static void buildFunctionList(EntryNav *rootNav) } } - bool staticsInDifferentFiles = + bool staticsInDifferentFiles = root->stat && md->isStatic() && root->fileName!=md->getDefFileName(); if ( matchArguments2(md->getOuterScope(),mfd,mdAl, rnd ? rnd : Doxygen::globalScope,rfd,root->argList, FALSE) && - sameNumTemplateArgs && + sameNumTemplateArgs && matchingReturnTypes && !staticsInDifferentFiles ) @@ -3762,7 +3767,7 @@ static void buildFunctionList(EntryNav *rootNav) md->setDefinition(def); md->enableCallGraph(root->callGraph); md->enableCallerGraph(root->callerGraph); - //if (root->mGrpId!=-1) + //if (root->mGrpId!=-1) //{ // md->setMemberGroup(memberGroupDict[root->mGrpId]); //} @@ -3772,13 +3777,13 @@ static void buildFunctionList(EntryNav *rootNav) { // add member to namespace md->setNamespace(nd); - nd->insertMember(md); + nd->insertMember(md); } if (fd) { // add member to the file (we do this even if we have already // inserted it into the namespace) - md->setFileDef(fd); + md->setFileDef(fd); fd->insertMember(md); } @@ -3789,7 +3794,7 @@ static void buildFunctionList(EntryNav *rootNav) { mn->append(md); } - else + else { mn = new MemberName(name); mn->append(md); @@ -3799,7 +3804,7 @@ static void buildFunctionList(EntryNav *rootNav) if (root->relatesType == Simple) // if this is a relatesalso command, // allow find Member to pick it up { - rootNav->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished + rootNav->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished // with this entry. } @@ -3857,7 +3862,7 @@ static void findFriends() MemberDef *mmd; for (;(mmd=mni.current());++mni) // for each member with that name { - //printf("Checking for matching arguments + //printf("Checking for matching arguments // mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n", // mmd->isRelated(),mmd->isFriend(),mmd->isFunction()); ArgumentList *mmdAl = mmd->argumentList(); @@ -3867,8 +3872,8 @@ static void findFriends() fmd->getOuterScope(), fmd->getFileDef(), fmdAl, TRUE ) - - ) // if the member is related and the arguments match then the + + ) // if the member is related and the arguments match then the // function is actually a friend. { mergeArguments(mmdAl,fmdAl); @@ -3940,7 +3945,7 @@ static void transferFunctionDocumentation() for (;(mdec=mni1.current());++mni1) { if (mdec->isPrototype() || - (mdec->isVariable() && mdec->isExternal()) + (mdec->isVariable() && mdec->isExternal()) ) { MemberNameIterator mni2(*mn); @@ -3966,12 +3971,12 @@ static void transferFunctionReferences() /* find a matching function declaration and definition for this function */ for (;(md=mni.current());++mni) { - if (md->isPrototype()) + if (md->isPrototype()) mdec=md; - else if (md->isVariable() && md->isExternal()) + else if (md->isVariable() && md->isExternal()) mdec=md; - - if (md->isFunction() && !md->isStatic() && !md->isPrototype()) + + if (md->isFunction() && !md->isStatic() && !md->isPrototype()) mdef=md; else if (md->isVariable() && !md->isExternal() && !md->isStatic()) mdef=md; @@ -4049,7 +4054,7 @@ static void transferFunctionReferences() static void transferRelatedFunctionDocumentation() { - // find match between function declaration and definition for + // find match between function declaration and definition for // related functions MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); MemberName *mn; @@ -4086,9 +4091,9 @@ static void transferRelatedFunctionDocumentation() md->makeForeign(); else md->makeRelated(); - } + } } - } + } } } } @@ -4096,8 +4101,8 @@ static void transferRelatedFunctionDocumentation() //---------------------------------------------------------------------- /*! make a dictionary of all template arguments of class cd - * that are part of the base class name. - * Example: A template class A with template arguments <R,S,T> + * that are part of the base class name. + * Example: A template class A with template arguments <R,S,T> * that inherits from B<T,T,S> will have T and S in the dictionary. */ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,const QCString &name) @@ -4289,11 +4294,11 @@ static void findUsedClassesForClass(EntryNav *rootNav, //printf("Looking for used class %s: result=%s master=%s\n", // usedName.data(),usedCd?usedCd->name().data():"<none>",masterCd?masterCd->name().data():"<none>"); - if (usedCd) + if (usedCd) { found=TRUE; Debug::print(Debug::Classes,0," Adding used class `%s' (2)\n", qPrint(usedCd->name())); - instanceCd->addUsedClass(usedCd,md->name(),md->protection()); // class exists + instanceCd->addUsedClass(usedCd,md->name(),md->protection()); // class exists usedCd->addUsedByClass(instanceCd,md->name(),md->protection()); } } @@ -4306,7 +4311,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, if (!found && !type.isEmpty()) // used class is not documented in any scope { ClassDef *usedCd = Doxygen::hiddenClasses->find(type); - if (usedCd==0 && !Config_getBool("HIDE_UNDOC_RELATIONS")) + if (usedCd==0 && !Config_getBool(HIDE_UNDOC_RELATIONS)) { if (type.right(2)=="(*" || type.right(2)=="(^") // type is a function pointer { @@ -4325,7 +4330,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, { if (isArtificial) usedCd->setArtificial(TRUE); Debug::print(Debug::Classes,0," Adding used class `%s' (3)\n", qPrint(usedCd->name())); - instanceCd->addUsedClass(usedCd,md->name(),md->protection()); + instanceCd->addUsedClass(usedCd,md->name(),md->protection()); usedCd->addUsedByClass(instanceCd,md->name(),md->protection()); } } @@ -4381,8 +4386,8 @@ static void findBaseClassesForClass( { // 1.8.2: decided to show inheritance relations even if not documented, // we do make them artificial, so they do not appear in the index - //if (!Config_getBool("HIDE_UNDOC_RELATIONS")) - bool b = Config_getBool("HIDE_UNDOC_RELATIONS") ? TRUE : isArtificial; + //if (!Config_getBool(HIDE_UNDOC_RELATIONS)) + bool b = Config_getBool(HIDE_UNDOC_RELATIONS) ? TRUE : isArtificial; //{ // no documented base class -> try to find an undocumented one findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,Undocumented,b); @@ -4397,7 +4402,7 @@ static void findBaseClassesForClass( { delete templateNames; templateNames=0; - } + } } } @@ -4423,7 +4428,7 @@ static bool findTemplateInstanceRelation(Entry *root, // } //} //printf("\n"); - + bool existingClass = (templSpec == tempArgListToString(templateClass->templateArguments(),root->lang) ); @@ -4441,8 +4446,8 @@ static bool findTemplateInstanceRelation(Entry *root, Doxygen::classSDict->append(instanceClass->name(),instanceClass); instanceClass->setTemplateBaseClassNames(templateNames); - // search for new template instances caused by base classes of - // instanceClass + // search for new template instances caused by base classes of + // instanceClass EntryNav *templateRootNav = g_classEntries.find(templateClass->name()); if (templateRootNav) { @@ -4504,7 +4509,7 @@ static bool isRecursiveBaseClass(const QCString &scope,const QCString &name) * character position \a startPos. If the end was found the position * of the closing \> is returned, otherwise -1 is returned. * - * Handles exotic cases such as + * Handles exotic cases such as * \code * Class<(id<0)> * Class<bits<<2> @@ -4528,11 +4533,11 @@ static int findEndOfTemplate(const QCString &s,int startPos) char c=s.at(e); switch(c) { - case '<': + case '<': if (!insideString && !insideChar) { - if (e<len-1 && s.at(e+1)=='<') - e++; + if (e<len-1 && s.at(e+1)=='<') + e++; else if (roundCount==0) brCount++; } @@ -4540,24 +4545,24 @@ static int findEndOfTemplate(const QCString &s,int startPos) case '>': if (!insideString && !insideChar) { - if (e<len-1 && s.at(e+1)=='>') - e++; + if (e<len-1 && s.at(e+1)=='>') + e++; else if (roundCount==0) brCount--; } break; case '(': - if (!insideString && !insideChar) + if (!insideString && !insideChar) roundCount++; break; case ')': - if (!insideString && !insideChar) + if (!insideString && !insideChar) roundCount--; break; case '"': if (!insideChar) { - if (insideString && pc!='\\') + if (insideString && pc!='\\') insideString=FALSE; else insideString=TRUE; @@ -4615,7 +4620,7 @@ static bool findClassRelation( EntryNav *parentNode=rootNav->parent(); bool lastParent=FALSE; - do // for each parent scope, starting with the largest scope + do // for each parent scope, starting with the largest scope // (in case of nested classes) { QCString scopeName= parentNode ? parentNode->name().data() : ""; @@ -4637,7 +4642,7 @@ static bool findClassRelation( MemberDef *baseClassTypeDef=0; QCString templSpec; ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context, - cd->getFileDef(), + cd->getFileDef(), baseClassName, &baseClassTypeDef, &templSpec, @@ -4683,7 +4688,7 @@ static bool findClassRelation( baseClass = Doxygen::genericsDict->find(baseClassName.left(i)); //printf("looking for '%s' result=%p\n",baseClassName.data(),baseClass); } - if (baseClass==0 && i!=-1) + if (baseClass==0 && i!=-1) // base class has template specifiers { // TODO: here we should try to find the correct template specialization @@ -4783,11 +4788,11 @@ static bool findClassRelation( // if templSpec is not empty then we should "instantiate" // the template baseClass. A new ClassDef should be created // to represent the instance. To be able to add the (instantiated) - // members and documentation of a template class - // (inserted in that template class at a later stage), - // the template should know about its instances. - // the instantiation process, should be done in a recursive way, - // since instantiating a template may introduce new inheritance + // members and documentation of a template class + // (inserted in that template class at a later stage), + // the template should know about its instances. + // the instantiation process, should be done in a recursive way, + // since instantiating a template may introduce new inheritance // relations. if (!templSpec.isEmpty() && mode==TemplateInstances) { @@ -4805,12 +4810,12 @@ static bool findClassRelation( { //printf(" => insert base class\n"); QCString usedName; - if (baseClassTypeDef || cd->isCSharp()) + if (baseClassTypeDef || cd->isCSharp()) { usedName=biName; //printf("***** usedName=%s templSpec=%s\n",usedName.data(),templSpec.data()); } - static bool sipSupport = Config_getBool("SIP_SUPPORT"); + static bool sipSupport = Config_getBool(SIP_SUPPORT); if (sipSupport) bi->prot=Public; if (!cd->isSubClass(baseClass)) // check for recursion, see bug690787 { @@ -4906,7 +4911,7 @@ static bool findClassRelation( ); } // for mode==TemplateInstance this case is quite common and - // indicates a relation between a template class and a template + // indicates a relation between a template class and a template // instance with the same name. } if (scopeOffset==0) @@ -4945,13 +4950,13 @@ static bool isClassSection(EntryNav *rootNav) { return TRUE; } - else if (rootNav->section() & Entry::COMPOUNDDOC_MASK) + else if (rootNav->section() & Entry::COMPOUNDDOC_MASK) // is it a documentation block with inheritance info. { rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); bool extends = root->extends->count()>0; - rootNav->releaseEntry(); + rootNav->releaseEntry(); if (extends) return TRUE; } } @@ -4986,7 +4991,7 @@ static QCString extractClassName(EntryNav *rootNav) return bName; } -/*! Using the dictionary build by findClassEntries(), this +/*! Using the dictionary build by findClassEntries(), this * function will look for additional template specialization that * exists as inheritance relations only. These instances will be * added to the template they are derived from. @@ -5056,10 +5061,10 @@ static void computeClassRelations() bName.right(2)!="::") { if (!root->name.isEmpty() && root->name.find('@')==-1 && // normal name - (guessSection(root->fileName)==Entry::HEADER_SEC || - Config_getBool("EXTRACT_LOCAL_CLASSES")) && // not defined in source file + (guessSection(root->fileName)==Entry::HEADER_SEC || + Config_getBool(EXTRACT_LOCAL_CLASSES)) && // not defined in source file protectionLevelVisible(root->protection) && // hidden by protection - !Config_getBool("HIDE_UNDOC_CLASSES") // undocumented class are visible + !Config_getBool(HIDE_UNDOC_CLASSES) // undocumented class are visible ) warn_undoc( root->fileName,root->startLine, @@ -5084,7 +5089,7 @@ static void computeTemplateClassRelations() QCString bName=stripAnonymousNamespaceScope(root->name); bName=stripTemplateSpecifiersFromScope(bName); ClassDef *cd=getClass(bName); - // strip any anonymous scopes first + // strip any anonymous scopes first QDict<ClassDef> *templInstances = 0; if (cd && (templInstances=cd->getTemplateInstances())) { @@ -5118,7 +5123,7 @@ static void computeTemplateClassRelations() { int templIndex = *qdi.current(); Argument *actArg = 0; - if (templIndex<(int)templArgs->count()) + if (templIndex<(int)templArgs->count()) { actArg=templArgs->at(templIndex); } @@ -5132,7 +5137,7 @@ static void computeTemplateClassRelations() } } delete templateNames; - + tbi.name = substituteTemplateArgumentsInString(bi->name,tl,templArgs); // find a documented base class in the correct scope if (!findClassRelation(rootNav,cd,tcd,&tbi,actualTemplateNames,DocumentedOnly,FALSE)) @@ -5295,8 +5300,8 @@ static void generateXRefPages() //---------------------------------------------------------------------- // Copy the documentation in entry `root' to member definition `md' and -// set the function declaration of the member to `funcDecl'. If the boolean -// over_load is set the standard overload text is added. +// set the function declaration of the member to `funcDecl'. If the boolean +// over_load is set the standard overload text is added. static void addMemberDocs(EntryNav *rootNav, MemberDef *md, const char *funcDecl, @@ -5317,9 +5322,9 @@ static void addMemberDocs(EntryNav *rootNav, ClassDef *cd=md->getClassDef(); NamespaceDef *nd=md->getNamespaceDef(); QCString fullName; - if (cd) + if (cd) fullName = cd->name(); - else if (nd) + else if (nd) fullName = nd->name(); if (!fullName.isEmpty()) fullName+="::"; @@ -5337,12 +5342,12 @@ static void addMemberDocs(EntryNav *rootNav, } else { - if ( + if ( matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl, rscope,rfd,root->argList, TRUE ) - ) + ) { //printf("merging arguments (2)\n"); mergeArguments(mdAl,root->argList,!root->doc.isEmpty()); @@ -5356,11 +5361,11 @@ static void addMemberDocs(EntryNav *rootNav, doc+="<p>"; doc+=root->doc; } - md->setDocumentation(doc,root->docFile,root->docLine); + md->setDocumentation(doc,root->docFile,root->docLine); md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine); md->setDocsForDefinition(!root->proto); } - else + else { //printf("overwrite!\n"); md->setDocumentation(root->doc,root->docFile,root->docLine); @@ -5393,7 +5398,7 @@ static void addMemberDocs(EntryNav *rootNav, if (rfd) { - if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) + if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) ) { //printf("Setting new body segment [%d,%d]\n",root->bodyLine,root->endBodyLine); @@ -5435,7 +5440,7 @@ static void addMemberDocs(EntryNav *rootNav, } //---------------------------------------------------------------------- -// find a class definition given the scope name and (optionally) a +// find a class definition given the scope name and (optionally) a // template list specifier static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd, @@ -5451,12 +5456,12 @@ static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd, // with name `name' and argument list `args' (for overloading) and // function declaration `decl' to the corresponding member definition. -static bool findGlobalMember(EntryNav *rootNav, +static bool findGlobalMember(EntryNav *rootNav, const QCString &namespaceName, const char *type, - const char *name, + const char *name, const char *tempArg, - const char *, + const char *, const char *decl) { Entry *root = rootNav->entry(); @@ -5491,14 +5496,14 @@ static bool findGlobalMember(EntryNav *rootNav, //SDict<Definition> *cl = fd ? fd->getUsedClasses() : 0; //printf("NamespaceList %p\n",nl); - // search in the list of namespaces that are imported via a + // search in the list of namespaces that are imported via a // using declaration bool viaUsingDirective = nl && nd && nl->find(nd->qualifiedName())!=0; if ((namespaceName.isEmpty() && nd==0) || // not in a namespace - (nd && nd->name()==namespaceName) || // or in the same namespace + (nd && nd->name()==namespaceName) || // or in the same namespace viaUsingDirective // member in `using' namespace - ) + ) { Debug::print(Debug::FindMembers,0,"4. Try to add member `%s' to scope `%s'\n", qPrint(md->name()),qPrint(namespaceName)); @@ -5533,12 +5538,12 @@ static bool findGlobalMember(EntryNav *rootNav, // argListToString(md->argumentList()).data(), // argListToString(root->argList).data()); - // for static members we also check if the comment block was found in + // for static members we also check if the comment block was found in // the same file. This is needed because static members with the same // name can be in different files. Thus it would be wrong to just // put the comment block at the first syntactically matching member. - if (matching && md->isStatic() && - md->getDefFileName()!=root->fileName && + if (matching && md->isStatic() && + md->getDefFileName()!=root->fileName && mn->count()>1) { matching = FALSE; @@ -5564,7 +5569,7 @@ static bool findGlobalMember(EntryNav *rootNav, found=TRUE; } } - } + } if (!found && root->relatesType != Duplicate && root->section==Entry::FUNCTION_SEC) // no match { QCString fullFuncDecl=decl; @@ -5587,10 +5592,10 @@ static bool findGlobalMember(EntryNav *rootNav, } else // got docs for an undefined member! { - if (root->type!="friend class" && + if (root->type!="friend class" && root->type!="friend struct" && root->type!="friend union" && - (!Config_getBool("TYPEDEF_HIDES_STRUCT") || + (!Config_getBool(TYPEDEF_HIDES_STRUCT) || root->type.find("typedef ")==-1) ) { @@ -5638,7 +5643,7 @@ static QCString substituteTemplatesInString( QCString dst; QRegExp re( "[A-Za-z_][A-Za-z_0-9]*"); //printf("type=%s\n",sa->type.data()); - int i,p=0,l; + int i,p=0,l; while ((i=re.match(src,p,&l))!=-1) // for each word in srcType { bool found=FALSE; @@ -5701,7 +5706,7 @@ static QCString substituteTemplatesInString( // argListToString(dstlali.current()).data(), // funcTempArgList ? argListToString(funcTempArgList).data() : "<none>"); } - dst+=name; + dst+=name; p=i+l; } dst+=src.right(src.length()-p); @@ -5760,7 +5765,7 @@ static void substituteTemplatesInArgList( -/*! This function tries to find a member (in a documented class/file/namespace) +/*! This function tries to find a member (in a documented class/file/namespace) * that corresponds to the function/variable declaration given in \a funcDecl. * * The boolean \a overloaded is used to specify whether or not a standard @@ -5834,10 +5839,10 @@ static void findMember(EntryNav *rootNav, { funcDecl=(funcDecl.left(sep)+funcDecl.right(funcDecl.length()-sep-1)).stripWhiteSpace(); } - + // make sure the first character is a space to simplify searching. if (!funcDecl.isEmpty() && funcDecl[0]!=' ') funcDecl.prepend(" "); - + // remove some superfluous spaces funcDecl= substitute( substitute( @@ -5846,7 +5851,7 @@ static void findMember(EntryNav *rootNav, ), " ::","::" ).stripWhiteSpace(); - + //printf("funcDecl=`%s'\n",funcDecl.data()); if (isFriend && funcDecl.left(6)=="class ") { @@ -5875,7 +5880,7 @@ static void findMember(EntryNav *rootNav, // related field. //printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n", // scopeName.data(),className.data(),namespaceName.data()); - if (!root->relates.isEmpty()) + if (!root->relates.isEmpty()) { // related member, prefix user specified scope isRelated=TRUE; isMemberOf=(root->relatesType == MemberOf); @@ -5883,21 +5888,21 @@ static void findMember(EntryNav *rootNav, { scopeName= mergeScopes(scopeName,root->relates); } - else + else { scopeName = root->relates; } } - if (root->relates.isEmpty() && rootNav->parent() && + if (root->relates.isEmpty() && rootNav->parent() && ((rootNav->parent()->section()&Entry::SCOPE_MASK) || (rootNav->parent()->section()==Entry::OBJCIMPL_SEC) ) && - !rootNav->parent()->name().isEmpty()) // see if we can combine scopeName + !rootNav->parent()->name().isEmpty()) // see if we can combine scopeName // with the scope in which it was found { QCString joinedName = rootNav->parent()->name()+"::"+scopeName; - if (!scopeName.isEmpty() && + if (!scopeName.isEmpty() && (getClass(joinedName) || Doxygen::namespaceSDict->find(joinedName))) { scopeName = joinedName; @@ -5931,27 +5936,27 @@ static void findMember(EntryNav *rootNav, } } scopeName=stripTemplateSpecifiersFromScope( - removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec); + removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec); // funcSpec contains the last template specifiers of the given scope. - // If this method does not have any template arguments or they are - // empty while funcSpec is not empty we assume this is a + // If this method does not have any template arguments or they are + // empty while funcSpec is not empty we assume this is a // specialization of a method. If not, we clear the funcSpec and treat // this as a normal method of a template class. - if (!(root->tArgLists && + if (!(root->tArgLists && root->tArgLists->count()>0 && root->tArgLists->getFirst()->count()==0 ) - ) + ) { funcSpec.resize(0); } - + // split scope into a namespace and a class part extractNamespaceName(scopeName,className,namespaceName,TRUE); //printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n", // scopeName.data(),className.data(),namespaceName.data()); - + //namespaceName=removeAnonymousScopes(namespaceName); if (namespaceName.find('@')!=-1) return; // skip stuff in anonymous namespace... @@ -5999,7 +6004,7 @@ static void findMember(EntryNav *rootNav, //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data()); // rebuild the function declaration (needed to get the scope right). - if (!scopeName.isEmpty() && !isRelated && !isFriend && !Config_getBool("HIDE_SCOPE_NAMES")) + if (!scopeName.isEmpty() && !isRelated && !isFriend && !Config_getBool(HIDE_SCOPE_NAMES)) { if (!funcType.isEmpty()) { @@ -6049,10 +6054,10 @@ static void findMember(EntryNav *rootNav, } } } - + if (funcType=="template class" && !funcTempList.isEmpty()) return; // ignore explicit template instantiations - + Debug::print(Debug::FindMembers,0, "findMember() Parse results:\n" " namespaceName=`%s'\n" @@ -6063,7 +6068,7 @@ static void findMember(EntryNav *rootNav, " funcArgs=`%s'\n" " funcTempList=`%s'\n" " funcDecl=`%s'\n" - " related=`%s'\n" + " related=`%s'\n" " exceptions=`%s'\n" " isRelated=%d\n" " isMemberOf=%d\n" @@ -6077,7 +6082,7 @@ static void findMember(EntryNav *rootNav, MemberName *mn=0; if (!funcName.isEmpty()) // function name is valid - { + { Debug::print(Debug::FindMembers,0, "1. funcName=`%s'\n",funcName.data()); if (funcName.left(9)=="operator ") // strip class scope from cast operator @@ -6153,8 +6158,8 @@ static void findMember(EntryNav *rootNav, bool substDone=FALSE; ArgumentList *argList=0; - /* substitute the occurrences of class template names in the - * argument list before matching + /* substitute the occurrences of class template names in the + * argument list before matching */ ArgumentList *mdAl = md->argumentList(); if (declTemplArgs.count()>0 && defTemplArgs && @@ -6186,9 +6191,9 @@ static void findMember(EntryNav *rootNav, bool matching= md->isVariable() || md->isTypedef() || // needed for function pointers - (mdAl==0 && root->argList->count()==0) || + (mdAl==0 && root->argList->count()==0) || matchArguments2( - md->getClassDef(),md->getFileDef(),argList, + md->getClassDef(),md->getFileDef(),argList, cd,fd,root->argList, TRUE); @@ -6246,15 +6251,15 @@ static void findMember(EntryNav *rootNav, md->setDefinitionTemplateParameterLists(root->tArgLists); md->setArgumentList(argList); // new owner of the list => no delete } - else // no match + else // no match { - if (!funcTempList.isEmpty() && + if (!funcTempList.isEmpty() && isSpecialization(declTemplArgs,*defTemplArgs)) { // check if we are dealing with a partial template // specialization. In this case we add it to the class // even though the member arguments do not match. - + // TODO: copy other aspects? root->protection=md->protection(); // copy protection level addMethodToClass(rootNav,cd,md->name(),isFriend); @@ -6263,20 +6268,20 @@ static void findMember(EntryNav *rootNav, delete argList; } } - if (matching) + if (matching) { addMemberDocs(rootNav,md,funcDecl,0,overloaded,0/* TODO */); count++; memFound=TRUE; } - } + } else if (cd && cd!=tcd) // we did find a class with the same name as cd // but in a different namespace { noMatchCount++; } - } - if (count==0 && rootNav->parent() && + } + if (count==0 && rootNav->parent() && rootNav->parent()->section()==Entry::OBJCIMPL_SEC) { goto localObjCMethod; @@ -6294,12 +6299,12 @@ static void findMember(EntryNav *rootNav, ClassDef *ccd=md->getClassDef(); MemberDef *cmd=md; //printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data()); - if (ccd!=0 && rightScopeMatch(ccd->name(),className)) + if (ccd!=0 && rightScopeMatch(ccd->name(),className)) { ArgumentList *templAl = md->templateArguments(); if (root->tArgLists && templAl!=0 && root->tArgLists->getLast()->count()<=templAl->count()) - { + { addMethodToClass(rootNav,ccd,md->name(),isFriend); return; } @@ -6323,19 +6328,19 @@ static void findMember(EntryNav *rootNav, } } } - static bool strictProtoMatching = Config_getBool("STRICT_PROTO_MATCHING"); + static bool strictProtoMatching = Config_getBool(STRICT_PROTO_MATCHING); if (!strictProtoMatching) { if (candidates==1 && ucd && umd) { // we didn't find an actual match on argument lists, but there is only 1 member with this - // name in the same scope, so that has to be the one. + // name in the same scope, so that has to be the one. addMemberDocs(rootNav,umd,funcDecl,0,overloaded,0); return; } else if (candidates>1 && ecd && emd) { - // we didn't find a unique match using type resolution, + // we didn't find a unique match using type resolution, // but one of the matches has the exact same signature so // we take that one. addMemberDocs(rootNav,emd,funcDecl,0,overloaded,0); @@ -6381,17 +6386,17 @@ static void findMember(EntryNav *rootNav, warnMsg+='\n'; } warnMsg+=" "; - if (md->typeString()) + if (md->typeString()) { warnMsg+=md->typeString(); warnMsg+=' '; } QCString qScope = cd->qualifiedNameWithTemplateParameters(); - if (!qScope.isEmpty()) + if (!qScope.isEmpty()) warnMsg+=qScope+"::"+md->name(); - if (md->argsString()) + if (md->argsString()) warnMsg+=md->argsString(); - if (noMatchCount>1) + if (noMatchCount>1) { warnMsg+="' at line "+QCString().setNum(md->getDefLine()) + " of file "+md->getDefFileName(); @@ -6411,7 +6416,7 @@ static void findMember(EntryNav *rootNav, MemberDef *md=0; for (mni.toFirst();(md=mni.current());++mni) { - if (md->getClassDef()==cd) + if (md->getClassDef()==cd) { // TODO: we should probably also check for matching arguments declMd = md; @@ -6459,10 +6464,10 @@ static void findMember(EntryNav *rootNav, // scopeName.data(),funcName.data(),funcArgs.data()); } } - else if (overloaded) // check if the function belongs to only one class + else if (overloaded) // check if the function belongs to only one class { // for unique overloaded member we allow the class to be - // omitted, this is to be Qt compatible. Using this should + // omitted, this is to be Qt compatible. Using this should // however be avoided, because it is error prone MemberNameIterator mni(*mn); MemberDef *md=mni.toFirst(); @@ -6475,8 +6480,8 @@ static void findMember(EntryNav *rootNav, for (;(md=mni.current());++mni) { ClassDef *cd=md->getClassDef(); - if (className!=cd->name()) unique=FALSE; - } + if (className!=cd->name()) unique=FALSE; + } if (unique) { MemberType mtype; @@ -6484,9 +6489,9 @@ static void findMember(EntryNav *rootNav, else if (root->mtype==Slot) mtype=MemberType_Slot; else if (root->mtype==DCOP) mtype=MemberType_DCOP; else mtype=MemberType_Function; - + // new overloaded member function - ArgumentList *tArgList = + ArgumentList *tArgList = getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists); //printf("new related member %s args=`%s'\n",md->name().data(),funcArgs.data()); MemberDef *md=new MemberDef( @@ -6531,7 +6536,7 @@ static void findMember(EntryNav *rootNav, warn(root->fileName,root->startLine, "Cannot determine class for function\n%s", fullFuncDecl.data() - ); + ); } } } @@ -6545,7 +6550,7 @@ static void findMember(EntryNav *rootNav, if ((cd=getClass(scopeName))) { bool newMember=TRUE; // assume we have a new member - bool newMemberName=FALSE; + bool newMemberName=FALSE; MemberDef *mdDefine=0; bool isDefine=FALSE; { @@ -6597,9 +6602,9 @@ static void findMember(EntryNav *rootNav, MemberType mtype; if (isDefine) mtype=MemberType_Define; - else if (root->mtype==Signal) + else if (root->mtype==Signal) mtype=MemberType_Signal; - else if (root->mtype==Slot) + else if (root->mtype==Slot) mtype=MemberType_Slot; else if (root->mtype==DCOP) mtype=MemberType_DCOP; @@ -6612,7 +6617,7 @@ static void findMember(EntryNav *rootNav, funcType="#define"; funcArgs=mdDefine->argsString(); funcDecl=funcType + " " + funcName; - } + } //printf("New related name `%s' `%d'\n",funcName.data(), // root->argList ? (int)root->argList->count() : -1); @@ -6638,7 +6643,7 @@ static void findMember(EntryNav *rootNav, md->setInitializer(mdDefine->initializer()); } - // + // // we still have the problem that // MemberDef::writeDocumentation() in memberdef.cpp // writes the template argument list for the class, @@ -6659,7 +6664,7 @@ static void findMember(EntryNav *rootNav, // funcName.data(),funcDecl.data(),root->bodyLine); // try to find the matching line number of the body from the - // global function list + // global function list bool found=FALSE; if (root->bodyLine==-1) { @@ -6697,7 +6702,7 @@ static void findMember(EntryNav *rootNav, md->setBodyDef(fd); } - //if (root->mGrpId!=-1) + //if (root->mGrpId!=-1) //{ // md->setMemberGroup(memberGroupDict[root->mGrpId]); //} @@ -6742,7 +6747,7 @@ static void findMember(EntryNav *rootNav, warn(root->fileName,root->startLine, "Cannot determine file/namespace for relatedalso function\n%s", fullFuncDecl.data() - ); + ); } } } @@ -6750,7 +6755,7 @@ static void findMember(EntryNav *rootNav, { warn_undoc(root->fileName,root->startLine, "class `%s' for related function `%s' is not " - "documented.", + "documented.", className.data(),funcName.data() ); } @@ -6760,7 +6765,7 @@ static void findMember(EntryNav *rootNav, localObjCMethod: ClassDef *cd; //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data()); - if (Config_getBool("EXTRACT_LOCAL_METHODS") && (cd=getClass(scopeName))) + if (Config_getBool(EXTRACT_LOCAL_METHODS) && (cd=getClass(scopeName))) { Debug::print(Debug::FindMembers,0,"4. Local objective C method %s\n" " scopeName=%s className=%s\n",qPrint(root->name),qPrint(scopeName),qPrint(className)); @@ -6796,7 +6801,7 @@ localObjCMethod: { mn->append(md); } - else + else { mn = new MemberName(root->name); mn->append(md); @@ -6816,7 +6821,7 @@ localObjCMethod: warn(root->fileName,root->startLine, "class for member `%s' cannot " "be found.", funcName.data() - ); + ); } else if (!className.isEmpty() && !globMem) { @@ -6833,7 +6838,7 @@ localObjCMethod: "member with no name found."); } return; -} +} //---------------------------------------------------------------------- // find the members corresponding to the different documentation blocks @@ -6859,7 +6864,7 @@ static void filterMemberDocumentation(EntryNav *rootNav) } if ( // detect func variable/typedef to func ptr - (i=findFunctionPtr(root->type,root->lang,&l))!=-1 + (i=findFunctionPtr(root->type,root->lang,&l))!=-1 ) { //printf("Fixing function pointer!\n"); @@ -6869,7 +6874,7 @@ static void filterMemberDocumentation(EntryNav *rootNav) //printf("Results type=%s,name=%s,args=%s\n",root->type.data(),root->name.data(),root->args.data()); isFunc=FALSE; } - else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1)) + else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1)) // detect function types marked as functions { isFunc=FALSE; @@ -6890,27 +6895,27 @@ static void filterMemberDocumentation(EntryNav *rootNav) findMember(rootNav,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc); } } - else if (root->section==Entry::OVERLOADDOC_SEC) + else if (root->section==Entry::OVERLOADDOC_SEC) { //printf("Overloaded member %s found\n",root->name.data()); findMember(rootNav,root->name,TRUE,isFunc); } - else if + else if ((root->section==Entry::FUNCTION_SEC // function - || + || (root->section==Entry::VARIABLE_SEC && // variable !root->type.isEmpty() && // with a type - g_compoundKeywordDict.find(root->type)==0 // that is not a keyword + g_compoundKeywordDict.find(root->type)==0 // that is not a keyword // (to skip forward declaration of class etc.) ) - ) + ) ) { //printf("Documentation for member `%s' found args=`%s' excp=`%s'\n", // root->name.data(),root->args.data(),root->exception.data()); //if (root->relates.length()) printf(" Relates %s\n",root->relates.data()); //printf("Inside=%s\n Relates=%s\n",root->inside.data(),root->relates.data()); - if (root->type=="friend class" || root->type=="friend struct" || + if (root->type=="friend class" || root->type=="friend struct" || root->type=="friend union") { findMember(rootNav, @@ -6956,7 +6961,7 @@ static void filterMemberDocumentation(EntryNav *rootNav) } else { - // skip section + // skip section //printf("skip section\n"); } } @@ -7066,13 +7071,13 @@ static void findEnums(EntryNav *rootNav) name=root->name; } - if (!root->relates.isEmpty()) + if (!root->relates.isEmpty()) { // related member, prefix user specified scope isRelated=TRUE; isMemberOf=(root->relatesType == MemberOf); if (getClass(root->relates)==0 && !scope.isEmpty()) scope=mergeScopes(scope,root->relates); - else + else scope=root->relates.copy(); if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope); } @@ -7133,13 +7138,13 @@ static void findEnums(EntryNav *rootNav) if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') { - if (isRelated || Config_getBool("HIDE_SCOPE_NAMES")) + if (isRelated || Config_getBool(HIDE_SCOPE_NAMES)) { - md->setDefinition(name+baseType); + md->setDefinition(name+baseType); } else { - md->setDefinition(nd->name()+"::"+name+baseType); + md->setDefinition(nd->name()+"::"+name+baseType); } //printf("definition=%s\n",md->definition()); defSet=TRUE; @@ -7157,7 +7162,7 @@ static void findEnums(EntryNav *rootNav) { fd=rootNav->parent()->fileDef(); } - if (fd) + if (fd) { md->setFileDef(fd); fd->insertMember(md); @@ -7165,13 +7170,13 @@ static void findEnums(EntryNav *rootNav) } else if (cd) { - if (isRelated || Config_getBool("HIDE_SCOPE_NAMES")) + if (isRelated || Config_getBool(HIDE_SCOPE_NAMES)) { - md->setDefinition(name+baseType); + md->setDefinition(name+baseType); } else { - md->setDefinition(cd->name()+"::"+name+baseType); + md->setDefinition(cd->name()+"::"+name+baseType); } cd->insertMember(md); cd->insertUsedFile(fd); @@ -7246,12 +7251,12 @@ static void addEnumValuesToEnums(EntryNav *rootNav) name=root->name; } - if (!root->relates.isEmpty()) + if (!root->relates.isEmpty()) { // related member, prefix user specified scope isRelated=TRUE; if (getClass(root->relates)==0 && !scope.isEmpty()) scope=mergeScopes(scope,root->relates); - else + else scope=root->relates.copy(); if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope); } @@ -7351,7 +7356,7 @@ static void addEnumValuesToEnums(EntryNav *rootNav) { mn->append(fmd); } - else + else { mn = new MemberName(root->name); mn->append(fmd); @@ -7365,12 +7370,12 @@ static void addEnumValuesToEnums(EntryNav *rootNav) //printf("e->name=%s isRelated=%d\n",e->name().data(),isRelated); MemberName *fmn=0; MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd; - if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()])) + if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()])) // get list of members with the same name as the field { MemberNameIterator fmni(*fmn); MemberDef *fmd; - for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni) + for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni) { if (fmd->isEnumValue() && fmd->getOuterScope()==md->getOuterScope()) // in same scope { @@ -7415,7 +7420,7 @@ static void addEnumValuesToEnums(EntryNav *rootNav) fmd->setEnumScope(md); // cross ref with enum name } } - } + } } } } @@ -7490,14 +7495,14 @@ static void findEnumDocumentation(EntryNav *rootNav) { // documentation outside a compound overrides the documentation inside it #if 0 - if (!md->documentation() || rootNav->parent()->name().isEmpty()) + if (!md->documentation() || rootNav->parent()->name().isEmpty()) #endif { md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocsForDefinition(!root->proto); } - // brief descriptions inside a compound override the documentation + // brief descriptions inside a compound override the documentation // outside it #if 0 if (!md->briefDescription() || !rootNav->parent()->name().isEmpty()) @@ -7534,7 +7539,7 @@ static void findEnumDocumentation(EntryNav *rootNav) //printf("MemberName %s not found!\n",name.data()); } } - else // enum outside class + else // enum outside class { //printf("Enum outside class: %s grpId=%d\n",name.data(),root->mGrpId); MemberName *mn=Doxygen::functionNameSDict->find(name); @@ -7563,7 +7568,7 @@ static void findEnumDocumentation(EntryNav *rootNav) } } } - } + } if (!found) { warn(root->fileName,root->startLine, @@ -7578,7 +7583,7 @@ static void findEnumDocumentation(EntryNav *rootNav) RECURSE_ENTRYTREE(findEnumDocumentation,rootNav); } -// search for each enum (member or function) in mnl if it has documented +// search for each enum (member or function) in mnl if it has documented // enum values. static void findDEV(const MemberNameSDict &mnsd) { @@ -7613,12 +7618,12 @@ static void findDEV(const MemberNameSDict &mnsd) } } -// search for each enum (member or function) if it has documented enum +// search for each enum (member or function) if it has documented enum // values. static void findDocumentedEnumValues() { findDEV(*Doxygen::memberNameSDict); - findDEV(*Doxygen::functionNameSDict); + findDEV(*Doxygen::functionNameSDict); } //---------------------------------------------------------------------- @@ -7687,12 +7692,12 @@ static void computeMemberRelations() // bmcd->name().data(),bmd->name().data(),bmd // ); if (md!=bmd && bmcd && mcd && bmcd!=mcd && - (bmd->virtualness()!=Normal || - bmcd->compoundType()==ClassDef::Interface || + (bmd->virtualness()!=Normal || + bmcd->compoundType()==ClassDef::Interface || bmcd->compoundType()==ClassDef::Protocol ) && - md->isFunction() && - mcd->isLinkable() && + md->isFunction() && + mcd->isLinkable() && bmcd->isLinkable() && mcd->isBaseClass(bmcd,TRUE)) { @@ -7703,11 +7708,11 @@ static void computeMemberRelations() // argListToString(bmdAl.pointer()).data(), // argListToString(mdAl.pointer()).data() // ); - if ( + if ( matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl, md->getOuterScope(), md->getFileDef(), mdAl, TRUE - ) + ) ) { MemberDef *rmd; @@ -7819,14 +7824,14 @@ static void generateFileSources() if (Doxygen::inputNameList->count()>0) { #if USE_LIBCLANG - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (clangAssistedParsing) { QDict<void> g_processedFiles(10007); // create a dictionary with files to process QDict<void> g_filesToProcess(10007); - FileNameListIterator fnli(*Doxygen::inputNameList); + FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (fnli.toFirst();(fn=fnli.current());++fnli) { @@ -7925,7 +7930,7 @@ static void generateFileSources() else #endif { - FileNameListIterator fnli(*Doxygen::inputNameList); + FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (;(fn=fnli.current());++fnli) { @@ -7959,7 +7964,7 @@ static void generateFileSources() static void generateFileDocs() { if (documentedHtmlFiles==0) return; - + if (Doxygen::inputNameList->count()>0) { FileNameListIterator fnli(*Doxygen::inputNameList); @@ -8007,7 +8012,7 @@ static void addSourceReferences() fd->addSourceRef(nd->getStartBodyLine(),nd,0); } } - + // add source references for member names MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict); MemberName *mn=0; @@ -8022,14 +8027,14 @@ static void addSourceReferences() // md->getBodyDef()?md->getBodyDef()->name().data():"<none>", // md->getStartBodyLine(),md->isLinkableInProject()); FileDef *fd=md->getBodyDef(); - if (fd && + if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() && (fd->generateSourceFile() || Doxygen::parseSourcesNeeded) ) { //printf("Found member `%s' in file `%s' at line `%d' def=%s\n", - // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data()); + // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data()); fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md); } } @@ -8047,16 +8052,16 @@ static void addSourceReferences() // md->getStartBodyLine(),md->getEndBodyLine(),fd, // md->isLinkableInProject(), // Doxygen::parseSourcesNeeded); - if (fd && - md->getStartBodyLine()!=-1 && - md->isLinkableInProject() && + if (fd && + md->getStartBodyLine()!=-1 && + md->isLinkableInProject() && (fd->generateSourceFile() || Doxygen::parseSourcesNeeded) ) { //printf("Found member `%s' in file `%s' at line `%d' def=%s\n", - // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data()); + // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data()); fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md); - } + } } } } @@ -8082,7 +8087,7 @@ static void sortMemberLists() } // sort file member lists - FileNameListIterator fnli(*Doxygen::inputNameList); + FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (;(fn=fnli.current());++fnli) { @@ -8105,14 +8110,14 @@ static void sortMemberLists() //---------------------------------------------------------------------------- // generate the documentation of all classes - + static void generateClassList(ClassSDict &classSDict) { ClassSDict::Iterator cli(classSDict); for ( ; cli.current() ; ++cli ) { ClassDef *cd=cli.current(); - + //printf("cd=%s getOuterScope=%p global=%p\n",cd->name().data(),cd->getOuterScope(),Doxygen::globalScope); if (cd && (cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file @@ -8158,7 +8163,7 @@ static void inheritDocumentation() if (md->documentation().isEmpty() && md->briefDescription().isEmpty()) { // no documentation yet MemberDef *bmd = md->reimplements(); - while (bmd && bmd->documentation().isEmpty() && + while (bmd && bmd->documentation().isEmpty() && bmd->briefDescription().isEmpty() ) { // search up the inheritance tree for a documentation member @@ -8219,7 +8224,7 @@ static void combineUsingRelations() } //---------------------------------------------------------------------------- - + static void addMembersToMemberGroup() { // for each class @@ -8398,9 +8403,9 @@ static void flushUnresolvedRelations() // Remove all unresolved references to classes from the cache. // This is needed before resolving the inheritance relations, since // it would otherwise not find the inheritance relation - // for C in the example below, as B::I was already found to be unresolvable + // for C in the example below, as B::I was already found to be unresolvable // (which is correct if you igore the inheritance relation between A and B). - // + // // class A { class I {} }; // class B : public A {}; // class C : public B::I {}; @@ -8449,7 +8454,7 @@ static void findDefineDocumentation(EntryNav *rootNav) { rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); - + //printf("found define `%s' `%s' brief=`%s' doc=`%s'\n", // root->name.data(),root->args.data(),root->brief.data(),root->doc.data()); @@ -8468,7 +8473,7 @@ static void findDefineDocumentation(EntryNav *rootNav) { mn->append(md); } - else + else { mn = new MemberName(root->name); mn->append(md); @@ -8522,7 +8527,7 @@ static void findDefineDocumentation(EntryNav *rootNav) if (md->memberType()==MemberType_Define) { FileDef *fd=md->getFileDef(); - if (fd && fd->absFilePath()==root->fileName) + if (fd && fd->absFilePath()==root->fileName) // doc and define in the same file assume they belong together. { #if 0 @@ -8560,7 +8565,7 @@ static void findDefineDocumentation(EntryNav *rootNav) } else if (!root->doc.isEmpty() || !root->brief.isEmpty()) // define not found { - static bool preEnabled = Config_getBool("ENABLE_PREPROCESSING"); + static bool preEnabled = Config_getBool(ENABLE_PREPROCESSING); if (preEnabled) { warn(root->fileName,root->startLine, @@ -8598,7 +8603,7 @@ static void findDirDocumentation(EntryNav *rootNav) // root->docFile.data(),normalizedName.data()); if (root->docFile==normalizedName) // current dir? { - int lastSlashPos=normalizedName.findRev('/'); + int lastSlashPos=normalizedName.findRev('/'); if (lastSlashPos!=-1) // strip file name { normalizedName=normalizedName.left(lastSlashPos); @@ -8673,7 +8678,7 @@ static void buildPageList(EntryNav *rootNav) QCString title=root->args.stripWhiteSpace(); if (title.isEmpty()) title=theTranslator->trMainPage(); - //QCString name = Config_getBool("GENERATE_TREEVIEW")?"main":"index"; + //QCString name = Config_getBool(GENERATE_TREEVIEW)?"main":"index"; QCString name = "index"; addRefItem(root->sli, name, @@ -8700,7 +8705,7 @@ static void findMainPage(EntryNav *rootNav) Entry *root = rootNav->entry(); //printf("Found main page! \n======\n%s\n=======\n",root->doc.data()); QCString title=root->args.stripWhiteSpace(); - //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index"; + //QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index"; QCString indexName="index"; Doxygen::mainPage = new PageDef(root->docFile,root->docLine, indexName, root->brief+root->doc+root->inbodyDocs,title); @@ -8766,7 +8771,7 @@ static void findMainPageTagFiles(EntryNav *rootNav) static void computePageRelations(EntryNav *rootNav) { - if ((rootNav->section()==Entry::PAGEDOC_SEC || + if ((rootNav->section()==Entry::PAGEDOC_SEC || rootNav->section()==Entry::MAINPAGEDOC_SEC ) && !rootNav->name().isEmpty() @@ -8776,8 +8781,8 @@ static void computePageRelations(EntryNav *rootNav) Entry *root = rootNav->entry(); PageDef *pd = root->section==Entry::PAGEDOC_SEC ? - Doxygen::pageSDict->find(root->name) : - Doxygen::mainPage; + Doxygen::pageSDict->find(root->name) : + Doxygen::mainPage; if (pd) { QListIterator<BaseInfo> bii(*root->extends); @@ -8833,10 +8838,10 @@ static void resolveUserReferences() // si->fileName.data()); PageDef *pd=0; - // hack: the items of a todo/test/bug/deprecated list are all fragments from - // different files, so the resulting section's all have the wrong file - // name (not from the todo/test/bug/deprecated list, but from the file in - // which they are defined). We correct this here by looking at the + // hack: the items of a todo/test/bug/deprecated list are all fragments from + // different files, so the resulting section's all have the wrong file + // name (not from the todo/test/bug/deprecated list, but from the file in + // which they are defined). We correct this here by looking at the // generated section labels! QDictIterator<RefList> rli(*Doxygen::xrefLists); RefList *rl; @@ -8856,7 +8861,7 @@ static void resolveUserReferences() { // if this section is in a page and the page is in a group, then we // have to adjust the link file name to point to the group. - if (!si->fileName.isEmpty() && + if (!si->fileName.isEmpty() && (pd=Doxygen::pageSDict->find(si->fileName)) && pd->getGroupDef()) { @@ -8917,7 +8922,7 @@ static void generatePageDocs() static void buildExampleList(EntryNav *rootNav) { - if (rootNav->section()==Entry::EXAMPLE_SEC && !rootNav->name().isEmpty()) + if (rootNav->section()==Entry::EXAMPLE_SEC && !rootNav->name().isEmpty()) { rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); @@ -8941,7 +8946,7 @@ static void buildExampleList(EntryNav *rootNav) //pi->addSections(root->anchors); Doxygen::exampleSDict->inSort(root->name,pd); - //we don't add example to groups + //we don't add example to groups //addExampleToGroups(root,pd); } @@ -8961,7 +8966,7 @@ void printNavTree(EntryNav *rootNav,int indent) indentStr.isEmpty()?"":indentStr.data(), rootNav->name().isEmpty()?"<empty>":rootNav->name().data(), rootNav->section()); - if (rootNav->children()) + if (rootNav->children()) { EntryNavListIterator eli(*rootNav->children()); for (;eli.current();++eli) printNavTree(eli.current(),indent+2); @@ -8970,7 +8975,7 @@ void printNavTree(EntryNav *rootNav,int indent) //---------------------------------------------------------------------------- -// generate the example documentation +// generate the example documentation static void generateExampleDocs() { @@ -9022,7 +9027,7 @@ static void generateGroupDocs() //static void generatePackageDocs() //{ // writePackageIndex(*g_outputList); -// +// // if (Doxygen::packageDict.count()>0) // { // PackageSDict::Iterator pdi(Doxygen::packageDict); @@ -9040,7 +9045,7 @@ static void generateGroupDocs() static void generateNamespaceDocs() { //writeNamespaceIndex(*g_outputList); - + NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); NamespaceDef *nd; // for each namespace... @@ -9058,9 +9063,9 @@ static void generateNamespaceDocs() ClassDef *cd; for ( ; (cd=cli.current()) ; ++cli ) { - if ( ( cd->isLinkableInProject() && + if ( ( cd->isLinkableInProject() && cd->templateMaster()==0 - ) // skip external references, anonymous compounds and + ) // skip external references, anonymous compounds and // template instances and nested classes && !cd->isHidden() && !cd->isEmbeddedInOuterScope() ) @@ -9084,9 +9089,9 @@ static QCString fixSlashes(QCString &s) { switch(s.at(i)) { - case '/': - case '\\': - result+="\\\\"; + case '/': + case '\\': + result+="\\\\"; break; default: result+=s.at(i); @@ -9112,7 +9117,7 @@ static void generateConfigFile(const char *configFile,bool shortList, if (fileOpened) { FTextStream t(&f); - Config::instance()->writeTemplate(t,shortList,updateOnly); + Config::writeTemplate(t,shortList,updateOnly); if (!writeToStdout) { if (!updateOnly) @@ -9169,7 +9174,7 @@ static void readTagFile(Entry *root,const char *tl) { fileName = tagLine; } - + QFileInfo fi(fileName); if (!fi.exists() || !fi.isFile()) { @@ -9189,7 +9194,7 @@ static void readTagFile(Entry *root,const char *tl) //---------------------------------------------------------------------------- static void copyLatexStyleSheet() { - QStrList latexExtraStyleSheet = Config_getList("LATEX_EXTRA_STYLESHEET"); + QStrList latexExtraStyleSheet = Config_getList(LATEX_EXTRA_STYLESHEET); for (uint i=0; i<latexExtraStyleSheet.count(); ++i) { QCString fileName(latexExtraStyleSheet.at(i)); @@ -9202,7 +9207,7 @@ static void copyLatexStyleSheet() } else { - QCString destFileName = Config_getString("LATEX_OUTPUT")+"/"+fi.fileName().data(); + QCString destFileName = Config_getString(LATEX_OUTPUT)+"/"+fi.fileName().data(); if (!checkExtension(fi.fileName().data(), latexStyleExtension)) { destFileName += latexStyleExtension; @@ -9216,7 +9221,7 @@ static void copyLatexStyleSheet() //---------------------------------------------------------------------------- static void copyStyleSheet() { - QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET"); + QCString &htmlStyleSheet = Config_getString(HTML_STYLESHEET); if (!htmlStyleSheet.isEmpty()) { QFileInfo fi(htmlStyleSheet); @@ -9227,11 +9232,11 @@ static void copyStyleSheet() } else { - QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data(); + QCString destFileName = Config_getString(HTML_OUTPUT)+"/"+fi.fileName().data(); copyFile(htmlStyleSheet,destFileName); } } - QStrList htmlExtraStyleSheet = Config_getList("HTML_EXTRA_STYLESHEET"); + QStrList htmlExtraStyleSheet = Config_getList(HTML_EXTRA_STYLESHEET); for (uint i=0; i<htmlExtraStyleSheet.count(); ++i) { QCString fileName(htmlExtraStyleSheet.at(i)); @@ -9248,16 +9253,16 @@ static void copyStyleSheet() } else { - QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data(); + QCString destFileName = Config_getString(HTML_OUTPUT)+"/"+fi.fileName().data(); copyFile(fileName, destFileName); } } } } -static void copyLogo() +static void copyLogo(const QCString &outputOption) { - QCString &projectLogo = Config_getString("PROJECT_LOGO"); + QCString &projectLogo = Config_getString(PROJECT_LOGO); if (!projectLogo.isEmpty()) { QFileInfo fi(projectLogo); @@ -9268,31 +9273,30 @@ static void copyLogo() } else { - QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data(); + QCString destFileName = outputOption+"/"+fi.fileName().data(); copyFile(projectLogo,destFileName); Doxygen::indexList->addImageFile(fi.fileName().data()); } } } -static void copyExtraFiles(const QCString& filesOption,const QCString &outputOption) +static void copyExtraFiles(QStrList files,const QString &filesOption,const QCString &outputOption) { - QStrList files = Config_getList(filesOption); uint i; for (i=0; i<files.count(); ++i) { QCString fileName(files.at(i)); - + if (!fileName.isEmpty()) { QFileInfo fi(fileName); - if (!fi.exists()) + if (!fi.exists()) { - err("Extra file '%s' specified in " + filesOption + " does not exist!\n", fileName.data()); + err("Extra file '%s' specified in %s does not exist!\n", fileName.data(),filesOption.data()); } else { - QCString destFileName = Config_getString(outputOption)+"/"+fi.fileName().data(); + QCString destFileName = outputOption+"/"+fi.fileName().data(); Doxygen::indexList->addImageFile(fi.fileName().utf8()); copyFile(fileName, destFileName); } @@ -9325,7 +9329,7 @@ static void parseFile(ParserInterface *parser, bool sameTu,QStrList &filesInSameTu) { #if USE_LIBCLANG - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); #else static bool clangAssistedParsing = FALSE; #endif @@ -9344,7 +9348,7 @@ static void parseFile(ParserInterface *parser, QFileInfo fi(fileName); BufStr preBuf(fi.size()+4096); - if (Config_getBool("ENABLE_PREPROCESSING") && + if (Config_getBool(ENABLE_PREPROCESSING) && parser->needsPreprocessing(extension)) { BufStr inBuf(fi.size()+4096); @@ -9387,7 +9391,7 @@ static void parseFile(ParserInterface *parser, static void parseFiles(Entry *root,EntryNav *rootNav) { #if USE_LIBCLANG - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (clangAssistedParsing) { QDict<void> g_processedFiles(10007); @@ -9415,7 +9419,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav) parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu); //printf(" got %d extra files in tu\n",filesInSameTu.count()); - // Now process any include files in the same translation unit + // Now process any include files in the same translation unit // first. When libclang is used this is much more efficient. char *incFile = filesInSameTu.first(); while (incFile && g_filesToProcess.find(incFile)) @@ -9487,9 +9491,9 @@ static QCString resolveSymlink(QCString path) { #ifdef WIN32 // UNC path, skip server and share name - if (sepPos==0 && (result.left(2)=="//" || result.left(2)=="\\\\")) + if (sepPos==0 && (result.left(2)=="//" || result.left(2)=="\\\\")) sepPos = result.find('/',2); - if (sepPos!=-1) + if (sepPos!=-1) sepPos = result.find('/',sepPos+1); #else sepPos = result.find('/',sepPos+1); @@ -9543,7 +9547,7 @@ static QCString resolveSymlink(QCString path) static QDict<void> g_pathsVisited(1009); //---------------------------------------------------------------------------- -// Read all files matching at least one pattern in `patList' in the +// Read all files matching at least one pattern in `patList' in the // directory represented by `fi'. // The directory is read iff the recusiveFlag is set. // The contents of all files is append to the input string @@ -9579,7 +9583,7 @@ int readDir(QFileInfo *fi, int totalSize=0; msg("Searching for files in directory %s\n", fi->absFilePath().data()); //printf("killDict=%p count=%d\n",killDict,killDict->count()); - + const QFileInfoList *list = dir.entryInfoList(); if (list) { @@ -9588,7 +9592,7 @@ int readDir(QFileInfo *fi, while ((cfi=it.current())) { - if (exclDict==0 || exclDict->find(cfi->absFilePath().utf8())==0) + if (exclDict==0 || exclDict->find(cfi->absFilePath().utf8())==0) { // file should not be excluded //printf("killDict->find(%s)\n",cfi->absFilePath().data()); if (!cfi->exists() || !cfi->isReadable()) @@ -9598,9 +9602,9 @@ int readDir(QFileInfo *fi, warn_uncond("source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data()); } } - else if (cfi->isFile() && - (!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) && - (patList==0 || patternMatch(*cfi,patList)) && + else if (cfi->isFile() && + (!Config_getBool(EXCLUDE_SYMLINKS) || !cfi->isSymLink()) && + (patList==0 || patternMatch(*cfi,patList)) && !patternMatch(*cfi,exclPatList) && (killDict==0 || killDict->find(cfi->absFilePath().utf8())==0) ) @@ -9634,8 +9638,8 @@ int readDir(QFileInfo *fi, if (killDict) killDict->insert(cfi->absFilePath().utf8(),(void *)0x8); } else if (recursive && - (!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) && - cfi->isDir() && + (!Config_getBool(EXCLUDE_SYMLINKS) || !cfi->isSymLink()) && + cfi->isDir() && !patternMatch(*cfi,exclPatList) && cfi->fileName().at(0)!='.') // skip "." ".." and ".dir" { @@ -9690,7 +9694,7 @@ int readFileOrDirectory(const char *s, warn_uncond("source %s is not a readable file or directory... skipping.\n",s); } } - else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink()) + else if (!Config_getBool(EXCLUDE_SYMLINKS) || !fi.isSymLink()) { if (fi.isFile()) { @@ -9703,7 +9707,7 @@ int readFileOrDirectory(const char *s, //printf("killDict->find(%s)\n",fi.absFilePath().data()); if (killDict==0 || killDict->find(filePath)==0) { - totalSize+=fi.size()+fi.absFilePath().length()+4; //readFile(&fi,fiList,input); + totalSize+=fi.size()+fi.absFilePath().length()+4; //readFile(&fi,fiList,input); //fiList->inSort(new FileInfo(fi)); QCString name=fi.fileName().utf8(); //printf("New file %s\n",name.data()); @@ -9750,7 +9754,7 @@ int readFileOrDirectory(const char *s, void readFormulaRepository() { - QFile f(Config_getString("HTML_OUTPUT")+"/formula.repository"); + QFile f(Config_getString(HTML_OUTPUT)+"/formula.repository"); if (f.open(IO_ReadOnly)) // open repository { msg("Reading formula repository...\n"); @@ -9768,7 +9772,7 @@ void readFormulaRepository() else { QCString formName = line.left(se); - QCString formText = line.right(line.length()-se-1); + QCString formText = line.right(line.length()-se-1); Formula *f=new Formula(formText); Doxygen::formulaList->setAutoDelete(TRUE); Doxygen::formulaList->append(f); @@ -9806,15 +9810,15 @@ static void escapeAliases() { newValue+=value.mid(p,in-p); // expand \n's except if \n is part of a built-in command. - if (value.mid(in,5)!="\\note" && - value.mid(in,5)!="\\name" && - value.mid(in,10)!="\\namespace" && + if (value.mid(in,5)!="\\note" && + value.mid(in,5)!="\\name" && + value.mid(in,10)!="\\namespace" && value.mid(in,14)!="\\nosubgrouping" - ) + ) { newValue+="\\_linebr "; } - else + else { newValue+="\\n"; } @@ -9829,10 +9833,10 @@ static void escapeAliases() //---------------------------------------------------------------------------- void readAliases() -{ +{ // add aliases to a dictionary Doxygen::aliasDict.setAutoDelete(TRUE); - QStrList &aliasList = Config_getList("ALIASES"); + QStrList &aliasList = Config_getList(ALIASES); const char *s=aliasList.first(); while (s) { @@ -9844,7 +9848,7 @@ void readAliases() { QCString name=alias.left(i).stripWhiteSpace(); QCString value=alias.right(alias.length()-i-1); - //printf("Alias: found name=`%s' value=`%s'\n",name.data(),value.data()); + //printf("Alias: found name=`%s' value=`%s'\n",name.data(),value.data()); if (!name.isEmpty()) { QCString *dn=Doxygen::aliasDict[name]; @@ -9876,7 +9880,7 @@ static void dumpSymbol(FTextStream &t,Definition *d) anchor=":"+md->anchor(); } QCString scope; - if (d->getOuterScope() && d->getOuterScope()!=Doxygen::globalScope) + if (d->getOuterScope() && d->getOuterScope()!=Doxygen::globalScope) { scope = d->getOuterScope()->getOutputFileBase()+Doxygen::htmlFileExtension; } @@ -9890,7 +9894,7 @@ static void dumpSymbol(FTextStream &t,Definition *d) } static void dumpSymbolMap() -{ +{ QFile f("symbols.sql"); if (f.open(IO_WriteOnly)) { @@ -9985,6 +9989,8 @@ void initDoxygen() setlocale(LC_CTYPE,"C"); // to get isspace(0xA0)==0, needed for UTF-8 setlocale(LC_NUMERIC,"C"); + portable_correct_path(); + Doxygen::runningTime.start(); initPreprocessor(); @@ -9997,6 +10003,7 @@ void initDoxygen() Doxygen::parserManager->registerParser("fortranfixed", new FortranLanguageScannerFixed); Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner); Doxygen::parserManager->registerParser("xml", new XMLScanner); + Doxygen::parserManager->registerParser("sql", new SQLScanner); Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner); Doxygen::parserManager->registerParser("md", new MarkdownFileParser); @@ -10013,16 +10020,15 @@ void initDoxygen() #endif Doxygen::inputNameList = new FileNameList; Doxygen::inputNameList->setAutoDelete(TRUE); - Doxygen::memberNameSDict = new MemberNameSDict(10000); + Doxygen::memberNameSDict = new MemberNameSDict(10000); Doxygen::memberNameSDict->setAutoDelete(TRUE); - Doxygen::functionNameSDict = new MemberNameSDict(10000); + Doxygen::functionNameSDict = new MemberNameSDict(10000); Doxygen::functionNameSDict->setAutoDelete(TRUE); - Doxygen::groupSDict = new GroupSDict(17); + Doxygen::groupSDict = new GroupSDict(17); Doxygen::groupSDict->setAutoDelete(TRUE); - Doxygen::globalScope = new NamespaceDef("<globalScope>",1,1,"<globalScope>"); - Doxygen::namespaceSDict = new NamespaceSDict(20); + Doxygen::namespaceSDict = new NamespaceSDict(20); Doxygen::namespaceSDict->setAutoDelete(TRUE); - Doxygen::classSDict = new ClassSDict(1009); + Doxygen::classSDict = new ClassSDict(1009); Doxygen::classSDict->setAutoDelete(TRUE); Doxygen::hiddenClasses = new ClassSDict(257); Doxygen::hiddenClasses->setAutoDelete(TRUE); @@ -10032,15 +10038,6 @@ void initDoxygen() Doxygen::pageSDict->setAutoDelete(TRUE); Doxygen::exampleSDict = new PageSDict(1009); // all examples Doxygen::exampleSDict->setAutoDelete(TRUE); - Doxygen::inputNameDict = new FileNameDict(10007); - Doxygen::includeNameDict = new FileNameDict(10007); - Doxygen::exampleNameDict = new FileNameDict(1009); - Doxygen::exampleNameDict->setAutoDelete(TRUE); - Doxygen::imageNameDict = new FileNameDict(257); - Doxygen::imageNameDict->setAutoDelete(TRUE); - Doxygen::dotFileNameDict = new FileNameDict(257); - Doxygen::mscFileNameDict = new FileNameDict(257); - Doxygen::diaFileNameDict = new FileNameDict(257); Doxygen::memGrpInfoDict.setAutoDelete(TRUE); Doxygen::tagDestinationDict.setAutoDelete(TRUE); Doxygen::dirRelations.setAutoDelete(TRUE); @@ -10053,10 +10050,21 @@ void initDoxygen() Doxygen::sectionDict = new SectionDict(257); Doxygen::sectionDict->setAutoDelete(TRUE); + // initialisation of these globals depends on + // configuration switches so we need to postpone these + Doxygen::globalScope = 0; + Doxygen::inputNameDict = 0; + Doxygen::includeNameDict = 0; + Doxygen::exampleNameDict = 0; + Doxygen::imageNameDict = 0; + Doxygen::dotFileNameDict = 0; + Doxygen::mscFileNameDict = 0; + Doxygen::diaFileNameDict = 0; + /************************************************************************** * Initialize some global constants **************************************************************************/ - + g_compoundKeywordDict.insert("template class",(void *)8); g_compoundKeywordDict.insert("template struct",(void *)8); g_compoundKeywordDict.insert("class",(void *)8); @@ -10064,7 +10072,6 @@ void initDoxygen() g_compoundKeywordDict.insert("union",(void *)8); g_compoundKeywordDict.insert("interface",(void *)8); g_compoundKeywordDict.insert("exception",(void *)8); - } void cleanUpDoxygen() @@ -10083,7 +10090,7 @@ void cleanUpDoxygen() delete Doxygen::mscFileNameDict; delete Doxygen::diaFileNameDict; delete Doxygen::mainPage; - delete Doxygen::pageSDict; + delete Doxygen::pageSDict; delete Doxygen::exampleSDict; delete Doxygen::globalScope; delete Doxygen::xrefLists; @@ -10111,7 +10118,7 @@ void cleanUpDoxygen() { ++dli; } - } + } } delete Doxygen::inputNameList; @@ -10123,7 +10130,7 @@ void cleanUpDoxygen() delete Doxygen::namespaceSDict; delete Doxygen::directories; - //delete Doxygen::symbolMap; <- we cannot do this unless all static lists + //delete Doxygen::symbolMap; <- we cannot do this unless all static lists // (such as Doxygen::namespaceSDict) // with objects based on Definition are made // dynamic first @@ -10134,7 +10141,7 @@ static int computeIdealCacheParam(uint v) //printf("computeIdealCacheParam(v=%u)\n",v); int r=0; - while (v!=0) v>>=1,r++; + while (v!=0) v>>=1,r++; // r = log2(v) // convert to a valid cache size value @@ -10157,8 +10164,8 @@ void readConfiguration(int argc, char **argv) bool updateConfig=FALSE; bool genLayout=FALSE; int retVal; - while (optind<argc && argv[optind][0]=='-' && - (isalpha(argv[optind][1]) || argv[optind][1]=='?' || + while (optind<argc && argv[optind][0]=='-' && + (isalpha(argv[optind][1]) || argv[optind][1]=='?' || argv[optind][1]=='-') ) { @@ -10169,7 +10176,7 @@ void readConfiguration(int argc, char **argv) configName=getArg(argc,argv,optind); if (optind+1<argc && qstrcmp(argv[optind+1],"-")==0) { configName="-"; optind++; } - if (!configName) + if (!configName) { configName="Doxyfile"; } break; case 'l': @@ -10228,7 +10235,7 @@ void readConfiguration(int argc, char **argv) err("option \"-e\" has invalid format specifier.\n"); cleanUpDoxygen(); exit(1); - break; + break; case 'w': formatName=getArg(argc,argv,optind); if (!formatName) @@ -10236,7 +10243,7 @@ void readConfiguration(int argc, char **argv) err("option \"-w\" is missing format specifier rtf, html or latex\n"); cleanUpDoxygen(); exit(1); - } + } if (qstricmp(formatName,"rtf")==0) { if (optind+1>=argc) @@ -10255,26 +10262,17 @@ void readConfiguration(int argc, char **argv) } else if (qstricmp(formatName,"html")==0) { + Config::init(); if (optind+4<argc || QFileInfo("Doxyfile").exists()) + // explicit config file mentioned or default found on disk { QCString df = optind+4<argc ? argv[optind+4] : QCString("Doxyfile"); - if (!Config::instance()->parse(df)) + if (!Config::parse(df)) // parse the config file { err("error opening or reading configuration file %s!\n",argv[optind+4]); cleanUpDoxygen(); exit(1); } - Config::instance()->substituteEnvironmentVars(); - Config::instance()->convertStrToVal(); - // avoid bootstrapping issues when the config file already - // refers to the files that we are supposed to parse. - Config_getString("HTML_HEADER")=""; - Config_getString("HTML_FOOTER")=""; - Config::instance()->check(); - } - else - { - Config::instance()->init(); } if (optind+3>=argc) { @@ -10282,8 +10280,10 @@ void readConfiguration(int argc, char **argv) cleanUpDoxygen(); exit(1); } + Config::postProcess(TRUE); + Config::checkAndCorrect(); - QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE); if (!setTranslator(outputLanguage)) { warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data()); @@ -10303,30 +10303,22 @@ void readConfiguration(int argc, char **argv) if (openOutputFile(argv[optind+3],f)) { HtmlGenerator::writeStyleSheetFile(f); - } + } cleanUpDoxygen(); exit(0); } else if (qstricmp(formatName,"latex")==0) { + Config::init(); if (optind+4<argc || QFileInfo("Doxyfile").exists()) { QCString df = optind+4<argc ? argv[optind+4] : QCString("Doxyfile"); - if (!Config::instance()->parse(df)) + if (!Config::parse(df)) { err("error opening or reading configuration file %s!\n",argv[optind+4]); cleanUpDoxygen(); exit(1); } - Config::instance()->substituteEnvironmentVars(); - Config::instance()->convertStrToVal(); - Config_getString("LATEX_HEADER")=""; - Config_getString("LATEX_FOOTER")=""; - Config::instance()->check(); - } - else // use default config - { - Config::instance()->init(); } if (optind+3>=argc) { @@ -10334,8 +10326,10 @@ void readConfiguration(int argc, char **argv) cleanUpDoxygen(); exit(1); } + Config::postProcess(TRUE); + Config::checkAndCorrect(); - QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE); if (!setTranslator(outputLanguage)) { warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data()); @@ -10370,7 +10364,7 @@ void readConfiguration(int argc, char **argv) g_dumpSymbolMap = TRUE; break; case 'v': - msg("%s\n",versionString); + msg("%s\n",versionString); cleanUpDoxygen(); exit(0); break; @@ -10382,7 +10376,7 @@ void readConfiguration(int argc, char **argv) } else if (qstrcmp(&argv[optind][2],"version")==0) { - msg("%s\n",versionString); + msg("%s\n",versionString); cleanUpDoxygen(); exit(0); } @@ -10415,12 +10409,19 @@ void readConfiguration(int argc, char **argv) } optind++; } - + /************************************************************************** * Parse or generate the config file * **************************************************************************/ - Config::instance()->init(); + Config::init(); + + if (genConfig && g_useOutputTemplate) + { + generateTemplateFiles("templates"); + cleanUpDoxygen(); + exit(0); + } if (genConfig) { @@ -10437,8 +10438,8 @@ void readConfiguration(int argc, char **argv) QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile"); if (optind>=argc) - { - if (configFileInfo1.exists()) + { + if (configFileInfo1.exists()) { configName="Doxyfile"; } @@ -10469,7 +10470,7 @@ void readConfiguration(int argc, char **argv) } - if (!Config::instance()->parse(configName,updateConfig)) + if (!Config::parse(configName,updateConfig)) { err("could not open or read configuration file %s!\n",configName); cleanUpDoxygen(); @@ -10492,24 +10493,33 @@ void readConfiguration(int argc, char **argv) /** check and resolve config options */ void checkConfiguration() { - - Config::instance()->substituteEnvironmentVars(); - Config::instance()->convertStrToVal(); - Config::instance()->check(); - + + Config::postProcess(FALSE); + Config::checkAndCorrect(); initWarningFormat(); } /** adjust globals that depend on configuration settings. */ void adjustConfiguration() { - QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); + Doxygen::globalScope = new NamespaceDef("<globalScope>",1,1,"<globalScope>"); + Doxygen::inputNameDict = new FileNameDict(10007); + Doxygen::includeNameDict = new FileNameDict(10007); + Doxygen::exampleNameDict = new FileNameDict(1009); + Doxygen::exampleNameDict->setAutoDelete(TRUE); + Doxygen::imageNameDict = new FileNameDict(257); + Doxygen::imageNameDict->setAutoDelete(TRUE); + Doxygen::dotFileNameDict = new FileNameDict(257); + Doxygen::mscFileNameDict = new FileNameDict(257); + Doxygen::diaFileNameDict = new FileNameDict(257); + + QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE); if (!setTranslator(outputLanguage)) { warn_uncond("Output language %s not supported! Using English instead.\n", outputLanguage.data()); } - QStrList &includePath = Config_getList("INCLUDE_PATH"); + QStrList &includePath = Config_getList(INCLUDE_PATH); char *s=includePath.first(); while (s) { @@ -10518,24 +10528,24 @@ void adjustConfiguration() s=includePath.next(); } - /* Set the global html file extension. */ - Doxygen::htmlFileExtension = Config_getString("HTML_FILE_EXTENSION"); + /* Set the global html file extension. */ + Doxygen::htmlFileExtension = Config_getString(HTML_FILE_EXTENSION); Doxygen::xrefLists->setAutoDelete(TRUE); - Doxygen::parseSourcesNeeded = Config_getBool("CALL_GRAPH") || - Config_getBool("CALLER_GRAPH") || - Config_getBool("REFERENCES_RELATION") || - Config_getBool("REFERENCED_BY_RELATION"); + Doxygen::parseSourcesNeeded = Config_getBool(CALL_GRAPH) || + Config_getBool(CALLER_GRAPH) || + Config_getBool(REFERENCES_RELATION) || + Config_getBool(REFERENCED_BY_RELATION); + + Doxygen::markdownSupport = Config_getBool(MARKDOWN_SUPPORT); - Doxygen::markdownSupport = Config_getBool("MARKDOWN_SUPPORT"); - /************************************************************************** * Add custom extension mappings **************************************************************************/ - QStrList &extMaps = Config_getList("EXTENSION_MAPPING"); + QStrList &extMaps = Config_getList(EXTENSION_MAPPING); char *mapping = extMaps.first(); while (mapping) { @@ -10548,7 +10558,7 @@ void adjustConfiguration() if (!updateLanguageMapping(ext,language)) { err("Failed to map file extension '%s' to unsupported language '%s'.\n" - "Check the EXTENSION_MAPPING setting in the config file.\n", + "Check the EXTENSION_MAPPING setting in the config file.\n", ext.data(),language.data()); } else @@ -10562,7 +10572,7 @@ void adjustConfiguration() // add predefined macro name to a dictionary - QStrList &expandAsDefinedList =Config_getList("EXPAND_AS_DEFINED"); + QStrList &expandAsDefinedList =Config_getList(EXPAND_AS_DEFINED); s=expandAsDefinedList.first(); while (s) { @@ -10577,7 +10587,7 @@ void adjustConfiguration() readAliases(); // store number of spaces in a tab into Doxygen::spaces - int &tabSize = Config_getInt("TAB_SIZE"); + int &tabSize = Config_getInt(TAB_SIZE); Doxygen::spaces.resize(tabSize+1); int sp;for (sp=0;sp<tabSize;sp++) Doxygen::spaces.at(sp)=' '; Doxygen::spaces.at(tabSize)='\0'; @@ -10603,7 +10613,7 @@ static void stopDoxygen(int) static void writeTagFile() { - QCString &generateTagFile = Config_getString("GENERATE_TAGFILE"); + QCString &generateTagFile = Config_getString(GENERATE_TAGFILE); if (generateTagFile.isEmpty()) return; QFile tag(generateTagFile); @@ -10661,7 +10671,7 @@ static void writeTagFile() if (Doxygen::mainPage) Doxygen::mainPage->writeTagFile(tagFile); /* - if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty()) + if (Doxygen::mainPage && !Config_getString(GENERATE_TAGFILE).isEmpty()) { tagFile << " <compound kind=\"page\">" << endl << " <name>" @@ -10700,11 +10710,10 @@ static void exitDoxygen() } static QCString createOutputDirectory(const QCString &baseDirName, - const char *formatDirOption, + QCString &formatDirName, const char *defaultDirName) { // Note the & on the next line, we modify the formatDirOption! - QCString &formatDirName = Config_getString(formatDirOption); if (formatDirName.isEmpty()) { formatDirName = baseDirName + defaultDirName; @@ -10725,14 +10734,14 @@ static QCString createOutputDirectory(const QCString &baseDirName, static QCString getQchFileName() { - QCString const & qchFile = Config_getString("QCH_FILE"); + QCString const & qchFile = Config_getString(QCH_FILE); if (!qchFile.isEmpty()) { return qchFile; } - QCString const & projectName = Config_getString("PROJECT_NAME"); - QCString const & versionText = Config_getString("PROJECT_NUMBER"); + QCString const & projectName = Config_getString(PROJECT_NAME); + QCString const & versionText = Config_getString(PROJECT_NUMBER); return QCString("../qch/") + (projectName.isEmpty() ? QCString("index") : projectName) @@ -10742,80 +10751,80 @@ static QCString getQchFileName() void searchInputFiles() { - QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS"); - bool alwaysRecursive = Config_getBool("RECURSIVE"); + QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS); + bool alwaysRecursive = Config_getBool(RECURSIVE); StringDict excludeNameDict(1009); excludeNameDict.setAutoDelete(TRUE); // gather names of all files in the include path g_s.begin("Searching for include files...\n"); - QStrList &includePathList = Config_getList("INCLUDE_PATH"); + QStrList &includePathList = Config_getList(INCLUDE_PATH); char *s=includePathList.first(); while (s) { - QStrList &pl = Config_getList("INCLUDE_FILE_PATTERNS"); - if (pl.count()==0) + QStrList &pl = Config_getList(INCLUDE_FILE_PATTERNS); + if (pl.count()==0) { - pl = Config_getList("FILE_PATTERNS"); + pl = Config_getList(FILE_PATTERNS); } readFileOrDirectory(s,0,Doxygen::includeNameDict,0,&pl, &exclPatterns,0,0, alwaysRecursive); - s=includePathList.next(); + s=includePathList.next(); } g_s.end(); g_s.begin("Searching for example files...\n"); - QStrList &examplePathList = Config_getList("EXAMPLE_PATH"); + QStrList &examplePathList = Config_getList(EXAMPLE_PATH); s=examplePathList.first(); while (s) { readFileOrDirectory(s,0,Doxygen::exampleNameDict,0, - &Config_getList("EXAMPLE_PATTERNS"), + &Config_getList(EXAMPLE_PATTERNS), 0,0,0, - (alwaysRecursive || Config_getBool("EXAMPLE_RECURSIVE"))); - s=examplePathList.next(); + (alwaysRecursive || Config_getBool(EXAMPLE_RECURSIVE))); + s=examplePathList.next(); } g_s.end(); g_s.begin("Searching for images...\n"); - QStrList &imagePathList=Config_getList("IMAGE_PATH"); + QStrList &imagePathList=Config_getList(IMAGE_PATH); s=imagePathList.first(); while (s) { readFileOrDirectory(s,0,Doxygen::imageNameDict,0,0, 0,0,0, alwaysRecursive); - s=imagePathList.next(); + s=imagePathList.next(); } g_s.end(); g_s.begin("Searching for dot files...\n"); - QStrList &dotFileList=Config_getList("DOTFILE_DIRS"); + QStrList &dotFileList=Config_getList(DOTFILE_DIRS); s=dotFileList.first(); while (s) { readFileOrDirectory(s,0,Doxygen::dotFileNameDict,0,0, 0,0,0, alwaysRecursive); - s=dotFileList.next(); + s=dotFileList.next(); } g_s.end(); g_s.begin("Searching for msc files...\n"); - QStrList &mscFileList=Config_getList("MSCFILE_DIRS"); + QStrList &mscFileList=Config_getList(MSCFILE_DIRS); s=mscFileList.first(); while (s) { readFileOrDirectory(s,0,Doxygen::mscFileNameDict,0,0, 0,0,0, alwaysRecursive); - s=mscFileList.next(); + s=mscFileList.next(); } g_s.end(); g_s.begin("Searching for dia files...\n"); - QStrList &diaFileList=Config_getList("DIAFILE_DIRS"); + QStrList &diaFileList=Config_getList(DIAFILE_DIRS); s=diaFileList.first(); while (s) { @@ -10827,11 +10836,11 @@ void searchInputFiles() g_s.end(); g_s.begin("Searching for files to exclude\n"); - QStrList &excludeList = Config_getList("EXCLUDE"); + QStrList &excludeList = Config_getList(EXCLUDE); s=excludeList.first(); while (s) { - readFileOrDirectory(s,0,0,0,&Config_getList("FILE_PATTERNS"), + readFileOrDirectory(s,0,0,0,&Config_getList(FILE_PATTERNS), 0,0,&excludeNameDict, alwaysRecursive, FALSE); @@ -10845,7 +10854,7 @@ void searchInputFiles() g_s.begin("Searching INPUT for files to process...\n"); QDict<void> *killDict = new QDict<void>(10007); - QStrList &inputList=Config_getList("INPUT"); + QStrList &inputList=Config_getList(INPUT); g_inputFiles.setAutoDelete(TRUE); s=inputList.first(); while (s) @@ -10862,7 +10871,7 @@ void searchInputFiles() Doxygen::inputNameList, Doxygen::inputNameDict, &excludeNameDict, - &Config_getList("FILE_PATTERNS"), + &Config_getList(FILE_PATTERNS), &exclPatterns, &g_inputFiles,0, alwaysRecursive, @@ -10876,7 +10885,7 @@ void searchInputFiles() g_s.end(); } - + void parseInput() { atexit(exitDoxygen); @@ -10885,8 +10894,8 @@ void parseInput() /************************************************************************** * Make sure the output directory exists **************************************************************************/ - QCString &outputDirectory = Config_getString("OUTPUT_DIRECTORY"); - if (outputDirectory.isEmpty()) + QCString &outputDirectory = Config_getString(OUTPUT_DIRECTORY); + if (outputDirectory.isEmpty()) { outputDirectory=QDir::currentDirPath().utf8(); } @@ -10920,7 +10929,7 @@ void parseInput() Doxygen::symbolStorage = new Store; // also scale lookup cache with SYMBOL_CACHE_SIZE - int cacheSize = Config_getInt("LOOKUP_CACHE_SIZE"); + int cacheSize = Config_getInt(LOOKUP_CACHE_SIZE); if (cacheSize<0) cacheSize=0; if (cacheSize>9) cacheSize=9; uint lookupSize = 65536 << cacheSize; @@ -10936,7 +10945,7 @@ void parseInput() Doxygen::objDBFileName.prepend(outputDirectory+"/"); Doxygen::entryDBFileName.sprintf("doxygen_entrydb_%d.tmp",pid); Doxygen::entryDBFileName.prepend(outputDirectory+"/"); - + if (Doxygen::symbolStorage->open(Doxygen::objDBFileName)==-1) { err("Failed to open temporary file %s\n",Doxygen::objDBFileName.data()); @@ -10950,43 +10959,43 @@ void parseInput() **************************************************************************/ QCString htmlOutput; - bool &generateHtml = Config_getBool("GENERATE_HTML"); + bool &generateHtml = Config_getBool(GENERATE_HTML); if (generateHtml || g_useOutputTemplate /* TODO: temp hack */) - htmlOutput = createOutputDirectory(outputDirectory,"HTML_OUTPUT","/html"); + htmlOutput = createOutputDirectory(outputDirectory,Config_getString(HTML_OUTPUT),"/html"); QCString docbookOutput; - bool &generateDocbook = Config_getBool("GENERATE_DOCBOOK"); + bool &generateDocbook = Config_getBool(GENERATE_DOCBOOK); if (generateDocbook) - docbookOutput = createOutputDirectory(outputDirectory,"DOCBOOK_OUTPUT","/docbook"); + docbookOutput = createOutputDirectory(outputDirectory,Config_getString(DOCBOOK_OUTPUT),"/docbook"); QCString xmlOutput; - bool &generateXml = Config_getBool("GENERATE_XML"); + bool &generateXml = Config_getBool(GENERATE_XML); if (generateXml) - xmlOutput = createOutputDirectory(outputDirectory,"XML_OUTPUT","/xml"); - + xmlOutput = createOutputDirectory(outputDirectory,Config_getString(XML_OUTPUT),"/xml"); + QCString latexOutput; - bool &generateLatex = Config_getBool("GENERATE_LATEX"); + bool &generateLatex = Config_getBool(GENERATE_LATEX); if (generateLatex) - latexOutput = createOutputDirectory(outputDirectory,"LATEX_OUTPUT","/latex"); + latexOutput = createOutputDirectory(outputDirectory,Config_getString(LATEX_OUTPUT),"/latex"); QCString rtfOutput; - bool &generateRtf = Config_getBool("GENERATE_RTF"); + bool &generateRtf = Config_getBool(GENERATE_RTF); if (generateRtf) - rtfOutput = createOutputDirectory(outputDirectory,"RTF_OUTPUT","/rtf"); + rtfOutput = createOutputDirectory(outputDirectory,Config_getString(RTF_OUTPUT),"/rtf"); QCString manOutput; - bool &generateMan = Config_getBool("GENERATE_MAN"); + bool &generateMan = Config_getBool(GENERATE_MAN); if (generateMan) - manOutput = createOutputDirectory(outputDirectory,"MAN_OUTPUT","/man"); + manOutput = createOutputDirectory(outputDirectory,Config_getString(MAN_OUTPUT),"/man"); //QCString sqlOutput; - //bool &generateSql = Config_getBool("GENERATE_SQLITE3"); + //bool &generateSql = Config_getBool(GENERATE_SQLITE3); //if (generateSql) // sqlOutput = createOutputDirectory(outputDirectory,"SQLITE3_OUTPUT","/sqlite3"); - if (Config_getBool("HAVE_DOT")) + if (Config_getBool(HAVE_DOT)) { - QCString curFontPath = Config_getString("DOT_FONTPATH"); + QCString curFontPath = Config_getString(DOT_FONTPATH); if (curFontPath.isEmpty()) { portable_getenv("DOTFONTPATH"); @@ -11011,7 +11020,7 @@ void parseInput() **************************************************************************/ LayoutDocManager::instance().init(); - QCString &layoutFileName = Config_getString("LAYOUT_FILE"); + QCString &layoutFileName = Config_getString(LAYOUT_FILE); bool defaultLayoutUsed = FALSE; if (layoutFileName.isEmpty()) { @@ -11023,7 +11032,7 @@ void parseInput() if (layoutFile.open(IO_ReadOnly)) { msg("Parsing layout file %s...\n",layoutFileName.data()); - QTextStream t(&layoutFile); + QTextStream t(&layoutFile); t.setEncoding(QTextStream::Latin1); LayoutDocManager::instance().parse(t,layoutFileName); } @@ -11035,9 +11044,9 @@ void parseInput() /************************************************************************** * Read and preprocess input * **************************************************************************/ - + // prevent search in the output directories - QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS"); + QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS); if (generateHtml) exclPatterns.append(htmlOutput); if (generateDocbook) exclPatterns.append(docbookOutput); if (generateXml) exclPatterns.append(xmlOutput); @@ -11048,12 +11057,12 @@ void parseInput() searchInputFiles(); // Notice: the order of the function calls below is very important! - - if (Config_getBool("GENERATE_HTML")) + + if (Config_getBool(GENERATE_HTML)) { readFormulaRepository(); } - + /************************************************************************** * Handle Tag Files * **************************************************************************/ @@ -11070,8 +11079,8 @@ void parseInput() EntryNav *rootNav = new EntryNav(0,root); rootNav->setEntry(root); msg("Reading and parsing tag files\n"); - - QStrList &tagFileList = Config_getList("TAGFILES"); + + QStrList &tagFileList = Config_getList(TAGFILES); char *s=tagFileList.first(); while (s) { @@ -11079,12 +11088,12 @@ void parseInput() root->createNavigationIndex(rootNav,g_storage,0); s=tagFileList.next(); } - + /************************************************************************** - * Parse source files * + * Parse source files * **************************************************************************/ - if (Config_getBool("BUILTIN_STL_SUPPORT")) + if (Config_getBool(BUILTIN_STL_SUPPORT)) { addSTLClasses(rootNav); } @@ -11108,7 +11117,7 @@ void parseInput() } /************************************************************************** - * Gather information * + * Gather information * **************************************************************************/ g_s.begin("Building group list...\n"); @@ -11146,7 +11155,7 @@ void parseInput() resolveClassNestingRelations(); g_s.end(); // 1.8.2-20121111: no longer add nested classes to the group as well - //distributeClassGroupRelations(); + //distributeClassGroupRelations(); // calling buildClassList may result in cached relations that // become invalid after resolveClassNestingRelations(), that's why @@ -11210,7 +11219,7 @@ void parseInput() findUsedTemplateInstances(); g_s.end(); - if (Config_getBool("INLINE_SIMPLE_STRUCTS")) + if (Config_getBool(INLINE_SIMPLE_STRUCTS)) { g_s.begin("Searching for tag less structs...\n"); findTagLessClasses(); @@ -11221,14 +11230,10 @@ void parseInput() flushCachedTemplateRelations(); g_s.end(); - g_s.begin("Creating members for template instances...\n"); - createTemplateInstanceMembers(); - g_s.end(); - g_s.begin("Computing class relations...\n"); computeTemplateClassRelations(); flushUnresolvedRelations(); - if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) + if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) { VhdlDocGen::computeVhdlComponentRelations(); } @@ -11249,6 +11254,12 @@ void parseInput() transferFunctionDocumentation(); g_s.end(); + // moved to after finding and copying documentation, + // as this introduces new members see bug 722654 + g_s.begin("Creating members for template instances...\n"); + createTemplateInstanceMembers(); + g_s.end(); + g_s.begin("Building page list...\n"); buildPageList(rootNav); g_s.end(); @@ -11300,7 +11311,7 @@ void parseInput() addMembersToMemberGroup(); g_s.end(); - if (Config_getBool("DISTRIBUTE_GROUP_DOC")) + if (Config_getBool(DISTRIBUTE_GROUP_DOC)) { g_s.begin("Distributing member group documentation.\n"); distributeMemberGroupDocumentation(); @@ -11311,7 +11322,7 @@ void parseInput() computeMemberReferences(); g_s.end(); - if (Config_getBool("INHERIT_DOCS")) + if (Config_getBool(INHERIT_DOCS)) { g_s.begin("Inheriting documentation...\n"); inheritDocumentation(); @@ -11337,7 +11348,7 @@ void parseInput() sortMemberLists(); g_s.end(); - if (Config_getBool("DIRECTORY_GRAPH")) + if (Config_getBool(DIRECTORY_GRAPH)) { g_s.begin("Computing dependencies between directories...\n"); computeDirDependencies(); @@ -11394,24 +11405,24 @@ void generateOutput() initSearchIndexer(); - bool generateHtml = Config_getBool("GENERATE_HTML"); - bool generateLatex = Config_getBool("GENERATE_LATEX"); - bool generateMan = Config_getBool("GENERATE_MAN"); - bool generateRtf = Config_getBool("GENERATE_RTF"); + bool generateHtml = Config_getBool(GENERATE_HTML); + bool generateLatex = Config_getBool(GENERATE_LATEX); + bool generateMan = Config_getBool(GENERATE_MAN); + bool generateRtf = Config_getBool(GENERATE_RTF); g_outputList = new OutputList(TRUE); - if (generateHtml) + if (generateHtml) { g_outputList->add(new HtmlGenerator); HtmlGenerator::init(); // add HTML indexers that are enabled - bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP"); - bool generateEclipseHelp = Config_getBool("GENERATE_ECLIPSEHELP"); - bool generateQhp = Config_getBool("GENERATE_QHP"); - bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - bool generateDocSet = Config_getBool("GENERATE_DOCSET"); + bool generateHtmlHelp = Config_getBool(GENERATE_HTMLHELP); + bool generateEclipseHelp = Config_getBool(GENERATE_ECLIPSEHELP); + bool generateQhp = Config_getBool(GENERATE_QHP); + bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + bool generateDocSet = Config_getBool(GENERATE_DOCSET); if (generateEclipseHelp) Doxygen::indexList->addIndex(new EclipseHelp); if (generateHtmlHelp) Doxygen::indexList->addIndex(new HtmlHelp); if (generateQhp) Doxygen::indexList->addIndex(new Qhp); @@ -11420,7 +11431,7 @@ void generateOutput() Doxygen::indexList->initialize(); HtmlGenerator::writeTabData(); } - if (generateLatex) + if (generateLatex) { g_outputList->add(new LatexGenerator); LatexGenerator::init(); @@ -11435,31 +11446,31 @@ void generateOutput() g_outputList->add(new RTFGenerator); RTFGenerator::init(); } - if (Config_getBool("USE_HTAGS")) + if (Config_getBool(USE_HTAGS)) { Htags::useHtags = TRUE; - QCString htmldir = Config_getString("HTML_OUTPUT"); + QCString htmldir = Config_getString(HTML_OUTPUT); if (!Htags::execute(htmldir)) err("USE_HTAGS is YES but htags(1) failed. \n"); if (!Htags::loadFilemap(htmldir)) err("htags(1) ended normally but failed to load the filemap. \n"); } - + /************************************************************************** * Generate documentation * **************************************************************************/ - if (generateHtml) writeDoxFont(Config_getString("HTML_OUTPUT")); - if (generateLatex) writeDoxFont(Config_getString("LATEX_OUTPUT")); - if (generateRtf) writeDoxFont(Config_getString("RTF_OUTPUT")); + if (generateHtml) writeDoxFont(Config_getString(HTML_OUTPUT)); + if (generateLatex) writeDoxFont(Config_getString(LATEX_OUTPUT)); + if (generateRtf) writeDoxFont(Config_getString(RTF_OUTPUT)); g_s.begin("Generating style sheet...\n"); //printf("writing style info\n"); g_outputList->writeStyleInfo(0); // write first part g_s.end(); - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); g_s.begin("Generating search indices...\n"); if (searchEngine && !serverBasedSearch && (generateHtml || g_useOutputTemplate)) @@ -11472,7 +11483,7 @@ void generateOutput() // what categories we find in this function. if (generateHtml && searchEngine) { - QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search"; + QCString searchDirName = Config_getString(HTML_OUTPUT)+"/search"; QDir searchDir(searchDirName); if (!searchDir.exists() && !searchDir.mkdir(searchDirName)) { @@ -11519,7 +11530,7 @@ void generateOutput() generateNamespaceDocs(); g_s.end(); - if (Config_getBool("GENERATE_LEGEND")) + if (Config_getBool(GENERATE_LEGEND)) { g_s.begin("Generating graph info page...\n"); writeGraphInfo(*g_outputList); @@ -11531,14 +11542,14 @@ void generateOutput() g_s.end(); if (Doxygen::formulaList->count()>0 && generateHtml - && !Config_getBool("USE_MATHJAX")) + && !Config_getBool(USE_MATHJAX)) { g_s.begin("Generating bitmaps for formulas in HTML...\n"); - Doxygen::formulaList->generateBitmaps(Config_getString("HTML_OUTPUT")); + Doxygen::formulaList->generateBitmaps(Config_getString(HTML_OUTPUT)); g_s.end(); } - if (Config_getBool("SORT_GROUP_NAMES")) + if (Config_getBool(SORT_GROUP_NAMES)) { Doxygen::groupSDict->sort(); GroupSDict::Iterator gli(*Doxygen::groupSDict); @@ -11548,7 +11559,7 @@ void generateOutput() gd->sortSubGroups(); } } - + if (g_outputList->count()>0) { writeIndexHierarchy(*g_outputList); @@ -11562,17 +11573,17 @@ void generateOutput() writeTagFile(); g_s.end(); - if (Config_getBool("DOT_CLEANUP")) + if (Config_getBool(DOT_CLEANUP)) { if (generateHtml) - removeDoxFont(Config_getString("HTML_OUTPUT")); - if (generateRtf) - removeDoxFont(Config_getString("RTF_OUTPUT")); - if (generateLatex) - removeDoxFont(Config_getString("LATEX_OUTPUT")); + removeDoxFont(Config_getString(HTML_OUTPUT)); + if (generateRtf) + removeDoxFont(Config_getString(RTF_OUTPUT)); + if (generateLatex) + removeDoxFont(Config_getString(LATEX_OUTPUT)); } - if (Config_getBool("GENERATE_XML")) + if (Config_getBool(GENERATE_XML)) { g_s.begin("Generating XML output...\n"); Doxygen::generatingXmlOutput=TRUE; @@ -11587,20 +11598,20 @@ void generateOutput() g_s.end(); } - if (Config_getBool("GENERATE_DOCBOOK")) + if (Config_getBool(GENERATE_DOCBOOK)) { g_s.begin("Generating Docbook output...\n"); generateDocbook(); g_s.end(); } - if (Config_getBool("GENERATE_AUTOGEN_DEF")) + if (Config_getBool(GENERATE_AUTOGEN_DEF)) { g_s.begin("Generating AutoGen DEF output...\n"); generateDEF(); g_s.end(); } - if (Config_getBool("GENERATE_PERLMOD")) + if (Config_getBool(GENERATE_PERLMOD)) { g_s.begin("Generating Perl module output...\n"); generatePerlMod(); @@ -11612,19 +11623,19 @@ void generateOutput() if (Doxygen::searchIndex->kind()==SearchIndexIntf::Internal) // write own search index { HtmlGenerator::writeSearchPage(); - Doxygen::searchIndex->write(Config_getString("HTML_OUTPUT")+"/search/search.idx"); + Doxygen::searchIndex->write(Config_getString(HTML_OUTPUT)+"/search/search.idx"); } else // write data for external search index { HtmlGenerator::writeExternalSearchPage(); - QCString searchDataFile = Config_getString("SEARCHDATA_FILE"); + QCString searchDataFile = Config_getString(SEARCHDATA_FILE); if (searchDataFile.isEmpty()) { searchDataFile="searchdata.xml"; } if (!portable_isAbsolutePath(searchDataFile)) { - searchDataFile.prepend(Config_getString("OUTPUT_DIRECTORY")+"/"); + searchDataFile.prepend(Config_getString(OUTPUT_DIRECTORY)+"/"); } Doxygen::searchIndex->write(searchDataFile); } @@ -11636,14 +11647,14 @@ void generateOutput() if (generateRtf) { g_s.begin("Combining RTF output...\n"); - if (!RTFGenerator::preProcessFileInplace(Config_getString("RTF_OUTPUT"),"refman.rtf")) + if (!RTFGenerator::preProcessFileInplace(Config_getString(RTF_OUTPUT),"refman.rtf")) { err("An error occurred during post-processing the RTF files!\n"); } g_s.end(); } - if (Config_getBool("HAVE_DOT")) + if (Config_getBool(HAVE_DOT)) { g_s.begin("Running dot...\n"); DotManager::instance()->run(); @@ -11651,28 +11662,33 @@ void generateOutput() } // copy static stuff - if (generateHtml) + if (generateHtml) { FTVHelp::generateTreeViewImages(); copyStyleSheet(); - copyLogo(); - copyExtraFiles("HTML_EXTRA_FILES","HTML_OUTPUT"); + copyLogo(Config_getString(HTML_OUTPUT)); + copyExtraFiles(Config_getList(HTML_EXTRA_FILES),"HTML_EXTRA_FILES",Config_getString(HTML_OUTPUT)); } - if (generateLatex) + if (generateLatex) { copyLatexStyleSheet(); - copyExtraFiles("LATEX_EXTRA_FILES","LATEX_OUTPUT"); + copyLogo(Config_getString(LATEX_OUTPUT)); + copyExtraFiles(Config_getList(LATEX_EXTRA_FILES),"LATEX_EXTRA_FILES",Config_getString(LATEX_OUTPUT)); + } + if (generateRtf) + { + copyLogo(Config_getString(RTF_OUTPUT)); } if (generateHtml && - Config_getBool("GENERATE_HTMLHELP") && - !Config_getString("HHC_LOCATION").isEmpty()) + Config_getBool(GENERATE_HTMLHELP) && + !Config_getString(HHC_LOCATION).isEmpty()) { g_s.begin("Running html help compiler...\n"); QString oldDir = QDir::currentDirPath(); - QDir::setCurrent(Config_getString("HTML_OUTPUT")); + QDir::setCurrent(Config_getString(HTML_OUTPUT)); portable_sysTimerStart(); - if (portable_system(Config_getString("HHC_LOCATION"), "index.hhp", Debug::isFlagSet(Debug::ExtCmd))) + if (portable_system(Config_getString(HHC_LOCATION), "index.hhp", Debug::isFlagSet(Debug::ExtCmd))!=1) { err("failed to run html help compiler on index.hhp\n"); } @@ -11681,8 +11697,8 @@ void generateOutput() g_s.end(); } if ( generateHtml && - Config_getBool("GENERATE_QHP") && - !Config_getString("QHG_LOCATION").isEmpty()) + Config_getBool(GENERATE_QHP) && + !Config_getString(QHG_LOCATION).isEmpty()) { g_s.begin("Running qhelpgenerator...\n"); QCString const qhpFileName = Qhp::getQhpFileName(); @@ -11690,9 +11706,9 @@ void generateOutput() QCString const args = QCString().sprintf("%s -o \"%s\"", qhpFileName.data(), qchFileName.data()); QString const oldDir = QDir::currentDirPath(); - QDir::setCurrent(Config_getString("HTML_OUTPUT")); + QDir::setCurrent(Config_getString(HTML_OUTPUT)); portable_sysTimerStart(); - if (portable_system(Config_getString("QHG_LOCATION"), args.data(), FALSE)) + if (portable_system(Config_getString(QHG_LOCATION), args.data(), FALSE)) { err("failed to run qhelpgenerator on index.qhp\n"); } @@ -11708,7 +11724,7 @@ void generateOutput() Doxygen::lookupCache->hits(), Doxygen::lookupCache->misses()); cacheParam = computeIdealCacheParam(Doxygen::lookupCache->misses()*2/3); // part of the cache is flushed, hence the 2/3 correction factor - if (cacheParam>Config_getInt("LOOKUP_CACHE_SIZE")) + if (cacheParam>Config_getInt(LOOKUP_CACHE_SIZE)) { msg("Note: based on cache misses the ideal setting for LOOKUP_CACHE_SIZE is %d at the cost of higher memory usage.\n",cacheParam); } @@ -11737,7 +11753,7 @@ void generateOutput() Doxygen::symbolStorage->close(); QDir thisDir; thisDir.remove(Doxygen::objDBFileName); - Config::deleteInstance(); + Config::deinit(); QTextCodec::deleteAllCodecs(); delete Doxygen::symbolMap; delete Doxygen::clangUsrMap; diff --git a/src/doxygen.h b/src/doxygen.h index 0d38d5b..b3467c1 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -1,13 +1,10 @@ /****************************************************************************** * - * - * - * * Copyright (C) 1997-2015 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 + * 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. * @@ -71,7 +68,7 @@ typedef QListIterator<QCString> StringListIterator; class StringDict : public QDict<QCString> { - public: + public: StringDict(uint size=17) : QDict<QCString>(size) {} virtual ~StringDict() {} }; @@ -79,7 +76,7 @@ class StringDict : public QDict<QCString> struct LookupInfo { LookupInfo() : classDef(0), typeDef(0) {} - LookupInfo(ClassDef *cd,MemberDef *td,QCString ts,QCString rt) + LookupInfo(ClassDef *cd,MemberDef *td,QCString ts,QCString rt) : classDef(cd), typeDef(td), templSpec(ts),resolvedType(rt) {} ClassDef *classDef; MemberDef *typeDef; @@ -121,8 +118,8 @@ class Doxygen static FormulaList *formulaList; static FormulaDict *formulaDict; static FormulaDict *formulaNameDict; - static StringDict tagDestinationDict; - static StringDict aliasDict; + static StringDict tagDestinationDict; + static StringDict aliasDict; static QIntDict<MemberGroupInfo> memGrpInfoDict; static QDict<void> expandAsDefinedDict; static NamespaceDef *globalScope; diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp index db5ed4f..bf150b4 100644 --- a/src/eclipsehelp.cpp +++ b/src/eclipsehelp.cpp @@ -64,11 +64,11 @@ void EclipseHelp::openedTag() void EclipseHelp::initialize() { // -- read path prefix from the configuration - //m_pathprefix = Config_getString("ECLIPSE_PATHPREFIX"); + //m_pathprefix = Config_getString(ECLIPSE_PATHPREFIX); //if (m_pathprefix.isEmpty()) m_pathprefix = "html/"; // -- open the contents file - QCString name = Config_getString("HTML_OUTPUT") + "/toc.xml"; + QCString name = Config_getString(HTML_OUTPUT) + "/toc.xml"; m_tocfile = new QFile(name); if (!m_tocfile->open(IO_WriteOnly)) { @@ -81,7 +81,7 @@ void EclipseHelp::initialize() //m_tocstream.setEncoding(FTextStream::UnicodeUTF8); // -- write the opening tag - QCString title = Config_getString("PROJECT_NAME"); + QCString title = Config_getString(PROJECT_NAME); if (title.isEmpty()) { title = "Doxygen generated documentation"; @@ -111,11 +111,11 @@ void EclipseHelp::finalize() m_tocfile->close(); delete m_tocfile; m_tocfile = 0; - QCString name = Config_getString("HTML_OUTPUT") + "/plugin.xml"; + QCString name = Config_getString(HTML_OUTPUT) + "/plugin.xml"; QFile pluginFile(name); if (pluginFile.open(IO_WriteOnly)) { - QString docId = Config_getString("ECLIPSE_DOC_ID"); + QString docId = Config_getString(ECLIPSE_DOC_ID); FTextStream t(&pluginFile); t << "<plugin name=\"" << docId << "\" id=\"" << docId << "\"" << endl; t << " version=\"1.0.0\" provider-name=\"Doxygen\">" << endl; diff --git a/src/entry.cpp b/src/entry.cpp index bf45f87..9d15ec8 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -216,8 +216,8 @@ void Entry::addSubEntry(Entry *current) void Entry::reset() { - static bool entryCallGraph = Config_getBool("CALL_GRAPH"); - static bool entryCallerGraph = Config_getBool("CALLER_GRAPH"); + static bool entryCallGraph = Config_getBool(CALL_GRAPH); + static bool entryCallerGraph = Config_getBool(CALLER_GRAPH); //printf("Entry::reset()\n"); name.resize(0); type.resize(0); diff --git a/src/filedef.cpp b/src/filedef.cpp index 2a09c41..2cfe37a 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -82,9 +82,8 @@ FileDef::FileDef(const char *p,const char *nm, m_path=p; m_filePath=m_path+nm; m_fileName=nm; - m_diskName=dn; - if (m_diskName.isEmpty()) m_diskName=nm; setReference(lref); + setDiskName(dn?dn:nm); m_classSDict = 0; m_includeList = 0; m_includeDict = 0; @@ -99,14 +98,14 @@ FileDef::FileDef(const char *p,const char *nm, m_isSource = guessSection(nm)==Entry::SOURCE_SEC; m_docname = nm; m_dir = 0; - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { m_docname.prepend(stripFromPath(m_path.copy())); } setLanguage(getLanguageFromFileName(name())); m_memberGroupSDict = 0; acquireFileVersion(); - m_subGrouping=Config_getBool("SUBGROUPING"); + m_subGrouping=Config_getBool(SUBGROUPING); } /*! destroy the file definition */ @@ -125,6 +124,22 @@ FileDef::~FileDef() delete m_memberGroupSDict; } +void FileDef::setDiskName(const QCString &name) +{ + if (isReference()) + { + m_outputDiskName = name; + m_inclDepFileName = name+"_incl"; + m_inclByDepFileName = name+"_dep_incl"; + } + else + { + m_outputDiskName = convertNameToFile(name); + m_inclDepFileName = convertNameToFile(name+"_incl"); + m_inclByDepFileName = convertNameToFile(name+"_dep_incl"); + } +} + /*! Compute the HTML anchor names for all members in the class */ void FileDef::computeAnchors() { @@ -172,8 +187,8 @@ void FileDef::findSectionsInDocumentation() bool FileDef::hasDetailedDescription() const { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().stripWhiteSpace().isEmpty() || // avail empty section (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef()) @@ -303,11 +318,11 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.endGroupHeader(); ol.startTextBlock(); - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) { ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE); } - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) && !documentation().isEmpty()) { ol.pushGeneratorState(); @@ -325,20 +340,20 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE); } //printf("Writing source ref for file %s\n",name().data()); - if (Config_getBool("SOURCE_BROWSER")) + if (Config_getBool(SOURCE_BROWSER)) { //if Latex enabled and LATEX_SOURCE_CODE isn't -> skip, bug_738548 ol.pushGeneratorState(); - if (ol.isEnabled(OutputGenerator::Latex) && !Config_getBool("LATEX_SOURCE_CODE")) + if (ol.isEnabled(OutputGenerator::Latex) && !Config_getBool(LATEX_SOURCE_CODE)) { ol.disable(OutputGenerator::Latex); } - if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool("RTF_SOURCE_CODE")) + if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool(RTF_SOURCE_CODE)) { ol.disable(OutputGenerator::RTF); } - ol.startParagraph(); + ol.startParagraph("definition"); QCString refText = theTranslator->trDefinedInSourceFile(); int fileMarkerPos = refText.find("@0"); if (fileMarkerPos!=-1) // should always pass this. @@ -349,6 +364,10 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.parseText(refText.right( refText.length()-fileMarkerPos-2)); // text right from marker 2 } + else + { + err("translation error: invalid marker in trDefinedInSourceFile()\n"); + } ol.endParagraph(); //Restore settings, bug_738548 ol.popGeneratorState(); @@ -359,7 +378,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) void FileDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); @@ -367,13 +386,17 @@ void FileDef::writeBriefDescription(OutputList &ol) if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); ol.writeString(" \n"); ol.enable(OutputGenerator::RTF); - if (Config_getBool("REPEAT_BRIEF") || + if (Config_getBool(REPEAT_BRIEF) || !documentation().isEmpty() ) { @@ -461,7 +484,7 @@ void FileDef::writeIncludeFiles(OutputList &ol) void FileDef::writeIncludeGraph(OutputList &ol) { - if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/) + if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDE_GRAPH)*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,FALSE); @@ -479,13 +502,13 @@ void FileDef::writeIncludeGraph(OutputList &ol) ol.enableAll(); ol.endTextBlock(TRUE); } - //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); + //incDepGraph.writeGraph(Config_getString(HTML_OUTPUT),fd->getOutputFileBase()); } } void FileDef::writeIncludedByGraph(OutputList &ol) { - if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/) + if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDED_BY_GRAPH)*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,TRUE); @@ -503,7 +526,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol) ol.enableAll(); ol.endTextBlock(TRUE); } - //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); + //incDepGraph.writeGraph(Config_getString(HTML_OUTPUT),fd->getOutputFileBase()); } } @@ -561,7 +584,7 @@ void FileDef::endMemberDeclarations(OutputList &ol) void FileDef::startMemberDocumentation(OutputList &ol) { - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.disable(OutputGenerator::Html); Doxygen::suppressDocWarnings = TRUE; @@ -570,7 +593,7 @@ void FileDef::startMemberDocumentation(OutputList &ol) void FileDef::endMemberDocumentation(OutputList &ol) { - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.enable(OutputGenerator::Html); Doxygen::suppressDocWarnings = FALSE; @@ -604,7 +627,7 @@ void FileDef::writeAuthorSection(OutputList &ol) ol.startGroupHeader(); ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME))); ol.popGeneratorState(); } @@ -653,11 +676,11 @@ void FileDef::writeSummaryLinks(OutputList &ol) */ void FileDef::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); //funcList->countDecMembers(); //QCString fn = name(); - //if (Config_getBool("FULL_PATH_NAMES")) + //if (Config_getBool(FULL_PATH_NAMES)) //{ // fn.prepend(stripFromPath(getPath().copy())); //} @@ -839,7 +862,7 @@ void FileDef::writeDocumentation(OutputList &ol) endFileWithNavPath(this,ol); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { MemberList *ml = getMemberList(MemberListType_allMembersList); if (ml) ml->sort(); @@ -867,7 +890,7 @@ void FileDef::writeMemberPages(OutputList &ol) void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { - static bool createSubDirs=Config_getBool("CREATE_SUBDIRS"); + static bool createSubDirs=Config_getBool(CREATE_SUBDIRS); ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); @@ -911,10 +934,10 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const /*! Write a source listing of this file to the output */ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); - static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); - static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); + static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE); + static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE); DevNullCodeDocInterface devNullIntf; QCString title = m_docname; if (!m_fileVersion.isEmpty()) @@ -967,7 +990,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu) (void)sameTu; (void)filesInSameTu; #if USE_LIBCLANG - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (clangAssistedParsing && (getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC)) { @@ -1026,12 +1049,12 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu) void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu) { - static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); + static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES); DevNullCodeDocInterface devNullIntf; (void)sameTu; (void)filesInSameTu; #if USE_LIBCLANG - static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); + static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING); if (clangAssistedParsing && (getLanguage()==SrcLangExt_Cpp || getLanguage()==SrcLangExt_ObjC)) { @@ -1158,7 +1181,7 @@ void FileDef::insertClass(ClassDef *cd) { m_classSDict = new ClassSDict(17); } - if (Config_getBool("SORT_BRIEF_DOCS")) + if (Config_getBool(SORT_BRIEF_DOCS)) { m_classSDict->inSort(cd->name(),cd); } @@ -1179,7 +1202,7 @@ void FileDef::insertNamespace(NamespaceDef *nd) { m_namespaceSDict = new NamespaceSDict; } - if (Config_getBool("SORT_BRIEF_DOCS")) + if (Config_getBool(SORT_BRIEF_DOCS)) { m_namespaceSDict->inSort(nd->name(),nd); } @@ -1192,7 +1215,7 @@ void FileDef::insertNamespace(NamespaceDef *nd) QCString FileDef::name() const { - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) return m_fileName; else return Definition::name(); @@ -1395,8 +1418,8 @@ bool FileDef::isIncluded(const QCString &name) const bool FileDef::generateSourceFile() const { - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); - static bool verbatimHeaders = Config_getBool("VERBATIM_HEADERS"); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + static bool verbatimHeaders = Config_getBool(VERBATIM_HEADERS); QCString extension = name().right(4); return !isReference() && (sourceBrowser || @@ -1736,7 +1759,7 @@ bool FileDef::isDocumentationFile() const void FileDef::acquireFileVersion() { - QCString vercmd = Config_getString("FILE_VERSION_FILTER"); + QCString vercmd = Config_getString(FILE_VERSION_FILTER); if (!vercmd.isEmpty() && !m_filePath.isEmpty() && m_filePath!="generated" && m_filePath!="graph_legend") { @@ -1769,17 +1792,22 @@ void FileDef::acquireFileVersion() QCString FileDef::getSourceFileBase() const -{ +{ if (Htags::useHtags) { return Htags::path2URL(m_filePath); } else { - return convertNameToFile(m_diskName)+"_source"; + return m_outputDiskName+"_source"; } } +QCString FileDef::getOutputFileBase() const +{ + return m_outputDiskName; +} + /*! Returns the name of the verbatim copy of this file (if any). */ QCString FileDef::includeName() const { @@ -1806,8 +1834,8 @@ MemberList *FileDef::createMemberList(MemberListType lt) void FileDef::addMemberToList(MemberListType lt,MemberDef *md) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); - static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); + static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); MemberList *ml = createMemberList(lt); ml->setNeedsSorting( ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || @@ -1852,7 +1880,7 @@ MemberList *FileDef::getMemberList(MemberListType lt) const void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title) { - static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool optVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL); MemberList * ml = getMemberList(lt); if (ml) { @@ -1876,8 +1904,8 @@ void FileDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QC bool FileDef::isLinkableInProject() const { - static bool showFiles = Config_getBool("SHOW_FILES"); - return hasDocumentation() && !isReference() && showFiles; + static bool showFiles = Config_getBool(SHOW_FILES); + return hasDocumentation() && !isReference() && (showFiles || isLinkableViaGroup()); } static void getAllIncludeFilesRecursively( @@ -1916,3 +1944,14 @@ QCString FileDef::fileVersion() const { return m_fileVersion; } + +QCString FileDef::includeDependencyGraphFileName() const +{ + return m_inclDepFileName; +} + +QCString FileDef::includedByDependencyGraphFileName() const +{ + return m_inclByDepFileName; +} + diff --git a/src/filedef.h b/src/filedef.h index 712128c..9167249 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -63,8 +63,6 @@ struct IncludeInfo */ class FileDef : public Definition { - friend class FileName; - public: //enum FileType { Source, Header, Unknown }; @@ -80,17 +78,18 @@ class FileDef : public Definition QCString displayName(bool=TRUE) const { return name(); } QCString fileName() const { return m_fileName; } - QCString getOutputFileBase() const - { return convertNameToFile(m_diskName); } + QCString getOutputFileBase() const; QCString anchor() const { return QCString(); } - QCString getFileBase() const { return m_diskName; } - QCString getSourceFileBase() const; /*! Returns the name of the verbatim copy of this file (if any). */ QCString includeName() const; + + QCString includeDependencyGraphFileName() const; + + QCString includedByDependencyGraphFileName() const; /*! Returns the absolute path including the file name. */ QCString absFilePath() const { return m_filePath; } @@ -153,8 +152,8 @@ class FileDef : public Definition void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu); void parseSource(bool sameTu,QStrList &filesInSameTu); void finishParsing(); + void setDiskName(const QCString &name); - friend void generatedFileNames(); void insertMember(MemberDef *md); void insertClass(ClassDef *cd); void insertNamespace(NamespaceDef *nd); @@ -219,7 +218,9 @@ class FileDef : public Definition SDict<Definition> *m_usingDeclList; QCString m_path; QCString m_filePath; - QCString m_diskName; + QCString m_inclDepFileName; + QCString m_inclByDepFileName; + QCString m_outputDiskName; QCString m_fileName; QCString m_docname; QIntDict<Definition> *m_srcDefDict; diff --git a/src/filename.cpp b/src/filename.cpp index aa51249..ae3b596 100644 --- a/src/filename.cpp +++ b/src/filename.cpp @@ -49,7 +49,7 @@ void FileName::generateDiskNames() { // name if unique, so diskname is simply the name //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data()); - fd->m_diskName=name; + fd->setDiskName(name); } } else if (count>1) // multiple occurrences of the same file name @@ -62,21 +62,22 @@ void FileName::generateDiskNames() for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { } if (fd) { - char c=fd->m_path.at(i); + char c=fd->getPath().at(i); if (c=='/') j=i; // remember last position of dirname ++it; while ((fd=it.current()) && !found) { + QCString path = fd->getPath(); if (!fd->isReference()) { //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data()); - if (i==(int)fd->m_path.length()) + if (i==(int)path.length()) { //warning("Input file %s found multiple times!\n" // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data()); found=TRUE; } - else if (fd->m_path[i]!=c) + else if (path[i]!=c) { found=TRUE; } @@ -91,10 +92,11 @@ void FileName::generateDiskNames() //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data()); if (!fd->isReference()) { - QCString prefix = fd->m_path.right(fd->m_path.length()-j-1); + QCString path = fd->getPath(); + QCString prefix = path.right(path.length()-j-1); fd->setName(prefix+name); - //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data()); - fd->m_diskName=prefix+name; + //printf("!!!!!!!! non unique disk name=%s:%s\n",prefix.data(),name.data()); + fd->setDiskName(prefix+name); } } } @@ -130,7 +132,7 @@ void FileNameList::generateDiskNames() int FileNameList::compareValues(const FileName *f1, const FileName *f2) const { - return Config_getBool("FULL_PATH_NAMES") ? + return Config_getBool(FULL_PATH_NAMES) ? qstricmp(f1->fullName(),f2->fullName()) : qstricmp(f1->fileName(),f2->fileName()); } @@ -142,7 +144,7 @@ FileNameListIterator::FileNameListIterator(const FileNameList &fnlist) : static bool getCaseSenseNames() { - static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); + static bool caseSenseNames = Config_getBool(CASE_SENSE_NAMES); return caseSenseNames; } diff --git a/src/fileparser.cpp b/src/fileparser.cpp index b54b243..6883622 100644 --- a/src/fileparser.cpp +++ b/src/fileparser.cpp @@ -22,7 +22,7 @@ void FileParser::parseCode(CodeOutputInterface &codeOutIntf, SrcLangExt, // lang bool, // isExampleBlock const char *, // exampleName - FileDef *, // fileDef + FileDef * fileDef, int startLine, int endLine, bool, // inlineFragment @@ -40,8 +40,8 @@ void FileParser::parseCode(CodeOutputInterface &codeOutIntf, 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.startCodeLine(fileDef != 0 && showLineNumbers); + if (fileDef != 0 && showLineNumbers) codeOutIntf.writeLineNumber(0,0,0,lineNr); if (!lineStr.isEmpty()) codeOutIntf.codify(lineStr); codeOutIntf.endCodeLine(); lineNr++; diff --git a/src/formula.cpp b/src/formula.cpp index 182ddaa..6fe617d 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -67,15 +67,10 @@ void FormulaList::generateBitmaps(const char *path) if (f.open(IO_WriteOnly)) { FTextStream t(&f); - if (Config_getBool("LATEX_BATCHMODE")) t << "\\batchmode" << endl; + if (Config_getBool(LATEX_BATCHMODE)) t << "\\batchmode" << endl; t << "\\documentclass{article}" << endl; t << "\\usepackage{epsfig}" << endl; // for those who want to include images - const char *s=Config_getList("EXTRA_PACKAGES").first(); - while (s) - { - t << "\\usepackage{" << s << "}\n"; - s=Config_getList("EXTRA_PACKAGES").next(); - } + writeExtraLatexPackages(t); t << "\\pagestyle{empty}" << endl; t << "\\begin{document}" << endl; int page=0; @@ -101,7 +96,7 @@ void FormulaList::generateBitmaps(const char *path) { //printf("Running latex...\n"); //system("latex _formulas.tex </dev/null >/dev/null"); - QCString latexCmd = Config_getString("LATEX_CMD_NAME"); + QCString latexCmd = Config_getString(LATEX_CMD_NAME); if (latexCmd.isEmpty()) latexCmd="latex"; portable_sysTimerStart(); if (portable_system(latexCmd,"_formulas.tex")!=0) @@ -173,7 +168,7 @@ void FormulaList::generateBitmaps(const char *path) // scale the image so that it is four times larger than needed. // and the sizes are a multiple of four. double scaleFactor = 16.0/3.0; - int zoomFactor = Config_getInt("FORMULA_FONTSIZE"); + int zoomFactor = Config_getInt(FORMULA_FONTSIZE); if (zoomFactor<8 || zoomFactor>50) zoomFactor=10; scaleFactor *= zoomFactor/10.0; int gx = (((int)((x2-x1)*scaleFactor))+3)&~1; diff --git a/src/fortrancode.l b/src/fortrancode.l index 82e78c1..e002b57 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -24,6 +24,9 @@ - references to variables **/ %option never-interactive +%option case-insensitive +%option prefix="fortrancodeYY" + %{ /* @@ -356,7 +359,7 @@ static void codifyLines(QCString str) static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d,const char *text) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); @@ -484,7 +487,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam if (mn) // name is known { - MemberListIterator mli(*mn); + MemberNameIterator mli(*mn); for (mli.toFirst();(md=mli.current());++mli) // all found functions with given name { FileDef *fd=md->getFileDef(); @@ -925,7 +928,12 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I startScope(); generateLink(*g_code,yytext); } -<Subprog>"(".* { // ignore rest of line +<Subprog>"result"/{BS}"("[^)]*")" { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } +<Subprog>"("[^)]*")" { // ignore rest of line codifyLines(yytext); } <Subprog,Subprogend>"\n" { codifyLines(yytext); @@ -1086,7 +1094,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I } <DocBlock>"\n" { // comment block ends at the end of this line // remove special comment (default config) - if (Config_getBool("STRIP_CODE_COMMENTS")) + if (Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr+=((QCString)docBlock).contains('\n'); g_yyLineNr+=1; @@ -1123,6 +1131,16 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I codifyLines(yytext); endFontClass(); } +<*>"assignment"/{BS}"("{BS}"="{BS}")" { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } +<*>"operator"/{BS}"("[^)]*")" { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } /*------ preprocessor --------------------------------------------*/ <Start>"#".*\n { @@ -1206,7 +1224,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I } <*><<EOF>> { if (YY_START == DocBlock) { - if (!Config_getBool("STRIP_CODE_COMMENTS")) + if (!Config_getBool(STRIP_CODE_COMMENTS)) { startFontClass("comment"); codifyLines(docBlock); @@ -1248,16 +1266,17 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri g_needsTermination = FALSE; g_searchCtx = searchCtx; g_collectXRefs = collectXRefs; - if (endLine!=-1) - g_inputLines = endLine+1; - else - g_inputLines = countLines(); - if (startLine!=-1) g_yyLineNr = startLine; else g_yyLineNr = 1; + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + + g_exampleBlock = exBlock; g_exampleName = exName; g_sourceFileDef = fd; diff --git a/src/fortranscanner.l b/src/fortranscanner.l index bd1fe83..2f5567a 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -38,6 +38,9 @@ * - Must track yyLineNr when using REJECT, unput() or similar commands. */ %option never-interactive +%option case-insensitive +%option prefix="fortranscannerYY" + %{ #include <stdio.h> @@ -214,7 +217,7 @@ static bool endScope(Entry *scope, bool isGlobalRoot=FALSE); //static bool isTypeName(QCString name); static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root); static int getAmpersandAtTheStart(const char *buf, int length); -static int getAmpOrExclAtTheEnd(const char *buf, int length); +static int getAmpOrExclAtTheEnd(const char *buf, int length, char ch); static void truncatePrepass(int index); static void pushBuffer(QCString &buffer); static void popBuffer(); @@ -322,13 +325,19 @@ SCOPENAME ({ID}{BS}"::"{BS})* /*-----------------------------------------------------------------------------------*/ +<Prepass>^{BS}[&]*{BS}!.*\n { /* skip lines with just comment. Note code was in free format or has been converted to it */ + lineCountPrepass ++; + } +<Prepass>^{BS}\n { /* skip empty lines */ + lineCountPrepass ++; + } <*>^.*\n { // prepass: look for line continuations functionLine = FALSE; DBG_CTX((stderr, "---%s", yytext)); int indexStart = getAmpersandAtTheStart(yytext, (int)yyleng); - int indexEnd = getAmpOrExclAtTheEnd(yytext, (int)yyleng); + int indexEnd = getAmpOrExclAtTheEnd(yytext, (int)yyleng, '\0'); if (indexEnd>=0 && yytext[indexEnd]!='&') //we are only interested in amp indexEnd=-1; @@ -686,9 +695,12 @@ private { // in a scope of their own, even if multiple // are group in one INTERFACE/END INTERFACE block. // - last_entry->endBodyLine = yyLineNr - 1; if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC) + { endScope(current_root); + last_entry->endBodyLine = yyLineNr - 1; + } + current_root->endBodyLine = yyLineNr - 1; if (!endScope(current_root)) yyterminate(); @@ -1071,7 +1083,7 @@ private { current->docLine = yyLineNr; docBlockJavaStyle = FALSE; docBlock.resize(0); - docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF"); + docBlockJavaStyle = Config_getBool(JAVADOC_AUTOBRIEF); startCommentBlock(TRUE); yy_push_state(DocBackLine); } @@ -1126,7 +1138,7 @@ private { docBlockJavaStyle = FALSE; if (YY_START==SubprogBody) docBlockInBody = TRUE; docBlock.resize(0); - docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF"); + docBlockJavaStyle = Config_getBool(JAVADOC_AUTOBRIEF); startCommentBlock(TRUE); BEGIN(DocBlock); //cout << "start DocBlock " << endl; @@ -1273,13 +1285,15 @@ static int getAmpersandAtTheStart(const char *buf, int length) } /* Returns ampersand index, comment start index or -1 if neither exist.*/ -static int getAmpOrExclAtTheEnd(const char *buf, int length) +static int getAmpOrExclAtTheEnd(const char *buf, int length, char ch) { // Avoid ampersands in string and comments int parseState = Start; char quoteSymbol = 0; int ampIndex = -1; int commentIndex = -1; + quoteSymbol = ch; + if (ch != '\0') parseState = String; for(int i=0; i<length && parseState!=Comment; i++) { @@ -1410,11 +1424,14 @@ static const char* prepassFixedForm(const char* contents) int column=0; int prevLineLength=0; int prevLineAmpOrExclIndex=-1; + char prevQuote = '\0'; + char thisQuote = '\0'; bool emptyLabel=TRUE; bool commented=FALSE; bool inSingle=FALSE; bool inDouble=FALSE; bool inBackslash=FALSE; + bool fullCommentLine=TRUE; int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation) char* newContents = (char*)malloc(newContentsSize); @@ -1428,12 +1445,22 @@ static const char* prepassFixedForm(const char* contents) char c = contents[i]; switch(c) { case '\n': - prevLineLength=column; - prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength); + if (!fullCommentLine) + { + prevLineLength=column; + prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength,prevQuote); + if (prevLineAmpOrExclIndex == -1) prevLineAmpOrExclIndex = column - 1; + } + else + { + prevLineLength+=column; + } + fullCommentLine=TRUE; column=0; emptyLabel=TRUE; commented=FALSE; newContents[j]=c; + prevQuote = thisQuote; break; case ' ': case '\t': @@ -1455,7 +1482,8 @@ static const char* prepassFixedForm(const char* contents) case '\\': if ((column <= fixedCommentAfter) && (column!=6) && !commented) { - // we have some special cases in respect to strings and exscaped string characters + // we have some special cases in respect to strings and escaped string characters + fullCommentLine=FALSE; newContents[j]=c; if (c == '\\') { @@ -1464,12 +1492,22 @@ static const char* prepassFixedForm(const char* contents) } else if (c == '\'') { - if (!inDouble) inSingle = !inSingle; + if (!inDouble) + { + inSingle = !inSingle; + if (inSingle) thisQuote = c; + else thisQuote = '\0'; + } break; } else if (c == '"') { - if (!inSingle) inDouble = !inDouble; + if (!inSingle) + { + inDouble = !inDouble; + if (inDouble) thisQuote = c; + else thisQuote = '\0'; + } break; } } @@ -1494,6 +1532,7 @@ static const char* prepassFixedForm(const char* contents) } else { + if (!commented) fullCommentLine=FALSE; newContents[j]=c; } break; @@ -1501,6 +1540,7 @@ static const char* prepassFixedForm(const char* contents) // fallthrough default: if(column==6 && emptyLabel) { // continuation + if (!commented) fullCommentLine=FALSE; if (c != '0') { // 0 not allowed as continuation character, see f95 standard paragraph 3.3.2.3 newContents[j]=' '; @@ -1514,6 +1554,7 @@ static const char* prepassFixedForm(const char* contents) } else { newContents[j]=c; // , just handle like space } + prevLineLength=0; } else if ((column > fixedCommentAfter) && !commented) { // first non commented non blank character after position fixedCommentAfter if (c != '!') { @@ -1524,6 +1565,7 @@ static const char* prepassFixedForm(const char* contents) newContents[j]=c; commented = TRUE; } else { + if (!commented) fullCommentLine=FALSE; newContents[j]=c; emptyLabel=FALSE; } @@ -2249,7 +2291,7 @@ static void startCommentBlock(bool brief) static void handleCommentBlock(const QCString &doc,bool brief) { bool needsEntry = FALSE; - static bool hideInBodyDocs = Config_getBool("HIDE_IN_BODY_DOCS"); + static bool hideInBodyDocs = Config_getBool(HIDE_IN_BODY_DOCS); int position=0; if (docBlockInBody && hideInBodyDocs) { @@ -2473,7 +2515,11 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt, Fortra //printf("---strlen=%d\n", strlen(fileBuf)); //clock_t start=clock(); + //printf("Input fixed form string:\n%s\n", fileBuf); + //printf("===========================\n"); inputString = prepassFixedForm(fileBuf); + //printf("Resulting free form string:\n%s\n", inputString); + //printf("===========================\n"); //clock_t end=clock(); //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC); diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index a70e243..7249574 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -490,7 +490,7 @@ static QCString convertFileId2Var(const QCString &fileId) static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t, const QList<FTVNode> &nl,int level,bool &first) { - static QCString htmlOutput = Config_getString("HTML_OUTPUT"); + static QCString htmlOutput = Config_getString(HTML_OUTPUT); QCString indentStr; indentStr.fill(' ',level*2); bool found=FALSE; @@ -579,7 +579,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t, static void generateJSNavTree(const QList<FTVNode> &nodeList) { - QCString htmlOutput = Config_getString("HTML_OUTPUT"); + QCString htmlOutput = Config_getString(HTML_OUTPUT); QFile f(htmlOutput+"/navtreedata.js"); NavIndexEntryList navIndex; if (f.open(IO_WriteOnly) /*&& fidx.open(IO_WriteOnly)*/) @@ -591,7 +591,7 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList) t << "var NAVTREE =" << endl; t << "[" << endl; t << " [ "; - QCString &projName = Config_getString("PROJECT_NAME"); + QCString &projName = Config_getString(PROJECT_NAME); if (projName.isEmpty()) { if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty()) // Use title of main page as root @@ -689,20 +689,18 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList) // new style images void FTVHelp::generateTreeViewImages() { - QCString dname=Config_getString("HTML_OUTPUT"); + QCString dname=Config_getString(HTML_OUTPUT); const ResourceMgr &rm = ResourceMgr::instance(); rm.copyResource("doc.luma",dname); rm.copyResource("folderopen.luma",dname); rm.copyResource("folderclosed.luma",dname); - rm.copyResource("arrowdown.luma",dname); - rm.copyResource("arrowright.luma",dname); rm.copyResource("splitbar.lum",dname); } // new style scripts void FTVHelp::generateTreeViewScripts() { - QCString htmlOutput = Config_getString("HTML_OUTPUT"); + QCString htmlOutput = Config_getString(HTML_OUTPUT); // generate navtree.js & navtreeindex.js generateJSNavTree(m_indentNodes[0]); @@ -715,7 +713,7 @@ void FTVHelp::generateTreeViewScripts() // write tree inside page void FTVHelp::generateTreeViewInline(FTextStream &t) { - int preferredNumEntries = Config_getInt("HTML_INDEX_NUM_ENTRIES"); + int preferredNumEntries = Config_getInt(HTML_INDEX_NUM_ENTRIES); t << "<div class=\"directory\">\n"; QListIterator<FTVNode> li(m_indentNodes[0]); FTVNode *n; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 7a74c65..ccfa0df 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -61,7 +61,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, } else { - fileName = (QCString)"group_"+na; + fileName = convertNameToFile(QCString("group_")+na); } setGroupTitle( t ); memberGroupSDict = new MemberGroupSDict; @@ -71,7 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, visited = 0; groupScope = 0; - m_subGrouping=Config_getBool("SUBGROUPING"); + m_subGrouping=Config_getBool(SUBGROUPING); } GroupDef::~GroupDef() @@ -137,7 +137,7 @@ void GroupDef::findSectionsInDocumentation() void GroupDef::addFile(const FileDef *def) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); if (def->isHidden()) return; updateLanguage(def); if (sortBriefDocs) @@ -148,7 +148,7 @@ void GroupDef::addFile(const FileDef *def) bool GroupDef::addClass(const ClassDef *cd) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); if (cd->isHidden()) return FALSE; updateLanguage(cd); QCString qn = cd->name(); @@ -196,7 +196,7 @@ bool GroupDef::addClass(const ClassDef *cd) bool GroupDef::addNamespace(const NamespaceDef *def) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); if (def->isHidden()) return FALSE; updateLanguage(def); if (namespaceSDict->find(def->name())==0) @@ -213,7 +213,7 @@ bool GroupDef::addNamespace(const NamespaceDef *def) void GroupDef::addDir(const DirDef *def) { if (def->isHidden()) return; - if (Config_getBool("SORT_BRIEF_DOCS")) + if (Config_getBool(SORT_BRIEF_DOCS)) dirList->inSort(def); else dirList->append(def); @@ -532,7 +532,7 @@ bool GroupDef::findGroup(const GroupDef *def) const void GroupDef::addGroup(const GroupDef *def) { //printf("adding group `%s' to group `%s'\n",def->name().data(),name().data()); - //if (Config_getBool("SORT_MEMBER_DOCS")) + //if (Config_getBool(SORT_MEMBER_DOCS)) // groupList->inSort(def); //else groupList->append(def); @@ -707,10 +707,11 @@ void GroupDef::writeTagFile(FTextStream &tagFile) void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) { - if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) || !documentation().isEmpty() || !inbodyDocumentation().isEmpty() ) { + ol.pushGeneratorState(); if (pageDict->count()!=countMembers()) // not only pages -> classical layout { ol.pushGeneratorState(); @@ -721,18 +722,23 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.disableAllBut(OutputGenerator::Html); ol.writeAnchor(0,"details"); ol.popGeneratorState(); - ol.startGroupHeader(); - ol.parseText(title); - ol.endGroupHeader(); } + else + { + ol.disableAllBut(OutputGenerator::Man); // always print title for man page + } + ol.startGroupHeader(); + ol.parseText(title); + ol.endGroupHeader(); + ol.popGeneratorState(); // repeat brief description - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) { ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE); } // write separator between brief and details - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) && !documentation().isEmpty()) { ol.pushGeneratorState(); @@ -762,20 +768,24 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) void GroupDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); ol.writeString(" \n"); ol.enable(OutputGenerator::RTF); - if (Config_getBool("REPEAT_BRIEF") || + if (Config_getBool(REPEAT_BRIEF) || !documentation().isEmpty() ) { @@ -789,11 +799,12 @@ void GroupDef::writeBriefDescription(OutputList &ol) } delete rootNode; } + ol.writeSynopsis(); } void GroupDef::writeGroupGraph(OutputList &ol) { - if (Config_getBool("HAVE_DOT") /*&& Config_getBool("GROUP_GRAPHS")*/ ) + if (Config_getBool(HAVE_DOT) /*&& Config_getBool(GROUP_GRAPHS)*/ ) { DotGroupCollaboration graph(this); if (!graph.isTrivial()) @@ -831,7 +842,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title) ol.insertMemberAlign(); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); ol.endMemberItem(); - if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { ol.startMemberDescription(fd->getOutputFileBase()); ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE); @@ -868,7 +879,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); - if (Config_getBool("SORT_GROUP_NAMES")) + if (Config_getBool(SORT_GROUP_NAMES)) { groupList->sort(); } @@ -886,7 +897,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) ol.insertMemberAlign(); ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle()); ol.endMemberItem(); - if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!gd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { ol.startMemberDescription(gd->getOutputFileBase()); ol.generateDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE); @@ -919,7 +930,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title) ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); - if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { ol.startMemberDescription(dd->getOutputFileBase()); ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE); @@ -995,7 +1006,7 @@ void GroupDef::endMemberDeclarations(OutputList &ol) void GroupDef::startMemberDocumentation(OutputList &ol) { //printf("** GroupDef::startMemberDocumentation()\n"); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); @@ -1006,7 +1017,7 @@ void GroupDef::startMemberDocumentation(OutputList &ol) void GroupDef::endMemberDocumentation(OutputList &ol) { //printf("** GroupDef::endMemberDocumentation()\n"); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.popGeneratorState(); Doxygen::suppressDocWarnings = FALSE; @@ -1021,7 +1032,7 @@ void GroupDef::writeAuthorSection(OutputList &ol) ol.startGroupHeader(); ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME))); ol.popGeneratorState(); } @@ -1072,7 +1083,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol) void GroupDef::writeDocumentation(OutputList &ol) { - //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + //static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); ol.pushGeneratorState(); startFile(ol,getOutputFileBase(),name(),title,HLI_Modules); @@ -1091,7 +1102,6 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Man); ol.endTitleHead(getOutputFileBase(),name()); - ol.parseText(title); ol.popGeneratorState(); ol.endHeaderSection(); ol.startContents(); @@ -1234,7 +1244,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { allMemberList->sort(); writeMemberPages(ol); @@ -1262,7 +1272,7 @@ void GroupDef::writeMemberPages(OutputList &ol) void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { - static bool createSubDirs=Config_getBool("CREATE_SUBDIRS"); + static bool createSubDirs=Config_getBool(CREATE_SUBDIRS); ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); @@ -1509,16 +1519,9 @@ void addExampleToGroups(Entry *root,PageDef *eg) } } -QCString GroupDef::getOutputFileBase() const -{ - if (isReference()) - { - return fileName; - } - else - { - return convertNameToFile(fileName); - } +QCString GroupDef::getOutputFileBase() const +{ + return fileName; } void GroupDef::addListReferences() @@ -1571,8 +1574,8 @@ MemberList *GroupDef::createMemberList(MemberListType lt) void GroupDef::addMemberToList(MemberListType lt,MemberDef *md) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); - static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); + static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); MemberList *ml = createMemberList(lt); ml->setNeedsSorting( ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || @@ -1606,7 +1609,7 @@ MemberList *GroupDef::getMemberList(MemberListType lt) const void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title) { - static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL); MemberList * ml = getMemberList(lt); if (optimizeVhdl && ml) @@ -1659,7 +1662,7 @@ void GroupDef::updateLanguage(const Definition *d) bool GroupDef::hasDetailedDescription() const { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty()); } diff --git a/src/htags.cpp b/src/htags.cpp index 460d54d..77b1f8d 100644 --- a/src/htags.cpp +++ b/src/htags.cpp @@ -36,12 +36,12 @@ static QDict<QCString> g_symbolDict(10007); */ bool Htags::execute(const QCString &htmldir) { - static QStrList &inputSource = Config_getList("INPUT"); - static bool quiet = Config_getBool("QUIET"); - static bool warnings = Config_getBool("WARNINGS"); - static QCString htagsOptions = ""; //Config_getString("HTAGS_OPTIONS"); - static QCString projectName = Config_getString("PROJECT_NAME"); - static QCString projectNumber = Config_getString("PROJECT_NUMBER"); + static QStrList &inputSource = Config_getList(INPUT); + static bool quiet = Config_getBool(QUIET); + static bool warnings = Config_getBool(WARNINGS); + static QCString htagsOptions = ""; //Config_getString(HTAGS_OPTIONS); + static QCString projectName = Config_getString(PROJECT_NAME); + static QCString projectNumber = Config_getString(PROJECT_NUMBER); QCString cwd = QDir::currentDirPath().utf8(); if (inputSource.isEmpty()) diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index d1e4ffb..d1fb06c 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -42,7 +42,7 @@ static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"}; static QCString convertIndexWordToAnchor(const QString &word) { static char hex[] = "0123456789abcdef"; - QCString result; + QCString result="a"; const char *str = word.data(); unsigned char c; if (str) @@ -50,12 +50,11 @@ static QCString convertIndexWordToAnchor(const QString &word) while ((c = *str++)) { if ((c >= 'a' && c <= 'z') || // ALPHA - (c >= 'A' && c <= 'A') || // ALPHA + (c >= 'A' && c <= 'Z') || // ALPHA (c >= '0' && c <= '9') || // DIGIT c == '-' || c == '.' || - c == '_' || - c == '~' + c == '_' ) { result += c; @@ -63,7 +62,7 @@ static QCString convertIndexWordToAnchor(const QString &word) else { char enc[4]; - enc[0] = '%'; + enc[0] = ':'; enc[1] = hex[(c & 0xf0) >> 4]; enc[2] = hex[c & 0xf]; enc[3] = 0; @@ -410,7 +409,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) forceEndParagraph(s); fileName.sprintf("%s%d%s", - (Config_getString("HTML_OUTPUT")+"/inline_dotgraph_").data(), + (Config_getString(HTML_OUTPUT)+"/inline_dotgraph_").data(), dotindex++, ".dot" ); @@ -424,14 +423,14 @@ void HtmlDocVisitor::visit(DocVerbatim *s) file.writeBlock( s->text(), s->text().length() ); file.close(); - m_t << "<div align=\"center\">" << endl; + m_t << "<div class=\"dotgraph\">" << endl; writeDotFile(fileName,s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); visitPostCaption(m_t, s); m_t << "</div>" << endl; - if (Config_getBool("DOT_CLEANUP")) file.remove(); + if (Config_getBool(DOT_CLEANUP)) file.remove(); } forceStartParagraph(s); } @@ -444,7 +443,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) QCString baseName(4096); baseName.sprintf("%s%d", - (Config_getString("HTML_OUTPUT")+"/inline_mscgraph_").data(), + (Config_getString(HTML_OUTPUT)+"/inline_mscgraph_").data(), mscindex++ ); QFile file(baseName+".msc"); @@ -461,14 +460,14 @@ void HtmlDocVisitor::visit(DocVerbatim *s) file.writeBlock( text, text.length() ); file.close(); - m_t << "<div align=\"center\">" << endl; + m_t << "<div class=\"mscgraph\">" << endl; writeMscFile(baseName+".msc",s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); visitPostCaption(m_t, s); m_t << "</div>" << endl; - if (Config_getBool("DOT_CLEANUP")) file.remove(); + if (Config_getBool(DOT_CLEANUP)) file.remove(); } forceStartParagraph(s); } @@ -477,9 +476,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s) { forceEndParagraph(s); - static QCString htmlOutput = Config_getString("HTML_OUTPUT"); + static QCString htmlOutput = Config_getString(HTML_OUTPUT); QCString baseName = writePlantUMLSource(htmlOutput,s->exampleFile(),s->text()); - m_t << "<div align=\"center\">" << endl; + m_t << "<div class=\"plantumlgraph\">" << endl; writePlantUMLFile(baseName,s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); @@ -579,6 +578,31 @@ void HtmlDocVisitor::visit(DocInclude *inc) -1, // endLine TRUE, // inlineFragment 0, // memberDef + FALSE, // show line number + m_ctx // search context + ); + m_t << PREFRAG_END; + forceStartParagraph(inc); + } + break; + case DocInclude::SnipWithLines: + { + forceEndParagraph(inc); + m_t << PREFRAG_START; + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef TRUE, // show line number m_ctx // search context ); @@ -586,6 +610,11 @@ void HtmlDocVisitor::visit(DocInclude *inc) forceStartParagraph(inc); } break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -646,7 +675,7 @@ void HtmlDocVisitor::visit(DocFormula *f) m_t << "<p class=\"formulaDsp\">" << endl; } - if (Config_getBool("USE_MATHJAX")) + if (Config_getBool(USE_MATHJAX)) { QCString text = f->text(); bool closeInline = FALSE; @@ -1313,7 +1342,7 @@ void HtmlDocVisitor::visitPre(DocHtmlTable *t) } else { - m_t << "<table " << htmlAttribsToString(t->attribs()) << ">\n"; + m_t << "<table" << htmlAttribsToString(t->attribs()) << ">\n"; } } @@ -1358,10 +1387,6 @@ void HtmlDocVisitor::visitPost(DocHtmlCell *c) void HtmlDocVisitor::visitPre(DocHtmlCaption *c) { if (m_hide) return; - bool hasAlign = FALSE; - HtmlAttribListIterator li(c->attribs()); - HtmlAttrib *att; - QCString id; m_t << "<caption" << htmlAttribsToString(c->attribs()) << ">"; } @@ -1434,17 +1459,43 @@ void HtmlDocVisitor::visitPre(DocImage *img) } m_t << "<div class=\"image\">" << endl; QCString url = img->url(); + QCString sizeAttribs; + if (!img->width().isEmpty()) + { + sizeAttribs+=" width=\""+img->width()+"\""; + } + if (!img->height().isEmpty()) + { + sizeAttribs+=" height=\""+img->height()+"\""; + } if (url.isEmpty()) { - m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" - << baseName << "\"" << htmlAttribsToString(img->attribs()) - << "/>" << endl; + if (img->name().right(4)==".svg") + { + m_t << "<object type=\"image/svg+xml\" data=\"" << img->relPath() << img->name() + << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) << ">" << baseName + << "</object>" << endl; + } + else + { + m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\"" + << baseName << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) + << "/>" << endl; + } } else { - m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\" " - << htmlAttribsToString(img->attribs()) - << "/>" << endl; + if (url.right(4)==".svg") + { + m_t << "<object type=\"image/svg+xml\" data=\"" << correctURL(url,img->relPath()) + << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) << "></object>" << endl; + } + else + { + m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\"" + << sizeAttribs << htmlAttribsToString(img->attribs()) + << "/>" << endl; + } } if (img->hasCaption()) { @@ -1605,7 +1656,7 @@ void HtmlDocVisitor::visitPost(DocSecRefList *s) //void HtmlDocVisitor::visitPre(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // pushEnabled(); @@ -1615,7 +1666,7 @@ void HtmlDocVisitor::visitPost(DocSecRefList *s) // //void HtmlDocVisitor::visitPost(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // popEnabled(); @@ -1815,7 +1866,7 @@ void HtmlDocVisitor::visitPre(DocHtmlBlockQuote *b) } else { - m_t << "<blockquote " << htmlAttribsToString(b->attribs()) << ">\n"; + m_t << "<blockquote" << htmlAttribsToString(b->attribs()) << ">\n"; } } @@ -1963,7 +2014,7 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath, baseName=baseName.left(i); } baseName.prepend("dot_"); - QCString outDir = Config_getString("HTML_OUTPUT"); + QCString outDir = Config_getString(HTML_OUTPUT); writeDotGraphFromFile(fn,outDir,baseName,GOF_BITMAP); writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context); } @@ -1983,7 +2034,7 @@ void HtmlDocVisitor::writeMscFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("msc_"); - QCString outDir = Config_getString("HTML_OUTPUT"); + QCString outDir = Config_getString(HTML_OUTPUT); QCString imgExt = getDotImageExtension(); MscOutputFormat mscFormat = MSC_BITMAP; if ("svg" == imgExt) @@ -2007,7 +2058,7 @@ void HtmlDocVisitor::writeDiaFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("dia_"); - QCString outDir = Config_getString("HTML_OUTPUT"); + QCString outDir = Config_getString(HTML_OUTPUT); writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP); m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />" << endl; @@ -2027,7 +2078,7 @@ void HtmlDocVisitor::writePlantUMLFile(const QCString &fileName, { baseName=baseName.left(i); } - static QCString outDir = Config_getString("HTML_OUTPUT"); + static QCString outDir = Config_getString(HTML_OUTPUT); QCString imgExt = getDotImageExtension(); if (imgExt=="svg") { @@ -2044,6 +2095,42 @@ void HtmlDocVisitor::writePlantUMLFile(const QCString &fileName, } } +/** Returns TRUE if the child nodes in paragraph \a para until \a nodeIndex + contain a style change node that is still active and that style change is one that + must be located outside of a paragraph, i.e. it is a center, div, or pre tag. + See also bug746162. + */ +static bool insideStyleChangeThatIsOutsideParagraph(DocPara *para,int nodeIndex) +{ + //printf("insideStyleChangeThatIsOutputParagraph(index=%d)\n",nodeIndex); + int styleMask=0; + bool styleOutsideParagraph=FALSE; + while (nodeIndex>=0 && !styleOutsideParagraph) + { + DocNode *n = para->children().at(nodeIndex); + if (n->kind()==DocNode::Kind_StyleChange) + { + DocStyleChange *sc = (DocStyleChange*)n; + if (!sc->enable()) // remember styles that has been closed already + { + styleMask|=(int)sc->style(); + } + bool paraStyle = sc->style()==DocStyleChange::Center || + sc->style()==DocStyleChange::Div || + sc->style()==DocStyleChange::Preformatted; + //printf("Found style change %s enabled=%d\n",sc->styleString(),sc->enable()); + if (sc->enable() && (styleMask&(int)sc->style())==0 && // style change that is still active + paraStyle + ) + { + styleOutsideParagraph=TRUE; + } + } + nodeIndex--; + } + return styleOutsideParagraph; +} + /** Used for items found inside a paragraph, which due to XHTML restrictions * have to be outside of the paragraph. This method will forcefully end * the current paragraph and forceStartParagraph() will restart it. @@ -2057,7 +2144,7 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n) int nodeIndex = para->children().findRef(n); nodeIndex--; if (nodeIndex<0) return; // first node - while (nodeIndex>=0 && + while (nodeIndex>=0 && para->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace ) { @@ -2069,12 +2156,14 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n) //printf("n=%p kind=%d outside=%d\n",n,n->kind(),mustBeOutsideParagraph(n)); if (mustBeOutsideParagraph(n)) return; } - + nodeIndex--; + bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,nodeIndex); bool isFirst; bool isLast; getParagraphContext(para,isFirst,isLast); - //printf("forceEnd first=%d last=%d\n",isFirst,isLast); + //printf("forceEnd first=%d last=%d styleOutsideParagraph=%d\n",isFirst,isLast,styleOutsideParagraph); if (isFirst && isLast) return; + if (styleOutsideParagraph) return; m_t << "</p>"; } @@ -2092,9 +2181,11 @@ void HtmlDocVisitor::forceStartParagraph(DocNode *n) DocPara *para = (DocPara*)n->parent(); int nodeIndex = para->children().findRef(n); int numNodes = para->children().count(); + bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,nodeIndex); + if (styleOutsideParagraph) return; nodeIndex++; if (nodeIndex==numNodes) return; // last node - while (nodeIndex<numNodes && + while (nodeIndex<numNodes && para->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace ) { diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp index ff3c574..668c224 100644 --- a/src/htmlentity.cpp +++ b/src/htmlentity.cpp @@ -199,7 +199,7 @@ static struct htmlEntityInfo { SYM(oline), "\xe2\x80\xbe", "‾", "<oline/>", "‾", "{$\\overline{\\,}$}", NULL, "\\u8254?", { NULL, DocSymbol::Perl_unknown }}, { SYM(frasl), "\xe2\x81\x84", "⁄", "<frasl/>", "⁄", "/", NULL, "\\u8260?", { NULL, DocSymbol::Perl_unknown }}, { SYM(weierp), "\xe2\x84\x98", "℘", "<weierp/>", "℘", "{$\\wp$}", NULL, "\\u8472?", { NULL, DocSymbol::Perl_unknown }}, - { SYM(image), "\xe2\x84\x91", "ℑ", "<image/>", "ℑ", "{$\\Im$}", NULL, "\\u8465?", { NULL, DocSymbol::Perl_unknown }}, + { SYM(image), "\xe2\x84\x91", "ℑ", "<imaginary/>", "ℑ", "{$\\Im$}", NULL, "\\u8465?", { NULL, DocSymbol::Perl_unknown }}, { SYM(real), "\xe2\x84\x9c", "ℜ", "<real/>", "ℜ", "{$\\Re$}", NULL, "\\u8476?", { NULL, DocSymbol::Perl_unknown }}, { SYM(trade), "\xe2\x84\xa2", "™", "<trademark/>", "™", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }}, { SYM(alefsym), "\xe2\x85\xb5", "ℵ", "<alefsym/>", "ℵ", "{$\\aleph$}", NULL, "\\u8501?", { NULL, DocSymbol::Perl_unknown }}, @@ -297,7 +297,7 @@ static struct htmlEntityInfo { SYM(euro), "\xe2\x82\xac", "€", "<euro/>", "€", "\\texteuro{}", NULL, "\\'80", { NULL, DocSymbol::Perl_unknown }}, // doxygen extension to the HTML4 table of HTML entities - { SYM(tm), "\xe2\x84\xa2", "™", "<trademark/>", "™", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }}, + { SYM(tm), "\xe2\x84\xa2", "™", "<tm/>", "™", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }}, { SYM(apos), "'", "'", "'", "'", "\\textquotesingle{}", "'", "'", { "\\\'", DocSymbol::Perl_string }}, // doxygen commands represented as HTML entities diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 9e02dee..12b71e1 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -52,6 +52,8 @@ static QCString g_footer; static QCString g_mathjax_code; +// note: this is only active if DISABLE_INDEX=YES, if DISABLE_INDEX is disabled, this +// part will be rendered inside menu.js static void writeClientSearchBox(FTextStream &t,const char *relPath) { t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; @@ -72,9 +74,11 @@ static void writeClientSearchBox(FTextStream &t,const char *relPath) t << " </div>\n"; } +// note: this is only active if DISABLE_INDEX=YES. if DISABLE_INDEX is disabled, this +// part will be rendered inside menu.js static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch) { - static bool externalSearch = Config_getBool("EXTERNAL_SEARCH"); + static bool externalSearch = Config_getBool(EXTERNAL_SEARCH); t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; t << " <div class=\"left\">\n"; t << " <form id=\"FSearchBox\" action=\"" << relPath; @@ -228,21 +232,21 @@ static QCString substituteHtmlKeywords(const QCString &s, QCString mathJaxJs; QCString extraCssText; - static QCString projectName = Config_getString("PROJECT_NAME"); - static bool timeStamp = Config_getBool("HTML_TIMESTAMP"); - static bool treeView = Config_getBool("GENERATE_TREEVIEW"); - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); - static bool mathJax = Config_getBool("USE_MATHJAX"); - static QCString mathJaxFormat = Config_getEnum("MATHJAX_FORMAT"); - static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static QCString projectName = Config_getString(PROJECT_NAME); + static bool timeStamp = Config_getBool(HTML_TIMESTAMP); + static bool treeView = Config_getBool(GENERATE_TREEVIEW); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); + static bool mathJax = Config_getBool(USE_MATHJAX); + static QCString mathJaxFormat = Config_getEnum(MATHJAX_FORMAT); + static bool disableIndex = Config_getBool(DISABLE_INDEX); static bool hasProjectName = !projectName.isEmpty(); - static bool hasProjectNumber = !Config_getString("PROJECT_NUMBER").isEmpty(); - static bool hasProjectBrief = !Config_getString("PROJECT_BRIEF").isEmpty(); - static bool hasProjectLogo = !Config_getString("PROJECT_LOGO").isEmpty(); + static bool hasProjectNumber = !Config_getString(PROJECT_NUMBER).isEmpty(); + static bool hasProjectBrief = !Config_getString(PROJECT_BRIEF).isEmpty(); + static bool hasProjectLogo = !Config_getString(PROJECT_LOGO).isEmpty(); static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine)); - cssFile = Config_getString("HTML_STYLESHEET"); + cssFile = Config_getString(HTML_STYLESHEET); if (cssFile.isEmpty()) { cssFile = "doxygen.css"; @@ -261,7 +265,7 @@ static QCString substituteHtmlKeywords(const QCString &s, } extraCssText = ""; - extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET"); + extraCssFile = Config_getList(HTML_EXTRA_STYLESHEET); for (uint i=0; i<extraCssFile.count(); ++i) { QCString fileName(extraCssFile.at(i)); @@ -277,7 +281,7 @@ static QCString substituteHtmlKeywords(const QCString &s, if (timeStamp) { - generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), convertToHtml(Config_getString("PROJECT_NAME"))); + generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), convertToHtml(Config_getString(PROJECT_NAME))); } else { @@ -292,7 +296,6 @@ static QCString substituteHtmlKeywords(const QCString &s, "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n" "<script type=\"text/javascript\">\n" " $(document).ready(initResizable);\n" - " $(window).load(resizeHeight);\n" "</script>"; } @@ -305,19 +308,25 @@ static QCString substituteHtmlKeywords(const QCString &s, } searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n"; - if (!serverBasedSearch) + if (!serverBasedSearch) { - searchCssJs += "<script type=\"text/javascript\">\n" - " $(document).ready(function() { init_search(); });\n" - "</script>"; + if (disableIndex || !Config_getBool(HTML_DYNAMIC_MENUS)) + { + searchCssJs += "<script type=\"text/javascript\">\n" + " $(document).ready(function() { init_search(); });\n" + "</script>"; + } } - else + else { - searchCssJs += "<script type=\"text/javascript\">\n" - " $(document).ready(function() {\n" - " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n" - " });\n" - "</script>\n"; + if (disableIndex || !Config_getBool(HTML_DYNAMIC_MENUS)) + { + searchCssJs += "<script type=\"text/javascript\">\n" + " $(document).ready(function() {\n" + " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n" + " });\n" + "</script>\n"; + } // OPENSEARCH_PROVIDER { searchCssJs += "<link rel=\"search\" href=\"" + relPath + @@ -332,7 +341,7 @@ static QCString substituteHtmlKeywords(const QCString &s, if (mathJax) { - QCString path = Config_getString("MATHJAX_RELPATH"); + QCString path = Config_getString(MATHJAX_RELPATH); if (path.isEmpty() || path.left(2)=="..") // relative path { path.prepend(relPath); @@ -340,7 +349,7 @@ static QCString substituteHtmlKeywords(const QCString &s, mathJaxJs = "<script type=\"text/x-mathjax-config\">\n" " MathJax.Hub.Config({\n" " extensions: [\"tex2jax.js\""; - QStrList &mathJaxExtensions = Config_getList("MATHJAX_EXTENSIONS"); + QStrList &mathJaxExtensions = Config_getList(MATHJAX_EXTENSIONS); const char *s = mathJaxExtensions.first(); while (s) { @@ -365,9 +374,9 @@ static QCString substituteHtmlKeywords(const QCString &s, // first substitute generic keywords QCString result = substituteKeywords(s,title, - convertToHtml(Config_getString("PROJECT_NAME")), - convertToHtml(Config_getString("PROJECT_NUMBER")), - convertToHtml(Config_getString("PROJECT_BRIEF"))); + convertToHtml(Config_getString(PROJECT_NAME)), + convertToHtml(Config_getString(PROJECT_NUMBER)), + convertToHtml(Config_getString(PROJECT_BRIEF))); // additional HTML only keywords result = substitute(result,"$navpath",navPath); @@ -422,7 +431,7 @@ void HtmlCodeGenerator::setRelativePath(const QCString &path) void HtmlCodeGenerator::codify(const char *str) { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); if (str && m_streamSet) { const char *p=str; @@ -671,7 +680,7 @@ void HtmlCodeGenerator::writeCodeAnchor(const char *anchor) HtmlGenerator::HtmlGenerator() : OutputGenerator() { - dir=Config_getString("HTML_OUTPUT"); + dir=Config_getString(HTML_OUTPUT); m_emptySection=FALSE; } @@ -682,7 +691,7 @@ HtmlGenerator::~HtmlGenerator() void HtmlGenerator::init() { - QCString dname=Config_getString("HTML_OUTPUT"); + QCString dname=Config_getString(HTML_OUTPUT); QDir d(dname); if (!d.exists() && !d.mkdir(dname)) { @@ -690,9 +699,9 @@ void HtmlGenerator::init() exit(1); } //writeLogo(dname); - if (!Config_getString("HTML_HEADER").isEmpty()) + if (!Config_getString(HTML_HEADER).isEmpty()) { - g_header=fileToString(Config_getString("HTML_HEADER")); + g_header=fileToString(Config_getString(HTML_HEADER)); //printf("g_header='%s'\n",g_header.data()); } else @@ -700,9 +709,9 @@ void HtmlGenerator::init() g_header = ResourceMgr::instance().getAsString("header.html"); } - if (!Config_getString("HTML_FOOTER").isEmpty()) + if (!Config_getString(HTML_FOOTER).isEmpty()) { - g_footer=fileToString(Config_getString("HTML_FOOTER")); + g_footer=fileToString(Config_getString(HTML_FOOTER)); //printf("g_footer='%s'\n",g_footer.data()); } else @@ -710,23 +719,34 @@ void HtmlGenerator::init() g_footer = ResourceMgr::instance().getAsString("footer.html"); } - if (Config_getBool("USE_MATHJAX")) + if (Config_getBool(USE_MATHJAX)) { - if (!Config_getString("MATHJAX_CODEFILE").isEmpty()) + if (!Config_getString(MATHJAX_CODEFILE).isEmpty()) { - g_mathjax_code=fileToString(Config_getString("MATHJAX_CODEFILE")); + g_mathjax_code=fileToString(Config_getString(MATHJAX_CODEFILE)); //printf("g_mathjax_code='%s'\n",g_mathjax_code.data()); } } createSubDirs(d); ResourceMgr &mgr = ResourceMgr::instance(); - mgr.copyResource("tabs.css",dname); + if (Config_getBool(HTML_DYNAMIC_MENUS)) + { + mgr.copyResourceAs("tabs.css",dname,"tabs.css"); + } + else // stylesheet for the 'old' static tabs + { + mgr.copyResourceAs("fixed_tabs.css",dname,"tabs.css"); + } mgr.copyResource("jquery.js",dname); - if (Config_getBool("INTERACTIVE_SVG")) + if (Config_getBool(INTERACTIVE_SVG)) { mgr.copyResource("svgpan.js",dname); } + if (!Config_getBool(DISABLE_INDEX) && Config_getBool(HTML_DYNAMIC_MENUS)) + { + mgr.copyResource("menu.js",dname); + } { QFile f(dname+"/dynsections.js"); @@ -734,7 +754,7 @@ void HtmlGenerator::init() { FTextStream t(&f); t << mgr.getAsString("dynsections.js"); - if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS")) + if (Config_getBool(SOURCE_BROWSER) && Config_getBool(SOURCE_TOOLTIPS)) { t << endl << "$(document).ready(function() {\n" @@ -752,7 +772,7 @@ void HtmlGenerator::init() void HtmlGenerator::writeTabData() { Doxygen::indexList->addStyleSheetFile("tabs.css"); - QCString dname=Config_getString("HTML_OUTPUT"); + QCString dname=Config_getString(HTML_OUTPUT); ResourceMgr &mgr = ResourceMgr::instance(); //writeColoredImgData(dname,colored_tab_data); mgr.copyResource("tab_a.lum",dname); @@ -780,7 +800,7 @@ void HtmlGenerator::writeTabData() void HtmlGenerator::writeSearchData(const char *dir) { - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); //writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data); ResourceMgr &mgr = ResourceMgr::instance(); @@ -803,18 +823,25 @@ void HtmlGenerator::writeSearchData(const char *dir) Doxygen::indexList->addImageFile("search/mag_sel.png"); } - QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search"; + QCString searchDirName = Config_getString(HTML_OUTPUT)+"/search"; QFile f(searchDirName+"/search.css"); if (f.open(IO_WriteOnly)) { FTextStream t(&f); - QCString searchCss = replaceColorMarkers(mgr.getAsString("search.css")); - searchCss = substitute(searchCss,"$doxygenversion",versionString); - if (Config_getBool("DISABLE_INDEX")) + QCString searchCss; + if (Config_getBool(DISABLE_INDEX)) + { + searchCss = mgr.getAsString("search_nomenu.css"); + } + else if (!Config_getBool(HTML_DYNAMIC_MENUS)) { - // move up the search box if there are no tabs - searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;"); + searchCss = mgr.getAsString("search_fixedtabs.css"); } + else + { + searchCss = mgr.getAsString("search.css"); + } + searchCss = substitute(replaceColorMarkers(searchCss),"$doxygenversion",versionString); t << searchCss; Doxygen::indexList->addStyleSheetFile("search/search.css"); } @@ -862,8 +889,8 @@ void HtmlGenerator::startFile(const char *name,const char *, t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " << versionString << " -->" << endl; - //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - static bool searchEngine = Config_getBool("SEARCHENGINE"); + //static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + static bool searchEngine = Config_getBool(SEARCHENGINE); if (searchEngine /*&& !generateTreeView*/) { t << "<script type=\"text/javascript\">\n"; @@ -877,8 +904,8 @@ void HtmlGenerator::startFile(const char *name,const char *, void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath) { - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); if (searchEngine && !serverBasedSearch) { (void)relPath; @@ -907,13 +934,13 @@ void HtmlGenerator::writeSearchInfo() QCString HtmlGenerator::writeLogoAsString(const char *path) { - static bool timeStamp = Config_getBool("HTML_TIMESTAMP"); + static bool timeStamp = Config_getBool(HTML_TIMESTAMP); QCString result; if (timeStamp) { result += theTranslator->trGeneratedAt( dateToString(TRUE), - Config_getString("PROJECT_NAME") + Config_getString(PROJECT_NAME) ); } else @@ -965,7 +992,7 @@ void HtmlGenerator::writeStyleInfo(int part) //printf("writeStyleInfo(%d)\n",part); if (part==0) { - if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet + if (Config_getString(HTML_STYLESHEET).isEmpty()) // write default style sheet { //printf("write doxygen.css\n"); startPlainFile("doxygen.css"); @@ -980,11 +1007,11 @@ void HtmlGenerator::writeStyleInfo(int part) } else // write user defined style sheet { - QCString cssname=Config_getString("HTML_STYLESHEET"); + QCString cssname=Config_getString(HTML_STYLESHEET); QFileInfo cssfi(cssname); if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable()) { - err("style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data()); + err("style sheet %s does not exist or is not readable!", Config_getString(HTML_STYLESHEET).data()); } else { @@ -997,7 +1024,7 @@ void HtmlGenerator::writeStyleInfo(int part) } Doxygen::indexList->addStyleSheetFile(cssfi.fileName().utf8()); } - static QStrList extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET"); + static QStrList extraCssFile = Config_getList(HTML_EXTRA_STYLESHEET); for (uint i=0; i<extraCssFile.count(); ++i) { QCString fileName(extraCssFile.at(i)); @@ -1010,6 +1037,13 @@ void HtmlGenerator::writeStyleInfo(int part) } } } + + Doxygen::indexList->addStyleSheetFile("jquery.js"); + Doxygen::indexList->addStyleSheetFile("dynsections.js"); + if (Config_getBool(INTERACTIVE_SVG)) + { + Doxygen::indexList->addStyleSheetFile("svgpan.js"); + } } } @@ -1017,7 +1051,7 @@ void HtmlGenerator::startDoxyAnchor(const char *,const char *, const char *anchor, const char *, const char *) { - t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>"; + t << "<a id=\"" << anchor << "\"></a>"; } void HtmlGenerator::endDoxyAnchor(const char *,const char *) @@ -1029,9 +1063,12 @@ void HtmlGenerator::endDoxyAnchor(const char *,const char *) // t << endl << "<p>" << endl; //} -void HtmlGenerator::startParagraph() +void HtmlGenerator::startParagraph(const char *classDef) { - t << endl << "<p>"; + if (classDef) + t << endl << "<p class=\"" << classDef << "\">"; + else + t << endl << "<p>"; } void HtmlGenerator::endParagraph() @@ -1137,7 +1174,7 @@ void HtmlGenerator::endTextLink() void HtmlGenerator::startHtmlLink(const char *url) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); t << "<a "; if (generateTreeView) t << "target=\"top\" "; t << "href=\""; @@ -1193,7 +1230,7 @@ void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::Secti case SectionInfo::Paragraph: t << "\n\n<h5>"; break; default: ASSERT(0); break; } - t << "<a class=\"anchor\" id=\"" << lab << "\"></a>"; + t << "<a id=\"" << lab << "\"></a>"; } void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type) @@ -1258,7 +1295,7 @@ static void startSectionHeader(FTextStream &t, const QCString &relPath,int sectionCount) { //t << "<!-- startSectionHeader -->"; - static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); + static bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS); if (dynamicSections) { t << "<div id=\"dynsection-" << sectionCount << "\" " @@ -1283,7 +1320,7 @@ static void endSectionHeader(FTextStream &t) static void startSectionSummary(FTextStream &t,int sectionCount) { //t << "<!-- startSectionSummary -->"; - static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); + static bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS); if (dynamicSections) { t << "<div id=\"dynsection-" << sectionCount << "-summary\" " @@ -1295,7 +1332,7 @@ static void startSectionSummary(FTextStream &t,int sectionCount) static void endSectionSummary(FTextStream &t) { //t << "<!-- endSectionSummary -->"; - static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); + static bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS); if (dynamicSections) { t << "</div>" << endl; @@ -1305,7 +1342,7 @@ static void endSectionSummary(FTextStream &t) static void startSectionContent(FTextStream &t,int sectionCount) { //t << "<!-- startSectionContent -->"; - static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); + static bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS); if (dynamicSections) { t << "<div id=\"dynsection-" << sectionCount << "-content\" " @@ -1343,8 +1380,7 @@ void HtmlGenerator::endClassDiagram(const ClassDiagram &d, t << relPath << fileName << ".png\" usemap=\"#" << convertToId(name); t << "_map\" alt=\"\"/>" << endl; t << " <map id=\"" << convertToId(name); - t << "_map\" name=\""; - docify(name); + t << "_map\" name=\"" << convertToId(name); t << "_map\">" << endl; d.writeImage(t,dir,relPath,fileName); @@ -1539,10 +1575,20 @@ void HtmlGenerator::endMemberDocList() DBG_HTML(t << "<!-- endMemberDocList -->" << endl;) } -void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool) -{ +void HtmlGenerator::startMemberDoc( const char *clName, const char *memName, + const char *anchor, const char *title, + int memCount, int memTotal, bool showInline) +{ DBG_HTML(t << "<!-- startMemberDoc -->" << endl;) - + t << "\n<h2 class=\"memtitle\">" + << "<span class=\"permalink\"><a href=\"#" << anchor << "\">◆ </a></span>" + << title; + if (memTotal>1) + { + t << " <span class=\"overload\">[" << memCount << "/" << memTotal <<"]</span>"; + } + t << "</h2>" + << endl; t << "\n<div class=\"memitem\">" << endl; t << "<div class=\"memproto\">" << endl; } @@ -1685,8 +1731,8 @@ void HtmlGenerator::startDotGraph() void HtmlGenerator::endDotGraph(const DotClassGraph &g) { - bool generateLegend = Config_getBool("GENERATE_LEGEND"); - bool umlLook = Config_getBool("UML_LOOK"); + bool generateLegend = Config_getBool(GENERATE_LEGEND); + bool umlLook = Config_getBool(UML_LOOK); endSectionHeader(t); startSectionSummary(t,m_sectionCount); endSectionSummary(t); @@ -1837,6 +1883,46 @@ void HtmlGenerator::writeNonBreakableSpace(int n) } } +void HtmlGenerator::startDescTable(const char *title) +{ + t << "<table class=\"fieldtable\">" << endl + << "<tr><th colspan=\"2\">" << title << "</th></tr>"; +} +void HtmlGenerator::endDescTable() +{ + t << "</table>" << endl; +} + +void HtmlGenerator::startDescTableRow() +{ + t << "<tr>"; +} + +void HtmlGenerator::endDescTableRow() +{ + t << "</tr>" << endl; +} + +void HtmlGenerator::startDescTableTitle() +{ + t << "<td class=\"fieldname\">"; +} + +void HtmlGenerator::endDescTableTitle() +{ + t << " </td>"; +} + +void HtmlGenerator::startDescTableData() +{ + t << "<td class=\"fielddoc\">"; +} + +void HtmlGenerator::endDescTableData() +{ + t << "</td>"; +} + void HtmlGenerator::startSimpleSect(SectionTypes, const char *filename,const char *anchor, const char *title) @@ -1936,8 +2022,8 @@ static void endQuickIndexItem(FTextStream &t,const char *l) static bool quickLinkVisible(LayoutNavEntry::Kind kind) { - static bool showFiles = Config_getBool("SHOW_FILES"); - static bool showNamespaces = Config_getBool("SHOW_NAMESPACES"); + static bool showFiles = Config_getBool(SHOW_FILES); + static bool showNamespaces = Config_getBool(SHOW_NAMESPACES); switch (kind) { case LayoutNavEntry::MainPage: return TRUE; @@ -2032,8 +2118,8 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath, } if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) // first row is special as it contains the search box { - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); if (searchEngine) { t << " <li>\n"; @@ -2070,6 +2156,9 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact, const char *file, const QCString &relPath) { + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool externalSearch = Config_getBool(EXTERNAL_SEARCH); LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry(); LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1; LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file @@ -2099,8 +2188,45 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact, case HLI_None: break; case HLI_Search: break; } - - if (compact) + + if (compact && Config_getBool(HTML_DYNAMIC_MENUS)) + { + QCString searchPage; + if (externalSearch) + { + searchPage = "search" + Doxygen::htmlFileExtension; + } + else + { + searchPage = "search.php"; + } + t << "<script type=\"text/javascript\" src=\"" << relPath << "menudata.js\"></script>" << endl; + t << "<script type=\"text/javascript\" src=\"" << relPath << "menu.js\"></script>" << endl; + t << "<script type=\"text/javascript\">" << endl; + t << "$(function() {" << endl; + t << " initMenu('" << relPath << "'," + << (searchEngine?"true":"false") << "," + << (serverBasedSearch?"true":"false") << ",'" + << searchPage << "','" + << theTranslator->trSearch() << "');" << endl; + if (Config_getBool(SEARCHENGINE)) + { + if (!serverBasedSearch) + { + t << " $(document).ready(function() { init_search(); });\n"; + } + else + { + t << " $(document).ready(function() {\n" + << " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n" + << " });\n"; + } + } + t << "});" << endl; + t << "</script>" << endl; + t << "<div id=\"main-nav\"></div>" << endl; + } + else if (compact) // && !Config_getBool(HTML_DYNAMIC_MENUS) { // find highlighted index item LayoutNavEntry *hlEntry = root->find(kind,kind==LayoutNavEntry::UserGroup ? file : 0); @@ -2137,7 +2263,7 @@ void HtmlGenerator::endQuickIndices() QCString HtmlGenerator::writeSplitBarAsString(const char *name,const char *relpath) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); QCString result; // write split bar if (generateTreeView) @@ -2192,10 +2318,10 @@ void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli,const char // PHP based search script void HtmlGenerator::writeSearchPage() { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - static bool disableIndex = Config_getBool("DISABLE_INDEX"); - static QCString projectName = Config_getString("PROJECT_NAME"); - static QCString htmlOutput = Config_getString("HTML_OUTPUT"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + static bool disableIndex = Config_getBool(DISABLE_INDEX); + static QCString projectName = Config_getString(PROJECT_NAME); + static QCString htmlOutput = Config_getString(HTML_OUTPUT); // OPENSEARCH_PROVIDER { QCString configFileName = htmlOutput+"/search_config.php"; @@ -2241,7 +2367,7 @@ void HtmlGenerator::writeSearchPage() t << "var searchBox = new SearchBox(\"searchBox\", \"" << "search\",false,'" << theTranslator->trSearch() << "');\n"; t << "</script>\n"; - if (!Config_getBool("DISABLE_INDEX")) + if (!Config_getBool(DISABLE_INDEX)) { writeDefaultQuickLinks(t,TRUE,HLI_Search,0,""); } @@ -2258,9 +2384,7 @@ void HtmlGenerator::writeSearchPage() // Write empty navigation path, to make footer connect properly if (generateTreeView) { - t << "</div><!-- doc-contents -->\n"; - //t << "<div id=\"nav-path\" class=\"navpath\">\n"; - //t << " <ul>\n"; + t << "</div><!-- doc-content -->\n"; } writePageFooter(t,"Search","",""); @@ -2280,8 +2404,9 @@ void HtmlGenerator::writeSearchPage() void HtmlGenerator::writeExternalSearchPage() { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - QCString fileName = Config_getString("HTML_OUTPUT")+"/search"+Doxygen::htmlFileExtension; + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + static bool disableIndex = Config_getBool(DISABLE_INDEX); + QCString fileName = Config_getString(HTML_OUTPUT)+"/search"+Doxygen::htmlFileExtension; QFile f(fileName); if (f.open(IO_WriteOnly)) { @@ -2294,7 +2419,7 @@ void HtmlGenerator::writeExternalSearchPage() t << "var searchBox = new SearchBox(\"searchBox\", \"" << "search\",false,'" << theTranslator->trSearch() << "');\n"; t << "</script>\n"; - if (!Config_getBool("DISABLE_INDEX")) + if (!Config_getBool(DISABLE_INDEX)) { writeDefaultQuickLinks(t,TRUE,HLI_Search,0,""); t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n"; @@ -2323,12 +2448,13 @@ void HtmlGenerator::writeExternalSearchPage() if (generateTreeView) { - t << "</div><!-- doc-contents -->" << endl; + t << "</div><!-- doc-content -->" << endl; } writePageFooter(t,"Search","",""); + } - QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js"; + QCString scriptName = Config_getString(HTML_OUTPUT)+"/search/search.js"; QFile sf(scriptName); if (sf.open(IO_WriteOnly)) { @@ -2337,11 +2463,11 @@ void HtmlGenerator::writeExternalSearchPage() << "\"" << theTranslator->trSearchResults(0) << "\"," << "\"" << theTranslator->trSearchResults(1) << "\"," << "\"" << theTranslator->trSearchResults(2) << "\"];" << endl; - t << "var serverUrl=\"" << Config_getString("SEARCHENGINE_URL") << "\";" << endl; + t << "var serverUrl=\"" << Config_getString(SEARCHENGINE_URL) << "\";" << endl; t << "var tagMap = {" << endl; bool first=TRUE; // add search mappings - QStrList &extraSearchMappings = Config_getList("EXTRA_SEARCH_MAPPINGS"); + QStrList &extraSearchMappings = Config_getList(EXTRA_SEARCH_MAPPINGS); char *ml=extraSearchMappings.first(); while (ml) { @@ -2474,14 +2600,16 @@ void HtmlGenerator::endInlineHeader() t << "</h3></td></tr>" << endl; } -void HtmlGenerator::startMemberDocSimple() +void HtmlGenerator::startMemberDocSimple(bool isEnum) { DBG_HTML(t << "<!-- startMemberDocSimple -->" << endl;) t << "<table class=\"fieldtable\">" << endl; - t << "<tr><th colspan=\"3\">" << theTranslator->trCompoundMembers() << "</th></tr>" << endl; + t << "<tr><th colspan=\"" << (isEnum?"2":"3") << "\">"; + t << (isEnum? theTranslator->trEnumerationValues() : + theTranslator->trCompoundMembers()) << "</th></tr>" << endl; } -void HtmlGenerator::endMemberDocSimple() +void HtmlGenerator::endMemberDocSimple(bool) { DBG_HTML(t << "<!-- endMemberDocSimple -->" << endl;) t << "</table>" << endl; diff --git a/src/htmlgen.h b/src/htmlgen.h index 924d04f..70e4b5f 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -140,7 +140,7 @@ class HtmlGenerator : public OutputGenerator void startTitle() { t << "<div class=\"title\">"; } void endTitle() { t << "</div>"; } - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem(); @@ -225,7 +225,9 @@ class HtmlGenerator : public OutputGenerator void endDescForItem() { t << "</dd>\n"; } void lineBreak(const char *style); void writeChar(char c); - void startMemberDoc(const char *,const char *,const char *,const char *,bool); + void startMemberDoc(const char *clName, const char *memName, + const char *anchor, const char *title, + int memCount, int memTotal, bool showInline); void endMemberDoc(bool); void startDoxyAnchor(const char *fName,const char *manName, const char *anchor,const char *name, @@ -270,25 +272,16 @@ class HtmlGenerator : public OutputGenerator void startContents(); void endContents(); void writeNonBreakableSpace(int); - - void startDescTable(const char *title) - //{ t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; } - { t << "<table class=\"fieldtable\">" << endl - << "<tr><th colspan=\"2\">" << title << "</th></tr>"; - } - void endDescTable() - { t << "</table>" << endl; } - void startDescTableTitle() - //{ t << "<tr><td valign=\"top\"><em>"; } - { t << "<tr><td class=\"fieldname\">"; } - void endDescTableTitle() - { t << " </td>"; } - void startDescTableData() - //{ t << "<td>" << endl; } - { t << "<td class=\"fielddoc\">" << endl; } - void endDescTableData() - { t << "</td></tr>" << endl; } - + + void startDescTable(const char *title); + void endDescTable(); + void startDescTableRow(); + void endDescTableRow(); + void startDescTableTitle(); + void endDescTableTitle(); + void startDescTableData(); + void endDescTableData(); + void startDotGraph(); void endDotGraph(const DotClassGraph &g); void startInclDepGraph(); @@ -328,8 +321,8 @@ class HtmlGenerator : public OutputGenerator void endConstraintDocs(); void endConstraintList(); - void startMemberDocSimple(); - void endMemberDocSimple(); + void startMemberDocSimple(bool); + void endMemberDocSimple(bool); void startInlineMemberType(); void endInlineMemberType(); void startInlineMemberName(); diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index a283338..ad56de8 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -134,7 +134,8 @@ static QCString field2URL(const IndexField *f,bool checkReversed) QCString result = f->url + Doxygen::htmlFileExtension; if (!f->anchor.isEmpty() && (!checkReversed || f->reversed)) { - result+="#"+f->anchor; + // HTML Help needs colons in link anchors to be escaped in the .hhk file. + result+="#"+substitute(f->anchor,":","%3A"); } return result; } @@ -190,7 +191,7 @@ void HtmlHelpIndex::writeFields(FTextStream &t) { // finish old list at level 2 if (level2Started) t << " </UL>" << endl; level2Started=FALSE; - + // <Antony> // Added this code so that an item with only one subitem is written // without any subitem. @@ -214,7 +215,7 @@ void HtmlHelpIndex::writeFields(FTextStream &t) if (level2.isEmpty()) { t << " <LI><OBJECT type=\"text/sitemap\">"; - t << "<param name=\"Local\" value=\"" << field2URL(f,TRUE); + t << "<param name=\"Local\" value=\"" << field2URL(f,FALSE); t << "\">"; t << "<param name=\"Name\" value=\"" << m_help->recode(level1) << "\">" "</OBJECT>\n"; @@ -302,7 +303,7 @@ static QDict<QCString> s_languageDict; */ void HtmlHelp::initialize() { - const char *str = Config_getString("CHM_INDEX_ENCODING"); + const char *str = Config_getString(CHM_INDEX_ENCODING); if (!str) str = "CP1250"; // use safe and likely default m_fromUtf8 = portable_iconv_open(str,"UTF-8"); if (m_fromUtf8==(void *)(-1)) @@ -312,7 +313,7 @@ void HtmlHelp::initialize() } /* open the contents file */ - QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc"; + QCString fName = Config_getString(HTML_OUTPUT) + "/index.hhc"; cf = new QFile(fName); if (!cf->open(IO_WriteOnly)) { @@ -329,7 +330,7 @@ void HtmlHelp::initialize() "<UL>\n"; /* open the contents file */ - fName = Config_getString("HTML_OUTPUT") + "/index.hhk"; + fName = Config_getString(HTML_OUTPUT) + "/index.hhk"; kf = new QFile(fName); if (!kf->open(IO_WriteOnly)) { @@ -446,7 +447,7 @@ void HtmlHelp::initialize() } -static QCString getLanguageString() +QCString HtmlHelp::getLanguageString() { if (!theTranslator->idLanguage().isEmpty()) { @@ -465,7 +466,7 @@ static QCString getLanguageString() void HtmlHelp::createProjectFile() { /* Write the project file */ - QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhp"; + QCString fName = Config_getString(HTML_OUTPUT) + "/index.hhp"; QFile f(fName); if (f.open(IO_WriteOnly)) { @@ -473,9 +474,9 @@ void HtmlHelp::createProjectFile() QCString indexName="index"+Doxygen::htmlFileExtension; t << "[OPTIONS]\n"; - if (!Config_getString("CHM_FILE").isEmpty()) + if (!Config_getString(CHM_FILE).isEmpty()) { - t << "Compiled file=" << Config_getString("CHM_FILE") << "\n"; + t << "Compiled file=" << Config_getString(CHM_FILE) << "\n"; } t << "Compatibility=1.1\n" "Full-text search=Yes\n" @@ -484,9 +485,9 @@ void HtmlHelp::createProjectFile() "Default topic=" << indexName << "\n" "Index file=index.hhk\n" "Language=" << getLanguageString() << endl; - if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n"; - if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n"; - t << "Title=" << recode(Config_getString("PROJECT_NAME")) << endl << endl; + if (Config_getBool(BINARY_TOC)) t << "Binary TOC=YES\n"; + if (Config_getBool(GENERATE_CHI)) t << "Create CHI file=YES\n"; + t << "Title=" << recode(Config_getString(PROJECT_NAME)) << endl << endl; t << "[WINDOWS]" << endl; @@ -500,15 +501,15 @@ void HtmlHelp::createProjectFile() // are shown. They can only be shown in case of a binary toc. // dee http://www.mif2go.com/xhtml/htmlhelp_0016_943addingtabsandtoolbarbuttonstohtmlhelp.htm#Rz108x95873 // Value has been taken from htmlhelp.h file of the HTML Help Workshop - if (Config_getBool("BINARY_TOC")) + if (Config_getBool(BINARY_TOC)) { - t << "main=\"" << recode(Config_getString("PROJECT_NAME")) << "\",\"index.hhc\"," + t << "main=\"" << recode(Config_getString(PROJECT_NAME)) << "\",\"index.hhc\"," "\"index.hhk\",\"" << indexName << "\",\"" << indexName << "\",,,,,0x23520,,0x70387e,,,,,,,,0" << endl << endl; } else { - t << "main=\"" << recode(Config_getString("PROJECT_NAME")) << "\",\"index.hhc\"," + t << "main=\"" << recode(Config_getString(PROJECT_NAME)) << "\",\"index.hhc\"," "\"index.hhk\",\"" << indexName << "\",\"" << indexName << "\",,,,,0x23520,,0x10387e,,,,,,,,0" << endl << endl; } @@ -637,7 +638,7 @@ void HtmlHelp::addContentsItem(bool isDir, // Tried this and I didn't see any problems, when not using // the resetting of file and anchor the TOC works better // (prev / next button) - //if(Config_getBool("BINARY_TOC") && isDir) + //if(Config_getBool(BINARY_TOC) && isDir) //{ //file = 0; //anchor = 0; @@ -681,7 +682,7 @@ void HtmlHelp::addIndexItem(Definition *context,MemberDef *md, { if (md) { - static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES); if (context==0) // global member { if (md->getGroupDef()) diff --git a/src/htmlhelp.h b/src/htmlhelp.h index 8191d03..9c3fa04 100644 --- a/src/htmlhelp.h +++ b/src/htmlhelp.h @@ -84,6 +84,7 @@ class HtmlHelp : public IndexIntf void addIndexFile(const char *name); void addImageFile(const char *); void addStyleSheetFile(const char *) {} + static QCString getLanguageString(); private: friend class HtmlHelpIndex; diff --git a/src/image.cpp b/src/image.cpp index adec5b3..afc67ef 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -209,9 +209,9 @@ static Color palette3[] = Image::Image(int w,int h) { - static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); - static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); - static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + static int hue = Config_getInt(HTML_COLORSTYLE_HUE); + static int sat = Config_getInt(HTML_COLORSTYLE_SAT); + static int gamma = Config_getInt(HTML_COLORSTYLE_GAMMA); double red1,green1,blue1; double red2,green2,blue2; @@ -399,7 +399,7 @@ bool Image::save(const char *fileName,int mode) return FALSE; } #endif - static bool useTransparency = Config_getBool("FORMULA_TRANSPARENT"); + static bool useTransparency = Config_getBool(FORMULA_TRANSPARENT); uchar* buffer; size_t bufferSize; LodePNG_Encoder encoder; diff --git a/src/index.cpp b/src/index.cpp index 272e86f..10c1dcb 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -245,7 +245,7 @@ void startFile(OutputList &ol,const char *name,const char *manName, const char *title,HighlightedItem hli,bool additionalIndices, const char *altSidebarName) { - static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static bool disableIndex = Config_getBool(DISABLE_INDEX); ol.startFile(name,manName,title); ol.startQuickIndices(); if (!disableIndex) @@ -258,12 +258,13 @@ void startFile(OutputList &ol,const char *name,const char *manName, } ol.writeSplitBar(altSidebarName ? altSidebarName : name); ol.writeSearchInfo(); + resetDotNodeNumbering(); } void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents, const QCString &navPath) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); if (!skipNavIndex) @@ -281,7 +282,7 @@ void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents, void endFileWithNavPath(Definition *d,OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); QCString navPath; if (generateTreeView) { @@ -338,8 +339,8 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part, MemberList *enumList = md->enumFieldList(); bool isDir = enumList!=0 && md->isEnumerate(); bool isAnonymous = md->name().find('@')!=-1; - static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); if (!isAnonymous && (!hideUndocMembers || md->hasDocumentation()) && (!md->isStatic() || extractStatic) @@ -401,7 +402,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part, { if (cd->isLinkable() && (cd->partOfGroups()==0 || def->definitionType()==Definition::TypeGroup)) { - static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS); bool isNestedClass = def->definitionType()==Definition::TypeClass; addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor(), addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)), @@ -585,7 +586,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv return; } - static bool tocExpand = TRUE; //Config_getBool("TOC_EXPAND"); + static bool tocExpand = TRUE; //Config_getBool(TOC_EXPAND); bool isDir = dd->subDirs().count()>0 || // there are subdirs (tocExpand && // or toc expand and dd->getFiles() && dd->getFiles()->count()>0 // there are files @@ -635,7 +636,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv FileDef *fd; for (;(fd=it.current());++it) { - //static bool allExternals = Config_getBool("ALLEXTERNALS"); + //static bool allExternals = Config_getBool(ALLEXTERNALS); //if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject()) //{ // fileCount++; @@ -693,7 +694,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv FileDef *fd; for (;(fd=it.current());++it) { - //static bool allExternals = Config_getBool("ALLEXTERNALS"); + //static bool allExternals = Config_getBool(ALLEXTERNALS); //if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject()) bool doc,src; doc = fileVisibleInIndex(fd,src); @@ -729,7 +730,7 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex) ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); } - static bool fullPathNames = Config_getBool("FULL_PATH_NAMES"); + static bool fullPathNames = Config_getBool(FULL_PATH_NAMES); startIndexHierarchy(ol,0); if (fullPathNames) { @@ -753,7 +754,7 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex) FileDef *fd; for (;(fd=fni.current());++fni) { - static bool fullPathNames = Config_getBool("FULL_PATH_NAMES"); + static bool fullPathNames = Config_getBool(FULL_PATH_NAMES); if (!fullPathNames || fd->getDirDef()==0) // top level file { bool doc,src; @@ -970,7 +971,7 @@ static void writeHierarchicalIndex(OutputList &ol) ol.startContents(); ol.startTextBlock(); - if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY")) + if (Config_getBool(HAVE_DOT) && Config_getBool(GRAPHICAL_HIERARCHY)) { ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::RTF); @@ -1094,7 +1095,7 @@ static void writeSingleFileIndex(OutputList &ol,FileDef *fd) if (nameOk && (doc || src) && !fd->isReference()) { QCString path; - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { path=stripFromPath(fd->getPath().copy()); } @@ -1178,9 +1179,9 @@ static void writeFileIndex(OutputList &ol) startFile(ol,"files",0,title,HLI_Files); startTitle(ol,0); - //if (!Config_getString("PROJECT_NAME").isEmpty()) + //if (!Config_getString(PROJECT_NAME).isEmpty()) //{ - // title.prepend(Config_getString("PROJECT_NAME")+" "); + // title.prepend(Config_getString(PROJECT_NAME)+" "); //} ol.parseText(title); endTitle(ol,0,0); @@ -1193,7 +1194,7 @@ static void writeFileIndex(OutputList &ol) Doxygen::indexList->incContentsDepth(); } - ol.parseText(lne ? lne->intro() : theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(lne ? lne->intro() : theTranslator->trFileListDescription(Config_getBool(EXTRACT_ALL))); ol.endTextBlock(); // --------------- @@ -1208,7 +1209,7 @@ static void writeFileIndex(OutputList &ol) OutputNameList outputNameList; outputNameList.setAutoDelete(TRUE); - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { // re-sort input files in (dir,file) output order instead of (file,dir) input order FileNameListIterator fnli(*Doxygen::inputNameList); @@ -1240,7 +1241,7 @@ static void writeFileIndex(OutputList &ol) } ol.startIndexList(); - if (Config_getBool("FULL_PATH_NAMES")) + if (Config_getBool(FULL_PATH_NAMES)) { outputNameList.sort(); QListIterator<FileList> fnli(outputNameList); @@ -1459,7 +1460,7 @@ static void writeNamespaceIndex(OutputList &ol) endTitle(ol,0,0); ol.startContents(); ol.startTextBlock(); - ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceListDescription(Config_getBool(EXTRACT_ALL))); ol.endTextBlock(); bool first=TRUE; @@ -1776,7 +1777,7 @@ static void writeAlphabeticalClassList(OutputList &ol) int index = getPrefixIndex(cd->className()); //printf("name=%s index=%d %d\n",cd->className().data(),index,cd->protection()); - startLetter=getUtf8CodeToUpper(cd->className(),index); + startLetter=getUtf8CodeToLower(cd->className(),index); indexLettersUsed.add(startLetter); } } @@ -1801,7 +1802,7 @@ static void writeAlphabeticalClassList(OutputList &ol) // the number of columns in the table - const int columns = Config_getInt("COLS_IN_ALPHA_INDEX"); + const int columns = Config_getInt(COLS_IN_ALPHA_INDEX); int i,j; int totalItems = headerItems*2 + annotatedClasses; // number of items in the table (headers span 2 items) @@ -1827,7 +1828,7 @@ static void writeAlphabeticalClassList(OutputList &ol) if (cd->isLinkableInProject() && cd->templateMaster()==0) { int index = getPrefixIndex(cd->className()); - startLetter=getUtf8Code(cd->className(),index); + startLetter=getUtf8CodeToLower(cd->className(),index); // Do some sorting again, since the classes are sorted by name with // prefix, which should be ignored really. if (cd->getLanguage()==SrcLangExt_VHDL) @@ -1901,7 +1902,7 @@ static void writeAlphabeticalClassList(OutputList &ol) } } - ol.writeString("<table style=\"margin: 10px; white-space: nowrap;\" align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"); + ol.writeString("<table class=\"classindex\">\n"); // generate table for (i=0;i<=maxRows;i++) // foreach table row { @@ -2263,7 +2264,7 @@ void initClassMemberIndices() void addClassMemberNameToIndex(MemberDef *md) { - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); + static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS); ClassDef *cd=0; @@ -2496,8 +2497,8 @@ struct CmhlInfo static const CmhlInfo *getCmhlInfo(int hl) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); static CmhlInfo cmhlInfo[] = { CmhlInfo("functions", theTranslator->trAll()), @@ -2520,7 +2521,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h { if (documentedClassMembers[hl]==0) return; - static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static bool disableIndex = Config_getBool(DISABLE_INDEX); bool multiPageIndex=FALSE; if (documentedClassMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX) @@ -2570,35 +2571,39 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h if (!disableIndex) { ol.writeQuickLinks(TRUE,HLI_Functions,0); - startQuickIndexList(ol); - // index item for global member list - startQuickIndexItem(ol, - getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first); - ol.writeString(fixSpaces(getCmhlInfo(0)->title)); - endQuickIndexItem(ol); - - int i; - // index items per category member lists - for (i=1;i<CMHL_Total;i++) + if (!Config_getBool(HTML_DYNAMIC_MENUS)) { - if (documentedClassMembers[i]>0) + startQuickIndexList(ol); + + // index item for global member list + startQuickIndexItem(ol, + getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first); + ol.writeString(fixSpaces(getCmhlInfo(0)->title)); + endQuickIndexItem(ol); + + int i; + // index items per category member lists + for (i=1;i<CMHL_Total;i++) { - startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); - ol.writeString(fixSpaces(getCmhlInfo(i)->title)); - //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n", - // multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data()); - endQuickIndexItem(ol); + if (documentedClassMembers[i]>0) + { + startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); + ol.writeString(fixSpaces(getCmhlInfo(i)->title)); + //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n", + // multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data()); + endQuickIndexItem(ol); + } } - } - endQuickIndexList(ol); + endQuickIndexList(ol); - // quick alphabetical index - if (quickIndex) - { - writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page, - getCmhlInfo(hl)->fname,multiPageIndex); + // quick alphabetical index + if (quickIndex) + { + writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page, + getCmhlInfo(hl)->fname,multiPageIndex); + } } } ol.endQuickIndices(); @@ -2610,7 +2615,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h if (hl==CMHL_All) { ol.startTextBlock(); - ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool(EXTRACT_ALL))); ol.endTextBlock(); } else @@ -2671,8 +2676,8 @@ struct FmhlInfo static const FmhlInfo *getFmhlInfo(int hl) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); static FmhlInfo fmhlInfo[] = { FmhlInfo("globals", theTranslator->trAll()), @@ -2693,7 +2698,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) { if (documentedFileMembers[hl]==0) return; - static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static bool disableIndex = Config_getBool(DISABLE_INDEX); bool multiPageIndex=FALSE; if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX) @@ -2742,33 +2747,36 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) if (!disableIndex) { ol.writeQuickLinks(TRUE,HLI_Globals,0); - startQuickIndexList(ol); + if (!Config_getBool(HTML_DYNAMIC_MENUS)) + { + startQuickIndexList(ol); - // index item for all file member lists - startQuickIndexItem(ol, - getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first); - ol.writeString(fixSpaces(getFmhlInfo(0)->title)); - endQuickIndexItem(ol); + // index item for all file member lists + startQuickIndexItem(ol, + getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first); + ol.writeString(fixSpaces(getFmhlInfo(0)->title)); + endQuickIndexItem(ol); - int i; - // index items for per category member lists - for (i=1;i<FMHL_Total;i++) - { - if (documentedFileMembers[i]>0) + int i; + // index items for per category member lists + for (i=1;i<FMHL_Total;i++) { - startQuickIndexItem(ol, - getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); - ol.writeString(fixSpaces(getFmhlInfo(i)->title)); - endQuickIndexItem(ol); + if (documentedFileMembers[i]>0) + { + startQuickIndexItem(ol, + getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); + ol.writeString(fixSpaces(getFmhlInfo(i)->title)); + endQuickIndexItem(ol); + } } - } - endQuickIndexList(ol); + endQuickIndexList(ol); - if (quickIndex) - { - writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page, - getFmhlInfo(hl)->fname,multiPageIndex); + if (quickIndex) + { + writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page, + getFmhlInfo(hl)->fname,multiPageIndex); + } } } ol.endQuickIndices(); @@ -2780,7 +2788,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) if (hl==FMHL_All) { ol.startTextBlock(); - ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool(EXTRACT_ALL))); ol.endTextBlock(); } else @@ -2836,8 +2844,8 @@ struct NmhlInfo static const NmhlInfo *getNmhlInfo(int hl) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); static NmhlInfo nmhlInfo[] = { NmhlInfo("namespacemembers", theTranslator->trAll()), @@ -2860,7 +2868,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, { if (documentedNamespaceMembers[hl]==0) return; - static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static bool disableIndex = Config_getBool(DISABLE_INDEX); bool multiPageIndex=FALSE; @@ -2910,35 +2918,37 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, if (!disableIndex) { ol.writeQuickLinks(TRUE,HLI_NamespaceMembers,0); - startQuickIndexList(ol); + if (!Config_getBool(HTML_DYNAMIC_MENUS)) + { + startQuickIndexList(ol); - // index item for all namespace member lists - startQuickIndexItem(ol, - getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first); - ol.writeString(fixSpaces(getNmhlInfo(0)->title)); - endQuickIndexItem(ol); + // index item for all namespace member lists + startQuickIndexItem(ol, + getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first); + ol.writeString(fixSpaces(getNmhlInfo(0)->title)); + endQuickIndexItem(ol); - int i; - // index items per category member lists - for (i=1;i<NMHL_Total;i++) - { - if (documentedNamespaceMembers[i]>0) + int i; + // index items per category member lists + for (i=1;i<NMHL_Total;i++) { - startQuickIndexItem(ol, - getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); - ol.writeString(fixSpaces(getNmhlInfo(i)->title)); - endQuickIndexItem(ol); + if (documentedNamespaceMembers[i]>0) + { + startQuickIndexItem(ol, + getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first); + ol.writeString(fixSpaces(getNmhlInfo(i)->title)); + endQuickIndexItem(ol); + } } - } - endQuickIndexList(ol); + endQuickIndexList(ol); - if (quickIndex) - { - writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page, - getNmhlInfo(hl)->fname,multiPageIndex); + if (quickIndex) + { + writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page, + getNmhlInfo(hl)->fname,multiPageIndex); + } } - } ol.endQuickIndices(); ol.writeSplitBar(fileName); @@ -2949,7 +2959,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, if (hl==NMHL_All) { ol.startTextBlock(); - ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool(EXTRACT_ALL))); ol.endTextBlock(); } else @@ -2964,6 +2974,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, g_namespaceIndexLetterUsed[hl], Definition::TypeNamespace); endFile(ol); + first=FALSE; } if (multiPageIndex && addToIndex) Doxygen::indexList->decContentsDepth(); ol.popGeneratorState(); @@ -2978,7 +2989,7 @@ static void writeNamespaceMemberIndex(OutputList &ol) Doxygen::indexList->addContentsItem(FALSE,lne ? lne->title() : theTranslator->trNamespaceMembers(),0,"namespacemembers",0); Doxygen::indexList->incContentsDepth(); } - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); writeNamespaceMemberIndexFiltered(ol,NMHL_All); writeNamespaceMemberIndexFiltered(ol,NMHL_Functions); writeNamespaceMemberIndexFiltered(ol,NMHL_Variables); @@ -3084,7 +3095,7 @@ static void countRelatedPages(int &docPages,int &indexPages) static bool mainPageHasOwnTitle() { - static QCString projectName = Config_getString("PROJECT_NAME"); + static QCString projectName = Config_getString(PROJECT_NAME); QCString title; if (Doxygen::mainPage) { @@ -3244,14 +3255,14 @@ static int countDirs() void writeGraphInfo(OutputList &ol) { - if (!Config_getBool("HAVE_DOT") || !Config_getBool("GENERATE_HTML")) return; + if (!Config_getBool(HAVE_DOT) || !Config_getBool(GENERATE_HTML)) return; ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - generateGraphLegend(Config_getString("HTML_OUTPUT")); + generateGraphLegend(Config_getString(HTML_OUTPUT)); - bool &stripCommentsStateRef = Config_getBool("STRIP_CODE_COMMENTS"); + bool &stripCommentsStateRef = Config_getBool(STRIP_CODE_COMMENTS); bool oldStripCommentsState = stripCommentsStateRef; - bool &createSubdirs = Config_getBool("CREATE_SUBDIRS"); + bool &createSubdirs = Config_getBool(CREATE_SUBDIRS); bool oldCreateSubdirs = createSubdirs; // temporarily disable the stripping of comments for our own code example! stripCommentsStateRef = FALSE; @@ -3291,8 +3302,8 @@ void writeGraphInfo(OutputList &ol) */ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv, bool addToIndex) { - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - //bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (level>20) { warn(gd->getDefFileName(),gd->getDefLine(), @@ -3306,7 +3317,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* */ if (/*!gd->visited &&*/ (!gd->isASubGroup() || level>0) && gd->isVisible() && - (!gd->isReference() || Config_getBool("EXTERNAL_GROUPS")) // hide external groups by default + (!gd->isReference() || Config_getBool(EXTERNAL_GROUPS)) // hide external groups by default ) { //printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers()); @@ -3314,7 +3325,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* bool hasSubGroups = gd->getSubGroups()->count()>0; bool hasSubPages = gd->getPages()->count()>0; int numSubItems = 0; - if (1 /*Config_getBool("TOC_EXPAND")*/) + if (1 /*Config_getBool(TOC_EXPAND)*/) { QListIterator<MemberList> mli(gd->getMemberLists()); MemberList *ml; @@ -3560,7 +3571,7 @@ static void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex) #if 0 static void writeGroupTree(GroupDef *gd,FTVHelp *ftv,int level,bool addToIndex) { - static bool externalGroups = Config_getBool("EXTERNAL_GROUPS"); + static bool externalGroups = Config_getBool(EXTERNAL_GROUPS); /* Some groups should appear twice under different parent-groups. * That is why we should not check if it was visited */ @@ -3689,7 +3700,7 @@ static void writeDirIndex(OutputList &ol) ol.endTextBlock(); FTVHelp* ftv = 0; - bool treeView=Config_getBool("USE_INLINE_TREES"); + bool treeView=Config_getBool(USE_INLINE_TREES); if (treeView) { ftv = new FTVHelp(FALSE); @@ -3760,9 +3771,9 @@ static void writeUserGroupStubPage(OutputList &ol,LayoutNavEntry *lne) static void writeIndex(OutputList &ol) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - static QCString projectName = Config_getString("PROJECT_NAME"); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + static QCString projectName = Config_getString(PROJECT_NAME); // save old generator state ol.pushGeneratorState(); @@ -3810,7 +3821,7 @@ static void writeIndex(OutputList &ol) } ol.startQuickIndices(); - if (!Config_getBool("DISABLE_INDEX")) + if (!Config_getBool(DISABLE_INDEX)) { ol.writeQuickLinks(TRUE,HLI_Main,0); } @@ -3847,7 +3858,7 @@ static void writeIndex(OutputList &ol) } ol.startContents(); - if (Config_getBool("DISABLE_INDEX") && Doxygen::mainPage==0) + if (Config_getBool(DISABLE_INDEX) && Doxygen::mainPage==0) { ol.writeQuickLinks(FALSE,HLI_Main,0); } @@ -3880,7 +3891,7 @@ static void writeIndex(OutputList &ol) ol.startFile("refman",0,0); ol.startIndexSection(isTitlePageStart); - if (!Config_getString("LATEX_HEADER").isEmpty()) + if (!Config_getString(LATEX_HEADER).isEmpty()) { ol.disable(OutputGenerator::Latex); } @@ -3894,10 +3905,10 @@ static void writeIndex(OutputList &ol) ol.parseText(projPrefix); } - if (!Config_getString("PROJECT_NUMBER").isEmpty()) + if (!Config_getString(PROJECT_NUMBER).isEmpty()) { ol.startProjectNumber(); - ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE); + ol.generateDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString(PROJECT_NUMBER),FALSE,FALSE); ol.endProjectNumber(); } ol.endIndexSection(isTitlePageStart); @@ -3968,7 +3979,7 @@ static void writeIndex(OutputList &ol) } } - if (!Config_getBool("LATEX_HIDE_INDICES")) + if (!Config_getBool(LATEX_HIDE_INDICES)) { //if (indexedPages>0) //{ @@ -4106,7 +4117,7 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry break; case LayoutNavEntry::Namespaces: { - static bool showNamespaces = Config_getBool("SHOW_NAMESPACES"); + static bool showNamespaces = Config_getBool(SHOW_NAMESPACES); if (showNamespaces) { if (documentedNamespaces>0 && addToIndex) @@ -4125,7 +4136,7 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry break; case LayoutNavEntry::NamespaceList: { - static bool showNamespaces = Config_getBool("SHOW_NAMESPACES"); + static bool showNamespaces = Config_getBool(SHOW_NAMESPACES); if (showNamespaces) { msg("Generating namespace index...\n"); @@ -4161,7 +4172,7 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry case LayoutNavEntry::ClassHierarchy: msg("Generating hierarchical class index...\n"); writeHierarchicalIndex(ol); - if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY")) + if (Config_getBool(HAVE_DOT) && Config_getBool(GRAPHICAL_HIERARCHY)) { msg("Generating graphical class hierarchy...\n"); writeGraphicalClassHierarchy(ol); @@ -4173,7 +4184,7 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry break; case LayoutNavEntry::Files: { - static bool showFiles = Config_getBool("SHOW_FILES"); + static bool showFiles = Config_getBool(SHOW_FILES); if (showFiles) { if (documentedHtmlFiles>0 && addToIndex) @@ -4192,7 +4203,7 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry break; case LayoutNavEntry::FileList: { - static bool showFiles = Config_getBool("SHOW_FILES"); + static bool showFiles = Config_getBool(SHOW_FILES); if (showFiles) { msg("Generating file index...\n"); @@ -4276,8 +4287,166 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry } } +static bool quickLinkVisible(LayoutNavEntry::Kind kind) +{ + static bool showFiles = Config_getBool(SHOW_FILES); + static bool showNamespaces = Config_getBool(SHOW_NAMESPACES); + switch (kind) + { + case LayoutNavEntry::MainPage: return TRUE; + case LayoutNavEntry::User: return TRUE; + case LayoutNavEntry::UserGroup: return TRUE; + case LayoutNavEntry::Pages: return indexedPages>0; + case LayoutNavEntry::Modules: return documentedGroups>0; + case LayoutNavEntry::Namespaces: return documentedNamespaces>0 && showNamespaces; + case LayoutNavEntry::NamespaceList: return documentedNamespaces>0 && showNamespaces; + case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0; + case LayoutNavEntry::Classes: return annotatedClasses>0; + case LayoutNavEntry::ClassList: return annotatedClasses>0; + case LayoutNavEntry::ClassIndex: return annotatedClasses>0; + case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0; + case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0; + case LayoutNavEntry::Files: return documentedHtmlFiles>0 && showFiles; + case LayoutNavEntry::FileList: return documentedHtmlFiles>0 && showFiles; + case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0; + //case LayoutNavEntry::Dirs: return documentedDirs>0; + case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0; + } + return FALSE; +} + +template<class T> +void renderMemberIndicesAsJs(FTextStream &t, + int total,const int *numDocumented,const LetterToIndexMap<MemberIndexList> *memberLists, + const T *(*getInfo)(int hl)) +{ + // index items per category member lists + bool firstMember=TRUE; + for (int i=0;i<total;i++) + { + if (numDocumented[i]>0) + { + t << ","; + if (firstMember) + { + t << "children:["; + firstMember=FALSE; + } + t << endl << "{text:\"" << convertToJSString(getInfo(i)->title) << "\",url:\"" + << convertToJSString(getInfo(i)->fname+Doxygen::htmlFileExtension) << "\""; + + // Check if we have many members, then add sub entries per letter... + // quick alphabetical index + bool quickIndex = numDocumented[i]>maxItemsBeforeQuickIndex; + if (quickIndex) + { + bool multiPageIndex=FALSE; + if (numDocumented[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX) + { + multiPageIndex=TRUE; + } + t << ",children:[" << endl; + bool firstLetter=TRUE; + SIntDict<MemberIndexList>::Iterator it(memberLists[i]); + MemberIndexList *ml; + for (it.toFirst();(ml=it.current());++it) + { + if (!firstLetter) t << "," << endl; + uint letter = ml->letter(); + QCString is = letterToLabel(letter); + QCString ci = QString(QChar(letter)).utf8(); + QCString anchor; + QCString extension=Doxygen::htmlFileExtension; + QCString fullName = getInfo(i)->fname; + if (!multiPageIndex || firstLetter) + anchor=fullName+extension+"#index_"; + else // other pages of multi page index + anchor=fullName+"_"+is+extension+"#index_"; + t << "{text:\"" << convertToJSString(ci) << "\",url:\"" + << convertToJSString(anchor+is) << "\"}"; + firstLetter=FALSE; + } + t << "]"; + } + t << "}"; + } + } + if (!firstMember) + { + t << "]"; + } +} + +static bool renderQuickLinksAsJs(FTextStream &t,LayoutNavEntry *root,bool first) +{ + QListIterator<LayoutNavEntry> li(root->children()); + LayoutNavEntry *entry; + int count=0; + for (li.toFirst();(entry=li.current());++li) + { + if (entry->visible() && quickLinkVisible(entry->kind())) count++; + } + if (count>0) // at least one item is visible + { + bool firstChild = TRUE; + if (!first) t << ","; + t << "children:[" << endl; + for (li.toFirst();(entry=li.current());++li) + { + if (entry->visible() && quickLinkVisible(entry->kind())) + { + if (!firstChild) t << "," << endl; + firstChild=FALSE; + QCString url = entry->url(); + t << "{text:\"" << convertToJSString(entry->title()) << "\",url:\"" + << convertToJSString(url) << "\""; + bool hasChildren=FALSE; + if (entry->kind()==LayoutNavEntry::NamespaceMembers) + { + renderMemberIndicesAsJs(t,NMHL_Total,documentedNamespaceMembers, + g_namespaceIndexLetterUsed,getNmhlInfo); + } + else if (entry->kind()==LayoutNavEntry::ClassMembers) + { + renderMemberIndicesAsJs(t,CMHL_Total,documentedClassMembers, + g_memberIndexLetterUsed,getCmhlInfo); + } + else if (entry->kind()==LayoutNavEntry::FileGlobals) + { + renderMemberIndicesAsJs(t,FMHL_Total,documentedFileMembers, + g_fileIndexLetterUsed,getFmhlInfo); + } + else // recursive into child list + { + hasChildren = renderQuickLinksAsJs(t,entry,FALSE); + } + if (hasChildren) t << "]"; + t << "}"; + } + } + } + return count>0; +} + +static void writeMenuData() +{ + if (!Config_getBool(GENERATE_HTML) || Config_getBool(DISABLE_INDEX)) return; + QCString outputDir = Config_getBool(HTML_OUTPUT); + QFile f(outputDir+"/menudata.js"); + LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry(); + if (f.open(IO_WriteOnly)) + { + FTextStream t(&f); + t << "var menudata={"; + bool hasChildren = renderQuickLinksAsJs(t,root,TRUE); + if (hasChildren) t << "]"; + t << "}" << endl; + } +} + void writeIndexHierarchy(OutputList &ol) { + writeMenuData(); LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry(); if (lne) { diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 5e7278c..9016c25 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -34,37 +34,13 @@ #include "htmlentity.h" #include "plantuml.h" -static QCString escapeLabelName(const char *s) -{ - QCString result; - const char *p=s; - char c; - if (p) - { - while ((c=*p++)) - { - switch (c) - { - case '%': result+="\\%"; break; - case '|': result+="\\texttt{\"|}"; break; - case '!': result+="\"!"; break; - case '{': result+="\\lcurly{}"; break; - case '}': result+="\\rcurly{}"; break; - case '~': result+="````~"; break; // to get it a bit better in index together with other special characters - default: result+=c; - } - } - } - return result; -} - const int maxLevels=5; static const char *secLabels[maxLevels] = { "section","subsection","subsubsection","paragraph","subparagraph" }; static const char *getSectionName(int level) { - static bool compactLatex = Config_getBool("COMPACT_LATEX"); + static bool compactLatex = Config_getBool(COMPACT_LATEX); int l = level; if (compactLatex) l++; if (Doxygen::insideMainPage) l--; @@ -114,7 +90,7 @@ static void visitPreStart(FTextStream &t, const bool hasCaption, QCString name, if (hasCaption) { - t << "\n\\caption{"; + t << "\n\\doxyfigcaption{"; } } @@ -236,7 +212,7 @@ void LatexDocVisitor::visit(DocSymbol *s) void LatexDocVisitor::visit(DocURL *u) { if (m_hide) return; - if (Config_getBool("PDF_HYPERLINKS")) + if (Config_getBool(PDF_HYPERLINKS)) { m_t << "\\href{"; if (u->isEmail()) m_t << "mailto:"; @@ -343,7 +319,7 @@ void LatexDocVisitor::visit(DocVerbatim *s) QCString fileName(4096); fileName.sprintf("%s%d%s", - (Config_getString("LATEX_OUTPUT")+"/inline_dotgraph_").data(), + (Config_getString(LATEX_OUTPUT)+"/inline_dotgraph_").data(), dotindex++, ".dot" ); @@ -361,7 +337,7 @@ void LatexDocVisitor::visit(DocVerbatim *s) visitCaption(this, s->children()); endDotFile(s->hasCaption()); - if (Config_getBool("DOT_CLEANUP")) file.remove(); + if (Config_getBool(DOT_CLEANUP)) file.remove(); } } break; @@ -371,7 +347,7 @@ void LatexDocVisitor::visit(DocVerbatim *s) QCString baseName(4096); baseName.sprintf("%s%d", - (Config_getString("LATEX_OUTPUT")+"/inline_mscgraph_").data(), + (Config_getString(LATEX_OUTPUT)+"/inline_mscgraph_").data(), mscindex++ ); QFile file(baseName+".msc"); @@ -389,13 +365,13 @@ void LatexDocVisitor::visit(DocVerbatim *s) writeMscFile(baseName, s); - if (Config_getBool("DOT_CLEANUP")) file.remove(); + if (Config_getBool(DOT_CLEANUP)) file.remove(); } } break; case DocVerbatim::PlantUML: { - QCString latexOutput = Config_getString("LATEX_OUTPUT"); + QCString latexOutput = Config_getString(LATEX_OUTPUT); QCString baseName = writePlantUMLSource(latexOutput,s->exampleFile(),s->text()); writePlantUMLFile(baseName, s); @@ -408,10 +384,10 @@ void LatexDocVisitor::visit(DocAnchor *anc) { if (m_hide) return; m_t << "\\label{" << stripPath(anc->file()) << "_" << anc->anchor() << "}%" << endl; - if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS")) + if (!anc->file().isEmpty() && Config_getBool(PDF_HYPERLINKS)) { - m_t << "\\hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor() - << "}{}%" << endl; + m_t << "\\Hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor() + << "}%" << endl; } } @@ -431,7 +407,14 @@ void LatexDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile(), &fd); + inc->exampleFile(), + &fd, // fileDef, + -1, // start line + -1, // end line + FALSE, // inline fragment + 0, // memberDef + TRUE // show line numbers + ); m_t << "\\end{DoxyCodeInclude}" << endl; } break; @@ -440,7 +423,14 @@ void LatexDocVisitor::visit(DocInclude *inc) Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), inc->text(),langExt,inc->isExample(), - inc->exampleFile()); + inc->exampleFile(), + 0, // fileDef + -1, // startLine + -1, // endLine + TRUE, // inlineFragment + 0, // memberDef + FALSE + ); m_t << "\\end{DoxyCodeInclude}\n"; break; case DocInclude::DontInclude: @@ -469,6 +459,33 @@ void LatexDocVisitor::visit(DocInclude *inc) m_t << "\\end{DoxyCodeInclude}" << endl; } break; + case DocInclude::SnipWithLines: + { + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + m_t << "\n\\begin{DoxyCodeInclude}\n"; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef + TRUE // show line number + ); + m_t << "\\end{DoxyCodeInclude}" << endl; + } + break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -515,8 +532,10 @@ void LatexDocVisitor::visit(DocFormula *f) void LatexDocVisitor::visit(DocIndexEntry *i) { if (m_hide) return; - m_t << "\\index{" << escapeLabelName(i->entry()) << "@{"; - escapeMakeIndexChars(i->entry()); + m_t << "\\index{"; + m_t << latexEscapeLabelName(i->entry(),false); + m_t << "@{"; + m_t << latexEscapeIndexChars(i->entry(),false); m_t << "}}"; } @@ -786,7 +805,7 @@ void LatexDocVisitor::visitPost(DocSimpleListItem *) void LatexDocVisitor::visitPre(DocSection *s) { if (m_hide) return; - if (Config_getBool("PDF_HYPERLINKS")) + if (Config_getBool(PDF_HYPERLINKS)) { m_t << "\\hypertarget{" << stripPath(s->file()) << "_" << s->anchor() << "}{}"; } @@ -908,7 +927,7 @@ static void writeStartTableCommand(FTextStream &t,const DocNode *n,int cols) } else { - t << "\\tabulinesep=1mm\n\\begin{longtabu} spread 0pt [c]{*" << cols << "{|X[-1]}|}\n"; + t << "\\tabulinesep=1mm\n\\begin{longtabu} spread 0pt [c]{*{" << cols << "}{|X[-1]}|}\n"; } //return isNested ? "TabularNC" : "TabularC"; } @@ -933,7 +952,7 @@ void LatexDocVisitor::visitPre(DocHtmlTable *t) if (t->hasCaption()) { DocHtmlCaption *c = t->caption(); - static bool pdfHyperLinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperLinks = Config_getBool(PDF_HYPERLINKS); if (!c->file().isEmpty() && pdfHyperLinks) { m_t << "\\hypertarget{" << stripPath(c->file()) << "_" << c->anchor() @@ -1150,7 +1169,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } if (c->isHeading()) { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } if (cs>1) { @@ -1195,7 +1214,7 @@ void LatexDocVisitor::visitPost(DocInternal *) void LatexDocVisitor::visitPre(DocHRef *href) { if (m_hide) return; - if (Config_getBool("PDF_HYPERLINKS")) + if (Config_getBool(PDF_HYPERLINKS)) { m_t << "\\href{"; m_t << href->url(); @@ -1333,7 +1352,7 @@ void LatexDocVisitor::visitPre(DocSecRefItem *ref) { if (m_hide) return; m_t << "\\item \\contentsline{section}{"; - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (pdfHyperlinks) { m_t << "\\hyperlink{" << ref->file() << "_" << ref->anchor() << "}{" ; @@ -1343,7 +1362,7 @@ void LatexDocVisitor::visitPre(DocSecRefItem *ref) void LatexDocVisitor::visitPost(DocSecRefItem *ref) { if (m_hide) return; - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (pdfHyperlinks) { m_t << "}"; @@ -1541,13 +1560,13 @@ void LatexDocVisitor::visitPre(DocXRefItem *x) m_t << "}" << endl; bool anonymousEnum = x->file()=="@"; m_t << "\\item["; - if (Config_getBool("PDF_HYPERLINKS") && !anonymousEnum) + if (Config_getBool(PDF_HYPERLINKS) && !anonymousEnum) { m_t << "\\hyperlink{" << stripPath(x->file()) << "_" << x->anchor() << "}{"; } else { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } m_insideItem=TRUE; filter(x->title()); @@ -1629,7 +1648,7 @@ void LatexDocVisitor::filter(const char *str) void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor,bool refToTable) { - static bool pdfHyperLinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperLinks = Config_getBool(PDF_HYPERLINKS); if (ref.isEmpty() && pdfHyperLinks) // internal PDF link { if (refToTable) @@ -1655,14 +1674,14 @@ void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const Q } else // external link { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } } void LatexDocVisitor::endLink(const QCString &ref,const QCString &file,const QCString &anchor) { m_t << "}"; - static bool pdfHyperLinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperLinks = Config_getBool(PDF_HYPERLINKS); if (ref.isEmpty() && !pdfHyperLinks) { m_t << "{"; @@ -1703,7 +1722,7 @@ void LatexDocVisitor::startDotFile(const QCString &fileName, baseName=baseName.left(i); } baseName.prepend("dot_"); - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); QCString name = fileName; writeDotGraphFromFile(name,outDir,baseName,GOF_EPS); visitPreStart(m_t,hasCaption, baseName, width, height); @@ -1733,7 +1752,7 @@ void LatexDocVisitor::startMscFile(const QCString &fileName, } baseName.prepend("msc_"); - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS); visitPreStart(m_t,hasCaption, baseName, width, height); } @@ -1753,7 +1772,7 @@ void LatexDocVisitor::writeMscFile(const QCString &baseName, DocVerbatim *s) { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS); visitPreStart(m_t, s->hasCaption(), shortName, s->width(),s->height()); visitCaption(this, s->children()); @@ -1779,7 +1798,7 @@ void LatexDocVisitor::startDiaFile(const QCString &fileName, } baseName.prepend("dia_"); - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); writeDiaGraphFromFile(fileName,outDir,baseName,DIA_EPS); visitPreStart(m_t,hasCaption, baseName, width, height); } @@ -1799,7 +1818,7 @@ void LatexDocVisitor::writeDiaFile(const QCString &baseName, DocVerbatim *s) { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); writeDiaGraphFromFile(baseName+".dia",outDir,shortName,DIA_EPS); visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height()); visitCaption(this, s->children()); @@ -1814,7 +1833,7 @@ void LatexDocVisitor::writePlantUMLFile(const QCString &baseName, DocVerbatim *s { shortName=shortName.right(shortName.length()-i-1); } - QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString(LATEX_OUTPUT); generatePlantUMLOutput(baseName,outDir,PUML_EPS); visitPreStart(m_t, s->hasCaption(), shortName, s->width(), s->height()); visitCaption(this, s->children()); diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 60bf2ba..8d338ae 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -43,13 +43,13 @@ LatexCodeGenerator::LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFileName) : m_relPath(relPath), m_sourceFileName(sourceFileName), m_col(0) { - m_prettyCode=Config_getBool("LATEX_SOURCE_CODE"); + m_prettyCode=Config_getBool(LATEX_SOURCE_CODE); setTextStream(t); } -LatexCodeGenerator::LatexCodeGenerator() : m_col(0), m_streamSet(FALSE) +LatexCodeGenerator::LatexCodeGenerator() : m_streamSet(FALSE), m_col(0) { - m_prettyCode=Config_getBool("LATEX_SOURCE_CODE"); + m_prettyCode=Config_getBool(LATEX_SOURCE_CODE); } void LatexCodeGenerator::setTextStream(FTextStream &t) @@ -76,7 +76,7 @@ void LatexCodeGenerator::codify(const char *str) char c; //char cs[5]; int spacesToNextTabStop; - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); const int maxLineLen = 108; QCString result(4*maxLineLen+1); // worst case for 1 line of 4-byte chars int i; @@ -161,8 +161,8 @@ void LatexCodeGenerator::writeCodeLink(const char *ref,const char *f, const char *anchor,const char *name, const char *) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); int l = qstrlen(name); if (m_col+l>80) { @@ -188,8 +188,8 @@ void LatexCodeGenerator::writeCodeLink(const char *ref,const char *f, void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l) { - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (m_prettyCode) { QCString lineNumber; @@ -199,11 +199,11 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co { QCString lineAnchor; lineAnchor.sprintf("_l%05d",l); - lineAnchor.prepend(m_sourceFileName); + lineAnchor.prepend(stripExtensionGeneral(m_sourceFileName, ".tex")); //if (!m_prettyCode) return; if (usePDFLatex && pdfHyperlinks) { - m_t << "\\hypertarget{" << stripPath(lineAnchor) << "}{}"; + m_t << "\\Hypertarget{" << stripPath(lineAnchor) << "}"; } writeCodeLink(ref,fileName,anchor,lineNumber,0); } @@ -245,14 +245,14 @@ void LatexCodeGenerator::endFontClass() LatexGenerator::LatexGenerator() : OutputGenerator() { - dir=Config_getString("LATEX_OUTPUT"); + dir=Config_getString(LATEX_OUTPUT); //printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n"); insideTabbing=FALSE; firstDescItem=TRUE; disableLinks=FALSE; m_indent=0; templateMemberItem = FALSE; - m_prettyCode=Config_getBool("LATEX_SOURCE_CODE"); + m_prettyCode=Config_getBool(LATEX_SOURCE_CODE); } LatexGenerator::~LatexGenerator() @@ -262,7 +262,7 @@ LatexGenerator::~LatexGenerator() static void writeLatexMakefile() { bool generateBib = !Doxygen::citeDict->isEmpty(); - QCString dir=Config_getString("LATEX_OUTPUT"); + QCString dir=Config_getString(LATEX_OUTPUT); QCString fileName=dir+"/Makefile"; QFile file(fileName); if (!file.open(IO_WriteOnly)) @@ -271,11 +271,11 @@ static void writeLatexMakefile() exit(1); } // inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05 - QCString latex_command = Config_getString("LATEX_CMD_NAME"); - QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME"); + QCString latex_command = Config_getString(LATEX_CMD_NAME); + QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME); // end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05 FTextStream t(&file); - if (!Config_getBool("USE_PDFLATEX")) // use plain old latex + if (!Config_getBool(USE_PDFLATEX)) // use plain old latex { t << "all: refman.dvi" << endl << endl @@ -354,10 +354,10 @@ static void writeLatexMakefile() static void writeMakeBat() { #if defined(_MSC_VER) - QCString dir=Config_getString("LATEX_OUTPUT"); + QCString dir=Config_getString(LATEX_OUTPUT); QCString fileName=dir+"/make.bat"; - QCString latex_command = Config_getString("LATEX_CMD_NAME"); - QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME"); + QCString latex_command = Config_getString(LATEX_CMD_NAME); + QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME); QFile file(fileName); bool generateBib = !Doxygen::citeDict->isEmpty(); if (!file.open(IO_WriteOnly)) @@ -369,7 +369,7 @@ static void writeMakeBat() t << "set Dir_Old=%cd%\n"; t << "cd /D %~dp0\n\n"; t << "del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf\n\n"; - if (!Config_getBool("USE_PDFLATEX")) // use plain old latex + if (!Config_getBool(USE_PDFLATEX)) // use plain old latex { t << latex_command << " refman.tex\n"; t << "echo ----\n"; @@ -437,7 +437,7 @@ static void writeMakeBat() void LatexGenerator::init() { - QCString dir=Config_getString("LATEX_OUTPUT"); + QCString dir=Config_getString(LATEX_OUTPUT); QDir d(dir); if (!d.exists() && !d.mkdir(dir)) { @@ -456,12 +456,12 @@ static void writeDefaultHeaderPart1(FTextStream &t) // part 1 // Handle batch mode - if (Config_getBool("LATEX_BATCHMODE")) + if (Config_getBool(LATEX_BATCHMODE)) t << "\\batchmode\n"; // Set document class depending on configuration QCString documentClass; - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) documentClass = "article"; else documentClass = "book"; @@ -474,7 +474,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\usepackage{calc}\n" "\\usepackage{doxygen}\n" "\\usepackage[export]{adjustbox} % also loads graphicx\n"; - QStrList extraLatexStyle = Config_getList("LATEX_EXTRA_STYLESHEET"); + QStrList extraLatexStyle = Config_getList(LATEX_EXTRA_STYLESHEET); for (uint i=0; i<extraLatexStyle.count(); ++i) { QCString fileName(extraLatexStyle.at(i)); @@ -535,7 +535,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\n"; // Define page & text layout - QCString paperName=Config_getEnum("PAPER_TYPE"); + QCString paperName=Config_getEnum(PAPER_TYPE); // "a4wide" package is obsolete (see bug 563698) t << "% Page & text layout\n" "\\usepackage{geometry}\n" @@ -553,7 +553,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\hbadness=750\n" "\\setlength{\\emergencystretch}{15pt}\n" "\\setlength{\\parindent}{0cm}\n" - "\\setlength{\\parskip}{0.2cm}\n"; + "\\setlength{\\parskip}{3ex plus 2ex minus 2ex}\n"; // Redefine paragraph/subparagraph environments, using sectsty fonts t << "\\makeatletter\n" "\\renewcommand{\\paragraph}{%\n" @@ -572,11 +572,11 @@ static void writeDefaultHeaderPart1(FTextStream &t) // Headers & footers QGString genString; QCString generatedBy; - static bool timeStamp = Config_getBool("LATEX_TIMESTAMP"); + static bool timeStamp = Config_getBool(LATEX_TIMESTAMP); FTextStream tg(&genString); if (timeStamp) { - generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), Config_getString("PROJECT_NAME")); + generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), Config_getString(PROJECT_NAME)); } else { @@ -599,7 +599,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\fancyfoot[CO]{\\fancyplain{}{}}\n" "\\fancyfoot[RO]{\\fancyplain{}{}}\n" "\\renewcommand{\\footrulewidth}{0.4pt}\n"; - if (!Config_getBool("COMPACT_LATEX")) + if (!Config_getBool(COMPACT_LATEX)) { t << "\\renewcommand{\\chaptermark}[1]{%\n" " \\markboth{#1}{}%\n" @@ -619,24 +619,10 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\makeindex\n" "\n"; - // User-specified packages - QStrList &extraPackages = Config_getList("EXTRA_PACKAGES"); - if (!extraPackages.isEmpty()) { - t << "% Packages requested by user\n"; - const char *pkgName=extraPackages.first(); - while (pkgName) - { - if ((pkgName[0] == '[') || (pkgName[0] == '{')) - t << "\\usepackage" << pkgName << "\n"; - else - t << "\\usepackage{" << pkgName << "}\n"; - pkgName=extraPackages.next(); - } - t << "\n"; - } + writeExtraLatexPackages(t); // Hyperlinks - bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (pdfHyperlinks) { t << "% Hyperlinks (required, but should be loaded last)\n" @@ -676,7 +662,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) // Front matter t << "% Titlepage & ToC\n"; - bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + bool usePDFLatex = Config_getBool(USE_PDFLATEX); if (pdfHyperlinks && usePDFLatex) { // To avoid duplicate page anchors due to reuse of same numbers for @@ -687,7 +673,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) << " pdfencoding=unicode\n" << " }\n"; } - t << "\\pagenumbering{roman}\n" + t << "\\pagenumbering{alph}\n" "\\begin{titlepage}\n" "\\vspace*{7cm}\n" "\\begin{center}%\n" @@ -708,22 +694,23 @@ static void writeDefaultHeaderPart3(FTextStream &t) // part 3 // Finalize project number t << " Doxygen " << versionString << "}\\\\\n"; - if (Config_getBool("LATEX_TIMESTAMP")) + if (Config_getBool(LATEX_TIMESTAMP)) t << "\\vspace*{0.5cm}\n" "{\\small " << dateToString(TRUE) << "}\\\\\n"; t << "\\end{center}\n" "\\end{titlepage}\n"; - bool compactLatex = Config_getBool("COMPACT_LATEX"); + bool compactLatex = Config_getBool(COMPACT_LATEX); if (!compactLatex) t << "\\clearemptydoublepage\n"; + t << "\\pagenumbering{roman}\n"; // ToC t << "\\tableofcontents\n"; if (!compactLatex) t << "\\clearemptydoublepage\n"; t << "\\pagenumbering{arabic}\n"; - bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + bool usePDFLatex = Config_getBool(USE_PDFLATEX); if (pdfHyperlinks && usePDFLatex) { // re-enable anchors again @@ -749,7 +736,7 @@ static void writeDefaultFooter(FTextStream &t) // Index t << "% Index\n"; QCString unit; - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { unit = "section"; } @@ -795,7 +782,7 @@ void LatexGenerator::writeStyleSheetFile(QFile &f) void LatexGenerator::startFile(const char *name,const char *,const char *) { #if 0 - setEncoding(Config_getString("LATEX_OUTPUT_ENCODING")); + setEncoding(Config_getString(LATEX_OUTPUT_ENCODING)); #endif QCString fileName=name; relPath = relativePathToRoot(fileName); @@ -824,8 +811,8 @@ void LatexGenerator::startProjectNumber() void LatexGenerator::startIndexSection(IndexSections is) { - bool &compactLatex = Config_getBool("COMPACT_LATEX"); - QCString &latexHeader = Config_getString("LATEX_HEADER"); + bool &compactLatex = Config_getBool(COMPACT_LATEX); + QCString &latexHeader = Config_getString(LATEX_HEADER); switch (is) { case isTitlePageStart: @@ -838,9 +825,9 @@ void LatexGenerator::startIndexSection(IndexSections is) { QCString header = fileToString(latexHeader); t << substituteKeywords(header,"", - convertToLaTeX(Config_getString("PROJECT_NAME")), - convertToLaTeX(Config_getString("PROJECT_NUMBER")), - convertToLaTeX(Config_getString("PROJECT_BRIEF"))); + convertToLaTeX(Config_getString(PROJECT_NAME)), + convertToLaTeX(Config_getString(PROJECT_NUMBER)), + convertToLaTeX(Config_getString(PROJECT_BRIEF))); } } break; @@ -999,10 +986,10 @@ void LatexGenerator::startIndexSection(IndexSections is) void LatexGenerator::endIndexSection(IndexSections is) { - //static bool compactLatex = Config_getBool("COMPACT_LATEX"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); - static QCString latexHeader = Config_getString("LATEX_HEADER"); - static QCString latexFooter = Config_getString("LATEX_FOOTER"); + //static bool compactLatex = Config_getBool(COMPACT_LATEX); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + static QCString latexHeader = Config_getString(LATEX_HEADER); + static QCString latexFooter = Config_getString(LATEX_FOOTER); switch (is) { case isTitlePageStart: @@ -1015,10 +1002,10 @@ void LatexGenerator::endIndexSection(IndexSections is) break; case isMainPage: { - //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index"; + //QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index"; QCString indexName="index"; t << "}\n\\label{index}"; - if (Config_getBool("PDF_HYPERLINKS")) t << "\\hypertarget{index}{}"; + if (Config_getBool(PDF_HYPERLINKS)) t << "\\hypertarget{index}{}"; t << "\\input{" << indexName << "}\n"; } break; @@ -1236,9 +1223,9 @@ void LatexGenerator::endIndexSection(IndexSections is) { QCString footer = fileToString(latexFooter); t << substituteKeywords(footer,"", - convertToLaTeX(Config_getString("PROJECT_NAME")), - convertToLaTeX(Config_getString("PROJECT_NUMBER")), - convertToLaTeX(Config_getString("PROJECT_BRIEF"))); + convertToLaTeX(Config_getString(PROJECT_NAME)), + convertToLaTeX(Config_getString(PROJECT_NUMBER)), + convertToLaTeX(Config_getString(PROJECT_BRIEF))); } break; } @@ -1246,7 +1233,7 @@ void LatexGenerator::endIndexSection(IndexSections is) void LatexGenerator::writePageLink(const char *name, bool /*first*/) { - //bool &compactLatex = Config_getBool("COMPACT_LATEX"); + //bool &compactLatex = Config_getBool(COMPACT_LATEX); // next is remove for bug615957 //if (compactLatex || first) t << "\\input" ; else t << "\\include"; t << "\\input" ; @@ -1269,7 +1256,7 @@ void LatexGenerator::newParagraph() t << endl << endl; } -void LatexGenerator::startParagraph() +void LatexGenerator::startParagraph(const char *) { t << endl << endl; } @@ -1305,13 +1292,13 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn) //{ // t << "\\item\\contentsline{section}{"; // docify(text); -// t << "}{\\pageref{" << text << "}}" << endl; +// t << "}{\\pageref{" << stripPath(text) << "}}" << endl; //} void LatexGenerator::startHtmlLink(const char *url) { - if (Config_getBool("PDF_HYPERLINKS")) + if (Config_getBool(PDF_HYPERLINKS)) { t << "\\href{"; t << url; @@ -1327,7 +1314,7 @@ void LatexGenerator::endHtmlLink() //void LatexGenerator::writeMailLink(const char *url) //{ -// if (Config_getBool("PDF_HYPERLINKS")) +// if (Config_getBool(PDF_HYPERLINKS)) // { // t << "\\href{mailto:"; // t << url; @@ -1349,7 +1336,7 @@ void LatexGenerator::writeStartAnnoItem(const char *,const char *, void LatexGenerator::writeEndAnnoItem(const char *name) { - t << "}{\\pageref{" << name << "}}{}" << endl; + t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl; } void LatexGenerator::startIndexKey() @@ -1370,7 +1357,7 @@ void LatexGenerator::startIndexValue(bool hasBrief) void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/) { //if (hasBrief) t << ")"; - t << "}{\\pageref{" << name << "}}{}" << endl; + t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl; } //void LatexGenerator::writeClassLink(const char *,const char *, @@ -1383,7 +1370,7 @@ void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/) void LatexGenerator::startTextLink(const char *f,const char *anchor) { - if (!disableLinks && Config_getBool("PDF_HYPERLINKS")) + if (!disableLinks && Config_getBool(PDF_HYPERLINKS)) { t << "\\hyperlink{"; if (f) t << stripPath(f); @@ -1392,7 +1379,7 @@ void LatexGenerator::startTextLink(const char *f,const char *anchor) } else { - t << "{\\bf "; + t << "\\textbf{ "; } } @@ -1404,7 +1391,7 @@ void LatexGenerator::endTextLink() void LatexGenerator::writeObjectLink(const char *ref, const char *f, const char *anchor, const char *text) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); if (!disableLinks && !ref && pdfHyperlinks) { t << "\\hyperlink{"; @@ -1417,7 +1404,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, } else { - t << "{\\bf "; + t << "\\textbf{ "; docify(text); t << "}"; } @@ -1439,13 +1426,13 @@ void LatexGenerator::endPageRef(const char *clname, const char *anchor) void LatexGenerator::startTitleHead(const char *fileName) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); if (usePDFLatex && pdfHyperlinks && fileName) { t << "\\hypertarget{" << stripPath(fileName) << "}{}"; } - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { t << "\\subsection{"; } @@ -1470,7 +1457,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name) void LatexGenerator::startTitle() { - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { t << "\\subsection{"; } @@ -1482,7 +1469,7 @@ void LatexGenerator::startTitle() void LatexGenerator::startGroupHeader(int extraIndentLevel) { - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { extraIndentLevel++; } @@ -1514,7 +1501,7 @@ void LatexGenerator::endGroupHeader(int) void LatexGenerator::startMemberHeader(const char *) { - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { t << "\\subsubsection*{"; } @@ -1535,8 +1522,10 @@ void LatexGenerator::startMemberDoc(const char *clname, const char *memname, const char *, const char *title, + int memCount, + int memTotal, bool showInline) -{ +{ if (memname && memname[0]!='@') { t << "\\index{"; @@ -1563,19 +1552,19 @@ void LatexGenerator::startMemberDoc(const char *clname, t << latexEscapeLabelName(clname,insideTabbing); t << "@{"; t << latexEscapeIndexChars(clname,insideTabbing); - t << "}"; + t << "}"; } t << "}" << endl; } static const char *levelLab[] = { "subsubsection","paragraph","subparagraph", "subparagraph" }; - static bool compactLatex = Config_getBool("COMPACT_LATEX"); - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); + static bool compactLatex = Config_getBool(COMPACT_LATEX); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); int level=0; if (showInline) level+=2; if (compactLatex) level++; - t << "\\" << levelLab[level]; + t << "\\" << levelLab[level]; - t << "[{"; + t << "{"; if (pdfHyperlinks) { t << "\\texorpdfstring{"; @@ -1585,56 +1574,61 @@ void LatexGenerator::startMemberDoc(const char *clname, { t << "}{" << latexEscapePDFString(title) << "}"; } - t << "}]"; - t << "{\\setlength{\\rightskip}{0pt plus 5cm}"; - disableLinks=TRUE; + if (memTotal>1) + { + t << "\\hspace{0.1cm}{\\footnotesize\\ttfamily [" << memCount << "/" << memTotal << "]}"; + } + t << "}"; + t << "\n{\\footnotesize\\ttfamily "; + //disableLinks=TRUE; } void LatexGenerator::endMemberDoc(bool) { disableLinks=FALSE; - t << "}"; - //if (Config_getBool("COMPACT_LATEX")) t << "\\hfill"; + t << "}\n\n"; + //if (Config_getBool(COMPACT_LATEX)) t << "\\hfill"; } void LatexGenerator::startDoxyAnchor(const char *fName,const char *, const char *anchor, const char *, const char *) { -} - -void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) -{ - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); + t << "\\mbox{"; if (usePDFLatex && pdfHyperlinks) { - t << "\\hypertarget{"; + t << "\\Hypertarget{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; - t << "}{}"; + t << "}"; } t << "\\label{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; - t << "}" << endl; + t << "}} " << endl; +} + +void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) +{ } void LatexGenerator::writeAnchor(const char *fName,const char *name) { //printf("LatexGenerator::writeAnchor(%s,%s)\n",fName,name); t << "\\label{" << stripPath(name) << "}" << endl; - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); if (usePDFLatex && pdfHyperlinks) { if (fName) { - t << "\\hypertarget{" << stripPath(fName) << "_" << stripPath(name) << "}{}" << endl; + t << "\\Hypertarget{" << stripPath(fName) << "_" << stripPath(name) << "}" << endl; } else { - t << "\\hypertarget{" << stripPath(name) << "}{}" << endl; + t << "\\Hypertarget{" << stripPath(name) << "}" << endl; } } } @@ -1669,14 +1663,14 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2) void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type) { - static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); - static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); + static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); + static bool usePDFLatex = Config_getBool(USE_PDFLATEX); if (usePDFLatex && pdfHyperlinks) { t << "\\hypertarget{" << stripPath(lab) << "}{}"; } t << "\\"; - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { switch(type) { @@ -1725,7 +1719,7 @@ void LatexGenerator::writeChar(char c) void LatexGenerator::startClassDiagram() { - //if (Config_getBool("COMPACT_LATEX")) t << "\\subsubsection"; else t << "\\subsection"; + //if (Config_getBool(COMPACT_LATEX)) t << "\\subsubsection"; else t << "\\subsection"; //t << "{"; } @@ -1833,6 +1827,65 @@ void LatexGenerator::writeNonBreakableSpace(int) } } +// ---------------------------------------------- +// nesting of functions below: +// startDescTable() +// - startDescTableRow() +// - startDescTableTitle() +// - endDescTabelTitle() +// - startDescTableData() +// - endDescTableData() +// - endDescTableRow() +// - startDescTableRow() +// - ... +// - endDescTableRow() +// endDescTable() + +void LatexGenerator::startDescTable(const char *title) +{ + t << "\\begin{DoxyEnumFields}{" << title << "}" << endl; +} + +void LatexGenerator::endDescTable() +{ + t << "\\end{DoxyEnumFields}" << endl; +} + +void LatexGenerator::startDescTableRow() +{ + // this is needed to prevent the \hypertarget, \label, and \index commands from messing up + // the row height (based on http://tex.stackexchange.com/a/186102) + t << "\\raisebox{\\heightof{T}}[0pt][0pt]{"; +} + +void LatexGenerator::endDescTableRow() +{ +} + +void LatexGenerator::startDescTableTitle() +{ + t << "}"; +} + +void LatexGenerator::endDescTableTitle() +{ +} + +void LatexGenerator::startDescTableData() +{ + t << "&"; +} + +void LatexGenerator::endDescTableData() +{ + t << "\\\\\n\\hline\n" << endl; +} + +void LatexGenerator::lastIndexPage() +{ +} + + void LatexGenerator::startMemberList() { if (!insideTabbing) @@ -1854,9 +1907,9 @@ void LatexGenerator::endMemberList() void LatexGenerator::startMemberGroupHeader(bool hasHeader) { if (hasHeader) t << "\\begin{Indent}"; - t << "{\\bf "; + t << "\\textbf{ "; // changed back to rev 756 due to bug 660501 - //if (Config_getBool("COMPACT_LATEX")) + //if (Config_getBool(COMPACT_LATEX)) //{ // t << "\\subparagraph*{"; //} @@ -1900,7 +1953,7 @@ void LatexGenerator::startDotGraph() void LatexGenerator::endDotGraph(const DotClassGraph &g) { - g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath); } void LatexGenerator::startInclDepGraph() @@ -1909,7 +1962,7 @@ void LatexGenerator::startInclDepGraph() void LatexGenerator::endInclDepGraph(const DotInclDepGraph &g) { - g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath); } void LatexGenerator::startGroupCollaboration() @@ -1918,7 +1971,7 @@ void LatexGenerator::startGroupCollaboration() void LatexGenerator::endGroupCollaboration(const DotGroupCollaboration &g) { - g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath); } void LatexGenerator::startCallGraph() @@ -1927,7 +1980,7 @@ void LatexGenerator::startCallGraph() void LatexGenerator::endCallGraph(const DotCallGraph &g) { - g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath); } void LatexGenerator::startDirDepGraph() @@ -1936,7 +1989,7 @@ void LatexGenerator::startDirDepGraph() void LatexGenerator::endDirDepGraph(const DotDirDeps &g) { - g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString("LATEX_OUTPUT"),fileName,relPath); + g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath); } void LatexGenerator::startDescription() @@ -2005,7 +2058,7 @@ void LatexGenerator::startParameterList(bool openBracket) { /* start of ParameterType ParameterName list */ if (openBracket) t << "("; - t << endl << "\\begin{DoxyParamCaption}" << endl; + t << "\\begin{DoxyParamCaption}"; } void LatexGenerator::endParameterList() @@ -2028,13 +2081,12 @@ void LatexGenerator::startParameterName(bool /*oneArgOnly*/) t << "{"; } -void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeBracket) +void LatexGenerator::endParameterName(bool last,bool /*emptyList*/,bool closeBracket) { - t << "}" << endl; - + t << " }"; if (last) { - t << "\\end{DoxyParamCaption}" << endl; + t << "\\end{DoxyParamCaption}"; if (closeBracket) t << ")"; } } @@ -2109,7 +2161,7 @@ void LatexGenerator::endCodeFragment() void LatexGenerator::startInlineHeader() { - if (Config_getBool("COMPACT_LATEX")) + if (Config_getBool(COMPACT_LATEX)) { t << "\\paragraph*{"; } @@ -2132,38 +2184,57 @@ void LatexGenerator::lineBreak(const char *) } else { - t << "\\\\*\n"; + t << "\\newline\n"; } } -void LatexGenerator::startMemberDocSimple() +void LatexGenerator::startMemberDocSimple(bool isEnum) { - t << "\\begin{DoxyFields}{"; - docify(theTranslator->trCompoundMembers()); + if (isEnum) + { + t << "\\begin{DoxyEnumFields}{"; + docify(theTranslator->trEnumerationValues()); + } + else + { + t << "\\begin{DoxyFields}{"; + docify(theTranslator->trCompoundMembers()); + } t << "}" << endl; } -void LatexGenerator::endMemberDocSimple() +void LatexGenerator::endMemberDocSimple(bool isEnum) { - t << "\\end{DoxyFields}" << endl; + if (isEnum) + { + t << "\\end{DoxyEnumFields}" << endl; + } + else + { + t << "\\end{DoxyFields}" << endl; + } } void LatexGenerator::startInlineMemberType() { + insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks } void LatexGenerator::endInlineMemberType() { t << "&" << endl; + insideTabbing = FALSE; } void LatexGenerator::startInlineMemberName() { + insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks } void LatexGenerator::endInlineMemberName() { t << "&" << endl; + insideTabbing = FALSE; } void LatexGenerator::startInlineMemberDoc() diff --git a/src/latexgen.h b/src/latexgen.h index 84382a7..430d250 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -135,7 +135,7 @@ class LatexGenerator : public OutputGenerator void endTitle() { t << "}"; } void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem() {} @@ -208,7 +208,7 @@ class LatexGenerator : public OutputGenerator void startDescItem(); void endDescItem(); void lineBreak(const char *style=0); - void startMemberDoc(const char *,const char *,const char *,const char *,bool); + void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool); void endMemberDoc(bool); void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *); void endDoxyAnchor(const char *,const char *); @@ -259,23 +259,16 @@ class LatexGenerator : public OutputGenerator void startContents() {} void endContents() {} void writeNonBreakableSpace(int); - - void startDescTable(const char *title) - { startSimpleSect(EnumValues,0,0,title); - startDescForItem(); - t << "\\begin{description}" << endl; } - void endDescTable() - { t << "\\end{description}" << endl; - endDescForItem(); - endSimpleSect(); - } - void startDescTableTitle() - { t << "\\item[{\\em " << endl; } - void endDescTableTitle() - { t << "}]"; } - void startDescTableData() {} - void endDescTableData() {} - void lastIndexPage() {} + + void startDescTable(const char *title); + void endDescTable(); + void startDescTableRow(); + void endDescTableRow(); + void startDescTableTitle(); + void endDescTableTitle(); + void startDescTableData(); + void endDescTableData(); + void lastIndexPage(); void startDotGraph(); void endDotGraph(const DotClassGraph &); @@ -293,7 +286,7 @@ class LatexGenerator : public OutputGenerator void endTextBlock(bool) {} void startMemberDocPrefixItem() {} - void endMemberDocPrefixItem() {} + void endMemberDocPrefixItem() { t << "\\\\" << endl; } void startMemberDocName(bool) {} void endMemberDocName() {} void startParameterType(bool,const char *); @@ -313,8 +306,8 @@ class LatexGenerator : public OutputGenerator void endConstraintDocs(); void endConstraintList(); - void startMemberDocSimple(); - void endMemberDocSimple(); + void startMemberDocSimple(bool); + void endMemberDocSimple(bool); void startInlineMemberType(); void endInlineMemberType(); void startInlineMemberName(); diff --git a/src/layout.cpp b/src/layout.cpp index 2835e77..fdc9f4c 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -57,10 +57,10 @@ static bool elemIsVisible(const QXmlAttributes &attrib,bool defVal=TRUE) if (visible.at(0)=='$' && visible.length()>1) { QCString id = visible.mid(1); - ConfigOption *opt = Config::instance()->get(id); - if (opt && opt->kind()==ConfigOption::O_Bool) + const ConfigValues::Info *opt = ConfigValues::instance().get(id); + if (opt && opt->type==ConfigValues::Info::Bool) { - return *((ConfigBool *)opt)->valueRef(); + return ConfigValues::instance().*((ConfigValues::InfoBool*)opt)->item; } else if (!opt) { @@ -120,7 +120,7 @@ QCString LayoutNavEntry::url() const } if (!found) { - msg("explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE"))); + msg("explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString(LAYOUT_FILE))); } } //printf("LayoutNavEntry::url()=%s\n",url.data()); @@ -262,9 +262,9 @@ class LayoutParser : public QXmlDefaultHandler m_part = -1; // invalid m_rootNav = 0; - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - //bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - //bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + //bool javaOpt = Config_getBool(OPTIMIZE_OUTPUT_JAVA); // start & end handlers m_sHandler.insert("doxygenlayout", @@ -887,19 +887,19 @@ class LayoutParser : public QXmlDefaultHandler { // no MainPage node... add one as the first item of the root node... new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE, - /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index", + /*Config_getBool(GENERATE_TREEVIEW) ? "main" :*/ "index", theTranslator->trMainPage(),"",TRUE); } } void startNavEntry(const QXmlAttributes &attrib) { - static bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - static bool hasGraphicalHierarchy = Config_getBool("HAVE_DOT") && - Config_getBool("GRAPHICAL_HIERARCHY"); - static bool extractAll = Config_getBool("EXTRACT_ALL"); + static bool javaOpt = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + static bool hasGraphicalHierarchy = Config_getBool(HAVE_DOT) && + Config_getBool(GRAPHICAL_HIERARCHY); + static bool extractAll = Config_getBool(EXTRACT_ALL); static struct NavEntryMap { const char *typeStr; // type attribute name in the XML file diff --git a/src/lodepng.cpp b/src/lodepng.cpp index dbbced5..66335aa 100644 --- a/src/lodepng.cpp +++ b/src/lodepng.cpp @@ -622,7 +622,7 @@ static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigne /*keep the coins with lowest weight, so that they add up to the amount of symbols - 1*/ vector_resized(&coins, numpresent - 1, Coin_cleanup); - /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/ + /*calculate the lengths of each symbol, as the amount of times a coin of each symbol is used*/ for(i = 0; i < coins.size; i++) { Coin* coin = (Coin*)vector_get(&coins, i); @@ -1114,7 +1114,7 @@ static unsigned encodeLZ77_brute(uivector* out, const unsigned char* in, size_t size_t current_length = 1; size_t backtest = backpos + 1; size_t foretest = pos + 1; - while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/ + while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum support length by deflate is max length*/ { if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/ current_length++; @@ -1213,7 +1213,7 @@ static unsigned encodeLZ77(uivector* out, const unsigned char* in, size_t size, unsigned current_length = 0; unsigned backtest = backpos; unsigned foretest = pos; - while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/ + while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum support length by deflate is max length*/ { if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/ current_length++; @@ -1330,7 +1330,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t after the BFINAL and BTYPE, the dynamic block consists out of the following: - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN - (HCLEN+4)*3 bits code lengths of code length alphabet - - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) + - HLIT + 257 code lengths of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) - HDIST + 1 code lengths of distance alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) - compressed data - 256 (end code) @@ -1346,7 +1346,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t uivector frequenciesD; uivector amounts; /*the amounts in the "normal" order*/ uivector lldl; - uivector lldll; /*lit/len & dist code lenghts*/ + uivector lldll; /*lit/len & dist code lengths*/ uivector clcls; unsigned BFINAL = 1; /*make only one block... the first and final one*/ @@ -1448,7 +1448,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t if(error) break; if(!uivector_resize(&clcls, 19)) { error = 9927; break; } - for(i = 0; i < 19; i++) clcls.data[i] = HuffmanTree_getLength(&codelengthcodes, CLCL[i]); /*lenghts of code length tree is in the order as specified by deflate*/ + for(i = 0; i < 19; i++) clcls.data[i] = HuffmanTree_getLength(&codelengthcodes, CLCL[i]); /*lengths of code length tree is in the order as specified by deflate*/ while(clcls.data[clcls.size - 1] == 0 && clcls.size > 4) { if(!uivector_resize(&clcls, clcls.size - 1)) { error = 9928; break; } /*remove zeros at the end, but minimum size must be 4*/ @@ -1463,10 +1463,10 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t addBitsToStream(&bp, out, HDIST, 5); addBitsToStream(&bp, out, HCLEN, 4); - /*write the code lenghts of the code length alphabet*/ + /*write the code lengths of the code length alphabet*/ for(i = 0; i < HCLEN + 4; i++) addBitsToStream(&bp, out, clcls.data[i], 3); - /*write the lenghts of the lit/len AND the dist alphabet*/ + /*write the lengths of the lit/len AND the dist alphabet*/ for(i = 0; i < lldl.size; i++) { addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codelengthcodes, lldl.data[i]), HuffmanTree_getLength(&codelengthcodes, lldl.data[i])); @@ -1734,7 +1734,7 @@ const LodeZlib_DecompressSettings LodeZlib_defaultDecompressSettings = {0}; The two functions below (LodePNG_decompress and LodePNG_compress) directly call the LodeZlib_decompress and LodeZlib_compress functions. The only purpose of the functions below, is to provide the ability to let LodePNG use a different Zlib encoder by only -changing the two functions below, instead of changing it inside the vareous places +changing the two functions below, instead of changing it inside the various places in the other LodePNG functions. *out must be NULL and *outsize must be 0 initially, and after the function is done, @@ -2813,7 +2813,7 @@ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, cons if(error) return error; removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); } - else error = unfilter(out, in, w, h, bpp); /*we can immediatly filter into the out buffer, no other steps needed*/ + else error = unfilter(out, in, w, h, bpp); /*we can immediately filter into the out buffer, no other steps needed*/ } else /*interlaceMethod is 1 (Adam7)*/ { diff --git a/src/main.cpp b/src/main.cpp index cfd38ce..2061087 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,13 +1,13 @@ /****************************************************************************** * - * + * * * * Copyright (C) 1997-2015 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 + * 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. * @@ -25,7 +25,7 @@ */ /*! Default main. The idea of separating this from the rest of doxygen, - * is to make it possible to write your own main, with a different + * is to make it possible to write your own main, with a different * generateOutput() function for instance. */ int main(int argc,char **argv) diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 0cc3959..2233cc6 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -237,7 +237,14 @@ void ManDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile(), &fd); + inc->exampleFile(), + &fd, // fileDef, + -1, // start line + -1, // end line + FALSE, // inline fragment + 0, // memberDef + TRUE + ); if (!m_firstCol) m_t << endl; m_t << ".fi" << endl; m_t << ".PP" << endl; @@ -253,7 +260,14 @@ void ManDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile()); + inc->exampleFile(), + 0, // fileDef + -1, // startLine + -1, // endLine + TRUE, // inlineFragment + 0, // memberDef + FALSE + ); if (!m_firstCol) m_t << endl; m_t << ".fi" << endl; m_t << ".PP" << endl; @@ -292,6 +306,38 @@ void ManDocVisitor::visit(DocInclude *inc) m_t << ".PP" << endl; m_firstCol=TRUE; break; + case DocInclude::SnipWithLines: + { + if (!m_firstCol) m_t << endl; + m_t << ".PP" << endl; + m_t << ".nf" << endl; + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef + TRUE // show line number + ); + if (!m_firstCol) m_t << endl; + m_t << ".fi" << endl; + m_t << ".PP" << endl; + m_firstCol=TRUE; + } + break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -818,7 +864,7 @@ void ManDocVisitor::visitPost(DocSecRefList *) //void ManDocVisitor::visitPre(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // pushEnabled(); @@ -828,7 +874,7 @@ void ManDocVisitor::visitPost(DocSecRefList *) // //void ManDocVisitor::visitPost(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // popEnabled(); diff --git a/src/mangen.cpp b/src/mangen.cpp index a88ac26..17e6003 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -38,7 +38,7 @@ static QCString getExtension() * in case of . missing, just ignore it * in case number missing, just place a 3 in front of it */ - QCString ext = Config_getString("MAN_EXTENSION"); + QCString ext = Config_getString(MAN_EXTENSION); if (ext.isEmpty()) { ext = "3"; @@ -66,7 +66,7 @@ static QCString getExtension() static QCString getSubdir() { - QCString dir = Config_getString("MAN_SUBDIR"); + QCString dir = Config_getString(MAN_SUBDIR); if (dir.isEmpty()) { dir = "man" + getExtension(); @@ -76,7 +76,7 @@ static QCString getSubdir() ManGenerator::ManGenerator() : OutputGenerator() { - dir=Config_getString("MAN_OUTPUT") + "/" + getSubdir(); + dir=Config_getString(MAN_OUTPUT) + "/" + getSubdir(); firstCol=TRUE; paragraph=TRUE; col=0; @@ -107,7 +107,7 @@ ManGenerator::~ManGenerator() void ManGenerator::init() { - QCString &manOutput = Config_getString("MAN_OUTPUT"); + QCString &manOutput = Config_getString(MAN_OUTPUT); QDir d(manOutput); if (!d.exists() && !d.mkdir(manOutput)) @@ -181,17 +181,17 @@ void ManGenerator::endTitleHead(const char *,const char *name) { t << ".TH \"" << name << "\" " << getExtension() << " \"" << dateToString(FALSE) << "\" \""; - if (!Config_getString("PROJECT_NUMBER").isEmpty()) - t << "Version " << Config_getString("PROJECT_NUMBER") << "\" \""; - if (Config_getString("PROJECT_NAME").isEmpty()) + if (!Config_getString(PROJECT_NUMBER).isEmpty()) + t << "Version " << Config_getString(PROJECT_NUMBER) << "\" \""; + if (Config_getString(PROJECT_NAME).isEmpty()) t << "Doxygen"; else - t << Config_getString("PROJECT_NAME"); + t << Config_getString(PROJECT_NAME); t << "\" \\\" -*- nroff -*-" << endl; t << ".ad l" << endl; t << ".nh" << endl; t << ".SH NAME" << endl; - t << name << " \\- "; + t << name; firstCol=FALSE; paragraph=TRUE; inHeader=TRUE; @@ -208,7 +208,7 @@ void ManGenerator::newParagraph() paragraph=TRUE; } -void ManGenerator::startParagraph() +void ManGenerator::startParagraph(const char *) { if (!paragraph) { @@ -335,7 +335,7 @@ void ManGenerator::codify(const char *str) { case '.': t << "\\&."; break; // see bug652277 case '\t': spacesToNextTabStop = - Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE")); + Config_getInt(TAB_SIZE) - (col%Config_getInt(TAB_SIZE)); t << Doxygen::spaces.left(spacesToNextTabStop); col+=spacesToNextTabStop; break; @@ -418,7 +418,7 @@ void ManGenerator::endCodeFragment() col=0; } -void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool) +void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool) { if (!firstCol) t << endl; t << ".SS \""; @@ -431,7 +431,7 @@ void ManGenerator::startDoxyAnchor(const char *,const char *manName, const char *) { // something to be done? - if( !Config_getBool("MAN_LINKS") ) + if( !Config_getBool(MAN_LINKS) ) { return; // no } @@ -762,19 +762,26 @@ void ManGenerator::endInlineHeader() firstCol = FALSE; } -void ManGenerator::startMemberDocSimple() +void ManGenerator::startMemberDocSimple(bool isEnum) { if (!firstCol) { t << endl << ".PP" << endl; } t << "\\fB"; - docify(theTranslator->trCompoundMembers()); + if (isEnum) + { + docify(theTranslator->trEnumerationValues()); + } + else + { + docify(theTranslator->trCompoundMembers()); + } t << ":\\fP" << endl; t << ".RS 4" << endl; } -void ManGenerator::endMemberDocSimple() +void ManGenerator::endMemberDocSimple(bool) { if (!firstCol) t << endl; t << ".RE" << endl; diff --git a/src/mangen.h b/src/mangen.h index 93111cf..b3b9f76 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -62,7 +62,7 @@ class ManGenerator : public OutputGenerator void endTitle(); void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem() {} @@ -144,7 +144,7 @@ class ManGenerator : public OutputGenerator void endDescItem(); void lineBreak(const char *) { t << "\n.br" << endl; } void writeChar(char c); - void startMemberDoc(const char *,const char *,const char *,const char *,bool); + void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool); void endMemberDoc(bool); void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *); void endDoxyAnchor(const char *,const char *) {} @@ -160,8 +160,8 @@ class ManGenerator : public OutputGenerator void endCenter() {} void startSmall() {} void endSmall() {} - void startMemberDescription(const char *,const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; } - void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; } + void startMemberDescription(const char *,const char *) { t << "\n.RI \""; firstCol=FALSE; } + void endMemberDescription() { t << "\""; firstCol=FALSE; } void startMemberDeclaration() {} void endMemberDeclaration(const char *,const char *) {} void writeInheritedSectionTitle(const char *,const char *,const char *, @@ -199,6 +199,8 @@ class ManGenerator : public OutputGenerator void startDescTable(const char *t) { startSimpleSect(EnumValues,0,0,t); startDescForItem(); } void endDescTable() { endDescForItem(); endSimpleSect(); } + void startDescTableRow() {} + void endDescTableRow() {} void startDescTableTitle() { startItemListItem(); startBold(); startEmphasis(); endItemListItem(); } void endDescTableTitle() { endEmphasis(); endBold(); } void startDescTableData() { t << endl; firstCol=TRUE; } @@ -244,8 +246,8 @@ class ManGenerator : public OutputGenerator void endConstraintDocs(); void endConstraintList(); - void startMemberDocSimple(); - void endMemberDocSimple(); + void startMemberDocSimple(bool); + void endMemberDocSimple(bool); void startInlineMemberType(); void endInlineMemberType(); void startInlineMemberName(); diff --git a/src/markdown.cpp b/src/markdown.cpp index f070125..67ceba2 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -36,6 +36,8 @@ #include <qregexp.h> #include <qfileinfo.h> #include <qdict.h> +#include <qvector.h> +#define USE_ORIGINAL_TABLES #include "markdown.h" #include "growbuf.h" @@ -59,6 +61,11 @@ (data[i]>='0' && data[i]<='9') || \ (((unsigned char)data[i])>=0x80)) // unicode characters +#define extraChar(i) \ + (data[i]=='-' || data[i]=='+' || data[i]=='!' || \ + data[i]=='?' || data[i]=='$' || data[i]=='@' || \ + data[i]=='&' || data[i]=='*' || data[i]=='%') + // is character at position i in data allowed before an emphasis section #define isOpenEmphChar(i) \ (data[i]=='\n' || data[i]==' ' || data[i]=='\'' || data[i]=='<' || \ @@ -81,6 +88,13 @@ struct LinkRef QCString title; }; +struct TableCell +{ + TableCell() : colSpan(false) {} + QCString cellText; + bool colSpan; +}; + typedef int (*action_t)(GrowBuf &out,const char *data,int offset,int size); enum Alignment { AlignNone, AlignLeft, AlignCenter, AlignRight }; @@ -111,19 +125,22 @@ static void processInline(GrowBuf &out,const char *data,int size); static QCString escapeSpecialChars(const QCString &s) { if (s.isEmpty()) return ""; + bool insideQuote=FALSE; GrowBuf growBuf; const char *p=s; - char c; + char c,pc='\0'; while ((c=*p++)) { switch (c) { - case '<': growBuf.addStr("\\<"); break; - case '>': growBuf.addStr("\\>"); break; - case '\\': growBuf.addStr("\\\\"); break; - case '@': growBuf.addStr("\\@"); break; - default: growBuf.addChar(c); break; + case '"': if (pc!='\\') { insideQuote=!insideQuote; } growBuf.addChar(c); break; + case '<': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('<'); break; + case '>': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('>'); break; + case '\\': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('\\'); break; + case '@': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('@'); break; + default: growBuf.addChar(c); break; } + pc=c; } growBuf.addChar(0); return growBuf.get(); @@ -589,8 +606,8 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size) static int processEmphasis(GrowBuf &out,const char *data,int offset,int size) { if ((offset>0 && !isOpenEmphChar(-1)) || // invalid char before * or _ - (size>1 && data[0]!=data[1] && !isIdChar(1)) || // invalid char after * or _ - (size>2 && data[0]==data[1] && !isIdChar(2))) // invalid char after ** or __ + (size>1 && data[0]!=data[1] && !(isIdChar(1) || extraChar(1) || data[1]=='[')) || // invalid char after * or _ + (size>2 && data[0]==data[1] && !(isIdChar(2) || extraChar(2) || data[2]=='['))) // invalid char after ** or __ { return 0; } @@ -838,7 +855,7 @@ static int processLink(GrowBuf &out,const char *data,int,int size) out.addStr("@image html "); out.addStr(link.mid(fd ? 0 : 5)); if (!explicitTitle && !content.isEmpty()) - { + { out.addStr(" \""); out.addStr(content); out.addStr("\""); @@ -901,7 +918,8 @@ static int processLink(GrowBuf &out,const char *data,int,int size) out.addStr("\""); } out.addStr(">"); - out.addStr(content.simplifyWhiteSpace()); + content = content.simplifyWhiteSpace(); + processInline(out,content,content.length()); out.addStr("</a>"); } else // avoid link to e.g. F[x](y) @@ -1017,26 +1035,21 @@ static int processSpecialCommand(GrowBuf &out, const char *data, int offset, int if (size>1 && data[0]=='\\') { char c=data[1]; - if (c=='[' || c==']' || c=='*' || /* c=='+' || c=='-' || c=='.' || */ - c=='!' || c=='(' || c==')' || c=='`' || c=='_') + if (c=='[' || c==']' || c=='*' || c=='!' || c=='(' || c==')' || c=='`' || c=='_') { - if (c=='-' && size>3 && data[2]=='-' && data[3]=='-') // \--- - { - out.addStr(&data[1],3); - return 4; - } - else if (c=='-' && size>2 && data[2]=='-') // \-- - { - out.addStr(&data[1],2); - return 3; - } - else if (c=='-') // \- - { - out.addChar(c); - } out.addChar(data[1]); return 2; } + else if (c=='-' && size>3 && data[2]=='-' && data[3]=='-') // \--- + { + out.addStr(&data[1],3); + return 4; + } + else if (c=='-' && size>2 && data[2]=='-') // \-- + { + out.addStr(&data[1],2); + return 3; + } } return 0; } @@ -1230,7 +1243,7 @@ static int isHRuler(const char *data,int size) return n>=3; // at least 3 characters needed for a hruler } -static QCString extractTitleId(QCString &title) +static QCString extractTitleId(QCString &title, int level) { //static QRegExp r1("^[a-z_A-Z][a-z_A-Z0-9\\-]*:"); static QRegExp r2("\\{#[a-z_A-Z][a-z_A-Z0-9\\-]*\\}"); @@ -1243,6 +1256,14 @@ static QCString extractTitleId(QCString &title) //printf("found id='%s' title='%s'\n",id.data(),title.data()); return id; } + if ((level > 0) && (level <= Config_getInt(TOC_INCLUDE_HEADINGS))) + { + static int autoId = 0; + QCString id; + id.sprintf("autotoc_md%d",autoId++); + //printf("auto-generated id='%s' title='%s'\n",id.data(),title.data()); + return id; + } //printf("no id found in title '%s'\n",title.data()); return ""; } @@ -1274,7 +1295,7 @@ static int isAtxHeader(const char *data,int size, // store result convertStringFragment(header,data+i,end-i); - id = extractTitleId(header); + id = extractTitleId(header, level); if (!id.isEmpty()) // strip #'s between title and id { i=header.length()-1; @@ -1571,6 +1592,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) i = findTableColumns(data,size,start,end,columns); +#ifdef USE_ORIGINAL_TABLES out.addStr("<table>"); // write table header, in range [start..end] @@ -1578,7 +1600,8 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) int headerStart = start; int headerEnd = end; - +#endif + // read cell alignments int ret = findTableColumns(data+i,size-i,start,end,cc); k=0; @@ -1619,6 +1642,8 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) // proceed to next line i+=ret; +#ifdef USE_ORIGINAL_TABLES + int m=headerStart; for (k=0;k<columns;k++) { @@ -1682,6 +1707,161 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) } out.addStr("</table> "); +#else + // Store the table cell information by row then column. This + // allows us to handle row spanning. + QVector<QVector<TableCell> > tableContents; + tableContents.setAutoDelete(TRUE); + + int headerStart = start; + int headerEnd = end; + + int m=headerStart; + QVector<TableCell> *headerContents = new QVector<TableCell>(columns); + headerContents->setAutoDelete(TRUE); + for (k=0;k<columns;k++) + { + headerContents->insert(k, new TableCell); + while (m<=headerEnd && (data[m]!='|' || (m>0 && data[m-1]=='\\'))) + { + headerContents->at(k)->cellText += data[m++]; + } + m++; + // do the column span test before stripping white space + // || is spanning columns, | | is not + headerContents->at(k)->colSpan = headerContents->at(k)->cellText.isEmpty(); + headerContents->at(k)->cellText = headerContents->at(k)->cellText.stripWhiteSpace(); + } + // qvector doesn't have an append like std::vector, so we gotta do + // extra work + tableContents.resize(1); + tableContents.insert(0, headerContents); + + // write table cells + int rowNum = 1; + while (i<size) + { + int ret = findTableColumns(data+i,size-i,start,end,cc); + if (cc!=columns) break; // end of table + + j=start+i; + k=0; + QVector<TableCell> *rowContents = new QVector<TableCell>(columns); + rowContents->setAutoDelete(TRUE); + rowContents->insert(k, new TableCell); + while (j<=end+i) + { + if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) + { + // do the column span test before stripping white space + // || is spanning columns, | | is not + rowContents->at(k)->colSpan = rowContents->at(k)->cellText.isEmpty(); + rowContents->at(k)->cellText = rowContents->at(k)->cellText.stripWhiteSpace(); + k++; + rowContents->insert(k, new TableCell); + } // if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) + else + { + rowContents->at(k)->cellText += data[j]; + } // else { if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) } + j++; + } // while (j<=end+i) + // do the column span test before stripping white space + // || is spanning columns, | | is not + rowContents->at(k)->colSpan = rowContents->at(k)->cellText.isEmpty(); + rowContents->at(k)->cellText = rowContents->at(k)->cellText.stripWhiteSpace(); + // qvector doesn't have an append like std::vector, so we gotta do + // extra work + tableContents.resize(tableContents.size()+1); + tableContents.insert(rowNum++, rowContents); + + // proceed to next line + i+=ret; + } + + + out.addStr("<table class=\"markdownTable\">\n"); + QCString cellTag("th"), cellClass("class=\"markdownTableHead"); + for (unsigned row = 0; row < tableContents.size(); row++) + { + out.addStr(" <tr class=\"markdownTable"); + if (row) + { + out.addStr("Body\""); + if (row % 2) + { + out.addStr(" class=\"markdownTableRowOdd\">\n"); + } + else + { + out.addStr(" class=\"markdownTableRowEven\">\n"); + } + } + else + { + out.addStr("Head\">\n"); + } + for (int c = 0; c < columns; c++) + { + // save the cell text for use after column span computation + QCString cellText(tableContents[row]->at(c)->cellText); + + // Row span handling. Spanning rows will contain a caret ('^'). + // If the current cell contains just a caret, this is part of an + // earlier row's span and the cell should not be added to the + // output. + if (tableContents[row]->at(c)->cellText == "^") + continue; + unsigned rowSpan = 1, spanRow = row+1; + while ((spanRow < tableContents.size()) && + (tableContents[spanRow]->at(c)->cellText == "^")) + { + spanRow++; + rowSpan++; + } + + out.addStr(" <" + cellTag + " " + cellClass); + // use appropriate alignment style + switch (columnAlignment[c]) + { + case AlignLeft: out.addStr("Left\""); break; + case AlignRight: out.addStr("Right\""); break; + case AlignCenter: out.addStr("Center\""); break; + case AlignNone: out.addStr("None\""); break; + } + + if (rowSpan > 1) + { + QCString spanStr; + spanStr.setNum(rowSpan); + out.addStr(" rowspan=\"" + spanStr + "\""); + } + // Column span handling, assumes that column spans will have + // empty strings, which would indicate the sequence "||", used + // to signify spanning columns. + unsigned colSpan = 1; + while ((c < columns-1) && + tableContents[row]->at(c+1)->colSpan) + { + c++; + colSpan++; + } + if (colSpan > 1) + { + QCString spanStr; + spanStr.setNum(colSpan); + out.addStr(" colspan=\"" + spanStr + "\""); + } + // need at least one space on either side of the cell text in + // order for doxygen to do other formatting + out.addStr("> " + cellText + " </" + cellTag + ">\n"); + } + cellTag = "td"; + cellClass = "class=\"markdownTableBody"; + out.addStr(" </tr>\n"); + } + out.addStr("</table>\n"); +#endif delete[] columnAlignment; return i; @@ -1835,7 +2015,7 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent) int indent=0; while (j<end && data[j]==' ') j++,indent++; //printf("j=%d end=%d indent=%d refIndent=%d tabSize=%d data={%s}\n", - // j,end,indent,refIndent,Config_getInt("TAB_SIZE"),QCString(data+i).left(end-i-1).data()); + // j,end,indent,refIndent,Config_getInt(TAB_SIZE),QCString(data+i).left(end-i-1).data()); if (j==end-1) // empty line { emptyLines++; @@ -2083,7 +2263,7 @@ static QCString processBlocks(const QCString &s,int indent) while (pi<size && data[pi]==' ') pi++; QCString header,id; convertStringFragment(header,data+pi,i-pi-1); - id = extractTitleId(header); + id = extractTitleId(header, level); //printf("header='%s' is='%s'\n",header.data(),id.data()); if (!header.isEmpty()) { @@ -2194,6 +2374,29 @@ static QCString processBlocks(const QCString &s,int indent) return out.get(); } +/** returns TRUE if input string docs starts with \@page or \@mainpage command */ +static bool isExplicitPage(const QCString &docs) +{ + int i=0; + const char *data = docs.data(); + if (data) + { + int size=docs.size(); + while (i<size && (data[i]==' ' || data[i]=='\n')) + { + i++; + } + if (i<size+1 && + (data[i]=='\\' || data[i]=='@') && + (qstrncmp(&data[i+1],"page ",5)==0 || qstrncmp(&data[i+1],"mainpage",8)==0) + ) + { + return TRUE; + } + } + return FALSE; +} + static QCString extractPageTitle(QCString &docs,QCString &id) { int ln=0; @@ -2224,7 +2427,7 @@ static QCString extractPageTitle(QCString &docs,QCString &id) QCString lns; lns.fill('\n',ln); docs=lns+docs.mid(end2); - id = extractTitleId(title); + id = extractTitleId(title, 0); //printf("extractPageTitle(title='%s' docs='%s' id='%s')\n",title.data(),docs.data(),id.data()); return title; } @@ -2239,7 +2442,7 @@ static QCString extractPageTitle(QCString &docs,QCString &id) static QCString detab(const QCString &s,int &refIndent) { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); GrowBuf out; int size = s.length(); const char *data = s.data(); @@ -2365,25 +2568,28 @@ void MarkdownFileParser::parseInput(const char *fileName, QCString title=extractPageTitle(docs,id).stripWhiteSpace(); QCString titleFn = QFileInfo(fileName).baseName().utf8(); QCString fn = QFileInfo(fileName).fileName().utf8(); - static QCString mdfileAsMainPage = Config_getString("USE_MDFILE_AS_MAINPAGE"); + static QCString mdfileAsMainPage = Config_getString(USE_MDFILE_AS_MAINPAGE); if (id.isEmpty()) id = markdownFileNameToId(fileName); - if (!mdfileAsMainPage.isEmpty() && - (fn==mdfileAsMainPage || // name reference - QFileInfo(fileName).absFilePath()== - QFileInfo(mdfileAsMainPage).absFilePath()) // file reference with path - ) - { - docs.prepend("@mainpage "+title+"\n"); - } - else if (id=="mainpage" || id=="index") + if (!isExplicitPage(docs)) { - if (title.isEmpty()) title = titleFn; - docs.prepend("@mainpage "+title+"\n"); - } - else - { - if (title.isEmpty()) title = titleFn; - docs.prepend("@page "+id+" "+title+"\n"); + if (!mdfileAsMainPage.isEmpty() && + (fn==mdfileAsMainPage || // name reference + QFileInfo(fileName).absFilePath()== + QFileInfo(mdfileAsMainPage).absFilePath()) // file reference with path + ) + { + docs.prepend("@mainpage "+title+"\n"); + } + else if (id=="mainpage" || id=="index") + { + if (title.isEmpty()) title = titleFn; + docs.prepend("@mainpage "+title+"\n"); + } + else + { + if (title.isEmpty()) title = titleFn; + docs.prepend("@page "+id+" "+title+"\n"); + } } int lineNr=1; int position=0; diff --git a/src/memberdef.cpp b/src/memberdef.cpp index c99bf3c..d37efb9 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -357,6 +357,14 @@ static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md) { ol.docify(" volatile"); } + if (defArgList->refQualifier==RefQualifierLValue) + { + ol.docify(" &"); + } + else if (defArgList->refQualifier==RefQualifierRValue) + { + ol.docify(" &&"); + } if (!defArgList->trailingReturnType.isEmpty()) { linkifyText(TextGeneratorOLImpl(ol), // out @@ -658,7 +666,7 @@ void MemberDefImpl::init(Definition *def, explExt=FALSE; tspec=FALSE; cachedAnonymousType=0; - maxInitLines=Config_getInt("MAX_INITIALIZER_LINES"); + maxInitLines=Config_getInt(MAX_INITIALIZER_LINES); userInitLines=-1; docEnumValues=FALSE; // copy function template arguments (if any) @@ -940,8 +948,8 @@ bool MemberDef::hasExamples() QCString MemberDef::getOutputFileBase() const { - static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES"); - static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES); + static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS); QCString baseName; //printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n", @@ -1053,7 +1061,7 @@ QCString MemberDef::anchor() const void MemberDef::_computeLinkableInProject() { - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); m_isLinkableCached = 2; // linkable //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data()); if (isHidden()) @@ -1074,7 +1082,7 @@ void MemberDef::_computeLinkableInProject() m_isLinkableCached = 1; // not a valid or a dummy name return; } - if (!hasDocumentation() && !isReference()) + if (!hasDocumentation() || isReference()) { //printf("no docs or reference\n"); m_isLinkableCached = 1; // no documentation @@ -1184,7 +1192,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, FileDef *fd,GroupDef *gd,bool onlyText) { SrcLangExt lang = getLanguage(); - static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); + static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES); QCString sep = getLanguageSpecificSeparator(lang,TRUE); QCString n = name(); if (!hideScopeNames) @@ -1288,11 +1296,11 @@ ClassDef *MemberDef::getClassDefOfAnonymousType() */ bool MemberDef::isBriefSectionVisible() const { - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); - static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); - static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC"); - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); + static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); + static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS); //printf("Member %s grpId=%d docs=%s file=%s args=%s\n", // name().data(), @@ -1347,7 +1355,7 @@ bool MemberDef::isBriefSectionVisible() const // hide member if it overrides a member in a superclass and has no // documentation of its own //bool visibleIfDocVirtual = !reimplements() || - // !Config_getBool("INHERIT_DOCS") || + // !Config_getBool(INHERIT_DOCS) || // hasDocs; // true if this member is a constructor or destructor @@ -1422,7 +1430,12 @@ void MemberDef::writeDeclaration(OutputList &ol, Definition *d=0; ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; - if (!hasDocumentation()) return; + if (d==gd) // see bug 753608 + { + if (getClassDef()) d = getClassDef(); + else if (getNamespaceDef()) d = getNamespaceDef(); + else if (getFileDef()) d = getFileDef(); + } //_writeTagData(compoundType); _addToSearchIndex(); @@ -1517,12 +1530,17 @@ void MemberDef::writeDeclaration(OutputList &ol, ol.writeNonBreakableSpace(3); } QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace(); - //printf(">>>>>> indDepth=%d ltype=`%s' varName=`%s'\n",indDepth,ltype.data(),varName.data()); + //printf(">>>>>> ltype=`%s' varName=`%s'\n",ltype.data(),varName.data()); ol.docify("}"); if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@')) { ol.docify(";"); } + else if (!varName.isEmpty() && (varName.at(0)=='*' || varName.at(0)=='&')) + { + ol.docify(" "); + ol.docify(varName); + } endAnonScopeNeeded=TRUE; } else @@ -1598,11 +1616,13 @@ void MemberDef::writeDeclaration(OutputList &ol, // *** write name if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff { - //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable()); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); + //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d hasDocumentation=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable(),hasDocumentation()); if (!(name().isEmpty() || name().at(0)=='@') && // name valid (hasDocumentation() || isReference()) && // has docs - !(m_impl->prot==Private && !Config_getBool("EXTRACT_PRIVATE") && m_impl->mtype!=MemberType_Friend) && // hidden due to protection - !(isStatic() && m_impl->classDef==0 && !Config_getBool("EXTRACT_STATIC")) // hidden due to static-ness + !(m_impl->prot==Private && !extractPrivate && m_impl->mtype!=MemberType_Friend) && // hidden due to protection + !(isStatic() && m_impl->classDef==0 && !extractStatic) // hidden due to static-ness ) { if (m_impl->annMemb) @@ -1653,7 +1673,7 @@ void MemberDef::writeDeclaration(OutputList &ol, } else // index member { - //static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + //static bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES); //QCString cfname = getOutputFileBase(); //QCString cfiname = d->getOutputFileBase(); //Doxygen::indexList->addIndexItem( @@ -1728,7 +1748,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ol.endTypewriter(); } - bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); if (isProperty() && (isSettable() || isGettable() || isPrivateSettable() || isPrivateGettable() || @@ -1794,7 +1814,7 @@ void MemberDef::writeDeclaration(OutputList &ol, // write brief description if (!briefDescription().isEmpty() && - Config_getBool("BRIEF_MEMBER_DESC") + Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */ ) { @@ -1808,12 +1828,13 @@ void MemberDef::writeDeclaration(OutputList &ol, ol.writeDoc(rootNode,getOuterScope()?getOuterScope():d,this); if (detailsVisible) { - static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); //ol.endEmphasis(); ol.docify(" "); - if (separateMemberPages || + if (inheritedFrom || + separateMemberPages || (m_impl->group!=0 && gd==0) || (m_impl->nspace!=0 && nd==0) ) // forward link to the page or group or namespace @@ -1847,12 +1868,12 @@ void MemberDef::writeDeclaration(OutputList &ol, bool MemberDef::isDetailedSectionLinkable() const { - static bool extractAll = Config_getBool("EXTRACT_ALL"); - static bool alwaysDetailedSec = Config_getBool("ALWAYS_DETAILED_SEC"); - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); - static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC"); - static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); - static bool extractStatic = Config_getBool("EXTRACT_STATIC"); + static bool extractAll = Config_getBool(EXTRACT_ALL); + static bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); + static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); + static bool extractStatic = Config_getBool(EXTRACT_STATIC); // the member has details documentation for any of the following reasons bool docFilter = @@ -1899,7 +1920,7 @@ bool MemberDef::isDetailedSectionLinkable() const // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS // is true - bool friendCompoundFilter = !(Config_getBool("HIDE_FRIEND_COMPOUNDS") && + bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend() && (m_impl->type=="friend class" || m_impl->type=="friend struct" || @@ -1915,9 +1936,9 @@ bool MemberDef::isDetailedSectionLinkable() const bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const { - static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); - static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS"); - static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); + static bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES); + static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); bool groupFilter = getGroupDef()==0 || inGroup || separateMemPages; bool fileFilter = getNamespaceDef()==0 || !getNamespaceDef()->isLinkable() || !inFile; bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs && @@ -1933,7 +1954,7 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const void MemberDef::getLabels(QStrList &sl,Definition *container) const { - static bool inlineInfo = Config_getBool("INLINE_INFO"); + static bool inlineInfo = Config_getBool(INLINE_INFO); Specifier lvirt=virtualness(); if ((!isObjCMethod() || isOptional() || isRequired()) && @@ -1953,7 +1974,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const //ol.docify(" ["); SrcLangExt lang = getLanguage(); bool optVhdl = lang==SrcLangExt_VHDL; - bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); if (optVhdl) { sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers())); @@ -1964,7 +1985,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const else if (isRelated()) sl.append("related"); else { - if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline"); + if (Config_getBool(INLINE_INFO) && isInline()) sl.append("inline"); if (isExplicit()) sl.append("explicit"); if (isMutable()) sl.append("mutable"); if (isStatic()) sl.append("static"); @@ -2052,7 +2073,7 @@ void MemberDef::_writeCallGraph(OutputList &ol) { // write call graph if (m_impl->hasCallGraph - && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT") + && (isFunction() || isSlot() || isSignal()) && Config_getBool(HAVE_DOT) ) { DotCallGraph callGraph(this,FALSE); @@ -2064,11 +2085,9 @@ void MemberDef::_writeCallGraph(OutputList &ol) { msg("Generating call graph for function %s\n",qPrint(qualifiedName())); ol.disable(OutputGenerator::Man); - ol.startParagraph(); ol.startCallGraph(); ol.parseText(theTranslator->trCallGraph()); ol.endCallGraph(callGraph); - ol.endParagraph(); ol.enableAll(); } } @@ -2077,7 +2096,7 @@ void MemberDef::_writeCallGraph(OutputList &ol) void MemberDef::_writeCallerGraph(OutputList &ol) { if (m_impl->hasCallerGraph - && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT") + && (isFunction() || isSlot() || isSignal()) && Config_getBool(HAVE_DOT) ) { DotCallGraph callerGraph(this, TRUE); @@ -2089,11 +2108,9 @@ void MemberDef::_writeCallerGraph(OutputList &ol) { msg("Generating caller graph for function %s\n",qPrint(qualifiedName())); ol.disable(OutputGenerator::Man); - ol.startParagraph(); ol.startCallGraph(); ol.parseText(theTranslator->trCallerGraph()); ol.endCallGraph(callerGraph); - ol.endParagraph(); ol.enableAll(); } } @@ -2140,7 +2157,7 @@ void MemberDef::_writeReimplements(OutputList &ol) { ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(), 0,bcd->displayName()); - if (bcd->isLinkableInProject()/* && !Config_getBool("PDF_HYPERLINKS")*/ ) + if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ ) { writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor()); } @@ -2333,6 +2350,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container, ol.startDescTable(theTranslator->trEnumerationValues()); } + ol.startDescTableRow(); ol.addIndexItem(fmd->name(),ciname); ol.addIndexItem(ciname,fmd->name()); @@ -2382,6 +2400,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container, fmd,fmd->documentation()+"\n",TRUE,FALSE); } ol.endDescTableData(); + ol.endDescTableRow(); } } } @@ -2479,7 +2498,7 @@ void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup) { // only write out the include file if this is not part of a class or file // definition - static bool showGroupedMembInc = Config_getBool("SHOW_GROUPED_MEMB_INC"); + static bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC); FileDef *fd = getFileDef(); QCString nm; if (fd) nm = getFileDef()->docName(); @@ -2519,7 +2538,9 @@ void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup) /*! Writes the "detailed documentation" section of this member to * all active output formats. */ -void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, +void MemberDef::writeDocumentation(MemberList *ml, + int memCount,int memTotal, + OutputList &ol, const char *scName, Definition *container, bool inGroup, @@ -2535,8 +2556,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n", // name().data(),hasDocs,container->definitionType(),inGroup,isDetailedSectionLinkable()); - if ( !hasDocs ) return; - if (isEnumValue() && !showEnumValues) return; + //if ( !hasDocs ) return; + //if (isEnumValue() && !showEnumValues) return; SrcLangExt lang = getLanguage(); //printf("member=%s lang=%d\n",name().data(),lang); @@ -2546,11 +2567,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, QCString scopeName = scName; QCString memAnchor = anchor(); QCString ciname = container->name(); + Definition *scopedContainer = container; // see bug 753608 if (container->definitionType()==TypeGroup) { - if (getClassDef()) scopeName=getClassDef()->displayName(); - else if (getNamespaceDef()) scopeName=getNamespaceDef()->displayName(); - else if (getFileDef()) scopeName=getFileDef()->displayName(); + if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); } + else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); } + else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); } ciname = ((GroupDef *)container)->groupTitle(); } else if (container->definitionType()==TypeFile && getNamespaceDef()) @@ -2598,7 +2620,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } else if (isFunction()) { - title+=argsString(); + title += "()"; } int i=0,l; static QRegExp r("@[0-9]+"); @@ -2609,12 +2631,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, bool htmlEndLabelTable=FALSE; QStrList sl; - getLabels(sl,container); + getLabels(sl,scopedContainer); if ((isVariable() || isTypedef()) && (i=r.match(ldef,0,&l))!=-1) { // find enum type and insert it in the definition - QListIterator<MemberDef> vmli(*ml); + MemberListIterator vmli(*ml); MemberDef *vmd; bool found=FALSE; for ( ; (vmd=vmli.current()) && !found ; ++vmli) @@ -2622,10 +2644,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (vmd->isEnumerate() && ldef.mid(i,l)==vmd->name()) { ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); - ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i)); + ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline); + linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.left(i)); vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef()); - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l)); + linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.right(ldef.length()-i-l)); found=TRUE; } @@ -2634,7 +2656,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, { //printf("Anonymous compound `%s'\n",cname.data()); ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); - ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); + ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline); // search for the last anonymous compound name in the definition int si=ldef.find(' '),pi,ei=i+l; if (si==-1) si=0; @@ -2650,17 +2672,17 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, // last ei characters of ldef contain pointer/reference specifiers int ni=ldef.find("::",si); if (ni>=ei) ei=ni+2; - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-ei)); + linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.right(ldef.length()-ei)); } } else // not an enum value or anonymous compound { ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); - ol.startMemberDoc(ciname,name(),memAnchor,title,showInline); + ol.startMemberDoc(ciname,name(),memAnchor,title,memCount,memTotal,showInline); ClassDef *cd=getClassDef(); NamespaceDef *nd=getNamespaceDef(); - if (!Config_getBool("HIDE_SCOPE_NAMES")) + if (!Config_getBool(HIDE_SCOPE_NAMES)) { bool first=TRUE; SrcLangExt lang = getLanguage(); @@ -2760,12 +2782,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (optVhdl) { - hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,container,ol); + hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,scopedContainer,ol); } else { linkifyText(TextGeneratorOLImpl(ol), - container, + scopedContainer, getBodyDef(), this, substitute(ldef,"::",sep) @@ -2782,12 +2804,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, //ol.docify(" = "); ol.docify(" "); QCString init = m_impl->initializer.simplifyWhiteSpace(); - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,init); + linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,init); } else { ol.writeNonBreakableSpace(3); - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,m_impl->initializer); + linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,m_impl->initializer); } } if (excpString()) // add exception list @@ -2888,14 +2910,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, /* write brief description */ if (!brief.isEmpty() && - (Config_getBool("REPEAT_BRIEF") || - !Config_getBool("BRIEF_MEMBER_DESC") + (Config_getBool(REPEAT_BRIEF) || + !Config_getBool(BRIEF_MEMBER_DESC) ) ) { ol.startParagraph(); ol.generateDoc(briefFile(),briefLine(), - getOuterScope()?getOuterScope():container,this, + scopedContainer,this, brief,FALSE,FALSE,0,TRUE,FALSE); ol.endParagraph(); } @@ -2912,22 +2934,22 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } else { - ol.generateDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE); + ol.generateDoc(docFile(),docLine(),scopedContainer,this,detailed+"\n",TRUE,FALSE); } if (!inbodyDocumentation().isEmpty()) { ol.generateDoc(inbodyFile(),inbodyLine(), - getOuterScope()?getOuterScope():container,this, + scopedContainer,this, inbodyDocumentation()+"\n",TRUE,FALSE); } } - else if (!brief.isEmpty() && (Config_getBool("REPEAT_BRIEF") || - !Config_getBool("BRIEF_MEMBER_DESC"))) + else if (!brief.isEmpty() && (Config_getBool(REPEAT_BRIEF) || + !Config_getBool(BRIEF_MEMBER_DESC))) { if (!inbodyDocumentation().isEmpty()) { - ol.generateDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE); + ol.generateDoc(inbodyFile(),inbodyLine(),scopedContainer,this,inbodyDocumentation()+"\n",TRUE,FALSE); } } @@ -2952,7 +2974,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, // feed the result to the documentation parser ol.generateDoc( docFile(),docLine(), - getOuterScope()?getOuterScope():container, + scopedContainer, this, // memberDef paramDocs, // docStr TRUE, // indexWords @@ -2961,7 +2983,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } - _writeEnumValues(ol,container,cfname,ciname,cname); + _writeEnumValues(ol,scopedContainer,cfname,ciname,cname); _writeReimplements(ol); _writeReimplementedBy(ol); _writeCategoryRelation(ol); @@ -2988,29 +3010,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.endIndent(); // enable LaTeX again - //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); + //if (Config_getBool(EXTRACT_ALL) && !hasDocs) ol.enable(OutputGenerator::Latex); ol.popGeneratorState(); - //------------------------------------------------ - - if (!Config_getBool("EXTRACT_ALL") && - Config_getBool("WARN_IF_UNDOCUMENTED") && - Config_getBool("WARN_NO_PARAMDOC") && - !Doxygen::suppressDocWarnings) - { - if (!hasDocumentedParams()) - { - warn_doc_error(getDefFileName(),getDefLine(), - "parameters of member %s are not (all) documented", - qPrint(qualifiedName())); - } - if (!hasDocumentedReturnType() && isFunction() && hasDocumentation()) - { - warn_doc_error(getDefFileName(),getDefLine(), - "return type of member %s is not documented", - qPrint(qualifiedName())); - } - } + warnIfUndocumentedParams(); } // strip scope and field name from the type @@ -3106,43 +3109,47 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) ClassDef *cd = m_impl->accessorClass; //printf("===> %s::anonymous: %s\n",name().data(),cd?cd->name().data():"<none>"); - ol.startInlineMemberType(); - ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); + if (container && container->definitionType()==Definition::TypeClass && + !((ClassDef*)container)->isJavaEnum()) + { + ol.startInlineMemberType(); + ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); - QCString ts = fieldType(); + QCString ts = fieldType(); - if (cd) // cd points to an anonymous struct pointed to by this member - // so we add a link to it from the type column. - { - int i=0; - const char *prefixes[] = { "struct ","union ","class ", 0 }; - const char **p = prefixes; - while (*p) + if (cd) // cd points to an anonymous struct pointed to by this member + // so we add a link to it from the type column. { - int l=qstrlen(*p); - if (ts.left(l)==*p) + int i=0; + const char *prefixes[] = { "struct ","union ","class ", 0 }; + const char **p = prefixes; + while (*p) { - ol.writeString(*p); - i=l; + int l=qstrlen(*p); + if (ts.left(l)==*p) + { + ol.writeString(*p); + i=l; + } + p++; } - p++; + ol.writeObjectLink(cd->getReference(), + cd->getOutputFileBase(), + cd->anchor(),ts.mid(i)); } - ol.writeObjectLink(cd->getReference(), - cd->getOutputFileBase(), - cd->anchor(),ts.mid(i)); - } - else // use standard auto linking - { - linkifyText(TextGeneratorOLImpl(ol), // out - scope, // scope - getBodyDef(), // fileScope - this, // self - ts, // text - TRUE // autoBreak - ); + else // use standard auto linking + { + linkifyText(TextGeneratorOLImpl(ol), // out + scope, // scope + getBodyDef(), // fileScope + this, // self + ts, // text + TRUE // autoBreak + ); + } + ol.endDoxyAnchor(cfname,memAnchor); + ol.endInlineMemberType(); } - ol.endDoxyAnchor(cfname,memAnchor); - ol.endInlineMemberType(); ol.startInlineMemberName(); ol.docify(doxyName); @@ -3226,12 +3233,11 @@ void MemberDef::warnIfUndocumented() t="group", d=gd; else t="file", d=fd; - static bool extractAll = Config_getBool("EXTRACT_ALL"); + static bool extractAll = Config_getBool(EXTRACT_ALL); - //printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d " - // "isDocumentedFriendClass()=%d name()=%s prot=%d isReference=%d\n", - // d->isLinkable(),isLinkable(),isDocumentedFriendClass(), - // name().data(),m_impl->prot,isReference()); + //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n", + // name().data(), + // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_impl->prot),isReference(),isDeleted()); if ((!hasUserDocumentation() && !extractAll) && !isFriendClass() && name().find('@')==-1 && d && d->name().find('@')==-1 && @@ -3239,12 +3245,38 @@ void MemberDef::warnIfUndocumented() !isReference() && !isDeleted() ) { - warn_undoc(d->getDefFileName(),d->getDefLine(),"Member %s%s (%s) of %s %s is not documented.", + warn_undoc(getDefFileName(),getDefLine(),"Member %s%s (%s) of %s %s is not documented.", qPrint(name()),qPrint(argsString()),qPrint(memberTypeName()),t,qPrint(d->name())); } + else if (!isDetailedSectionLinkable()) + { + warnIfUndocumentedParams(); + } } +void MemberDef::warnIfUndocumentedParams() +{ + if (!Config_getBool(EXTRACT_ALL) && + Config_getBool(WARN_IF_UNDOCUMENTED) && + Config_getBool(WARN_NO_PARAMDOC) && + !Doxygen::suppressDocWarnings) + { + if (!hasDocumentedParams()) + { + warn_doc_error(getDefFileName(),getDefLine(), + "parameters of member %s are not (all) documented", + qPrint(qualifiedName())); + } + if (!hasDocumentedReturnType() && + isFunction() && hasDocumentation()) + { + warn_doc_error(getDefFileName(),getDefLine(), + "return type of member %s is not documented", + qPrint(qualifiedName())); + } + } +} bool MemberDef::isFriendClass() const { @@ -3477,10 +3509,10 @@ void MemberDef::setInitializer(const char *initializer) void MemberDef::addListReference(Definition *) { - static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); - //static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); - //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C); + //static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES); + //static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); SrcLangExt lang = getLanguage(); visited=TRUE; if (!isLinkableInProject()) return; @@ -3796,7 +3828,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, typeDecl.writeChar(' '); } - uint enumValuesPerLine = (uint)Config_getInt("ENUM_VALUES_PER_LINE"); + uint enumValuesPerLine = (uint)Config_getInt(ENUM_VALUES_PER_LINE); if (numVisibleEnumValues>0 && enumValuesPerLine>0) { typeDecl.docify("{ "); @@ -3933,9 +3965,9 @@ void MemberDef::enableCallerGraph(bool e) bool MemberDef::protectionVisible() const { return m_impl->prot==Public || - (m_impl->prot==Private && Config_getBool("EXTRACT_PRIVATE")) || - (m_impl->prot==Protected && Config_getBool("EXTRACT_PROTECTED")) || - (m_impl->prot==Package && Config_getBool("EXTRACT_PACKAGE")); + (m_impl->prot==Private && Config_getBool(EXTRACT_PRIVATE)) || + (m_impl->prot==Protected && Config_getBool(EXTRACT_PROTECTED)) || + (m_impl->prot==Package && Config_getBool(EXTRACT_PACKAGE)); } #endif @@ -5098,7 +5130,7 @@ const ArgumentList *MemberDef::typeConstraints() const bool MemberDef::isFriendToHide() const { - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); + static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS); bool isFriendToHide = hideFriendCompounds && (m_impl->type=="friend class" || m_impl->type=="friend struct" || diff --git a/src/memberdef.h b/src/memberdef.h index 19a37ea..c0825b2 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -380,7 +380,7 @@ class MemberDef : public Definition void writeDeclaration(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0); - void writeDocumentation(MemberList *ml,OutputList &ol, + void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol, const char *scopeName,Definition *container, bool inGroup,bool showEnumValues=FALSE,bool showInline=FALSE); @@ -389,6 +389,7 @@ class MemberDef : public Definition ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); void writeTagFile(FTextStream &); void warnIfUndocumented(); + void warnIfUndocumentedParams(); MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs, ArgumentList *actualArgs); diff --git a/src/membergroup.cpp b/src/membergroup.cpp index cbda94d..aaa504f 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -147,7 +147,8 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, for (li.toFirst();(md=li.current());++li) { //printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType()); - if (lt==md->getSectionList(m_parent)->listType()) + MemberList *ml = md->getSectionList(m_parent); + if (ml && lt==ml->listType()) { MemberList ml(lt); ml.append(md); @@ -165,7 +166,8 @@ int MemberGroup::countGroupedInheritedMembers(MemberListType lt) for (li.toFirst();(md=li.current());++li) { //printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType()); - if (lt==md->getSectionList(m_parent)->listType()) + MemberList *ml = md->getSectionList(m_parent); + if (ml && lt==ml->listType()) { count++; } diff --git a/src/membergroup.h b/src/membergroup.h index c42efc9..29fba07 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -141,7 +141,7 @@ class MemberGroupSDict : public SIntDict<MemberGroup> /** Data collected for a member group */ struct MemberGroupInfo { - MemberGroupInfo() : m_sli(0), docLine(-1) {} + MemberGroupInfo() : docLine(-1), m_sli(0) {} ~MemberGroupInfo() { delete m_sli; m_sli=0; } void setRefItems(const QList<ListItemInfo> *sli); QCString header; diff --git a/src/memberlist.cpp b/src/memberlist.cpp index b253682..5349030 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -76,7 +76,7 @@ MemberList::~MemberList() int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const { - static bool sortConstructorsFirst = Config_getBool("SORT_MEMBERS_CTORS_1ST"); + static bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST); if (sortConstructorsFirst) { int ord1 = c1->isConstructor() ? 2 : (c1->isDestructor() ? 1 : 0); int ord2 = c2->isConstructor() ? 2 : (c2->isDestructor() ? 1 : 0); @@ -169,7 +169,7 @@ void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd) break; case MemberType_Typedef: m_typeCnt++,m_numDecMembers++; break; //case MemberType_Prototype: m_protoCnt++,m_numDecMembers++; break; - case MemberType_Define: if (Config_getBool("EXTRACT_ALL") || + case MemberType_Define: if (Config_getBool(EXTRACT_ALL) || md->argsString() || !md->initializer().isEmpty() || md->hasDocumentation() @@ -233,11 +233,6 @@ void MemberList::countDocMembers(bool countEnumValues) //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); } -bool MemberList::insert(uint index,const MemberDef *md) -{ - return QList<MemberDef>::insert(index,md); -} - void MemberList::inSort(const MemberDef *md) { QList<MemberDef>::inSort(md); @@ -248,11 +243,67 @@ void MemberList::append(const MemberDef *md) QList<MemberDef>::append(md); } -MemberListIterator::MemberListIterator(const QList<MemberDef> &l) : +void MemberList::remove(const MemberDef *md) +{ + QList<MemberDef>::remove(md); +} + +void MemberList::sort() +{ + QList<MemberDef>::sort(); +} + +uint MemberList::count() const +{ + return QList<MemberDef>::count(); +} + +int MemberList::findRef(const MemberDef *md) const +{ + return QList<MemberDef>::findRef(md); +} + +MemberDef *MemberList::getFirst() const +{ + return QList<MemberDef>::getFirst(); +} + +MemberDef *MemberList::take(uint index) +{ + return QList<MemberDef>::take(index); +} + +MemberListIterator::MemberListIterator(const MemberList &l) : QListIterator<MemberDef>(l) { } +int MemberList::countEnumValues(MemberDef *md,bool setAnonEnumType) const +{ + int enumVars=0; + MemberListIterator vmli(*this); + MemberDef *vmd; + QCString name(md->name()); + int i=name.findRev("::"); + if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) + if (name[0]=='@') // anonymous enum => append variables + { + for ( ; (vmd=vmli.current()) ; ++vmli) + { + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) + { + enumVars++; + if (setAnonEnumType) + { + vmd->setAnonymousEnumType(md); + } + } + } + } + return enumVars; +} + bool MemberList::declVisible() const { MemberListIterator mli(*this); @@ -277,26 +328,9 @@ bool MemberList::declVisible() const return TRUE; case MemberType_Enumeration: { - int enumVars=0; - MemberListIterator vmli(*this); - MemberDef *vmd; - QCString name(md->name()); - int i=name.findRev("::"); - if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) - if (name[0]=='@') // anonymous enum => append variables - { - for ( ; (vmd=vmli.current()) ; ++vmli) - { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - enumVars++; - } - } - } // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. - if (enumVars==0) // show enum here + if (countEnumValues(md,FALSE)==0) // show enum here { return TRUE; } @@ -324,6 +358,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ) { //printf("----- writePlainDeclaration() ----\n"); + static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS); countDecMembers(); if (numDecMembers()==0) { @@ -367,28 +402,9 @@ void MemberList::writePlainDeclarations(OutputList &ol, } case MemberType_Enumeration: { - int enumVars=0; - MemberListIterator vmli(*this); - MemberDef *vmd; - QCString name(md->name()); - int i=name.findRev("::"); - if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) - if (name[0]=='@') // anonymous enum => append variables - { - for ( ; (vmd=vmli.current()) ; ++vmli) - { - QCString vtype=vmd->typeString(); - if ((vtype.find(name))!=-1) - { - enumVars++; - vmd->setAnonymousEnumType(md); - } - } - } // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. - if ((enumVars==0) // show enum here - && md->hasDocumentation()) + if (countEnumValues(md,TRUE)==0) // show enum here { //printf("Enum!!\n"); if (first) @@ -410,7 +426,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, { ol.endDoxyAnchor(md->getOutputFileBase(),md->anchor()); } - if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!md->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { DocRoot *rootNode = validatingParseDoc( md->briefFile(),md->briefLine(), @@ -524,7 +540,7 @@ void MemberList::writeDeclarations(OutputList &ol, (void)showEnumValues; // unused //printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom); - static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL); QCString inheritId; countDecMembers(/*showEnumValues*/FALSE,gd); // count members shown in this section @@ -672,13 +688,44 @@ void MemberList::writeDocumentation(OutputList &ol, ol.endGroupHeader(showInline ? 2 : 0); } ol.startMemberDocList(); - + MemberListIterator mli(*this); MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + + // count the number of overloaded members + QDict<uint> overloadTotalDict(67); + QDict<uint> overloadCountDict(67); + overloadTotalDict.setAutoDelete(TRUE); + overloadCountDict.setAutoDelete(TRUE); + for (mli.toFirst() ; (md=mli.current()) ; ++mli) + { + if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + !(md->isEnumValue() && !showInline)) + { + uint *pCount = overloadTotalDict.find(md->name()); + if (pCount) + { + (*pCount)++; + } + else + { + overloadTotalDict.insert(md->name(),new uint(1)); + overloadCountDict.insert(md->name(),new uint(1)); + } + } + } + + for (mli.toFirst() ; (md=mli.current()) ; ++mli) { - md->writeDocumentation(this,ol,scopeName,container, - m_inGroup,showEnumValues,showInline); + if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) && + !(md->isEnumValue() && !showInline)) + { + uint overloadCount = *overloadTotalDict.find(md->name()); + uint *pCount = overloadCountDict.find(md->name()); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container, + m_inGroup,showEnumValues,showInline); + (*pCount)++; + } } if (memberGroupList) { @@ -701,27 +748,57 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, //printf("MemberList count=%d\n",numDocMembers()); if (numDocMembers()==0) return; - ol.startMemberDocSimple(); + ClassDef *cd = 0; + if (container && container->definitionType()==Definition::TypeClass) + { + cd = (ClassDef*)container; + } + ol.startMemberDocSimple(cd && cd->isJavaEnum()); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->writeMemberDocSimple(ol,container); } - ol.endMemberDocSimple(); + ol.endMemberDocSimple(cd && cd->isJavaEnum()); } // separate member pages void MemberList::writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + + // count the number of overloaded members + QDict<uint> overloadTotalDict(67); + QDict<uint> overloadCountDict(67); + overloadTotalDict.setAutoDelete(TRUE); + overloadCountDict.setAutoDelete(TRUE); MemberListIterator mli(*this); MemberDef *md; - for ( ; (md=mli.current()) ; ++mli) + for (mli.toFirst() ; (md=mli.current()) ; ++mli) { if (md->isDetailedSectionLinkable()) { + uint *pCount = overloadTotalDict.find(md->name()); + if (pCount) + { + (*pCount)++; + } + else + { + overloadTotalDict.insert(md->name(),new uint(1)); + overloadCountDict.insert(md->name(),new uint(1)); + } + } + } + + for ( mli.toFirst() ; (md=mli.current()) ; ++mli) + { + if (md->isDetailedSectionLinkable()) + { + uint overloadCount = *overloadTotalDict.find(md->name()); + uint *pCount = overloadCountDict.find(md->name()); QCString diskName=md->getOutputFileBase(); QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName); @@ -734,7 +811,8 @@ void MemberList::writeDocumentationPage(OutputList &ol, if (generateTreeView) { - md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup); + (*pCount)++; ol.endContents(); endFileWithNavPath(container,ol); } @@ -749,7 +827,8 @@ void MemberList::writeDocumentationPage(OutputList &ol, ol.writeString(" </td>\n"); ol.writeString(" <td valign=\"top\" class=\"mempage\">\n"); - md->writeDocumentation(this,ol,scopeName,container,m_inGroup); + md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup); + (*pCount)++; ol.writeString(" </td>\n"); ol.writeString(" </tr>\n"); @@ -758,15 +837,15 @@ void MemberList::writeDocumentationPage(OutputList &ol, endFile(ol); } } - if (memberGroupList) + } + if (memberGroupList) + { + //printf("MemberList::writeDocumentation() -- member groups\n"); + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) { - //printf("MemberList::writeDocumentation() -- member groups\n"); - MemberGroupListIterator mgli(*memberGroupList); - MemberGroup *mg; - for (;(mg=mgli.current());++mgli) - { - mg->writeDocumentationPage(ol,scopeName,container); - } + mg->writeDocumentationPage(ol,scopeName,container); } } } diff --git a/src/memberlist.h b/src/memberlist.h index c293d22..38f0e89 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -29,17 +29,27 @@ class MemberGroupList; class StorageIntf; /** A list of MemberDef objects. */ -class MemberList : public QList<MemberDef> -{ +class MemberList : private QList<MemberDef> +{ + friend class MemberListIterator; public: MemberList(); MemberList(MemberListType lt); ~MemberList(); MemberListType listType() const { return m_listType; } static QCString listTypeAsString(MemberListType type); - bool insert(uint index,const MemberDef *md); + + /* ---- standard QList methods ---- */ void inSort(const MemberDef *md); void append(const MemberDef *md); + void remove(const MemberDef *md); + void sort(); + uint count() const; + int findRef(const MemberDef *md) const; + MemberDef *getFirst() const; + MemberDef *take(uint index); + + int varCount() const { ASSERT(m_numDecMembers!=-1); return m_varCnt; } int funcCount() const { ASSERT(m_numDecMembers!=-1); return m_funcCnt; } int enumCount() const { ASSERT(m_numDecMembers!=-1); return m_enumCnt; } @@ -82,6 +92,7 @@ class MemberList : public QList<MemberDef> private: int compareValues(const MemberDef *item1,const MemberDef *item2) const; + int countEnumValues(MemberDef *md,bool setAnonEnumType) const; int m_varCnt; int m_funcCnt; int m_enumCnt; @@ -97,13 +108,14 @@ class MemberList : public QList<MemberDef> bool m_inFile; // is this list part of a file definition MemberListType m_listType; bool m_needsSorting; + QDict<int> m_overloadCount; }; /** An iterator for MemberDef objects in a MemberList. */ class MemberListIterator : public QListIterator<MemberDef> { public: - MemberListIterator(const QList<MemberDef> &list); + MemberListIterator(const MemberList &list); virtual ~MemberListIterator() {} }; diff --git a/src/message.cpp b/src/message.cpp index e29c4e4..2f3a06f 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -37,9 +37,9 @@ static FILE *warnFile = stderr; void initWarningFormat() { -// int filePos = Config_getString("WARN_FORMAT").find("$file"); -// int linePos = Config_getString("WARN_FORMAT").find("$line"); -// int textPos = Config_getString("WARN_FORMAT").find("$text"); +// int filePos = Config_getString(WARN_FORMAT).find("$file"); +// int linePos = Config_getString(WARN_FORMAT).find("$line"); +// int textPos = Config_getString(WARN_FORMAT).find("$text"); // // // sort items on position (there are 6 cases) // warnFormatOrder = 1; @@ -69,11 +69,11 @@ void initWarningFormat() // { // warnFormatOrder = 6; // } -// outputFormat = +// outputFormat = // substitute( // substitute( -// substitute( -// Config_getString("WARN_FORMAT"), +// substitute( +// Config_getString(WARN_FORMAT), // "$file","%s" // ), // "$text","%s" @@ -86,22 +86,27 @@ void initWarningFormat() // replace(QRegExp("\\$line"),"%d")+ // '\n'; - outputFormat = Config_getString("WARN_FORMAT"); + outputFormat = Config_getString(WARN_FORMAT); - if (!Config_getString("WARN_LOGFILE").isEmpty()) + if (!Config_getString(WARN_LOGFILE).isEmpty()) { - warnFile = portable_fopen(Config_getString("WARN_LOGFILE"),"w"); + warnFile = portable_fopen(Config_getString(WARN_LOGFILE),"w"); } if (!warnFile) // point it to something valid, because warn() relies on it { warnFile = stderr; } + + if (Config_getBool(WARN_AS_ERROR)) + { + warning_str = error_str; + } } void msg(const char *fmt, ...) { - if (!Config_getBool("QUIET")) + if (!Config_getBool(QUIET)) { if (Debug::isFlagSet(Debug::Time)) { @@ -130,11 +135,12 @@ static void format_warn(const char *file,int line,const char *text) } } // substitute markers by actual values - QCString msgText = + bool warnAsError = Config_getBool(WARN_AS_ERROR); + QCString msgText = substitute( substitute( substitute( - substitute( + substitute( outputFormat, "$file",fileSubst ), @@ -143,15 +149,24 @@ static void format_warn(const char *file,int line,const char *text) "$version",versionSubst ), "$text",textSubst - )+'\n'; + ); + if (warnAsError) + { + msgText += " (warning treated as error, aborting now)"; + } + msgText += '\n'; // print resulting message fwrite(msgText.data(),1,msgText.length(),warnFile); + if (warnAsError) + { + exit(1); + } } -static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args) +static void do_warn(bool enabled, const char *file, int line, const char *prefix, const char *fmt, va_list args) { - if (tag && !Config_getBool(tag)) return; // warning type disabled + if (!enabled) return; // warning type disabled const int bufSize = 40960; char text[bufSize]; int l=0; @@ -169,18 +184,18 @@ void warn(const char *file,int line,const char *fmt, ...) { va_list args; va_start(args, fmt); - do_warn("WARNINGS", file, line, warning_str, fmt, args); - va_end(args); + do_warn(Config_getBool(WARNINGS), file, line, warning_str, fmt, args); + va_end(args); } void va_warn(const char *file,int line,const char *fmt,va_list args) { - do_warn("WARNINGS", file, line, warning_str, fmt, args); + do_warn(Config_getBool(WARNINGS), file, line, warning_str, fmt, args); } void warn_simple(const char *file,int line,const char *text) { - if (!Config_getBool("WARNINGS")) return; // warning type disabled + if (!Config_getBool(WARNINGS)) return; // warning type disabled format_warn(file,line,QCString(warning_str) + text); } @@ -188,15 +203,15 @@ void warn_undoc(const char *file,int line,const char *fmt, ...) { va_list args; va_start(args, fmt); - do_warn("WARN_IF_UNDOCUMENTED", file, line, warning_str, fmt, args); + do_warn(Config_getBool(WARN_IF_UNDOCUMENTED), file, line, warning_str, fmt, args); va_end(args); } - + void warn_doc_error(const char *file,int line,const char *fmt, ...) { va_list args; va_start(args, fmt); - do_warn("WARN_IF_DOC_ERROR", file, line, warning_str, fmt, args); + do_warn(Config_getBool(WARN_IF_DOC_ERROR), file, line, warning_str, fmt, args); va_end(args); } @@ -205,7 +220,7 @@ void warn_uncond(const char *fmt, ...) va_list args; va_start(args, fmt); vfprintf(warnFile, (QCString(warning_str) + fmt).data(), args); - va_end(args); + va_end(args); } void err(const char *fmt, ...) @@ -213,15 +228,15 @@ void err(const char *fmt, ...) va_list args; va_start(args, fmt); vfprintf(warnFile, (QCString(error_str) + fmt).data(), args); - va_end(args); + va_end(args); } extern void err_full(const char *file,int line,const char *fmt, ...) { va_list args; va_start(args, fmt); - do_warn(NULL, file, line, error_str, fmt, args); - va_end(args); + do_warn(TRUE, file, line, error_str, fmt, args); + va_end(args); } void printlex(int dbg, bool enter, const char *lexName, const char *fileName) diff --git a/src/msc.cpp b/src/msc.cpp index 7f3c641..5b73d65 100644 --- a/src/msc.cpp +++ b/src/msc.cpp @@ -21,6 +21,7 @@ #include "message.h" #include "docparser.h" #include "doxygen.h" +#include "index.h" #include "util.h" #include "ftextstream.h" @@ -101,22 +102,22 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, // go to the html output directory (i.e. path) QDir::setCurrent(outDir); //printf("Going to dir %s\n",QDir::currentDirPath().data()); - QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension(); + QCString mscExe = Config_getString(MSCGEN_PATH)+"mscgen"+portable_commandExtension(); QCString mscArgs; - QCString extension; + QCString imgName = outFile; switch (format) { case MSC_BITMAP: mscArgs+="-T png"; - extension=".png"; + imgName+=".png"; break; case MSC_EPS: mscArgs+="-T eps"; - extension=".eps"; + imgName+=".eps"; break; case MSC_SVG: mscArgs+="-T svg"; - extension=".svg"; + imgName+=".svg"; break; default: goto error; // I am not very fond of goto statements, but when in Rome... @@ -125,8 +126,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, mscArgs+=inFile; mscArgs+="\" -o \""; - mscArgs+=outFile; - mscArgs+=extension+"\""; + mscArgs+=imgName+"\""; int exitCode; // printf("*** running: %s %s outDir:%s %s\n",mscExe.data(),mscArgs.data(),outDir,outFile); portable_sysTimerStart(); @@ -136,7 +136,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, goto error; } portable_sysTimerStop(); - if ( (format==MSC_EPS) && (Config_getBool("USE_PDFLATEX")) ) + if ( (format==MSC_EPS) && (Config_getBool(USE_PDFLATEX)) ) { QCString epstopdfArgs(maxCmdLine); epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"", @@ -149,6 +149,8 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, portable_sysTimerStop(); } + Doxygen::indexList->addImageFile(imgName); + error: QDir::setCurrent(oldDir); } @@ -166,7 +168,7 @@ QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir, QDir::setCurrent(outDir); //printf("Going to dir %s\n",QDir::currentDirPath().data()); - QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension(); + QCString mscExe = Config_getString(MSCGEN_PATH)+"mscgen"+portable_commandExtension(); QCString mscArgs = "-T ismap -i \""; mscArgs+=inFile; mscArgs+="\" -o \""; diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 948c86a..29f68a4 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -42,7 +42,14 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc, { if (fName) { - fileName = stripExtension(fName); + if (lref) + { + fileName = stripExtension(fName); + } + else + { + fileName = convertNameToFile(stripExtension(fName)); + } } else { @@ -58,7 +65,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc, memberGroupSDict = new MemberGroupSDict; memberGroupSDict->setAutoDelete(TRUE); visited=FALSE; - m_subGrouping=Config_getBool("SUBGROUPING"); + m_subGrouping=Config_getBool(SUBGROUPING); if (type && !strcmp("module", type)) { m_type = MODULE; @@ -90,8 +97,14 @@ NamespaceDef::~NamespaceDef() void NamespaceDef::setFileName(const QCString &fn) { - fileName="namespace"; - fileName+=fn; + if (isReference()) + { + fileName = "namespace"+fn; + } + else + { + fileName = convertNameToFile("namespace"+fn); + } } void NamespaceDef::distributeMemberGroupDocumentation() @@ -129,7 +142,7 @@ void NamespaceDef::insertUsedFile(FileDef *fd) if (fd==0) return; if (files.find(fd)==-1) { - if (Config_getBool("SORT_MEMBER_DOCS")) + if (Config_getBool(SORT_MEMBER_DOCS)) files.inSort(fd); else files.append(fd); @@ -153,7 +166,7 @@ void NamespaceDef::insertClass(ClassDef *cd) { if (classSDict->find(cd->name())==0) { - if (Config_getBool("SORT_BRIEF_DOCS")) + if (Config_getBool(SORT_BRIEF_DOCS)) classSDict->inSort(cd->name(),cd); else classSDict->append(cd->name(),cd); @@ -164,7 +177,7 @@ void NamespaceDef::insertNamespace(NamespaceDef *nd) { if (namespaceSDict->find(nd->name())==0) { - if (Config_getBool("SORT_MEMBER_DOCS")) + if (Config_getBool(SORT_MEMBER_DOCS)) namespaceSDict->inSort(nd->name(),nd); else namespaceSDict->append(nd->name(),nd); @@ -217,7 +230,7 @@ void NamespaceDef::insertMember(MemberDef *md) //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data()); m_allMembersDict->append(md->localName(),md); //::addNamespaceMemberNameToIndex(md); - //static bool sortBriefDocs=Config_getBool("SORT_BRIEF_DOCS"); + //static bool sortBriefDocs=Config_getBool(SORT_BRIEF_DOCS); switch(md->memberType()) { case MemberType_Variable: @@ -259,7 +272,7 @@ void NamespaceDef::computeAnchors() bool NamespaceDef::hasDetailedDescription() const { - static bool repeatBrief = Config_getBool("REPEAT_BRIEF"); + static bool repeatBrief = Config_getBool(REPEAT_BRIEF); return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty()); } @@ -361,11 +374,11 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title ol.endGroupHeader(); ol.startTextBlock(); - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) { ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE); } - if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && + if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) && !documentation().isEmpty()) { ol.pushGeneratorState(); @@ -395,6 +408,10 @@ void NamespaceDef::writeBriefDescription(OutputList &ol) if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); @@ -434,7 +451,7 @@ void NamespaceDef::endMemberDeclarations(OutputList &ol) void NamespaceDef::startMemberDocumentation(OutputList &ol) { - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.disable(OutputGenerator::Html); Doxygen::suppressDocWarnings = TRUE; @@ -443,7 +460,7 @@ void NamespaceDef::startMemberDocumentation(OutputList &ol) void NamespaceDef::endMemberDocumentation(OutputList &ol) { - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { ol.enable(OutputGenerator::Html); Doxygen::suppressDocWarnings = FALSE; @@ -493,7 +510,7 @@ void NamespaceDef::writeAuthorSection(OutputList &ol) ol.startGroupHeader(); ol.parseText(theTranslator->trAuthor(TRUE,TRUE)); ol.endGroupHeader(); - ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME"))); + ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME))); ol.popGeneratorState(); } @@ -551,9 +568,9 @@ void NamespaceDef::addNamespaceAttributes(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - //static bool outputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); + //static bool outputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); QCString pageTitle = title(); startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView); @@ -690,7 +707,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) endFileWithNavPath(this,ol); - if (Config_getBool("SEPARATE_MEMBER_PAGES")) + if (Config_getBool(SEPARATE_MEMBER_PAGES)) { MemberList *allMemberList = getMemberList(MemberListType_allMembersList); if (allMemberList) allMemberList->sort(); @@ -717,7 +734,7 @@ void NamespaceDef::writeMemberPages(OutputList &ol) void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { - static bool createSubDirs=Config_getBool("CREATE_SUBDIRS"); + static bool createSubDirs=Config_getBool(CREATE_SUBDIRS); ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); @@ -796,16 +813,9 @@ void NamespaceDef::addUsingDeclaration(Definition *d) } } -QCString NamespaceDef::getOutputFileBase() const -{ - if (isReference()) - { - return fileName; - } - else - { - return convertNameToFile(fileName); - } +QCString NamespaceDef::getOutputFileBase() const +{ + return fileName; } Definition *NamespaceDef::findInnerCompound(const char *n) @@ -828,7 +838,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n) void NamespaceDef::addListReferences() { - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); { QList<ListItemInfo> *xrefItems = xrefListItems(); addRefItem(xrefItems, @@ -943,7 +953,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, if (count()==0) return; // no namespaces in the list - if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) return; + if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) return; SDict<NamespaceDef>::Iterator ni(*this); @@ -977,8 +987,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, // write list of namespaces ol.startMemberHeader("namespaces"); - //bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //bool javaOpt = Config_getBool(OPTIMIZE_OUTPUT_JAVA); + //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); @@ -1006,7 +1016,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, } ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name); ol.endMemberItem(); - if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) + if (!nd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) { ol.startMemberDescription(nd->getOutputFileBase()); ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE); @@ -1038,8 +1048,8 @@ MemberList *NamespaceDef::createMemberList(MemberListType lt) void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md) { - static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); - static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); + static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS); + static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS); MemberList *ml = createMemberList(lt); ml->setNeedsSorting( ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) || @@ -1107,7 +1117,7 @@ bool NamespaceDef::isLinkableInProject() const { int i = name().findRev("::"); if (i==-1) i=0; else i+=2; - static bool extractAnonNs = Config_getBool("EXTRACT_ANON_NSPACES"); + static bool extractAnonNs = Config_getBool(EXTRACT_ANON_NSPACES); if (extractAnonNs && // extract anonymous ns name().mid(i,20)=="anonymous_namespace{" // correct prefix ) // not disabled by config diff --git a/src/outputgen.h b/src/outputgen.h index c3099df..7e28bac 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -188,7 +188,7 @@ class BaseOutputDocInterface : public CodeOutputInterface //virtual void newParagraph() = 0; /*! Starts a new paragraph */ - virtual void startParagraph() = 0; + virtual void startParagraph(const char *classDef) = 0; /*! Ends a paragraph */ virtual void endParagraph() = 0; @@ -299,6 +299,8 @@ class BaseOutputDocInterface : public CodeOutputInterface virtual void writeNonBreakableSpace(int) = 0; virtual void startDescTable(const char *title) = 0; virtual void endDescTable() = 0; + virtual void startDescTableRow() = 0; + virtual void endDescTableRow() = 0; virtual void startDescTableTitle() = 0; virtual void endDescTableTitle() = 0; virtual void startDescTableData() = 0; @@ -402,7 +404,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endMemberGroup(bool) = 0; virtual void insertMemberAlign(bool) = 0; virtual void startMemberDoc(const char *,const char *, - const char *,const char *,bool) = 0; + const char *,const char *,int,int,bool) = 0; virtual void endMemberDoc(bool) = 0; virtual void startDoxyAnchor(const char *fName,const char *manName, const char *anchor,const char *name, @@ -468,8 +470,8 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endConstraintDocs() = 0; virtual void endConstraintList() = 0; - virtual void startMemberDocSimple() = 0; - virtual void endMemberDocSimple() = 0; + virtual void startMemberDocSimple(bool) = 0; + virtual void endMemberDocSimple(bool) = 0; virtual void startInlineMemberType() = 0; virtual void endInlineMemberType() = 0; virtual void startInlineMemberName() = 0; diff --git a/src/outputlist.cpp b/src/outputlist.cpp index 79330d8..93a1b6e 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -353,6 +353,7 @@ FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,const char * FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,bool a5,a1,a2,a3,a4,a5) FORALL6(const char *a1,const char *a2,const char *a3,const char *a4,const char *a5,const char *a6,a1,a2,a3,a4,a5,a6) FORALL6(const char *a1,const DocLinkInfo &a2,const char *a3,const char *a4,const SourceLinkInfo &a5,const SourceLinkInfo &a6,a1,a2,a3,a4,a5,a6) +FORALL7(const char *a1,const char *a2,const char *a3,const char *a4,int a5,int a6,bool a7,a1,a2,a3,a4,a5,a6,a7) //-------------------------------------------------------------------------- diff --git a/src/outputlist.h b/src/outputlist.h index 4abb100..5cec439 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -112,8 +112,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::endTitle); } //void newParagraph() //{ forall(&OutputGenerator::newParagraph); } - void startParagraph() - { forall(&OutputGenerator::startParagraph); } + void startParagraph(const char *classDef=0) + { forall(&OutputGenerator::startParagraph,classDef); } void endParagraph() { forall(&OutputGenerator::endParagraph); } void writeString(const char *text) @@ -259,8 +259,9 @@ class OutputList : public OutputDocInterface void writeChar(char c) { forall(&OutputGenerator::writeChar,c); } void startMemberDoc(const char *clName,const char *memName, - const char *anchor,const char *title,bool showInline) - { forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title,showInline); } + const char *anchor,const char *title, + int memCount,int memTotal,bool showInline) + { forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title,memCount,memTotal,showInline); } void endMemberDoc(bool hasArgs) { forall(&OutputGenerator::endMemberDoc,hasArgs); } void startDoxyAnchor(const char *fName,const char *manName, @@ -371,6 +372,10 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startDescTable,title); } void endDescTable() { forall(&OutputGenerator::endDescTable); } + void startDescTableRow() + { forall(&OutputGenerator::startDescTableRow); } + void endDescTableRow() + { forall(&OutputGenerator::endDescTableRow); } void startDescTableTitle() { forall(&OutputGenerator::startDescTableTitle); } void endDescTableTitle() @@ -447,10 +452,10 @@ class OutputList : public OutputDocInterface void endConstraintList() { forall(&OutputGenerator::endConstraintList); } - void startMemberDocSimple() - { forall(&OutputGenerator::startMemberDocSimple); } - void endMemberDocSimple() - { forall(&OutputGenerator::endMemberDocSimple); } + void startMemberDocSimple(bool b) + { forall(&OutputGenerator::startMemberDocSimple,b); } + void endMemberDocSimple(bool b) + { forall(&OutputGenerator::endMemberDocSimple,b); } void startInlineMemberType() { forall(&OutputGenerator::startInlineMemberType); } void endInlineMemberType() @@ -546,6 +551,7 @@ class OutputList : public OutputDocInterface FORALLPROTO5(const char *,const char *,const char *,const char *,bool); FORALLPROTO6(const char *,const char *,const char *,const char *,const char *,const char *); FORALLPROTO6(const char *,const DocLinkInfo &,const char *,const char *,const SourceLinkInfo &,const SourceLinkInfo &); + FORALLPROTO7(const char *,const char *,const char *,const char *,int,int,bool); OutputList(const OutputList &ol); QList<OutputGenerator> m_outputs; diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 20ace23..1210305 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -34,8 +34,7 @@ PageDef::PageDef(const char *f,int l,const char *n, m_subPageDict = new PageSDict(7); m_pageScope = 0; m_nestingLevel = 0; - static bool shortNames = Config_getBool("SHORT_NAMES"); - m_fileName = shortNames ? convertNameToFile(n) : QCString(n); + m_fileName = ::convertNameToFile(n,FALSE,TRUE); m_showToc = FALSE; } @@ -118,7 +117,7 @@ void PageDef::writeTagFile(FTextStream &tagFile) void PageDef::writeDocumentation(OutputList &ol) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); + static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW); //outputList->disable(OutputGenerator::Man); QCString pageName,manPageName; @@ -154,7 +153,7 @@ void PageDef::writeDocumentation(OutputList &ol) if (!generateTreeView) { - if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX")) + if (getOuterScope()!=Doxygen::globalScope && !Config_getBool(DISABLE_INDEX)) { getOuterScope()->writeNavigationPath(ol); } @@ -204,7 +203,7 @@ void PageDef::writeDocumentation(OutputList &ol) writePageDocumentation(ol); - if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX")) + if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool(DISABLE_INDEX)) { ol.endContents(); endFileWithNavPath(getOuterScope(),ol); @@ -230,12 +229,20 @@ void PageDef::writePageDocumentation(OutputList &ol) } ol.startTextBlock(); + QCString docStr = documentation()+inbodyDocumentation(); + if (!docStr.isEmpty()) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); + } ol.generateDoc( docFile(), // fileName docLine(), // startLine this, // context 0, // memberdef - documentation()+inbodyDocumentation(), // docStr + docStr, // docStr TRUE, // index words FALSE // not an example ); @@ -281,7 +288,7 @@ void PageDef::writePageDocumentation(OutputList &ol) bool PageDef::visibleInIndex() const { - static bool externalPages = Config_getBool("EXTERNAL_PAGES"); + static bool externalPages = Config_getBool(EXTERNAL_PAGES); return // not part of a group !getGroupDef() && // not an externally defined page @@ -309,6 +316,6 @@ void PageDef::setNestingLevel(int l) void PageDef::setShowToc(bool b) { - m_showToc = b; + m_showToc |= b; } diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 6f9eb64..ef5cbc2 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -653,8 +653,8 @@ void PerlModDocVisitor::visit(DocVerbatim *s) m_output.add("<programlisting>"); parseCode(m_ci,s->context(),s->text(),FALSE,0); m_output.add("</programlisting>"); -#endif return; +#endif case DocVerbatim::Verbatim: type = "preformatted"; break; case DocVerbatim::HtmlOnly: type = "htmlonly"; break; case DocVerbatim::RtfOnly: type = "rtfonly"; break; @@ -667,6 +667,14 @@ void PerlModDocVisitor::visit(DocVerbatim *s) case DocVerbatim::PlantUML: type = "plantuml"; break; } openItem(type); + if (s->hasCaption()) + { + openSubBlock("caption"); + QListIterator<DocNode> cli(s->children()); + DocNode *n; + for (cli.toFirst();(n=cli.current());++cli) n->accept(this); + closeSubBlock(); + } m_output.addFieldQuotedString("content", s->text()); closeItem(); } @@ -708,6 +716,12 @@ void PerlModDocVisitor::visit(DocInclude *inc) case DocInclude::LatexInclude: type = "latexonly"; break; case DocInclude::VerbInclude: type = "preformatted"; break; case DocInclude::Snippet: return; + case DocInclude::SnipWithLines: return; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } openItem(type); m_output.addFieldQuotedString("content", inc->text()); @@ -897,6 +911,7 @@ void PerlModDocVisitor::visitPre(DocSection *s) { QCString sect = QCString().sprintf("sect%d",s->level()); openItem(sect); + m_output.addFieldQuotedString("title", s->title()); openSubBlock("content"); } @@ -1260,17 +1275,43 @@ void PerlModDocVisitor::visitPre(DocParamList *pl) DocNode *param; for (li.toFirst();(param=li.current());++li) { - QCString s; + QCString name; if (param->kind()==DocNode::Kind_Word) { - s = ((DocWord*)param)->word(); + name = ((DocWord*)param)->word(); } else if (param->kind()==DocNode::Kind_LinkedWord) { - s = ((DocLinkedWord*)param)->word(); + name = ((DocLinkedWord*)param)->word(); } + + QCString dir = ""; + DocParamSect *sect = 0; + if (pl->parent()->kind()==DocNode::Kind_ParamSect) + { + sect=(DocParamSect*)pl->parent(); + } + if (sect && sect->hasInOutSpecifier()) + { + if (pl->direction()!=DocParamSect::Unspecified) + { + if (pl->direction()==DocParamSect::In) + { + dir = "in"; + } + else if (pl->direction()==DocParamSect::Out) + { + dir = "out"; + } + else if (pl->direction()==DocParamSect::InOut) + { + dir = "in,out"; + } + } + } + m_output.openHash() - .addFieldQuotedString("name", s) + .addFieldQuotedString("name", name).addFieldQuotedString("dir", dir) .closeHash(); } m_output.closeList() @@ -2208,7 +2249,7 @@ bool PerlModGenerator::createOutputFile(QFile &f, const char *s) bool PerlModGenerator::createOutputDir(QDir &perlModDir) { - QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); + QCString outputDirectory = Config_getString(OUTPUT_DIRECTORY); if (outputDirectory.isEmpty()) { outputDirectory=QDir::currentDirPath().utf8(); @@ -2445,8 +2486,8 @@ bool PerlModGenerator::generateDoxyRules() if (!createOutputFile(doxyRules, pathDoxyRules)) return false; - bool perlmodLatex = Config_getBool("PERLMOD_LATEX"); - QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); + bool perlmodLatex = Config_getBool(PERLMOD_LATEX); + QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX); FTextStream doxyRulesStream(&doxyRules); doxyRulesStream << @@ -2542,8 +2583,8 @@ bool PerlModGenerator::generateMakefile() if (!createOutputFile(makefile, pathMakefile)) return false; - bool perlmodLatex = Config_getBool("PERLMOD_LATEX"); - QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); + bool perlmodLatex = Config_getBool(PERLMOD_LATEX); + QCString prefix = Config_getString(PERLMOD_MAKEVAR_PREFIX); FTextStream makefileStream(&makefile); makefileStream << @@ -2923,7 +2964,7 @@ void PerlModGenerator::generate() if (!createOutputDir(perlModDir)) return; - bool perlmodLatex = Config_getBool("PERLMOD_LATEX"); + bool perlmodLatex = Config_getBool(PERLMOD_LATEX); QCString perlModAbsPath = perlModDir.absPath().utf8(); pathDoxyDocsPM = perlModAbsPath + "/DoxyDocs.pm"; @@ -2959,7 +3000,7 @@ void PerlModGenerator::generate() void generatePerlMod() { - PerlModGenerator pmg(Config_getBool("PERLMOD_PRETTY")); + PerlModGenerator pmg(Config_getBool(PERLMOD_PRETTY)); pmg.generate(); } diff --git a/src/plantuml.cpp b/src/plantuml.cpp index ae9af43..f97f690 100644 --- a/src/plantuml.cpp +++ b/src/plantuml.cpp @@ -16,6 +16,8 @@ #include "plantuml.h" #include "portable.h" #include "config.h" +#include "doxygen.h" +#include "index.h" #include "message.h" #include <qdir.h> @@ -43,7 +45,7 @@ QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,con { err("Could not open file %s for writing\n",baseName.data()); } - QCString text = "@startuml"; + QCString text = "@startuml\n"; text+=content; text+="@enduml\n"; file.writeBlock( text, text.length() ); @@ -53,12 +55,13 @@ QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,con void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutputFormat format) { - static QCString plantumlJarPath = Config_getString("PLANTUML_JAR_PATH"); + static QCString plantumlJarPath = Config_getString(PLANTUML_JAR_PATH); + static QCString plantumlConfigFile = Config_getString(PLANTUML_CFG_FILE); QCString pumlExe = "java"; QCString pumlArgs = ""; - QStrList &pumlIncludePathList = Config_getList("PLANTUML_INCLUDE_PATH"); + QStrList &pumlIncludePathList = Config_getList(PLANTUML_INCLUDE_PATH); char *s=pumlIncludePathList.first(); if (s) { @@ -74,31 +77,44 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp } if (pumlIncludePathList.first()) pumlArgs += "\" "; pumlArgs += "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" "; + if (!plantumlConfigFile.isEmpty()) + { + pumlArgs += "-config \""; + pumlArgs += plantumlConfigFile; + pumlArgs += "\" "; + } pumlArgs+="-o \""; pumlArgs+=outDir; pumlArgs+="\" "; - QCString extension; + QCString imgName = baseName; + // The basename contains path, we need to strip the path from the filename in order + // to create the image file name which should be included in the index.qhp (Qt help index file). + int i; + if ((i=imgName.findRev('/'))!=-1) // strip path + { + imgName=imgName.right(imgName.length()-i-1); + } switch (format) { case PUML_BITMAP: pumlArgs+="-tpng"; - extension=".png"; + imgName+=".png"; break; case PUML_EPS: pumlArgs+="-teps"; - extension=".eps"; + imgName+=".eps"; break; case PUML_SVG: pumlArgs+="-tsvg"; - extension=".svg"; + imgName+=".svg"; break; } pumlArgs+=" \""; pumlArgs+=baseName; pumlArgs+=".pu\" "; - pumlArgs+="-charset " + Config_getString("INPUT_ENCODING") + " "; + pumlArgs+="-charset UTF-8 "; int exitCode; - //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,outFile); + //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,baseName); msg("Running PlantUML on generated file %s.pu\n",baseName); portable_sysTimerStart(); if ((exitCode=portable_system(pumlExe,pumlArgs,TRUE))!=0) @@ -106,12 +122,12 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line. Exit code: %d\n", plantumlJarPath.data(),exitCode); } - else if (Config_getBool("DOT_CLEANUP")) + else if (Config_getBool(DOT_CLEANUP)) { QFile(QCString(baseName)+".pu").remove(); } portable_sysTimerStop(); - if ( (format==PUML_EPS) && (Config_getBool("USE_PDFLATEX")) ) + if ( (format==PUML_EPS) && (Config_getBool(USE_PDFLATEX)) ) { QCString epstopdfArgs(maxCmdLine); epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",baseName,baseName); @@ -122,5 +138,6 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp } portable_sysTimerStop(); } + Doxygen::indexList->addImageFile(imgName); } diff --git a/src/portable.cpp b/src/portable.cpp index 5886793..1983fe7 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -448,4 +448,27 @@ bool portable_isAbsolutePath(const char *fileName) return false; } - +/** + * Correct a possible wrong PATH variable + * + * This routine was inspired by the cause for bug 766059 was that in the Windows path there were forward slahes. + */ +void portable_correct_path(void) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + const char *p = portable_getenv("PATH"); + char *q = (char *)malloc(strlen(p) + 1); + strcpy(q, p); + bool found = false; + for (int i = 0 ; i < strlen(q); i++) + { + if (q[i] == '/') + { + q[i] = '\\'; + found = true; + } + } + if (found) portable_setenv("PATH",q); + free(q); +#endif +} diff --git a/src/portable.h b/src/portable.h index 1471ce1..c5578a3 100644 --- a/src/portable.h +++ b/src/portable.h @@ -35,6 +35,7 @@ void portable_sysTimerStop(); double portable_getSysElapsedTime(); void portable_sleep(int ms); bool portable_isAbsolutePath(const char *fileName); +void portable_correct_path(void); extern "C" { void * portable_iconv_open(const char* tocode, const char* fromcode); @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="preYY" + %{ /* @@ -454,7 +456,7 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude QFileInfo fi(fileName); if (fi.exists() && fi.isFile()) { - static QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS"); + static QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS); if (patternMatch(fi,&exclPatterns)) return 0; QCString absName = fi.absFilePath().utf8(); @@ -1461,7 +1463,7 @@ static inline void outputArray(const char *a,int len) static void readIncludeFile(const QCString &inc) { - static bool searchIncludes = Config_getBool("SEARCH_INCLUDES"); + static bool searchIncludes = Config_getBool(SEARCH_INCLUDES); uint i=0; // find the start of the include file name @@ -1507,7 +1509,7 @@ static void readIncludeFile(const QCString &inc) } else if (searchIncludes) // search in INCLUDE_PATH as well { - QStrList &includePath = Config_getList("INCLUDE_PATH"); + QStrList &includePath = Config_getList(INCLUDE_PATH); char *s=includePath.first(); while (s) { @@ -1737,6 +1739,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) %x SkipString %x CopyLine %x CopyString +%x CopyStringFtn %x Include %x IncludeID %x EndImport @@ -1789,7 +1792,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS <Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\)\n]*")"{B}*\n { // function like macro - static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS"); + static bool skipFuncMacros = Config_getBool(SKIP_FUNCTION_MACROS); QCString name(yytext); name=name.left(name.find('(')).stripWhiteSpace(); @@ -1850,6 +1853,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) outputChar(*yytext); BEGIN( CopyString ); } +<CopyLine>\' { + if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran) REJECT; + outputChar(*yytext); + BEGIN( CopyStringFtn ); + } <CopyString>[^\"\\\r\n]+ { outputArray(yytext,(int)yyleng); } @@ -1860,6 +1868,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) outputChar(*yytext); BEGIN( CopyLine ); } +<CopyStringFtn>[^\'\\\r\n]+ { + outputArray(yytext,(int)yyleng); + } +<CopyStringFtn>\\. { + outputArray(yytext,(int)yyleng); + } +<CopyStringFtn>\' { + outputChar(*yytext); + BEGIN( CopyLine ); + } <CopyLine>{ID}/{BN}{0,80}"(" { g_expectGuard = FALSE; Define *def=0; @@ -2454,7 +2472,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) outputArray(yytext,(int)yyleng); } <SkipCComment>^({B}*"*"+)?{B}{0,3}"~~~"[~]* { - static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT"); + static bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT); if (!markdownSupport) { REJECT; @@ -2467,7 +2485,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } } <SkipCComment>^({B}*"*"+)?{B}{0,3}"```"[`]* { - static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT"); + static bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT); if (!markdownSupport) { REJECT; @@ -2999,8 +3017,8 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) //printf("##########################\n%s\n####################\n", // input.data()); - g_macroExpansion = Config_getBool("MACRO_EXPANSION"); - g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF"); + g_macroExpansion = Config_getBool(MACRO_EXPANSION); + g_expandOnlyPredef = Config_getBool(EXPAND_ONLY_PREDEF); g_skip=FALSE; g_curlyCount=0; g_nospaces=FALSE; @@ -3024,7 +3042,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) { // add predefined macros char *defStr; - QStrList &predefList = Config_getList("PREDEFINED"); + QStrList &predefList = Config_getList(PREDEFINED); QStrListIterator sli(predefList); for (sli.toFirst();(defStr=sli.current());++sli) { diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index b86670a..d1dbb74 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -22,6 +22,7 @@ #include <qglobal.h> #include "docvisitor.h" #include "htmlentity.h" +#include "message.h" /*! Concrete visitor implementation for pretty printing */ class PrintDocVisitor : public DocVisitor @@ -170,6 +171,12 @@ class PrintDocVisitor : public DocVisitor case DocInclude::LatexInclude: printf("latexinclude"); break; case DocInclude::VerbInclude: printf("verbinclude"); break; case DocInclude::Snippet: printf("snippet"); break; + case DocInclude::SnipWithLines: printf("snipwithlines"); break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } printf("\"/>"); } diff --git a/src/pycode.l b/src/pycode.l index c3219d9..fe1eef5 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -22,6 +22,8 @@ */ %option never-interactive +%option prefix="pycodeYY" + %{ #include <stdio.h> @@ -90,6 +92,9 @@ static int g_stringContext; static QValueStack<uint> g_indents; //!< Tracks indentation levels for scoping in python +static QCString g_docBlock; //!< contents of all lines of a documentation block +static bool g_endComment; + static void endFontClass(); static void adjustScopesAndSuites(unsigned indentLength); @@ -361,11 +366,13 @@ static void startCodeLine() Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); //printf("startCodeLine %d d=%p\n",g_yyLineNr,d); //g_code->startLineNumber(); + if (!g_includeCodeFragment && d && d->isLinkableInProject()) { g_currentDefinition = d; g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); //g_insideBody = FALSE; + g_endComment = FALSE; g_searchingForBody = TRUE; g_realScope = d->name().copy(); g_classScope = d->name().copy(); @@ -433,7 +440,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d, const char *text) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); @@ -467,6 +474,26 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol, } } +static void startFontClass(const char *s) +{ + // if font class is already set don't stop and start it. + // strcmp does not like null pointers as input. + if (!g_currentFontClass || !s || strcmp(g_currentFontClass,s)) + { + endFontClass(); + g_code->startFontClass(s); + g_currentFontClass=s; + } +} + +static void endFontClass() +{ + if (g_currentFontClass) + { + g_code->endFontClass(); + g_currentFontClass=0; + } +} static void codifyLines(char *text) { @@ -474,6 +501,7 @@ static void codifyLines(char *text) char *p=text,*sp=p; char c; bool done=FALSE; + const char * tmp_currentFontClass = g_currentFontClass; while (!done) { sp=p; @@ -483,7 +511,15 @@ static void codifyLines(char *text) g_yyLineNr++; *(p-1)='\0'; g_code->codify(sp); - nextCodeLine(); + endCodeLine(); + if (g_yyLineNr<g_inputLines) + { + startCodeLine(); + } + if (tmp_currentFontClass) + { + startFontClass(tmp_currentFontClass); + } } else { @@ -493,6 +529,13 @@ static void codifyLines(char *text) } } +static void codifyLines(const QCString &str) +{ + char *tmp= (char *)malloc(str.length()+1); + qstrcpy(tmp, str); + codifyLines(tmp); + free(tmp); +} static bool getLinkInScope(const QCString &c, // scope const QCString &m, // member @@ -796,22 +839,6 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName) codify(symName); } -static void startFontClass(const char *s) -{ - endFontClass(); - g_code->startFontClass(s); - g_currentFontClass=s; -} - -static void endFontClass() -{ - if (g_currentFontClass) - { - g_code->endFontClass(); - g_currentFontClass=0; - } -} - #undef YY_INPUT #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); @@ -842,7 +869,7 @@ PARAMNONEMPTY [^ \t\n():] IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")* BORDER ([^A-Za-z0-9]) -POUNDCOMMENT "#".* +POUNDCOMMENT "##" TRISINGLEQUOTE "'''" TRIDOUBLEQUOTE "\"\"\"" @@ -938,7 +965,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT %option noyywrap -%option nounput +%option stack %x Body @@ -960,6 +987,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT %x DoubleQuoteString %x TripleString +%x DocBlock %% <Body,Suite>{ @@ -981,14 +1009,38 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codify(yytext); endFontClass(); } + "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" { + codify("self."); + findMemberLink(*g_code,&yytext[5]); + } "self."{IDENTIFIER}/"(" { codify("self."); findMemberLink(*g_code,&yytext[5]); } + "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} { + codify("self."); + findMemberLink(*g_code,&yytext[5]); + } "self."{IDENTIFIER} { codify("self."); findMemberLink(*g_code,&yytext[5]); } + "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" { + codify("cls."); + findMemberLink(*g_code,&yytext[4]); + } + "cls."{IDENTIFIER}/"(" { + codify("cls."); + findMemberLink(*g_code,&yytext[4]); + } + "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} { + codify("cls."); + findMemberLink(*g_code,&yytext[4]); + } + "cls."{IDENTIFIER} { + codify("cls."); + findMemberLink(*g_code,&yytext[4]); + } } <ClassDec>{IDENTIFIER} { @@ -1092,6 +1144,10 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codify(yytext); } + "\n" { + codifyLines(yytext); + } + ":" { codify(yytext); @@ -1168,11 +1224,16 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT {POUNDCOMMENT} { - // This eats EVERYTHING - // except the newline - startFontClass("comment"); - codifyLines(yytext); - endFontClass(); + if (YY_START==SingleQuoteString || + YY_START==DoubleQuoteString || + YY_START==TripleString + ) + { + REJECT; + } + yy_push_state(YY_START); + BEGIN(DocBlock); + g_docBlock=yytext; } {NEWLINE} { @@ -1341,7 +1402,41 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codify(yytext); BEGIN(DoubleQuoteString); } -<*>{POUNDCOMMENT} { +<DocBlock>.* { // contents of current comment line + g_docBlock+=yytext; + } +<DocBlock>"\n"{B}("#") { // comment block (next line is also comment line) + g_docBlock+=yytext; + } +<DocBlock>{NEWLINE} { // comment block ends at the end of this line + // remove special comment (default config) + if (Config_getBool(STRIP_CODE_COMMENTS)) + { + g_yyLineNr+=((QCString)g_docBlock).contains('\n'); + g_endComment=TRUE; + } + else // do not remove comment + { + startFontClass("comment"); + codifyLines(g_docBlock); + endFontClass(); + } + unput(*yytext); + yy_pop_state(); + } +<*>{POUNDCOMMENT}.* { + if (YY_START==SingleQuoteString || + YY_START==DoubleQuoteString || + YY_START==TripleString + ) + { + REJECT; + } + yy_push_state(YY_START); + BEGIN(DocBlock); + g_docBlock=yytext; + } +<*>"#".* { // normal comment if (YY_START==SingleQuoteString || YY_START==DoubleQuoteString || YY_START==TripleString @@ -1349,14 +1444,19 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT { REJECT; } - // This eats EVERYTHING - // except the newline startFontClass("comment"); - codifyLines(yytext); - endFontClass(); + codifyLines(yytext); + endFontClass(); } <*>{NEWLINE} { - codifyLines(yytext); + if (g_endComment) + { + g_endComment=FALSE; + } + else + { + codifyLines(yytext); + } //printf("[pycode] %d NEWLINE [line %d] no match\n", // YY_START, g_yyLineNr); @@ -1377,6 +1477,17 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT BEGIN(Body); } +<*><<EOF>> { + if (YY_START == DocBlock) { + if (!Config_getBool(STRIP_CODE_COMMENTS)) + { + startFontClass("comment"); + codifyLines(g_docBlock); + endFontClass(); + } + } + yyterminate(); + } %% /*@ ---------------------------------------------------------------------------- @@ -1425,8 +1536,8 @@ static void adjustScopesAndSuites(unsigned indentLength) void parsePythonCode(CodeOutputInterface &od,const char * /*className*/, const QCString &s,bool exBlock, const char *exName, - FileDef *fd,int startLine,int endLine,bool /*inlineFragment*/, - MemberDef *,bool,Definition *searchCtx,bool collectXRefs) + FileDef *fd,int startLine,int endLine,bool inlineFragment, + MemberDef *,bool,Definition *searchCtx,bool collectXRefs) { //printf("***parseCode()\n"); @@ -1442,22 +1553,22 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/, g_needsTermination = FALSE; g_searchCtx=searchCtx; g_collectXRefs=collectXRefs; - if (endLine!=-1) - g_inputLines = endLine+1; - else - g_inputLines = countLines(); - if (startLine!=-1) g_yyLineNr = startLine; else g_yyLineNr = 1; + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + g_exampleBlock = exBlock; g_exampleName = exName; g_sourceFileDef = fd; bool cleanupSourceDef = FALSE; - if (fd==0) + if (exBlock && fd==0) { // create a dummy filedef for the example g_sourceFileDef = new FileDef("",(exName?exName:"generated")); @@ -1468,6 +1579,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/, setCurrentDoc("l00001"); } + g_includeCodeFragment = inlineFragment; // Starts line 1 on the output startCodeLine(); diff --git a/src/pyscanner.l b/src/pyscanner.l index 99650bd..9c21d41 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -22,6 +22,8 @@ */ %option never-interactive +%option prefix="pyscannerYY" + %{ /* @@ -113,6 +115,9 @@ static int g_braceCount; static bool g_lexInit = FALSE; static bool g_packageCommentAllowed; +static bool g_start_init = FALSE; +static int g_search_count = 0; + //----------------------------------------------------------------------------- @@ -178,7 +183,7 @@ static void newFunction() static inline int computeIndent(const char *s) { int col=0; - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); const char *p=s; char c; while ((c=*p++)) @@ -365,7 +370,7 @@ static void initTriDoubleQuoteBlock() docBlockContext = YY_START; docBlockInBody = FALSE; docBlockJavaStyle = TRUE; - docBlockSpecial = yytext[3]=='!'; + docBlockSpecial = yytext[strlen(yytext) - 1]=='!'; docBlock.resize(0); g_doubleQuote = TRUE; startCommentBlock(FALSE); @@ -376,7 +381,7 @@ static void initTriSingleQuoteBlock() docBlockContext = YY_START; docBlockInBody = FALSE; docBlockJavaStyle = TRUE; - docBlockSpecial = yytext[3]=='!'; + docBlockSpecial = yytext[strlen(yytext) - 1]=='!'; docBlock.resize(0); g_doubleQuote = FALSE; startCommentBlock(FALSE); @@ -398,7 +403,6 @@ static void searchFoundDef() current->startLine = yyLineNr; current->bodyLine = yyLineNr; current->section = Entry::FUNCTION_SEC; - current->protection = protection = Public; current->lang = SrcLangExt_Python; current->virt = Normal; current->stat = gstat; @@ -458,6 +462,7 @@ OCTNUMBER "0"[0-7]+[lL]? NUMBER {DIGIT}+[lLjJ]? INTNUMBER {HEXNUMBER}|{OCTNUMBER}|{NUMBER} FLOATNUMBER {DIGIT}+"."{DIGIT}+([eE][+\-]?{DIGIT}+)?[jJ]? +BOOL ("True"|"False") LETTER [A-Za-z\x80-\xFF] NONEMPTY [A-Za-z0-9_\x80-\xFF] EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-] @@ -467,8 +472,10 @@ IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")* SCOPE {IDENTIFIER}("."{IDENTIFIER})* BORDER ([^A-Za-z0-9]) -TRISINGLEQUOTE "'''"(!)? -TRIDOUBLEQUOTE "\"\"\""(!)? +TRISINGLEQUOTE {STRINGPREFIX}?"'''"(!)? +TRIDOUBLEQUOTE {STRINGPREFIX}?"\"\"\""(!)? +ENDTRISINGLEQUOTE "'''" +ENDTRIDOUBLEQUOTE "\"\"\"" LONGSTRINGCHAR [^\\"'] ESCAPESEQ ("\\")(.) LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ}) @@ -483,6 +490,7 @@ STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR") KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False") FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally") POUNDCOMMENT "#"[^#\n][^\n]* +SCRIPTCOMMENT "#!".* STARTDOCSYMS "##" @@ -580,6 +588,7 @@ STARTDOCSYMS "##" BEGIN(VariableDec); } ^{B}{IDENTIFIER}/{B}"="[^=] { // variable + if (g_search_count) REJECT; g_indent=computeIndent(yytext); current->section = Entry::VARIABLE_SEC; current->name = QCString(yytext).stripWhiteSpace(); @@ -589,6 +598,20 @@ STARTDOCSYMS "##" g_packageCommentAllowed = FALSE; BEGIN(VariableDec); } + {B}{IDENTIFIER}/({B},{B}{IDENTIFIER})*{B}")"*{B}"="[^=] { // list of variables, we cannot place the default value + // so we will skip it later on in a general rule + // Also note ")" this is to catch also (a,b). the "(" + // is caught in the rule: [(], the ")" will be handled in [)] + if (g_search_count > 1) REJECT; + g_indent=computeIndent(yytext); + current->section = Entry::VARIABLE_SEC; + current->name = QCString(yytext).stripWhiteSpace(); + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + g_packageCommentAllowed = FALSE; + newVariable(); + } "'" { // start of a single quoted string g_stringContext=YY_START; g_copyString=0; @@ -604,6 +627,9 @@ STARTDOCSYMS "##" "@staticmethod" { gstat=TRUE; } + {SCRIPTCOMMENT} { // Unix type script comment + if (yyLineNr != 1) REJECT; + } {POUNDCOMMENT} { // normal comment g_packageCommentAllowed = FALSE; } @@ -634,6 +660,12 @@ STARTDOCSYMS "##" initSpecialBlock(); BEGIN(SpecialComment); } + [(] { // we have to do something with ( + g_search_count += 1; + } + [)] { // we have to do something with ) + g_search_count -= 1; + } [^\n] { // any other character... // This is the major default // that should catch everything @@ -734,7 +766,7 @@ STARTDOCSYMS "##" <SearchMemVars>{ "self."{IDENTIFIER}/{B}"=" { - DBG_CTX((stderr,"Found member variable %s in %s at %d\n",&yytext[5],current_root->name.data(),yyLineNr)); + DBG_CTX((stderr,"Found instance method variable %s in %s at %d\n",&yytext[5],current_root->name.data(),yyLineNr)); current->name=&yytext[5]; current->section=Entry::VARIABLE_SEC; current->fileName = yyFileName; @@ -745,9 +777,19 @@ STARTDOCSYMS "##" { current->protection=Private; } - else + newEntry(); + } + "cls."{IDENTIFIER}/{B}"=" { + DBG_CTX((stderr,"Found class method variable %s in %s at %d\n",&yytext[4],current_root->name.data(),yyLineNr)); + current->name=&yytext[4]; + current->section=Entry::VARIABLE_SEC; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + current->type.resize(0); + if (current->name.at(0)=='_') // mark as private { - current->protection=Public; + current->protection=Private; } newEntry(); } @@ -969,7 +1011,7 @@ STARTDOCSYMS "##" } else // continue { - g_braceCount--; + if (*yytext == ')')g_braceCount--; g_defVal+=*yytext; } } @@ -1160,54 +1202,58 @@ STARTDOCSYMS "##" <VariableDec>{ "=" { // the assignment operator //printf("====== VariableDec at line %d\n",yyLineNr); + g_start_init = TRUE; current->initializer = yytext; current->initializer += " "; } {B} { // spaces + current->initializer += yytext; } {INTNUMBER} { // integer value - current->type = "int"; + if (current-> type.isEmpty()) current->type = "int"; current->initializer += yytext; - BEGIN(VariableEnd); } {FLOATNUMBER} { // floating point value - current->type = "float"; + if (current->type.isEmpty()) current->type = "float"; + current->initializer += yytext; + } + {BOOL} { // boolean value + if (current->type.isEmpty()) current->type = "bool"; current->initializer += yytext; - BEGIN(VariableEnd); } {STRINGPREFIX}?"'" { // string - current->type = "string"; + if (current->type.isEmpty()) current->type = "string"; current->initializer += yytext; g_copyString=¤t->initializer; - g_stringContext=VariableEnd; + g_stringContext=VariableDec; BEGIN( SingleQuoteString ); } {STRINGPREFIX}?"\"" { // string - current->type = "string"; + if (current->type.isEmpty()) current->type = "string"; current->initializer += yytext; g_copyString=¤t->initializer; - g_stringContext=VariableEnd; + g_stringContext=VariableDec; BEGIN( DoubleQuoteString ); } {TRIDOUBLEQUOTE} { // start of a comment block - current->type = "string"; + if (current->type.isEmpty()) current->type = "string"; current->initializer += yytext; g_doubleQuote=TRUE; g_copyString=¤t->initializer; - g_stringContext=VariableEnd; + g_stringContext=VariableDec; BEGIN(TripleString); } {TRISINGLEQUOTE} { // start of a comment block - current->type = "string"; + if (current->type.isEmpty()) current->type = "string"; current->initializer += yytext; g_doubleQuote=FALSE; g_copyString=¤t->initializer; - g_stringContext=VariableEnd; + g_stringContext=VariableDec; BEGIN(TripleString); } - "(" { // tuple - if (current->mtype!=Property) + "(" { // tuple, only when direct after = + if (current->mtype!=Property && g_start_init) { current->type = "tuple"; } @@ -1218,7 +1264,7 @@ STARTDOCSYMS "##" BEGIN( VariableAtom ); } "[" { // list - current->type = "list"; + if (g_start_init) current->type = "list"; current->initializer+=*yytext; g_atomStart='['; g_atomEnd=']'; @@ -1226,7 +1272,7 @@ STARTDOCSYMS "##" BEGIN( VariableAtom ); } "{" { // dictionary - current->type = "dictionary"; + if (g_start_init) current->type = "dictionary"; current->initializer+=*yytext; g_atomStart='{'; g_atomEnd='}'; @@ -1237,9 +1283,25 @@ STARTDOCSYMS "##" BEGIN( VariableEnd ); } {IDENTIFIER} { + // do something based on the type of the IDENTIFIER + if (current->type.isEmpty()) + { + QListIterator<Entry> eli(*(current_root->children())); + Entry *child; + for (eli.toFirst();(child=eli.current());++eli) + { + if (child->name == QCString(yytext)) + { + current->type = child->type; + break; + } + } + } + g_start_init = FALSE; current->initializer+=yytext; } . { + g_start_init = FALSE; current->initializer+=*yytext; } \n { @@ -1264,7 +1326,8 @@ STARTDOCSYMS "##" } if (g_atomCount==0) { - BEGIN(VariableEnd); + g_start_init = FALSE; + BEGIN(VariableDec); } } {TRIDOUBLEQUOTE} { // start of a comment block @@ -1322,8 +1385,8 @@ STARTDOCSYMS "##" } <TripleComment>{ - {TRIDOUBLEQUOTE} | - {TRISINGLEQUOTE} { + {ENDTRIDOUBLEQUOTE} | + {ENDTRISINGLEQUOTE} { // printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock); if (g_doubleQuote==(yytext[0]=='"')) { @@ -1468,8 +1531,8 @@ STARTDOCSYMS "##" } <TripleString>{ - {TRIDOUBLEQUOTE} | - {TRISINGLEQUOTE} { + {ENDTRIDOUBLEQUOTE} | + {ENDTRISINGLEQUOTE} { *g_copyString += yytext; if (g_doubleQuote==(yytext[0]=='"')) { diff --git a/src/qhp.cpp b/src/qhp.cpp index 757f547..e7c8d10 100644 --- a/src/qhp.cpp +++ b/src/qhp.cpp @@ -81,8 +81,8 @@ void Qhp::initialize() <filterAttribute>1.0</filterAttribute> .. */ - QCString nameSpace = Config_getString("QHP_NAMESPACE"); - QCString virtualFolder = Config_getString("QHP_VIRTUAL_FOLDER"); + QCString nameSpace = Config_getString(QHP_NAMESPACE); + QCString virtualFolder = Config_getString(QHP_VIRTUAL_FOLDER); m_doc.declaration("1.0", "UTF-8"); @@ -94,14 +94,14 @@ void Qhp::initialize() m_doc.openCloseContent("virtualFolder", virtualFolder); // Add custom filter - QCString filterName = Config_getString("QHP_CUST_FILTER_NAME"); + QCString filterName = Config_getString(QHP_CUST_FILTER_NAME); if (!filterName.isEmpty()) { const char * tagAttributes[] = { "name", filterName, 0 }; m_doc.open("customFilter", tagAttributes); - QStringList customFilterAttributes = QStringList::split(QChar(' '), Config_getString("QHP_CUST_FILTER_ATTRS")); + QStringList customFilterAttributes = QStringList::split(QChar(' '), Config_getString(QHP_CUST_FILTER_ATTRS)); for (int i = 0; i < (int)customFilterAttributes.count(); i++) { m_doc.openCloseContent("filterAttribute", customFilterAttributes[i].utf8()); @@ -113,7 +113,7 @@ void Qhp::initialize() // Add section attributes QStringList sectionFilterAttributes = QStringList::split(QChar(' '), - Config_getString("QHP_SECT_FILTER_ATTRS")); + Config_getString(QHP_SECT_FILTER_ATTRS)); if (!sectionFilterAttributes.contains(QString("doxygen"))) { sectionFilterAttributes << "doxygen"; @@ -164,7 +164,7 @@ void Qhp::finalize() m_doc.close("filterSection"); m_doc.close("QtHelpProject"); - QCString fileName = Config_getString("HTML_OUTPUT") + "/" + getQhpFileName(); + QCString fileName = Config_getString(HTML_OUTPUT) + "/" + getQhpFileName(); QFile file(fileName); if (!file.open(IO_WriteOnly)) { @@ -225,7 +225,7 @@ void Qhp::addIndexItem(Definition *context,MemberDef *md, if (md) // member { - static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES); if (context==0) // global member { if (md->getGroupDef()) @@ -284,8 +284,8 @@ QCString Qhp::getQhpFileName() QCString Qhp::getFullProjectName() { - QCString projectName = Config_getString("PROJECT_NAME"); - QCString versionText = Config_getString("PROJECT_NUMBER"); + QCString projectName = Config_getString(PROJECT_NAME); + QCString versionText = Config_getString(PROJECT_NUMBER); if (projectName.isEmpty()) projectName="Root"; return projectName + (versionText.isEmpty() ? QCString("") diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp index 80bd2ad..ab7422a 100644 --- a/src/resourcemgr.cpp +++ b/src/resourcemgr.cpp @@ -56,7 +56,7 @@ void ResourceMgr::registerResources(const Resource resources[],int numResources) } } -bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) const +bool ResourceMgr::writeCategory(const char *categoryName,const char *targetDir) const { QDictIterator<Resource> it(p->resources); const Resource *res; @@ -64,8 +64,11 @@ bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) c { if (qstrcmp(res->category,categoryName)==0) { - if (!copyResource(res->name,targetDir)) + QCString pathName = QCString(targetDir)+"/"+res->name; + QFile f(pathName); + if (!f.open(IO_WriteOnly) || f.writeBlock((const char *)res->data,res->size)!=res->size) { + err("Failed to write resource '%s' to directory '%s'\n",res->name,targetDir); return FALSE; } } @@ -137,7 +140,7 @@ bool ResourceMgr::copyResourceAs(const char *name,const char *targetDir,const ch buf = replaceColorMarkers(buf); if (qstrcmp(name,"navtree.css")==0) { - t << substitute(buf,"$width",QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px"); + t << substitute(buf,"$width",QCString().setNum(Config_getInt(TREEVIEW_WIDTH))+"px"); } else { diff --git a/src/resourcemgr.h b/src/resourcemgr.h index 57b3e37..6e1587d 100644 --- a/src/resourcemgr.h +++ b/src/resourcemgr.h @@ -38,8 +38,8 @@ class ResourceMgr /** Registers an array of resources */ void registerResources(const Resource resources[],int numResources); - /** Copies all resource belonging to a given category to a given target directory */ - bool copyCategory(const char *categoryName,const char *targetDir) const; + /** Writes all resource belonging to a given category to a given target directory */ + bool writeCategory(const char *categoryName,const char *targetDir) const; /** Copies a registered resource to a given target directory */ bool copyResource(const char *name,const char *targetDir) const; diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 2ea35cc..c85b638 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -140,7 +140,7 @@ void RTFDocVisitor::visit(DocURL *u) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visit(DocURL)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { m_t << "{\\field " "{\\*\\fldinst " @@ -231,6 +231,13 @@ void RTFDocVisitor::visit(DocStyleChange *s) } } +static void visitCaption(RTFDocVisitor *parent, QList<DocNode> children) +{ + QListIterator<DocNode> cli(children); + DocNode *n; + for (cli.toFirst();(n=cli.current());++cli) n->accept(parent); +} + void RTFDocVisitor::visit(DocVerbatim *s) { if (m_hide) return; @@ -277,7 +284,7 @@ void RTFDocVisitor::visit(DocVerbatim *s) QCString fileName(4096); fileName.sprintf("%s%d%s", - (Config_getString("RTF_OUTPUT")+"/inline_dotgraph_").data(), + (Config_getString(RTF_OUTPUT)+"/inline_dotgraph_").data(), dotindex++, ".dot" ); @@ -288,10 +295,12 @@ void RTFDocVisitor::visit(DocVerbatim *s) } file.writeBlock( s->text(), s->text().length() ); file.close(); - m_t << "\\par{\\qc "; // center picture - writeDotFile(fileName); - m_t << "} "; - if (Config_getBool("DOT_CLEANUP")) file.remove(); + + writeDotFile(fileName, s->hasCaption()); + visitCaption(this, s->children()); + includePicturePostRTF(true, s->hasCaption()); + + if (Config_getBool(DOT_CLEANUP)) file.remove(); } break; case DocVerbatim::Msc: @@ -300,7 +309,7 @@ void RTFDocVisitor::visit(DocVerbatim *s) QCString baseName(4096); baseName.sprintf("%s%d%s", - (Config_getString("RTF_OUTPUT")+"/inline_mscgraph_").data(), + (Config_getString(RTF_OUTPUT)+"/inline_mscgraph_").data(), mscindex++, ".msc" ); @@ -314,20 +323,22 @@ void RTFDocVisitor::visit(DocVerbatim *s) text+="}"; file.writeBlock( text, text.length() ); file.close(); - m_t << "\\par{\\qc "; // center picture - writeMscFile(baseName); - m_t << "} "; - if (Config_getBool("DOT_CLEANUP")) file.remove(); + + writeMscFile(baseName, s->hasCaption()); + visitCaption(this, s->children()); + includePicturePostRTF(true, s->hasCaption()); + + if (Config_getBool(DOT_CLEANUP)) file.remove(); } break; case DocVerbatim::PlantUML: { - static QCString rtfOutput = Config_getString("RTF_OUTPUT"); + static QCString rtfOutput = Config_getString(RTF_OUTPUT); QCString baseName = writePlantUMLSource(rtfOutput,s->exampleFile(),s->text()); - m_t << "\\par{\\qc "; // center picture - writePlantUMLFile(baseName); - m_t << "} "; + writePlantUMLFile(baseName, s->hasCaption()); + visitCaption(this, s->children()); + includePicturePostRTF(true, s->hasCaption()); } break; } @@ -375,7 +386,14 @@ void RTFDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile(), &fd); + inc->exampleFile(), + &fd, // fileDef, + -1, // start line + -1, // end line + FALSE, // inline fragment + 0, // memberDef + TRUE // show line numbers + ); m_t << "\\par"; m_t << "}" << endl; } @@ -387,7 +405,14 @@ void RTFDocVisitor::visit(DocInclude *inc) Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), inc->text(),langExt,inc->isExample(), - inc->exampleFile()); + inc->exampleFile(), + 0, // fileDef + -1, // startLine + -1, // endLine + TRUE, // inlineFragment + 0, // memberDef + FALSE // show line numbers + ); m_t << "\\par"; m_t << "}" << endl; break; @@ -419,6 +444,35 @@ void RTFDocVisitor::visit(DocInclude *inc) ); m_t << "}"; break; + case DocInclude::SnipWithLines: + { + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + m_t << "{" << endl; + if (!m_lastIsPara) m_t << "\\par" << endl; + m_t << rtf_Style_Reset << getStyle("CodeExample"); + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef + TRUE // show line number + ); + m_t << "}"; + } + break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } m_lastIsPara=TRUE; } @@ -958,7 +1012,7 @@ void RTFDocVisitor::visitPre(DocHRef *href) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHRef)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { m_t << "{\\field " "{\\*\\fldinst " @@ -980,7 +1034,7 @@ void RTFDocVisitor::visitPost(DocHRef *) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHRef)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { m_t << "}" "}" @@ -1004,17 +1058,17 @@ void RTFDocVisitor::visitPre(DocHtmlHeader *header) heading.sprintf("Heading%d",level); // set style m_t << rtf_Style[heading]->reference; - // make table of contents entry - m_t << "{\\tc\\tcl \\v " << level << "}"; + // make open table of contents entry that will be closed in visitPost method + m_t << "{\\tc\\tcl" << level << " "; m_lastIsPara=FALSE; - } void RTFDocVisitor::visitPost(DocHtmlHeader *) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n"); - m_t << "\\par"; + // close open table of contens entry + m_t << "} \\par"; m_t << "}" << endl; // end section m_lastIsPara=TRUE; } @@ -1022,76 +1076,95 @@ void RTFDocVisitor::visitPost(DocHtmlHeader *) void RTFDocVisitor::visitPre(DocImage *img) { DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocImage)}\n"); - if (img->type()==DocImage::Rtf) + includePicturePreRTF(img->name(), img->type()==DocImage::Rtf, img->hasCaption()); +} + +void RTFDocVisitor::includePicturePreRTF(const QCString name, const bool isTypeRTF, const bool hasCaption) +{ + if (isTypeRTF) { m_t << "\\par" << endl; m_t << "{" << endl; m_t << rtf_Style_Reset << endl; - m_t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << img->name(); - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; + if (hasCaption || m_lastIsPara) m_t << "\\par" << endl; + m_t << "\\pard \\qc { \\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; + m_t << name; + m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt Image}}" << endl; + m_t << "\\par" << endl; + if (hasCaption) + { + m_t << "\\pard \\qc \\b"; + m_t << "{Image \\field\\flddirty{\\*\\fldinst { SEQ Image \\\\*Arabic }}{\\fldrslt {\\noproof 1}} "; + } m_lastIsPara=TRUE; } else // other format -> skip { + pushEnabled(); + m_hide=TRUE; } - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; } -void RTFDocVisitor::visitPost(DocImage *) +void RTFDocVisitor::visitPost(DocImage *img) { DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocImage)}\n"); - popEnabled(); + includePicturePostRTF(img->type()==DocImage::Rtf, img->hasCaption()); +} + +void RTFDocVisitor::includePicturePostRTF(const bool isTypeRTF, const bool hasCaption) +{ + if (isTypeRTF) + { + if (m_hide) return; + if (hasCaption) + { + m_t << "}" <<endl; + m_t << "\\par}" <<endl; + } + else + { + m_t << "}" <<endl; + } + } + else + { + popEnabled(); + } } void RTFDocVisitor::visitPre(DocDotFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDotFile)}\n"); - writeDotFile(df->file()); - - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; + writeDotFile(df); } -void RTFDocVisitor::visitPost(DocDotFile *) +void RTFDocVisitor::visitPost(DocDotFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDotFile)}\n"); - popEnabled(); + includePicturePostRTF(true, df->hasCaption()); } void RTFDocVisitor::visitPre(DocMscFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocMscFile)}\n"); - writeMscFile(df->file()); - - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; + writeMscFile(df); } -void RTFDocVisitor::visitPost(DocMscFile *) +void RTFDocVisitor::visitPost(DocMscFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocMscFile)}\n"); - popEnabled(); + includePicturePostRTF(true, df->hasCaption()); } void RTFDocVisitor::visitPre(DocDiaFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDiaFile)}\n"); - writeDiaFile(df->file()); - - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; + writeDiaFile(df); } -void RTFDocVisitor::visitPost(DocDiaFile *) +void RTFDocVisitor::visitPost(DocDiaFile *df) { DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDiaFile)}\n"); - popEnabled(); + includePicturePostRTF(true, df->hasCaption()); } void RTFDocVisitor::visitPre(DocLink *lnk) @@ -1168,7 +1241,7 @@ void RTFDocVisitor::visitPost(DocSecRefList *) //void RTFDocVisitor::visitPre(DocLanguage *l) //{ // DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLanguage)}\n"); -// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // pushEnabled(); @@ -1179,7 +1252,7 @@ void RTFDocVisitor::visitPost(DocSecRefList *) //void RTFDocVisitor::visitPost(DocLanguage *l) //{ // DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLanguage)}\n"); -// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum(OUTPUT_LANGUAGE); // if (l->id().lower()!=langId.lower()) // { // popEnabled(); @@ -1422,7 +1495,7 @@ void RTFDocVisitor::visitPre(DocXRefItem *x) m_t << "{"; // start param list //m_t << "{\\b "; // start bold m_t << "{" << rtf_Style["Heading5"]->reference << endl; - if (Config_getBool("RTF_HYPERLINKS") && !anonymousEnum) + if (Config_getBool(RTF_HYPERLINKS) && !anonymousEnum) { QCString refName; if (!x->file().isEmpty()) @@ -1608,7 +1681,7 @@ void RTFDocVisitor::filter(const char *str,bool verbatim) void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) { - if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) + if (ref.isEmpty() && Config_getBool(RTF_HYPERLINKS)) { QCString refName; if (!file.isEmpty()) @@ -1638,7 +1711,7 @@ void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCS void RTFDocVisitor::endLink(const QCString &ref) { - if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) + if (ref.isEmpty() && Config_getBool(RTF_HYPERLINKS)) { m_t << "}}}"; } @@ -1662,28 +1735,29 @@ void RTFDocVisitor::popEnabled() delete v; } -void RTFDocVisitor::writeDotFile(const QCString &fileName) +void RTFDocVisitor::writeDotFile(DocDotFile *df) { - QCString baseName=fileName; + writeDotFile(df->file(), df->hasCaption()); +} +void RTFDocVisitor::writeDotFile(const QCString &filename, const bool hasCaption) +{ + QCString baseName=filename; int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QCString outDir = Config_getString("RTF_OUTPUT"); - writeDotGraphFromFile(fileName,outDir,baseName,GOF_BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; + QCString outDir = Config_getString(RTF_OUTPUT); + writeDotGraphFromFile(filename,outDir,baseName,GOF_BITMAP); QCString imgExt = getDotImageExtension(); - m_t << baseName << "." << imgExt; - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; + includePicturePreRTF(baseName + "." + imgExt, true, hasCaption); } -void RTFDocVisitor::writeMscFile(const QCString &fileName) +void RTFDocVisitor::writeMscFile(DocMscFile *df) +{ + writeMscFile(df->file(), df->hasCaption()); +} +void RTFDocVisitor::writeMscFile(const QCString &fileName, const bool hasCaption) { QCString baseName=fileName; int i; @@ -1691,39 +1765,25 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName) { baseName=baseName.right(baseName.length()-i-1); } - QCString outDir = Config_getString("RTF_OUTPUT"); + QCString outDir = Config_getString(RTF_OUTPUT); writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << baseName << ".png"; - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; + includePicturePreRTF(baseName + ".png", true, hasCaption); } -void RTFDocVisitor::writeDiaFile(const QCString &fileName) +void RTFDocVisitor::writeDiaFile(DocDiaFile *df) { - QCString baseName=fileName; + QCString baseName=df->file(); int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QCString outDir = Config_getString("RTF_OUTPUT"); - writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << baseName << ".png"; - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; + QCString outDir = Config_getString(RTF_OUTPUT); + writeDiaGraphFromFile(df->file(),outDir,baseName,DIA_BITMAP); + includePicturePreRTF(baseName + ".png", true, df->hasCaption()); } -void RTFDocVisitor::writePlantUMLFile(const QCString &fileName) +void RTFDocVisitor::writePlantUMLFile(const QCString &fileName, const bool hasCaption) { QCString baseName=fileName; int i; @@ -1731,15 +1791,7 @@ void RTFDocVisitor::writePlantUMLFile(const QCString &fileName) { baseName=baseName.right(baseName.length()-i-1); } - QCString outDir = Config_getString("RTF_OUTPUT"); + QCString outDir = Config_getString(RTF_OUTPUT); generatePlantUMLOutput(fileName,outDir,PUML_BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << baseName << ".png"; - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; + includePicturePreRTF(baseName + ".png", true, hasCaption); } - diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h index 0e759c1..1e927e7 100644 --- a/src/rtfdocvisitor.h +++ b/src/rtfdocvisitor.h @@ -152,10 +152,14 @@ class RTFDocVisitor : public DocVisitor void pushEnabled(); void popEnabled(); - void writeDotFile(const QCString &fileName); - void writeMscFile(const QCString &fileName); - void writeDiaFile(const QCString &fileName); - void writePlantUMLFile(const QCString &fileName); + void includePicturePreRTF(const QCString name, const bool isTypeRTF, const bool hasCaption); + void includePicturePostRTF(const bool isTypeRTF, const bool hasCaption); + void writeDotFile(const QCString &fileName, const bool hasCaption); + void writeDotFile(DocDotFile *); + void writeMscFile(const QCString &fileName, const bool hasCaption); + void writeMscFile(DocMscFile *); + void writeDiaFile(DocDiaFile *); + void writePlantUMLFile(const QCString &fileName, const bool hasCaption); //-------------------------------------- // state variables diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 749f57b..5e8dbd5 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -59,14 +59,14 @@ static QCString dateToRTFDateString() RTFGenerator::RTFGenerator() : OutputGenerator() { - dir=Config_getString("RTF_OUTPUT"); + dir=Config_getString(RTF_OUTPUT); col=0; //insideTabbing=FALSE; m_listLevel = 0; m_bstartedBody = FALSE; m_omitParagraph = FALSE; m_numCols = 0; - m_prettyCode=Config_getBool("RTF_SOURCE_CODE"); + m_prettyCode=Config_getBool(RTF_SOURCE_CODE); } RTFGenerator::~RTFGenerator() @@ -165,7 +165,7 @@ void RTFGenerator::writeExtensionsFile(QFile &file) void RTFGenerator::init() { - QCString dir=Config_getString("RTF_OUTPUT"); + QCString dir=Config_getString(RTF_OUTPUT); QDir d(dir); if (!d.exists() && !d.mkdir(dir)) { @@ -186,14 +186,14 @@ void RTFGenerator::init() } // overwrite some (or all) definitions from file - QCString &rtfStyleSheetFile = Config_getString("RTF_STYLESHEET_FILE"); + QCString &rtfStyleSheetFile = Config_getString(RTF_STYLESHEET_FILE); if (!rtfStyleSheetFile.isEmpty()) { loadStylesheet(rtfStyleSheetFile, rtf_Style); } // If user has defined an extension file, load its contents. - QCString &rtfExtensionsFile = Config_getString("RTF_EXTENSIONS_FILE"); + QCString &rtfExtensionsFile = Config_getString(RTF_EXTENSIONS_FILE); if (!rtfExtensionsFile.isEmpty()) { loadExtensions(rtfExtensionsFile); @@ -250,6 +250,27 @@ void RTFGenerator::beginRTFDocument() t <<"{\\stylesheet\n"; t <<"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n"; + // set the paper dimensions according to PAPER_TYPE + QCString paperName = Config_getEnum(PAPER_TYPE); + t << "{"; + if (paperName=="a4") + { + t << "\\paperw11900\\paperh16840"; // width & height values are inches * 1440 + } + else if (paperName=="letter") + { + t << "\\paperw12240\\paperh15840"; + } + else if (paperName=="legal") + { + t << "\\paperw12240\\paperh20160"; + } + else if (paperName=="executive") + { + t << "\\paperw10440\\paperh15120"; + } + t << "\\margl1800\\margr1800\\margt1440\\margb1440\\gutter0\\ltrsect}\n"; + // sort styles ascending by \s-number via an intermediate QArray QArray<const StyleData*> array(128); array.fill(0); @@ -296,7 +317,7 @@ void RTFGenerator::beginRTFChapter() t << rtf_Style_Reset; // if we are compact, no extra page breaks... - if (Config_getBool("COMPACT_RTF")) + if (Config_getBool(COMPACT_RTF)) { // t <<"\\sect\\sectd\\sbknone\n"; t <<"\\sect\\sbknone\n"; @@ -316,7 +337,7 @@ void RTFGenerator::beginRTFSection() t << rtf_Style_Reset; // if we are compact, no extra page breaks... - if (Config_getBool("COMPACT_RTF")) + if (Config_getBool(COMPACT_RTF)) { // t <<"\\sect\\sectd\\sbknone\n"; t <<"\\sect\\sbknone\n"; @@ -538,10 +559,10 @@ void RTFGenerator::startIndexSection(IndexSections is) void RTFGenerator::endIndexSection(IndexSections is) { - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); - static QCString projectName = Config_getString("PROJECT_NAME"); + bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); + bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); + static QCString projectName = Config_getString(PROJECT_NAME); switch (is) { @@ -609,7 +630,7 @@ void RTFGenerator::endIndexSection(IndexSections is) else t << "{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par" << endl; - t << theTranslator->trVersion() << " " << Config_getString("PROJECT_NUMBER") << "\\par"; + t << theTranslator->trVersion() << " " << Config_getString(PROJECT_NUMBER) << "\\par"; t << "{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}" "{\\fldrslt "<< dateToString(FALSE) << " }}\\par"<<endl; t << "\\page\\page"; @@ -637,7 +658,7 @@ void RTFGenerator::endIndexSection(IndexSections is) t << "{\\tc \\v " << substitute(Doxygen::mainPage->title(),"%","") << "}"<< endl; } t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; - //if (Config_getBool("GENERATE_TREEVIEW")) t << "main"; else t << "index"; + //if (Config_getBool(GENERATE_TREEVIEW)) t << "main"; else t << "index"; t << "index"; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; @@ -1075,7 +1096,7 @@ void RTFGenerator::endIndexItem(const char *ref,const char *fn) void RTFGenerator::startHtmlLink(const char *url) { - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { t << "{\\field {\\*\\fldinst { HYPERLINK \""; t << url; @@ -1090,7 +1111,7 @@ void RTFGenerator::startHtmlLink(const char *url) void RTFGenerator::endHtmlLink() { - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { t << "}}}" << endl; } @@ -1113,7 +1134,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f, DBG_RTF(t << "{\\comment (writeStartAnnoItem)}" << endl) t << "{\\b "; if (path) docify(path); - if (f && Config_getBool("RTF_HYPERLINKS")) + if (f && Config_getBool(RTF_HYPERLINKS)) { t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \""; t << rtfFormatBmkStr(f); @@ -1292,7 +1313,7 @@ void RTFGenerator::endSubsubsection() // void RTFGenerator::startTextLink(const char *f,const char *anchor) { - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { QCString ref; if (f) @@ -1314,7 +1335,7 @@ void RTFGenerator::startTextLink(const char *f,const char *anchor) void RTFGenerator::endTextLink() { - if (Config_getBool("RTF_HYPERLINKS")) + if (Config_getBool(RTF_HYPERLINKS)) { t << "}}}" << endl; } @@ -1323,7 +1344,7 @@ void RTFGenerator::endTextLink() void RTFGenerator::writeObjectLink(const char *ref, const char *f, const char *anchor, const char *text) { - if (!ref && Config_getBool("RTF_HYPERLINKS")) + if (!ref && Config_getBool(RTF_HYPERLINKS)) { QCString refName; if (f) @@ -1380,7 +1401,7 @@ void RTFGenerator::writeCodeLink(const char *ref,const char *f, const char *anchor,const char *name, const char *) { - if (!ref && Config_getBool("RTF_HYPERLINKS")) + if (!ref && Config_getBool(RTF_HYPERLINKS)) { QCString refName; if (f) @@ -1435,7 +1456,7 @@ void RTFGenerator::endTitleHead(const char *fileName,const char *name) // writeAnchor(0,name); //} // - //if (Config_getBool("RTF_HYPERLINKS") && fileName) + //if (Config_getBool(RTF_HYPERLINKS) && fileName) //{ writeAnchor(fileName,0); //} @@ -1445,7 +1466,7 @@ void RTFGenerator::endTitleHead(const char *fileName,const char *name) void RTFGenerator::startTitle() { DBG_RTF(t <<"{\\comment startTitle}" << endl) - if (Config_getBool("COMPACT_RTF")) + if (Config_getBool(COMPACT_RTF)) beginRTFSection(); else beginRTFChapter(); @@ -1482,6 +1503,8 @@ void RTFGenerator::startMemberDoc(const char *clname, const char *memname, const char *, const char *, + int, + int, bool showInline) { DBG_RTF(t << "{\\comment startMemberDoc}" << endl) @@ -1803,7 +1826,7 @@ void RTFGenerator::codify(const char *str) switch(c) { - case '\t': spacesToNextTabStop = Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE")); + case '\t': spacesToNextTabStop = Config_getInt(TAB_SIZE) - (col%Config_getInt(TAB_SIZE)); t << Doxygen::spaces.left(spacesToNextTabStop); col+=spacesToNextTabStop; break; @@ -1965,7 +1988,7 @@ void RTFGenerator::endMemberList() // { // baseName=baseName.right(baseName.length()-i-1); // } -// QCString outDir = Config_getString("RTF_OUTPUT"); +// QCString outDir = Config_getString(RTF_OUTPUT); // writeDotGraphFromFile(name,outDir,baseName,BITMAP); // newParagraph(); // t << "{" << endl; @@ -1984,50 +2007,67 @@ void RTFGenerator::endMemberList() void RTFGenerator::startDescTable(const char *title) { DBG_RTF(t << "{\\comment (startDescTable) }" << endl) - startSimpleSect(EnumValues,0,0,title); - startDescForItem(); - //t << "{" << endl; - //incrementIndentLevel(); - //t << rtf_Style_Reset << rtf_CList_DepthStyle(); + t << "{\\par" << endl; + t << "{" << rtf_Style["Heading5"]->reference << endl; + docify(title); + t << ":\\par}" << endl; + t << rtf_Style_Reset << rtf_DList_DepthStyle(); + t << "\\trowd \\trgaph108\\trleft426\\tblind426" + "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 " + "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 " + "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 " + "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 " + "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 " + "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl; + int i,columnPos[2] = { 25, 100 }; + for (i=0;i<2;i++) + { + t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 " + "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 " + "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 " + "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 " + "\\cltxlrtb " + "\\cellx" << (rtf_pageWidth*columnPos[i]/100) << endl; + } + t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; } void RTFGenerator::endDescTable() { - //decrementIndentLevel(); DBG_RTF(t << "{\\comment (endDescTable)}" << endl) - endDescForItem(); - endSimpleSect(); - //t << "}" << endl; - //t << rtf_Style_Reset << styleStack.top(); + t << "}" << endl; +} + +void RTFGenerator::startDescTableRow() +{ +} + +void RTFGenerator::endDescTableRow() +{ } void RTFGenerator::startDescTableTitle() { - //t << rtf_BList_DepthStyle() << endl; DBG_RTF(t << "{\\comment (startDescTableTitle) }" << endl) - startBold(); - startEmphasis(); + t << "{\\qr "; } void RTFGenerator::endDescTableTitle() { DBG_RTF(t << "{\\comment (endDescTableTitle) }" << endl) - endEmphasis(); - endBold(); - t << " "; + t << "\\cell }"; } void RTFGenerator::startDescTableData() { DBG_RTF(t << "{\\comment (startDescTableData) }" << endl) - m_omitParagraph = FALSE; + t << "{"; } void RTFGenerator::endDescTableData() { DBG_RTF(t << "{\\comment (endDescTableData) }" << endl) - newParagraph(); - m_omitParagraph = TRUE; + t << "\\cell }{\\row }" << endl; } // a style for list formatted as a "bulleted list" @@ -2125,7 +2165,7 @@ void RTFGenerator::newParagraph() m_omitParagraph = FALSE; } -void RTFGenerator::startParagraph() +void RTFGenerator::startParagraph(const char *) { DBG_RTF(t << "{\\comment startParagraph}" << endl) newParagraph(); @@ -2445,7 +2485,7 @@ void RTFGenerator::endDotGraph(const DotClassGraph &g) newParagraph(); QCString fn = - g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE); + g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString(RTF_OUTPUT),fileName,relPath,TRUE,FALSE); // display the file t << "{" << endl; @@ -2468,7 +2508,7 @@ void RTFGenerator::endInclDepGraph(const DotInclDepGraph &g) { newParagraph(); - QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString(RTF_OUTPUT), fileName,relPath,FALSE); // display the file @@ -2499,7 +2539,7 @@ void RTFGenerator::endCallGraph(const DotCallGraph &g) { newParagraph(); - QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString(RTF_OUTPUT), fileName,relPath,FALSE); // display the file @@ -2522,7 +2562,7 @@ void RTFGenerator::endDirDepGraph(const DotDirDeps &g) { newParagraph(); - QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString("RTF_OUTPUT"), + QCString fn = g.writeGraph(t,GOF_BITMAP,EOF_Rtf,Config_getString(RTF_OUTPUT), fileName,relPath,FALSE); // display the file @@ -2904,12 +2944,20 @@ void RTFGenerator::endInlineHeader() t << "}" << endl; } -void RTFGenerator::startMemberDocSimple() +void RTFGenerator::startMemberDocSimple(bool isEnum) { DBG_RTF(t << "{\\comment (startMemberDocSimple)}" << endl) t << "{\\par" << endl; t << "{" << rtf_Style["Heading5"]->reference << endl; - t << theTranslator->trCompoundMembers() << ":\\par}" << endl; + if (isEnum) + { + t << theTranslator->trEnumerationValues(); + } + else + { + t << theTranslator->trCompoundMembers(); + } + t << ":\\par}" << endl; t << rtf_Style_Reset << rtf_DList_DepthStyle(); t << "\\trowd \\trgaph108\\trleft426\\tblind426" "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 " @@ -2918,8 +2966,14 @@ void RTFGenerator::startMemberDocSimple() "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 " "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 " "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl; - int i,columnPos[3] = { 25, 50, 100 }; - for (i=0;i<3;i++) + int i,n=3,columnPos[3] = { 25, 50, 100 }; + if (isEnum) + { + columnPos[0]=30; + columnPos[1]=100; + n=2; + } + for (i=0;i<n;i++) { t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 " "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 " @@ -2931,7 +2985,7 @@ void RTFGenerator::startMemberDocSimple() t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; } -void RTFGenerator::endMemberDocSimple() +void RTFGenerator::endMemberDocSimple(bool) { DBG_RTF(t << "{\\comment (endMemberDocSimple)}" << endl) t << "}" << endl; diff --git a/src/rtfgen.h b/src/rtfgen.h index f0f1f6e..d8f6ca7 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -62,7 +62,7 @@ class RTFGenerator : public OutputGenerator void endTitle() {} void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem(); @@ -138,7 +138,7 @@ class RTFGenerator : public OutputGenerator void startDescItem(); void endDescItem(); void lineBreak(const char *style=0); - void startMemberDoc(const char *,const char *,const char *,const char *,bool); + void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool); void endMemberDoc(bool); void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *); void endDoxyAnchor(const char *,const char *); @@ -193,6 +193,8 @@ class RTFGenerator : public OutputGenerator void startDescTable(const char *title); void endDescTable(); + void startDescTableRow(); + void endDescTableRow(); void startDescTableTitle(); void endDescTableTitle(); void startDescTableData(); @@ -242,8 +244,8 @@ class RTFGenerator : public OutputGenerator void endConstraintDocs(); void endConstraintList(); - void startMemberDocSimple(); - void endMemberDocSimple(); + void startMemberDocSimple(bool); + void endMemberDocSimple(bool); void startInlineMemberType(); void endInlineMemberType(); void startInlineMemberName(); diff --git a/src/scanner.l b/src/scanner.l index e9d5707..fe8716e 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="scannerYY" + %{ /* @@ -75,6 +77,7 @@ static int lastCSConstraint; static int lastHereDocContext; static int lastDefineContext; static int lastAlignAsContext; +static int lastC11AttributeContext; static Protection protection; static Protection baseProt; static int sharpCount = 0 ; @@ -214,7 +217,7 @@ static void initParser() autoGroupStack.setAutoDelete(TRUE); insideFormula = FALSE; insideCode=FALSE; - insideCli=Config_getBool("CPP_CLI_SUPPORT"); + insideCli=Config_getBool(CPP_CLI_SUPPORT); previous = 0; firstTypedefEntry = 0; tempEntry = 0; @@ -283,7 +286,7 @@ static void initEntry() static void lineCount() { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); const char *p; for (p = yytext ; *p ; ++p ) { @@ -306,7 +309,7 @@ static void lineCount() static inline int computeIndent(const char *s,int startIndent) { int col=startIndent; - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); const char *p=s; char c; while ((c=*p++)) @@ -668,6 +671,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) %x SkipPHPString %x SkipInits %x SkipC11Inits +%x SkipC11Attribute %x SkipCPP %x SkipCPPBlock %x SkipComment @@ -1010,7 +1014,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current->name = yytext; } <CliPropertyType>"[" { // C++/CLI indexed property - current->name += yytext; + current->args = "["; BEGIN( CliPropertyIndex ); } <CliPropertyType>"{" { @@ -1033,10 +1037,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } <CliPropertyIndex>"]" { BEGIN( CliPropertyType ); - current->name+=yytext; + current->args+=yytext; } <CliPropertyIndex>. { - current->name+=yytext; + current->args+=yytext; } /* <FindMembers>{B}*"property"{BN}+ { @@ -1975,6 +1979,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current->section=Entry::USINGDECL_SEC; } current_root->addSubEntry(current); + previous = current; current = new Entry ; initEntry(); BEGIN(Using); @@ -2027,8 +2032,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <UsingAlias>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { docBlockContext = UsingAliasEnd; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); QCString indent; indent.fill(' ',computeIndent(yytext,g_column)); docBlock=indent; @@ -2046,6 +2051,9 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN( DocBlock ); } } +<UsingAlias>">>" { + previous->args+="> >"; // see bug769552 + } <UsingAlias>. { previous->args+=yytext; } @@ -2431,6 +2439,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } else { + externC=FALSE; // see bug759247 BEGIN(FindMembers); } } @@ -2668,8 +2677,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } docBlockContext = YY_START; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); QCString indent; indent.fill(' ',computeIndent(yytext,g_column)); @@ -2698,8 +2707,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <MemberSpec,FindFields,FindMembers,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" { docBlockContext = YY_START; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); QCString indent; indent.fill(' ',computeIndent(yytext,g_column)); @@ -2731,8 +2740,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } docBlockContext = YY_START; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); QCString indent; indent.fill(' ',computeIndent(yytext,g_column)); docBlock=indent; @@ -2790,8 +2799,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) docBlockContext = YY_START; docBlockInBody = FALSE; docBlock.resize(0); - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); docBlockTerm = 0; startCommentBlock(FALSE); BEGIN(DocBlock); @@ -3393,7 +3402,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) idlProp.resize(0); current->mtype = mtype; - if (Config_getBool("IDL_PROPERTY_SUPPORT") && + if (Config_getBool(IDL_PROPERTY_SUPPORT) && current->mtype == Property) { // we are inside the properties section of a dispinterface odlProp = true; @@ -3417,6 +3426,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) { current->args += yytext ; squareCount=1; + externC=FALSE; // see bug759247 BEGIN( Array ) ; } } @@ -3432,14 +3442,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } } <IDLAttribute>"propput" { - if (Config_getBool("IDL_PROPERTY_SUPPORT")) + if (Config_getBool(IDL_PROPERTY_SUPPORT)) { current->mtype = Property; } current->spec |= Entry::Settable; } <IDLAttribute>"propget" { - if (Config_getBool("IDL_PROPERTY_SUPPORT")) + if (Config_getBool(IDL_PROPERTY_SUPPORT)) { current->mtype = Property; } @@ -3455,7 +3465,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current->spec |= Entry::Optional; } <IDLAttribute>"readonly" { // on UNO IDL attribute or property - if (Config_getBool("IDL_PROPERTY_SUPPORT") && odlProp) + if (Config_getBool(IDL_PROPERTY_SUPPORT) && odlProp) { current->spec ^= Entry::Settable; } @@ -3963,7 +3973,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) if (!msName.isEmpty() /*&& msName!=current->name*/) // skip typedef T {} T;, removed due to bug608493 { - static bool typedefHidesStruct = Config_getBool("TYPEDEF_HIDES_STRUCT"); + static bool typedefHidesStruct = Config_getBool(TYPEDEF_HIDES_STRUCT); // case 1: typedef struct _S { ... } S_t; // -> omit typedef and use S_t as the struct name if (typedefHidesStruct && @@ -4089,6 +4099,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current_root->addSubEntry( current ) ; current=new Entry; initEntry(); + language = current->lang = SrcLangExt_Cpp; // see bug746361 insideObjC=FALSE; BEGIN( FindMembers ); } @@ -4229,7 +4240,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <FuncFuncType>. { current->type += *yytext; } -<FindMembers>"("/{BN}*{ID}{BN}*"*"{BN}*{ID}*")(" { // for catching typedef void (__stdcall *f)() like definitions +<FindMembers>"("/{BN}*{ID}{BN}*"*"{BN}*{ID}*")"{BN}*"(" { // for catching typedef void (__stdcall *f)() like definitions if (current->type.left(7)=="typedef" && current->bodyLine==-1) // the bodyLine check is to prevent this guard to be true more than once { @@ -4651,6 +4662,15 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) roundCount=0; BEGIN(CopyRound); } +<FuncQual>{BN}*"&" { + current->args += " &"; + current->argList->refQualifier=RefQualifierLValue; + } +<FuncQual>{BN}*"&&" { + current->args += " &&"; + current->argList->refQualifier=RefQualifierRValue; + } + <FuncQual,TrailingReturn>{BN}*"="{BN}*"0"{BN}* { // pure virtual member function lineCount() ; current->args += " = 0"; @@ -5022,6 +5042,9 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN(SkipInits); } } +<SkipC11Attribute>"]]" { + BEGIN(lastC11AttributeContext); + } <SkipInits>"{" { // C++11 style initializer unput('{'); BEGIN( Function ); @@ -5071,8 +5094,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) docBlockContext = SkipCurlyEndDoc; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); docBlock.resize(0); docBlockTerm = '}'; if (yytext[yyleng-3]=='/') @@ -5090,8 +5113,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one docBlockContext = SkipCurlyEndDoc; docBlockInBody = FALSE; - docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) || - ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") ); + docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) || + ( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) ); docBlock.resize(0); docBlockTerm = '}'; if (yytext[yyleng-3]=='/') @@ -5125,7 +5148,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) //addToBody(yytext); BEGIN( SkipCurlyCpp ); } -<SkipCurly,SkipC11Inits,SkipInits>\n { +<SkipCurly,SkipC11Inits,SkipInits,SkipC11Attribute>\n { lineCount(); //addToBody(yytext); } @@ -5154,22 +5177,22 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) //addToBody(yytext); lineCount(); } -<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp>"/*" { +<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>"/*" { //addToBody(yytext); lastCContext = YY_START; BEGIN(SkipComment); } -<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp>"//" { +<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>"//" { //addToBody(yytext); lastCContext = YY_START; BEGIN(SkipCxxComment); } -<SkipInits,SkipC11Inits>"(" { +<SkipInits,SkipC11Inits,SkipC11Attribute>"(" { roundCount=0; lastSkipRoundContext=YY_START; BEGIN(SkipRound); } -<SkipInits,SkipC11Inits>\" { +<SkipInits,SkipC11Inits,SkipC11Attribute>\" { lastStringContext=YY_START; BEGIN( SkipString ); } @@ -5204,7 +5227,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN(SkipPHPString); } } -<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp>. { } +<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>. { } <SkipString,SkipPHPString>\\. { } <SkipString>\" { BEGIN( lastStringContext ); @@ -5310,7 +5333,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <ClassTemplSpec>">"({BN}*"::"{BN}*{SCOPENAME})? { current->name += yytext; lineCount(); - if (--sharpCount<=0) + if (roundCount==0 && --sharpCount<=0) { current->name = removeRedundantWhiteSpace(current->name); if (current->spec & Entry::Protocol) @@ -5325,8 +5348,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } } <ClassTemplSpec>"<" { - current->name += yytext; - sharpCount++; + current->name += yytext; + if (roundCount==0) sharpCount++; } <ClassTemplSpec>. { current->name += yytext; @@ -5375,6 +5398,11 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) unput(';'); current->reset(); initEntry(); + if (insideObjC) // see bug746361 + { + language = current->lang = SrcLangExt_Cpp; + insideObjC = FALSE; + } if (isTypedef) // typedef of a class, put typedef keyword back { current->type.prepend("typedef"); @@ -5720,7 +5748,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) { if (current->section==Entry::NAMESPACE_SEC) // allow reopening of anonymous namespaces { - if (Config_getBool("EXTRACT_ANON_NSPACES")) // use visible name + if (Config_getBool(EXTRACT_ANON_NSPACES)) // use visible name { current->name="anonymous_namespace{"+stripPath(current->fileName)+"}"; } @@ -5757,7 +5785,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <BasesProt>"virtual"{BN}+ { lineCount(); baseVirt = Virtual; } <BasesProt>"public"{BN}+ { lineCount(); baseProt = Public; } <BasesProt>"protected"{BN}+ { lineCount(); baseProt = Protected; } -<BasesProt>"internal"{BN}+ { lineCount(); baseProt = Package; } +<BasesProt>"internal"{BN}+ { if (!insideCli) REJECT ; lineCount(); baseProt = Package; } <BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; } <BasesProt>{BN} { lineCount(); } <BasesProt>. { unput(*yytext); BEGIN(Bases); } @@ -5999,7 +6027,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } <Comment>. { current->program += *yytext ; } -<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,SkipC11Inits,Bases,OldStyleArgs>("//"{B}*)?"/*!" { +<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,SkipC11Inits,SkipC11Attribute,Bases,OldStyleArgs>("//"{B}*)?"/*!" { //printf("Start doc block at %d\n",yyLineNr); removeSlashes=(yytext[1]=='/'); tmpDocType=-1; @@ -6020,7 +6048,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } docBlockContext = YY_START; docBlockInBody = YY_START==SkipCurly; - docBlockAutoBrief = Config_getBool("QT_AUTOBRIEF"); + docBlockAutoBrief = Config_getBool(QT_AUTOBRIEF); QCString indent; indent.fill(' ',computeIndent(yytext,g_column)); @@ -6047,7 +6075,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current->docFile = yyFileName; docBlockContext = YY_START; docBlockInBody = YY_START==SkipCurly; - static bool javadocAutoBrief = Config_getBool("JAVADOC_AUTOBRIEF"); + static bool javadocAutoBrief = Config_getBool(JAVADOC_AUTOBRIEF); docBlockAutoBrief = javadocAutoBrief; QCString indent; @@ -6202,15 +6230,21 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) /**********************************************************************************/ /* ---- Single line comments ------ */ -<DocLine>[^\n]*"\n"[ \t]*"//"[/!] { // continuation of multiline C++-style comment +<DocLine>[^\n]*"\n"[ \t]*"//"[/!][<]? { // continuation of multiline C++-style comment docBlock+=yytext; - docBlock.resize(docBlock.length() - 3); + int markerLen = yytext[yyleng-1]=='<' ? 4 : 3; + docBlock.resize(docBlock.length() - markerLen); lineCount(); } <DocLine>{B}*"///"[/]+{B}*/"\n" { // ignore marker line (see bug700345) handleCommentBlock(docBlock.data(),current->brief.isEmpty()); BEGIN( docBlockContext ); } +<DocLine>[^\n]*/"\n"{B}*"//"[!/]{B}*{CMD}"}" { // next line is an end group marker, see bug 752712 + docBlock+=yytext; + handleCommentBlock(docBlock.data(),current->brief.isEmpty()); + BEGIN( docBlockContext ); + } <DocLine>[^\n]*/"\n" { // whole line docBlock+=yytext; handleCommentBlock(docBlock.data(),current->brief.isEmpty()); @@ -6272,14 +6306,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN(DocCopyBlock); } <DocBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* { - docBlock+=yytext; + docBlock+=substitute(yytext,"*"," "); docBlockName="~~~"; g_fencedSize=yyleng; g_nestedComment=FALSE; BEGIN(DocCopyBlock); } <DocBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* { - docBlock+=yytext; + docBlock+=substitute(yytext,"*"," "); docBlockName="```"; g_fencedSize=yyleng; g_nestedComment=FALSE; @@ -6397,14 +6431,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } } <DocCopyBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* { - docBlock+=yytext; + docBlock+=substitute(yytext,"*"," "); if (g_fencedSize==yyleng) { BEGIN(DocBlock); } } <DocCopyBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* { - docBlock+=yytext; + docBlock+=substitute(yytext,"*"," "); if (g_fencedSize==yyleng) { BEGIN(DocBlock); @@ -6528,6 +6562,12 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN( lastCContext ) ; } <SkipComment>[^\*\n]+ + +"[[" { // C++11 attribute + lastC11AttributeContext = YY_START; + BEGIN( SkipC11Attribute ); + } + <*>\n { lineCount(); } <*>\" { if (insideIDL && insideCppQuote) @@ -6602,7 +6642,7 @@ static void newEntry() static void handleCommentBlock(const QCString &doc,bool brief) { - static bool hideInBodyDocs = Config_getBool("HIDE_IN_BODY_DOCS"); + static bool hideInBodyDocs = Config_getBool(HIDE_IN_BODY_DOCS); int position=0; bool needsEntry=FALSE; if (docBlockInBody && hideInBodyDocs) return; @@ -6748,7 +6788,7 @@ static void parseCompounds(Entry *rt) initEntry(); // deep copy group list from parent (see bug 727732) - static bool autoGroupNested = Config_getBool("GROUP_NESTED_COMPOUNDS"); + static bool autoGroupNested = Config_getBool(GROUP_NESTED_COMPOUNDS); if (autoGroupNested && rt->groups && ce->section!=Entry::ENUM_SEC && !(ce->spec&Entry::Enum)) { QListIterator<Grouping> gli(*rt->groups); diff --git a/src/searchindex.cpp b/src/searchindex.cpp index 9bfe7b0..18d007f 100644 --- a/src/searchindex.cpp +++ b/src/searchindex.cpp @@ -92,7 +92,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource assert(!isSourceFile || ctx->definitionType()==Definition::TypeFile); //printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor); QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase(); - url+=Config_getString("HTML_FILE_EXTENSION"); + url+=Config_getString(HTML_FILE_EXTENSION); QCString baseUrl = url; if (anchor) url+=QCString("#")+anchor; if (!isSourceFile) baseUrl=url; @@ -499,7 +499,7 @@ static QCString definitionToName(Definition *ctx) void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile) { - QCString extId = stripPath(Config_getString("EXTERNAL_SEARCH_ID")); + QCString extId = stripPath(Config_getString(EXTERNAL_SEARCH_ID)); QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase(); QCString url = baseName + Doxygen::htmlFileExtension; if (anchor) url+=QCString("#")+anchor; @@ -587,7 +587,7 @@ static SearchIndexInfo g_searchIndexInfo[NUM_SEARCH_INDICES]; static void addMemberToSearchIndex(MemberDef *md) { - static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); + static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS); bool isLinkable = md->isLinkable(); ClassDef *cd=0; NamespaceDef *nd=0; @@ -904,7 +904,7 @@ void writeJavascriptSearchIndex() { int i; // write index files - QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search"; + QCString searchDirName = Config_getString(HTML_OUTPUT)+"/search"; for (i=0;i<NUM_SEARCH_INDICES;i++) // for each index { @@ -1003,7 +1003,7 @@ void writeJavascriptSearchIndex() } ti << "',"; - static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW"); + static bool extLinksInWindow = Config_getBool(EXT_LINKS_IN_WINDOW); if (!extLinksInWindow || d->getReference().isEmpty()) { ti << "1,"; @@ -1062,7 +1062,7 @@ void writeJavascriptSearchIndex() } ti << "',"; - static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW"); + static bool extLinksInWindow = Config_getBool(EXT_LINKS_IN_WINDOW); if (!extLinksInWindow || d->getReference().isEmpty()) { ti << "1,"; @@ -1263,10 +1263,10 @@ SearchIndexList::~SearchIndexList() void SearchIndexList::append(Definition *d) { - SearchDefinitionList *l = find(d->name()); + QCString dispName = d->localName(); + SearchDefinitionList *l = find(dispName); if (l==0) { - QCString dispName = d->localName(); if (d->definitionType()==Definition::TypeGroup) { dispName = ((GroupDef*)d)->groupTitle(); @@ -1276,7 +1276,7 @@ void SearchIndexList::append(Definition *d) dispName = ((PageDef*)d)->title(); } l=new SearchDefinitionList(searchId(dispName),dispName); - SDict< SearchDefinitionList >::append(d->name(),l); + SDict< SearchDefinitionList >::append(dispName,l); } l->append(d); } @@ -1297,9 +1297,9 @@ int SearchIndexList::compareValues(const SearchDefinitionList *md1, const Search void initSearchIndexer() { - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); - static bool externalSearch = Config_getBool("EXTERNAL_SEARCH"); + static bool searchEngine = Config_getBool(SEARCHENGINE); + static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH); + static bool externalSearch = Config_getBool(EXTERNAL_SEARCH); if (searchEngine && serverBasedSearch) { if (externalSearch) // external tools produce search index and engine diff --git a/src/sortdict.h b/src/sortdict.h index f4d23f2..4db330f 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -590,7 +590,7 @@ class SIntDict /*! Returns the number of items stored in the dictionary */ - int count() + int count() const { return m_list->count(); } diff --git a/src/sqlcode.h b/src/sqlcode.h new file mode 100644 index 0000000..9c1f7e0 --- /dev/null +++ b/src/sqlcode.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * + * + * + * 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 SQLCODE_H +#define SQLCODE_H + +#include "types.h" + +class CodeOutputInterface; +class FileDef; +class MemberDef; +class QCString; +class Definition; + +extern void parseSqlCode(CodeOutputInterface &,const char *,const QCString &, + bool ,const char *,FileDef *fd, + int startLine,int endLine,bool inlineFragment, + MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx, + bool collectXRefs); +extern void resetSqlCodeParserState(); + +#endif diff --git a/src/sqlcode.l b/src/sqlcode.l new file mode 100644 index 0000000..fd0f11e --- /dev/null +++ b/src/sqlcode.l @@ -0,0 +1,434 @@ +/****************************************************************************** + * + * 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. + * + */ + +%option never-interactive +%option prefix="sqlcodeYY" + +%{ + +#include <stdio.h> + +#include "sqlcode.h" + +#include "entry.h" +#include "doxygen.h" +#include "outputlist.h" +#include "util.h" +#include "membername.h" +#include "searchindex.h" +#include "config.h" +#include "filedef.h" +#include "tooltip.h" + +#define YY_NEVER_INTERACTIVE 1 +#define YY_NO_INPUT 1 +#define YY_NO_UNISTD_H 1 + +static CodeOutputInterface * g_code; +static QCString g_curClassName; +static QCString g_parmType; +static QCString g_parmName; +static const char * g_inputString; //!< the code fragment as text +static int g_inputPosition; //!< read offset during parsing +static int g_inputLines; //!< number of line in the code fragment +static int g_yyLineNr; //!< current line number +static bool g_needsTermination; +static Definition *g_searchCtx; + +static bool g_exampleBlock; +static QCString g_exampleName; +static QCString g_exampleFile; + +static QCString g_type; +static QCString g_name; +static QCString g_args; +static QCString g_classScope; + +static QCString g_CurrScope; + +static FileDef * g_sourceFileDef; +static Definition * g_currentDefinition; +static MemberDef * g_currentMemberDef; +static bool g_includeCodeFragment; +static const char * g_currentFontClass; + +static void codify(const char* text) +{ + g_code->codify(text); +} + +static void setCurrentDoc(const QCString &anchor) +{ + if (Doxygen::searchIndex) + { + if (g_searchCtx) + { + Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE); + } + else + { + Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE); + } + } +} + +/*! start a new line of code, inserting a line number if g_sourceFileDef + * is TRUE. If a definition starts at the current line, then the line + * number is linked to the documentation of that definition. + */ +static void startCodeLine() +{ + if (g_sourceFileDef) + { + Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); + + if (!g_includeCodeFragment && d && d->isLinkableInProject()) + { + g_currentDefinition = d; + g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); + g_classScope = d->name().copy(); + QCString lineAnchor; + lineAnchor.sprintf("l%05d",g_yyLineNr); + if (g_currentMemberDef) + { + g_code->writeLineNumber(g_currentMemberDef->getReference(), + g_currentMemberDef->getOutputFileBase(), + g_currentMemberDef->anchor(),g_yyLineNr); + setCurrentDoc(lineAnchor); + } + else + { + g_code->writeLineNumber(d->getReference(), + d->getOutputFileBase(), + 0,g_yyLineNr); + setCurrentDoc(lineAnchor); + } + } + else + { + g_code->writeLineNumber(0,0,0,g_yyLineNr); + } + } + + g_code->startCodeLine(g_sourceFileDef); + + if (g_currentFontClass) + { + g_code->startFontClass(g_currentFontClass); + } +} + +static void endFontClass() +{ + if (g_currentFontClass) + { + g_code->endFontClass(); + g_currentFontClass=0; + } +} + +static void endCodeLine() +{ + endFontClass(); + g_code->endCodeLine(); +} + +static void nextCodeLine() +{ + const char *fc = g_currentFontClass; + endCodeLine(); + if (g_yyLineNr<g_inputLines) + { + g_currentFontClass = fc; + startCodeLine(); + } +} + +static void codifyLines(char *text) +{ + char *p=text,*sp=p; + char c; + bool done=FALSE; + + while (!done) + { + sp=p; + + while ((c=*p++) && c!='\n') { } + + if (c=='\n') + { + g_yyLineNr++; + *(p-1)='\0'; + g_code->codify(sp); + nextCodeLine(); + } + else + { + g_code->codify(sp); + done=TRUE; + } + } +} + +static void startFontClass(const char *s) +{ + endFontClass(); + g_code->startFontClass(s); + g_currentFontClass=s; +} + +/*! counts the number of lines in the input */ +static int countLines() +{ + const char *p=g_inputString; + char c; + int count=1; + while ((c=*p)) + { + p++ ; + if (c=='\n') count++; + } + if (p>g_inputString && *(p-1)!='\n') + { // last line does not end with a \n, so we add an extra + // line and explicitly terminate the line after parsing. + count++, + g_needsTermination=TRUE; + } + return count; +} + +#undef YY_INPUT +#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); + +static int yyread(char *buf,int max_size) +{ + int c=0; + while( c < max_size && g_inputString[g_inputPosition] ) + { + *buf = g_inputString[g_inputPosition++] ; + c++; buf++; + } + return c; +} + +%} + +nl (\r\n|\r|\n) +ws [ \t]+ +idchar [A-Za-z0-9\-_]+ +keywords1 ("ADD"|"ALL"|"ALLOCATE"|"ALTER"|"AND"|"ANY"|"ARE"|"AS"|"ASENSITIVE"|"ASYMMETRIC"|"AT"|"ATOMIC"|"AUTHORIZATION"|"BETWEEN"|"BOTH"|"BY"|"CALL"|"CALLED"|"CASCADED"|"CAST") +keywords2 ("CHECK"|"CLOSE"|"COLLATE"|"COLUMN"|"COMMIT"|"CONNECT"|"CONSTRAINT"|"CONTINUE"|"CORRESPONDING"|"CREATE"|"CROSS"|"CUBE"|"CURRENT"|"CURRENT_DATE"|"CURRENT_DEFAULT_TRANSFORM_GROUP") +keywords3 ("CURRENT_PATH"|"CURRENT_ROLE"|"CURRENT_TIME"|"CURRENT_TIMESTAMP"|"CURRENT_TRANSFORM_GROUP_FOR_TYPE"|"CURRENT_USER") +keywords4 ("CURSOR"|"CYCLE"|"DAY"|"DEALLOCATE"|"DECLARE"|"DEFAULT"|"DELETE"|"DEREF"|"DESCRIBE"|"DETERMINISTIC"|"DISCONNECT"|"DISTINCT"|"DROP"|"DYNAMIC") +keywords5 ("EACH"|"ELEMENT"|"END-EXEC"|"ESCAPE"|"EXCEPT"|"EXEC"|"EXECUTE"|"EXISTS"|"EXTERNAL"|"FETCH"|"FILTER"|"FOR"|"FOREIGN"|"FREE"|"FROM"|"FULL"|"FUNCTION") +keywords6 ("GET"|"GLOBAL"|"GRANT"|"GROUP"|"GROUPING"|"HAVING"|"HOLD"|"HOUR"|"IDENTITY"|"IMMEDIATE"|"IN"|"INDICATOR"|"INNER"|"INOUT"|"INPUT"|"INSENSITIVE"|"INSERT"|"INTERSECT") +keywords7 ("INTERVAL"|"INTO"|"IS"|"ISOLATION"|"JOIN"|"LANGUAGE"|"LARGE"|"LATERAL"|"LEADING"|"LEFT"|"LIKE"|"LOCAL"|"LOCALTIME"|"LOCALTIMESTAMP"|"MATCH"|"MEMBER"|"MERGE"|"METHOD"|"MINUTE") +keywords8 ("MODIFIES"|"MODULE"|"MONTH"|"MULTISET"|"NATIONAL"|"NATURAL"|"NEW"|"NO"|"NONE"|"NOT"|"OF"|"OLD"|"ON"|"ONLY"|"OPEN"|"OR"|"ORDER"|"OUT"|"OUTER"|"OUTPUT") +keywords9 ("OVER"|"OVERLAPS"|"PARAMETER"|"PARTITION"|"PRECISION"|"PREPARE"|"PRIMARY"|"PROCEDURE"|"RANGE"|"READS"|"RECURSIVE"|"REF"|"REFERENCES"|"REFERENCING"|"REGR_AVGX"|"REGR_AVGY") +keywords10 ("REGR_COUNT"|"REGR_INTERCEPT"|"REGR_R2"|"REGR_SLOPE"|"REGR_SXX"|"REGR_SXY"|"REGR_SYY"|"RELEASE"|"RESULT"|"RETURN"|"RETURNS"|"REVOKE"|"RIGHT"|"ROLLBACK"|"ROLLUP"|"ROW"|"ROWS"|"SAVEPOINT") +keywords11 ("SCROLL"|"SEARCH"|"SECOND"|"SELECT"|"SENSITIVE"|"SESSION_USER"|"SET"|"SIMILAR"|"SOME"|"SPECIFIC"|"SPECIFICTYPE"|"SQL"|"SQLEXCEPTION"|"SQLSTATE"|"SQLWARNING"|"START"|"STATIC") +keywords12 ("SUBMULTISET"|"SYMMETRIC"|"SYSTEM"|"SYSTEM_USER"|"TABLE"|"THEN"|"TIMEZONE_HOUR"|"TIMEZONE_MINUTE"|"TO"|"TRAILING"|"TRANSLATION"|"TREAT"|"TRIGGER"|"UESCAPE"|"UNION") +keywords13 ("UNIQUE"|"UNNEST"|"UPDATE"|"UPPER"|"USER"|"USING"|"VALUE"|"VALUES"|"VAR_POP"|"VAR_SAMP"|"VARYING"|"WHEN"|"WHENEVER"|"WHERE"|"WIDTH_BUCKET"|"WINDOW"|"WITH"|"WITHIN"|"WITHOUT"|"YEAR") + +/* Need multiple keyword definitions due to max length */ +keyword (?i:{keywords1}|{keywords2}|{keywords3}|{keywords4}|{keywords5}|{keywords6}|{keywords7}|{keywords8}|{keywords9}|{keywords10}|{keywords11}|{keywords12}|{keywords13}) + +typekeyword (?i:"ARRAY"|"BIGINT"|"BINARY"|"BLOB"|"BOOLEAN"|"CHAR"|"CHARACTER"|"CLOB"|"DATE"|"DEC"|"DECIMAL"|"DOUBLE"|"FLOAT"|"INT"|"INTEGER"|"NCHAR"|"NCLOB"|"NUMERIC"|"NVARCHAR"|"REAL"|"SMALLINT"|"TIME"|"TIMESTAMP"|"VARCHAR") + +flowkeyword (?i:"CASE"|"IF"|"ELSE"|"BEGIN"|"END"|"WHILE") + +literalkeyword (?i:"FALSE"|"TRUE"|"NULL"|"UNKNOWN") +stringliteral (\"[^"]*\")|('[^']*') +number [0-9]+ +literals ({literalkeyword}|{stringliteral}|{number}) + +variable @{idchar}+ + +simplecomment --.* +commentopen "/\*" +commentclose "\*/" + +%option noyywrap +%option nounput + +%x COMMENT + +%% + +{literals} { + startFontClass("stringliteral"); + codifyLines(yytext); + endFontClass(); + } + + +{keyword} { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } + +{flowkeyword} { + startFontClass("keywordflow"); + codifyLines(yytext); + endFontClass(); + } + +{typekeyword} { + startFontClass("keywordtype"); + codifyLines(yytext); + endFontClass(); + } + +{variable} { + startFontClass("preprocessor"); + codifyLines(yytext); + endFontClass(); + } + +{simplecomment} { + startFontClass("comment"); + codifyLines(yytext); + endFontClass(); + } + +{commentopen} { + startFontClass("comment"); + codifyLines(yytext); + BEGIN(COMMENT); + } + +<COMMENT>. { + codifyLines(yytext); + } +<COMMENT>{nl} { + codifyLines(yytext); + } + +<COMMENT>{commentclose} { + codifyLines(yytext); + endFontClass(); + BEGIN(INITIAL); + } + +{idchar} { + codifyLines(yytext); + } + +{nl} { + codifyLines(yytext); + } + +. { + codifyLines(yytext); + } + +%% + +void parseSqlCode( + CodeOutputInterface &od, + const char * /*className*/, + const QCString &s, + bool exBlock, + const char *exName, + FileDef *fd, + int startLine, + int endLine, + bool inlineFragment, + MemberDef *, + bool,Definition *searchCtx, + bool /*collectXRefs*/ + ) +{ + if (s.isEmpty()) return; + + TooltipManager::instance()->clearTooltips(); + + g_code = &od; + g_inputString = s; + g_inputPosition = 0; + g_currentFontClass = 0; + g_needsTermination = FALSE; + g_searchCtx=searchCtx; + + if (startLine!=-1) + g_yyLineNr = startLine; + else + g_yyLineNr = 1; + + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + + g_exampleBlock = exBlock; + g_exampleName = exName; + g_sourceFileDef = fd; + + bool cleanupSourceDef = FALSE; + + if (exBlock && fd==0) + { + // create a dummy filedef for the example + g_sourceFileDef = new FileDef("",(exName?exName:"generated")); + cleanupSourceDef = TRUE; + } + + if (g_sourceFileDef) + { + setCurrentDoc("l00001"); + } + + g_includeCodeFragment = inlineFragment; + // Starts line 1 on the output + startCodeLine(); + + sqlcodeYYrestart( sqlcodeYYin ); + + sqlcodeYYlex(); + + if (g_needsTermination) + { + endCodeLine(); + } + if (fd) + { + TooltipManager::instance()->writeTooltips(*g_code); + } + if (cleanupSourceDef) + { + // delete the temporary file definition used for this example + delete g_sourceFileDef; + g_sourceFileDef=0; + } + + return; +} + +void resetSqlCodeParserState() +{ + g_currentDefinition = 0; + g_currentMemberDef = 0; +} + +#if !defined(YY_FLEX_SUBMINOR_VERSION) +extern "C" { // some bogus code to keep the compiler happy + void sqlcodeYYdummy() { yy_flex_realloc(0,0); } +} +#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33 +#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." +#endif + diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp index ba72b55..6bc8789 100644 --- a/src/sqlite3gen.cpp +++ b/src/sqlite3gen.cpp @@ -60,7 +60,7 @@ const char * schema_queries[][2] = { { "innerclass", "CREATE TABLE IF NOT EXISTS innerclass (\n" "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" - "\trefid TEXT NOT NULL,\n" + "\trefid INTEGER NOT NULL,\n" "\tprot INTEGER NOT NULL,\n" "\tname TEXT NOT NULL\n" ");" @@ -92,47 +92,64 @@ const char * schema_queries[][2] = { { "memberdef", "CREATE TABLE IF NOT EXISTS memberdef (\n" "\t-- All processed identifiers.\n" - "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" - "\tid_file INTEGER NOT NULL, -- file where this identifier is located\n" - "\tline INTEGER NOT NULL, -- line where this identifier is located\n" - "\tcolumn INTEGER NOT NULL, -- column where this identifier is located\n" - "\trefid TEXT NOT NULL, -- see the refids table\n" - "\tname TEXT NOT NULL,\n" - "\tdefinition TEXT,\n" - "\ttype TEXT,\n" - "\targsstring TEXT,\n" - "\tscope TEXT,\n" - "\tinitializer TEXT,\n" - "\tprot INTEGER DEFAULT 0, -- 0:public 1:protected 2:private 3:package\n" - "\tconst INTEGER DEFAULT 0, -- 0:non-constant 1:constant\n" - "\tvirt INTEGER DEFAULT 0, -- 0:non-virtual 1:virtual 2:pure-virtual\n" - "\tstatic INTEGER DEFAULT 0, -- 0:non-static 1:static\n" - "\texplicit INTEGER DEFAULT 0,\n" - "\tinline INTEGER DEFAULT 0,\n" - "\tfinal INTEGER DEFAULT 0,\n" - "\tsealed INTEGER DEFAULT 0,\n" - "\tnew INTEGER DEFAULT 0,\n" - "\toptional INTEGER DEFAULT 0,\n" - "\trequired INTEGER DEFAULT 0,\n" - "\tmutable INTEGER DEFAULT 0,\n" - "\tinitonly INTEGER DEFAULT 0,\n" - "\treadable INTEGER DEFAULT 0,\n" - "\twritable INTEGER DEFAULT 0,\n" - "\tgettable INTEGER DEFAULT 0,\n" - "\tsettable INTEGER DEFAULT 0,\n" - "\taccessor INTEGER DEFAULT 0,\n" - "\taddable INTEGER DEFAULT 0,\n" - "\tremovable INTEGER DEFAULT 0,\n" - "\traisable INTEGER DEFAULT 0,\n" + "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" + "\trefid INTEGER NOT NULL, -- see the refids table\n" + "\tname TEXT NOT NULL,\n" + "\tdefinition TEXT,\n" + "\ttype TEXT,\n" + "\targsstring TEXT,\n" + "\tscope TEXT,\n" + "\tinitializer TEXT,\n" + "\tbitfield TEXT,\n" + "\tread TEXT,\n" + "\twrite TEXT,\n" + "\tprot INTEGER DEFAULT 0, -- 0:public 1:protected 2:private 3:package\n" + "\tstatic INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tconst INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\texplicit INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tinline INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tfinal INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tsealed INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tnew INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\toptional INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\trequired INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tvolatile INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tvirt INTEGER DEFAULT 0, -- 0:no 1:virtual 2:pure-virtual\n" + "\tmutable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tinitonly INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tattribute INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tproperty INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\treadonly INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tbound INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tconstrained INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\ttransient INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tmaybevoid INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tmaybedefault INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tmaybeambiguous INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\treadable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\twritable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tgettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tprivategettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tprotectedgettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tsettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tprivatesettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tprotectedsettable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\taccessor INTEGER DEFAULT 0, -- 0:no 1:assign 2:copy 3:retain 4:string 5:weak\n" + "\taddable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\tremovable INTEGER DEFAULT 0, -- 0:no 1:yes\n" + "\traisable INTEGER DEFAULT 0, -- 0:no 1:yes\n" /// @todo make a `kind' table - "\tkind INTEGER DEFAULT 0, -- 0:define 1:function 2:variable 3:typedef 4:enum 5:enumvalue 6:signal 7:slot 8:friend 9:DCOP 10:property 11:event\n" - "\tid_bodyfile INTEGER DEFAULT 0, -- file of definition\n" - "\tbodystart INTEGER DEFAULT 0, -- starting line of definition\n" - "\tbodyend INTEGER DEFAULT 0, -- ending line of definition\n" + "\tkind INTEGER DEFAULT 0, -- 0:define 1:function 2:variable 3:typedef 4:enum 5:enumvalue 6:signal 7:slot 8:friend 9:DCOP 10:property 11:event\n" + "\tbodystart INTEGER DEFAULT 0, -- starting line of definition\n" + "\tbodyend INTEGER DEFAULT 0, -- ending line of definition\n" + "\tid_bodyfile INTEGER DEFAULT 0, -- file of definition\n" + "\tid_file INTEGER NOT NULL, -- file where this identifier is located\n" + "\tline INTEGER NOT NULL, -- line where this identifier is located\n" + "\tcolumn INTEGER NOT NULL, -- column where this identifier is located\n" /// @todo make a `detaileddescription' table "\tdetaileddescription TEXT,\n" "\tbriefdescription TEXT,\n" - "\tinbodydescription TEXTi\n" + "\tinbodydescription TEXT\n" ");" }, { "compounddef", @@ -141,7 +158,7 @@ const char * schema_queries[][2] = { "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" "\tname TEXT NOT NULL,\n" "\tkind TEXT NOT NULL,\n" - "\trefid TEXT NOT NULL,\n" + "\trefid INTEGER NOT NULL,\n" "\tprot INTEGER NOT NULL,\n" "\tid_file INTEGER NOT NULL,\n" "\tline INTEGER NOT NULL,\n" @@ -153,7 +170,7 @@ const char * schema_queries[][2] = { "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" "\tbase TEXT NOT NULL,\n" "\tderived TEXT NOT NULL,\n" - "\trefid TEXT NOT NULL,\n" + "\trefid INTEGER NOT NULL,\n" "\tprot INTEGER NOT NULL,\n" "\tvirt INTEGER NOT NULL\n" ");" @@ -163,7 +180,7 @@ const char * schema_queries[][2] = { "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" "\tbase TEXT NOT NULL,\n" "\tderived TEXT NOT NULL,\n" - "\trefid TEXT NOT NULL,\n" + "\trefid INTEGER NOT NULL,\n" "\tprot INTEGER NOT NULL,\n" "\tvirt INTEGER NOT NULL\n" ");" @@ -175,7 +192,7 @@ const char * schema_queries[][2] = { "\tattributes TEXT,\n" "\ttype TEXT,\n" "\tdeclname TEXT,\n" - "\tdefnname TEXT,\n" + "\tdefname TEXT,\n" "\tarray TEXT,\n" "\tdefval TEXT,\n" "\tbriefdescription TEXT\n" @@ -192,7 +209,7 @@ const char * schema_queries[][2] = { { "innernamespaces", "CREATE TABLE IF NOT EXISTS innernamespaces (\n" "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" - "\trefid TEXT NOT NULL,\n" + "\trefid INTEGER NOT NULL,\n" "\tname TEXT NOT NULL\n" ");" } @@ -251,9 +268,121 @@ SqlStmt xrefs_insert= {"INSERT INTO xrefs " }; ////////////////////////////////////////////////////// SqlStmt memberdef_insert={"INSERT INTO memberdef " - "( refid, prot, static, const, explicit, inline, final, sealed, new, optional, required, virt, mutable, initonly, readable, writable, gettable, settable, accessor, addable, removable, raisable, name, type, definition, argsstring, scope, initializer, kind, id_bodyfile, bodystart, bodyend, id_file, line, column, detaileddescription, briefdescription, inbodydescription)" + "(" + "refid," + "name," + "definition," + "type," + "argsstring," + "scope," + "initializer," + "bitfield," + "read," + "write," + "prot," + "static," + "const," + "explicit," + "inline," + "final," + "sealed," + "new," + "optional," + "required," + "volatile," + "virt," + "mutable," + "initonly," + "attribute," + "property," + "readonly," + "bound," + "constrained," + "transient," + "maybevoid," + "maybedefault," + "maybeambiguous," + "readable," + "writable," + "gettable," + "protectedsettable," + "protectedgettable," + "settable," + "privatesettable," + "privategettable," + "accessor," + "addable," + "removable," + "raisable," + "kind," + "bodystart," + "bodyend," + "id_bodyfile," + "id_file," + "line," + "column," + "detaileddescription," + "briefdescription," + "inbodydescription" + ")" "VALUES " - "(:refid,:prot,:static,:const,:explicit,:inline,:final,:sealed,:new,:optional,:required,:virt,:mutable,:initonly,:readable,:writable,:gettable,:settable,:accessor,:addable,:removable,:raisable,:name,:type,:definition,:argsstring,:scope,:initializer,:kind,:id_bodyfile,:bodystart,:bodyend,:id_file,:line,:column,:detaileddescription,:briefdescription,:inbodydescription)" + "(" + ":refid," + ":name," + ":definition," + ":type," + ":argsstring," + ":scope," + ":initializer," + ":bitfield," + ":read," + ":write," + ":prot," + ":static," + ":const," + ":explicit," + ":inline," + ":final," + ":sealed," + ":new," + ":optional," + ":required," + ":volatile," + ":virt," + ":mutable," + ":initonly," + ":attribute," + ":property," + ":readonly," + ":bound," + ":constrained," + ":transient," + ":maybevoid," + ":maybedefault," + ":maybeambiguous," + ":readable," + ":writable," + ":gettable," + ":privategettable," + ":protectedgettable," + ":settable," + ":privatesettable," + ":privategettable," + ":accessor," + ":addable," + ":removable," + ":raisable," + ":kind," + ":bodystart," + ":bodyend," + ":id_bodyfile," + ":id_file," + ":line," + ":column," + ":detaileddescription," + ":briefdescription," + ":inbodydescription" + ")" ,NULL }; ////////////////////////////////////////////////////// @@ -282,16 +411,16 @@ SqlStmt params_select = { "SELECT rowid FROM params WHERE " "(attributes IS NULL OR attributes=:attributes) AND " "(type IS NULL OR type=:type) AND " "(declname IS NULL OR declname=:declname) AND " - "(defnname IS NULL OR defnname=:defnname) AND " + "(defname IS NULL OR defname=:defname) AND " "(array IS NULL OR array=:array) AND " "(defval IS NULL OR defval=:defval) AND " "(briefdescription IS NULL OR briefdescription=:briefdescription)" ,NULL }; SqlStmt params_insert = { "INSERT INTO params " - "( attributes, type, declname, defnname, array, defval, briefdescription ) " + "( attributes, type, declname, defname, array, defval, briefdescription ) " "VALUES " - "(:attributes,:type,:declname,:defnname,:array,:defval,:briefdescription)" + "(:attributes,:type,:declname,:defname,:array,:defval,:briefdescription)" ,NULL }; ////////////////////////////////////////////////////// @@ -400,11 +529,9 @@ static int insertRefid(sqlite3 *db, const char *refid) } -static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, const char *file, int line, int column) +static void insertMemberReference(sqlite3 *db, int refid_src, int refid_dst, + int id_file, int line, int column) { - int id_file = insertFile(db,file); - int refid_src = insertRefid(db,src); - int refid_dst = insertRefid(db,dst); if (id_file==-1||refid_src==-1||refid_dst==-1) return; @@ -412,26 +539,20 @@ static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, c bindIntParameter(xrefs_insert,":refid_dst",refid_dst); bindIntParameter(xrefs_insert,":id_file",id_file); bindIntParameter(xrefs_insert,":line",line); - bindIntParameter(xrefs_insert,":column",1); + bindIntParameter(xrefs_insert,":column",column); step(db,xrefs_insert); } -static void insertMemberReference(sqlite3 *db, MemberDef *src, MemberDef *dst, const char*floc) +static void insertMemberReference(sqlite3 *db, MemberDef *src, MemberDef *dst) { + QCString qrefid_dst = dst->getOutputFileBase() + "_1" + dst->anchor(); + QCString qrefid_src = src->getOutputFileBase() + "_1" + src->anchor(); if (dst->getStartBodyLine()!=-1 && dst->getBodyDef()) { - static char file[4096]; - int line=0,column=0; - if (floc) - { - int rv = sscanf(floc,"%[^:]:%d:%d",file,&line,&column); - if (rv!=3) - { - msg("unable to read file:line:col location from string [%s]\n",floc); - return; - } - } - insertMemberReference(db,src->anchor().data(),dst->anchor().data(),file,line,column); + int refid_src = insertRefid(db,qrefid_src.data()); + int refid_dst = insertRefid(db,qrefid_dst.data()); + int id_file = insertFile(db,"no-file"); // TODO: replace no-file with proper file + insertMemberReference(db,refid_src,refid_dst,id_file,dst->getStartBodyLine(),-1); } } @@ -462,7 +583,11 @@ static void insertMemberFunctionParams(sqlite3 *db,int id_memberdef,MemberDef *m QCString *s; while ((s=li.current())) { - insertMemberReference(db,md->anchor().data(),s->data(),def->getDefFileName().data(),md->getDefLine(),1); + QCString qrefid_src = md->getOutputFileBase() + "_1" + md->anchor(); + int refid_src = insertRefid(db,qrefid_src.data()); + int refid_dst = insertRefid(db,s->data()); + int id_file = insertFile(db,stripFromPath(def->getDefFileName())); + insertMemberReference(db,refid_src,refid_dst,id_file,md->getDefLine(),-1); ++li; } bindTextParameter(params_select,":type",a->type.data()); @@ -475,8 +600,8 @@ static void insertMemberFunctionParams(sqlite3 *db,int id_memberdef,MemberDef *m } if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name) { - bindTextParameter(params_select,":defnname",defArg->name.data()); - bindTextParameter(params_insert,":defnname",defArg->name.data()); + bindTextParameter(params_select,":defname",defArg->name.data()); + bindTextParameter(params_insert,":defname",defArg->name.data()); } if (!a->array.isEmpty()) { @@ -517,7 +642,7 @@ static void insertMemberDefineParams(sqlite3 *db,int id_memberdef,MemberDef *md, Argument *a; for (ali.toFirst();(a=ali.current());++ali) { - bindTextParameter(params_insert,":defnname",a->type.data()); + bindTextParameter(params_insert,":defname",a->type.data()); int id_param=step(db,params_insert,TRUE); bindIntParameter(memberdef_params_insert,":id_memberdef",id_memberdef); @@ -637,7 +762,8 @@ static void writeInnerClasses(sqlite3*db,const ClassSDict *cl) { if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes { - bindTextParameter(innerclass_insert,":refid",cd->getOutputFileBase(),FALSE); + int refid = insertRefid(db, cd->getOutputFileBase()); + bindIntParameter(innerclass_insert,":refid", refid); bindIntParameter(innerclass_insert,":prot",cd->protection()); bindTextParameter(innerclass_insert,":name",cd->name()); step(db,innerclass_insert); @@ -656,7 +782,8 @@ static void writeInnerNamespaces(sqlite3 *db,const NamespaceSDict *nl) { if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymouse scopes { - bindTextParameter(innernamespace_insert,":refid",nd->getOutputFileBase(),FALSE); + int refid = insertRefid(db, nd->getOutputFileBase()); + bindIntParameter(innernamespace_insert,":refid",refid); bindTextParameter(innernamespace_insert,":name",nd->name(),FALSE); step(db,innernamespace_insert); } @@ -686,8 +813,8 @@ static void writeTemplateArgumentList(sqlite3* db, { bindTextParameter(params_select,":declname",a->name); bindTextParameter(params_insert,":declname",a->name); - bindTextParameter(params_select,":defnname",a->name); - bindTextParameter(params_insert,":defnname",a->name); + bindTextParameter(params_select,":defname",a->name); + bindTextParameter(params_insert,":defname",a->name); } if (!a->defval.isEmpty()) { @@ -740,8 +867,12 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) // group members are only visible in their group //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; QCString memType; + // memberdef - bindTextParameter(memberdef_insert,":refid",md->anchor().data(),FALSE); + QCString qrefid = md->getOutputFileBase() + "_1" + md->anchor(); + int refid = insertRefid(db, qrefid.data()); + + bindIntParameter(memberdef_insert,":refid", refid); bindIntParameter(memberdef_insert,":kind",md->memberType()); bindIntParameter(memberdef_insert,":prot",md->protection()); @@ -767,6 +898,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) if (al!=0) { bindIntParameter(memberdef_insert,":const",al->constSpecifier); + bindIntParameter(memberdef_insert,":volatile",al->volatileSpecifier); } bindIntParameter(memberdef_insert,":explicit",md->isExplicit()); bindIntParameter(memberdef_insert,":inline",md->isInline()); @@ -778,26 +910,52 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) bindIntParameter(memberdef_insert,":virt",md->virtualness()); } - // place in the arguments and linkify the arguments if (md->memberType() == MemberType_Variable) { bindIntParameter(memberdef_insert,":mutable",md->isMutable()); bindIntParameter(memberdef_insert,":initonly",md->isInitonly()); + bindIntParameter(memberdef_insert,":attribute",md->isAttribute()); + bindIntParameter(memberdef_insert,":property",md->isProperty()); + bindIntParameter(memberdef_insert,":readonly",md->isReadonly()); + bindIntParameter(memberdef_insert,":bound",md->isBound()); + bindIntParameter(memberdef_insert,":removable",md->isRemovable()); + bindIntParameter(memberdef_insert,":constrained",md->isConstrained()); + bindIntParameter(memberdef_insert,":transient",md->isTransient()); + bindIntParameter(memberdef_insert,":maybevoid",md->isMaybeVoid()); + bindIntParameter(memberdef_insert,":maybedefault",md->isMaybeDefault()); + bindIntParameter(memberdef_insert,":maybeambiguous",md->isMaybeAmbiguous()); + if (md->bitfieldString()) + { + QCString bitfield = md->bitfieldString(); + if (bitfield.at(0)==':') bitfield=bitfield.mid(1); + bindTextParameter(memberdef_insert,":bitfield",bitfield.stripWhiteSpace()); + } } else if (md->memberType() == MemberType_Property) { bindIntParameter(memberdef_insert,":readable",md->isReadable()); bindIntParameter(memberdef_insert,":writable",md->isWritable()); bindIntParameter(memberdef_insert,":gettable",md->isGettable()); + bindIntParameter(memberdef_insert,":privategettable",md->isPrivateGettable()); + bindIntParameter(memberdef_insert,":protectedgettable",md->isProtectedGettable()); bindIntParameter(memberdef_insert,":settable",md->isSettable()); - if (md->isAssign() || md->isCopy() || md->isRetain()) + bindIntParameter(memberdef_insert,":privatesettable",md->isPrivateSettable()); + bindIntParameter(memberdef_insert,":protectedsettable",md->isProtectedSettable()); + if (md->isAssign() || md->isCopy() || md->isRetain() + || md->isStrong() || md->isWeak()) { - int accessor = md->isAssign() ? md->isAssign() : - (md->isCopy() ? md->isCopy() : md->isRetain()) ; + int accessor=0; + if (md->isAssign()) accessor = 1; + else if (md->isCopy()) accessor = 2; + else if (md->isRetain()) accessor = 3; + else if (md->isStrong()) accessor = 4; + else if (md->isWeak()) accessor = 5; bindIntParameter(memberdef_insert,":accessor",accessor); } + bindTextParameter(memberdef_insert,":read",md->getReadAccessor()); + bindTextParameter(memberdef_insert,":write",md->getWriteAccessor()); } else if (md->memberType() == MemberType_Event) { @@ -837,19 +995,6 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) bindTextParameter(memberdef_insert,":name",md->name()); - if (md->memberType() == MemberType_Property) - { - if (md->isReadable()) - { - bindIntParameter(memberdef_insert,":readable",1); - } - if (md->isWritable()) - { - bindIntParameter(memberdef_insert,":writable",1); - } - } - - // Extract references from initializer if (md->hasMultiLineInitializer() || md->hasOneLineInitializer()) { @@ -868,7 +1013,11 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) s->data(), md->getBodyDef()->getDefFileName().data(), md->getStartBodyLine())); - insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1); + QCString qrefid_src = md->getOutputFileBase() + "_1" + md->anchor(); + int refid_src = insertRefid(db,qrefid_src.data()); + int refid_dst = insertRefid(db,s->data()); + int id_file = insertFile(db,stripFromPath(md->getBodyDef()->getDefFileName())); + insertMemberReference(db,refid_src,refid_dst,id_file,md->getStartBodyLine(),-1); } ++li; } @@ -887,7 +1036,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) // File location if (md->getDefLine() != -1) { - int id_file = insertFile(db,md->getDefFileName()); + int id_file = insertFile(db,stripFromPath(md->getDefFileName())); if (id_file!=-1) { bindIntParameter(memberdef_insert,":id_file",id_file); @@ -896,7 +1045,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) if (md->getStartBodyLine()!=-1) { - int id_bodyfile = insertFile(db,md->getBodyDef()->absFilePath()); + int id_bodyfile = insertFile(db,stripFromPath(md->getBodyDef()->absFilePath())); if (id_bodyfile == -1) { sqlite3_clear_bindings(memberdef_insert.stmt); @@ -933,7 +1082,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { - insertMemberReference(db,md,rmd,mdi.currentKey()); + insertMemberReference(db,md,rmd);//,mdi.currentKey()); } } // + source referenced by @@ -944,7 +1093,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { - insertMemberReference(db,rmd,md,mdi.currentKey()); + insertMemberReference(db,rmd,md);//,mdi.currentKey()); } } } @@ -1008,9 +1157,10 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd) bindTextParameter(compounddef_insert,":name",cd->name()); bindTextParameter(compounddef_insert,":kind",cd->compoundTypeString(),FALSE); bindIntParameter(compounddef_insert,":prot",cd->protection()); - bindTextParameter(compounddef_insert,":refid",cd->getOutputFileBase(),FALSE); + int refid = insertRefid(db, cd->getOutputFileBase()); + bindIntParameter(compounddef_insert,":refid", refid); - int id_file = insertFile(db,cd->getDefFileName().data()); + int id_file = insertFile(db,stripFromPath(cd->getDefFileName())); bindIntParameter(compounddef_insert,":id_file",id_file); bindIntParameter(compounddef_insert,":line",cd->getDefLine()); bindIntParameter(compounddef_insert,":column",cd->getDefColumn()); @@ -1024,7 +1174,8 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd) BaseClassDef *bcd; for (bcli.toFirst();(bcd=bcli.current());++bcli) { - bindTextParameter(basecompoundref_insert,":refid",bcd->classDef->getOutputFileBase(),FALSE); + int refid = insertRefid(db, bcd->classDef->getOutputFileBase()); + bindIntParameter(basecompoundref_insert,":refid", refid); bindIntParameter(basecompoundref_insert,":prot",bcd->prot); bindIntParameter(basecompoundref_insert,":virt",bcd->virt); @@ -1057,7 +1208,8 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd) { bindTextParameter(derivedcompoundref_insert,":derived",bcd->classDef->displayName(),FALSE); } - bindTextParameter(derivedcompoundref_insert,":refid",bcd->classDef->getOutputFileBase(),FALSE); + int refid = insertRefid(db, bcd->classDef->getOutputFileBase()); + bindIntParameter(derivedcompoundref_insert,":refid", refid); bindIntParameter(derivedcompoundref_insert,":prot",bcd->prot); bindIntParameter(derivedcompoundref_insert,":virt",bcd->virt); step(db,derivedcompoundref_insert); @@ -1282,7 +1434,7 @@ void generateSqlite3() // + examples // + main page - QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); + QCString outputDirectory = Config_getString(OUTPUT_DIRECTORY); QDir sqlite3Dir(outputDirectory); sqlite3 *db; sqlite3_initialize(); diff --git a/src/sqlscanner.h b/src/sqlscanner.h new file mode 100644 index 0000000..7afa869 --- /dev/null +++ b/src/sqlscanner.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2015 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 SQLSCANNER_H +#define SQLSCANNER_H + +#include "parserintf.h" +#include "sqlcode.h" + +/** SQL scanner. Only support syntax highlighting of code at the moment. + */ +class SQLScanner : public ParserInterface +{ +public: + SQLScanner() {} + virtual ~SQLScanner() {} + 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, + 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 + ) + { + parseSqlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers,searchCtx,collectXRefs); + } + + void resetCodeParserState() + { + resetSqlCodeParserState(); + } + + void parsePrototype(const char *) {} + +private: +}; + +#endif diff --git a/src/tagreader.cpp b/src/tagreader.cpp index 290399a..dfa8511 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -493,14 +493,14 @@ class TagFileParser : public QXmlDefaultHandler { switch(m_state) { - case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; - case InFile: m_curFile->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; - case InNamespace: m_curNamespace->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; - case InGroup: m_curGroup->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; + case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; + case InFile: m_curFile->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; + case InNamespace: m_curNamespace->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; + case InGroup: m_curGroup->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; case InPage: m_curPage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; - case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; - case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; - case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; + case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; + case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; + case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break; default: warn("Unexpected tag `member' found\n"); break; } } diff --git a/src/tclscanner.l b/src/tclscanner.l index 5e249a6..d0d8ca0 100644 --- a/src/tclscanner.l +++ b/src/tclscanner.l @@ -15,6 +15,9 @@ * */ %option never-interactive +%option case-insensitive +%option prefix="tclscannerYY" + %{ #include <stdio.h> #include <stdlib.h> @@ -2818,24 +2821,21 @@ static void tcl_init() { // Get values from option TCL_SUBST tcl.config_subst.clear(); - if (Config::instance()->get("TCL_SUBST")) + QStrList myStrList = Config_getList(TCL_SUBST); + const char *s=myStrList.first(); + while (s) { - QStrList myStrList = Config_getList("TCL_SUBST"); - const char *s=myStrList.first(); - while (s) + QCString myStr=s; + int i=myStr.find('='); + if (i>0) { - QCString myStr=s; - int i=myStr.find('='); - if (i>0) - { - QCString myName=myStr.left(i).stripWhiteSpace(); - QCString myValue=myStr.right(myStr.length()-i-1).stripWhiteSpace(); - if (!myName.isEmpty() && !myValue.isEmpty()) -tcl_inf("TCL_SUBST: use '%s'\n",s); - tcl.config_subst[myName] = myValue; - } - s = myStrList.next(); + QCString myName=myStr.left(i).stripWhiteSpace(); + QCString myValue=myStr.right(myStr.length()-i-1).stripWhiteSpace(); + if (!myName.isEmpty() && !myValue.isEmpty()) + tcl_inf("TCL_SUBST: use '%s'\n",s); + tcl.config_subst[myName] = myValue; } + s = myStrList.next(); } if (tcl.input_string.at(tcl.input_string.length()-1) == 0x1A) @@ -2854,7 +2854,7 @@ tcl_inf("TCL_SUBST: use '%s'\n",s); tcl.code_font=NULL; tcl.code_line=1; tcl.code_linenumbers=1; - tcl.config_autobrief = Config_getBool("JAVADOC_AUTOBRIEF"); + tcl.config_autobrief = Config_getBool(JAVADOC_AUTOBRIEF); tcl.input_position = 0; tcl.file_name = NULL; tcl.this_parser = NULL; diff --git a/src/template.cpp b/src/template.cpp index 527148c..10b3e43 100644 --- a/src/template.cpp +++ b/src/template.cpp @@ -34,6 +34,7 @@ #include "message.h" #include "util.h" #include "resourcemgr.h" +#include "portable.h" #define ENABLE_TRACING 0 @@ -552,6 +553,10 @@ class TemplateContextImpl : public TemplateContext if (m_activeEscapeIntf) m_activeEscapeIntf->enableTabbing(b); } bool tabbingEnabled() const { return m_tabbingEnabled; } + bool needsRecoding() const { return !m_encoding.isEmpty(); } + QCString encoding() const { return m_encoding; } + void setEncoding(const QCString &file,int line,const QCString &enc); + QCString recode(const QCString &s); void warn(const char *fileName,int line,const char *fmt,...) const; // index related functions @@ -573,6 +578,8 @@ class TemplateContextImpl : public TemplateContext bool m_tabbingEnabled; TemplateAutoRef<TemplateStruct> m_indices; QDict< QStack<TemplateVariant> > m_indexStacks; + QCString m_encoding; + void *m_fromUtf8; }; //----------------------------------------------------------------------------- @@ -1285,6 +1292,64 @@ class FilterDivisibleBy } }; +//-------------------------------------------------------------------- + +/** @brief The implementation of the "isRelativeURL" filter */ +class FilterIsRelativeURL +{ + public: + static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &) + { + if (v.isValid() && v.type()==TemplateVariant::String) + { + QCString s = v.toString(); + if (!s.isEmpty() && s.at(0)=='!') return TRUE; + } + return FALSE; + } +}; + +//-------------------------------------------------------------------- + +/** @brief The implementation of the "isRelativeURL" filter */ +class FilterIsAbsoluteURL +{ + public: + static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &) + { + if (v.isValid() && v.type()==TemplateVariant::String) + { + QCString s = v.toString(); + if (!s.isEmpty() && s.at(0)=='^') return TRUE; + } + return FALSE; + } +}; + +//-------------------------------------------------------------------- + +/** @brief The implementation of the "decodeURL" filter + * The leading character is removed from the value in case it is a ^ or !. + * - ^ is used to encode a absolute URL + * - ! is used to encode a relative URL + */ +class FilterDecodeURL +{ + public: + static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &) + { + if (v.isValid() && v.type()==TemplateVariant::String) + { + QCString s = v.toString(); + if (!s.isEmpty() && (s.at(0)=='^' || s.at(0)=='!')) + { + return s.mid(1); + } + } + return v; + } +}; + //-------------------------------------------------------------------- @@ -1336,25 +1401,28 @@ class TemplateFilterFactory }; // register a handlers for each filter we support -static TemplateFilterFactory::AutoRegister<FilterAdd> fAdd("add"); -static TemplateFilterFactory::AutoRegister<FilterGet> fGet("get"); -static TemplateFilterFactory::AutoRegister<FilterRaw> fRaw("raw"); -static TemplateFilterFactory::AutoRegister<FilterList> fList("list"); -static TemplateFilterFactory::AutoRegister<FilterAppend> fAppend("append"); -static TemplateFilterFactory::AutoRegister<FilterLength> fLength("length"); -static TemplateFilterFactory::AutoRegister<FilterNoWrap> fNoWrap("nowrap"); -static TemplateFilterFactory::AutoRegister<FilterFlatten> fFlatten("flatten"); -static TemplateFilterFactory::AutoRegister<FilterDefault> fDefault("default"); -static TemplateFilterFactory::AutoRegister<FilterPrepend> fPrepend("prepend"); -static TemplateFilterFactory::AutoRegister<FilterGroupBy> fGroupBy("groupBy"); -static TemplateFilterFactory::AutoRegister<FilterRelative> fRelative("relative"); -static TemplateFilterFactory::AutoRegister<FilterListSort> fListSort("listsort"); -static TemplateFilterFactory::AutoRegister<FilterTexLabel> fTexLabel("texLabel"); -static TemplateFilterFactory::AutoRegister<FilterTexIndex> fTexIndex("texIndex"); -static TemplateFilterFactory::AutoRegister<FilterPaginate> fPaginate("paginate"); -static TemplateFilterFactory::AutoRegister<FilterStripPath> fStripPath("stripPath"); -static TemplateFilterFactory::AutoRegister<FilterAlphaIndex> fAlphaIndex("alphaIndex"); -static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby"); +static TemplateFilterFactory::AutoRegister<FilterAdd> fAdd("add"); +static TemplateFilterFactory::AutoRegister<FilterGet> fGet("get"); +static TemplateFilterFactory::AutoRegister<FilterRaw> fRaw("raw"); +static TemplateFilterFactory::AutoRegister<FilterList> fList("list"); +static TemplateFilterFactory::AutoRegister<FilterAppend> fAppend("append"); +static TemplateFilterFactory::AutoRegister<FilterLength> fLength("length"); +static TemplateFilterFactory::AutoRegister<FilterNoWrap> fNoWrap("nowrap"); +static TemplateFilterFactory::AutoRegister<FilterFlatten> fFlatten("flatten"); +static TemplateFilterFactory::AutoRegister<FilterDefault> fDefault("default"); +static TemplateFilterFactory::AutoRegister<FilterPrepend> fPrepend("prepend"); +static TemplateFilterFactory::AutoRegister<FilterGroupBy> fGroupBy("groupBy"); +static TemplateFilterFactory::AutoRegister<FilterRelative> fRelative("relative"); +static TemplateFilterFactory::AutoRegister<FilterListSort> fListSort("listsort"); +static TemplateFilterFactory::AutoRegister<FilterTexLabel> fTexLabel("texLabel"); +static TemplateFilterFactory::AutoRegister<FilterTexIndex> fTexIndex("texIndex"); +static TemplateFilterFactory::AutoRegister<FilterPaginate> fPaginate("paginate"); +static TemplateFilterFactory::AutoRegister<FilterStripPath> fStripPath("stripPath"); +static TemplateFilterFactory::AutoRegister<FilterDecodeURL> fDecodeURL("decodeURL"); +static TemplateFilterFactory::AutoRegister<FilterAlphaIndex> fAlphaIndex("alphaIndex"); +static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby"); +static TemplateFilterFactory::AutoRegister<FilterIsRelativeURL> fIsRelativeURL("isRelativeURL"); +static TemplateFilterFactory::AutoRegister<FilterIsAbsoluteURL> fIsAbsoluteURL("isAbsoluteURL"); //-------------------------------------------------------------------- @@ -2303,6 +2371,7 @@ TemplateContextImpl::TemplateContextImpl(const TemplateEngine *e) m_indexStacks.setAutoDelete(TRUE); m_contextStack.setAutoDelete(TRUE); m_escapeIntfDict.setAutoDelete(TRUE); + m_fromUtf8 = (void*)(-1); push(); set("index",m_indices.get()); } @@ -2312,6 +2381,49 @@ TemplateContextImpl::~TemplateContextImpl() pop(); } +void TemplateContextImpl::setEncoding(const QCString &templateName,int line,const QCString &enc) +{ + if (enc==m_encoding) return; // nothing changed + if (m_fromUtf8!=(void *)(-1)) + { + portable_iconv_close(m_fromUtf8); + m_fromUtf8 = (void*)(-1); + } + m_encoding=enc; + if (!enc.isEmpty()) + { + m_fromUtf8 = portable_iconv_open(enc,"UTF-8"); + if (m_fromUtf8==(void*)(-1)) + { + warn(templateName,line,"unsupported character conversion: '%s'->'UTF-8'\n", enc.data()); + } + } + //printf("TemplateContextImpl::setEncoding(%s)\n",enc.data()); +} + +QCString TemplateContextImpl::recode(const QCString &s) +{ + //printf("TemplateContextImpl::recode(%s)\n",s.data()); + int iSize = s.length(); + int oSize = iSize*4+1; + QCString output(oSize); + size_t iLeft = iSize; + size_t oLeft = oSize; + char *iPtr = s.rawData(); + char *oPtr = output.rawData(); + if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft)) + { + oSize -= (int)oLeft; + output.resize(oSize+1); + output.at(oSize)='\0'; + return output; + } + else + { + return s; + } +} + void TemplateContextImpl::set(const char *name,const TemplateVariant &v) { TemplateVariant *pv = m_contextStack.getFirst()->find(name); @@ -2439,7 +2551,7 @@ void TemplateContextImpl::warn(const char *fileName,int line,const char *fmt,... void TemplateContextImpl::openSubIndex(const QCString &indexName) { - printf("TemplateContextImpl::openSubIndex(%s)\n",indexName.data()); + //printf("TemplateContextImpl::openSubIndex(%s)\n",indexName.data()); QStack<TemplateVariant> *stack = m_indexStacks.find(indexName); if (!stack || stack->isEmpty() || stack->top()->type()==TemplateVariant::List) // error: no stack yet or no entry { @@ -2460,7 +2572,7 @@ void TemplateContextImpl::openSubIndex(const QCString &indexName) void TemplateContextImpl::closeSubIndex(const QCString &indexName) { - printf("TemplateContextImpl::closeSubIndex(%s)\n",indexName.data()); + //printf("TemplateContextImpl::closeSubIndex(%s)\n",indexName.data()); QStack<TemplateVariant> *stack = m_indexStacks.find(indexName); if (!stack || stack->count()<3) { @@ -2586,16 +2698,30 @@ class TemplateNodeText : public TemplateNode void render(FTextStream &ts, TemplateContext *c) { - //printf("TemplateNodeText::render(%s)\n",m_data.data()); TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c); if (ci==0) return; // should not happen + //printf("TemplateNodeText::render(%s) needsRecoding=%d ci=%p\n",m_data.data(),ci->needsRecoding(),ci); if (ci->spacelessEnabled()) { - ts << ci->spacelessIntf()->remove(m_data); + if (ci->needsRecoding()) + { + ts << ci->recode(ci->spacelessIntf()->remove(m_data)); + } + else + { + ts << ci->spacelessIntf()->remove(m_data); + } } else { - ts << m_data; + if (ci->needsRecoding()) + { + ts << ci->recode(m_data); + } + else + { + ts << m_data; + } } } private: @@ -2638,11 +2764,25 @@ class TemplateNodeVariable : public TemplateNode } if (ci->escapeIntf() && !v.raw()) { - ts << ci->escapeIntf()->escape(v.toString()); + if (ci->needsRecoding()) + { + ts << ci->recode(ci->escapeIntf()->escape(v.toString())); + } + else + { + ts << ci->escapeIntf()->escape(v.toString()); + } } else { - ts << v.toString(); + if (ci->needsRecoding()) + { + ts << ci->recode(v.toString()); + } + else + { + ts << v.toString(); + } } } } @@ -2791,7 +2931,7 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf> if (guardValue.toBool()) // render nodes for the first guard that evaluated to 'true' { nodes->trueNodes.render(ts,c); - processed=TRUE; + processed=TRUE; } } else @@ -3961,11 +4101,25 @@ class TemplateNodeCycle : public TemplateNodeCreator<TemplateNodeCycle> } if (ci->escapeIntf() && !v.raw()) { - ts << ci->escapeIntf()->escape(v.toString()); + if (ci->needsRecoding()) + { + ts << ci->recode(ci->escapeIntf()->escape(v.toString())); + } + else + { + ts << ci->escapeIntf()->escape(v.toString()); + } } else { - ts << v.toString(); + if (ci->needsRecoding()) + { + ts << ci->recode(v.toString()); + } + else + { + ts << v.toString(); + } } } if (++m_index==m_args.count()) // wrap around @@ -4109,7 +4263,14 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers> int index=0,newIndex,matchLen; while ((newIndex=marker.match(str,index,&matchLen))!=-1) { - ts << str.mid(index,newIndex-index); // write text before marker + if (ci->needsRecoding()) + { + ts << ci->recode(str.mid(index,newIndex-index)); // write text before marker + } + else + { + ts << str.mid(index,newIndex-index); // write text before marker + } bool ok; uint entryIndex = str.mid(newIndex+1,matchLen-1).toUInt(&ok); // get marker id TemplateVariant var; @@ -4137,7 +4298,14 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers> } index=newIndex+matchLen; // set index just after marker } - ts << str.right(str.length()-index); // write text after last marker + if (ci->needsRecoding()) + { + ts << ci->recode(str.right(str.length()-index)); // write text after last marker + } + else + { + ts << str.right(str.length()-index); // write text after last marker + } c->pop(); delete it; } @@ -4244,8 +4412,7 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource> QCString targetFile = m_asExpr->resolve(c).toString(); mkpath(ci,targetFile); if (targetFile.isEmpty()) - { - ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n"); + { ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n"); } else { @@ -4266,6 +4433,59 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource> //---------------------------------------------------------- +/** @brief Class representing the 'encoding' tag in a template */ +class TemplateNodeEncoding : public TemplateNodeCreator<TemplateNodeEncoding> +{ + public: + TemplateNodeEncoding(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data) + : TemplateNodeCreator<TemplateNodeEncoding>(parser,parent,line) + { + TRACE(("{TemplateNodeEncoding(%s)\n",data.data())); + ExpressionParser ep(parser,line); + if (data.isEmpty()) + { + parser->warn(m_templateName,line,"encoding tag is missing encoding argument"); + m_encExpr = 0; + } + else + { + m_encExpr = ep.parse(data); + } + QStrList stopAt; + stopAt.append("endencoding"); + parser->parse(this,line,stopAt,m_nodes); + parser->removeNextToken(); // skip over endencoding + TRACE(("}TemplateNodeEncoding(%s)\n",data.data())); + } + ~TemplateNodeEncoding() + { + delete m_encExpr; + } + void render(FTextStream &ts, TemplateContext *c) + { + TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c); + if (ci==0) return; // should not happen + ci->setLocation(m_templateName,m_line); + QCString encStr; + if (m_encExpr) + { + encStr = m_encExpr->resolve(c).toString(); + } + QCString oldEncStr = ci->encoding(); + if (!encStr.isEmpty()) + { + ci->setEncoding(m_templateName,m_line,encStr); + } + m_nodes.render(ts,c); + ci->setEncoding(m_templateName,m_line,oldEncStr); + } + private: + ExprAst *m_encExpr; + TemplateNodeList m_nodes; +}; + +//---------------------------------------------------------- + /** @brief Factory class for creating tag AST nodes found in a template */ class TemplateNodeFactory { @@ -4328,6 +4548,7 @@ static TemplateNodeFactory::AutoRegister<TemplateNodeInclude> autoRefInclu static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers> autoRefMarkers("markers"); static TemplateNodeFactory::AutoRegister<TemplateNodeTabbing> autoRefTabbing("tabbing"); static TemplateNodeFactory::AutoRegister<TemplateNodeResource> autoRefResource("resource"); +static TemplateNodeFactory::AutoRegister<TemplateNodeEncoding> autoRefEncoding("encoding"); static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless"); static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry"); static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex"); @@ -4715,7 +4936,8 @@ void TemplateParser::parse( command=="endrecursetree" || command=="endspaceless" || command=="endmarkers" || command=="endmsg" || command=="endrepeat" || command=="elif" || - command=="endrange" || command=="endtabbing") + command=="endrange" || command=="endtabbing" || + command=="endencoding") { warn(m_templateName,tok->line,"Found tag '%s' without matching start tag",command.data()); } @@ -4866,8 +5088,23 @@ class TemplateEngine::Private //printf("loadByName(%s,%d) {\n",fileName.data(),line); m_includeStack.append(new IncludeEntry(IncludeEntry::Template,fileName,QCString(),line)); Template *templ = m_templateCache.find(fileName); - if (templ==0) + if (templ==0) // first time template is referenced { + QCString filePath = m_templateDirName+"/"+fileName; + QFile f(filePath); + if (f.open(IO_ReadOnly)) + { + QFileInfo fi(filePath); + int size=fi.size(); + QCString data(size+1); + if (f.readBlock(data.rawData(),size)==size) + { + templ = new TemplateImpl(m_engine,filePath,data,m_extension); + m_templateCache.insert(fileName,templ); + return templ; + } + } + // fallback to default built-in template const QCString data = ResourceMgr::instance().getAsString(fileName); if (!data.isEmpty()) { @@ -4940,12 +5177,18 @@ class TemplateEngine::Private return m_extension; } + void setTemplateDir(const char *dirName) + { + m_templateDirName = dirName; + } + private: QDict<Template> m_templateCache; //mutable int m_indent; TemplateEngine *m_engine; QList<IncludeEntry> m_includeStack; QCString m_extension; + QCString m_templateDirName; }; TemplateEngine::TemplateEngine() @@ -5003,5 +5246,9 @@ QCString TemplateEngine::outputExtension() const return p->outputExtension(); } +void TemplateEngine::setTemplateDir(const char *dirName) +{ + p->setTemplateDir(dirName); +} diff --git a/src/template.h b/src/template.h index 7d6e2ff..98ae7ed 100644 --- a/src/template.h +++ b/src/template.h @@ -590,6 +590,9 @@ class TemplateEngine /** Prints the current template file include stack */ void printIncludeContext(const char *fileName,int line) const; + /** Sets the search directory where to look for template files */ + void setTemplateDir(const char *dirName); + private: friend class TemplateNodeBlock; friend class TemplateNodeCreate; diff --git a/src/tooltip.cpp b/src/tooltip.cpp index 957c661..3b128a9 100644 --- a/src/tooltip.cpp +++ b/src/tooltip.cpp @@ -70,7 +70,7 @@ static QCString escapeId(const char *s) void TooltipManager::addTooltip(Definition *d) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); if (!sourceTooltips) return; QCString id = d->getOutputFileBase(); int i=id.findRev('/'); diff --git a/src/translator_am.h b/src/translator_am.h index b50aec2..9e72529 100644 --- a/src/translator_am.h +++ b/src/translator_am.h @@ -65,7 +65,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Դաշտեր";
}
@@ -139,7 +139,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածք";
}
@@ -156,7 +156,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների դաշտեր";
}
@@ -170,7 +170,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*??*/
virtual QCString trFileMembers()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Գլոբալներ";
}
@@ -210,7 +210,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*! This is an introduction to the annotated compound list. */
virtual QCString trCompoundListDescription()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածքը` կարճ բացատրություններով.";
}
@@ -226,7 +226,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 {
QCString result="Բոլոր ";
if(!extractAll) result+="փաստագրված ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
result+="կառուցվածքների և միավորումների դաշտերի ";
else
result+="դասի անդամների ";
@@ -234,14 +234,14 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 result+=" հղումներով դեպի ";
if(!extractAll)
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
result+="կառուցվածք/միավորում փաստագրությունները բոլոր անդամների համար.";
else
result+="դասի փաստագրությունը բոլոր անդամների համար.";
}
else
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
result += "կառուցվածքները/միավորումները, որոնց նրանք պատկանում են.";
else
result += "դասերը, որոնց նրանք պատկանում են.";
@@ -255,7 +255,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 QCString result="Բոլոր ";
if (!extractAll) result+="փաստագրված ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
result+="ֆունկցիաների, փոփոխականների, մակրո-հայտարարությունների, "
"համարակալումների և տիպի սահմանումների (typedef)";
@@ -309,7 +309,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 */
virtual QCString trCompoundIndex()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածք";
}
@@ -336,7 +336,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 */
virtual QCString trClassDocumentation()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածքներ";
}
@@ -439,7 +439,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 */
virtual QCString trCompounds()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածք";
}
@@ -865,7 +865,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 }
virtual QCString trPublicAttribs()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների դաշտեր";
}
@@ -1062,7 +1062,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
return "Տվյալների կառուցվածք";
}
@@ -1137,7 +1137,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 */
virtual QCString trClass(bool first_capital, bool singular)
{
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
{
QCString result((first_capital ? "Տվյալների կառուցվածք" : "տվյալների կառուցվածք"));
return result;
diff --git a/src/translator_ar.h b/src/translator_ar.h index 5daaa4c..24281fd 100644 --- a/src/translator_ar.h +++ b/src/translator_ar.h @@ -97,7 +97,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "توثيق الحقل"; } @@ -164,7 +164,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "هياكل البيانات"; } @@ -185,7 +185,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "حقول البيانات"; } @@ -198,7 +198,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "العوام"; } @@ -239,7 +239,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "هذه هي هياكل البيانات مع وصف مختصر:"; } @@ -255,7 +255,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 { QCString result="هذه قائمة بكل "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="حقول البناءات والإتحادات"; } @@ -270,7 +270,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 result+=" مع وصلات إلى "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="توثيق البناء/الإتحاد لكل حقل:"; } @@ -281,7 +281,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="البناءات/الإتحادات التي ينتمون إليها:"; } @@ -299,7 +299,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 QCString result="Here is a list of all "; if (!extractAll) result+="documented "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="functions, variables, defines, enums, and typedefs"; } @@ -361,7 +361,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "فهرس هيكل البيانات"; } @@ -388,7 +388,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "فهرس هيكل البيانات"; } @@ -497,7 +497,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "هياكل البيانات"; } @@ -917,7 +917,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "حقول بيانات"; } @@ -1118,7 +1118,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "هياكل البيانات"; } diff --git a/src/translator_br.h b/src/translator_br.h index f9fe664..a294ee0 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2015 by Dimitri van Heesch. + * Copyright (C) 1997-2017 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 @@ -11,10 +11,17 @@ * input used in their production; they are not affected by this license. * * Brazilian Portuguese translation version 20100531 - * Maintainer: Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> + * Maintainer: + * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> + * Collaborators: + * Emerson Ferreira <nuskorpios at gmail dot com> * Thanks to Jorge Ramos, Fernando Carijo and others for their contributions. * * History: + * 20170123: + * - Full translation revision; + * - trLegendDocs() is now synchronized with the English version; + * - Merging most of the suggestions sent by Emerson Ferreira; * 20131129: * - Updated to 1.8.5; * - Translation in the method trFileMembers() fixed; @@ -44,22 +51,30 @@ class TranslatorBrazilian : public Translator // --- Language control methods ------------------- - /*! Used for identification of the language. May resemble - * the string returned by latexBabelPackage(), but it is not used - * for the same purpose. The identification should not be translated. - * It should be replaced by the name of the language in English - * (e.g. Czech, Japanese, Russian, etc.). It should be equal to - * the identification in language.h. + /*! Used for identification of the language. The identification + * should not be translated. It should be replaced by the name + * of the language in English using lower-case characters only + * (e.g. "czech", "japanese", "russian", etc.). It should be equal to + * the identification used in language.cpp. */ virtual QCString idLanguage() { return "brazilian"; } - /*! Used to get the command(s) for the language support. This method - * was designed for languages which do not prefer babel package. - * If this methods returns empty string, then the latexBabelPackage() - * method is used to generate the command for using the babel package. + /*! Used to get the LaTeX command(s) for the language support. + * This method should return string with commands that switch + * LaTeX to the desired language. For example + * <pre>"\\usepackage[german]{babel}\n" + * </pre> + * or + * <pre>"\\usepackage{polski}\n" + * "\\usepackage[latin2]{inputenc}\n" + * "\\usepackage[T1]{fontenc}\n" + * </pre> + * + * The English LaTeX does not use such commands. Because of this + * the empty string is returned in this implementation. */ virtual QCString latexLanguageSupportCommand() { @@ -78,11 +93,11 @@ class TranslatorBrazilian : public Translator /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "Descrição Detalhada"; } + { return "Descrição detalhada"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "Definições de Tipos"; } + { return "Definições de tipos"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() @@ -90,12 +105,21 @@ class TranslatorBrazilian : public Translator /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return "Métodos"; } + { + if (Config_getBool(OPTIMIZE_OUTPUT_JAVA)) + { + return "Métodos"; + } + else + { + return "Funções membros"; + } + } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos"; } @@ -131,17 +155,17 @@ class TranslatorBrazilian : public Translator virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Gerado automaticamente por Doxygen"; if (s) result+=(QCString)" para "+s; - result+=" a partir de seu código-fonte."; + result+=" a partir do código-fonte."; return result; } /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { return "[Enumeração]"; } + { return "Enumeração"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "[Valor enumerado]"; } + { return "Valor da enumeração"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() @@ -162,13 +186,13 @@ class TranslatorBrazilian : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de Dados"; } else { - return "Lista de Componentes"; + return "Lista de Classes"; } } @@ -179,22 +203,22 @@ class TranslatorBrazilian : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de Dados"; } else { - return "Componentes Membros"; + return "Membros de classe"; } } /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "Globais"; + return "Ítens globais"; } else { @@ -230,8 +254,7 @@ class TranslatorBrazilian : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Aqui estão as estruturas de dados, uniões e suas respectivas descrições:"; } @@ -246,12 +269,12 @@ class TranslatorBrazilian : public Translator { QCString result="Esta é a lista de "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="todas as estruturas e campos de uniões "; if (!extractAll) { - result+="documentas"; + result+="documentados"; } } else @@ -259,13 +282,13 @@ class TranslatorBrazilian : public Translator result+="todos os membros de classes "; if (!extractAll) { - result+="documentos"; + result+="documentados"; } } result+=" com referências para "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="a documentação da estrutura/união de cada campo:"; } @@ -276,7 +299,7 @@ class TranslatorBrazilian : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="a estrutura/união a que pertencem:"; } @@ -292,7 +315,7 @@ class TranslatorBrazilian : public Translator virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Esta é a lista de "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="todas as funções, variáveis, definições, enumerações e definições de tipos "; if (!extractAll) result+="documentadas "; @@ -312,19 +335,24 @@ class TranslatorBrazilian : public Translator /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { return "Esta é a lista com todos os exemplos:"; } + { return "Esta é a lista de todos os exemplos:"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Esta é a lista com toda a documentação relacionadas:"; } + { return "Esta é a lista de toda a documentação relacionadas:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "Esta é a lista com todos os módulos:"; } + { return "Esta é a lista de todos os módulos:"; } /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() - { return "\nDocumentação"; } + { + // TODO In the future, I think I'll suggest the replacement of this + // method to something like trDocumentationOf(projPrefix). This will allow + // the latin construction "Documentação de ProjA" + return "Documentação"; + } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. @@ -343,7 +371,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Índice das Estruturas de Dados"; } @@ -370,7 +398,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas"; } @@ -436,7 +464,7 @@ class TranslatorBrazilian : public Translator * list of (global) variables */ virtual QCString trEnumerationValues() - { return "Valores de enumerações"; } + { return "Enumeradores"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines @@ -473,7 +501,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de Dados"; } @@ -497,7 +525,7 @@ class TranslatorBrazilian : public Translator /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { - return (QCString)"Diagrama de Hierarquia para "+clName+":"; + return (QCString)"Diagrama de hierarquia para "+clName+":"; } /*! this text is generated when the \\internal command is used. */ @@ -578,17 +606,25 @@ class TranslatorBrazilian : public Translator ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Referência da"; - if (isTemplate) result+=" Template de"; + QCString result="Referência"; + if (isTemplate) result+=" do <em>Template</em>"; + if (compType == ClassDef::Protocol) + { + result+=" do "; + } + else + { + result+=" da "; + } switch(compType) { - case ClassDef::Class: result+=" Classe "; break; - case ClassDef::Struct: result+=" Estrutura "; break; - case ClassDef::Union: result+=" União "; break; - case ClassDef::Interface: result+=" Interface "; break; - case ClassDef::Protocol: result+=" Protocolo "; break; - case ClassDef::Category: result+=" Categoria "; break; - case ClassDef::Exception: result+=" Exceção "; break; + case ClassDef::Class: result+="Classe "; break; + case ClassDef::Struct: result+="Estrutura "; break; + case ClassDef::Union: result+="União "; break; + case ClassDef::Interface: result+="Interface "; break; + case ClassDef::Protocol: result+="Protocolo "; break; + case ClassDef::Category: result+="Categoria "; break; + case ClassDef::Exception: result+="Exceção "; break; default: break; } result+=(QCString)clName; @@ -612,25 +648,43 @@ class TranslatorBrazilian : public Translator } virtual QCString trPublicMembers() - { return "Métodos Públicos"; } + { + if (Config_getBool(OPTIMIZE_OUTPUT_JAVA)) + { + return "Métodos Públicos"; + } + else + { + return "Membros Públicos"; + } + } + virtual QCString trPublicSlots() { return "Slots Públicos"; } + virtual QCString trSignals() { return "Sinais"; } + virtual QCString trStaticPublicMembers() - { return "Métodos Públicos Estáticos"; } + { return "Membros Públicos Estáticos"; } + virtual QCString trProtectedMembers() - { return "Métodos Protegidos"; } + { return "Membros Protegidos"; } + virtual QCString trProtectedSlots() { return "Slots Protegidos"; } + virtual QCString trStaticProtectedMembers() - { return "Métodos Protegidos Estáticos"; } + { return "Membros Protegidos Estáticos"; } + virtual QCString trPrivateMembers() - { return "Métodos Privados"; } + { return "Membros Privados"; } + virtual QCString trPrivateSlots() { return "Slots Privados"; } + virtual QCString trStaticPrivateMembers() - { return "Métodos Privados Estáticos"; } + { return "Membros Privados Estáticos"; } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -662,7 +716,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trInheritsList(int numEntries) { - return "Herdeiro de " + trWriteList(numEntries) + "."; + return "Subclasse de " + trWriteList(numEntries) + "."; } /*! used in class documentation to produce a list of super classes, @@ -678,7 +732,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trReimplementedFromList(int numEntries) { - return "Reimplementação de "+trWriteList(numEntries)+"."; + return "Reimplementa "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -691,31 +745,31 @@ class TranslatorBrazilian : public Translator /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() - { return "Membros do Namespace"; } + { return "Membros do <em>Namespace</em>"; } /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Esta é a lista com todos os membros do Namespace "; + QCString result="Essa é a lista com todos os membros "; if (!extractAll) result+="documentados "; - result+="com referências para "; + result+="do <em>Namespace</em> com referências para "; if (extractAll) - result+="a documentação de seus respectivos Namespaces:"; + result+="a documentação do <em>Namespace</em> para cada membro:"; else - result+="os seus respectivos namespaces:"; + result+="os seus respectivos <em>Namespaces</em>:"; return result; } /*! This is used in LaTeX as the title of the chapter with the * index of all namespaces. */ virtual QCString trNamespaceIndex() - { return "Namespaces"; } + { return "<em>Namespaces</em>"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ virtual QCString trNamespaceDocumentation() - { return "Namespaces"; } + { return "<em>Namespace</em>"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -725,7 +779,7 @@ class TranslatorBrazilian : public Translator * namespaces in a file. */ virtual QCString trNamespaces() - { return "Namespaces"; } + { return "<em>Namespaces</em>"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990728 @@ -738,7 +792,15 @@ class TranslatorBrazilian : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"A documentação para esta "; + QCString result=(QCString)"A documentação para "; + if (compType == ClassDef::Protocol) + { + result+= "esse "; + } + else + { + result+= "essa "; + } switch(compType) { case ClassDef::Class: result+="classe "; break; @@ -772,7 +834,10 @@ class TranslatorBrazilian : public Translator * documentation. It should be an abbreviation of the word page. */ virtual QCString trPageAbbreviation() - { return "pag."; } + { + // Decidi mudar de página para "p." para ficar mais compacto. + return "p."; + } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991003 @@ -793,11 +858,7 @@ class TranslatorBrazilian : public Translator virtual QCString trDeprecated() { - /* - * This note is for brazilians only. - * Esta é uma boa tradução para "deprecated"? - */ - return "Descontinuado(a)"; + return "Obsoleto(a)"; } ////////////////////////////////////////////////////////////////////////// @@ -817,27 +878,27 @@ class TranslatorBrazilian : public Translator /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "Construtores & Destrutores"; + return "Construtores e Destrutores"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "Vá para o código-fonte deste arquivo."; + return "Vá para o código-fonte desse arquivo."; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Vá para a documentação deste arquivo."; + return "Vá para a documentação desse arquivo."; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Pré-Condição"; + return "Pré-condição"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Pós-Condição"; + return "Pós-condição"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() @@ -847,7 +908,7 @@ class TranslatorBrazilian : public Translator /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { - return "Valor Inicial:"; + return "Valor inicial:"; } /*! Text used the source code in the file index */ virtual QCString trCode() @@ -860,11 +921,11 @@ class TranslatorBrazilian : public Translator } virtual QCString trGotoGraphicalHierarchy() { - return "Vá para o Gráfico de Hierarquia de Classes"; + return "Vá para o gráfico de hierarquia de classes"; } virtual QCString trGotoTextualHierarchy() { - return "Vá para a Hierarquia de Classes (texto)"; + return "Vá para a hierarquia de classes (texto)"; } virtual QCString trPageIndex() { @@ -885,7 +946,7 @@ class TranslatorBrazilian : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de Dados"; } @@ -930,12 +991,12 @@ class TranslatorBrazilian : public Translator /*! Used as a marker that is put before a todo item */ virtual QCString trTodo() { - return "Futuras Atividades"; + return "Atividades futuras"; } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Lista de Futuras Atividades"; + return "Lista de atividades futuras"; } ////////////////////////////////////////////////////////////////////////// @@ -944,7 +1005,7 @@ class TranslatorBrazilian : public Translator virtual QCString trReferencedBy() { - return "Referenciado por"; + return "Referenciado(a) por"; } virtual QCString trRemarks() { @@ -956,7 +1017,7 @@ class TranslatorBrazilian : public Translator } virtual QCString trInclByDepGraph() { - return "Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com este arquivo:"; + return "Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com esse arquivo:"; } virtual QCString trSince() { @@ -972,30 +1033,32 @@ class TranslatorBrazilian : public Translator { return "Legenda do Grafo"; } - /*! page explaining how the dot graph's should be interpreted */ + /*! page explaining how the dot graph's should be interpreted + * The %A in the text below are to prevent link to classes called "A". + */ virtual QCString trLegendDocs() { return "Esta página explica como interpretar os grafos gerados pelo doxygen.<p>\n" "Considere o seguinte exemplo:\n" "\\code\n" - "/*! Invisible class because of truncation */\n" + "/*! Classe oculta por causa da truncagem */\n" "class Invisible { };\n\n" - "/*! Truncated class, inheritance relation is hidden */\n" + "/*! Classe Truncated, relação de herança está oculta */\n" "class Truncated : public Invisible { };\n\n" - "/* Class not documented with doxygen comments */\n" + "/* Classe não documentada com os comentários do Doxygen */\n" "class Undocumented { };\n\n" - "/*! Class that is inherited using public inheritance */\n" + "/*! Classe possui que possui uma relação de herança pública */\n" "class PublicBase : public Truncated { };\n\n" - "/*! A template class */\n" + "/*! Um template de classe */\n" "template<class T> class Templ { };\n\n" - "/*! Class that is inherited using protected inheritance */\n" + "/*! Classe possui que possui uma relação de herança protegida */\n" "class ProtectedBase { };\n\n" - "/*! Class that is inherited using private inheritance */\n" + "/*! Classe possui que possui uma relação de herança privada */\n" "class PrivateBase { };\n\n" - "/*! Class that is used by the Inherited class */\n" + "/*! Classe utilizada pela classe Inherited */\n" "class Used { };\n\n" - "/*! Super class that inherits a number of other classes */\n" + "/*! Super classe que herda outras classes */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -1009,26 +1072,33 @@ class TranslatorBrazilian : public Translator "Isto irá gerar o seguinte gráfo:" "<p><center><img src=\"graph_legend."+getDotImageExtension()+"\"></center>\n" "<p>\n" - "As caixas no grafo acima tem as seguintes interpretações:\n" + "As caixas no grafo acima possuem os seguintes significados:\n" + "</p>\n" "<ul>\n" - "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para qual " - "o grafo foi gerado.\n" - "<li>Uma caixa com bordas pretas denota uma estrutura ou classe documentada.\n" - "<li>Uma caixa com bordas cinzas denota uma estrutura ou classe não documentada.\n" - - "<li>Uma caixa com bordas vermelhas denota uma estrutura ou classe documentada para\n" - "a qual nem todas as heranças ou componentes são mostradas no grafo. Um grafo é " - "truncado quando este é maior que o tamanho especificado." + "<li>Uma caixa cinza denota a estrutura ou a classe que gerou" + "este grafo.</li>\n" + "<li>Uma caixa com a borda preta denota uma estrutura ou classe documentada.</li>\n" + "<li>Uma caixa com a borda cinza denota uma estrutura ou classe não documentada.</li>\n" + "<li>Uma caixa com a borda vermelha denota uma estrutura ou classe na" + "qual nem todas as relações são mostradas. Um grafo é truncado quando " + "esse não cabe no espaço especificado.</li>\n" "</ul>\n" - "As setas tem os seguintes significados:\n" + "<p>\n" + "As setas possuem os seguintes significados:\n" + "</p>\n" "<ul>\n" - "<li>Uma seta azul escura é utilizada para denotar uma relação de herança " - "pública entre duas classes.\n" - "<li>Uma seta verde escura é utilizada para denotar uma herança protegida.\n" - "<li>Uma seta vermelho escura é utilizada para denotar uma herança privada.\n" - "<li>Uma seta púrpura pontilhada é usada se uma classe está contida ou é utilizada" - "por outra classe. A seta é marcada com a(s) variável(eis) " - "através das quais a classe ou estrutura apontada está acessível. \n" + "<li>Uma seta azul escura denota a relação de herança pública entre " + "duas classes.</li>\n" + "<li>Uma seta verde escura denota a relação de herança protegida entre " + "duas classes.</li>\n" + "<li>Uma seta vermelha escura denota a relação de herança privada entre " + "duas classes.</li>\n" + "<li>Uma seta pontilhada púrpura denota a relação de uso e/ou agragação " + "por outra classe/estrutura. A etiqueta da seta denota o nome do(s) campo(s) " + "que representa(m) este apontamento.</li>\n" + "<li>Uma seta pontilhada amarela denota a relação de instanciação de uma " + "<em>template</em>. A etiqueta da seta denota os parâmetros de instanciação " + "desta <em>template</em>.</li>\n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1074,7 +1144,7 @@ class TranslatorBrazilian : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de Dados"; } @@ -1096,7 +1166,7 @@ class TranslatorBrazilian : public Translator /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Esta é a lista com os pacotes e suas respectivas descrições (se disponíveis):"; + return "Esta é a lista com os pacotes e suas respectivas descrições (quando disponíveis):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() @@ -1116,12 +1186,12 @@ class TranslatorBrazilian : public Translator /*! Used as a marker that is put before a \\bug item */ virtual QCString trBug() { - return "Problema"; + return "Bug"; } /*! Used as the header of the bug list */ virtual QCString trBugList() { - return "Lista de Problemas"; + return "Lista de Bugs"; } ////////////////////////////////////////////////////////////////////////// @@ -1170,7 +1240,7 @@ class TranslatorBrazilian : public Translator /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return "Índice"; + return "Sumário"; } /*! This is used for translation of the word that will possibly @@ -1275,7 +1345,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trReferences() { - return "Referências"; + return "Referencias"; } ////////////////////////////////////////////////////////////////////////// @@ -1307,7 +1377,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trRTFTableOfContents() { - return "Conteúdo"; + return "Sumário"; } ////////////////////////////////////////////////////////////////////////// @@ -1319,7 +1389,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trDeprecatedList() { - return "Lista de Descontinuados(as)"; + return "Lista de itens obsoletos"; } ////////////////////////////////////////////////////////////////////////// @@ -1349,7 +1419,6 @@ class TranslatorBrazilian : public Translator { return "Tipos do Pacote"; } - /*! Used as a heading for a list of Java class functions with package * scope. */ @@ -1357,7 +1426,6 @@ class TranslatorBrazilian : public Translator { return "Funções do Pacote"; } - /*! Used as a heading for a list of static Java class functions with * package scope. */ @@ -1365,7 +1433,6 @@ class TranslatorBrazilian : public Translator { return "Funções Estáticas do Pacote"; } - /*! Used as a heading for a list of Java class variables with package * scope. */ @@ -1373,7 +1440,6 @@ class TranslatorBrazilian : public Translator { return "Atributos do Pacote"; } - /*! Used as a heading for a list of static Java class variables with * package scope. */ @@ -1396,7 +1462,7 @@ class TranslatorBrazilian : public Translator /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Este é o diagrama das funções utilizadas por esta função:"; + return "Este é o diagrama das funções utilizadas por essa função:"; } ////////////////////////////////////////////////////////////////////////// @@ -1408,7 +1474,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trSearchResultsTitle() { - return "Resultado da Busca"; + return "Resultado(s) da Busca"; } /*! This string is put just before listing the search results. The * text can be different depending on the number of documents found. @@ -1431,7 +1497,7 @@ class TranslatorBrazilian : public Translator else { return "<b>$num</b> documentos encontrados. " - "Os melhores resultados vem primeiro."; + "Mostrando os melhores resultados primeiro."; } } /*! This string is put before the list of matched words, for each search @@ -1467,7 +1533,7 @@ class TranslatorBrazilian : public Translator * of the directories. */ virtual QCString trDirDocumentation() - { return "Documentação do Directório"; } + { return "Documentação do Diretório"; } /*! This is used as the title of the directory index and also in the * Quick links of a HTML page, to link to the directory hierarchy. @@ -1500,6 +1566,7 @@ class TranslatorBrazilian : public Translator if (!singular) result+="s"; return result; } + ////////////////////////////////////////////////////////////////////////// // new since 1.4.1 ////////////////////////////////////////////////////////////////////////// @@ -1509,7 +1576,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trOverloadText() { - return "Este é um método provido por conveniência. " + return "Esse é um método provido por conveniência. " "Ele difere do método acima apenas na lista de " "argumentos que devem ser utilizados."; } @@ -1521,7 +1588,7 @@ class TranslatorBrazilian : public Translator /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Este é o diagrama das funções que utilizam esta função:"; + return "Esse é o diagrama das funções que utilizam essa função:"; } /*! This is used in the documentation of a file/namespace before the list @@ -1618,7 +1685,7 @@ class TranslatorBrazilian : public Translator { QCString result = (QCString)"Referência "; - if (isTemplate) result+="da Template "; + if (isTemplate) result+="do <em>Template</em> "; switch(compType) { @@ -1676,27 +1743,28 @@ class TranslatorBrazilian : public Translator */ virtual QCString trModule(bool first_capital, bool singular) { - QCString result((first_capital ? "Modulo" : "modulo")); + QCString result((first_capital ? "Módulo" : "módulo")); if (!singular) result+="s"; return result; } + /*! This is put at the bottom of a module documentation page and is * followed by a list of files that were used to generate the page. */ virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single) - { // here s is one of " Module", " Struct" or " Union" + { // single is true implies a single file QCString result=(QCString)"A documentação para "; switch(compType) { - case ClassDef::Class: result+="este modulo "; break; - case ClassDef::Struct: result+="este tipo "; break; - case ClassDef::Union: result+="esta união "; break; - case ClassDef::Interface: result+="esta interface "; break; - case ClassDef::Protocol: result+="esto protocolo "; break; - case ClassDef::Category: result+="esta categoria "; break; - case ClassDef::Exception: result+="esta exceção "; break; + case ClassDef::Class: result+="esse modulo "; break; + case ClassDef::Struct: result+="esse tipo "; break; + case ClassDef::Union: result+="essa união "; break; + case ClassDef::Interface: result+="essa interface "; break; + case ClassDef::Protocol: result+="esso protocolo "; break; + case ClassDef::Category: result+="essa categoria "; break; + case ClassDef::Exception: result+="essa exceção "; break; default: break; } @@ -1708,6 +1776,7 @@ class TranslatorBrazilian : public Translator return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. @@ -1718,13 +1787,14 @@ class TranslatorBrazilian : public Translator if (!singular) result+="s"; return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. */ virtual QCString trSubprogram(bool first_capital, bool singular) { - QCString result((first_capital ? "Subprograma" : "subprograma")); + QCString result((first_capital ? "Subrotina" : "subrotina")); if (!singular) result+="s"; return result; } @@ -1739,8 +1809,7 @@ class TranslatorBrazilian : public Translator // new since 1.6.0 (mainly for the new search engine) ////////////////////////////////////////////////////////////////////////// - /*! directory relation for \a name - */ + /*! directory relation for \a name */ virtual QCString trDirRelation(const char *name) { return "Relação " + QCString(name); @@ -1755,7 +1824,7 @@ class TranslatorBrazilian : public Translator /*! Label used for search results in the global namespace */ virtual QCString trGlobalNamespace() { - return "Namespace global"; + return "<em>Namespace</em> global"; } /*! Message shown while searching */ @@ -1767,7 +1836,7 @@ class TranslatorBrazilian : public Translator /*! Text shown when no search results are found */ virtual QCString trNoMatches() { - return "Nenhuma entrada encontrada"; + return "Nenhum resultado encontrado"; } ////////////////////////////////////////////////////////////////////////// @@ -1849,7 +1918,7 @@ class TranslatorBrazilian : public Translator /*! Section header for list of template parameters */ virtual QCString trTemplateParameters() - { return "Parâmetros de template"; } + { return "Parâmetros do <em>template</em>"; } /*! Used in dot graph when UML_LOOK is enabled and there are many fields */ virtual QCString trAndMore(const QCString &number) @@ -1857,7 +1926,7 @@ class TranslatorBrazilian : public Translator /*! Used file list for a Java enum */ virtual QCString trEnumGeneratedFromFiles(bool single) - { QCString result = "A documentação para esta enumeração foi gerada a partir"; + { QCString result = "A documentação para essa enumeração foi gerada a partir "; if (single) { result += "do seguinte arquivo:"; } else { @@ -1920,7 +1989,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trClassMethods() { - return "Métodos de classe"; + return "Métodos da classe"; } /*! Used as the header of a list of instance methods in Objective-C. @@ -1928,7 +1997,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trInstanceMethods() { - return "Métodos de instância"; + return "Métodos da instância"; } /*! Used as the header of the member functions of an Objective-C class. @@ -1957,7 +2026,7 @@ class TranslatorBrazilian : public Translator /** old style UNO IDL services: inherited services */ virtual QCString trServices() - { return "Serviços Incluídos"; } + { return "Serviços Inclusos"; } /** UNO IDL constant groups */ virtual QCString trConstantGroups() @@ -1970,7 +2039,6 @@ class TranslatorBrazilian : public Translator result += namespaceName; return result; } - /** UNO IDL service page title */ virtual QCString trServiceReference(const char *sName) { @@ -1978,34 +2046,33 @@ class TranslatorBrazilian : public Translator result += sName; return result; } - /** UNO IDL singleton page title */ virtual QCString trSingletonReference(const char *sName) { + // TODO: Emerson Ferreira proposes to add emphasis around the word + // Singleton but I'm not sure if this will work for non HTML generators. QCString result = "Referência do Singleton "; result += sName; return result; } - /** UNO IDL service page */ virtual QCString trServiceGeneratedFromFiles(bool single) { // single is true implies a single file - QCString result=(QCString)"A documentação para este serviço " + QCString result=(QCString)"A documentação para esse serviço " "foi gerada a partir "; if (single) { result+="do seguinte arquivo:"; } else { - result+="dos: seguintes arquivos:"; + result+="dos seguintes arquivos:"; } return result; } - /** UNO IDL singleton page */ virtual QCString trSingletonGeneratedFromFiles(bool single) { // single is true implies a single file - QCString result=(QCString)"A documentação para este singleton " + QCString result=(QCString)"A documentação para esse <em>Singleton</em> " "foi gerada a partir "; if (single) { result+="do seguinte arquivo:"; @@ -2017,6 +2084,7 @@ class TranslatorBrazilian : public Translator } ////////////////////////////////////////////////////////////////////////// + }; -#endif +#endif diff --git a/src/translator_ca.h b/src/translator_ca.h index d4aca52..ca9b7e9 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -104,7 +104,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentació dels Camps"; } @@ -171,7 +171,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructures de Dades"; } @@ -188,7 +188,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Camps de Dades"; } @@ -201,7 +201,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globals"; } @@ -242,7 +242,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Aquestes són les estructures de dades acompanyades amb breus descripcions:"; } @@ -257,7 +257,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="Aquesta és la llista de tots els "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="camps d'estructures i unions"; } @@ -272,7 +272,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 result+=" amb enllaços a "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="la documentació de l'estructura/unió per a cada camp:"; } @@ -283,7 +283,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="les estructures/unions a que pertanyen:"; } @@ -298,7 +298,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Aquesta és la llista de "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="totes les funcions, variables, definicions, enumeracions, i definicions de tipus"; if (!extractAll) result+=" documentades"; @@ -352,7 +352,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Índex d'Estructures de Dades"; } @@ -379,7 +379,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentació de les Estructures de Dades"; } @@ -482,7 +482,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructures de Dades"; } @@ -894,7 +894,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Camps de Dades"; } @@ -1083,7 +1083,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructures de Dades"; } diff --git a/src/translator_cn.h b/src/translator_cn.h index eae4014..832d2c7 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -86,7 +86,7 @@ class TranslatorChinese : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体成员变量说明"; } @@ -154,7 +154,7 @@ class TranslatorChinese : public Translator /*! This is put above each page as a link to the list of annotated class */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体"; } else { @@ -169,7 +169,7 @@ class TranslatorChinese : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "成员变量"; } else { @@ -180,7 +180,7 @@ class TranslatorChinese : public Translator /*! This is put above each page as a link to all member of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "全局定义"; } else { return "文件成员"; @@ -211,7 +211,7 @@ class TranslatorChinese : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "这里列出了所有结构体,并附带简要说明:"; } @@ -227,7 +227,7 @@ class TranslatorChinese : public Translator if (!extractAll) { result+="文档化的"; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="结构体和联合体的成员变量,并附带"; } else { @@ -235,7 +235,7 @@ class TranslatorChinese : public Translator } //result+=" with links to "; if (extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="结构体或联合的详细说明:"; } else { @@ -243,7 +243,7 @@ class TranslatorChinese : public Translator } } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="结构或联合所属的文件:"; } else { @@ -258,7 +258,7 @@ class TranslatorChinese : public Translator QCString result="这里列出了所有"; if (!extractAll) result +="文档化的"; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result +="函数,变量,宏,枚举和类型定义等,并附带"; } else { @@ -292,7 +292,7 @@ class TranslatorChinese : public Translator virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体索引"; } @@ -309,7 +309,7 @@ class TranslatorChinese : public Translator virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体说明"; } @@ -366,7 +366,7 @@ class TranslatorChinese : public Translator virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体"; } @@ -776,7 +776,7 @@ class TranslatorChinese : public Translator virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "成员变量"; } @@ -978,7 +978,7 @@ class TranslatorChinese : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "结构体"; } diff --git a/src/translator_cz.h b/src/translator_cz.h index e4a5692..056d0e4 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -128,7 +128,7 @@ class TranslatorCzech : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentace k položkám"; } @@ -196,7 +196,7 @@ class TranslatorCzech : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datové struktury"; } @@ -213,7 +213,7 @@ class TranslatorCzech : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datové položky"; } @@ -226,7 +226,7 @@ class TranslatorCzech : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globální symboly"; } @@ -266,7 +266,7 @@ class TranslatorCzech : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Následující seznam obsahuje identifikace datových " "struktur a jejich stručné popisy:"; @@ -290,7 +290,7 @@ class TranslatorCzech : public Translator result += "dokumentovaných "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result += "položek struktur (struct) a unií (union) "; } @@ -303,7 +303,7 @@ class TranslatorCzech : public Translator if (extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result += "dokumentaci struktur/unií, ke kterým příslušejí:"; } @@ -314,7 +314,7 @@ class TranslatorCzech : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktury/unie, ke kterým příslušejí:"; } @@ -333,7 +333,7 @@ class TranslatorCzech : public Translator QCString result="Zde naleznete seznam všech "; if (!extractAll) result+="dokumentovaných "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcí, proměnných, maker, výčtů a definic typů (typedef) " "s odkazy na "; @@ -388,7 +388,7 @@ class TranslatorCzech : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Rejstřík datových struktur"; } @@ -415,7 +415,7 @@ class TranslatorCzech : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentace datových struktur"; } @@ -518,7 +518,7 @@ class TranslatorCzech : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datové struktry"; } @@ -942,7 +942,7 @@ class TranslatorCzech : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datové položky"; } diff --git a/src/translator_de.h b/src/translator_de.h index 7d3d63a..8817ea8 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -127,6 +127,9 @@ // - Updated for "new since 1.8.0" version // - Some small corrections // +// 2016/03/15 Carsten Schumann (carsten at familie-schumann dot info) +// - Updated for "new since 1.8.4" version +// // Todo: // - see FIXME @@ -245,7 +248,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datenstrukturen"; } @@ -262,7 +265,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datenstruktur-Elemente"; } @@ -307,7 +310,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Hier folgt die Aufzählung aller Datenstrukturen " "mit einer Kurzbeschreibung:"; @@ -327,7 +330,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 { result+="dokumentierten "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="Strukturen und Varianten"; } @@ -338,7 +341,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 result+=" mit Verweisen auf "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="die Dokumentation zu jedem Element:"; } @@ -349,7 +352,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="die zugehörigen Elemente:"; } @@ -366,7 +369,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 { QCString result="Hier folgt die Aufzählung aller "; if (!extractAll) result+="dokumentierten "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="Funktionen, Variablen, Makros, Aufzählungen und Typdefinitionen"; } @@ -417,7 +420,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) return "Datenstruktur-Verzeichnis"; else return "Klassen-Verzeichnis"; @@ -440,7 +443,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datenstruktur-Dokumentation"; } @@ -543,7 +546,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datenstrukturen"; } @@ -605,6 +608,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Erzeugt von"; } + ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 @@ -977,7 +981,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datenfelder"; } @@ -1195,7 +1199,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) return "Datenstrukturen"; else return "Klassen"; @@ -2037,6 +2041,61 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4 { return "Übersicht"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + /** old style UNO IDL services: implemented interfaces */ + virtual QCString trInterfaces() + { return "Exportierte Interfaces"; } + + /** old style UNO IDL services: inherited services */ + virtual QCString trServices() + { return "Eingebundene Dienste"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroups() + { return "Konstante Gruppen"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroupReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Konstantengruppen-Referenz"; + return result; + } + + /** UNO IDL service page title */ + virtual QCString trServiceReference(const char *sName) + { + QCString result=(QCString)sName; + result+=" Dienstreferenz"; + return result; + } + /** UNO IDL singleton page title */ + virtual QCString trSingletonReference(const char *sName) + { + QCString result=(QCString)sName; + result+=" Singleton-Referenz"; + return result; + } + /** UNO IDL service page */ + virtual QCString trServiceGeneratedFromFiles(bool single) + { + QCString result=(QCString)"Die Dokumentation für diesen Dienst " + "wurde generiert aus "; + if (single) result+="folgender Datei: "; else result+="folgenden Dateien: "; + return result; + } + /** UNO IDL singleton page */ + virtual QCString trSingletonGeneratedFromFiles(bool single) + { + QCString result=(QCString)"Die Dokumentation für diesen Singleton wurde generiert aus "; + + if (single) result+="folgender Datei:"; else result+="folgenden Dateien:"; + return result; + } + + ////////////////////////////////////////////////////////////////////////// diff --git a/src/translator_dk.h b/src/translator_dk.h index 9ea5b28..e98cfa8 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -151,7 +151,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Felt-dokumentation"; } else { return "Dokumentation af feltvariable"; @@ -215,7 +215,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } else { return "Oversigt over sammensatte typer"; @@ -229,7 +229,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data-felter"; } else { return "Felter i sammensatte typer"; @@ -239,7 +239,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globale symboler"; } else { return "Placering i filer"; // Fil-medlemmer"; //TODO @@ -278,7 +278,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Her er datastrukturerne med korte beskrivelser:"; } else { return "Her er klasserne, datastrukturerne, " @@ -293,20 +293,20 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 if (!extractAll) { result+="dokumenterede "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="felter i datastrukturer og unioner"; } else { result+="klassemedlemmer"; } result+=" med links til "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="datastruktur/unions-dokumentationen for hvert felt:"; } else { result+="klassedokumentationen for hvert medlem:"; } } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="de datastrukturer/unioner, de hører til:"; } else { result+="de klasser, de hører til:"; @@ -321,7 +321,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 QCString result="Her er en liste over alle "; if (!extractAll) result+="dokumenterede "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funktioner, variable, #defines, enumerationer " "og typedefinitioner"; } else { @@ -368,7 +368,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Indeks over datastrukturer"; } else { return "Indeks over sammensatte typer"; @@ -392,7 +392,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastruktur-documentation"; } else { return "Klasse-dokumentation"; @@ -498,7 +498,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } else { return "Sammensatte typer"; @@ -883,7 +883,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datafelter"; } else { return "Offentlige attributter"; @@ -1067,7 +1067,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } else { return "Klasser"; diff --git a/src/translator_en.h b/src/translator_en.h index a72c05a..190ba79 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -35,7 +35,7 @@ files frees the maintainer from thinking about whether the first, the second, or both files should be included or not, and why. This holds namely for localized translators because their - base class is changed occasionaly to adapter classes when the + base class is changed occasionally to adapter classes when the Translator class changes the interface, or back to the Translator class (by the local maintainer) when the localized translator is made up-to-date again. @@ -103,7 +103,7 @@ class TranslatorEnglish : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Field Documentation"; } @@ -170,7 +170,7 @@ class TranslatorEnglish : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Structures"; } @@ -187,7 +187,7 @@ class TranslatorEnglish : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Fields"; } @@ -200,7 +200,7 @@ class TranslatorEnglish : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globals"; } @@ -241,7 +241,7 @@ class TranslatorEnglish : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Here are the data structures with brief descriptions:"; } @@ -260,7 +260,7 @@ class TranslatorEnglish : public Translator { result+="documented "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct and union fields"; } @@ -271,7 +271,7 @@ class TranslatorEnglish : public Translator result+=" with links to "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="the struct/union documentation for each field:"; } @@ -282,7 +282,7 @@ class TranslatorEnglish : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="the structures/unions they belong to:"; } @@ -300,7 +300,7 @@ class TranslatorEnglish : public Translator QCString result="Here is a list of all "; if (!extractAll) result+="documented "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="functions, variables, defines, enums, and typedefs"; } @@ -351,7 +351,7 @@ class TranslatorEnglish : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Structure Index"; } @@ -378,7 +378,7 @@ class TranslatorEnglish : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Structure Documentation"; } @@ -481,7 +481,7 @@ class TranslatorEnglish : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Structures"; } @@ -888,7 +888,7 @@ class TranslatorEnglish : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Fields"; } @@ -1036,10 +1036,10 @@ class TranslatorEnglish : public Translator "<li>%A dark green arrow is used for protected inheritance.</li>\n" "<li>%A dark red arrow is used for private inheritance.</li>\n" "<li>%A purple dashed arrow is used if a class is contained or used " - "by another class. The arrow is labeled with the variable(s) " + "by another class. The arrow is labelled with the variable(s) " "through which the pointed class or struct is accessible.</li>\n" "<li>%A yellow dashed arrow denotes a relation between a template instance and " - "the template class it was instantiated from. The arrow is labeled with " + "the template class it was instantiated from. The arrow is labelled with " "the template parameters of the instance.</li>\n" "</ul>\n"; } @@ -1086,7 +1086,7 @@ class TranslatorEnglish : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Structures"; } @@ -1494,7 +1494,7 @@ class TranslatorEnglish : public Translator { QCString result=dirName; result+=" Directory Reference"; return result; } /*! This returns the word directory with or without starting capital - * (\a first_capital) and in sigular or plural form (\a singular). + * (\a first_capital) and in singular or plural form (\a singular). */ virtual QCString trDir(bool first_capital, bool singular) { diff --git a/src/translator_eo.h b/src/translator_eo.h index 5415e81..28876d7 100644 --- a/src/translator_eo.h +++ b/src/translator_eo.h @@ -105,7 +105,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Kampa Dokumentado"; } @@ -172,7 +172,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumstruktoroj"; } @@ -189,7 +189,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumkampoj"; } @@ -202,7 +202,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Mallokalaĵoj"; } @@ -243,7 +243,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Jen datumstrukturoj kun mallongaj priskriboj:"; } @@ -262,7 +262,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 { result+="dokumentitaj "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="strukturaj kaj kunigaj kampoj"; } @@ -273,7 +273,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 result+=" kun ligiloj al "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="la struktura/kuniga dokumentado por ĉiu kampo:"; } @@ -284,7 +284,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="la strukturoj/kunigoj al kiuj ili apartenas:"; } @@ -302,7 +302,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 QCString result="Jen listo de ĉiuj "; if (!extractAll) result+="dokumentitaj "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcioj, variabloj, difinoj, enumeracioj kaj tipodifinoj"; } @@ -353,7 +353,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumstruktura Indekso"; } @@ -380,7 +380,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumstruktura Dokumentado"; } @@ -483,7 +483,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumstrukturoj"; } @@ -891,7 +891,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumkampoj"; } @@ -1086,7 +1086,7 @@ class TranslatorEsperanto : public TranslatorAdapter_1_8_4 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datumstrukturoj"; } diff --git a/src/translator_es.h b/src/translator_es.h index 1b75465..8922297 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -97,7 +97,7 @@ class TranslatorSpanish : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentación de los campos"; } @@ -164,7 +164,7 @@ class TranslatorSpanish : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructura de datos"; } @@ -181,7 +181,7 @@ class TranslatorSpanish : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de datos"; } @@ -194,7 +194,7 @@ class TranslatorSpanish : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globales"; } @@ -234,7 +234,7 @@ class TranslatorSpanish : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Lista de estructuras con una breve descripción:"; } @@ -249,7 +249,7 @@ class TranslatorSpanish : public Translator virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="Lista de todos los "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="campos de estructuras y uniones"; } @@ -264,7 +264,7 @@ class TranslatorSpanish : public Translator result+=" con enlaces a "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="la documentación de la estructura/unión para cada campo:"; } @@ -275,7 +275,7 @@ class TranslatorSpanish : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="las estructuras/uniones a que pertenecen:"; } @@ -291,7 +291,7 @@ class TranslatorSpanish : public Translator virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Lista de "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="todas las funciones, variables, 'defines', enumeraciones y 'typedefs'"; } @@ -343,7 +343,7 @@ class TranslatorSpanish : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Índice de estructura de datos"; } @@ -370,7 +370,7 @@ class TranslatorSpanish : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentación de las estructuras de datos"; } @@ -406,13 +406,13 @@ class TranslatorSpanish : public Translator * list of defines */ virtual QCString trDefines() - { return "'defines'"; } + { return "defines"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() - { return "'typedefs'"; } + { return "typedefs"; } /*! This is used in the documentation of a file as a header before the * list of enumerations @@ -473,7 +473,7 @@ class TranslatorSpanish : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructuras de datos"; } @@ -906,7 +906,7 @@ class TranslatorSpanish : public Translator virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de datos"; } @@ -1119,7 +1119,7 @@ class TranslatorSpanish : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estructuras de Datos"; } diff --git a/src/translator_fa.h b/src/translator_fa.h index 7effafe..5a37330 100644 --- a/src/translator_fa.h +++ b/src/translator_fa.h @@ -120,7 +120,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Field مستندات"; } @@ -187,7 +187,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "ساختار های داده "; } @@ -204,7 +204,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "فضاهای داده ها"; } @@ -217,7 +217,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globals"; } @@ -257,7 +257,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "ليست ساختارهای داده به همراه توضيحی کوتاه :"; } @@ -280,7 +280,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 result+="همه ی اعضاء "; } result+=" به همراه ارتباطشان با "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="ساختارهای داده "; } @@ -289,7 +289,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 result+="كلاس ها "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="و مستندات ساختار داده برای هر عضو "; } @@ -348,7 +348,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "فهرست ساختار داده ها"; } @@ -375,7 +375,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "مستندات ساختار داده ها"; } @@ -484,7 +484,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "ساختارهای داده"; } @@ -889,7 +889,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "فضاهای داده ها"; } @@ -1084,7 +1084,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "ساختار های داده"; } diff --git a/src/translator_fi.h b/src/translator_fi.h index 8343cdd..2b94f48 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -160,7 +160,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Kenttien dokumentaatio"; // "Field Documentation"; } @@ -232,7 +232,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueet"; // "Data Structures" } @@ -249,7 +249,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueen kentät"; // "Data Fields" } @@ -262,7 +262,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globaalit"; // "Globals" } @@ -303,7 +303,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tässä ovat tietueet lyhyen selitteen kanssa:"; // "Here are the data structures with brief descriptions:" } @@ -322,7 +322,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 { result+="dokumentoiduista "; // "documented " } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields" } @@ -333,7 +333,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 result+=" linkitettyinä "; // " with links to " if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:" } @@ -344,7 +344,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+= "tietueisiin/yhdisteisiin, joihin ne kuuluvat:"; // "the structures/unions they belong to:" } @@ -362,7 +362,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 QCString result="Tässä on lista kaikista "; // "Here is a list of all " if (!extractAll) result+="dokumentoiduista "; // "documented " - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funktioista, muuttujista, määrittelyistä, luettelotyypeistä ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs" } @@ -413,7 +413,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueluettelo"; // "Data Structure Index" } @@ -440,7 +440,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueiden dokumentaatio"; // "Data Structure Documentation" } @@ -543,7 +543,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueet"; // "Data Structures" } @@ -956,7 +956,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueen kentät"; // "Data Fields" } @@ -1202,7 +1202,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tietueet"; // "Data Structures" } diff --git a/src/translator_fr.h b/src/translator_fr.h index 65e77df..7f44d37 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -163,7 +163,7 @@ class TranslatorFrench : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentation des champs"; } @@ -230,7 +230,7 @@ class TranslatorFrench : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structures de données"; } @@ -247,7 +247,7 @@ class TranslatorFrench : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Champs de donnée"; } @@ -260,7 +260,7 @@ class TranslatorFrench : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Variables globale"; } @@ -301,7 +301,7 @@ class TranslatorFrench : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Liste des structures de données avec une brève description :"; } @@ -316,7 +316,7 @@ class TranslatorFrench : public Translator virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="Liste de tous les "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="champs de structure et d'union "; } @@ -331,7 +331,7 @@ class TranslatorFrench : public Translator result+="avec des liens vers "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="la documentation de structure/union de chaque champ :"; } @@ -342,7 +342,7 @@ class TranslatorFrench : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="les structures/unions auxquelles ils appartiennent :"; } @@ -359,7 +359,7 @@ class TranslatorFrench : public Translator { QCString result="Liste "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="de toutes les fonctions, variables, macros, enumérations, et définitions de type "; } @@ -409,7 +409,7 @@ class TranslatorFrench : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Index des structures de données"; } @@ -436,7 +436,7 @@ class TranslatorFrench : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentation des structures de données"; } @@ -539,7 +539,7 @@ class TranslatorFrench : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structures de données"; } @@ -951,7 +951,7 @@ class TranslatorFrench : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Champs de données"; } @@ -1146,7 +1146,7 @@ class TranslatorFrench : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structures de données"; } diff --git a/src/translator_gr.h b/src/translator_gr.h index 713b4bb..8b7afe1 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -92,7 +92,7 @@ class TranslatorGreek : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Τεκμηρίωση Πεδίων"; } @@ -159,7 +159,7 @@ class TranslatorGreek : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Δομές Δεδομένων"; } @@ -176,7 +176,7 @@ class TranslatorGreek : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Μέλη Δομών Δεδομένων"; } @@ -189,7 +189,7 @@ class TranslatorGreek : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Καθολικοί ορισμοί"; } @@ -228,7 +228,7 @@ class TranslatorGreek : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Ακολουθούν οι δομές δεδομένων με σύντομες περιγραφές:"; } @@ -247,7 +247,7 @@ class TranslatorGreek : public Translator { result+="τεκμηριωμένων "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="μελών δομών δεδομένων και ενώσεων "; } @@ -258,7 +258,7 @@ class TranslatorGreek : public Translator result+=" με συνδέσμους "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="στην τεκμηρίωση των δομών/ενώσεων για κάθε πεδίο:"; } @@ -269,7 +269,7 @@ class TranslatorGreek : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="στις δομές/ενώσεις που ανήκουν:"; } @@ -287,7 +287,7 @@ class TranslatorGreek : public Translator QCString result="Ακολουθεί η λίστα όλων των "; if (!extractAll) result+="τεκμηριωμένων "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="συναρτήσεων, μεταβλητών, ορισμών, απαριθμήσεων, και ορισμών τύπων"; } @@ -339,7 +339,7 @@ class TranslatorGreek : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Ευρετήριο δομών δεδομένων"; } @@ -366,7 +366,7 @@ class TranslatorGreek : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Τεκμηρίωση Δομών Δεδομένων"; } @@ -469,7 +469,7 @@ class TranslatorGreek : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Δομές Δεδομένων"; } @@ -877,7 +877,7 @@ class TranslatorGreek : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Πεδία Δεδομένων"; } @@ -1075,7 +1075,7 @@ class TranslatorGreek : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Δομές Δεδομένων"; } diff --git a/src/translator_hr.h b/src/translator_hr.h index cfefa32..1d17e2a 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -134,7 +134,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 { return "Stablo klasa"; } QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Sve strukture"; } @@ -147,7 +147,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 { return "Popis datoteka"; } QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) return "Svi članovi struktura"; else return "Svi članovi klasa"; @@ -181,7 +181,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 if (!extractAll) result+="dokumentiranih "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="članova klasa s linkovima na "; else result+="članova struktura s linkovima na "; @@ -192,7 +192,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="dokumentaciju klase :"; else result +="dokumentaciju strukture"; @@ -226,7 +226,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 { return "Hijerarhijsko kazalo"; } QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Kazalo struktura podataka"; } @@ -241,7 +241,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 { return "Dokumentacija modula"; } QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentacija struktura podataka"; } diff --git a/src/translator_hu.h b/src/translator_hu.h index 4bf3f71..17f0d44 100644 --- a/src/translator_hu.h +++ b/src/translator_hu.h @@ -87,7 +87,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatmezők dokumentációja"; } @@ -151,7 +151,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatszerkezetek"; } @@ -168,7 +168,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatmezők"; } @@ -181,7 +181,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globális elemek"; } @@ -222,7 +222,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Az összes adatszerkezet listája rövid leírásokkal:"; } @@ -241,7 +241,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 { result+="dokumentált "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktúra- és úniómező"; } @@ -252,7 +252,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 result+=" listája, valamint hivatkozás "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="a megfelelő struktúra-/úniódokumentációra minden mezőnél:"; } @@ -263,7 +263,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="a struktúrákra/úniókra, amikhez tartoznak:"; } @@ -281,7 +281,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 QCString result="Az összes "; if (!extractAll) result+="dokumentált "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="függvény, változó, makródefiníció, enumeráció és típusdefiníció"; } @@ -333,7 +333,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatszerkezet-mutató"; } @@ -360,7 +360,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatszerkezetek dokumentációja"; } @@ -463,7 +463,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatszerkezetek"; } @@ -872,7 +872,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatmezők"; } @@ -1064,7 +1064,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Adatszerkezetek"; } diff --git a/src/translator_id.h b/src/translator_id.h index c5c58fa..2039c76 100644 --- a/src/translator_id.h +++ b/src/translator_id.h @@ -87,7 +87,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentasi Variabel"; } @@ -154,7 +154,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktur Data"; } @@ -171,7 +171,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Variabel Data"; } @@ -184,7 +184,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Daftar Definisi Global"; } @@ -225,7 +225,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Berikut ini daftar struktur data, dengan penjelasan singkat:"; } @@ -239,7 +239,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="Berikut ini daftar seluruh "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="variabel anggota struct dan union"; } @@ -254,7 +254,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 result+=", dengan tautan ke "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="dokumentasi struct/union untuk setiap variabel:"; } @@ -265,7 +265,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct/union yang memuatnya:"; } @@ -282,7 +282,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 { QCString result="Berikut ini daftar "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="fungsi, variabel, makro definisi, enumerasi, dan tipe"; } @@ -334,7 +334,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Indeks Struktur Data"; } @@ -361,7 +361,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentasi Struktur Data"; } @@ -464,7 +464,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktur Data"; } @@ -873,7 +873,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Variabel Data"; } @@ -1067,7 +1067,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktur Data"; } diff --git a/src/translator_it.h b/src/translator_it.h index e2c51c7..8f08b5a 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -141,7 +141,7 @@ class TranslatorItalian : public Translator /*! header that is put before the list of member attributes. */ QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentazione dei campi"; } @@ -209,7 +209,7 @@ class TranslatorItalian : public Translator /*! This is put above each page as a link to the list of annotated classes */ QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Strutture dati"; } @@ -226,7 +226,7 @@ class TranslatorItalian : public Translator /*! This is put above each page as a link to all members of compounds. */ QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campi dei dati"; } @@ -239,7 +239,7 @@ class TranslatorItalian : public Translator /*! This is put above each page as a link to all members of files. */ QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Elementi globali"; } @@ -282,7 +282,7 @@ class TranslatorItalian : public Translator QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Queste sono le strutture dati con una loro breve descrizione:"; } @@ -296,7 +296,7 @@ class TranslatorItalian : public Translator QCString trCompoundMembersDescription(bool extractAll) { QCString result="Questo è un elenco "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { if (!extractAll) result+="delle struct e delle union documentate "; else result+="di tutte le struct e le union "; @@ -307,7 +307,7 @@ class TranslatorItalian : public Translator else result+="di tutti i membri "; } result+="con collegamenti alla documentazione "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { if (extractAll) result+="della struct/union per ciascun campo:"; else result+="delle struct/union a cui appartengono:"; @@ -324,7 +324,7 @@ class TranslatorItalian : public Translator QCString trFileMembersDescription(bool extractAll) { QCString result="Questo è un elenco "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { if (!extractAll) result+="delle funzioni, delle variabili, delle define, dei tipi enumerati e delle ridefinizioni dei tipi (typedef) documentate "; else result+="di tutte le funzioni, variabili, define, tipi enumerati, e ridefinizioni dei tipi (typedef) "; @@ -375,7 +375,7 @@ class TranslatorItalian : public Translator */ QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Indice delle strutture dati"; } @@ -496,7 +496,7 @@ class TranslatorItalian : public Translator */ QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Strutture dati"; } @@ -909,7 +909,7 @@ class TranslatorItalian : public Translator } QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campi"; } @@ -1098,7 +1098,7 @@ class TranslatorItalian : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Strutture dati"; } diff --git a/src/translator_jp.h b/src/translator_jp.h index 4dc9cba..c4f92c2 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -103,7 +103,7 @@ class TranslatorJapanese : public Translator /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() { - if( Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + if( Config_getBool(OPTIMIZE_OUTPUT_JAVA)) { return "メソッド詳解"; } @@ -116,7 +116,7 @@ class TranslatorJapanese : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if( Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "フィールド詳解"; } @@ -185,7 +185,7 @@ class TranslatorJapanese : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造"; } @@ -202,7 +202,7 @@ class TranslatorJapanese : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データフィールド"; } @@ -215,7 +215,7 @@ class TranslatorJapanese : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "大域各種"; } @@ -262,7 +262,7 @@ class TranslatorJapanese : public Translator virtual QCString trCompoundListDescription() { /* 概要がついているのは見ればわかるので省略 */ - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造一覧です。"; } @@ -275,7 +275,7 @@ class TranslatorJapanese : public Translator /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - const bool forC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); + const bool forC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C); QCString result; if (forC) { @@ -332,7 +332,7 @@ class TranslatorJapanese : public Translator virtual QCString trFileMembersDescription(bool /*extractAll*/) { QCString result; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="関数・変数・マクロ・列挙・型定義"; } @@ -377,7 +377,7 @@ class TranslatorJapanese : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造索引"; } @@ -404,7 +404,7 @@ class TranslatorJapanese : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造詳解"; } @@ -506,7 +506,7 @@ class TranslatorJapanese : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造"; } @@ -913,7 +913,7 @@ class TranslatorJapanese : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "フィールド"; } @@ -1102,7 +1102,7 @@ class TranslatorJapanese : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "データ構造"; } diff --git a/src/translator_kr.h b/src/translator_kr.h index 2ef50e8..7e95e3b 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -118,13 +118,13 @@ class TranslatorKorean : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "필드 문서화"; } else { - return "멤버 데이타 문서화"; + return "멤버 데이터 문서화"; } } @@ -185,9 +185,9 @@ class TranslatorKorean : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -202,9 +202,9 @@ class TranslatorKorean : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 필드"; + return "데이터 필드"; } else { @@ -215,7 +215,7 @@ class TranslatorKorean : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "전역"; } @@ -255,9 +255,9 @@ class TranslatorKorean : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "다음은 데이타 구조들입니다. (간략한 설명만을 보여줍니다) :"; + return "다음은 데이터 구조들입니다. (간략한 설명만을 보여줍니다) :"; } else { @@ -274,7 +274,7 @@ class TranslatorKorean : public Translator { result+="문서화된 "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="모든 구조체와 공용체의 필드들"; } @@ -286,7 +286,7 @@ class TranslatorKorean : public Translator if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="각 필드들은 해당 필드에 대한 구조체와 공용체의 " "문서화 페이지의 링크를 가지고 있습니다. :"; @@ -299,7 +299,7 @@ class TranslatorKorean : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="각 필드들은 해당 필드가 속해 있는 구조체와 공용체에 " "대한 링크를 가지고 있습니다. :"; @@ -319,7 +319,7 @@ class TranslatorKorean : public Translator QCString result="다음은 "; if (!extractAll) result+="문서화된 "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="모든 함수, 변수, 매크로, 열거형, 타입정의들"; } @@ -372,9 +372,9 @@ class TranslatorKorean : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조 색인"; + return "데이터 구조 색인"; } else { @@ -399,9 +399,9 @@ class TranslatorKorean : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조 문서화"; + return "데이터 구조 문서화"; } else { @@ -502,9 +502,9 @@ class TranslatorKorean : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -911,9 +911,9 @@ class TranslatorKorean : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 필드"; + return "데이터 필드"; } else { @@ -1100,9 +1100,9 @@ class TranslatorKorean : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -1555,15 +1555,15 @@ class TranslatorKorean : public Translator /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() - { return "데이타 타입 목록"; } + { return "데이터 타입 목록"; } /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() - { return "데이타 필드"; } + { return "데이터 필드"; } /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() - { return "대략적인 설명과 함께 데이타 타입들의 목록입니다.:"; } + { return "대략적인 설명과 함께 데이터 타입들의 목록입니다.:"; } /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) @@ -1573,16 +1573,16 @@ class TranslatorKorean : public Translator { result+="문서화된 "; } - result+="모든 데이타 타입 멤버들의 목록입니다. "; + result+="모든 데이터 타입 멤버들의 목록입니다. "; result+="각 항목은 "; if (!extractAll) { - result+="각 멤버에 대한 데이타 구조 문서화 페이지의 링크를 가지고 있습니다."; + result+="각 멤버에 대한 데이터 구조 문서화 페이지의 링크를 가지고 있습니다."; } else { - result+="그들이 속한 데이타 타입의 링크를 가지고 있습니다. :"; + result+="그들이 속한 데이터 타입의 링크를 가지고 있습니다. :"; } return result; } @@ -1591,13 +1591,13 @@ class TranslatorKorean : public Translator * annotated compound index (Fortran). */ virtual QCString trCompoundIndexFortran() - { return "데이타 타입 색인"; } + { return "데이터 타입 색인"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all data types (Fortran). */ virtual QCString trTypeDocumentation() - { return "데이타 타입 문서화"; } + { return "데이터 타입 문서화"; } /*! This is used in the documentation of a file as a header before the * list of (global) subprograms (Fortran). @@ -1615,7 +1615,7 @@ class TranslatorKorean : public Translator * the list of links to documented compounds (Fortran) */ virtual QCString trDataTypes() - { return "데이타 타입들"; } + { return "데이터 타입들"; } /*! used as the title of page containing all the index of all modules (Fortran). */ virtual QCString trModulesList() diff --git a/src/translator_lt.h b/src/translator_lt.h index faf4197..f47d9d4 100644 --- a/src/translator_lt.h +++ b/src/translator_lt.h @@ -94,7 +94,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Lauko aprašymas"; } @@ -161,7 +161,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Struktūros"; } @@ -178,7 +178,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Laukai"; } @@ -191,7 +191,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globalūs Nariai"; } @@ -232,7 +232,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų struktūros su trumpais aprašymais:"; } @@ -251,7 +251,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 { result+="dokumentuotų "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūrų ir sąjungų laukų sąrašas"; } @@ -262,7 +262,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 result+=" su ryšiais į "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūrų/sąjungų kiekvieno lauko dokumentaciją:"; } @@ -273,7 +273,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūros/sąjungos, kurios priklauso:"; } @@ -291,7 +291,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 QCString result="Sąrašas visų "; if (!extractAll) result+="dokumentuotų "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcijų, kintamųjų, apibrėžimų, išvardinimų, ir tipų apibrėžimų"; } @@ -342,7 +342,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Struktūros Indeksas"; } @@ -369,7 +369,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Struktūros Dokumentacija"; } @@ -472,7 +472,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų struktųros"; } @@ -879,7 +879,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Laukai"; } @@ -1075,7 +1075,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Duomenų Struktūros"; } diff --git a/src/translator_lv.h b/src/translator_lv.h index 35aab0f..2736bb0 100644 --- a/src/translator_lv.h +++ b/src/translator_lv.h @@ -109,7 +109,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Lauka dokumentācija"; } @@ -176,7 +176,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu struktūras"; } @@ -193,7 +193,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu lauki"; } @@ -206,7 +206,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globālie"; } @@ -247,7 +247,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Šeit ir visas datu struktūras ar īsu aprakstu:"; } @@ -266,7 +266,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 { result+="dokumentēto "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūru un apvienojumu lauku"; } @@ -277,7 +277,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 result+=" saraksts ar saitēm uz "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūru/apvienojumu dokumentāciju katram laukam:"; } @@ -288,7 +288,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktūrām/apvienojumiem, kam tie pieder:"; } @@ -306,7 +306,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 QCString result="Šeit ir visu "; if (!extractAll) result+="dokumentēto "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkciju, mainīgo, definīciju, uzskaitījumliterāļu un typedefs"; } @@ -357,7 +357,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu struktūru indess"; } @@ -384,7 +384,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu struktūras dokomentācija"; } @@ -487,7 +487,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu struktūras"; } @@ -894,7 +894,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu lauki"; } @@ -1092,7 +1092,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datu struktūras"; } diff --git a/src/translator_mk.h b/src/translator_mk.h index d963dfc..3fc046e 100644 --- a/src/translator_mk.h +++ b/src/translator_mk.h @@ -95,7 +95,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + //if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Документација на членови"; } @@ -158,7 +158,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Список на Структури"; } @@ -175,7 +175,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Членови"; } @@ -188,7 +188,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Глобални Членови"; } @@ -228,7 +228,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Список на структури со кратки описи:"; } @@ -247,7 +247,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 { result+="документирани "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="структури и унии"; } @@ -258,7 +258,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 result+=" со врски до "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="документацијата за секој член на структурата/унијата:"; } @@ -269,7 +269,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="структурите/униите на кои што припаѓаат:"; } @@ -287,7 +287,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 QCString result="Список на сите "; if (!extractAll) result+="документирани "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="функции, променливи, дефиниции, набројувања и дефиниции на тип"; } @@ -338,7 +338,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Попис на Структури"; } @@ -365,7 +365,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Документација на Структури"; } @@ -468,7 +468,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури"; } @@ -876,7 +876,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Членови"; } @@ -1071,7 +1071,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури"; } diff --git a/src/translator_no.h b/src/translator_no.h index 40d3287..58b596a 100644 --- a/src/translator_no.h +++ b/src/translator_no.h @@ -105,7 +105,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Feltdokumentasjon"; } @@ -172,7 +172,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } @@ -193,7 +193,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datafelt"; } @@ -206,7 +206,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globale"; } @@ -247,7 +247,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Her er datastrukturene med korte beskrivelser:"; } @@ -266,7 +266,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 { result+="dokumenterte "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct- og unionfelter"; } @@ -277,7 +277,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 result+=" med koblinger til "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct/union dokumentasjon for hvert felt:"; } @@ -288,7 +288,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct'ene/unionene de hører til:"; } @@ -305,7 +305,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 QCString result="Her er en liste over alle "; if (!extractAll) result+="dokumenterte "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funksjoner, variabler, definisjoner, enum'er, og typedef'er"; } @@ -367,7 +367,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturindeks"; } @@ -394,7 +394,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturdokumentasjon"; } @@ -503,7 +503,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } @@ -924,7 +924,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datafelt"; } @@ -1118,7 +1118,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } diff --git a/src/translator_pl.h b/src/translator_pl.h index f1bec57..421f407 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -77,7 +77,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! header that is put before the list of member attributes. */ QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentacja pól"; } @@ -144,7 +144,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! This is put above each page as a link to the list of annotated classes */ QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktury danych"; } @@ -165,7 +165,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! This is put above each page as a link to all members of compounds. */ QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Pola danych"; } @@ -178,7 +178,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! This is put above each page as a link to all members of files. */ QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globalne"; } @@ -219,7 +219,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Tutaj znajdują się struktury danych wraz z ich krótkimi opisami:"; } @@ -238,7 +238,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 { result+="udokumentowanych "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="pól struktur i unii"; } @@ -249,7 +249,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 result+=" wraz z odnośnikami do "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="dokumentacji struktur/unii dla każdego pola:"; } @@ -260,7 +260,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktur/unii, do których dane pole należy:"; } @@ -277,7 +277,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 { QCString result="Tutaj znajduje się lista wszystkich "; if (!extractAll) result+="udokumentowanych "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcji, zmiennych, makr, wyliczeń i definicji typów"; } @@ -339,7 +339,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Indeks struktur danych"; } @@ -366,7 +366,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentacja struktur danych"; } @@ -469,7 +469,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktury danych"; } @@ -863,11 +863,11 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } QCString trGotoGraphicalHierarchy() { - return "Idź do graficznej hierarchi klas"; + return "Idź do graficznej hierarchii klas"; } QCString trGotoTextualHierarchy() { - return "Idź do tekstowej hierarchi klas"; + return "Idź do tekstowej hierarchii klas"; } QCString trPageIndex() { @@ -888,7 +888,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Pola danych"; } @@ -992,7 +992,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 "class Nieudokumentowana { };\n\n" "/*! Klasa, która jest dziedziczona publicznie */\n" "class PublicznaBaza : public Okrojona { };\n\n" - "/*! A template class */\n" + "/*! Szablon klasy */\n" "template<class T> class Templ { };\n\n" "/*! Klasa, która jest dziedziczona przy użyciu dziedziczenia chronionego */\n" "class ChronionaBaza { };\n\n" @@ -1085,7 +1085,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Struktury Danych"; } @@ -1380,7 +1380,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ virtual QCString trAll() { - return "All"; + return "Wszystko"; } /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() @@ -1475,7 +1475,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ virtual QCString trDirDescription() { - return "Ta struktura katalogów jest posortowana jest z grubsza, " + return "Ta struktura katalogów posortowana jest z grubsza, " "choć nie całkowicie, alfabetycznie:"; } @@ -1653,7 +1653,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } else { - result+="modułów do których składowe te należą:"; + result+="modułów, do których składowe te należą:"; } return result; } @@ -1731,7 +1731,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! directory relation for \a name */ virtual QCString trDirRelation(const char *name) { - return "Relcja "+ QCString(name); + return "Relacja "+ QCString(name); } /*! Loading message shown when loading search results */ diff --git a/src/translator_pt.h b/src/translator_pt.h index 5df58d7..c58bf64 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -116,7 +116,7 @@ class TranslatorPortuguese : public Translator /*! header that is put before the list of member attributes. */ QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentação dos campos e atributos"; } @@ -183,7 +183,7 @@ class TranslatorPortuguese : public Translator /*! This is put above each page as a link to the list of annotated classes */ QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de dados"; } @@ -200,7 +200,7 @@ class TranslatorPortuguese : public Translator /*! This is put above each page as a link to all members of compounds. */ QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de dados"; } @@ -213,7 +213,7 @@ class TranslatorPortuguese : public Translator /*! This is put above each page as a link to all members of files. */ QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globais"; } @@ -251,7 +251,7 @@ class TranslatorPortuguese : public Translator /*! This is an introduction to the annotated compound list. */ QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Lista das estruturas de dados com uma breve descrição:"; } @@ -265,7 +265,7 @@ class TranslatorPortuguese : public Translator QCString trCompoundMembersDescription(bool extractAll) { QCString result="Lista de todas as"; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+=" estruturas e campos de uniões"; } @@ -280,7 +280,7 @@ class TranslatorPortuguese : public Translator result+=" com referência para "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="a respectiva documentação:"; } @@ -291,7 +291,7 @@ class TranslatorPortuguese : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="as estruturas/uniões a que pertencem:"; } @@ -307,7 +307,7 @@ class TranslatorPortuguese : public Translator QCString trFileMembersDescription(bool extractAll) { QCString result="Lista de "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="todas as funções, variáveis, definições, enumerações e definições de tipo "; if (!extractAll) result+="documentadas "; @@ -361,7 +361,7 @@ class TranslatorPortuguese : public Translator */ QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Índice das estruturas de dados"; } @@ -482,7 +482,7 @@ class TranslatorPortuguese : public Translator */ QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de Dados"; } @@ -894,7 +894,7 @@ class TranslatorPortuguese : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Campos de Dados"; } @@ -1082,7 +1082,7 @@ class TranslatorPortuguese : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Estruturas de dados"; } diff --git a/src/translator_ro.h b/src/translator_ro.h index eba7d47..661578b 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -104,7 +104,7 @@ class TranslatorRomanian : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentaţia Câmpurilor"; } @@ -172,7 +172,7 @@ class TranslatorRomanian : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structuri de Date"; } @@ -190,7 +190,7 @@ class TranslatorRomanian : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Câmpurile de Date"; } @@ -204,7 +204,7 @@ class TranslatorRomanian : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globale"; } @@ -246,7 +246,7 @@ class TranslatorRomanian : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Lista structurilor de date, cu scurte descrieri:"; } @@ -263,7 +263,7 @@ class TranslatorRomanian : public Translator { QCString result="Lista tuturor "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="câmpurilor "; if (!extractAll) result+=" documentate "; @@ -278,7 +278,7 @@ class TranslatorRomanian : public Translator result+=", cu legături către "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="documentaţia structurii/uniunii pentru fiecare câmp în parte:"; } @@ -289,7 +289,7 @@ class TranslatorRomanian : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="structurile/uniunile de care aparţin:"; } @@ -306,7 +306,7 @@ class TranslatorRomanian : public Translator virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Lista tuturor "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funcţiilor, variabilelor, definiţiilor, enumerărilor şi definiţiilor de tip"; if (!extractAll) result+=" documentate"; @@ -362,7 +362,7 @@ class TranslatorRomanian : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Indexul Structurilor de Date"; } @@ -390,7 +390,7 @@ class TranslatorRomanian : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Documentaţia Structurilor de Date"; } @@ -494,7 +494,7 @@ class TranslatorRomanian : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structuri de Date"; } @@ -905,7 +905,7 @@ class TranslatorRomanian : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Câmpuri de Date"; } @@ -1097,7 +1097,7 @@ class TranslatorRomanian : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Structuri de Date"; } diff --git a/src/translator_ru.h b/src/translator_ru.h index 2162a34..dbc734c 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -68,7 +68,7 @@ class TranslatorRussian : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля"; } @@ -143,7 +143,7 @@ class TranslatorRussian : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуры данных"; } @@ -160,7 +160,7 @@ class TranslatorRussian : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля структур"; } @@ -207,7 +207,7 @@ class TranslatorRussian : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуры данных с их кратким описанием."; } @@ -222,20 +222,20 @@ class TranslatorRussian : public Translator { QCString result="Список всех "; if(!extractAll) result+="документированных "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="членов структур данных со ссылками на "; else result+="членов классов со ссылками на "; if(!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="документацию по структуре для каждого члена."; else result+="документацию по классу для каждого члена."; } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result += "структуры"; else result += "классы"; @@ -250,7 +250,7 @@ class TranslatorRussian : public Translator QCString result="Список всех "; if (!extractAll) result+="документированных "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="функций, переменных, макроопределений, " "перечислений и определений типов"; @@ -303,7 +303,7 @@ class TranslatorRussian : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Алфавитный указатель структур данных"; } @@ -330,7 +330,7 @@ class TranslatorRussian : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуры данных"; } @@ -433,7 +433,7 @@ class TranslatorRussian : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуры данных"; } @@ -877,7 +877,7 @@ class TranslatorRussian : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля данных"; } @@ -1074,7 +1074,7 @@ class TranslatorRussian : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуры данных"; } @@ -1149,7 +1149,7 @@ class TranslatorRussian : public Translator */ virtual QCString trClass(bool first_capital, bool singular) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { QCString result((first_capital ? "Структуры данных" : "структуры данных")); return result; diff --git a/src/translator_sc.h b/src/translator_sc.h index 388af8c..d2b3954 100644 --- a/src/translator_sc.h +++ b/src/translator_sc.h @@ -103,7 +103,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Документација поља"; } @@ -170,7 +170,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуре"; } @@ -187,7 +187,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поља"; } @@ -200,7 +200,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Глобално"; } @@ -241,7 +241,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Овде су структуре са кратким описима:"; } @@ -260,7 +260,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 { result+="документованих "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="поља структура и унија"; } @@ -271,7 +271,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 result+=" са везама ка "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="документацији структуре/уније за свако поље:"; } @@ -282,7 +282,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="структури/унији којој припадају:"; } @@ -300,7 +300,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 QCString result="Овде је списак свих "; if (!extractAll) result+="документованих "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="фрункција, променљивих, макро замена, набрајања, и дефиниција типова"; } @@ -351,7 +351,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Индекс структура"; } @@ -378,7 +378,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Документација структуре"; } @@ -481,7 +481,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуре"; } @@ -906,7 +906,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поља"; } @@ -1102,7 +1102,7 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структуре"; } diff --git a/src/translator_si.h b/src/translator_si.h index 97a1931..792053e 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -755,7 +755,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Podatkovne strukture"; } diff --git a/src/translator_sk.h b/src/translator_sk.h index d6d94a6..3a925ec 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -72,7 +72,7 @@ class TranslatorSlovak : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentácia k položkám"; } @@ -141,7 +141,7 @@ class TranslatorSlovak : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dátové štruktúry"; } @@ -158,7 +158,7 @@ class TranslatorSlovak : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dátové položky"; } @@ -171,7 +171,7 @@ class TranslatorSlovak : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globálne symboly"; } @@ -211,7 +211,7 @@ class TranslatorSlovak : public Translator /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Nasledujúci zoznam obsahuje identifikáciu dátových " "štruktúr a ich stručné popisy:"; @@ -235,7 +235,7 @@ class TranslatorSlovak : public Translator result += "dokumentovaných "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result += "položiek štruktúr (struct) a unionov (union) "; } @@ -248,7 +248,7 @@ class TranslatorSlovak : public Translator if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result += "dokumentáciu štruktúr/unionov, ku ktorým prislúchajú:"; } @@ -259,7 +259,7 @@ class TranslatorSlovak : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="štruktúry/uniony, ku ktorým prislúchajú:"; } @@ -278,7 +278,7 @@ class TranslatorSlovak : public Translator QCString result="Tu nájdete zoznam všetkých "; if (!extractAll) result+="dokumentovaných "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcií, premenných, makier, enumerácií a definícií typov (typedef) " "s odkazmi na "; @@ -334,7 +334,7 @@ class TranslatorSlovak : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Register dátových štruktúr"; } @@ -455,7 +455,7 @@ class TranslatorSlovak : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dátové štruktúry"; } @@ -877,7 +877,7 @@ class TranslatorSlovak : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dátové položky"; } diff --git a/src/translator_sr.h b/src/translator_sr.h index 05e8018..f5f132f 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -91,7 +91,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentacija polja"; } @@ -158,7 +158,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Spisak struktura"; } @@ -175,7 +175,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Sva polja struktura"; } @@ -188,7 +188,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + //if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) //{ // return "Članovi datoteke"; // TODO: translate me //} @@ -227,7 +227,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Spisak struktura sa kratkim opisima:"; } @@ -245,7 +245,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 { result+="dokumentovanih "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="članova struktura/unija"; } @@ -256,7 +256,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 result+=" sa vezama ka "; if (extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="dokumentaciji svakog polja strukture/unije:"; } @@ -267,7 +267,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="strukturama/unijama kojima pripadaju:"; } @@ -285,7 +285,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 QCString result="Spisak svih "; if (!extractAll) result+="dokumentovanih "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funkcija, promenljivih, makro zamena, nabrajanja i definicija tipa"; } @@ -336,7 +336,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Spisak struktura/unija"; } @@ -363,7 +363,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentacija stuktura/unija"; } @@ -466,7 +466,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Strukture i unije"; } @@ -874,7 +874,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Polja"; } @@ -1069,7 +1069,7 @@ class TranslatorSerbian : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Strukture i unije"; } diff --git a/src/translator_sv.h b/src/translator_sv.h index d491632..88fffd9 100644 --- a/src/translator_sv.h +++ b/src/translator_sv.h @@ -22,6 +22,7 @@ Samuel Hägglund <sahag96@ite.mh.se> Xet Erixon <xet@xeqt.com> Mikael Hallin <mikaelhallin@yahoo.se> 2003-07-28 Björn Palmqvist <bjorn@aidium.se> 2014-02-01 +Magnus Österlund <magnus.osterlund@capgemini.com> 2016-09-12 ================================================================================== Uppdateringar. 1999/04/29 @@ -67,6 +68,53 @@ Problem! Skicka gärna synpunkter. 2015/01/09 * Uppdaterat den till senaste versionen 1.8.9.1 +2015/09/12 +* Fixat lite särksirvningar och inkonsekvenser +=================================================================================== + Ordlista +=================================================================================== + ENGELSKA SVENSKA +* Attribute Attribut +* Category Lategori +* Class Klass +* Compound Sammansatt +* Deprecated Föråldrad +* Directory Katalog +* Enum Enum +* Enumeration Egenuppräknande +* Event Händelse +* Exception Undantag +* Field Fält +* Friend Vän +* Function Funktion +* Inherited Ärvd +* Interface Gränssnitt +* Macro Makro +* Member Medlem +* Member Data Medlemsdata +* Member function Medlemsfunktion +* Module Module +* Namespace Namnrymd +* Package Paket +* Postcondition Postcondition +* Precondition Precondition +* Private Privat +* Propertie Egenskap +* Protected Skyddad +* Protocol Protokoll +* Public Publik +* Service Tjänst +* Signal Signal +* Slot Slot //Ge gärna exempel på bättre översättning +* Static Statisk +* Struct Struktur +* Subprogram Underprogram +* Subroutine Subrutin +* Template Mall +* Typedef Typdefinition +* Union Union +* Variable Variabel +=================================================================================== */ #ifndef TRANSLATOR_SE_H @@ -98,29 +146,38 @@ class TranslatorSwedish : public Translator return "\\usepackage[swedish]{babel}\n"; } + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() { return "Besläktade funktioner"; } + /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() { return "(Observera att dessa inte är medlemsfunktioner)"; } + /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() { return "Detaljerad beskrivning"; } + /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() { return "Dokumentation av typdefinierade medlemmar"; } + /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() { return "Dokumentation av egenuppräknande medlemmar"; } + /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() { return "Dokumentation av medlemsfunktioner"; } + /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "Fält dokumentation"; + return "Dokumentation av fält"; } else { @@ -128,21 +185,29 @@ class TranslatorSwedish : public Translator } } + /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() { return "Mer..."; } + /*! put in the class documentation */ virtual QCString trListOfAllMembers() { return "Lista över alla medlemmar"; } + /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() { return "Medlemslista"; } + /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() { return "Det här är en fullständig lista över medlemmar för "; } + /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() { return " med alla ärvda medlemmar."; } + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Automatiskt skapad av Doxygen"; if (s) result+=(QCString)" för "+s; @@ -150,55 +215,64 @@ class TranslatorSwedish : public Translator return result; } + /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { return "enum namn"; } + { return "enum-namn"; } + /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "enum värde"; } + { return "enum-värde"; } + /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() { return "definierad i"; } -/* - QCString trVerbatimText(const char *f) - { return (QCString)"Detta är den ordagranna texten från inkluderingsfilen "+f; } -*/ + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \\group command). + */ virtual QCString trModules() { return "Moduler"; } + /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() { return "Klasshierarki"; } + /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } else { - return "Sammansatt klasslista"; + return "Klasslista"; } } + /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() { return "Fillista"; } + /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "Data fält"; + return "Datafält"; } else { - return "Sammansatta klassmedlemmar"; + return "Klassmedlemmar"; } } + /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globala symboler"; } @@ -208,20 +282,25 @@ class TranslatorSwedish : public Translator } } + /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Besläktade sidor"; } + { return "Relaterade sidor"; } + /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() { return "Exempel"; } + /*! This is put above each page as a link to the search engine. */ virtual QCString trSearch() { return "Sök"; } + /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() { return "Denna lista över arv är grovt, men inte helt, " "sorterad i alfabetisk ordning:"; } + /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { QCString result="Här följer en lista över alla "; @@ -230,10 +309,11 @@ class TranslatorSwedish : public Translator return result; } + /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Här följer datastrukturerna med korta beskrivningar:"; } @@ -252,7 +332,7 @@ class TranslatorSwedish : public Translator { result+="dokumenterade "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struktur- och unions-fält"; } @@ -263,9 +343,9 @@ class TranslatorSwedish : public Translator result+=" med länkar till "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - result+="struktur/unions-dokumentationen för varje fält:"; + result+="struktur/union-dokumentationen för varje fält:"; } else { @@ -274,7 +354,7 @@ class TranslatorSwedish : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+=" strukturerna/unionerna de tillhör:"; } @@ -286,12 +366,13 @@ class TranslatorSwedish : public Translator return result; } + /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Här följer en lista över alla "; if (!extractAll) result+="dokumenterade "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funktioner, variabler, definitioner, enumerationer " "och typdefinitioner"; @@ -302,101 +383,169 @@ class TranslatorSwedish : public Translator } result+= " med länkar till "; if (extractAll) - result+= "filerna som de tillhör:"; + result+= "filerna de tillhör:"; else result+= "dokumentationen:"; return result; } + /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() { return "Här följer en lista med alla exempel:"; } + /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Här följer en lista över alla besläktade dokumentationssidor:";} + { return "Här följer en lista över alla relaterade dokumentationssidor:";} + /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() { return "Här följer en lista över alla moduler:"; } + // index titles (the project name is prepended for these) + + /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() { return "Dokumentation"; } + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ virtual QCString trModuleIndex() { return "Modulindex"; } + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ virtual QCString trHierarchicalIndex() - { return "Hierarkiskt Index"; } + { return "Hierarkiskt index"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) + { return "Index över datastrukturer"; - } else { - return "Index över sammensatta typer"; + } + else + { + return "Klassindex"; } } + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ virtual QCString trFileIndex() { return "Filindex"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ virtual QCString trModuleDocumentation() - { return "Dokumentation över moduler"; } + { return "Moduldokumentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Dokumentation över datastrukturer"; } else { - return "Documentation över klasser"; + return "Klassdokumentation"; } } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ virtual QCString trFileDocumentation() - { return "Dokumentation över filer"; } + { return "Fildokumentation"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ virtual QCString trExampleDocumentation() - { return "Dokumentation över exempel"; } + { return "Exempeldokumentation"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ virtual QCString trPageDocumentation() - { return "Dokumentation av sidor"; } + { return "Sid-dokumentation"; } + /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() { return "Referensmanual"; } + /*! This is used in the documentation of a file as a header before the + * list of defines + */ virtual QCString trDefines() - { return "Definitioner"; } + { return "Makron"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ virtual QCString trTypedefs() { return "Typdefinitioner"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ virtual QCString trEnumerations() { return "Egenuppräknande typer"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ virtual QCString trFunctions() { return "Funktioner"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ virtual QCString trVariables() { return "Variabler"; } + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ virtual QCString trEnumerationValues() { return "Egenuppräknade typers värden"; } + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ virtual QCString trDefineDocumentation() - { return "Dokumentation över definitioner"; } + { return "Dokumentation över makrodefinitioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ virtual QCString trTypedefDocumentation() { return "Dokumentation över typdefinitioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ virtual QCString trEnumerationTypeDocumentation() { return "Dokumentation över egenuppräknande typer"; ; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ virtual QCString trFunctionDocumentation() { return "Dokumentation över funktioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ virtual QCString trVariableDocumentation() { return "Dokumentation över variabler"; } @@ -405,16 +554,19 @@ class TranslatorSwedish : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } else { - return "Sammansättning"; + return "Klasser"; } } + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ virtual QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Skapad "+date; @@ -423,43 +575,57 @@ class TranslatorSwedish : public Translator return result; } + /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { return (QCString)"Klassdiagram för "+clName; } + /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() { return "Endast för internt bruk."; } + /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() { return "Varning"; } + /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() { return "Version"; } + /*! this text is generated when the \\date command is used. */ virtual QCString trDate() { return "Datum"; } + /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() { return "Returnerar"; } + /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() { return "Se även"; } + /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() { return "Parametrar"; } + /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() { return "Undantag"; } + /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Skapad av"; } +////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() { return "Namnrymdslista"; } + /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Här är en lista över alla "; @@ -468,6 +634,9 @@ class TranslatorSwedish : public Translator return result; } + /*! used in the class documentation as a header before the list of all + * friends of a class + */ virtual QCString trFriends() { return "Vänner"; } @@ -476,17 +645,18 @@ class TranslatorSwedish : public Translator ////////////////////////////////////////////////////////////////////////// virtual QCString trRelatedFunctionDocumentation() - { return "Vänners och besläktade funktioners dokumentation"; } + { return "Dokumenation av vänners och relaterade funktioner"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// + /*! used as the title of the HTML page of a class/struct/union */ virtual QCString trCompoundReference(const char *clName, ClassDef::CompoundType compType, bool isTemplate) { - QCString result=(QCString)clName+" "; + QCString result=(QCString)clName; switch(compType) { case ClassDef::Class: result+=" klass"; break; @@ -498,11 +668,12 @@ class TranslatorSwedish : public Translator case ClassDef::Exception: result+=" undantag"; break; default: break; } - if (isTemplate) result+="template"; - result+="referens"; + if (isTemplate) result+="-mall"; + result+=" referens"; return result; } + /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { QCString result=fileName; @@ -510,6 +681,7 @@ class TranslatorSwedish : public Translator return result; } + /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; @@ -518,27 +690,29 @@ class TranslatorSwedish : public Translator } virtual QCString trPublicMembers() - { return "Publika medlemmar"; } + { return "Publika medlemsfunktioner"; } virtual QCString trPublicSlots() { return "Publika slots"; } virtual QCString trSignals() { return "Signaler"; } virtual QCString trStaticPublicMembers() - { return "Statiska publika medlemmar"; } + { return "Statiska publika medlemmsfunktioner"; } virtual QCString trProtectedMembers() - { return "Skyddade medlemmar"; } + { return "Skyddade medlemmsfunktioner"; } virtual QCString trProtectedSlots() { return "Skyddade slots"; } virtual QCString trStaticProtectedMembers() - { return "Statiska skyddade medlemmar"; } + { return "Statiska skyddade medlemmsfunktioner"; } virtual QCString trPrivateMembers() - { return "Privata medlemmar"; } + { return "Privata medlemmsfunktioner"; } virtual QCString trPrivateSlots() { return "Privata slots"; } virtual QCString trStaticPrivateMembers() - { return "Statiska privata medlemmar"; } - // end of member sections + { return "Statiska privata medlemmsfunktioner"; } + /*! this function is used to produce a comma-separated list of items. + * use generateMarker(i) to indicate where item i should be put. + */ virtual QCString trWriteList(int numEntries) { // this function is used to produce a comma-separated list of items. @@ -563,24 +737,39 @@ class TranslatorSwedish : public Translator return result; } + /*! used in class documentation to produce a list of base classes, + * if class diagrams are disabled. + */ virtual QCString trInheritsList(int numEntries) // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { return "Ärver "+trWriteList(numEntries)+"."; } + + /*! used in class documentation to produce a list of super classes, + * if class diagrams are disabled. + */ virtual QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { return "Ärvd av "+trWriteList(numEntries)+"."; } + + /*! used in member documentation blocks to produce a list of + * members that are hidden by this one. + */ virtual QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { return "Återskapad från "+trWriteList(numEntries)+"."; } + + /*! used in member documentation blocks to produce a list of + * all member that overwrite the implementation of this member. + */ virtual QCString trReimplementedInList(int numEntries) { // used in member documentation blocks to produce a list of @@ -588,8 +777,11 @@ class TranslatorSwedish : public Translator return "Återskapad i "+trWriteList(numEntries)+"."; } + /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() { return "Namnrymdsmedlemmar"; } + + /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { QCString result="Här är en lista över alla "; @@ -601,13 +793,19 @@ class TranslatorSwedish : public Translator result+="de namnrymder de tillhör:"; return result; } - + /*! This is used in LaTeX as the title of the chapter with the + * index of all namespaces. + */ virtual QCString trNamespaceIndex() { return "Namnrymdsindex"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all namespaces. + */ virtual QCString trNamespaceDocumentation() { return "Namnrymd-dokumentation"; } - ////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 ////////////////////////////////////////////////////////////////////////// @@ -631,16 +829,16 @@ class TranslatorSwedish : public Translator QCString result=(QCString)"Dokumentationen för "; switch(compType) { - case ClassDef::Class: result+="denna klass "; break; - case ClassDef::Struct: result+="denna strukt "; break; - case ClassDef::Union: result+="denna union "; break; - case ClassDef::Interface: result+="detta gränssnitt "; break; + case ClassDef::Class: result+="denna klass"; break; + case ClassDef::Struct: result+="denna strukt"; break; + case ClassDef::Union: result+="denna union"; break; + case ClassDef::Interface: result+="detta gränssnitt"; break; case ClassDef::Protocol: result+="detta protokoll"; break; case ClassDef::Category: result+="denna kategori"; break; - case ClassDef::Exception: result+="detta undantag "; break; + case ClassDef::Exception: result+="detta undantag"; break; default: break; } - result+="var genererad från följande fil"; + result+=" var genererad från följande fil"; if (single) result+=":"; else result+="er:"; return result; } @@ -695,49 +893,41 @@ class TranslatorSwedish : public Translator { return (QCString)"Samarbetsdiagram för "+clName+":"; } - /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { return (QCString)"Include-beroendediagram för "+fName+":"; } - /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { return "Dokumentation av konstruktorer och destruktorer"; } - /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { return "Gå till denna fils källkod."; } - /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { return "Gå till denna fils dokumentation."; } - /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Förhandsvillkor"; + return "Precondition"; } - /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Resultat"; //"Postcondition"; + return "Postcondition"; } - /*! Text for the \\invariant command */ virtual QCString trInvariant() { return "Invariant"; } - /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { @@ -748,7 +938,6 @@ class TranslatorSwedish : public Translator { return "källkod"; } - virtual QCString trGraphicalHierarchy() { return "Grafisk klasshierarki"; @@ -780,7 +969,7 @@ class TranslatorSwedish : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datafält"; } @@ -830,7 +1019,7 @@ class TranslatorSwedish : public Translator /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Att-göra lista"; + return "Att göra-lista"; } ////////////////////////////////////////////////////////////////////////// @@ -852,7 +1041,7 @@ class TranslatorSwedish : public Translator virtual QCString trInclByDepGraph() { return "Den här grafen visar vilka filer som direkt eller " - "indirekt inkluderar denna filen."; + "indirekt inkluderar denna filen:"; } virtual QCString trSince() { @@ -868,7 +1057,6 @@ class TranslatorSwedish : public Translator { return "Grafförklaring"; } - /*! page explaining how the dot graph's should be interpreted * The %A in the text below are to prevent link to classes called "A". */ @@ -877,25 +1065,25 @@ class TranslatorSwedish : public Translator return "Den här sidan förklarar hur man ska tolka de grafer som doxygen " "genererar.<p>\n" - "Tag följande exempel:\n" + "Överväg följande exempel:\n" "\\code\n" - "/*! Osynlig klass på grund av trunkering */\n" + "/*! Osynlig klass på grund av trunkering */\n" "class Invisible { };\n\n" - "/*! Trunkerad klass, ärvningsrelationen är dold */\n" + "/*! Trunkerad klass, ärvningsrelationen är dold */\n" "class Truncated : public Invisible { };\n\n" - "/* Klass utan doxygen-kommentarer */\n" + "/* Klass utan doxygen-kommentarer */\n" "class Undocumented { };\n\n" - "/*! Klass som ärvs med publikt arv */\n" + "/*! Klass som ärvs med publikt arv */\n" "class PublicBase : public Truncated { };\n\n" "/*! En template-klass */\n" "template<class T> class Templ { };\n\n" - "/*! Klass som ärvs med skyddat arv */\n" + "/*! Klass som ärvs med skyddat arv */\n" "class ProtectedBase { };\n\n" - "/*! Klass som ärvs med privat arv */\n" + "/*! Klass som ärvs med privat arv */\n" "class PrivateBase { };\n\n" - "/*! Klass som används av Inherited klassen */\n" + "/*! Klass som används av den ärvda klassen */\n" "class Used { };\n\n" - "/*! Super klassen som ärver ett antal andra klasser */\n" + "/*! Super-klass som ärver ett antal andra klasser */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -906,36 +1094,36 @@ class TranslatorSwedish : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Detta resulterar i att följande graf genereras:" + "Detta resulterar i att följande graf genereras:" "<p><center><img alt=\"\" src=\"graph_legend."+getDotImageExtension()+"\"></center></p>\n" "<p>\n" - "Rektanglarna i den ovanstående grafen har följande betydelser:\n" + "Rektanglarna i den ovanstående grafen har följande betydelser:\n" + "</p>\n" "<ul>\n" - "<li>%En fylld grå rektangel representerar den strukt eller klass " - "som har genererat grafen.</li>\n" - "<li>%En rektangel med svart kant symboliserar en dokumenterad strukt eller klass.</li>\n" - "<li>%En rektangel med grå kant symboliserar en odokumenterad strukt eller klass.</li>\n" - "<li>%En klass med röd kant symboliserar en strukt eller klass där " - "alla dess relationer inte visas. %En graf trunkeras om den inte får " - "plats inom de givna gränserna.</li>\n" + "<li>%En fylld grå rektangel representerar den strukt eller klass " + "som har genererat grafen.</li>\n" + "<li>%En rektangel med svart kant symboliserar en dokumenterad strukt eller klass.</li>\n" + "<li>%En rektangel med grå kant symboliserar en odokumenterad strukt eller klass.</li>\n" + "<li>%En klass med röd kant symboliserar en strukt eller klass där " + "alla dess relationer inte visas. %En graf trunkeras om den inte får " + "plats inom de givna gränserna.</li>\n" "</ul>\n" "<p>\n" - "Pilarna har följande betydelser:\n" + "Pilarna har följande betydelser:\n" "</p>\n" "<ul>\n" - "<li>%En mörkblå pil används för att visualisera en publik arvrelation " - "mellan två klasser.</li>\n" - "<li>%En mörkgrön pil används för en skyddad arvsrelation.</li>\n" - "<li>%En mörkröd pil används för en privat arvsrelation.\n</li>" - "<li>%En sträckad lila pil används om en klass är innesluten eller " - "använd av en annan klass. Vid pilen står namnet på den eller de " - "variabler som klassen pilen pekar på kommer åt.</li>\n" - "<li>%En sträckad gul pil symboliserar förhållandet mellan en " - "template-instans och template-klassen, som den instantierades från.\n" - "Vid pilen står instansens template-parametrar.</li>\n" + "<li>%En mörkblå pil används för att visualisera en publik arvrelation " + "mellan två klasser.</li>\n" + "<li>%En mörkgrön pil används för en skyddad arvsrelation.</li>\n" + "<li>%En mörkröd pil används för en privat arvsrelation.\n</li>" + "<li>%En sträckad lila pil används om en klass är innesluten eller " + "använd av en annan klass. Vid pilen står namnet på den eller de " + "variabler som klassen pilen pekar på kommer åt.</li>\n" + "<li>%En sträckad gul pil symboliserar förhållandet mellan en " + "template-instans och template-klassen, som den instantierades från.\n" + "Vid pilen står instansens template-parametrar.</li>\n" "</ul>\n"; } - /*! text for the link to the legend page */ virtual QCString trLegend() { @@ -979,7 +1167,7 @@ class TranslatorSwedish : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Datastrukturer"; } @@ -1035,8 +1223,10 @@ class TranslatorSwedish : public Translator ////////////////////////////////////////////////////////////////////////// /*! Used as ansicpg for RTF file - * (used table extract:) - * <pre> + * + * The following table shows the correlation of Charset name, Charset Value and + * <pre> + * Codepage number: * Charset Name Charset Value(hex) Codepage number * ------------------------------------------------------ * ANSI_CHARSET 0 (x00) 1252 @@ -1047,7 +1237,10 @@ class TranslatorSwedish : public Translator return "1252"; } - /*! Used as ansicpg for RTF fcharset */ + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ virtual QCString trRTFCharSet() { return "0"; @@ -1098,7 +1291,7 @@ class TranslatorSwedish : public Translator */ virtual QCString trGroup(bool first_capital, bool singular) { - QCString result((first_capital ? "Grupp" : "grupp")); + QCString result((first_capital ? "Modul" : "modul")); if (!singular) result+="er"; return result; } @@ -1220,7 +1413,7 @@ class TranslatorSwedish : public Translator /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return "Händelse Dokumentation"; + return "Händelsedokumentation"; } ////////////////////////////////////////////////////////////////////////// @@ -1231,35 +1424,35 @@ class TranslatorSwedish : public Translator */ virtual QCString trPackageTypes() { - return "Paket typer"; + return "Pakettyper"; } /*! Used as a heading for a list of Java class functions with package * scope. */ virtual QCString trPackageMembers() { - return "Paket funktioner"; + return "Paketfunktioner"; } /*! Used as a heading for a list of static Java class functions with * package scope. */ virtual QCString trStaticPackageMembers() { - return "Statiska paket funktioner"; + return "Statiska paketfunktioner"; } /*! Used as a heading for a list of Java class variables with package * scope. */ virtual QCString trPackageAttribs() { - return "Paket attribut"; + return "Paketattribut"; } /*! Used as a heading for a list of static Java class variables with * package scope. */ virtual QCString trStaticPackageAttribs() { - return "Statiska paket attribut"; + return "Statiska paketattribut"; } ////////////////////////////////////////////////////////////////////////// @@ -1276,7 +1469,7 @@ class TranslatorSwedish : public Translator /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Här är anropnings diagrammet för den här funktionen:"; + return "Här är anropsdiagrammet för den här funktionen:"; } ////////////////////////////////////////////////////////////////////////// @@ -1350,7 +1543,7 @@ class TranslatorSwedish : public Translator { return "Katalogdokumentation"; } /*! This is used as the title of the directory index and also in the - * Quick links of a HTML page, to link to the directory hierarchy. + * Quick links of an HTML page, to link to the directory hierarchy. */ virtual QCString trDirectories() { return "Kataloger"; } @@ -1370,7 +1563,7 @@ class TranslatorSwedish : public Translator { QCString result=dirName; result+=" Katalogreferens"; return result; } /*! This returns the word directory with or without starting capital - * (\a first_capital) and in sigular or plural form (\a singular). + * (\a first_capital) and in singular or plural form (\a singular). */ virtual QCString trDir(bool first_capital, bool singular) { @@ -1401,16 +1594,14 @@ class TranslatorSwedish : public Translator /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Här är katalog-grafen för denna funktion:"; + return "Här är anropsgrafen för denna funktion:"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() - { - return "Uppräknings-dokumentation"; - } + { return "Uppräknings-dokumentation"; } ////////////////////////////////////////////////////////////////////////// // new since 1.5.4 (mainly for Fortran) @@ -1418,7 +1609,7 @@ class TranslatorSwedish : public Translator /*! header that is put before the list of member subprograms (Fortran). */ virtual QCString trMemberFunctionDocumentationFortran() - { return "Memlems-function/Subroutins Dokumentation"; } + { return "Dokumentation för memlemsfunktion/subrutin"; } /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() @@ -1426,7 +1617,7 @@ class TranslatorSwedish : public Translator /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() - { return "Data fält"; } + { return "Datafält"; } /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() @@ -1435,16 +1626,16 @@ class TranslatorSwedish : public Translator /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) { - QCString result="Här är en lista av alla "; + QCString result="Här är en lista över alla "; if (!extractAll) { result+="dokumenterade "; } - result+="datatyps medlemmar"; + result+="datatypsmedlemmar"; result+=" med länkar till "; if (!extractAll) { - result+="datastrukturs documentation för varje medlem"; + result+="dokumentation för varje medlem"; } else { @@ -1457,25 +1648,25 @@ class TranslatorSwedish : public Translator * annotated compound index (Fortran). */ virtual QCString trCompoundIndexFortran() - { return "Datatyps Index"; } + { return "Datatypsindex"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all data types (Fortran). */ virtual QCString trTypeDocumentation() - { return "Dataryps Dokumentation"; } + { return "Datatypsdokumentation"; } /*! This is used in the documentation of a file as a header before the * list of (global) subprograms (Fortran). */ virtual QCString trSubprograms() - { return "Funktions/Subroutins"; } + { return "Funktioner/subrutiner"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for subprograms (Fortran) */ virtual QCString trSubprogramDocumentation() - { return "Funktion/Subroutin Dokumentation"; } + { return "Dokumentation för funktion/subrutin"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds (Fortran) @@ -1490,7 +1681,7 @@ class TranslatorSwedish : public Translator /*! used as an introduction to the modules list (Fortran) */ virtual QCString trModulesListDescription(bool extractAll) { - QCString result="Här är en lista på alla "; + QCString result="Här är en lista över alla "; if (!extractAll) result+="dokumenterade "; result+="moduler med en kort beskrivning:"; return result; @@ -1513,31 +1704,31 @@ class TranslatorSwedish : public Translator case ClassDef::Exception: result+=" Undantag"; break; default: break; } - if (isTemplate) result+=" Mall"; - result+=" Referens"; + if (isTemplate) result+="-mall"; + result+=" referens"; return result; } /*! used as the title of the HTML page of a module (Fortran) */ virtual QCString trModuleReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Modul Referens"; + result+=" Modulreferens"; return result; } /*! This is put above each page as a link to all members of modules. (Fortran) */ virtual QCString trModulesMembers() - { return "Modul Medlemmar"; } + { return "Modulmedlemmar"; } /*! This is an introduction to the page with all modules members (Fortran) */ virtual QCString trModulesMemberDescription(bool extractAll) { - QCString result="Här är en lista på alla "; + QCString result="Här är en lista över alla "; if (!extractAll) result+="documented "; - result+="modul medlemmar med länkar till "; + result+="modulmedlemmar med länkar till "; if (extractAll) { - result+="modul dokumentationen för varje medlem:"; + result+="moduldokumentationen för varje medlem:"; } else { @@ -1550,7 +1741,7 @@ class TranslatorSwedish : public Translator * index of all modules (Fortran). */ virtual QCString trModulesIndex() - { return "Modul Index"; } + { return "Modulindex"; } /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names @@ -1558,8 +1749,11 @@ class TranslatorSwedish : public Translator */ virtual QCString trModule(bool first_capital, bool singular) { - return createNoun(first_capital, singular, "modul", "er"); + QCString result((first_capital ? "Modul" : "modul")); + if (!singular) result+="er"; + return result; } + /*! This is put at the bottom of a module documentation page and is * followed by a list of files that were used to generate the page. */ @@ -1567,37 +1761,41 @@ class TranslatorSwedish : public Translator bool single) { // single is true implies a single file - QCString result=(QCString)"Dokumentationen för denna "; + QCString result=(QCString)"Dokumentationen för "; switch(compType) { - case ClassDef::Class: result+="modul"; break; - case ClassDef::Struct: result+="typ"; break; - case ClassDef::Union: result+="union"; break; - case ClassDef::Interface: result+="gränssnitt"; break; - case ClassDef::Protocol: result+="protokoll"; break; - case ClassDef::Category: result+="kategori"; break; - case ClassDef::Exception: result+="undantag"; break; + case ClassDef::Class: result+="denna modul"; break; + case ClassDef::Struct: result+="denna typ"; break; + case ClassDef::Union: result+="denna union"; break; + case ClassDef::Interface: result+="detta gränssnitt"; break; + case ClassDef::Protocol: result+="detta protokoll"; break; + case ClassDef::Category: result+="denna kategori"; break; + case ClassDef::Exception: result+="detta undantag"; break; default: break; } result+=" genererades från följade fil"; if (single) result+=":"; else result+="er:"; return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. */ virtual QCString trType(bool first_capital, bool singular) { - return createNoun(first_capital, singular, "typ", "er"); + QCString result((first_capital ? "Typ" : "typ")); + if (!singular) result+="er"; + return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. */ virtual QCString trSubprogram(bool first_capital, bool /*singular*/) { - QCString result((first_capital ? "Subprogram" : "subprogram")); + QCString result((first_capital ? "Underprogram" : "underprogram")); return result; } @@ -1606,7 +1804,7 @@ class TranslatorSwedish : public Translator { return "Typbegränsningar"; } - + ////////////////////////////////////////////////////////////////////////// // new since 1.6.0 (mainly for the new search engine) ////////////////////////////////////////////////////////////////////////// @@ -1626,7 +1824,7 @@ class TranslatorSwedish : public Translator /*! Label used for search results in the global namespace */ virtual QCString trGlobalNamespace() { - return "Globalnamnrymd"; + return "Global namnrymd"; } /*! Message shown while searching */ @@ -1678,7 +1876,7 @@ class TranslatorSwedish : public Translator bool includeTime) { static const char *days[] = { "Mån","Tis","Ons","Tor","Fre","Lör","Sön" }; - static const char *months[] = { "Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; + static const char *months[] = { "Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec" }; QCString sdate; sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year); if (includeTime) @@ -1716,7 +1914,7 @@ class TranslatorSwedish : public Translator /*! Section header for list of template parameters */ virtual QCString trTemplateParameters() - { return "Mall Parametrar"; } + { return "Mall-parametrar"; } /*! Used in dot graph when UML_LOOK is enabled and there are many fields */ virtual QCString trAndMore(const QCString &number) @@ -1732,7 +1930,7 @@ class TranslatorSwedish : public Translator /*! Header of a Java enum page (Java enums are represented as classes). */ virtual QCString trEnumReference(const char *name) - { return QCString(name)+" Enum Referens"; } + { return QCString(name)+" Enum-referens"; } /*! Used for a section containing inherited members */ virtual QCString trInheritedFrom(const char *members,const char *what) @@ -1742,7 +1940,7 @@ class TranslatorSwedish : public Translator * base class(es) */ virtual QCString trAdditionalInheritedMembers() - { return "Ytterliga Ärvda Medlemmar"; } + { return "Ytterliga ärvda medlemmar"; } ////////////////////////////////////////////////////////////////////////// // new since 1.8.2 @@ -1755,7 +1953,7 @@ class TranslatorSwedish : public Translator virtual QCString trPanelSynchronisationTooltip(bool enable) { QCString opt = enable ? "aktivera" : "inaktivera"; - return "klicka för att "+opt+" panel synkronisering"; + return "klicka för att "+opt+" panelsynkronisering"; } /*! Used in a method of an Objective-C class that is declared in a @@ -1813,21 +2011,21 @@ class TranslatorSwedish : public Translator /** old style UNO IDL services: implemented interfaces */ virtual QCString trInterfaces() - { return "Exporterade Interface"; } + { return "Exporterade interface"; } /** old style UNO IDL services: inherited services */ virtual QCString trServices() - { return "Inkuderade Tjänster"; } + { return "Inkuderade tjänster"; } /** UNO IDL constant groups */ virtual QCString trConstantGroups() - { return "Konstant Grupper"; } + { return "Konstantgrupper"; } /** UNO IDL constant groups */ virtual QCString trConstantGroupReference(const char *namespaceName) { QCString result=namespaceName; - result+=" Konstant Grupp Referens"; + result+=" Referens till konstantgrupp"; return result; } /** UNO IDL service page title */ @@ -1841,7 +2039,7 @@ class TranslatorSwedish : public Translator virtual QCString trSingletonReference(const char *sName) { QCString result=(QCString)sName; - result+=" Singleton Referens"; + result+=" Singleton-referens"; return result; } /** UNO IDL service page */ @@ -1863,20 +2061,6 @@ class TranslatorSwedish : public Translator return result; } -/*---------- For internal use: ----------------------------------------*/ - protected: - /*! For easy flexible-noun implementation. - * \internal - */ - QCString createNoun(bool first_capital, bool singular, - const char* base, const char* plurSuffix) - { - QCString result(base); - if (first_capital) result.at(0) = toupper(result.at(0)); - if (!singular) result+=plurSuffix; - return result; - } - }; diff --git a/src/translator_tr.h b/src/translator_tr.h index 26ae08f..d18f800 100644 --- a/src/translator_tr.h +++ b/src/translator_tr.h @@ -103,7 +103,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Alan Dokümantasyonu"; } @@ -170,7 +170,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Yapıları"; } @@ -187,7 +187,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Alanları"; } @@ -200,7 +200,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globaller"; } @@ -241,7 +241,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Kısa tanımlarıyla birlikte veri yapıları:"; } @@ -260,7 +260,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 { result+="dokümante edilmiş "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="yapı(struct) ve birleşim(union) yapılarını içerir"; } @@ -271,7 +271,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 result+=" ve "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="her alanı yapı(struct)/birleşim(union) dokümantasyonuna bağlar:"; } @@ -282,7 +282,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="ait olduğu yapı(struct)/birleşime(union) bağlar:"; } @@ -300,7 +300,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 QCString result="Bu liste tüm "; if (!extractAll) result+="dokümante edilmiş "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="fonksiyonları, değişkenleri, makroları, enümerasyonları ve typedef\'leri içerir"; } @@ -351,7 +351,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Yapıları İndeksi"; } @@ -378,7 +378,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Yapıları Dokümantasyonu"; } @@ -481,7 +481,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Yapıları"; } @@ -890,7 +890,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Alanları"; } @@ -1085,7 +1085,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veri Yapıları"; } diff --git a/src/translator_tw.h b/src/translator_tw.h index 79bf6f5..26a6db6 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -104,7 +104,7 @@ class TranslatorChinesetraditional : public Translator /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "欄位說明文件"; } @@ -171,7 +171,7 @@ class TranslatorChinesetraditional : public Translator /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料結構"; } @@ -188,7 +188,7 @@ class TranslatorChinesetraditional : public Translator /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料欄位"; } @@ -201,7 +201,7 @@ class TranslatorChinesetraditional : public Translator /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "全域資料"; } @@ -241,7 +241,7 @@ class TranslatorChinesetraditional : public Translator virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "這是附帶簡略說明的資料結構:"; } @@ -260,7 +260,7 @@ class TranslatorChinesetraditional : public Translator { result+="文件化過"; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="結構及聯合型態欄位"; } @@ -271,7 +271,7 @@ class TranslatorChinesetraditional : public Translator result+=", 並且帶有連結至"; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="每個欄位的結構/聯合型態說明文件:"; } @@ -282,7 +282,7 @@ class TranslatorChinesetraditional : public Translator } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="這些結構/聯合型態所屬:"; } @@ -300,7 +300,7 @@ class TranslatorChinesetraditional : public Translator QCString result="這是全部"; if (!extractAll) result+="文件化的"; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="函式,變數,定義,列舉,及型態定義"; } @@ -352,7 +352,7 @@ class TranslatorChinesetraditional : public Translator */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料結構索引"; } @@ -379,7 +379,7 @@ class TranslatorChinesetraditional : public Translator */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料結構說明文件"; } @@ -488,7 +488,7 @@ class TranslatorChinesetraditional : public Translator */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料結構"; } @@ -895,7 +895,7 @@ class TranslatorChinesetraditional : public Translator } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料欄位"; } @@ -1091,7 +1091,7 @@ class TranslatorChinesetraditional : public Translator /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "資料結構"; } diff --git a/src/translator_ua.h b/src/translator_ua.h index 964285b..eac14aa 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -61,7 +61,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля" ; } @@ -136,7 +136,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури даних" ; } @@ -153,7 +153,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля структур" ; } @@ -200,7 +200,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури даних з коротким описом." ; } @@ -215,20 +215,20 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 { QCString result="Список всіх "; if(!extractAll) result+="документоаних "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="елементів структур даних з посиланням на "; else result+="елементів класів даних з посиланням на "; if(extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result+="документацію по структурі/об'єднанню кожного елементу."; else result+="документацію по класу кожного елементу."; } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) result += "відповідні структури"; else result += "відповідні класи"; @@ -243,7 +243,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 QCString result="Список всіх "; if (!extractAll) result+="документованих "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="функцій, змінних, макровизначень, " "переліків і визначень типів"; @@ -295,7 +295,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Алфавітний покажчик структур даних" ; } @@ -322,7 +322,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури даних" ; } @@ -425,7 +425,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури даних" ; } @@ -867,7 +867,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Поля даних" ; } @@ -1060,7 +1060,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Структури даних" ; } @@ -1135,7 +1135,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_8_4 */ virtual QCString trClass(bool first_capital, bool singular) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { QCString result((first_capital ? "Структури даних" : "структури даних")); return result; diff --git a/src/translator_vi.h b/src/translator_vi.h index b2bbdd7..a0046b0 100644 --- a/src/translator_vi.h +++ b/src/translator_vi.h @@ -110,7 +110,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Thông tin về trường"; } @@ -177,7 +177,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Cấu trúc cơ sở dữ liệu (Data Structures)"; } @@ -194,7 +194,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Các trường dữ liệu"; } @@ -207,7 +207,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Toàn cục"; } @@ -248,7 +248,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Đây là cấu trúc cơ sở dữ liệu với mô tả tóm tắt:"; } @@ -267,7 +267,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 { result+="(đã được mô tả) "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct và union fields"; } @@ -278,7 +278,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 result+=" cùng với các các liên kết đến "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="Thông tin về struct/union cho từng trường:"; } @@ -289,7 +289,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="các structures/unions thuộc:"; } @@ -307,7 +307,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 QCString result="Danh sách tất cả các "; if (!extractAll) result+="(đã được mô tat) "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="functions, variables, defines, enums, và typedefs"; } @@ -358,7 +358,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Index cấu trúc cơ sở dữ liệu"; } @@ -385,7 +385,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Thông tin về cấu trúc cơ sở dữ liệu"; } @@ -488,7 +488,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Cấu trúc cơ sở dữ liệu"; } @@ -895,7 +895,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "các trường đữ liệu"; } @@ -1090,7 +1090,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Cấu trúc dữ liệu"; } diff --git a/src/translator_za.h b/src/translator_za.h index ca94e7a..dd5ddf9 100644 --- a/src/translator_za.h +++ b/src/translator_za.h @@ -91,7 +91,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Veld Dokumentasie"; } @@ -158,7 +158,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Strukture"; } @@ -175,7 +175,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Velde"; } @@ -188,7 +188,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Globals"; } @@ -229,7 +229,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 virtual QCString trCompoundListDescription() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return " Data strukture met kort beskrywings:"; } @@ -248,7 +248,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 { result+="gedokumenteerde "; } - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="struct en union velde"; } @@ -259,7 +259,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 result+=" met skakels na "; if (!extractAll) { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="die struct/union dokumentasie vir elke veld:"; } @@ -270,7 +270,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 } else { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="die structures/unions waaraan hulle behoort:"; } @@ -288,7 +288,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 QCString result="'n Lys van alle "; if (!extractAll) result+="gedokumenteerde "; - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { result+="funksies, veranderlikes, defines, enums, en typedefs"; } @@ -337,7 +337,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 */ virtual QCString trCompoundIndex() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Strukture Indeks"; } @@ -364,7 +364,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 */ virtual QCString trClassDocumentation() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Strukture Dokumentasie"; } @@ -467,7 +467,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 */ virtual QCString trCompounds() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Strukture"; } @@ -875,7 +875,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 } virtual QCString trPublicAttribs() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Velde"; } @@ -1071,7 +1071,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { return "Data Strukture"; } diff --git a/src/types.h b/src/types.h index f6c704c..806e6fc 100644 --- a/src/types.h +++ b/src/types.h @@ -54,7 +54,8 @@ enum SrcLangExt SrcLangExt_VHDL = 0x02000, SrcLangExt_XML = 0x04000, SrcLangExt_Tcl = 0x08000, - SrcLangExt_Markdown = 0x10000 + SrcLangExt_Markdown = 0x10000, + SrcLangExt_SQL = 0x20000 }; /** Grouping info */ diff --git a/src/util.cpp b/src/util.cpp index a032fe2..0d45758 100755..100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -250,8 +250,8 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn) od.disable(OutputGenerator::Html); od.disable(OutputGenerator::Man); - if (Config_getBool("PDF_HYPERLINKS")) od.disable(OutputGenerator::Latex); - if (Config_getBool("RTF_HYPERLINKS")) od.disable(OutputGenerator::RTF); + if (Config_getBool(PDF_HYPERLINKS)) od.disable(OutputGenerator::Latex); + if (Config_getBool(RTF_HYPERLINKS)) od.disable(OutputGenerator::RTF); od.startPageRef(); od.docify(theTranslator->trPageAbbreviation()); od.endPageRef(cn,mn); @@ -293,19 +293,19 @@ static QCString stripFromPath(const QCString &path,QStrList &l) } /*! strip part of \a path if it matches - * one of the paths in the Config_getList("STRIP_FROM_PATH") list + * one of the paths in the Config_getList(STRIP_FROM_PATH) list */ QCString stripFromPath(const QCString &path) { - return stripFromPath(path,Config_getList("STRIP_FROM_PATH")); + return stripFromPath(path,Config_getList(STRIP_FROM_PATH)); } /*! strip part of \a path if it matches - * one of the paths in the Config_getList("INCLUDE_PATH") list + * one of the paths in the Config_getList(INCLUDE_PATH) list */ QCString stripFromIncludePath(const QCString &path) { - return stripFromPath(path,Config_getList("STRIP_FROM_INC_PATH")); + return stripFromPath(path,Config_getList(STRIP_FROM_INC_PATH)); } /*! try to determine if \a name is a source or a header file name by looking @@ -329,7 +329,8 @@ int guessSection(const char *name) n.right(4)==".ipp" || n.right(4)==".i++" || n.right(4)==".inl" || - n.right(4)==".xml" + n.right(4)==".xml" || + n.right(4)==".sql" ) return Entry::SOURCE_SEC; if (n.right(2)==".h" || // header n.right(3)==".hh" || @@ -1570,7 +1571,7 @@ ClassDef *getResolvedClass(Definition *scope, QCString *pResolvedType ) { - static bool optimizeOutputVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool optimizeOutputVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL); g_resolvedTypedefs.clear(); if (scope==0 || (scope->definitionType()!=Definition::TypeClass && @@ -1648,198 +1649,277 @@ static bool findOperator2(const QCString &s,int i) return TRUE; } -static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' }; -static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' }; +static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' }; +static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' }; +static const char operatorScope[] = { 'o', 'p', 'e', 'r', 'a', 't', 'o', 'r', '?', '?', '?' }; + +struct CharAroundSpace +{ + CharAroundSpace() + { + charMap['('].before=FALSE; + charMap['='].before=FALSE; + charMap['&'].before=FALSE; + charMap['*'].before=FALSE; + charMap['['].before=FALSE; + charMap['|'].before=FALSE; + charMap['+'].before=FALSE; + charMap[';'].before=FALSE; + charMap[':'].before=FALSE; + charMap['/'].before=FALSE; + + charMap['='].after=FALSE; + charMap[' '].after=FALSE; + charMap[']'].after=FALSE; + charMap['\t'].after=FALSE; + charMap['\n'].after=FALSE; + charMap[')'].after=FALSE; + charMap[','].after=FALSE; + charMap['<'].after=FALSE; + charMap['|'].after=FALSE; + charMap['+'].after=FALSE; + charMap['('].after=FALSE; + charMap['/'].after=FALSE; + } + struct CharElem + { + CharElem() : before(TRUE), after(TRUE) {} + bool before; + bool after; + }; + + CharElem charMap[256]; +}; + +static CharAroundSpace g_charAroundSpace; // Note: this function is not reentrant due to the use of static buffer! QCString removeRedundantWhiteSpace(const QCString &s) { - static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT"); - static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - + static bool cliSupport = Config_getBool(CPP_CLI_SUPPORT); + static bool vhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL); + if (s.isEmpty() || vhdl) return s; - static GrowBuf growBuf; - //int resultLen = 1024; - //int resultPos = 0; - //QCString result(resultLen); - // we use growBuf.addChar(c) instead of result+=c to + + // We use a static character array to // improve the performance of this function - growBuf.clear(); - uint i; + static char *growBuf = 0; + static int growBufLen = 0; + if (s.length()*3>growBufLen) // For input character we produce at most 3 output characters, + { + growBufLen = s.length()*3; + growBuf = (char *)realloc(growBuf,growBufLen+1); // add 1 for 0-terminator + } + if (growBuf==0) return s; // should not happen, only we run out of memory + + char *src=s.rawData(); + char *dst=growBuf; + + uint i=0; uint l=s.length(); uint csp=0; uint vsp=0; + uint osp=0; char c; - for (i=0;i<l;i++) + char pc=0; + // skip leading whitespace + while (i<l && isspace((uchar)src[i])) { -nextChar: - c=s.at(i); + i++; + } + for (;i<l;i++) + { + c=src[i]; + char nc=i<l-1 ? src[i+1] : ' '; // search for "const" if (csp<6 && c==constScope[csp] && // character matches substring "const" - (csp>0 || // if it is the first character - i==0 || // the previous may not be a digit - !isId(s.at(i-1)) + (csp>0 || // inside search string + i==0 || // if it is the first character + !isId(pc) // the previous may not be a digit ) ) - csp++; + csp++; else // reset counter csp=0; // search for "virtual" if (vsp<8 && c==virtualScope[vsp] && // character matches substring "virtual" - (vsp>0 || // if it is the first character - i==0 || // the previous may not be a digit - !isId(s.at(i-1)) + (vsp>0 || // inside search string + i==0 || // if it is the first character + !isId(pc) // the previous may not be a digit ) ) vsp++; else // reset counter vsp=0; - if (c=='"') // quoted string - { - i++; - growBuf.addChar(c); - while (i<l) - { - char cc=s.at(i); - growBuf.addChar(cc); - if (cc=='\\') // escaped character - { - growBuf.addChar(s.at(i+1)); - i+=2; - } - else if (cc=='"') // end of string - { i++; goto nextChar; } - else // any other character - { i++; } - } - } - else if (i<l-2 && c=='<' && // current char is a < - (isId(s.at(i+1)) || isspace((uchar)s.at(i+1))) && // next char is an id char or space - (i<8 || !findOperator(s,i)) // string in front is not "operator" + // search for "operator" + if (osp<11 && (osp>=8 || c==operatorScope[osp]) && // character matches substring "operator" followed by 3 arbitrary characters + (osp>0 || // inside search string + i==0 || // if it is the first character + !isId(pc) // the previous may not be a digit ) + ) + osp++; + else // reset counter + osp=0; + + switch(c) { - growBuf.addChar('<'); - growBuf.addChar(' '); - } - else if (i>0 && c=='>' && // current char is a > - (isId(s.at(i-1)) || isspace((uchar)s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&' || s.at(i-1)=='.') && // prev char is an id char or space - (i<8 || !findOperator(s,i)) // string in front is not "operator" - ) - { - growBuf.addChar(' '); - growBuf.addChar('>'); - } - else if (i>0 && c==',' && !isspace((uchar)s.at(i-1)) - && ((i<l-1 && (isId(s.at(i+1)) || s.at(i+1)=='[')) // the [ is for attributes (see bug702170) - || (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) // for PHP - || (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))) // for PHP - { - growBuf.addChar(','); - growBuf.addChar(' '); - } - else if (i>0 && - ( - (s.at(i-1)==')' && isId(c)) // ")id" -> ") id" - || - (c=='\'' && s.at(i-1)==' ') // "'id" -> "' id" - || - (i>1 && s.at(i-2)==' ' && s.at(i-1)==' ') // " id" -> " id" - ) - ) - { - growBuf.addChar(' '); - growBuf.addChar(c); - } - else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ && - !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || - s.at(i+1)==')' || - s.at(i+1)==',' || - s.at(i+1)=='\0' - ) - ) - // prevent const ::A from being converted to const::A - { - growBuf.addChar('t'); - growBuf.addChar(' '); - if (s.at(i+1)==' ') i++; - csp=0; - } - else if (c==':' && csp==6 /*&& (i<6 || !isId(s.at(i-6)))*/) - // replace const::A by const ::A - { - growBuf.addChar(' '); - growBuf.addChar(':'); - csp=0; - } - else if (c=='l' && vsp==7 /*&& (i<7 || !isId(s.at(i-7)))*/ && - !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || - s.at(i+1)==')' || - s.at(i+1)==',' || - s.at(i+1)=='\0' - ) - ) - // prevent virtual ::A from being converted to virtual::A - { - growBuf.addChar('l'); - growBuf.addChar(' '); - if (s.at(i+1)==' ') i++; - vsp=0; - } - else if (c==':' && vsp==8 /*&& (i<8 || !isId(s.at(i-8)))*/) - // replace virtual::A by virtual ::A - { - growBuf.addChar(' '); - growBuf.addChar(':'); - vsp=0; - } - else if (!isspace((uchar)c) || // not a space - ( i>0 && i<l-1 && // internal character - (isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']') && - (isId(s.at(i+1)) || - (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) || - (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))) + case '"': // quoted string + { + *dst++=c; + pc = c; + i++; + for (;i<l;i++) // find end of string + { + c = src[i]; + *dst++=c; + if (c=='\\' && i+1<l) + { + pc = c; + i++; + c = src[i]; + *dst+=c; + } + else if (c=='"') + { + break; + } + pc = c; + } + } + break; + case '<': // current char is a < + *dst++=c; + if (i<l-1 && + (isId(nc)) && // next char is an id char + (osp<8) // string in front is not "operator" + ) + { + *dst++=' '; // add extra space + } + break; + case '>': // current char is a > + if (i>0 && !isspace((uchar)pc) && + (isId(pc) || pc=='*' || pc=='&' || pc=='.') && // prev char is an id char or space or *&. + (osp<8 || (osp==8 && pc!='-')) // string in front is not "operator>" or "operator->" + ) + { + *dst++=' '; // add extra space in front + } + *dst++=c; + if (i<l-1 && (nc=='-' || nc=='&')) // '>-' -> '> -' + { + *dst++=' '; // add extra space after + } + break; + case ',': // current char is a , + *dst++=c; + if (i>0 && !isspace((uchar)pc) && + ((i<l-1 && (isId(nc) || nc=='[')) || // the [ is for attributes (see bug702170) + (i<l-2 && nc=='$' && isId(src[i+2])) || // for PHP: ',$name' -> ', $name' + (i<l-3 && nc=='&' && src[i+2]=='$' && isId(src[i+3])) // for PHP: ',&$name' -> ', &$name' ) - ) - ) - { - if (c=='\t') c=' '; - if (c=='*' || c=='&' || c=='@' || c=='$') - { - //uint rl=result.length(); - uint rl=growBuf.getPos(); - if ((rl>0 && (isId(growBuf.at(rl-1)) || growBuf.at(rl-1)=='>')) && - ((c!='*' && c!='&') || !findOperator2(s,i)) // avoid splitting operator* and operator->* and operator& - ) + ) { - growBuf.addChar(' '); + *dst++=' '; // add extra space after } - } - else if (c=='-') - { - uint rl=growBuf.getPos(); - if (rl>0 && growBuf.at(rl-1)==')' && i<l-1 && s.at(i+1)=='>') // trailing return type ')->' => ') ->' + break; + case '^': // CLI 'Type^name' -> 'Type^ name' + case '%': // CLI 'Type%name' -> 'Type% name' + *dst++=c; + if (cliSupport && i<l-1 && (isId(nc) || nc=='-')) { - growBuf.addChar(' '); + *dst++=' '; // add extra space after } - } - growBuf.addChar(c); - if (cliSupport && - (c=='^' || c=='%') && i>1 && isId(s.at(i-1)) && - !findOperator(s,i) - ) - { - growBuf.addChar(' '); // C++/CLI: Type^ name and Type% name - } + break; + case ')': // current char is a ) -> ')name' -> ') name' + *dst++=c; + if (i<l-1 && (isId(nc) || nc=='-')) + { + *dst++=' '; // add extra space after + } + break; + case '*': + if (i>0 && pc!=' ' && pc!='\t' && pc!=':' && + pc!='*' && pc!='&' && pc!='(' && pc!='/' && + pc!='.' && (osp<9 || (pc=='>' && osp==11))) + // avoid splitting &&, **, .*, operator*, operator->* + { + *dst++=' '; + } + *dst++=c; + break; + case '&': + if (i>0 && isId(pc)) + { + *dst++=' '; + } + *dst++=c; + break; + case '@': // '@name' -> ' @name' + case '$': // '$name' -> ' $name' + case '\'': // ''name' -> '' name' + if (i>0 && i<l-1 && pc!='=' && pc!=':' && !isspace(pc) && + isId(nc) && osp<8) // ")id" -> ") id" + { + *dst++=' '; + } + *dst++=c; + break; + case ':': // current char is a : + if (csp==6) // replace const::A by const ::A + { + *dst++=' '; + csp=0; + } + else if (vsp==8) // replace virtual::A by virtual ::A + { + *dst++=' '; + vsp=0; + } + *dst++=c; + break; + case ' ': // fallthrough + case '\n': // fallthrough + case '\t': + { + if (g_charAroundSpace.charMap[(uchar)pc].before && + g_charAroundSpace.charMap[(uchar)nc].after && + !(pc==',' && nc=='.') && + (osp<8 || (osp>=8 && isId(nc))) // e.g. "operator >>" -> "operator>>", but not "operator int" -> operatorint" + ) + { // keep space + *dst++=' '; + } + } + break; + default: + *dst++=c; + if (c=='t' && csp==5 && i<l-1 && // found 't' in 'const' + !(isId(nc) || nc==')' || nc==',' || isspace(nc)) + ) // prevent const ::A from being converted to const::A + { + *dst++=' '; + csp=0; + } + else if (c=='l' && vsp==7 && i<l-1 && // found 'l' in 'virtual' + !(isId(nc) || nc==')' || nc==',' || isspace(nc)) + ) // prevent virtual ::A from being converted to virtual::A + { + *dst++=' '; + vsp=0; + } + break; } + pc=c; } - growBuf.addChar(0); - //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),growBuf.get()); - //result.resize(resultPos); - return growBuf.get(); -} + *dst++='\0'; + //printf("removeRedundantWhitespace(%s)->%s\n",s.data(),growBuf); + return growBuf; +} /** * Returns the position in the string where a function parameter list @@ -2189,6 +2269,8 @@ QCString argListToString(ArgumentList *al,bool useCanonicalType,bool showDefVals result+=")"; if (al->constSpecifier) result+=" const"; if (al->volatileSpecifier) result+=" volatile"; + if (al->refQualifier==RefQualifierLValue) result+=" &"; + else if (al->refQualifier==RefQualifierRValue) result+=" &&"; if (!al->trailingReturnType.isEmpty()) result+=" -> "+al->trailingReturnType; if (al->pureSpecifier) result+=" =0"; return removeRedundantWhiteSpace(result); @@ -2347,8 +2429,8 @@ QCString getFileFilter(const char* name,bool isSourceCode) // sanity check if (name==0) return ""; - QStrList& filterSrcList = Config_getList("FILTER_SOURCE_PATTERNS"); - QStrList& filterList = Config_getList("FILTER_PATTERNS"); + QStrList& filterSrcList = Config_getList(FILTER_SOURCE_PATTERNS); + QStrList& filterList = Config_getList(FILTER_PATTERNS); QCString filterName; bool found=FALSE; @@ -2362,10 +2444,16 @@ QCString getFileFilter(const char* name,bool isSourceCode) } if (!found) { // then use the generic input filter - return Config_getString("INPUT_FILTER"); + return Config_getString(INPUT_FILTER); } else { + /* remove surrounding double quotes */ + if ((filterName.right(1) == "\"") && (filterName.left(1) == "\"")) + { + filterName.remove(filterName.length() - 1, 1); + filterName.remove(0, 1); + } return filterName; } } @@ -2374,7 +2462,7 @@ QCString getFileFilter(const char* name,bool isSourceCode) QCString transcodeCharacterStringToUTF8(const QCString &input) { bool error=FALSE; - static QCString inputEncoding = Config_getString("INPUT_ENCODING"); + static QCString inputEncoding = Config_getString(INPUT_ENCODING); const char *outputEncoding = "UTF-8"; if (inputEncoding.isEmpty() || qstricmp(inputEncoding,outputEncoding)==0) return input; int inputSize=input.length(); @@ -2499,7 +2587,7 @@ QCString dateToString(bool includeTime) } else // all ok, replace current time with epoch value { - current.setTime_t((ulong)epoch); // TODO: add support for 64bit epoch value + current.setTimeUtc_t((ulong)epoch); // TODO: add support for 64bit epoch value } } return theTranslator->trDateTime(current.date().year(), @@ -2898,6 +2986,8 @@ static void stripIrrelevantString(QCString &target,const QCString &str) So the following example, show what is stripped by this routine for const. The same is done for volatile. + For Java code we also strip the "final" keyword, see bug 765070. + \code const T param -> T param // not relevant const T& param -> const T& param // const needed @@ -2910,6 +3000,7 @@ void stripIrrelevantConstVolatile(QCString &s) //printf("stripIrrelevantConstVolatile(%s)=",s.data()); stripIrrelevantString(s,"const"); stripIrrelevantString(s,"volatile"); + stripIrrelevantString(s,"final"); //printf("%s\n",s.data()); } @@ -3274,6 +3365,12 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, } } + if (srcAl->refQualifier != dstAl->refQualifier) + { + NOMATCH + return FALSE; // one member is has a different ref-qualifier than the other + } + // so far the argument list could match, so we need to compare the types of // all arguments. ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl); @@ -3707,6 +3804,12 @@ bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *sr } } + if (srcAl->refQualifier != dstAl->refQualifier) + { + NOMATCH + return FALSE; // one member is has a different ref-qualifier than the other + } + // so far the argument list could match, so we need to compare the types of // all arguments. ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl); @@ -3870,7 +3973,7 @@ static void findMembersWithSpecificName(MemberName *mn, { //printf(" Function with global scope name `%s' args=`%s'\n", // mn->memberName(),args); - MemberListIterator mli(*mn); + MemberNameIterator mli(*mn); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { @@ -4005,6 +4108,11 @@ bool getDefs(const QCString &scName, MemberDef *tmd=0; ClassDef *fcd=getResolvedClass(Doxygen::globalScope,0,className,&tmd); + if (fcd==0 && className.find('<')!=-1) // try without template specifiers as well + { + QCString nameWithoutTemplates = stripTemplateSpecifiersFromScope(className,FALSE); + fcd=getResolvedClass(Doxygen::globalScope,0,nameWithoutTemplates,&tmd); + } //printf("Trying class scope %s: fcd=%p tmd=%p\n",className.data(),fcd,tmd); // todo: fill in correct fileScope! if (fcd && // is it a documented class @@ -4012,7 +4120,7 @@ bool getDefs(const QCString &scName, ) { //printf(" Found fcd=%p\n",fcd); - MemberListIterator mmli(*mn); + MemberNameIterator mmli(*mn); MemberDef *mmd; int mdist=maxInheritanceDepth; ArgumentList *argList=0; @@ -4136,7 +4244,7 @@ bool getDefs(const QCString &scName, if (mn && scopeName.isEmpty() && mScope.isEmpty()) // Maybe a related function? { //printf("Global symbol\n"); - MemberListIterator mmli(*mn); + MemberNameIterator mmli(*mn); MemberDef *mmd, *fuzzy_mmd = 0; ArgumentList *argList = 0; bool hasEmptyArgs = args && qstrcmp(args, "()") == 0; @@ -4204,7 +4312,7 @@ bool getDefs(const QCString &scName, //printf("Symbol inside existing namespace `%s' count=%d\n", // namespaceName.data(),mn->count()); bool found=FALSE; - MemberListIterator mmli(*mn); + MemberNameIterator mmli(*mn); MemberDef *mmd; for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli) { @@ -4288,8 +4396,7 @@ bool getDefs(const QCString &scName, else { //printf("not a namespace\n"); - bool found=FALSE; - MemberListIterator mmli(*mn); + MemberNameIterator mmli(*mn); MemberDef *mmd; for (mmli.toFirst();(mmd=mmli.current());++mmli) { @@ -4340,7 +4447,7 @@ bool getDefs(const QCString &scName, { // no exact match found, but if args="()" an arbitrary // member will do - MemberListIterator mni(*mn); + MemberNameIterator mni(*mn); for (mni.toLast();(md=mni.current());--mni) { //printf("Found member `%s'\n",md->name().data()); @@ -4653,7 +4760,7 @@ bool resolveRef(/* in */ const char *scName, QCString linkToText(SrcLangExt lang,const char *link,bool isFileName) { - //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA); QCString result=link; if (!result.isEmpty()) { @@ -4756,7 +4863,7 @@ bool resolveLink(/* in */ const char *scName, QCString linkRef=lr; QCString linkRefWithoutTemplates = stripTemplateSpecifiersFromScope(linkRef,FALSE); - //printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock); + //printf("ResolveLink linkRef=%s\n",lr); FileDef *fd; GroupDef *gd; PageDef *pd; @@ -5126,20 +5233,20 @@ QCString substituteKeywords(const QCString &s,const char *title, result = substitute(result,"$projectname",projName); result = substitute(result,"$projectnumber",projNum); result = substitute(result,"$projectbrief",projBrief); - result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO"))); + result = substitute(result,"$projectlogo",stripPath(Config_getString(PROJECT_LOGO))); return result; } //---------------------------------------------------------------------- /*! Returns the character index within \a name of the first prefix - * in Config_getList("IGNORE_PREFIX") that matches \a name at the left hand side, + * in Config_getList(IGNORE_PREFIX) that matches \a name at the left hand side, * or zero if no match was found */ int getPrefixIndex(const QCString &name) { if (name.isEmpty()) return 0; - static QStrList &sl = Config_getList("IGNORE_PREFIX"); + static QStrList &sl = Config_getList(IGNORE_PREFIX); char *s = sl.first(); while (s) { @@ -5236,8 +5343,8 @@ bool hasVisibleRoot(BaseClassList *bcl) // note that this function is not reentrant due to the use of static growBuf! QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) { - static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); - static bool allowUnicodeNames = Config_getBool("ALLOW_UNICODE_NAMES"); + static bool caseSenseNames = Config_getBool(CASE_SENSE_NAMES); + static bool allowUnicodeNames = Config_getBool(ALLOW_UNICODE_NAMES); static GrowBuf growBuf; growBuf.clear(); char c; @@ -5348,8 +5455,9 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor */ QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore) { - static bool shortNames = Config_getBool("SHORT_NAMES"); - static bool createSubdirs = Config_getBool("CREATE_SUBDIRS"); + if (name==0 || name[0]=='\0') return ""; + static bool shortNames = Config_getBool(SHORT_NAMES); + static bool createSubdirs = Config_getBool(CREATE_SUBDIRS); QCString result; if (shortNames) // use short names only { @@ -5431,7 +5539,7 @@ QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore) QCString relativePathToRoot(const char *name) { QCString result; - if (Config_getBool("CREATE_SUBDIRS")) + if (Config_getBool(CREATE_SUBDIRS)) { if (name==0) { @@ -5452,7 +5560,7 @@ QCString relativePathToRoot(const char *name) void createSubDirs(QDir &d) { - if (Config_getBool("CREATE_SUBDIRS")) + if (Config_getBool(CREATE_SUBDIRS)) { // create 4096 subdirectories int l1,l2; @@ -6040,7 +6148,7 @@ QCString normalizeNonTemplateArgumentsInString( p++; QCString result = name.left(p); - static QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*"); + static QRegExp re("[a-z:_A-Z\\x80-\\xFF][a-z:_A-Z0-9\\x80-\\xFF]*"); int l,i; // for each identifier in the template part (e.g. B<T> -> T) while ((i=re.match(name,p,&l))!=-1) @@ -6464,10 +6572,10 @@ void addRefItem(const QList<ListItemInfo> *sli, && ( // either not a built-in list or the list is enabled - (lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) && - (lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) && - (lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) && - (lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST")) + (lii->type!="todo" || Config_getBool(GENERATE_TODOLIST)) && + (lii->type!="test" || Config_getBool(GENERATE_TESTLIST)) && + (lii->type!="bug" || Config_getBool(GENERATE_BUGLIST)) && + (lii->type!="deprecated" || Config_getBool(GENERATE_DEPRECATEDLIST)) ) ) { @@ -6602,13 +6710,13 @@ void filterLatexString(FTextStream &t,const char *str, case '>': t << "$>$"; break; case '|': t << "$\\vert$"; break; case '~': t << "$\\sim$"; break; - case '[': if (Config_getBool("PDF_HYPERLINKS") || insideItem) + case '[': if (Config_getBool(PDF_HYPERLINKS) || insideItem) t << "\\mbox{[}"; else t << "["; break; case ']': if (pc=='[') t << "$\\,$"; - if (Config_getBool("PDF_HYPERLINKS") || insideItem) + if (Config_getBool(PDF_HYPERLINKS) || insideItem) t << "\\mbox{]}"; else t << "]"; @@ -6653,6 +6761,7 @@ QCString latexEscapeLabelName(const char *s,bool insideTabbing) { case '|': t << "\\texttt{\"|}"; break; case '!': t << "\"!"; break; + case '@': t << "\"@"; break; case '%': t << "\\%"; break; case '{': t << "\\lcurly{}"; break; case '}': t << "\\rcurly{}"; break; @@ -6662,7 +6771,7 @@ QCString latexEscapeLabelName(const char *s,bool insideTabbing) i=0; // collect as long string as possible, before handing it to docify tmp[i++]=c; - while ((c=*p) && c!='|' && c!='!' && c!='%' && c!='{' && c!='}' && c!='~') + while ((c=*p) && c!='@' && c!='[' && c!=']' && c!='!' && c!='{' && c!='}' && c!='|') { tmp[i++]=c; p++; @@ -6719,7 +6828,6 @@ QCString latexEscapePDFString(const char *s) FTextStream t(&result); const char *p=s; char c; - int i; while ((c=*p++)) { switch (c) @@ -6727,6 +6835,9 @@ QCString latexEscapePDFString(const char *s) case '\\': t << "\\textbackslash{}"; break; case '{': t << "\\{"; break; case '}': t << "\\}"; break; + case '_': t << "\\_"; break; + case '%': t << "\\%"; break; + case '&': t << "\\&"; break; default: t << c; break; @@ -6908,7 +7019,7 @@ QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine) void stringToSearchIndex(const QCString &docBaseUrl,const QCString &title, const QCString &str,bool priority,const QCString &anchor) { - static bool searchEngine = Config_getBool("SEARCHENGINE"); + static bool searchEngine = Config_getBool(SEARCHENGINE); if (searchEngine) { Doxygen::searchIndex->setCurrentDoc(title,docBaseUrl,anchor); @@ -6951,6 +7062,7 @@ g_lang2extMap[] = { "fortranfixed", "fortranfixed", SrcLangExt_Fortran }, { "vhdl", "vhdl", SrcLangExt_VHDL }, { "xml", "xml", SrcLangExt_XML }, + { "sql", "sql", SrcLangExt_SQL }, { "tcl", "tcl", SrcLangExt_Tcl }, { "md", "md", SrcLangExt_Markdown }, { 0, 0, (SrcLangExt)0 } @@ -6997,7 +7109,7 @@ void initDefaultExtensionMapping() g_extLookup.setAutoDelete(TRUE); // extension parser id updateLanguageMapping(".dox", "c"); - updateLanguageMapping(".txt", "c"); + updateLanguageMapping(".txt", "c"); // see bug 760836 updateLanguageMapping(".doc", "c"); updateLanguageMapping(".c", "c"); updateLanguageMapping(".C", "c"); @@ -7022,8 +7134,8 @@ void initDefaultExtensionMapping() updateLanguageMapping(".ddl", "idl"); updateLanguageMapping(".odl", "idl"); updateLanguageMapping(".java", "java"); - updateLanguageMapping(".as", "javascript"); - updateLanguageMapping(".js", "javascript"); + //updateLanguageMapping(".as", "javascript"); // not officially supported + //updateLanguageMapping(".js", "javascript"); // not officially supported updateLanguageMapping(".cs", "csharp"); updateLanguageMapping(".d", "d"); updateLanguageMapping(".php", "php"); @@ -7033,11 +7145,15 @@ void initDefaultExtensionMapping() updateLanguageMapping(".phtml", "php"); updateLanguageMapping(".m", "objective-c"); updateLanguageMapping(".M", "objective-c"); - updateLanguageMapping(".mm", "objective-c"); + updateLanguageMapping(".mm", "c"); // see bug746361 updateLanguageMapping(".py", "python"); + updateLanguageMapping(".pyw", "python"); updateLanguageMapping(".f", "fortran"); updateLanguageMapping(".for", "fortran"); updateLanguageMapping(".f90", "fortran"); + updateLanguageMapping(".f95", "fortran"); + updateLanguageMapping(".f03", "fortran"); + updateLanguageMapping(".f08", "fortran"); updateLanguageMapping(".vhd", "vhdl"); updateLanguageMapping(".vhdl", "vhdl"); updateLanguageMapping(".tcl", "tcl"); @@ -7050,6 +7166,7 @@ void initDefaultExtensionMapping() void addCodeOnlyMappings() { updateLanguageMapping(".xml", "xml"); + updateLanguageMapping(".sql", "sql"); } SrcLangExt getLanguageFromFileName(const QCString fileName) @@ -7737,7 +7854,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf,bool filter,bool isSourceC { // do character transcoding if needed. transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(), - Config_getString("INPUT_ENCODING"),"UTF-8"); + Config_getString(INPUT_ENCODING),"UTF-8"); } //inBuf.addChar('\n'); /* to prevent problems under Windows ? */ @@ -7843,7 +7960,7 @@ void writeSummaryLink(OutputList &ol,const char *label,const char *title, QCString externalLinkTarget() { - static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW"); + static bool extLinksInWindow = Config_getBool(EXT_LINKS_IN_WINDOW); if (extLinksInWindow) return "target=\"_blank\" "; else return ""; } @@ -7882,9 +7999,9 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href) */ void writeColoredImgData(const char *dir,ColoredImgDataItem data[]) { - static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); - static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); - static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + static int hue = Config_getInt(HTML_COLORSTYLE_HUE); + static int sat = Config_getInt(HTML_COLORSTYLE_SAT); + static int gamma = Config_getInt(HTML_COLORSTYLE_GAMMA); while (data->name) { QCString fileName; @@ -7917,9 +8034,9 @@ QCString replaceColorMarkers(const char *str) if (s.isEmpty()) return result; static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]"); static const char hex[] = "0123456789ABCDEF"; - static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); - static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); - static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + static int hue = Config_getInt(HTML_COLORSTYLE_HUE); + static int sat = Config_getInt(HTML_COLORSTYLE_SAT); + static int gamma = Config_getInt(HTML_COLORSTYLE_GAMMA); int i,l,sl=s.length(),p=0; while ((i=re.match(s,p,&l))!=-1) { @@ -7988,6 +8105,7 @@ bool copyFile(const QCString &src,const QCString &dest) /** Returns the section of text, in between a pair of markers. * Full lines are returned, excluding the lines on which the markers appear. + * \sa routine lineBlock */ QCString extractBlock(const QCString text,const QCString marker) { @@ -8031,6 +8149,29 @@ QCString extractBlock(const QCString text,const QCString marker) return l2>l1 ? text.mid(l1,l2-l1) : QCString(); } +/** Returns the line number of the line following the line with the marker. + * \sa routine extractBlock + */ +int lineBlock(const QCString text,const QCString marker) +{ + int result = 1; + int p=0,i; + bool found=FALSE; + + // find the character positions of the first marker + int m1 = text.find(marker); + if (m1==-1) return result; + + // find start line positions for the markers + while (!found && (i=text.find('\n',p))!=-1) + { + found = (p<=m1 && m1<i); // found the line with the start marker + p=i+1; + result++; + } + return result; +} + /** Returns a string representation of \a lang. */ QCString langToString(SrcLangExt lang) { @@ -8049,6 +8190,7 @@ QCString langToString(SrcLangExt lang) case SrcLangExt_Fortran: return "Fortran"; case SrcLangExt_VHDL: return "VHDL"; case SrcLangExt_XML: return "XML"; + case SrcLangExt_SQL: return "SQL"; case SrcLangExt_Tcl: return "Tcl"; case SrcLangExt_Markdown: return "Markdown"; } @@ -8091,8 +8233,8 @@ QCString correctURL(const QCString &url,const QCString &relPath) bool protectionLevelVisible(Protection prot) { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); - static bool extractPackage = Config_getBool("EXTRACT_PACKAGE"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); + static bool extractPackage = Config_getBool(EXTRACT_PACKAGE); return (prot!=Private && prot!=Package) || (prot==Private && extractPrivate) || @@ -8112,7 +8254,7 @@ QCString stripIndentation(const QCString &s) int indent=0; int minIndent=1000000; // "infinite" bool searchIndent=TRUE; - static int tabSize=Config_getInt("TAB_SIZE"); + static int tabSize=Config_getInt(TAB_SIZE); while ((c=*p++)) { if (c=='\t') indent+=tabSize - (indent%tabSize); @@ -8170,7 +8312,7 @@ QCString stripIndentation(const QCString &s) bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile) { - static bool allExternals = Config_getBool("ALLEXTERNALS"); + static bool allExternals = Config_getBool(ALLEXTERNALS); bool isDocFile = fd->isDocumentationFile(); genSourceFile = !isDocFile && fd->generateSourceFile(); return ( ((allExternals && fd->isLinkable()) || @@ -8182,8 +8324,8 @@ bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile) void addDocCrossReference(MemberDef *src,MemberDef *dst) { - static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION"); - static bool referencesRelation = Config_getBool("REFERENCES_RELATION"); + static bool referencedByRelation = Config_getBool(REFERENCED_BY_RELATION); + static bool referencesRelation = Config_getBool(REFERENCES_RELATION); //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data()); if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types @@ -8327,7 +8469,7 @@ bool namespaceHasVisibleChild(NamespaceDef *nd,bool includeClasses) bool classVisibleInIndex(ClassDef *cd) { - static bool allExternals = Config_getBool("ALLEXTERNALS"); + static bool allExternals = Config_getBool(ALLEXTERNALS); return (allExternals && cd->isLinkable()) || cd->isLinkableInProject(); } @@ -8376,7 +8518,7 @@ void convertProtectionLevel( int *outListType2 ) { - static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); + static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); // default representing 1-1 mapping *outListType1=inListType; *outListType2=-1; @@ -8555,30 +8697,11 @@ bool mainPageHasTitle() QCString getDotImageExtension(void) { - QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); + QCString imgExt = Config_getEnum(DOT_IMAGE_FORMAT); imgExt = imgExt.replace( QRegExp(":.*"), "" ); return imgExt; } -void initFilePattern(void) -{ - // add default pattern if needed - QStrList &filePatternList = Config_getList("FILE_PATTERNS"); - if (filePatternList.isEmpty()) - { - QDictIterator<int> it( g_extLookup ); - QCString pattern; - bool caseSens = portable_fileSystemIsCaseSensitive(); - for (;it.current();++it) - { - pattern = "*"; - pattern += it.currentKey(); - filePatternList.append(pattern.data()); - if (caseSens) filePatternList.append(pattern.upper().data()); - } - } -} - bool openOutputFile(const char *outFile,QFile &f) { bool fileOpened=FALSE; @@ -8604,3 +8727,23 @@ bool openOutputFile(const char *outFile,QFile &f) return fileOpened; } +void writeExtraLatexPackages(FTextStream &t) +{ + // User-specified packages + QStrList &extraPackages = Config_getList(EXTRA_PACKAGES); + if (!extraPackages.isEmpty()) + { + t << "% Packages requested by user\n"; + const char *pkgName=extraPackages.first(); + while (pkgName) + { + if ((pkgName[0] == '[') || (pkgName[0] == '{')) + t << "\\usepackage" << pkgName << "\n"; + else + t << "\\usepackage{" << pkgName << "}\n"; + pkgName=extraPackages.next(); + } + t << "\n"; + } +} + diff --git a/src/util.h b/src/util.h index 3f976e3..af8a3b4 100755..100644 --- a/src/util.h +++ b/src/util.h @@ -445,6 +445,7 @@ QCString replaceColorMarkers(const char *str); bool copyFile(const QCString &src,const QCString &dest); QCString extractBlock(const QCString text,const QCString marker); +int lineBlock(const QCString text,const QCString marker); QCString correctURL(const QCString &url,const QCString &relPath); @@ -474,8 +475,8 @@ void convertProtectionLevel( ); bool mainPageHasTitle(); -void initFilePattern(void); bool openOutputFile(const char *outFile,QFile &f); +void writeExtraLatexPackages(FTextStream &t); #endif diff --git a/src/vhdlcode.l b/src/vhdlcode.l index e4ae0e7..3e027d7 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -18,6 +18,9 @@ * supports VHDL-87/93/2008 ******************************************************************************/ %option never-interactive +%option case-insensitive +%option prefix="vhdlcodeYY" + %{ /* @@ -85,6 +88,7 @@ static int g_yyLineNr; //!< current line number static bool g_needsTermination; static Definition *g_searchCtx; +static bool g_exampleBlock; static QCString g_exampleName; static QCString g_exampleFile; @@ -181,7 +185,6 @@ static void startCodeLine() //if (g_currentFontClass) { g_code->endFontClass(); } if (g_sourceFileDef) { - g_startCode=TRUE; //QCString lineNumber,lineAnchor; //lineNumber.sprintf("%05d",g_yyLineNr); //lineAnchor.sprintf("l%05d",g_yyLineNr); @@ -229,13 +232,13 @@ static void startCodeLine() } } g_code->startCodeLine(g_sourceFileDef); + g_startCode=TRUE; if (g_currentFontClass) { g_code->startFontClass(g_currentFontClass); } } -static void endFontClass(); static void endCodeLine() { endFontClass(); @@ -394,7 +397,7 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol, Definition *d, const char *text) { - static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS"); + static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); @@ -1464,7 +1467,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI QCString text(vhdlcodeYYtext); int i=text.find("--"); if (text.mid(i,3)=="--!" && // hide special comment - Config_getBool("STRIP_CODE_COMMENTS")) + Config_getBool(STRIP_CODE_COMMENTS)) { g_yyLineNr++; // skip complete line } @@ -1479,7 +1482,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI QCString text(vhdlcodeYYtext); int i=text.find("--"); if (text.mid(i,3)=="--!" && - Config_getBool("STRIP_CODE_COMMENTS")) + Config_getBool(STRIP_CODE_COMMENTS)) { // hide special comment } @@ -1504,7 +1507,7 @@ void resetVhdlCodeParserState() } void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s, - bool /*exBlock*/, const char *exName,FileDef *fd, + bool exBlock, const char *exName,FileDef *fd, int startLine,int endLine,bool inlineFragment, MemberDef *memberDef,bool,Definition *searchCtx, bool /* collectXRefs */) @@ -1527,23 +1530,24 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString g_needsTermination = FALSE; g_searchCtx = searchCtx; - if (endLine!=-1) - g_inputLines = endLine+1; - else - g_inputLines = countLines(); - if (startLine!=-1) g_yyLineNr = startLine; else g_yyLineNr = 1; + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + // g_theCallContext.clear(); g_classScope = className; + g_exampleBlock = exBlock; g_exampleName = exName; g_sourceFileDef = fd; bool cleanupSourceDef = FALSE; - if (fd==0) + if (exBlock && fd==0) { // create a dummy filedef for the example g_sourceFileDef = new FileDef("",exName); diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 3ea9b18..d09de09 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -27,10 +27,7 @@ #include <qcstring.h> #include <qfileinfo.h> #include <qstringlist.h> - -//#ifdef DEBUGFLOW #include <qmap.h> -//#endif /* --------------------------------------------------------------- */ @@ -47,7 +44,6 @@ #include "searchindex.h" #include "outputlist.h" #include "parserintf.h" - #include "layout.h" #include "arguments.h" #include "portable.h" @@ -59,11 +55,12 @@ #include "filename.h" #include "membergroup.h" #include "memberdef.h" - +#include "plantuml.h" #include "vhdljjparser.h" #include "VhdlParser.h" - #include "vhdlcode.h" +#include "plantuml.h" +//#define DEBUGFLOW #define theTranslator_vhdlType VhdlDocGen::trVhdlType static QDict<QCString> g_vhdlKeyDict0(17,FALSE); @@ -95,7 +92,7 @@ void VhdlDocGen::setFlowMember( const MemberDef* mem) flowMember=mem; } -const MemberDef* VhdlDocGen::getFlowMember() + const MemberDef* VhdlDocGen::getFlowMember() { return flowMember; } @@ -165,7 +162,7 @@ static int compareString(const QCString& s1,const QCString& s2) static void createSVG() { - QCString ov =Config_getString("HTML_OUTPUT"); + QCString ov =Config_getString(HTML_OUTPUT); QCString dir="-o \""+ov+"/vhdl_design_overview.html\""; ov+="/vhdl_design.dot"; @@ -195,7 +192,7 @@ void VhdlDocGen::writeOverview() if (!found) return; - QCString ov =Config_getString("HTML_OUTPUT"); + QCString ov =Config_getString(HTML_OUTPUT); QCString fileName=ov+"/vhdl_design.dot"; QFile f(fileName); FTextStream t(&f); @@ -573,7 +570,7 @@ VhdlDocGen::~VhdlDocGen() void VhdlDocGen::init() { - // vhdl keywords inlcuded VHDL 2008 + // vhdl keywords included VHDL 2008 const char* g_vhdlKeyWordMap0[] = { "abs","access","after","alias","all","and","architecture","array","assert","assume","assume_guarantee","attribute", @@ -843,7 +840,7 @@ MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList } MemberListIterator fmni(*ml); //int l=ml->count(); - // fprintf(stderr,"\n loading enity %s %s: %d",cd->symbolName().data(),keyType.data(),l); + // fprintf(stderr,"\n loading entity %s %s: %d",cd->symbolName().data(),keyType.data(),l); for (fmni.toFirst();(md=fmni.current());++fmni) { @@ -1068,7 +1065,7 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol) }// write /* - * finds all architectures which belongs to an entiy + * finds all architectures which belongs to an entity */ void VhdlDocGen::findAllArchitectures(QList<QCString>& qll,const ClassDef *cd) { @@ -1992,7 +1989,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, QCString cfname = d->getOutputFileBase(); //HtmlHelp *htmlHelp=0; - // bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); + // bool hasHtmlHelp = Config_getBool(GENERATE_HTML) && Config_getBool(GENERATE_HTMLHELP); // if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); // search for the last anonymous scope in the member type @@ -2245,7 +2242,7 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, } bool htmlOn = ol.isEnabled(OutputGenerator::Html); - if (htmlOn && /*Config_getBool("HTML_ALIGN_MEMBERS") &&*/ !ltype.isEmpty()) + if (htmlOn && /*Config_getBool(HTML_ALIGN_MEMBERS) &&*/ !ltype.isEmpty()) { ol.disable(OutputGenerator::Html); } @@ -2264,12 +2261,13 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, // name().data(),annoClassDef,annEnumType); // if(mm!=VhdlDocGen::MISCELLANEOUS) ol.endMemberItem(); - if (!mdef->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */) + if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */) { - ol.startMemberDescription(mdef->anchor()); + QCString s=mdef->briefDescription(); + ol.startMemberDescription(mdef->anchor()); ol.generateDoc(mdef->briefFile(),mdef->briefLine(), mdef->getOuterScope()?mdef->getOuterScope():d, - mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE); + mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE); if (detailsVisible) { ol.pushGeneratorState(); @@ -2610,7 +2608,7 @@ void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname) codeFragment, // input SrcLangExt_VHDL, // lang FALSE, // isExample - 0, // exampleName + 0, // exampleName mdef->getFileDef(), // fileDef mdef->getStartBodyLine(), // startLine mdef->getEndBodyLine(), // endLine @@ -2804,7 +2802,7 @@ bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne) QCString co("Constraints"); QCString imgExt = getDotImageExtension(); - if (Config_getBool("HAVE_DOT") && imgExt=="svg") + if (Config_getBool(HAVE_DOT) && imgExt=="svg") { QCString ov = theTranslator->trDesignOverview(); QCString ofile("vhdl_design_overview"); @@ -3559,7 +3557,7 @@ void FlowChart::printNode(const FlowChart* flo) } else { - printf("\n NO: %s%s[%d,%d]",q.data(),t.data(),flo->stamp,flo->id); + printf("\n NO: %s[%d,%d]",t.data(),flo->stamp,flo->id); } } } @@ -3745,8 +3743,13 @@ void FlowChart::buildCommentNodes(FTextStream & t) FlowChart *fll=flowList.at(j); if (fll->type & (COMMENT_NO | BEGIN_NO)) { + int diff=FLOWLEN-(j+1); flowList.remove(j); - delete fll; + + if ((fll->type & COMMENT_NO) && diff > 1) + flowList.at(j+1)->label=fll->label; + + delete fll; fll=0; size--; if (j>0) j--; @@ -3841,7 +3844,6 @@ void FlowChart::addFlowChart(int type,const char* text,const char* exp, const ch { flowList.append(fl); } - } void FlowChart::moveToPrevLevel() @@ -3850,6 +3852,87 @@ void FlowChart::moveToPrevLevel() ifcounter--; } +QCString FlowChart::printPlantUmlNode(const FlowChart *flo,bool ca,bool endL) +{ + QCString t; + QCString exp=flo->exp.stripWhiteSpace(); + QCString text=flo->text.stripWhiteSpace(); + switch (flo->type) + { + case START_NO: t=":"+text+"|"; break; + case IF_NO : t="\nif ("+exp+") then (yes)"; break; + case ELSIF_NO: t="\nelseif ("+exp+") then (yes)"; break; + case ELSE_NO: t="\nelse"; break; + case CASE_NO: t="\n:"+exp+";"; break; + case WHEN_NO: t="\n"; + if (!ca) t+="else"; + t+="if ("+exp+") then (yes)"; + break; + case EXIT_NO: break; + case END_NO: if (text.contains(" function")==0) t="\n:"+text+";"; + break; + case TEXT_NO: t="\n:"+text+"]"; break; + case ENDIF_NO: t="\nendif"; break; + case FOR_NO: t="\nwhile ("+exp+") is (yes)"; break; + case WHILE_NO: t="\nwhile ("+exp+") is (yes)"; break; + case END_LOOP: t="\nendwhile"; break; + case END_CASE: t="\nendif\n:end case;"; break; + case VARIABLE_NO:t="\n:"+text+";"; break; + case RETURN_NO: t="\n:"+text+";"; + if (!endL) t+="\nstop"; + break; + case LOOP_NO: t="\nwhile (infinite loop)"; break; + case NEXT_NO: break; + case EMPTY_NO: break; + case COMMENT_NO: t="\n note left \n "+flo->label+"\nend note \n"; break; + case BEGIN_NO: t="\n:begin;"; break; + default: assert(false); break; + } + return t; +} + +void FlowChart::printUmlTree() +{ + int caseCounter = 0; + int whenCounter = 0; + + QCString qcs; + uint size=flowList.count(); + bool endList; + for (uint j=0;j<size;j++) + { + endList=j==FLOWLEN; + FlowChart *flo=flowList.at(j); + if (flo->type==CASE_NO) + { + caseCounter++; + whenCounter=0; + } + + if (flo->type==END_CASE) + { + caseCounter--; + } + + bool ca = (caseCounter>0 && whenCounter==0); + + qcs+=printPlantUmlNode(flo,ca,endList); + + if (flo->type==WHEN_NO) + { + whenCounter++; + } + + } + qcs+="\n"; + + QCString & htmlOutDir = Config_getString(HTML_OUTPUT); + + QCString n=convertNameToFileName(); + QCString tmp=htmlOutDir; + n=writePlantUMLSource(tmp,n,qcs); + generatePlantUMLOutput(n.data(),tmp.data(),PUML_SVG); +} QCString FlowChart::convertNameToFileName() { @@ -3857,16 +3940,19 @@ QCString FlowChart::convertNameToFileName() QCString temp,qcs; const MemberDef* md=VhdlDocGen::getFlowMember(); - temp.sprintf("%p",md); + // temp.sprintf("%p",md); qcs=md->name(); + #if 0 if (qcs.find(exp,0)>=0) { qcs.prepend("Z"); qcs=qcs.replace(exp,"_"); } + #endif - return qcs+temp; + //QCString tt= qcs;VhdlDocGen::getRecordNumber(); + return qcs; } const char* FlowChart::getNodeType(int c) @@ -3889,7 +3975,7 @@ const char* FlowChart::getNodeType(int c) case END_CASE: return "end_case "; case VARIABLE_NO: return "variable_decl "; case RETURN_NO: return "return "; - case LOOP_NO: return "infinte loop "; + case LOOP_NO: return "infinite loop "; case NEXT_NO: return "next "; case COMMENT_NO: return "comment "; case EMPTY_NO: return "empty "; @@ -3901,7 +3987,7 @@ const char* FlowChart::getNodeType(int c) void FlowChart::createSVG() { QCString qcs("/"); - QCString ov = Config_getString("HTML_OUTPUT"); + QCString ov = Config_getString(HTML_OUTPUT); qcs+=FlowChart::convertNameToFileName()+".svg"; @@ -3937,7 +4023,7 @@ void FlowChart::writeFlowChart() { // assert(VhdlDocGen::flowMember); - QCString ov = Config_getString("HTML_OUTPUT"); + QCString ov = Config_getString(HTML_OUTPUT); QCString fileName = ov+"/flow_design.dot"; QFile f(fileName); FTextStream t(&f); @@ -3949,14 +4035,23 @@ void FlowChart::writeFlowChart() } colTextNodes(); + // buildCommentNodes(t); #ifdef DEBUGFLOW - printFlowTree(); + printFlowTree(); #endif + const MemberDef *p=VhdlDocGen::getFlowMember(); + + if (p->isStatic()) + { + printUmlTree(); + delFlowList(); + f.close(); + return; + } startDot(t); buildCommentNodes(t); - uint size=flowList.count(); for (uint j=0;j <size ;j++) @@ -4458,4 +4553,9 @@ parseVhdlCode(codeOutIntf, ); -} + + + + + +}// class diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index 2d1ecf1..bd190ca 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -315,7 +315,7 @@ class FlowChart static void delFlowList(); static const char* getNodeType(int c); - static void addFlowChart(int type,const char* text,const char* exp,const char * label=NULL); + static void addFlowChart(int type,const char* text,const char* exp,const char * label=0); static void moveToPrevLevel(); static int getTimeStamp(); static void writeFlowChart(); @@ -326,6 +326,9 @@ class FlowChart static void buildCommentNodes(FTextStream &t); static void alignCommentNode(FTextStream &t,QCString com); + static void printUmlTree(); + static QCString printPlantUmlNode(const FlowChart *flo,bool,bool); + static QList<FlowChart> flowList; FlowChart(int typ,const char* t,const char* ex,const char* label=0); diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp index acef592..fdba5e2 100644 --- a/src/vhdljjparser.cpp +++ b/src/vhdljjparser.cpp @@ -164,6 +164,9 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,En g_thisParser=this; bool inLine=false; inputString=fileBuf; + + // fprintf(stderr,"\n ============= %s\n ==========\n",fileBuf); + if (strlen(fileName)==0) { inLine=true; @@ -291,6 +294,8 @@ bool checkInlineCode(QCString & doc) void VhdlParser::handleFlowComment(const char* doc) { + lineCount(doc); + if (VhdlDocGen::getFlowMember()) { QCString qcs(doc); @@ -305,7 +310,9 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief) { int position=0; static bool isIn; - QCString doc(doc1); + QCString doc; + doc.append(doc1); + // fprintf(stderr,"\n %s",doc.data()); if (doc.isEmpty()) return; if (checkMultiComment(doc,yyLineNr)) @@ -334,9 +341,6 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief) bool needsEntry=FALSE; Protection protection=Public; - int lineNr; - if (iDocLine==-1) - lineNr=yyLineNr; if (oldEntry==current) { @@ -359,6 +363,14 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief) current->docLine = yyLineNr; } // printf("parseCommentBlock file<%s>\n [%s]\n at line [%d] \n ",yyFileName.data(),doc.data(),iDocLine); + + int j=doc.find("[plant]"); + if (j>=0) + { + doc=doc.remove(j,7); + current->stat=true; + } + while (parseCommentBlock( g_thisParser, current, @@ -690,7 +702,7 @@ void VhdlParser::mapLibPackage( Entry* root) bool VhdlParser::addLibUseClause(const QCString &type) { - static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES"); + static bool showIEEESTD=Config_getBool(FORCE_LOCAL_INCLUDES); if (showIEEESTD) // all standard packages and libraries will not be shown { diff --git a/src/xmlcode.l b/src/xmlcode.l index fd36ebb..c090531 100644 --- a/src/xmlcode.l +++ b/src/xmlcode.l @@ -18,6 +18,8 @@ ******************************************************************************/ %option never-interactive +%option prefix="xmlcodeYY" + %{ #include <stdio.h> @@ -49,6 +51,7 @@ static int g_yyLineNr; //!< current line number static bool g_needsTermination; static Definition *g_searchCtx; +static bool g_exampleBlock; static QCString g_exampleName; static QCString g_exampleFile; @@ -323,12 +326,12 @@ void parseXmlCode( CodeOutputInterface &od, const char * /*className*/, const QCString &s, - bool /*exBlock*/, + bool exBlock, const char *exName, FileDef *fd, int startLine, int endLine, - bool /*inlineFragment*/, + bool inlineFragment, MemberDef *, bool,Definition *searchCtx, bool /*collectXRefs*/ @@ -345,22 +348,23 @@ void parseXmlCode( g_needsTermination = FALSE; g_searchCtx=searchCtx; - if (endLine!=-1) - g_inputLines = endLine+1; - else - g_inputLines = countLines(); - if (startLine!=-1) g_yyLineNr = startLine; else g_yyLineNr = 1; + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + + g_exampleBlock = exBlock; g_exampleName = exName; g_sourceFileDef = fd; bool cleanupSourceDef = FALSE; - if (fd==0) + if (exBlock && fd==0) { // create a dummy filedef for the example g_sourceFileDef = new FileDef("",(exName?exName:"generated")); @@ -372,6 +376,7 @@ void parseXmlCode( setCurrentDoc("l00001"); } + g_includeCodeFragment = inlineFragment; // Starts line 1 on the output startCodeLine(); diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index c5550f0..815759e 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -272,7 +272,14 @@ void XmlDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile(), &fd); + inc->exampleFile(), + &fd, // fileDef, + -1, // start line + -1, // end line + FALSE, // inline fragment + 0, // memberDef + TRUE // show line numbers + ); m_t << "</programlisting>"; } break; @@ -283,7 +290,14 @@ void XmlDocVisitor::visit(DocInclude *inc) inc->text(), langExt, inc->isExample(), - inc->exampleFile()); + inc->exampleFile(), + 0, // fileDef + -1, // startLine + -1, // endLine + TRUE, // inlineFragment + 0, // memberDef + FALSE // show line numbers + ); m_t << "</programlisting>"; break; case DocInclude::DontInclude: @@ -315,6 +329,33 @@ void XmlDocVisitor::visit(DocInclude *inc) ); m_t << "</programlisting>"; break; + case DocInclude::SnipWithLines: + { + m_t << "<programlisting>"; + QFileInfo cfi( inc->file() ); + FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + langExt, + inc->isExample(), + inc->exampleFile(), + &fd, + lineBlock(inc->text(),inc->blockId()), + -1, // endLine + FALSE, // inlineFragment + 0, // memberDef + TRUE // show line number + ); + m_t << "</programlisting>"; + } + break; + case DocInclude::SnippetDoc: + case DocInclude::IncludeDoc: + err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s" + "Please create a bug report\n",__FILE__); + break; } } @@ -726,7 +767,7 @@ void XmlDocVisitor::visitPre(DocImage *img) // copy the image to the output dir QFile inImage(img->name()); - QFile outImage(Config_getString("XML_OUTPUT")+"/"+baseName.data()); + QFile outImage(Config_getString(XML_OUTPUT)+"/"+baseName.data()); if (inImage.open(IO_ReadOnly)) { if (outImage.open(IO_WriteOnly)) diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 467ebe4..70e198a 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -120,7 +120,7 @@ inline void writeXMLCodeString(FTextStream &t,const char *s, int &col) { case '\t': { - static int tabSize = Config_getInt("TAB_SIZE"); + static int tabSize = Config_getInt(TAB_SIZE); int spacesToNextTabStop = tabSize - (col%tabSize); col+=spacesToNextTabStop; while (spacesToNextTabStop--) t << "<sp/>"; @@ -153,7 +153,7 @@ static void writeXMLHeader(FTextStream &t) static void writeCombineScript() { - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/combine.xslt"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -452,7 +452,7 @@ void writeXMLCodeBlock(FTextStream &t,FileDef *fd) XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t); pIntf->parseCode(*xmlGen, // codeOutIntf 0, // scopeName - fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")), + fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)), langExt, // lang FALSE, // isExampleBlock 0, // exampleName @@ -505,7 +505,7 @@ static void stripQualifiers(QCString &typeStr) static QCString classOutputFileBase(ClassDef *cd) { - //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); + //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); //if (inlineGroupedClasses && cd->partOfGroups()!=0) return cd->getOutputFileBase(); //else @@ -514,7 +514,7 @@ static QCString classOutputFileBase(ClassDef *cd) static QCString memberOutputFileBase(MemberDef *md) { - //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); + //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES); //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0) // return md->getClassDef()->getXmlOutputFileBase(); //else @@ -620,6 +620,13 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De if (md->isInline()) t << "yes"; else t << "no"; t << "\""; + if (al!=0 && al->refQualifier!=RefQualifierNone) + { + t << " refqual=\""; + if (al->refQualifier==RefQualifierLValue) t << "lvalue"; else t << "rvalue"; + t << "\""; + } + if (md->isFinal()) { t << " final=\"yes\""; @@ -804,11 +811,12 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De if (md->isWritable()) t << " <write>" << convertToXML(md->getWriteAccessor()) << "</write>" << endl; } + if (md->memberType()==MemberType_Variable && md->bitfieldString()) { QCString bitfield = md->bitfieldString(); if (bitfield.at(0)==':') bitfield=bitfield.mid(1); - t << " <bitfield>" << bitfield << "</bitfield>" << endl; + t << " <bitfield>" << convertToXML(bitfield) << "</bitfield>" << endl; } MemberDef *rmd = md->reimplements(); @@ -1242,7 +1250,7 @@ static void generateXMLForClass(ClassDef *cd,FTextStream &ti) << "\" kind=\"" << cd->compoundTypeString() << "\"><name>" << convertToXML(cd->name()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1442,7 +1450,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti) << "\" kind=\"namespace\"" << "><name>" << convertToXML(nd->name()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1523,7 +1531,7 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti) << "\" kind=\"file\"><name>" << convertToXML(fd->name()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1628,7 +1636,7 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti) t << " <detaileddescription>" << endl; writeXMLDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation()); t << " </detaileddescription>" << endl; - if (Config_getBool("XML_PROGRAMLISTING")) + if (Config_getBool(XML_PROGRAMLISTING)) { t << " <programlisting>" << endl; writeXMLCodeBlock(t,fd); @@ -1660,7 +1668,7 @@ static void generateXMLForGroup(GroupDef *gd,FTextStream &ti) ti << " <compound refid=\"" << gd->getOutputFileBase() << "\" kind=\"group\"><name>" << convertToXML(gd->name()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1723,7 +1731,7 @@ static void generateXMLForDir(DirDef *dd,FTextStream &ti) << "\" kind=\"dir\"><name>" << convertToXML(dd->displayName()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1776,7 +1784,7 @@ static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample) << "\" kind=\"" << kindName << "\"><name>" << convertToXML(pd->name()) << "</name>" << endl; - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QCString fileName=outputDirectory+"/"+pageName+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) @@ -1802,7 +1810,7 @@ static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample) } else { - title = Config_getString("PROJECT_NAME"); + title = Config_getString(PROJECT_NAME); } t << " <title>" << convertToXML(convertCharEntitiesToUTF8(title)) << "</title>" << endl; @@ -1845,7 +1853,7 @@ void generateXML() // + related pages // - examples - QCString outputDirectory = Config_getString("XML_OUTPUT"); + QCString outputDirectory = Config_getString(XML_OUTPUT); QDir xmlDir(outputDirectory); createSubDirs(xmlDir); diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma deleted file mode 100644 index df7834c..0000000 --- a/templates/html/arrowdown.luma +++ /dev/null @@ -1,49 +0,0 @@ -# folder open icon -# width & height -16 22 -# luma data -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255 -255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255 -255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 -255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 -255 255 255 255 255 152 152 152 152 152 255 255 255 255 255 255 -255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255 -255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 152 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -# alpha data - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 231 255 255 255 255 255 255 255 216 0 0 0 0 - 0 0 0 87 255 255 255 255 255 255 255 65 0 0 0 0 - 0 0 0 0 186 255 255 255 255 255 164 0 0 0 0 0 - 0 0 0 0 38 251 255 255 255 241 25 0 0 0 0 0 - 0 0 0 0 0 127 255 255 255 107 0 0 0 0 0 0 - 0 0 0 0 0 0 221 255 204 0 0 0 0 0 0 0 - 0 0 0 0 0 0 72 253 52 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/templates/html/arrowright.luma b/templates/html/arrowright.luma deleted file mode 100644 index 63209b0..0000000 --- a/templates/html/arrowright.luma +++ /dev/null @@ -1,49 +0,0 @@ -# folder open icon -# width & height -16 22 -# luma data -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255 -255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255 -255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255 -255 255 255 152 152 152 152 152 152 152 152 255 255 255 255 255 -255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255 -255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255 -255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255 -255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -# alpha data - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0 - 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0 - 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0 - 0 0 0 255 255 255 255 255 255 255 77 0 0 0 0 0 - 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0 - 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0 - 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0 - 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css index 01df1b3..26169de 100644 --- a/templates/html/doxygen.css +++ b/templates/html/doxygen.css @@ -4,6 +4,10 @@ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + /* @group Heading Levels */ h1.groupheader { @@ -173,7 +177,7 @@ pre.fragment { } div.fragment { - padding: 4px 6px; + padding: 0px; margin: 4px 8px 4px 2px; background-color: ##FC; border: 1px solid ##CC; @@ -232,6 +236,15 @@ span.lineno a:hover { background-color: #C8C8C8; } +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + div.ah, span.ah { background-color: black; font-weight: bold; @@ -247,7 +260,7 @@ div.ah, span.ah { -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); } div.classindex ul { @@ -501,6 +514,29 @@ table.memberdecls { /* Styles for detailed member documentation */ +.memtitle { + padding: 8px; + border-top: 1px solid ##B4; + border-left: 1px solid ##B4; + border-right: 1px solid ##B4; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: ##e6; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + .memtemplate { font-size: 80%; color: ##60; @@ -539,7 +575,7 @@ table.memberdecls { } .memname { - font-weight: bold; + font-weight: 400; margin-left: 6px; } @@ -555,24 +591,24 @@ table.memberdecls { color: ##2b; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: ##E6; + background-color: ##E3; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; - border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; } +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + .memdoc, dl.reflist dd { border-bottom: 1px solid ##B4; border-left: 1px solid ##B4; @@ -914,6 +950,7 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; + font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; @@ -1006,6 +1043,18 @@ div.summary a white-space: nowrap; } +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + div.ingroups { font-size: 8pt; @@ -1166,6 +1215,11 @@ dl.section dd { text-align: center; } +.plantumlgraph +{ + text-align: center; +} + .diagraph { text-align: center; @@ -1461,3 +1515,82 @@ tr.heading h2 { } } +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: ##47; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/templates/html/fixed_tabs.css b/templates/html/fixed_tabs.css new file mode 100644 index 0000000..93b0d51 --- /dev/null +++ b/templates/html/fixed_tabs.css @@ -0,0 +1,61 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: ##30; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + diff --git a/templates/html/header.html b/templates/html/header.html index 9f95d66..338d0be 100644 --- a/templates/html/header.html +++ b/templates/html/header.html @@ -4,6 +4,7 @@ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen $doxygenversion"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> <link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl index aacaf92..2825249 100644 --- a/templates/html/htmlbase.tpl +++ b/templates/html/htmlbase.tpl @@ -5,6 +5,7 @@ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen {{ doxygen.version }}"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> <title>{{ config.PROJECT_NAME }}: {{ page.title }}</title> <link href="{{ page.relPath }}tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="{{ page.relPath }}jquery.js"></script> @@ -16,7 +17,15 @@ <script type="text/javascript" src="{{ page.relPath }}navtree.js"></script> <script type="text/javascript"> $(document).ready(initResizable); - $(window).load(resizeHeight); +</script> +{% endif %} +{% if not config.DISABLE_INDEX %} +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',{% if config.SEARCHENGINE %}true{% else %}false{% endif %},'{{ tr.search }}'); +}); </script> {% endif %} {% if config.SEARCHENGINE %} @@ -34,7 +43,7 @@ <link rel="search" href="{{ page.relPath }}search-opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="{{ config.PROJECT_NAME }}"/> {% else %} <script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); + $(document).ready(function() { init_search(); }); </script> {% endif %} {% endif %} @@ -129,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{ {% block tabs %} {% if not config.DISABLE_INDEX %} -{% include 'htmltabs.tpl' %} +<div id="main-nav"></div> {% endif %} {% endblock %} diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl index 29d495e..41be99c 100644 --- a/templates/html/htmlclmembers.tpl +++ b/templates/html/htmlclmembers.tpl @@ -1,9 +1,5 @@ {# inputs: page, list #} {% extend 'htmlbase.tpl' %} -{% block tabs %} -{{ block.super }} -{% include 'htmlmembertabs.tpl %} -{% endblock %} {% block content %} <div class="contents"> diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl deleted file mode 100644 index 2f15c12..0000000 --- a/templates/html/htmlclmembersindex.tpl +++ /dev/null @@ -1,26 +0,0 @@ -{% with page=namespaceMembersIndex %} - {# all members #} - {% with list=namespaceMembersIndex.all section='' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# functions #} - {% with list=namespaceMembersIndex.functions section='_func' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# variables #} - {% with list=namespaceMembersIndex.variables section='_vars' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# typedefs #} - {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# enums #} - {% with list=namespaceMembersIndex.enums section='_enum' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# enumValues #} - {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlclmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} -{% endwith %} diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl index e2c781a..f158b67 100644 --- a/templates/html/htmlflmembers.tpl +++ b/templates/html/htmlflmembers.tpl @@ -1,9 +1,5 @@ {# inputs: page, list #} {% extend 'htmlbase.tpl' %} -{% block tabs %} -{{ block.super }} -{% include 'htmlmembertabs.tpl %} -{% endblock %} {% block content %} <div class="contents"> diff --git a/templates/html/htmlhelpindexhhc.tpl b/templates/html/htmlhelpindexhhc.tpl new file mode 100644 index 0000000..b5e83de --- /dev/null +++ b/templates/html/htmlhelpindexhhc.tpl @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<HTML><HEAD></HEAD><BODY> +<OBJECT type="text/site properties"> +<param name="FrameName" value="right"> +</OBJECT> +<UL> +{% recursetree index.nav %} +<LI><OBJECT type="text/sitemap"><param name="Name" value="{{ node.name }}"> + <param name="{% if node.file|isAbsoluteURL %}URL{% else %}Local{% endif %}" value="{{ node.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"> + <param name="ImageNumber" value="1{% if node.is_leaf_node %}1{% endif %}"> + </OBJECT> + {% if not node.is_leaf_node %} + <UL>{{ children }}</UL> + {% endif %} +{% endrecursetree %} +</UL> +</BODY> +</HTML> diff --git a/templates/html/htmlhelpindexhhp.tpl b/templates/html/htmlhelpindexhhp.tpl new file mode 100644 index 0000000..15aba91 --- /dev/null +++ b/templates/html/htmlhelpindexhhp.tpl @@ -0,0 +1,32 @@ +[OPTIONS] +Compatibility=1.1 +Full-text search=Yes +Contents file=index.hhc +Default Window=main +Default topic=index{{ config.HTML_FILE_EXTENSION }} +Index file=index.hhk +Language={{ tr.langString }} +{% if config.BINARY_TOC %}Binary TOC=YES{% endif %} +{% if config.GENERATE_CHI %}Create CHI file=YES{% endif %} +Title={{ config.PROJECT_NAME }} + +[WINDOWS] +main="My Project","index.hhc","index.hhk","index{{ config.HTML_FILE_EXTENSION }}","index{{ config.HTML_FILE_EXTENSION }}",,,,,0x23520,,0x{% if config.BINARY_TOC %}7{% else %}1{% endif %}0387e,,,,,,,,0 + +[FILES] +{% for node in index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}' %} +{% if not node.isReference and node.file %}{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% endif %} +{% endfor %} +tab_a.png +tab_b.png +tab_h.png +tab_s.png +nav_h.png +nav_f.png +bc_s.png +doxygen.png +closed.png +open.png +bdwn.png +sync_on.png +sync_off.png diff --git a/templates/html/htmljsmenudata.tpl b/templates/html/htmljsmenudata.tpl new file mode 100644 index 0000000..08d8773 --- /dev/null +++ b/templates/html/htmljsmenudata.tpl @@ -0,0 +1,52 @@ +var menudata={children:[ +{text:'{{ tr.mainPage }}',url:'index{{ config.HTML_FILE_EXTENSION }}'} +{% if pageTree.tree %} +,{text:'{{ tr.pages }}',url:'pages{{ config.HTML_FILE_EXTENSION }}'} +{% endif %} +{% if moduleTree.tree %} +,{text:'{{ tr.modules }}',url:'modules{{ config.HTML_FILE_EXTENSION }}'} +{% endif %} +{% if namespaceList %} +,{text:'{{ tr.namespaces }}',url:'namespaces{{ config.HTML_FILE_EXTENSION }}',children:[ + {text:'{{ tr.namespaceList }}',url:'namespaces{{ config.HTML_FILE_EXTENSION }}'} +{% if namespaceMembersIndex.all %} +,{text:'{{ tr.namespaceMembers }}',url:'namespacemembers{{ config.HTML_FILE_EXTENSION }}',children:[ + {% with page=namespaceMembersIndex %} + {% include 'htmljsmenumembersdata.tpl' %} + {% endwith %} + ]} +{% endif %} +]} +{% endif %} +{% if classList %} +,{text:'{{ tr.classes }}',url:'annotated{{ config.HTML_FILE_EXTENSION }}',children:[ + {text:'{{ tr.classList }}',url:'annotated{{ config.HTML_FILE_EXTENSION }}'} +{% if classHierarchy.tree %} +,{text:'{{ tr.classHierarchy }}',url:'hierarchy{{ config.HTML_FILE_EXTENSION }}'} +{% endif %} +{% if classMembersIndex.all %} +,{text:'{{ tr.classMembers }}',url:'functions{{ config.HTML_FILE_EXTENSION }}',children:[ + {% with page=classMembersIndex %} + {% include 'htmljsmenumembersdata.tpl' %} + {% endwith %} +]} +{% endif %} +]} +{% endif %} +{% if fileList %} +,{text:'{{ tr.files }}',url:'files{{ config.HTML_FILE_EXTENSION }}',children[ + {text:'{{ tr.fileList }}',url:'files{{ config.HTML_FILE_EXTENSION }}'} +{% if globalsIndex.all %} +,{text:'{{ tr.fileMembers }}',url'globals{{ config.HTML_FILE_EXTENSION }}',children:[ + {% with page=globalsIndex %} + {% include 'htmljsmenumembersdata.tpl' %} + {% endwith %} +]} +{% endif %} +]} +{% endif %} +{% if exampleTree.tree %} +,{text:'{{ tr.examples }}',url:'examples{{ config.HTML_FILE_EXTENSION }}'} +{% endif %} +]} + diff --git a/templates/html/htmljsmenuletterdata.tpl b/templates/html/htmljsmenuletterdata.tpl new file mode 100644 index 0000000..ded3402 --- /dev/null +++ b/templates/html/htmljsmenuletterdata.tpl @@ -0,0 +1,12 @@ +{# inputs: page, list, section, text #} +{text:'{{ text }}',url:'{{ page.fileName }}{{ section }}{{ config.HTML_FILE_EXTENSION }}' +{% if list|length>maxItemsForMultiPageList %} +,children:[ + {% with index=list|alphaIndex:'name' %} + {% for sect in index %} + {text:'{{ sect.letter }}',url:'{{ page.fileName }}{{ section }}_{{ sect.label }}{{ config.HTML_FILE_EXTENSION }}'}{% if not forloop.last %},{% endif %} + {% endfor %} + {% endwith %} +] +{% endif %} +} diff --git a/templates/html/htmljsmenumembersdata.tpl b/templates/html/htmljsmenumembersdata.tpl new file mode 100644 index 0000000..fa2ab66 --- /dev/null +++ b/templates/html/htmljsmenumembersdata.tpl @@ -0,0 +1,58 @@ +{# all members #} +{% with list=page.all section='' text=tr.all %} + {% include 'htmljsmenuletterdata.tpl' %} +{% endwith %} +{# functions #} +{% if page.functions %} + {% with list=page.functions section='_func' text=tr.functions %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# variables #} +{% if page.variables %} + {% with list=page.variables section='_vars' text=tr.variables %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# typedefs #} +{% if page.typedefs %} + {% with list=page.typedefs section='_type' text=tr.typedefs %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# enums #} +{% if page.enums %} + {% with list=page.enums section='_enum' text=tr.enums %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# enumValues #} +{% if page.enumValues %} + {% with list=page.enumValues section='_eval' text=tr.enumValues %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# macros #} +{% if page.macros %} + {% with list=page.macros section='_defs' text=tr.macros %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# properties #} +{% if page.properties %} + {% with list=page.properties section='_prop' text=tr.properties %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# events #} +{% if page.events %} + {% with list=page.events section='_evnt' text=tr.events %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} +{# related #} +{% if page.related %} + {% with list=page.related section='_rela' text=tr.related %} + ,{% include 'htmljsmenuletterdata.tpl' %} + {% endwith %} +{% endif %} diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl index 07a9efc..b24b166 100644 --- a/templates/html/htmljsnavindex.tpl +++ b/templates/html/htmljsnavindex.tpl @@ -2,6 +2,6 @@ var NAVTREEINDEX{{ idx }} = { {% for entry in entries %} - "{{ entry.file }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %} + "{{ entry.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %} {% endfor %} }; diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl index 9970161..947b980 100644 --- a/templates/html/htmljsnavtree.tpl +++ b/templates/html/htmljsnavtree.tpl @@ -1,7 +1,7 @@ var NAVTREE = [ {% recursetree index.nav %} - [ "{{ node.name }}", {% if node.file %}"{% if node.isReference %}{{ node.externalReference }}{% endif %}{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [ + [ "{{ node.name }}", {% if node.file %}"{% if node.isReference %}{{ node.externalReference }}{% endif %}{{ node.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [ {{ children }} ]{% else %} null{% endif %} ]{% if not node.last %},{% endif %} {% endrecursetree %} diff --git a/templates/html/htmljssearchdata.tpl b/templates/html/htmljssearchdata.tpl index c48ea1d..802795e 100644 --- a/templates/html/htmljssearchdata.tpl +++ b/templates/html/htmljssearchdata.tpl @@ -19,7 +19,7 @@ var indexSectionNames = {% endif %} {% endfor %} }; -var IndexSectionLabels = +var indexSectionLabels = { {% set count=0 %} {% for idx in searchIndices %} diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl index 52883a3..a40bdbc 100644 --- a/templates/html/htmllayout.tpl +++ b/templates/html/htmllayout.tpl @@ -26,11 +26,10 @@ {% resource 'navtree.css' %} {% resource 'navtree.js' %} {% resource 'resize.js' %} +{% resource 'menu.js' %} {% resource 'doc.luma' %} {% resource 'folderopen.luma' %} {% resource 'folderclosed.luma' %} -{% resource 'arrowdown.luma' %} -{% resource 'arrowright.luma' %} {% resource 'splitbar.lum' %} {# general search resources #} @@ -267,9 +266,22 @@ {% endfor %} {% endif %} +{# write html help index #} +{% if config.GENERATE_HTMLHELP %} + {% encoding config.CHM_INDEX_ENCODING|default:'CP1250' %} + {% create 'index.hhp' from 'htmlhelpindexhhp.tpl' %} + {% create 'index.hhc' from 'htmlhelpindexhhc.tpl' %} + {% endencoding %} +{% endif %} + {# write the navigation tree data #} {% if config.GENERATE_TREEVIEW %} {% create 'navtreedata.js' from 'htmljsnavtree.tpl' %} {% endif %} +{# write menu data #} +{% if not config.DISABLE_INDEX %} + {% create 'menudata.js' from 'htmljsmenudata.tpl' %} +{% endif %} + {% msg %}----- End generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %} diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl index 2b03a22..cb9c9e0 100644 --- a/templates/html/htmlmemdef.tpl +++ b/templates/html/htmlmemdef.tpl @@ -94,6 +94,8 @@ {{ member.extraTypeChars }} {% if member.hasConstQualifier %} const {% endif %} {% if member.hasVolatileQualifier %} volatile {% endif %} + {% if member.hasRefQualifierLValue %} & {% endif %} + {% if member.hasRefQualifierRValue %} && {% endif %} {{ member.trailingReturnType }} {% endif %} {% endif %} diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl deleted file mode 100644 index 9713232..0000000 --- a/templates/html/htmlnavtree.tpl +++ /dev/null @@ -1,22 +0,0 @@ -var NAVTREE = -[ - [ "{% if mainPage.title %}mainPage.title|jsstring{% else %}{{ tr.mainPage }}{% endif %}", - "index{{ config.HTML_FILE_EXTENSION }}", - ] -]; - -var NAVTREEINDEX = -[ -{# write first entry of each sub index #} -{% for entries in navTree.subindices %} - "{{ entries[0].url }}"{% if not forloop.last %},{% endif %} -{% endfor %} - ] -]; - -{# write all sub indices #} -{% for entries in navTree.subindices %} - {% with idx=forloop.counter0 %} - {% create idx|prepend:'navtreeindex'|append:'.js' from 'htmlnavindex.tpl' %} - {% endwith %} -{% endfor %} diff --git a/templates/html/htmlnsmembers.tpl b/templates/html/htmlnsmembers.tpl index 3f4c0bd..97ba2c2 100644 --- a/templates/html/htmlnsmembers.tpl +++ b/templates/html/htmlnsmembers.tpl @@ -1,9 +1,5 @@ {# inputs: page, list #} {% extend 'htmlbase.tpl' %} -{% block tabs %} -{{ block.super }} -{% include 'htmlmembertabs.tpl' %} -{% endblock %} {% block content %} <div class="contents"> diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl deleted file mode 100644 index dc3bfd4..0000000 --- a/templates/html/htmlnsmembersindex.tpl +++ /dev/null @@ -1,26 +0,0 @@ -{% with page=namespaceMembersIndex %} - {# all members #} - {% with list=namespaceMembersIndex.all section='' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# functions #} - {% with list=namespaceMembersIndex.functions section='_func' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# variables #} - {% with list=namespaceMembersIndex.variables section='_vars' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# typedefs #} - {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# enums #} - {% with list=namespaceMembersIndex.enums section='_enum' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} - {# enumValues #} - {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlnsmembers.tpl' %} - {% include 'htmlindexpages.tpl' %} - {% endwith %} -{% endwith %} diff --git a/templates/html/jquery.js b/templates/html/jquery.js index 1f4d0b4..f5343ed 100644 --- a/templates/html/jquery.js +++ b/templates/html/jquery.js @@ -65,4 +65,23 @@ Released under MIT license. https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt */ -(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*! + * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016 + * http://www.smartmenus.org/ + * + * Copyright Vasil Dinkov, Vadikom Web Ltd. + * http://vadikom.com + * + * Licensed MIT + */ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a}));
\ No newline at end of file diff --git a/templates/html/menu.js b/templates/html/menu.js new file mode 100644 index 0000000..97db4c2 --- /dev/null +++ b/templates/html/menu.js @@ -0,0 +1,26 @@ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='<ul>'; + for (var i in data.children) { + result+='<li><a href="'+relPath+data.children[i].url+'">'+ + data.children[i].text+'</a>'+ + makeTree(data.children[i],relPath)+'</li>'; + } + result+='</ul>'; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>'); + } else { + $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>'); + } + } + $('#main-menu').smartmenus(); +} diff --git a/templates/html/navtree.css b/templates/html/navtree.css index c618811..7d1cb67 100644 --- a/templates/html/navtree.css +++ b/templates/html/navtree.css @@ -94,8 +94,11 @@ } .ui-resizable-e { - background:url("splitbar.png") repeat scroll right center transparent; - cursor:e-resize; + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:no-repeat; + background-attachment: scroll; + cursor:ew-resize; height:100%; right:0; top:0; diff --git a/templates/html/navtree.js b/templates/html/navtree.js index 9df45a7..e6d31b0 100644 --- a/templates/html/navtree.js +++ b/templates/html/navtree.js @@ -1,4 +1,6 @@ var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; function getData(varName) { @@ -71,17 +73,17 @@ function cachedLink() function getScript(scriptName,func,show) { - var head = document.getElementsByTagName("head")[0]; + var head = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); script.id = scriptName; script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - if ($.browser.msie && $.browser.version<=8) { + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { // script.onload does not work with older versions of IE script.onreadystatechange = function() { - if (script.readyState=='complete' || script.readyState=='loaded') { - func(); if (show) showRoot(); + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); } } } @@ -94,18 +96,17 @@ function createIndent(o,domNode,node,level) var n = node; while (n.parentNode) { level++; n=n.parentNode; } if (node.childrenData) { - var imgNode = document.createElement("img"); + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.width = 16; - imgNode.height = 22; - imgNode.border = 0; + imgNode.innerHTML=arrowRight; node.plus_img = imgNode; node.expandToggle = document.createElement("a"); node.expandToggle.href = "javascript:void(0)"; node.expandToggle.onclick = function() { if (node.expanded) { $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.src = node.relpath+"arrowright.png"; + node.plus_img.innerHTML=arrowRight; node.expanded = false; } else { expandNode(o, node, false, false); @@ -113,15 +114,13 @@ function createIndent(o,domNode,node,level) } node.expandToggle.appendChild(imgNode); domNode.appendChild(node.expandToggle); - imgNode.src = node.relpath+"arrowright.png"; } else { var span = document.createElement("span"); - span.style.display = 'inline-block'; + span.className = 'arrow'; span.style.width = 16*(level+1)+'px'; - span.style.height = '22px'; span.innerHTML = ' '; domNode.appendChild(span); - } + } } var animationInProgress = false; @@ -195,7 +194,7 @@ function newNode(o, po, text, link, childrenData, lastNode) var aname = '#'+link.split('#')[1]; var srcPage = stripPath(pathName()); var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; a.onclick = function(){ storeLink(link); if (!$(a).parent().parent().hasClass('selected')) @@ -213,7 +212,7 @@ function newNode(o, po, text, link, childrenData, lastNode) a.onclick = function() { storeLink(link); } } } else { - if (childrenData != null) + if (childrenData != null) { a.className = "nolink"; a.href = "javascript:void(0)"; @@ -262,17 +261,13 @@ function expandNode(o, node, imm, showRoot) } else { if (!node.childrenVisited) { getNode(o, node); - } if (imm || ($.browser.msie && $.browser.version>8)) { + } if (imm || ($.browser.msie && $.browser.version>8)) { // somehow slideDown jumps to the start of tree for IE9 :-( $(node.getChildrenUL()).show(); } else { $(node.getChildrenUL()).slideDown("fast"); } - if (node.isLast) { - node.plus_img.src = node.relpath+"arrowdown.png"; - } else { - node.plus_img.src = node.relpath+"arrowdown.png"; - } + node.plus_img.innerHTML = arrowDown; node.expanded = true; } } @@ -341,7 +336,7 @@ function showNode(o, node, index, hash) getNode(o, node); } $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.src = node.relpath+"arrowdown.png"; + node.plus_img.innerHTML = arrowDown; node.expanded = true; var n = node.children[o.breadcrumbs[index]]; if (index+1<o.breadcrumbs.length) { @@ -478,10 +473,9 @@ function initNavTree(toroot,relpath) o.node.relpath = relpath; o.node.expanded = false; o.node.isLast = true; - o.node.plus_img = document.createElement("img"); - o.node.plus_img.src = relpath+"arrowright.png"; - o.node.plus_img.width = 16; - o.node.plus_img.height = 22; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; if (localStorageSupported()) { var navSync = $('#nav-sync'); diff --git a/templates/html/resize.js b/templates/html/resize.js index 2b86c36..56e4a02 100644 --- a/templates/html/resize.js +++ b/templates/html/resize.js @@ -1,73 +1,104 @@ -var cookie_namespace = 'doxygen'; -var sidenav,navtree,content,header; - -function readCookie(cookie) +function initResizable() { - var myCookie = cookie_namespace+"_"+cookie+"="; - if (document.cookie) + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) { - var index = document.cookie.indexOf(myCookie); - if (index != -1) - { - var valStart = index + myCookie.length; - var valEnd = document.cookie.indexOf(";", valStart); - if (valEnd == -1) - { - valEnd = document.cookie.length; + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; } - var val = document.cookie.substring(valStart, valEnd); - return val; } + return 0; } - return 0; -} -function writeCookie(cookie, val, expiration) -{ - if (val==undefined) return; - if (expiration == null) + function writeCookie(cookie, val, expiration) { - var date = new Date(); - date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week - expiration = date.toGMTString(); + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; } - document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; -} - -function resizeWidth() -{ - var windowWidth = $(window).width() + "px"; - var sidenavWidth = $(sidenav).outerWidth(); - content.css({marginLeft:parseInt(sidenavWidth)+"px"}); - writeCookie('width',sidenavWidth, null); -} -function restoreWidth(navWidth) -{ - var windowWidth = $(window).width() + "px"; - content.css({marginLeft:parseInt(navWidth)+6+"px"}); - sidenav.css({width:navWidth + "px"}); -} + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } -function resizeHeight() -{ - var headerHeight = header.outerHeight(); - var footerHeight = footer.outerHeight(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - content.css({height:windowHeight + "px"}); - navtree.css({height:windowHeight + "px"}); - sidenav.css({height:windowHeight + "px"}); -} + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width<desktop_vp && collapsedWidth>=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth<desktop_vp) { + if (collapsed) { + collapseExpand(); + } + } + collapsedWidth=width; + } + } + + function collapseExpand() + { + if (sidenav.width()>0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } -function initResizable() -{ header = $("#top"); sidenav = $("#side-nav"); content = $("#doc-content"); navtree = $("#nav-tree"); footer = $("#nav-path"); $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } var width = readCookie('width'); if (width) { restoreWidth(width); } else { resizeWidth(); } resizeHeight(); @@ -76,22 +107,8 @@ function initResizable() if (i>=0) window.location.hash=url.substr(i); var _preventDefault = function(evt) { evt.preventDefault(); }; $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(document).bind('touchmove',function(e){ - var device = navigator.userAgent.toLowerCase(); - var ios = device.match(/(iphone|ipod|ipad)/); - if (ios) { - try { - var target = e.target; - while (target) { - if ($(target).css('-webkit-overflow-scrolling')=='touch') return; - target = target.parentNode; - } - e.preventDefault(); - } catch(err) { - e.preventDefault(); - } - } - }); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).load(resizeHeight); } diff --git a/templates/html/search.css b/templates/html/search.css index a77ab21..859cf6a 100644 --- a/templates/html/search.css +++ b/templates/html/search.css @@ -6,14 +6,12 @@ #MSearchBox { white-space : nowrap; - position: absolute; float: none; - display: inline; margin-top: 8px; right: 0px; width: 170px; + height: 24px; z-index: 102; - background-color: white; } #MSearchBox .left @@ -48,12 +46,13 @@ height:19px; background:url('search_m.png') repeat-x; border:none; - width:111px; + width:115px; margin-left:20px; padding-left:4px; color: #909090; outline: none; font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; } #FSearchBox #MSearchField { @@ -64,7 +63,7 @@ display:block; position:absolute; right:10px; - top:0px; + top:8px; width:20px; height:19px; background:url('search_r.png') no-repeat; @@ -102,7 +101,7 @@ left: 0; top: 0; border: 1px solid ##A0; background-color: ##FA; - z-index: 1; + z-index: 10001; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; @@ -165,6 +164,7 @@ iframe#MSearchResults { left: 0; top: 0; border: 1px solid #000; background-color: ##F0; + z-index:10000; } /* ----------------------------------- */ diff --git a/templates/html/search_fixedtabs.css b/templates/html/search_fixedtabs.css new file mode 100644 index 0000000..a77ab21 --- /dev/null +++ b/templates/html/search_fixedtabs.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid ##A0; + background-color: ##FA; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: ##50; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: ##F0; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: ##58; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: ##58; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: ##F2; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/templates/html/search_nomenu.css b/templates/html/search_nomenu.css new file mode 100644 index 0000000..bb50b44 --- /dev/null +++ b/templates/html/search_nomenu.css @@ -0,0 +1,273 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 0px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; + display: inline; + position: absolute; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid ##A0; + background-color: ##FA; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: ##50; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: ##F0; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: ##58; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: ##58; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: ##F2; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/templates/html/search_opensearch.php b/templates/html/search_opensearch.php index e3a4634..58ee4ab 100644 --- a/templates/html/search_opensearch.php +++ b/templates/html/search_opensearch.php @@ -3,6 +3,7 @@ require "search_functions.php"; $mode = array_key_exists('v', $_GET)?$_GET['v']:""; $query = array_key_exists('query', $_GET)?$_GET['query']:""; +$query = preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query ); $query_results = run_query($query); diff --git a/templates/html/svgpan.js b/templates/html/svgpan.js index 4218e79..db9fcb9 100644 --- a/templates/html/svgpan.js +++ b/templates/html/svgpan.js @@ -89,9 +89,13 @@ function show() function init(evt) { svgDoc = evt.target.ownerDocument; - if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections - { - top.window.registerShow(sectionId,show); + try { + if (top.window && top.window.registerShow) { // register show function in html doc for dynamic sections + top.window.registerShow(sectionId,show); + } + } catch(e) { + // ugh, we are not allowed to talk to the parent; can happen with Chrome when viewing pages + // locally, since they treat every local page as having a different origin } show(); diff --git a/templates/html/tabs.css b/templates/html/tabs.css index 737d559..a28614b 100644 --- a/templates/html/tabs.css +++ b/templates/html/tabs.css @@ -1,60 +1 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: ##30; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty index 3f21871..e457acc 100644 --- a/templates/latex/doxygen.sty +++ b/templates/latex/doxygen.sty @@ -305,9 +305,25 @@ \vspace{6pt}% } +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + % Used for parameters within a detailed function description \newenvironment{DoxyParamCaption}{% - \renewcommand{\item}[2][]{##1 {\em ##2}}% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% }{% } @@ -475,3 +491,13 @@ % Color used for table heading \newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother diff --git a/templates/latex/latexrefman.tpl b/templates/latex/latexrefman.tpl index 27b7ea0..b208177 100644 --- a/templates/latex/latexrefman.tpl +++ b/templates/latex/latexrefman.tpl @@ -51,7 +51,7 @@ \hbadness=750 \setlength{\emergencystretch}{15pt} \setlength{\parindent}{0cm} -\setlength{\parskip}{0.2cm} +\setlength{\parskip}{3ex plus 2ex minus 2ex} \makeatletter \renewcommand{\paragraph}{ \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{ diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd index c960c7b..29eb1db 100644 --- a/templates/xml/compound.xsd +++ b/templates/xml/compound.xsd @@ -149,6 +149,7 @@ <xsd:attribute name="const" type="DoxBool" use="optional"/> <xsd:attribute name="explicit" type="DoxBool" use="optional"/> <xsd:attribute name="inline" type="DoxBool" use="optional"/> + <xsd:attribute name="refqual" type="DoxRefQualifierKind" use="optional"/> <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/> <xsd:attribute name="volatile" type="DoxBool" use="optional"/> <xsd:attribute name="mutable" type="DoxBool" use="optional"/> @@ -689,6 +690,13 @@ </xsd:restriction> </xsd:simpleType> + <xsd:simpleType name="DoxRefQualifierKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="lvalue" /> + <xsd:enumeration value="rvalue" /> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="DoxLanguage"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Unknown" /> @@ -704,6 +712,7 @@ <xsd:enumeration value="Fortran" /> <xsd:enumeration value="VHDL" /> <xsd:enumeration value="XML" /> + <xsd:enumeration value="SQL" /> <xsd:enumeration value="Tcl" /> <xsd:enumeration value="Markdown" /> </xsd:restriction> diff --git a/testing/014/indexpage.xml b/testing/014/indexpage.xml index c2fe57a..6f62ef2 100644 --- a/testing/014/indexpage.xml +++ b/testing/014/indexpage.xml @@ -6,16 +6,16 @@ <detaileddescription> <para> <programlisting> - <codeline lineno="1"> + <codeline> <highlight class="comment">#<sp/>comment<sp/>in<sp/>Python</highlight> <highlight class="normal"/> </codeline> - <codeline lineno="2"> + <codeline> <highlight class="normal"/> <highlight class="keyword">class<sp/></highlight> <highlight class="normal">Python:</highlight> </codeline> - <codeline lineno="3"> + <codeline> <highlight class="normal"> <sp/> <sp/> diff --git a/testing/055/md_055_markdown.xml b/testing/055/md_055_markdown.xml index 4006db8..18df45b 100644 --- a/testing/055/md_055_markdown.xml +++ b/testing/055/md_055_markdown.xml @@ -23,6 +23,7 @@ <para> <ulink url="http://example.com/last-line">Upper-cased reference link on last line</ulink> </para> + <para>Dash - NDash <ndash/> MDash <mdash/> EDash - ENDash -- EMDash --- E3Dash --- </para> </detaileddescription> </compounddef> </doxygen> diff --git a/testing/055_markdown.md b/testing/055_markdown.md index aeb9f1a..375040e 100644 --- a/testing/055_markdown.md +++ b/testing/055_markdown.md @@ -20,3 +20,5 @@ More text [Upper-cased reference link on last line][U] [U]: http://example.com/last-line + +Dash - NDash -- MDash --- EDash \- ENDash \-- EMDash \--- E3Dash \-\-\- diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml index 69c05d0..c8c8e85 100644 --- a/testing/063/namespaceoo_1_1define.xml +++ b/testing/063/namespaceoo_1_1define.xml @@ -3,10 +3,10 @@ <compounddef id="namespaceoo_1_1define" kind="namespace" language="Tcl"> <compoundname>oo::define</compoundname> <sectiondef kind="func"> - <memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <memberdef kind="function" id="namespaceoo_1_1define_1a92656f535365dc915e04ca81bc8eb91b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> <type/> <definition>oo::define::classmethod</definition> - <argsstring>name?args??body?</argsstring> + <argsstring>name ?args? ?body?</argsstring> <name>classmethod</name> <briefdescription> </briefdescription> diff --git a/testing/064/struct_foo.xml b/testing/064/struct_foo.xml index d2bed81..e228f92 100644 --- a/testing/064/struct_foo.xml +++ b/testing/064/struct_foo.xml @@ -17,10 +17,10 @@ </inbodydescription> <location file="064_castoperator.cpp" line="22" column="1"/> </memberdef> - <memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual"> + <memberdef kind="function" id="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual"> <type/> <definition>Foo::operator int</definition> - <argsstring>() const </argsstring> + <argsstring>() const</argsstring> <name>operator int</name> <briefdescription> <para>Conversion to int const. </para> @@ -71,27 +71,27 @@ </listitem> <listitem> <para> - <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref> + <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">operator int() const</ref> </para> </listitem> <listitem> <para> - <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref> + <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">title</ref> </para> </listitem> <listitem> <para> - <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref> + <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">Foo::operator int() const</ref> </para> </listitem> <listitem> <para> - <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref> + <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">Foo::operator int() const</ref> </para> </listitem> <listitem> <para> - <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref> + <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">title</ref> </para> </listitem> </itemizedlist> @@ -103,7 +103,7 @@ <scope>Foo</scope> <name>operator int</name> </member> - <member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual"> + <member refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" prot="public" virt="non-virtual"> <scope>Foo</scope> <name>operator int</name> </member> diff --git a/vhdlparser/CMakeLists.txt b/vhdlparser/CMakeLists.txt index 1f60ae0..71e97df 100644 --- a/vhdlparser/CMakeLists.txt +++ b/vhdlparser/CMakeLists.txt @@ -1,5 +1,14 @@ -include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/qtools) +# configvalues.h +add_custom_command( + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h + DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py + OUTPUT ${GENERATED_SRC}/configvalues.h +) +set_source_files_properties(${GENERATED_SRC}/configvalues.h PROPERTIES GENERATED 1) + +include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/qtools ${GENERATED_SRC}) add_library(vhdlparser STATIC +${GENERATED_SRC}/configvalues.h CharStream.cc ParseException.cc Token.cc diff --git a/vhdlparser/CharStream.h b/vhdlparser/CharStream.h index 409439f..2543ad1 100644 --- a/vhdlparser/CharStream.h +++ b/vhdlparser/CharStream.h @@ -30,13 +30,29 @@ namespace parser { class CharStream { public: void setTabSize(int i) { tabSize = i; } - int getTabSize(int) { return tabSize; } - virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; } - virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; } - virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; } - virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; } - virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; } - virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; } + int getTabSize(int i) { return tabSize; } + private: + int getBufcolumn(int pos) { + if (trackLineColumn && pos>=0) { + return bufcolumn[pos]; + } else { + return -1; + } + } + int getBufline(int pos) { + if (trackLineColumn && pos>=0) { + return bufline[pos]; + } else { + return -1; + } + } + public: + virtual int getColumn() { return getBufcolumn(bufpos); } + virtual int getLine() { return getBufline(bufpos); } + virtual int getEndColumn() { return getBufcolumn(bufpos); } + virtual int getEndLine() { return getBufline(bufpos); } + virtual int getBeginColumn() { return getBufcolumn(tokenBegin); } + virtual int getBeginLine() { return getBufline(tokenBegin); } virtual bool getTrackLineColumn() { return trackLineColumn; } virtual void setTrackLineColumn(bool val) { trackLineColumn = val; } @@ -179,7 +195,7 @@ public: } CharStream(ReaderStream *input_stream, int startline, - int startcolumn, int) : + int startcolumn, int buffersize) : bufline(NULL), bufcolumn(NULL), buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false), available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true), @@ -248,4 +264,4 @@ public: } } #endif -/* JavaCC - OriginalChecksum=89f4cb30f0d3487ee809cca18a2924f2 (do not edit this line) */ +/* JavaCC - OriginalChecksum=3f0e693d1617236429891c8c95713d73 (do not edit this line) */ diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h index 2170489..9f7dc07 100644 --- a/vhdlparser/ErrorHandler.h +++ b/vhdlparser/ErrorHandler.h @@ -24,7 +24,7 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str); // expectedKind - token kind that the parser was trying to consume. // expectedToken - the image of the token - tokenImages[expectedKind]. // actual - the actual token that the parser got instead. - virtual void handleUnexpectedToken(int, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *) { + virtual void handleUnexpectedToken(int expectedKind, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *parser) { error_count++; fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str()); } @@ -32,14 +32,14 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str); // last - the last token successfully parsed. // unexpected - the token at which the error occurs. // production - the production in which this error occurrs. - virtual void handleParseError(Token *, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *) { + virtual void handleParseError(Token *last, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *parser) { error_count++; fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str()); } virtual int getErrorCount() { return error_count; } - virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *) { + virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *parser) { fprintf(stderr, "Error: %s\n", (char*)message.c_str()); } virtual ~ErrorHandler() {} @@ -62,11 +62,11 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str); // errorAfter : prefix that was seen before this error occurred // curchar : the offending character // - virtual void lexicalError(bool EOFSeen, int, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager*) { + virtual void lexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager* token_manager) { // by default, we just print an error message and return. fprintf(stderr, "Lexical error at: %d:%d. Encountered: %c after: %s.\n", errorLine, errorColumn, curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str())); } - virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager*) { + virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* token_manager) { fprintf(stderr, "%s\n", (char*)errorMessage.c_str()); } virtual ~TokenManagerErrorHandler() {} diff --git a/vhdlparser/Makefile.in b/vhdlparser/Makefile index ef2c774..4725470 100644 --- a/vhdlparser/Makefile.in +++ b/vhdlparser/Makefile @@ -1,39 +1,22 @@ # -# +# Copyright (C) 1997-2015 by Dimitri van Heesch. # -# Copyright (C) 1997-2000 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 +# 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. -# - -all: Makefile.vhdlparser Makefile - $(MAKE) -f Makefile.vhdlparser $@ - -Makefile.vhdlparser: vhdlparser.pro - $(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser - -tmake: - $(ENV) $(PERL) "$(TMAKE)" vhdlparser.pro >Makefile.vhdlparser - -clean: Makefile.vhdlparser - $(MAKE) -f Makefile.vhdlparser clean +# regenerate: - $(RM) CharStream.cc CharStream.h ErrorHandler.h ParseException.cc ParseException.h \ + rm -f CharStream.cc CharStream.h ErrorHandler.h ParseException.cc ParseException.h \ Token.cc Token.h TokenManager.h TokenMgrError.cc TokenMgrError.h VhdlParser.cc VhdlParser.h \ VhdlParserConstants.h VhdlParserTokenManager.cc VhdlParserTokenManager.h \ JavaCC.h javacc vhdlparser.jj - $(CP) JavaCC.h.in JavaCC.h - -distclean: clean - $(RM) Makefile vhdlparser.pro + cp JavaCC.h.in JavaCC.h FORCE: diff --git a/vhdlparser/TokenManager.h b/vhdlparser/TokenManager.h index 68fbe2f..0c2caa6 100644 --- a/vhdlparser/TokenManager.h +++ b/vhdlparser/TokenManager.h @@ -2,9 +2,12 @@ /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ #ifndef TOKENMANAGER_H #define TOKENMANAGER_H +#include <iostream> #include "JavaCC.h" #include "Token.h" +using namespace std; + namespace vhdl { namespace parser { /** @@ -16,12 +19,12 @@ namespace parser { class TokenManager { public: /** This gets the next token from the input stream. - * A token of kind 0 (\<EOF\>) should be returned on EOF. + * A token of kind 0 (<EOF>) should be returned on EOF. */ virtual ~TokenManager() { } virtual Token *getNextToken() = 0; virtual void lexicalError() { - fprintf(stderr,"Lexical error encountered."); + cerr << "Lexical error encountered." << endl; } }; diff --git a/vhdlparser/TokenMgrError.cc b/vhdlparser/TokenMgrError.cc index 2749940..74908f0 100644 --- a/vhdlparser/TokenMgrError.cc +++ b/vhdlparser/TokenMgrError.cc @@ -115,4 +115,4 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) { } } -/* JavaCC - OriginalChecksum=2fe11435e6701b2fca885354b08bfdf6 (do not edit this line) */ +/* JavaCC - OriginalChecksum=72f292bc267bd0602e63291bf864f942 (do not edit this line) */ diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc index 949f227..df9bbe5 100644 --- a/vhdlparser/VhdlParser.cc +++ b/vhdlparser/VhdlParser.cc @@ -62,7 +62,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;if (!hasError) { @@ -76,7 +76,7 @@ QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;if str=tok->image.c_str(); return str+str1; assert(false); - } +} QCString VhdlParser::actual_designator() {QCString str;Token *t=0; @@ -118,7 +118,7 @@ return str; } } assert(false); - } +} QCString VhdlParser::actual_parameter_part() {QCString s;if (!hasError) { @@ -128,7 +128,7 @@ QCString VhdlParser::actual_parameter_part() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::actual_part() {QCString s,s1; @@ -187,7 +187,7 @@ s+="(";s+=s1+")";return s; } } assert(false); - } +} QCString VhdlParser::adding_operator() { @@ -231,7 +231,7 @@ return "&"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::aggregate() {QCString s,s1,s2;if (!hasError) { @@ -276,7 +276,7 @@ s+=","+s1; return "("+s+")"; assert(false); - } +} QCString VhdlParser::alias_declaration() {QCString s,s1,s2;if (!hasError) { @@ -358,7 +358,7 @@ addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s return s2+" "+s+";"; assert(false); - } +} QCString VhdlParser::alias_designator() {Token *tok=0;QCString s; @@ -403,7 +403,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::allocator() { @@ -435,7 +435,7 @@ void VhdlParser::allocator() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::architecture_body() {QCString s,s1;if (!hasError) { @@ -528,7 +528,7 @@ error_skipto(BEGIN_T); } lastEntity=0;lastCompound=0; genLabels.resize(0); - } +} void VhdlParser::architecture_declarative_part() {if (!hasError) { @@ -568,7 +568,7 @@ void VhdlParser::architecture_declarative_part() {if (!hasError) { end_label_2: ; } - } +} void VhdlParser::architecture_statement_part() {if (!hasError) { @@ -601,7 +601,7 @@ void VhdlParser::architecture_statement_part() {if (!hasError) { end_label_3: ; } - } +} QCString VhdlParser::array_type_definition() {QCString s; @@ -634,7 +634,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { @@ -689,7 +689,7 @@ s.prepend("assert "); if(t1) s2.prepend(" report "); return s+s1+s2; assert(false); - } +} QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!hasError) { @@ -724,7 +724,7 @@ QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!has if(t) s+=":"; return s+s1+";"; assert(false); - } +} QCString VhdlParser::association_element() {QCString s,s1;if (!hasError) { @@ -749,7 +749,7 @@ QCString VhdlParser::association_element() {QCString s,s1;if (!hasError) { return s+" => "+s1; assert(false); - } +} QCString VhdlParser::association_list() {QCString s,s1;if (!hasError) { @@ -786,7 +786,7 @@ s+=","+s1; return s; assert(false); - } +} QCString VhdlParser::attribute_declaration() {QCString s,s1;if (!hasError) { @@ -813,7 +813,7 @@ QCString VhdlParser::attribute_declaration() {QCString s,s1;if (!hasError) { addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public); return " attribute "+s+":"+s1+";"; assert(false); - } +} QCString VhdlParser::attribute_designator() {QCString s;Token *tok=0; @@ -847,7 +847,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::attribute_name() {QCString s,s1;if (!hasError) { @@ -896,7 +896,7 @@ s+"("+s1+")"; return s; assert(false); - } +} QCString VhdlParser::attribute_specification() {QCString s,s1,s2;if (!hasError) { @@ -932,7 +932,7 @@ QCString t= s1+" is "+s2; addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public); return " attribute "+s+" of "+s1+ " is "+s2+";"; assert(false); - } +} QCString VhdlParser::base() {Token *tok=0;if (!hasError) { @@ -942,7 +942,7 @@ QCString VhdlParser::base() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::base_specifier() {Token *tok=0;if (!hasError) { @@ -952,7 +952,7 @@ QCString VhdlParser::base_specifier() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::base_unit_declaration() {QCString s;if (!hasError) { @@ -962,7 +962,7 @@ QCString VhdlParser::base_unit_declaration() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::based_integer() {Token *tok=0;if (!hasError) { @@ -972,7 +972,7 @@ QCString VhdlParser::based_integer() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::based_literal() {Token *tok=0;if (!hasError) { @@ -982,7 +982,7 @@ QCString VhdlParser::based_literal() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::basic_identifier() {Token *tok=0;if (!hasError) { @@ -992,7 +992,7 @@ QCString VhdlParser::basic_identifier() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} void VhdlParser::binding_indication() {if (!hasError) { @@ -1045,7 +1045,7 @@ void VhdlParser::binding_indication() {if (!hasError) { } } - } +} QCString VhdlParser::bit_string_literal() {Token *tok=0;if (!hasError) { @@ -1055,7 +1055,7 @@ QCString VhdlParser::bit_string_literal() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::bit_value() {Token *tok=0;if (!hasError) { @@ -1065,7 +1065,7 @@ QCString VhdlParser::bit_value() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} void VhdlParser::block_configuration() {if (!hasError) { @@ -1127,7 +1127,7 @@ void VhdlParser::block_configuration() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::block_declarative_item() { @@ -1261,7 +1261,7 @@ void VhdlParser::block_declarative_item() { } } } - } +} void VhdlParser::block_declarative_part() {if (!hasError) { @@ -1301,7 +1301,7 @@ void VhdlParser::block_declarative_part() {if (!hasError) { end_label_7: ; } - } +} void VhdlParser::block_header() {if (!hasError) { @@ -1369,7 +1369,7 @@ void VhdlParser::block_header() {if (!hasError) { } } - } +} void VhdlParser::block_specification() {if (!hasError) { @@ -1400,7 +1400,7 @@ void VhdlParser::block_specification() {if (!hasError) { } } - } +} void VhdlParser::block_statement() {QCString s;if (!hasError) { @@ -1503,7 +1503,7 @@ pushLabel(genLabels,s); } genLabels=popLabel(genLabels); - } +} void VhdlParser::block_statement_part() {if (!hasError) { @@ -1536,7 +1536,7 @@ void VhdlParser::block_statement_part() {if (!hasError) { end_label_8: ; } - } +} void VhdlParser::case_statement() {QCString s;if (!hasError) { @@ -1630,7 +1630,7 @@ QCString ca="case "+s; FlowChart::moveToPrevLevel(); FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0); - } +} void VhdlParser::case_statement_alternative() {QCString s;if (!hasError) { @@ -1657,7 +1657,7 @@ QCString t="when "; } FlowChart::moveToPrevLevel(); - } +} QCString VhdlParser::character_literal() {Token *tok=0;if (!hasError) { @@ -1667,7 +1667,7 @@ QCString VhdlParser::character_literal() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::choice() {QCString s; @@ -1718,7 +1718,7 @@ return " others "; } } assert(false); - } +} QCString VhdlParser::choices() {QCString s,s1;if (!hasError) { @@ -1755,7 +1755,7 @@ s+="|";s+=s1; return s; assert(false); - } +} void VhdlParser::component_configuration() {if (!hasError) { @@ -1816,7 +1816,7 @@ void VhdlParser::component_configuration() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::component_declaration() {QCString s;if (!hasError) { @@ -1910,7 +1910,7 @@ addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPON jj_consume_token(SEMI_T); } - } +} void VhdlParser::component_instantiation_statement() {QCString s,s1;if (!hasError) { @@ -1927,7 +1927,13 @@ void VhdlParser::component_instantiation_statement() {QCString s,s1;if (!hasErro } if (!hasError) { -addCompInst(s.lower().data(),s1.lower().data(),0,getLine()); +QCString s3; + if (s1.contains("|")) { + s3=VhdlDocGen::getIndexWord(s1.data(),0); + s1=VhdlDocGen::getIndexWord(s1.data(),1); + } + + addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine()); } if (!hasError) { @@ -1960,7 +1966,7 @@ addCompInst(s.lower().data(),s1.lower().data(),0,getLine()); jj_consume_token(SEMI_T); } - } +} void VhdlParser::component_specification() {if (!hasError) { @@ -1976,7 +1982,7 @@ void VhdlParser::component_specification() {if (!hasError) { name(); } - } +} QCString VhdlParser::composite_type_definition() {QCString s,s1; @@ -2009,7 +2015,7 @@ return s+"#"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::concurrent_assertion_statement() {if (!hasError) { @@ -2051,7 +2057,7 @@ void VhdlParser::concurrent_assertion_statement() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::concurrent_procedure_call_statement() {if (!hasError) { @@ -2093,7 +2099,7 @@ void VhdlParser::concurrent_procedure_call_statement() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) { @@ -2150,7 +2156,7 @@ void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) { } } - } +} void VhdlParser::concurrent_statement() { @@ -2217,7 +2223,7 @@ void VhdlParser::concurrent_statement() { } } } - } +} QCString VhdlParser::condition() {QCString s;if (!hasError) { @@ -2227,7 +2233,7 @@ QCString VhdlParser::condition() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::condition_clause() {QCString s;if (!hasError) { @@ -2241,7 +2247,7 @@ QCString VhdlParser::condition_clause() {QCString s;if (!hasError) { return " until "+s; assert(false); - } +} void VhdlParser::conditional_signal_assignment() {if (!hasError) { @@ -2265,7 +2271,7 @@ void VhdlParser::conditional_signal_assignment() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::conditional_waveforms() {if (!hasError) { @@ -2319,7 +2325,7 @@ void VhdlParser::conditional_waveforms() {if (!hasError) { } } - } +} void VhdlParser::configuration_declaration() {QCString s,s1;if (!hasError) { @@ -2398,7 +2404,7 @@ confName=s+"::"+s1; } genLabels.resize(0); confName=""; - } +} void VhdlParser::configuration_declarative_item() { @@ -2429,7 +2435,7 @@ void VhdlParser::configuration_declarative_item() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::configuration_declarative_part() {if (!hasError) { @@ -2454,7 +2460,7 @@ void VhdlParser::configuration_declarative_part() {if (!hasError) { end_label_12: ; } - } +} void VhdlParser::configuration_item() { @@ -2478,7 +2484,7 @@ void VhdlParser::configuration_item() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::configuration_specification() {if (!hasError) { @@ -2498,7 +2504,7 @@ void VhdlParser::configuration_specification() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!hasError) { @@ -2548,7 +2554,7 @@ if(t) it.prepend("constant "); return it; assert(false); - } +} QCString VhdlParser::constraint_array_definition() {QCString s,s1;if (!hasError) { @@ -2570,7 +2576,7 @@ QCString VhdlParser::constraint_array_definition() {QCString s,s1;if (!hasError) return s+" "+s1; assert(false); - } +} void VhdlParser::context_clause() {if (!hasError) { @@ -2594,7 +2600,7 @@ void VhdlParser::context_clause() {if (!hasError) { end_label_13: ; } - } +} QCString VhdlParser::constraint() {QCString s; @@ -2621,7 +2627,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::context_item() { @@ -2645,7 +2651,7 @@ void VhdlParser::context_item() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} QCString VhdlParser::decimal_literal() {Token *tok=0;if (!hasError) { @@ -2655,7 +2661,7 @@ QCString VhdlParser::decimal_literal() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} QCString VhdlParser::delay_mechanism() {QCString s; @@ -2712,7 +2718,7 @@ return s+" inertial "; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::design_file() { @@ -2767,7 +2773,7 @@ void VhdlParser::design_file() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::design_unit() {if (!hasError) { @@ -2779,7 +2785,7 @@ void VhdlParser::design_unit() {if (!hasError) { library_unit(); } - } +} QCString VhdlParser::designator() {QCString s; @@ -2813,7 +2819,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::direction() {Token *tok=0; @@ -2846,7 +2852,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::disconnection_specification() {if (!hasError) { @@ -2870,7 +2876,7 @@ void VhdlParser::disconnection_specification() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::guarded_signal_specificatio() {if (!hasError) { @@ -2886,7 +2892,7 @@ void VhdlParser::guarded_signal_specificatio() {if (!hasError) { name(); } - } +} QCString VhdlParser::discrete_range() {QCString s; @@ -2913,7 +2919,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::element_association() {QCString s,s1;if (!hasError) { @@ -2940,7 +2946,7 @@ if(!s.isEmpty()) return s+"=>"+s1; return s1; assert(false); - } +} QCString VhdlParser::element_declaration() {QCString s,s1;if (!hasError) { @@ -2964,7 +2970,7 @@ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s1.data( //addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public); return s+":"+s1; assert(false); - } +} QCString VhdlParser::entity_aspect() {Token *tok=0;QCString s,s1; @@ -3043,7 +3049,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::entity_class() { @@ -3241,7 +3247,7 @@ return "file"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::entity_class_entry() {QCString s;if (!hasError) { @@ -3270,7 +3276,7 @@ s+="<>"; return s; assert(false); - } +} QCString VhdlParser::entity_class_entry_list() {QCString s,s1,s2;if (!hasError) { @@ -3314,7 +3320,7 @@ s2+=",";s2+=s; return s1+s2; assert(false); - } +} void VhdlParser::entity_declaration() {QCString s;if (!hasError) { @@ -3405,7 +3411,7 @@ lastEntity=current; } lastEntity=0;lastCompound=0; genLabels.resize(0); - } +} void VhdlParser::entity_declarative_item() { @@ -3550,7 +3556,7 @@ void VhdlParser::entity_declarative_item() { } } } - } +} void VhdlParser::entity_declarative_part() {if (!hasError) { @@ -3590,7 +3596,7 @@ void VhdlParser::entity_declarative_part() {if (!hasError) { end_label_16: ; } - } +} QCString VhdlParser::entity_designator() {QCString s,s1;if (!hasError) { @@ -3615,7 +3621,7 @@ QCString VhdlParser::entity_designator() {QCString s,s1;if (!hasError) { return s+s1; assert(false); - } +} void VhdlParser::entity_header() {if (!hasError) { @@ -3657,7 +3663,7 @@ currP=VhdlDocGen::PORT; } } - } +} QCString VhdlParser::entity_name_list() {QCString s,s1; @@ -3728,7 +3734,7 @@ return "all"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::entity_specification() {QCString s,s1;if (!hasError) { @@ -3746,7 +3752,7 @@ QCString VhdlParser::entity_specification() {QCString s,s1;if (!hasError) { return s+":"+s1; assert(false); - } +} void VhdlParser::entity_statement() { @@ -3779,7 +3785,7 @@ void VhdlParser::entity_statement() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::entity_statement_part() {if (!hasError) { @@ -3808,7 +3814,7 @@ void VhdlParser::entity_statement_part() {if (!hasError) { end_label_18: ; } - } +} QCString VhdlParser::entity_tag() {QCString s; @@ -3844,7 +3850,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::enumeration_literal() {QCString s; @@ -3878,7 +3884,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::enumeration_type_definition() {QCString s,s1;if (!hasError) { @@ -3923,7 +3929,7 @@ s+=",";s+=s1; return "("+s+")"; assert(false); - } +} QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { @@ -3997,7 +4003,7 @@ lab.resize(0); return s+s1+s2+";"; assert(false); - } +} QCString VhdlParser::expression() {QCString s,s1,s2;if (!hasError) { @@ -4039,7 +4045,7 @@ s+=s1;s+=s2; return s; assert(false); - } +} QCString VhdlParser::logop() { @@ -4116,7 +4122,7 @@ return "or" ; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::extended_identifier() {Token *t;if (!hasError) { @@ -4126,7 +4132,7 @@ QCString VhdlParser::extended_identifier() {Token *t;if (!hasError) { return t->image.c_str(); assert(false); - } +} QCString VhdlParser::factor() {QCString s,s1; @@ -4212,7 +4218,7 @@ s1="not ";return s1+s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::file_declaration() {QCString s,s1,s2,s3;if (!hasError) { @@ -4256,7 +4262,7 @@ QCString t1=s2+" "+s3; addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public); return " file "+s+":"+s2+" "+s3+";"; assert(false); - } +} QCString VhdlParser::file_logical_name() {QCString s;if (!hasError) { @@ -4266,7 +4272,7 @@ QCString VhdlParser::file_logical_name() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::file_open_information() {QCString s,s1,s2;if (!hasError) { @@ -4299,7 +4305,7 @@ QCString VhdlParser::file_open_information() {QCString s,s1,s2;if (!hasError) { s2="open "+s+" is "+s1; return s2; assert(false); - } +} QCString VhdlParser::file_type_definition() {QCString s,s1;if (!hasError) { @@ -4317,7 +4323,7 @@ QCString VhdlParser::file_type_definition() {QCString s,s1;if (!hasError) { s1=" file of "+s; return s1; assert(false); - } +} QCString VhdlParser::floating_type_definition() {QCString s;if (!hasError) { @@ -4327,7 +4333,7 @@ QCString VhdlParser::floating_type_definition() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::formal_designator() {QCString s;Token *tok=0; @@ -4363,7 +4369,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::formal_parameter_list() {QCString s;if (!hasError) { @@ -4373,7 +4379,7 @@ QCString VhdlParser::formal_parameter_list() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::formal_part() {QCString s,s1;if (!hasError) { @@ -4410,7 +4416,7 @@ s+"("+s1+")"; return s; assert(false); - } +} QCString VhdlParser::full_type_declaration() {Entry *tmpEntry;QCString s,s1,s2;if (!hasError) { @@ -4466,7 +4472,7 @@ if (s2.contains("#")) { tmpEntry=0; return "type "+s+" is "+s2+";"; assert(false); - } +} QCString VhdlParser::function_call() {QCString s,s1;if (!hasError) { @@ -4488,7 +4494,7 @@ QCString VhdlParser::function_call() {QCString s,s1;if (!hasError) { return s+"("+s1+")"; assert(false); - } +} void VhdlParser::generate_statement() {QCString s;if (!hasError) { @@ -4552,7 +4558,7 @@ error_skipto(GENERATE_T); } genLabels=popLabel(genLabels); - } +} void VhdlParser::generate_scheme() { @@ -4584,7 +4590,7 @@ void VhdlParser::generate_scheme() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::generic_clause() {QCString s;if (!hasError) { @@ -4613,7 +4619,7 @@ parse_sec=GEN_SEC; } parse_sec=0; - } +} QCString VhdlParser::generic_list() {QCString s;if (!hasError) { @@ -4623,7 +4629,7 @@ QCString VhdlParser::generic_list() {QCString s;if (!hasError) { return s; assert(false); - } +} void VhdlParser::generic_map_aspect() {if (!hasError) { @@ -4647,7 +4653,7 @@ void VhdlParser::generic_map_aspect() {if (!hasError) { jj_consume_token(RPAREN_T); } - } +} QCString VhdlParser::group_constituent() {QCString s; @@ -4683,7 +4689,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::group_constituent_list() {QCString s,s1,s2;if (!hasError) { @@ -4723,7 +4729,7 @@ s2+=",";s2+=s1; return s+s2; assert(false); - } +} QCString VhdlParser::group_declaration() {QCString s,s1,s2;if (!hasError) { @@ -4761,7 +4767,7 @@ QCString VhdlParser::group_declaration() {QCString s,s1,s2;if (!hasError) { return "group "+s+":"+s1+"("+s2+");"; assert(false); - } +} QCString VhdlParser::group_template_declaration() {QCString s,s1;if (!hasError) { @@ -4795,7 +4801,7 @@ QCString VhdlParser::group_template_declaration() {QCString s,s1;if (!hasError) return "group "+s+ "is ("+s1+");"; assert(false); - } +} void VhdlParser::guarded_signal_specification() {if (!hasError) { @@ -4811,7 +4817,7 @@ void VhdlParser::guarded_signal_specification() {if (!hasError) { type_mark(); } - } +} QCString VhdlParser::identifier() {Token *tok=0; @@ -4844,7 +4850,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::identifier_list() {QCString str,str1;if (!hasError) { @@ -4881,7 +4887,7 @@ str+=",";str+=str1; return str; assert(false); - } +} void VhdlParser::if_statement() {QCString s,s1;if (!hasError) { @@ -5015,7 +5021,7 @@ FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0); FlowChart::moveToPrevLevel(); FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0); - } +} QCString VhdlParser::incomplete_type_declaration() {QCString s;if (!hasError) { @@ -5033,7 +5039,7 @@ QCString VhdlParser::incomplete_type_declaration() {QCString s;if (!hasError) { return "type "+s+";"; assert(false); - } +} QCString VhdlParser::index_constraint() {QCString s="("; QCString s1,s2;if (!hasError) { @@ -5082,7 +5088,7 @@ s+=",";s+=s1; return s+")"; assert(false); - } +} QCString VhdlParser::index_specification() {QCString s; @@ -5130,7 +5136,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::index_subtype_definition() {QCString s;if (!hasError) { @@ -5148,10 +5154,10 @@ QCString VhdlParser::index_subtype_definition() {QCString s;if (!hasError) { return s+" range <> "; assert(false); - } +} -QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok=0; +QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok; switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case COMPONENT_T: case BASIC_IDENTIFIER: @@ -5160,7 +5166,7 @@ QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok=0; switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case COMPONENT_T:{if (!hasError) { - tok = jj_consume_token(COMPONENT_T); + jj_consume_token(COMPONENT_T); } break; @@ -5176,14 +5182,29 @@ QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok=0; } if (!hasError) { -s1="component"; return s; +s1="component "; return s; } break; } case ENTITY_T:{if (!hasError) { - tok = jj_consume_token(ENTITY_T); + jj_consume_token(ENTITY_T); + } + if (!hasError) { + + if (jj_2_38(2)) {if (!hasError) { + + jj_consume_token(BASIC_IDENTIFIER); + } + if (!hasError) { + + jj_consume_token(DOT_T); + } + + } else { + ; + } } if (!hasError) { @@ -5191,7 +5212,7 @@ s1="component"; return s; } if (!hasError) { -s=tok->image.c_str()+s2; +s="entity|"+s2; } if (!hasError) { @@ -5248,7 +5269,7 @@ s1="configuration ";return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::instantiation_list() {QCString s;Token *tok=0; @@ -5293,7 +5314,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::integer() {Token *t;if (!hasError) { @@ -5303,7 +5324,7 @@ QCString VhdlParser::integer() {Token *t;if (!hasError) { return t->image.c_str(); assert(false); - } +} QCString VhdlParser::integer_type_definition() {QCString s;if (!hasError) { @@ -5313,11 +5334,11 @@ QCString VhdlParser::integer_type_definition() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::interface_declaration() {QCString s,s1; - if (jj_2_38(5)) {if (!hasError) { + if (jj_2_39(5)) {if (!hasError) { s = interface_subprogram_declaration(); } @@ -5341,7 +5362,7 @@ return s; } default: jj_la1[121] = jj_gen; - if (jj_2_39(5)) {if (!hasError) { + if (jj_2_40(5)) {if (!hasError) { s = interface_variable_declaration(); } @@ -5350,7 +5371,7 @@ return s; return s; } - } else if (jj_2_40(5)) {if (!hasError) { + } else if (jj_2_41(5)) {if (!hasError) { interface_file_declaration(); } @@ -5359,7 +5380,7 @@ return s; return s; } - } else if (jj_2_41(2147483647)) {if (!hasError) { + } else if (jj_2_42(2147483647)) {if (!hasError) { subprogram_declaration(); } @@ -5386,6 +5407,7 @@ return s; if (!hasError) { if (parse_sec==GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public); return s; } @@ -5401,7 +5423,7 @@ if (parse_sec==GEN_SEC) } } assert(false); - } +} QCString VhdlParser::interface_element() {QCString s;if (!hasError) { @@ -5411,7 +5433,7 @@ QCString VhdlParser::interface_element() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::interface_file_declaration() {QCString s,s1;if (!hasError) { @@ -5434,7 +5456,7 @@ QCString VhdlParser::interface_file_declaration() {QCString s,s1;if (!hasError) addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public); return " file "+s+":"+s1; assert(false); - } +} QCString VhdlParser::interface_list() {QCString s,s1,s2;if (!hasError) { @@ -5471,7 +5493,7 @@ s2+=";";s2+=s1; return s+s2; assert(false); - } +} QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;if (!hasError) { @@ -5619,7 +5641,7 @@ if(tok) } // if component return it; assert(false); - } +} QCString VhdlParser::iteration_scheme() {QCString s; @@ -5666,7 +5688,7 @@ QCString q=lab+" for "+s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::label() {QCString s;if (!hasError) { @@ -5676,7 +5698,7 @@ QCString VhdlParser::label() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::library_clause() {QCString s;if (!hasError) { @@ -5695,18 +5717,18 @@ QCString VhdlParser::library_clause() {QCString s;if (!hasError) { } -if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) +if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) ) { addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public); } QCString s1="library "+s; return s1; assert(false); - } +} QCString VhdlParser::library_unit() {QCString s; - if (jj_2_42(2)) {if (!hasError) { + if (jj_2_43(2)) {if (!hasError) { primary_unit(); } @@ -5743,11 +5765,11 @@ return s; } } assert(false); - } +} QCString VhdlParser::literal() {QCString s; - if (jj_2_43(2147483647)) {if (!hasError) { + if (jj_2_44(2147483647)) {if (!hasError) { s = bit_string_literal(); } @@ -5756,7 +5778,7 @@ QCString VhdlParser::literal() {QCString s; return s; } - } else if (jj_2_44(2147483647)) {if (!hasError) { + } else if (jj_2_45(2147483647)) {if (!hasError) { s = numeric_literal(); } @@ -5765,7 +5787,7 @@ return s; return s; } - } else if (jj_2_45(2147483647)) {if (!hasError) { + } else if (jj_2_46(2147483647)) {if (!hasError) { s = enumeration_literal(); } @@ -5805,7 +5827,7 @@ return "null"; } } assert(false); - } +} QCString VhdlParser::logical_operator() {QCString s;if (!hasError) { @@ -5815,7 +5837,7 @@ QCString VhdlParser::logical_operator() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::loop_statement() {QCString s,s1,s2,s3;if (!hasError) { @@ -5906,7 +5928,7 @@ QCString q = s+" loop "+s2+" end loop" +s3; FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0); return q; assert(false); - } +} QCString VhdlParser::miscellaneous_operator() {Token *t=0; @@ -5950,7 +5972,7 @@ return "not"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::mode() {Token *tok=0; @@ -6016,7 +6038,7 @@ return "linkage"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::multiplying_operation() {Token *tok=0; @@ -6071,7 +6093,7 @@ return tok->image.c_str(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::name() {QCString s,s1;if (!hasError) { @@ -6107,7 +6129,7 @@ QCString VhdlParser::name() {QCString s,s1;if (!hasError) { } if (!hasError) { - if (jj_2_46(2147483647)) {if (!hasError) { + if (jj_2_47(2147483647)) {if (!hasError) { s1 = name_ext1(); } @@ -6123,7 +6145,7 @@ s+=s1; return s; assert(false); - } +} QCString VhdlParser::name_ext1() {QCString s,s1,s2;if (!hasError) { @@ -6133,7 +6155,7 @@ QCString VhdlParser::name_ext1() {QCString s,s1,s2;if (!hasError) { if (!hasError) { while (!hasError) { - if (jj_2_47(2147483647)) { + if (jj_2_48(2147483647)) { ; } else { goto end_label_26; @@ -6152,12 +6174,12 @@ s+=s1; return s; assert(false); - } +} QCString VhdlParser::name_ext() {QCString s,s1,s2;if (!hasError) { - if (jj_2_48(2147483647)) {if (!hasError) { + if (jj_2_49(2147483647)) {if (!hasError) { jj_consume_token(DOT_T); } @@ -6170,7 +6192,7 @@ QCString VhdlParser::name_ext() {QCString s,s1,s2;if (!hasError) { s+=".";s+=s1; } - } else if (jj_2_49(2147483647)) {if (!hasError) { + } else if (jj_2_50(2147483647)) {if (!hasError) { s1 = test_att_name(); } @@ -6179,7 +6201,7 @@ s+=".";s+=s1; s+=s1; } - } else if (jj_2_50(2147483647)) {if (!hasError) { + } else if (jj_2_51(2147483647)) {if (!hasError) { jj_consume_token(LPAREN_T); } @@ -6196,7 +6218,7 @@ s+=s1; s+="(";s+=s1;s+=")"; } - } else if (jj_2_51(2147483647)) {if (!hasError) { + } else if (jj_2_52(2147483647)) {if (!hasError) { jj_consume_token(LPAREN_T); } @@ -6252,12 +6274,12 @@ s+=")"; return s; assert(false); - } +} QCString VhdlParser::test_att_name() {QCString s,s1;if (!hasError) { - if (jj_2_52(2147483647)) {if (!hasError) { + if (jj_2_53(2147483647)) {if (!hasError) { s1 = signature(); } @@ -6312,7 +6334,7 @@ s+="(";s+=s1;s+=")"; return s; assert(false); - } +} QCString VhdlParser::indexed_name() {QCString s,s1,s2;if (!hasError) { @@ -6365,7 +6387,7 @@ s+=",";s+=s1; return s+")"; assert(false); - } +} QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) { @@ -6438,7 +6460,7 @@ if(t) s+=":"; if(t1) s2.prepend("when "); return s+s1+s2+";"; assert(false); - } +} QCString VhdlParser::null_statement() {QCString s;if (!hasError) { @@ -6476,11 +6498,11 @@ s+=":"; return s+="null"; assert(false); - } +} QCString VhdlParser::numeric_literal() {QCString s; - if (jj_2_53(2147483647)) {if (!hasError) { + if (jj_2_54(2147483647)) {if (!hasError) { s = physical_literal(); } @@ -6511,7 +6533,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::object_class() { @@ -6592,7 +6614,7 @@ return "type"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::operator_symbol() {Token *tok=0;if (!hasError) { @@ -6602,7 +6624,7 @@ QCString VhdlParser::operator_symbol() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} void VhdlParser::options() {if (!hasError) { @@ -6638,7 +6660,7 @@ void VhdlParser::options() {if (!hasError) { } } - } +} void VhdlParser::package_body() {QCString s;if (!hasError) { @@ -6714,7 +6736,7 @@ lastCompound=current; } lastCompound=0; genLabels.resize(0); - } +} void VhdlParser::package_body_declarative_item() { @@ -6781,7 +6803,7 @@ void VhdlParser::package_body_declarative_item() { } default: jj_la1[152] = jj_gen; - if (jj_2_54(3)) {if (!hasError) { + if (jj_2_55(3)) {if (!hasError) { group_template_declaration(); } @@ -6802,7 +6824,7 @@ void VhdlParser::package_body_declarative_item() { } } } - } +} void VhdlParser::package_body_declarative_part() {if (!hasError) { @@ -6837,7 +6859,7 @@ void VhdlParser::package_body_declarative_part() {if (!hasError) { end_label_29: ; } - } +} void VhdlParser::package_declaration() {QCString s;if (!hasError) { @@ -6912,7 +6934,7 @@ lastCompound=current; } lastEntity=0;lastCompound=0; genLabels.resize(0); - } +} void VhdlParser::geninter() {if (!hasError) { @@ -6954,7 +6976,7 @@ void VhdlParser::geninter() {if (!hasError) { } } - } +} void VhdlParser::package_declarative_item() { @@ -7028,7 +7050,7 @@ void VhdlParser::package_declarative_item() { } default: jj_la1[159] = jj_gen; - if (jj_2_55(2147483647)) {if (!hasError) { + if (jj_2_56(2147483647)) {if (!hasError) { attribute_declaration(); } @@ -7058,7 +7080,7 @@ void VhdlParser::package_declarative_item() { } default: jj_la1[160] = jj_gen; - if (jj_2_56(3)) {if (!hasError) { + if (jj_2_57(3)) {if (!hasError) { group_template_declaration(); } @@ -7074,7 +7096,7 @@ void VhdlParser::package_declarative_item() { } default: jj_la1[161] = jj_gen; - if (jj_2_57(5)) {if (!hasError) { + if (jj_2_58(5)) {if (!hasError) { package_instantiation_declaration(); } @@ -7099,7 +7121,7 @@ void VhdlParser::package_declarative_item() { } } } - } +} void VhdlParser::package_declarative_part() {if (!hasError) { @@ -7139,7 +7161,7 @@ void VhdlParser::package_declarative_part() {if (!hasError) { end_label_30: ; } - } +} QCString VhdlParser::parameter_specification() {QCString s,s1;if (!hasError) { @@ -7157,12 +7179,12 @@ QCString VhdlParser::parameter_specification() {QCString s,s1;if (!hasError) { return s+" in "+s1; assert(false); - } +} QCString VhdlParser::physical_literal() {QCString s,s1;if (!hasError) { - if (jj_2_58(2147483647)) {if (!hasError) { + if (jj_2_59(2147483647)) {if (!hasError) { s = abstract_literal(); } @@ -7178,7 +7200,7 @@ QCString VhdlParser::physical_literal() {QCString s,s1;if (!hasError) { s+=" ";s+=s1;s.prepend(" "); return s; assert(false); - } +} QCString VhdlParser::physical_type_definition() {QCString s,s1,s2;if (!hasError) { @@ -7246,7 +7268,7 @@ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public) return s+"%"; assert(false); - } +} void VhdlParser::port_clause() {if (!hasError) { @@ -7271,7 +7293,7 @@ void VhdlParser::port_clause() {if (!hasError) { } currP=0; - } +} QCString VhdlParser::port_list() {QCString s;if (!hasError) { @@ -7281,7 +7303,7 @@ QCString VhdlParser::port_list() {QCString s;if (!hasError) { return s; assert(false); - } +} void VhdlParser::port_map_aspect() {if (!hasError) { @@ -7305,11 +7327,11 @@ void VhdlParser::port_map_aspect() {if (!hasError) { jj_consume_token(RPAREN_T); } - } +} QCString VhdlParser::primary() {QCString s,s1; - if (jj_2_59(2147483647)) {if (!hasError) { + if (jj_2_60(2147483647)) {if (!hasError) { s = function_call(); } @@ -7318,7 +7340,7 @@ QCString VhdlParser::primary() {QCString s,s1; return s; } - } else if (jj_2_60(2147483647)) {if (!hasError) { + } else if (jj_2_61(2147483647)) {if (!hasError) { jj_consume_token(LPAREN_T); } @@ -7335,7 +7357,7 @@ return s; s="("+s1+")"; return s; } - } else if (jj_2_61(2147483647)) {if (!hasError) { + } else if (jj_2_62(2147483647)) {if (!hasError) { s = qualified_expression(); } @@ -7344,7 +7366,7 @@ s="("+s1+")"; return s; return s; } - } else if (jj_2_62(2147483647)) {if (!hasError) { + } else if (jj_2_63(2147483647)) {if (!hasError) { s = type_conversion(); } @@ -7353,7 +7375,7 @@ return s; return s; } - } else if (jj_2_63(2147483647)) {if (!hasError) { + } else if (jj_2_64(2147483647)) {if (!hasError) { s = literal(); } @@ -7362,7 +7384,7 @@ return s; s.prepend(" ");return s; } - } else if (jj_2_64(2147483647)) {if (!hasError) { + } else if (jj_2_65(2147483647)) {if (!hasError) { s = name(); } @@ -7402,7 +7424,7 @@ return s; } } assert(false); - } +} void VhdlParser::primary_unit() { @@ -7423,12 +7445,12 @@ void VhdlParser::primary_unit() { } default: jj_la1[167] = jj_gen; - if (jj_2_65(2147483647)) {if (!hasError) { + if (jj_2_66(2147483647)) {if (!hasError) { package_instantiation_declaration(); } - } else if (jj_2_66(4)) {if (!hasError) { + } else if (jj_2_67(4)) {if (!hasError) { interface_package_declaration(); } @@ -7449,7 +7471,7 @@ void VhdlParser::primary_unit() { } } } - } +} QCString VhdlParser::procedure_call() {QCString s,s1;if (!hasError) { @@ -7486,12 +7508,12 @@ s1.prepend("("); s1.append(")"); return s+s1; assert(false); - } +} QCString VhdlParser::procedure_call_statement() {QCString s,s1;if (!hasError) { - if (jj_2_67(2)) {if (!hasError) { + if (jj_2_68(2)) {if (!hasError) { s = identifier(); } @@ -7519,7 +7541,7 @@ s+=":"; return s+s1+";"; assert(false); - } +} QCString VhdlParser::process_declarative_item() {QCString s; @@ -7607,7 +7629,7 @@ return s; } default: jj_la1[170] = jj_gen; - if (jj_2_68(3)) {if (!hasError) { + if (jj_2_69(3)) {if (!hasError) { s = attribute_declaration(); } @@ -7642,7 +7664,7 @@ return s; } default: jj_la1[171] = jj_gen; - if (jj_2_69(3)) {if (!hasError) { + if (jj_2_70(3)) {if (!hasError) { s = group_template_declaration(); } @@ -7674,7 +7696,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::process_declarative_part() {QCString s,s1;if (!hasError) { @@ -7716,7 +7738,7 @@ s+=s1; return s; assert(false); - } +} void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;if (!hasError) { @@ -7901,7 +7923,7 @@ if(s.isEmpty()) createFlow(); currName=""; newEntry(); - } +} void VhdlParser::process_statement_part() {if (!hasError) { @@ -7941,7 +7963,7 @@ void VhdlParser::process_statement_part() {if (!hasError) { end_label_33: ; } - } +} QCString VhdlParser::qualified_expression() {QCString s,s1;if (!hasError) { @@ -7958,7 +7980,7 @@ s=s1+"'"; } if (!hasError) { - if (jj_2_70(2147483647)) {if (!hasError) { + if (jj_2_71(2147483647)) {if (!hasError) { s1 = aggregate(); } @@ -7998,11 +8020,11 @@ s+="(";s+=s1;s+=")"; return s; assert(false); - } +} QCString VhdlParser::range() {QCString s,s1,s2; - if (jj_2_71(2147483647)) {if (!hasError) { + if (jj_2_72(2147483647)) {if (!hasError) { s = simple_expression(); } @@ -8019,7 +8041,7 @@ QCString VhdlParser::range() {QCString s,s1,s2; return s+" "+s1+" "+s2; } - } else if (jj_2_72(2147483647)) {if (!hasError) { + } else if (jj_2_73(2147483647)) {if (!hasError) { s = attribute_name(); } @@ -8033,7 +8055,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::range_constraint() {QCString s,s1;if (!hasError) { @@ -8047,7 +8069,7 @@ QCString VhdlParser::range_constraint() {QCString s,s1;if (!hasError) { return " range "+s; assert(false); - } +} void VhdlParser::record_type_definition() {if (!hasError) { @@ -8101,7 +8123,7 @@ void VhdlParser::record_type_definition() {if (!hasError) { } } - } +} QCString VhdlParser::relation() {QCString s,s1,s2;if (!hasError) { @@ -8135,7 +8157,7 @@ QCString VhdlParser::relation() {QCString s,s1,s2;if (!hasError) { return s+s1+s2; assert(false); - } +} QCString VhdlParser::relation_operator() { @@ -8212,7 +8234,7 @@ return "/="; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2;if (!hasError) { @@ -8272,7 +8294,7 @@ if(t) s.append(":"); if(t1) s2.prepend(" severity "); return s+s1+s2+";"; assert(false); - } +} QCString VhdlParser::return_statement() {QCString s,s1;if (!hasError) { @@ -8340,7 +8362,7 @@ s+=":"; return s+" return "+s1+";"; assert(false); - } +} QCString VhdlParser::scalar_type_definition() {QCString s,s1; @@ -8362,7 +8384,7 @@ return s; } if (!hasError) { - if (jj_2_73(2147483647)) {if (!hasError) { + if (jj_2_74(2147483647)) {if (!hasError) { s1 = physical_type_definition(); } @@ -8384,7 +8406,7 @@ return s+" "+s1+"%"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::secondary_unit() { @@ -8408,7 +8430,7 @@ void VhdlParser::secondary_unit() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} QCString VhdlParser::secondary_unit_declaration() {QCString s,s1;if (!hasError) { @@ -8433,7 +8455,7 @@ QCString VhdlParser::secondary_unit_declaration() {QCString s,s1;if (!hasError) return s+"="+s1; assert(false); - } +} QCString VhdlParser::selected_name() {QCString s,s1;if (!hasError) { @@ -8451,7 +8473,7 @@ QCString VhdlParser::selected_name() {QCString s,s1;if (!hasError) { return s+"."+s1; assert(false); - } +} void VhdlParser::selected_signal_assignment() {if (!hasError) { @@ -8487,7 +8509,7 @@ void VhdlParser::selected_signal_assignment() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::selected_waveforms() {if (!hasError) { @@ -8534,7 +8556,7 @@ void VhdlParser::selected_waveforms() {if (!hasError) { end_label_35: ; } - } +} QCString VhdlParser::sensitivity_clause() {QCString s;if (!hasError) { @@ -8549,7 +8571,7 @@ QCString VhdlParser::sensitivity_clause() {QCString s;if (!hasError) { s.prepend(" on "); return s; assert(false); - } +} QCString VhdlParser::sensitivity_list() {QCString s,s1;if (!hasError) { @@ -8586,13 +8608,13 @@ s+=",";s+=s1; return s; assert(false); - } +} QCString VhdlParser::sequence_of_statement() {QCString s,s1;if (!hasError) { while (!hasError) { - if (jj_2_74(3)) { + if (jj_2_75(3)) { ; } else { goto end_label_37; @@ -8611,11 +8633,11 @@ s+=s1; return s; assert(false); - } +} QCString VhdlParser::sequential_statement() {QCString s; - if (jj_2_75(2147483647)) {if (!hasError) { + if (jj_2_76(2147483647)) {if (!hasError) { s = signal_assignment_statement(); } @@ -8624,7 +8646,7 @@ QCString VhdlParser::sequential_statement() {QCString s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_76(3)) {if (!hasError) { + } else if (jj_2_77(3)) {if (!hasError) { s = assertion_statement(); } @@ -8633,7 +8655,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_77(3)) {if (!hasError) { + } else if (jj_2_78(3)) {if (!hasError) { s = report_statement(); } @@ -8642,7 +8664,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_78(3)) {if (!hasError) { + } else if (jj_2_79(3)) {if (!hasError) { s = wait_statement(); } @@ -8651,7 +8673,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_79(2147483647)) {if (!hasError) { + } else if (jj_2_80(2147483647)) {if (!hasError) { s = variable_assignment_statement(); } @@ -8660,7 +8682,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_80(3)) {if (!hasError) { + } else if (jj_2_81(3)) {if (!hasError) { s = procedure_call_statement(); } @@ -8669,7 +8691,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } - } else if (jj_2_81(3)) {if (!hasError) { + } else if (jj_2_82(3)) {if (!hasError) { if_statement(); } @@ -8678,7 +8700,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; return s; } - } else if (jj_2_82(3)) {if (!hasError) { + } else if (jj_2_83(3)) {if (!hasError) { case_statement(); } @@ -8687,7 +8709,7 @@ return s; return s; } - } else if (jj_2_83(3)) {if (!hasError) { + } else if (jj_2_84(3)) {if (!hasError) { loop_statement(); } @@ -8696,7 +8718,7 @@ return s; return s; } - } else if (jj_2_84(3)) {if (!hasError) { + } else if (jj_2_85(3)) {if (!hasError) { s = next_statement(); } @@ -8705,7 +8727,7 @@ return s; return s; } - } else if (jj_2_85(3)) {if (!hasError) { + } else if (jj_2_86(3)) {if (!hasError) { s = exit_statement(); } @@ -8714,7 +8736,7 @@ return s; return s; } - } else if (jj_2_86(3)) {if (!hasError) { + } else if (jj_2_87(3)) {if (!hasError) { s = return_statement(); } @@ -8745,7 +8767,7 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s; } } assert(false); - } +} QCString VhdlParser::shift_expression() {QCString s,s1,s2;if (!hasError) { @@ -8779,7 +8801,7 @@ QCString VhdlParser::shift_expression() {QCString s,s1,s2;if (!hasError) { return s+s1+s2; assert(false); - } +} QCString VhdlParser::shift_operator() { @@ -8856,7 +8878,7 @@ return "ror"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::sign() { @@ -8889,11 +8911,11 @@ return "-"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::signal_assignment_statement() {QCString s,s1,s2,s3; - if (jj_2_88(2147483647)) {if (!hasError) { + if (jj_2_89(2147483647)) {if (!hasError) { conditional_signal_assignment_wave(); } @@ -8902,7 +8924,7 @@ QCString VhdlParser::signal_assignment_statement() {QCString s,s1,s2,s3; return ""; } - } else if (jj_2_89(2147483647)) {if (!hasError) { + } else if (jj_2_90(2147483647)) {if (!hasError) { selected_signal_assignment_wave(); } @@ -8919,7 +8941,7 @@ return ""; case BASIC_IDENTIFIER: case EXTENDED_CHARACTER:{if (!hasError) { - if (jj_2_87(2)) {if (!hasError) { + if (jj_2_88(2)) {if (!hasError) { s = identifier(); } @@ -8983,7 +9005,7 @@ return s+s1+"<="+s2+s3+";"; } } assert(false); - } +} void VhdlParser::semi() {if (!hasError) { @@ -8991,7 +9013,7 @@ void VhdlParser::semi() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!hasError) { @@ -9054,7 +9076,7 @@ if(tok) s3.prepend(":="); s4=s1+s2+s3; addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public); - } +} QCString VhdlParser::signal_kind() { @@ -9087,7 +9109,7 @@ return "bus"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::signal_list() {QCString s,s1; @@ -9157,7 +9179,7 @@ return "all"; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::signature() {QCString s,s1,s2;if (!hasError) { @@ -9239,7 +9261,7 @@ s+="return ";s+=s1; s1="["+s+"]";return s1; assert(false); - } +} QCString VhdlParser::simple_expression() {QCString s,s1,s2;if (!hasError) { @@ -9269,7 +9291,7 @@ s+=s1; if (!hasError) { while (!hasError) { - if (jj_2_90(2147483647)) { + if (jj_2_91(2147483647)) { ; } else { goto end_label_40; @@ -9292,7 +9314,7 @@ s+=s1;s+=s2; return s; assert(false); - } +} void VhdlParser::simple_name() {if (!hasError) { @@ -9300,7 +9322,7 @@ void VhdlParser::simple_name() {if (!hasError) { name(); } - } +} QCString VhdlParser::slice_name() {QCString s,s1;if (!hasError) { @@ -9322,7 +9344,7 @@ QCString VhdlParser::slice_name() {QCString s,s1;if (!hasError) { return s+"("+s1+")"; assert(false); - } +} QCString VhdlParser::string_literal() {Token *tok=0;if (!hasError) { @@ -9332,7 +9354,7 @@ QCString VhdlParser::string_literal() {Token *tok=0;if (!hasError) { return tok->image.c_str(); assert(false); - } +} void VhdlParser::subprogram_body() {QCString s;if (!hasError) { @@ -9405,11 +9427,11 @@ if (s.data()) tempEntry->endBodyLine=getLine(END_T); createFlow(); currP=0; - } +} void VhdlParser::subprogram_declaration() { - if (jj_2_91(2147483647)) {if (!hasError) { + if (jj_2_92(2147483647)) {if (!hasError) { subprogram_instantiation_declaration(); } @@ -9440,7 +9462,7 @@ currP=0; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::subprogram_1() { @@ -9464,7 +9486,7 @@ void VhdlParser::subprogram_1() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} QCString VhdlParser::subprogram_declarative_item() {QCString s; @@ -9563,7 +9585,7 @@ return s; } default: jj_la1[214] = jj_gen; - if (jj_2_92(2147483647)) {if (!hasError) { + if (jj_2_93(2147483647)) {if (!hasError) { s = attribute_declaration(); } @@ -9598,7 +9620,7 @@ return s; } default: jj_la1[215] = jj_gen; - if (jj_2_93(3)) {if (!hasError) { + if (jj_2_94(3)) {if (!hasError) { s = group_template_declaration(); } @@ -9630,7 +9652,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::subprogram_declarative_part() {QCString s,s1;if (!hasError) { @@ -9673,7 +9695,7 @@ s+=s1; return s; assert(false); - } +} void VhdlParser::subprogram_kind() { @@ -9697,7 +9719,7 @@ void VhdlParser::subprogram_kind() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::subprogram_specification() {QCString s;Token *tok=0;Token *t; @@ -9751,7 +9773,7 @@ param_sec=0; } if (!hasError) { - if (jj_2_94(2)) {if (!hasError) { + if (jj_2_95(2)) {if (!hasError) { gen_interface_list(); } @@ -9762,7 +9784,7 @@ param_sec=0; } if (!hasError) { - if (jj_2_95(2)) {if (!hasError) { + if (jj_2_96(2)) {if (!hasError) { gen_assoc_list(); } @@ -9891,7 +9913,7 @@ tempEntry=current; jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::subprogram_statement_part() {if (!hasError) { @@ -9931,7 +9953,7 @@ void VhdlParser::subprogram_statement_part() {if (!hasError) { end_label_42: ; } - } +} QCString VhdlParser::subtype_declaration() {QCString s,s1;if (!hasError) { @@ -9958,7 +9980,7 @@ QCString VhdlParser::subtype_declaration() {QCString s,s1;if (!hasError) { addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public); return " subtype "+s+" is "+s1+";"; assert(false); - } +} QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) { @@ -9967,7 +9989,7 @@ QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) { } if (!hasError) { - if (jj_2_96(2147483647)) {if (!hasError) { + if (jj_2_97(2147483647)) {if (!hasError) { s1 = name(); } @@ -9978,7 +10000,7 @@ QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) { } if (!hasError) { - if (jj_2_97(2147483647)) {if (!hasError) { + if (jj_2_98(2147483647)) {if (!hasError) { s2 = constraint(); } @@ -9990,11 +10012,11 @@ QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) { return s+" "+s1+" "+s2; assert(false); - } +} QCString VhdlParser::suffix() {QCString s; - if (jj_2_98(2147483647)) {if (!hasError) { + if (jj_2_99(2147483647)) {if (!hasError) { s = name(); } @@ -10045,7 +10067,7 @@ return " all "; } } assert(false); - } +} QCString VhdlParser::target() {QCString s; @@ -10081,7 +10103,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::term() {QCString s,s1,s2;if (!hasError) { @@ -10091,7 +10113,7 @@ QCString VhdlParser::term() {QCString s,s1,s2;if (!hasError) { if (!hasError) { while (!hasError) { - if (jj_2_99(2)) { + if (jj_2_100(2)) { ; } else { goto end_label_43; @@ -10114,7 +10136,7 @@ s+=s1;s+=s2; return s; assert(false); - } +} QCString VhdlParser::timeout_clause() {QCString s;if (!hasError) { @@ -10128,7 +10150,7 @@ QCString VhdlParser::timeout_clause() {QCString s;if (!hasError) { return " for "+s; assert(false); - } +} QCString VhdlParser::type_conversion() {QCString s,s1;if (!hasError) { @@ -10150,11 +10172,11 @@ QCString VhdlParser::type_conversion() {QCString s,s1;if (!hasError) { return s+"("+s1+")"; assert(false); - } +} QCString VhdlParser::type_declaration() {QCString s; - if (jj_2_100(3)) {if (!hasError) { + if (jj_2_101(3)) {if (!hasError) { s = full_type_declaration(); } @@ -10183,7 +10205,7 @@ return s; } } assert(false); - } +} QCString VhdlParser::type_definition() {QCString s; @@ -10237,7 +10259,7 @@ return s; } default: jj_la1[228] = jj_gen; - if (jj_2_101(2)) {if (!hasError) { + if (jj_2_102(2)) {if (!hasError) { protected_type_body(); } @@ -10267,7 +10289,7 @@ return ""; } } assert(false); - } +} QCString VhdlParser::type_mark() {QCString s;if (!hasError) { @@ -10277,7 +10299,7 @@ QCString VhdlParser::type_mark() {QCString s;if (!hasError) { return s; assert(false); - } +} QCString VhdlParser::unconstraint_array_definition() {QCString s,s1,s2,s3;if (!hasError) { @@ -10334,7 +10356,7 @@ s3+=",";s3+=s1; return "array("+s+s3+") of "+s2; assert(false); - } +} QCString VhdlParser::use_clause() {QCString s,s1;if (!hasError) { @@ -10382,7 +10404,7 @@ QStringList ql1=QStringList::split(",",s,FALSE); { QStringList ql=QStringList::split(".",ql1[j],FALSE); QCString it=ql[1].utf8(); - if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) + if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) ) { VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public); } @@ -10390,7 +10412,7 @@ QStringList ql1=QStringList::split(",",s,FALSE); s1="use "+s; return s1; assert(false); - } +} QCString VhdlParser::variable_assignment_statement() {QCString s,s1,s2; @@ -10401,7 +10423,7 @@ QCString VhdlParser::variable_assignment_statement() {QCString s,s1,s2; case BASIC_IDENTIFIER: case EXTENDED_CHARACTER:{if (!hasError) { - if (jj_2_102(2)) {if (!hasError) { + if (jj_2_103(2)) {if (!hasError) { s = identifier(); } @@ -10458,7 +10480,7 @@ return ""; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s,s1,s2;if (!hasError) { @@ -10537,7 +10559,7 @@ int spec; addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public); return val; assert(false); - } +} QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasError) { @@ -10617,7 +10639,7 @@ QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasEr if(t) s.append(":"); return s+" wait "+s1+s2+s3+";"; assert(false); - } +} QCString VhdlParser::waveform() {QCString s,s1; @@ -10692,7 +10714,7 @@ return " unaffected "; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::waveform_element() {QCString s,s1;if (!hasError) { @@ -10725,7 +10747,7 @@ s1.prepend(" after "); return s+s1; assert(false); - } +} QCString VhdlParser::protected_type_body() {if (!hasError) { @@ -10771,7 +10793,7 @@ QCString VhdlParser::protected_type_body() {if (!hasError) { return ""; assert(false); - } +} void VhdlParser::protected_type_body_declarative_item() { @@ -10838,7 +10860,7 @@ void VhdlParser::protected_type_body_declarative_item() { } default: jj_la1[243] = jj_gen; - if (jj_2_103(2147483647)) {if (!hasError) { + if (jj_2_104(2147483647)) {if (!hasError) { attribute_declaration(); } @@ -10861,7 +10883,7 @@ void VhdlParser::protected_type_body_declarative_item() { } default: jj_la1[244] = jj_gen; - if (jj_2_104(3)) {if (!hasError) { + if (jj_2_105(3)) {if (!hasError) { group_template_declaration(); } @@ -10884,7 +10906,7 @@ void VhdlParser::protected_type_body_declarative_item() { } } } - } +} void VhdlParser::protected_type_body_declarative_part() {if (!hasError) { @@ -10921,7 +10943,7 @@ void VhdlParser::protected_type_body_declarative_part() {if (!hasError) { end_label_47: ; } - } +} QCString VhdlParser::protected_type_declaration() {if (!hasError) { @@ -10966,7 +10988,7 @@ error_skipto(END_T); return ""; assert(false); - } +} void VhdlParser::protected_type_declarative_item() { @@ -11000,7 +11022,7 @@ void VhdlParser::protected_type_declarative_item() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::protected_type_declarative_part() {if (!hasError) { @@ -11032,7 +11054,7 @@ void VhdlParser::protected_type_declarative_part() {if (!hasError) { end_label_48: ; } - } +} QCString VhdlParser::context_ref() {QCString s;if (!hasError) { @@ -11050,7 +11072,7 @@ QCString VhdlParser::context_ref() {QCString s;if (!hasError) { return "context "+s ; assert(false); - } +} void VhdlParser::context_declaration() {QCString s,s1;if (!hasError) { @@ -11132,7 +11154,7 @@ parse_sec=CONTEXT_SEC; parse_sec=0; addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public); - } +} QCString VhdlParser::libustcont_stats() {QCString s; @@ -11176,7 +11198,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;if (!hasError) { @@ -11225,7 +11247,7 @@ void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;if (!hasE QCString q=" is new "+s1+s2; addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public); - } +} QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasError) { @@ -11267,7 +11289,7 @@ QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasErro current->name=s; return "package "+s+" is new "+s1; assert(false); - } +} QCString VhdlParser::subprogram_instantiation_declaration() {QCString s,s1,s2;if (!hasError) { @@ -11318,7 +11340,7 @@ QCString q= " is new "+s1+s2; addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public); return q; assert(false); - } +} void VhdlParser::gen_assoc_list() {if (!hasError) { @@ -11342,7 +11364,7 @@ void VhdlParser::gen_assoc_list() {if (!hasError) { jj_consume_token(RPAREN_T); } - } +} void VhdlParser::gen_interface_list() {if (!hasError) { @@ -11372,7 +11394,7 @@ void VhdlParser::gen_interface_list() {if (!hasError) { jj_consume_token(RPAREN_T); } - } +} void VhdlParser::case_scheme() {if (!hasError) { @@ -11393,7 +11415,7 @@ void VhdlParser::case_scheme() {if (!hasError) { } if (!hasError) { - if (jj_2_105(3)) {if (!hasError) { + if (jj_2_106(3)) {if (!hasError) { ttend(); } @@ -11419,7 +11441,7 @@ void VhdlParser::case_scheme() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::when_stats() {if (!hasError) { @@ -11430,7 +11452,7 @@ void VhdlParser::when_stats() {if (!hasError) { } if (!hasError) { - if (jj_2_106(2)) {if (!hasError) { + if (jj_2_107(2)) {if (!hasError) { label(); } @@ -11469,7 +11491,7 @@ void VhdlParser::when_stats() {if (!hasError) { end_label_50: ; } - } +} void VhdlParser::ttend() {if (!hasError) { @@ -11497,7 +11519,7 @@ void VhdlParser::ttend() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::generate_statement_body() {if (!hasError) { @@ -11509,7 +11531,7 @@ void VhdlParser::generate_statement_body() {if (!hasError) { generate_statement_body(); } - } +} void VhdlParser::generate_statement_body1() {if (!hasError) { @@ -11536,7 +11558,7 @@ void VhdlParser::generate_statement_body1() {if (!hasError) { case VARIABLE_T:{if (!hasError) { while (!hasError) { - if (jj_2_107(2147483647)) { + if (jj_2_108(2147483647)) { ; } else { goto end_label_51; @@ -11590,7 +11612,7 @@ void VhdlParser::generate_statement_body1() {if (!hasError) { end_label_52: ; } - } +} QCString VhdlParser::external_name() {QCString s,s1,s2;if (!hasError) { @@ -11622,7 +11644,7 @@ QCString t="<<"+s; QCString t1=s1+":"+s2+">>"; return s+s1; assert(false); - } +} QCString VhdlParser::sig_stat() {Token *t; @@ -11666,7 +11688,7 @@ return t->image.data(); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::external_pathname() {QCString s; @@ -11710,11 +11732,11 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::absolute_pathname() {QCString s,s1; - if (jj_2_108(2147483647)) {if (!hasError) { + if (jj_2_109(2147483647)) {if (!hasError) { jj_consume_token(DOT_T); } @@ -11755,7 +11777,7 @@ return "."+s; } } assert(false); - } +} QCString VhdlParser::relative_pathname() {QCString s,s1,s2;if (!hasError) { @@ -11764,7 +11786,7 @@ QCString VhdlParser::relative_pathname() {QCString s,s1,s2;if (!hasError) { } if (!hasError) { - if (jj_2_109(2147483647)) {if (!hasError) { + if (jj_2_110(2147483647)) {if (!hasError) { s1 = pathname_element_list(); } @@ -11780,7 +11802,7 @@ QCString VhdlParser::relative_pathname() {QCString s,s1,s2;if (!hasError) { return s+s1+s2; assert(false); - } +} QCString VhdlParser::neg_list() {QCString s;if (!hasError) { @@ -11813,7 +11835,7 @@ s+="^."; return s; assert(false); - } +} QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) { @@ -11849,7 +11871,7 @@ if(!s1.isEmpty()) return s; assert(false); - } +} QCString VhdlParser::pathname_element_list() {QCString s,s1,s2;if (!hasError) { @@ -11870,7 +11892,7 @@ s+="."; if (!hasError) { while (!hasError) { - if (jj_2_110(2147483647)) { + if (jj_2_111(2147483647)) { ; } else { goto end_label_54; @@ -11893,7 +11915,7 @@ s2+=s1;s2+="."; return s+s2; assert(false); - } +} QCString VhdlParser::package_path_name() {QCString s;if (!hasError) { @@ -11907,11 +11929,11 @@ QCString VhdlParser::package_path_name() {QCString s;if (!hasError) { return "@"+s; assert(false); - } +} void VhdlParser::conditional_signal_assignment_wave() { - if (jj_2_111(2147483647)) {if (!hasError) { + if (jj_2_112(2147483647)) {if (!hasError) { conditional_force_assignment(); } @@ -11935,7 +11957,7 @@ void VhdlParser::conditional_signal_assignment_wave() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::conditional_waveform_assignment() {if (!hasError) { @@ -11995,7 +12017,7 @@ void VhdlParser::conditional_waveform_assignment() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::else_wave_list() {if (!hasError) { @@ -12026,7 +12048,7 @@ void VhdlParser::else_wave_list() {if (!hasError) { } } - } +} void VhdlParser::conditional_force_assignment() {if (!hasError) { @@ -12104,11 +12126,11 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::selected_signal_assignment_wave() { - if (jj_2_112(2147483647)) {if (!hasError) { + if (jj_2_113(2147483647)) {if (!hasError) { selected_force_assignment(); } @@ -12128,7 +12150,7 @@ void VhdlParser::selected_signal_assignment_wave() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::selected_variable_assignment() {if (!hasError) { @@ -12171,11 +12193,11 @@ void VhdlParser::selected_variable_assignment() {if (!hasError) { sel_var_list(); } - } +} void VhdlParser::select_name() { - if (jj_2_113(2147483647)) {if (!hasError) { + if (jj_2_114(2147483647)) {if (!hasError) { aggregate(); } @@ -12198,7 +12220,7 @@ void VhdlParser::select_name() { errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } - } +} void VhdlParser::selected_waveform_assignment() {if (!hasError) { @@ -12258,7 +12280,7 @@ void VhdlParser::selected_waveform_assignment() {if (!hasError) { sel_wave_list(); } - } +} void VhdlParser::selected_force_assignment() {if (!hasError) { @@ -12321,7 +12343,7 @@ void VhdlParser::selected_force_assignment() {if (!hasError) { sel_var_list(); } - } +} void VhdlParser::sel_var_list() {if (!hasError) { @@ -12365,7 +12387,7 @@ void VhdlParser::sel_var_list() {if (!hasError) { if (!hasError) { while (!hasError) { - if (jj_2_114(2147483647)) { + if (jj_2_115(2147483647)) { ; } else { goto end_label_55; @@ -12409,7 +12431,7 @@ void VhdlParser::sel_var_list() {if (!hasError) { end_label_55: ; } - } +} void VhdlParser::sel_wave_list() {if (!hasError) { @@ -12452,7 +12474,7 @@ void VhdlParser::sel_wave_list() {if (!hasError) { jj_consume_token(SEMI_T); } - } +} void VhdlParser::inout_stat() { @@ -12476,7 +12498,7 @@ void VhdlParser::inout_stat() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} void VhdlParser::else_stat() {if (!hasError) { @@ -12522,7 +12544,7 @@ void VhdlParser::else_stat() {if (!hasError) { end_label_57: ; } - } +} QCString VhdlParser::interface_subprogram_declaration() {QCString s; @@ -12557,7 +12579,7 @@ return s; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } assert(false); - } +} QCString VhdlParser::iproc() {QCString s,s1;if (!hasError) { @@ -12576,7 +12598,7 @@ QCString VhdlParser::iproc() {QCString s,s1;if (!hasError) { current->name=s; return "procedure "+s+s1; assert(false); - } +} QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;if (!hasError) { @@ -12690,7 +12712,7 @@ QCString q; } currP=0;return ""; assert(false); - } +} QCString VhdlParser::param() {QCString s,s1;Token *tok=0;if (!hasError) { @@ -12739,11 +12761,12 @@ param_sec=PARAM_SEC; if(tok) { s = tok->image.data(); - param_sec=0; + } + param_sec=0; return s+"("+s1+")"; assert(false); - } +} void VhdlParser::parseInline() { @@ -12773,7 +12796,7 @@ void VhdlParser::parseInline() { jj_consume_token(-1); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } +} VhdlParser::VhdlParser(TokenManager *tm){ @@ -12836,7 +12859,7 @@ Token * VhdlParser::jj_consume_token(int kind) { jj_gen++; if (++jj_gc > 100) { jj_gc = 0; - for (int i = 0; i < 114; i++) { + for (int i = 0; i < 115; i++) { JJCalls *c = &jj_2_rtns[i]; while (c != NULL) { if (c->gen < jj_gen) c->first = NULL; @@ -12849,7 +12872,8 @@ Token * VhdlParser::jj_consume_token(int kind) { token = oldToken; jj_kind = kind; JAVACC_STRING_TYPE image = kind >= 0 ? tokenImage[kind] : tokenImage[0]; - errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this), hasError = true; + errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this); + hasError = true; return token; } @@ -12924,7 +12948,7 @@ int VhdlParser::jj_ntk_f(){ void VhdlParser::jj_rescan_token(){ jj_rescan = true; - for (int i = 0; i < 114; i++) { + for (int i = 0; i < 115; i++) { JJCalls *p = &jj_2_rtns[i]; do { if (p->gen > jj_gen) { @@ -13044,6 +13068,7 @@ int VhdlParser::jj_ntk_f(){ case 111: jj_3_112(); break; case 112: jj_3_113(); break; case 113: jj_3_114(); break; + case 114: jj_3_115(); break; } } p = p->next; diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h index 1c4c73d..bd02af3 100644 --- a/vhdlparser/VhdlParser.h +++ b/vhdlparser/VhdlParser.h @@ -582,7 +582,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_1() || jj_done; + return (!jj_3_1() || jj_done); { jj_save(0, xla); } } @@ -590,7 +590,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_2() || jj_done; + return (!jj_3_2() || jj_done); { jj_save(1, xla); } } @@ -598,7 +598,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_3() || jj_done; + return (!jj_3_3() || jj_done); { jj_save(2, xla); } } @@ -606,7 +606,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_4() || jj_done; + return (!jj_3_4() || jj_done); { jj_save(3, xla); } } @@ -614,7 +614,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_5() || jj_done; + return (!jj_3_5() || jj_done); { jj_save(4, xla); } } @@ -622,7 +622,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_6() || jj_done; + return (!jj_3_6() || jj_done); { jj_save(5, xla); } } @@ -630,7 +630,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_7() || jj_done; + return (!jj_3_7() || jj_done); { jj_save(6, xla); } } @@ -638,7 +638,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_8() || jj_done; + return (!jj_3_8() || jj_done); { jj_save(7, xla); } } @@ -646,7 +646,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_9() || jj_done; + return (!jj_3_9() || jj_done); { jj_save(8, xla); } } @@ -654,7 +654,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_10() || jj_done; + return (!jj_3_10() || jj_done); { jj_save(9, xla); } } @@ -662,7 +662,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_11() || jj_done; + return (!jj_3_11() || jj_done); { jj_save(10, xla); } } @@ -670,7 +670,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_12() || jj_done; + return (!jj_3_12() || jj_done); { jj_save(11, xla); } } @@ -678,7 +678,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_13() || jj_done; + return (!jj_3_13() || jj_done); { jj_save(12, xla); } } @@ -686,7 +686,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_14() || jj_done; + return (!jj_3_14() || jj_done); { jj_save(13, xla); } } @@ -694,7 +694,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_15() || jj_done; + return (!jj_3_15() || jj_done); { jj_save(14, xla); } } @@ -702,7 +702,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_16() || jj_done; + return (!jj_3_16() || jj_done); { jj_save(15, xla); } } @@ -710,7 +710,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_17() || jj_done; + return (!jj_3_17() || jj_done); { jj_save(16, xla); } } @@ -718,7 +718,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_18() || jj_done; + return (!jj_3_18() || jj_done); { jj_save(17, xla); } } @@ -726,7 +726,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_19() || jj_done; + return (!jj_3_19() || jj_done); { jj_save(18, xla); } } @@ -734,7 +734,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_20() || jj_done; + return (!jj_3_20() || jj_done); { jj_save(19, xla); } } @@ -742,7 +742,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_21() || jj_done; + return (!jj_3_21() || jj_done); { jj_save(20, xla); } } @@ -750,7 +750,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_22() || jj_done; + return (!jj_3_22() || jj_done); { jj_save(21, xla); } } @@ -758,7 +758,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_23() || jj_done; + return (!jj_3_23() || jj_done); { jj_save(22, xla); } } @@ -766,7 +766,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_24() || jj_done; + return (!jj_3_24() || jj_done); { jj_save(23, xla); } } @@ -774,7 +774,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_25() || jj_done; + return (!jj_3_25() || jj_done); { jj_save(24, xla); } } @@ -782,7 +782,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_26() || jj_done; + return (!jj_3_26() || jj_done); { jj_save(25, xla); } } @@ -790,7 +790,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_27() || jj_done; + return (!jj_3_27() || jj_done); { jj_save(26, xla); } } @@ -798,7 +798,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_28() || jj_done; + return (!jj_3_28() || jj_done); { jj_save(27, xla); } } @@ -806,7 +806,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_29() || jj_done; + return (!jj_3_29() || jj_done); { jj_save(28, xla); } } @@ -814,7 +814,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_30() || jj_done; + return (!jj_3_30() || jj_done); { jj_save(29, xla); } } @@ -822,7 +822,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_31() || jj_done; + return (!jj_3_31() || jj_done); { jj_save(30, xla); } } @@ -830,7 +830,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_32() || jj_done; + return (!jj_3_32() || jj_done); { jj_save(31, xla); } } @@ -838,7 +838,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_33() || jj_done; + return (!jj_3_33() || jj_done); { jj_save(32, xla); } } @@ -846,7 +846,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_34() || jj_done; + return (!jj_3_34() || jj_done); { jj_save(33, xla); } } @@ -854,7 +854,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_35() || jj_done; + return (!jj_3_35() || jj_done); { jj_save(34, xla); } } @@ -862,7 +862,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_36() || jj_done; + return (!jj_3_36() || jj_done); { jj_save(35, xla); } } @@ -870,7 +870,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_37() || jj_done; + return (!jj_3_37() || jj_done); { jj_save(36, xla); } } @@ -878,7 +878,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_38() || jj_done; + return (!jj_3_38() || jj_done); { jj_save(37, xla); } } @@ -886,7 +886,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_39() || jj_done; + return (!jj_3_39() || jj_done); { jj_save(38, xla); } } @@ -894,7 +894,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_40() || jj_done; + return (!jj_3_40() || jj_done); { jj_save(39, xla); } } @@ -902,7 +902,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_41() || jj_done; + return (!jj_3_41() || jj_done); { jj_save(40, xla); } } @@ -910,7 +910,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_42() || jj_done; + return (!jj_3_42() || jj_done); { jj_save(41, xla); } } @@ -918,7 +918,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_43() || jj_done; + return (!jj_3_43() || jj_done); { jj_save(42, xla); } } @@ -926,7 +926,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_44() || jj_done; + return (!jj_3_44() || jj_done); { jj_save(43, xla); } } @@ -934,7 +934,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_45() || jj_done; + return (!jj_3_45() || jj_done); { jj_save(44, xla); } } @@ -942,7 +942,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_46() || jj_done; + return (!jj_3_46() || jj_done); { jj_save(45, xla); } } @@ -950,7 +950,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_47() || jj_done; + return (!jj_3_47() || jj_done); { jj_save(46, xla); } } @@ -958,7 +958,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_48() || jj_done; + return (!jj_3_48() || jj_done); { jj_save(47, xla); } } @@ -966,7 +966,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_49() || jj_done; + return (!jj_3_49() || jj_done); { jj_save(48, xla); } } @@ -974,7 +974,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_50() || jj_done; + return (!jj_3_50() || jj_done); { jj_save(49, xla); } } @@ -982,7 +982,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_51() || jj_done; + return (!jj_3_51() || jj_done); { jj_save(50, xla); } } @@ -990,7 +990,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_52() || jj_done; + return (!jj_3_52() || jj_done); { jj_save(51, xla); } } @@ -998,7 +998,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_53() || jj_done; + return (!jj_3_53() || jj_done); { jj_save(52, xla); } } @@ -1006,7 +1006,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_54() || jj_done; + return (!jj_3_54() || jj_done); { jj_save(53, xla); } } @@ -1014,7 +1014,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_55() || jj_done; + return (!jj_3_55() || jj_done); { jj_save(54, xla); } } @@ -1022,7 +1022,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_56() || jj_done; + return (!jj_3_56() || jj_done); { jj_save(55, xla); } } @@ -1030,7 +1030,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_57() || jj_done; + return (!jj_3_57() || jj_done); { jj_save(56, xla); } } @@ -1038,7 +1038,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_58() || jj_done; + return (!jj_3_58() || jj_done); { jj_save(57, xla); } } @@ -1046,7 +1046,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_59() || jj_done; + return (!jj_3_59() || jj_done); { jj_save(58, xla); } } @@ -1054,7 +1054,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_60() || jj_done; + return (!jj_3_60() || jj_done); { jj_save(59, xla); } } @@ -1062,7 +1062,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_61() || jj_done; + return (!jj_3_61() || jj_done); { jj_save(60, xla); } } @@ -1070,7 +1070,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_62() || jj_done; + return (!jj_3_62() || jj_done); { jj_save(61, xla); } } @@ -1078,7 +1078,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_63() || jj_done; + return (!jj_3_63() || jj_done); { jj_save(62, xla); } } @@ -1086,7 +1086,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_64() || jj_done; + return (!jj_3_64() || jj_done); { jj_save(63, xla); } } @@ -1094,7 +1094,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_65() || jj_done; + return (!jj_3_65() || jj_done); { jj_save(64, xla); } } @@ -1102,7 +1102,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_66() || jj_done; + return (!jj_3_66() || jj_done); { jj_save(65, xla); } } @@ -1110,7 +1110,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_67() || jj_done; + return (!jj_3_67() || jj_done); { jj_save(66, xla); } } @@ -1118,7 +1118,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_68() || jj_done; + return (!jj_3_68() || jj_done); { jj_save(67, xla); } } @@ -1126,7 +1126,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_69() || jj_done; + return (!jj_3_69() || jj_done); { jj_save(68, xla); } } @@ -1134,7 +1134,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_70() || jj_done; + return (!jj_3_70() || jj_done); { jj_save(69, xla); } } @@ -1142,7 +1142,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_71() || jj_done; + return (!jj_3_71() || jj_done); { jj_save(70, xla); } } @@ -1150,7 +1150,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_72() || jj_done; + return (!jj_3_72() || jj_done); { jj_save(71, xla); } } @@ -1158,7 +1158,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_73() || jj_done; + return (!jj_3_73() || jj_done); { jj_save(72, xla); } } @@ -1166,7 +1166,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_74() || jj_done; + return (!jj_3_74() || jj_done); { jj_save(73, xla); } } @@ -1174,7 +1174,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_75() || jj_done; + return (!jj_3_75() || jj_done); { jj_save(74, xla); } } @@ -1182,7 +1182,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_76() || jj_done; + return (!jj_3_76() || jj_done); { jj_save(75, xla); } } @@ -1190,7 +1190,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_77() || jj_done; + return (!jj_3_77() || jj_done); { jj_save(76, xla); } } @@ -1198,7 +1198,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_78() || jj_done; + return (!jj_3_78() || jj_done); { jj_save(77, xla); } } @@ -1206,7 +1206,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_79() || jj_done; + return (!jj_3_79() || jj_done); { jj_save(78, xla); } } @@ -1214,7 +1214,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_80() || jj_done; + return (!jj_3_80() || jj_done); { jj_save(79, xla); } } @@ -1222,7 +1222,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_81() || jj_done; + return (!jj_3_81() || jj_done); { jj_save(80, xla); } } @@ -1230,7 +1230,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_82() || jj_done; + return (!jj_3_82() || jj_done); { jj_save(81, xla); } } @@ -1238,7 +1238,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_83() || jj_done; + return (!jj_3_83() || jj_done); { jj_save(82, xla); } } @@ -1246,7 +1246,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_84() || jj_done; + return (!jj_3_84() || jj_done); { jj_save(83, xla); } } @@ -1254,7 +1254,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_85() || jj_done; + return (!jj_3_85() || jj_done); { jj_save(84, xla); } } @@ -1262,7 +1262,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_86() || jj_done; + return (!jj_3_86() || jj_done); { jj_save(85, xla); } } @@ -1270,7 +1270,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_87() || jj_done; + return (!jj_3_87() || jj_done); { jj_save(86, xla); } } @@ -1278,7 +1278,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_88() || jj_done; + return (!jj_3_88() || jj_done); { jj_save(87, xla); } } @@ -1286,7 +1286,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_89() || jj_done; + return (!jj_3_89() || jj_done); { jj_save(88, xla); } } @@ -1294,7 +1294,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_90() || jj_done; + return (!jj_3_90() || jj_done); { jj_save(89, xla); } } @@ -1302,7 +1302,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_91() || jj_done; + return (!jj_3_91() || jj_done); { jj_save(90, xla); } } @@ -1310,7 +1310,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_92() || jj_done; + return (!jj_3_92() || jj_done); { jj_save(91, xla); } } @@ -1318,7 +1318,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_93() || jj_done; + return (!jj_3_93() || jj_done); { jj_save(92, xla); } } @@ -1326,7 +1326,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_94() || jj_done; + return (!jj_3_94() || jj_done); { jj_save(93, xla); } } @@ -1334,7 +1334,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_95() || jj_done; + return (!jj_3_95() || jj_done); { jj_save(94, xla); } } @@ -1342,7 +1342,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_96() || jj_done; + return (!jj_3_96() || jj_done); { jj_save(95, xla); } } @@ -1350,7 +1350,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_97() || jj_done; + return (!jj_3_97() || jj_done); { jj_save(96, xla); } } @@ -1358,7 +1358,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_98() || jj_done; + return (!jj_3_98() || jj_done); { jj_save(97, xla); } } @@ -1366,7 +1366,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_99() || jj_done; + return (!jj_3_99() || jj_done); { jj_save(98, xla); } } @@ -1374,7 +1374,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_100() || jj_done; + return (!jj_3_100() || jj_done); { jj_save(99, xla); } } @@ -1382,7 +1382,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_101() || jj_done; + return (!jj_3_101() || jj_done); { jj_save(100, xla); } } @@ -1390,7 +1390,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_102() || jj_done; + return (!jj_3_102() || jj_done); { jj_save(101, xla); } } @@ -1398,7 +1398,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_103() || jj_done; + return (!jj_3_103() || jj_done); { jj_save(102, xla); } } @@ -1406,7 +1406,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_104() || jj_done; + return (!jj_3_104() || jj_done); { jj_save(103, xla); } } @@ -1414,7 +1414,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_105() || jj_done; + return (!jj_3_105() || jj_done); { jj_save(104, xla); } } @@ -1422,7 +1422,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_106() || jj_done; + return (!jj_3_106() || jj_done); { jj_save(105, xla); } } @@ -1430,7 +1430,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_107() || jj_done; + return (!jj_3_107() || jj_done); { jj_save(106, xla); } } @@ -1438,7 +1438,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_108() || jj_done; + return (!jj_3_108() || jj_done); { jj_save(107, xla); } } @@ -1446,7 +1446,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_109() || jj_done; + return (!jj_3_109() || jj_done); { jj_save(108, xla); } } @@ -1454,7 +1454,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_110() || jj_done; + return (!jj_3_110() || jj_done); { jj_save(109, xla); } } @@ -1462,7 +1462,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_111() || jj_done; + return (!jj_3_111() || jj_done); { jj_save(110, xla); } } @@ -1470,7 +1470,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_112() || jj_done; + return (!jj_3_112() || jj_done); { jj_save(111, xla); } } @@ -1478,7 +1478,7 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_113() || jj_done; + return (!jj_3_113() || jj_done); { jj_save(112, xla); } } @@ -1486,22 +1486,16 @@ void parseInline(); { jj_la = xla; jj_lastpos = jj_scanpos = token; jj_done = false; - return !jj_3_114() || jj_done; + return (!jj_3_114() || jj_done); { jj_save(113, xla); } } - inline bool jj_3R_230() - { - if (jj_done) return true; - if (jj_3R_96()) return true; - return false; - } - - inline bool jj_3R_229() + inline bool jj_2_115(int xla) { - if (jj_done) return true; - if (jj_3R_95()) return true; - return false; + jj_la = xla; jj_lastpos = jj_scanpos = token; + jj_done = false; + return (!jj_3_115() || jj_done); + { jj_save(114, xla); } } inline bool jj_3R_228() @@ -1532,7 +1526,7 @@ void parseInline(); return false; } - inline bool jj_3_42() + inline bool jj_3_43() { if (jj_done) return true; if (jj_3R_93()) return true; @@ -1597,6 +1591,15 @@ void parseInline(); return false; } + inline bool jj_3R_411() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + inline bool jj_3R_195() { if (jj_done) return true; @@ -1645,15 +1648,6 @@ void parseInline(); return false; } - inline bool jj_3R_411() - { - if (jj_done) return true; - if (jj_scan_token(LPAREN_T)) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(RPAREN_T)) return true; - return false; - } - inline bool jj_3R_91() { if (jj_done) return true; @@ -1671,7 +1665,7 @@ void parseInline(); return false; } - inline bool jj_3_41() + inline bool jj_3_42() { if (jj_done) return true; if (jj_3R_92()) return true; @@ -1693,14 +1687,14 @@ void parseInline(); return false; } - inline bool jj_3_40() + inline bool jj_3_41() { if (jj_done) return true; if (jj_3R_91()) return true; return false; } - inline bool jj_3_39() + inline bool jj_3_40() { if (jj_done) return true; if (jj_3R_90()) return true; @@ -1714,7 +1708,7 @@ void parseInline(); return false; } - inline bool jj_3_38() + inline bool jj_3_39() { if (jj_done) return true; if (jj_3R_89()) return true; @@ -1726,14 +1720,14 @@ void parseInline(); if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3_38()) { + if (jj_3_39()) { jj_scanpos = xsp; if (jj_3R_555()) { jj_scanpos = xsp; - if (jj_3_39()) { - jj_scanpos = xsp; if (jj_3_40()) { jj_scanpos = xsp; + if (jj_3_41()) { + jj_scanpos = xsp; if (jj_3R_556()) { jj_scanpos = xsp; if (jj_3R_557()) return true; @@ -1753,6 +1747,14 @@ void parseInline(); return false; } + inline bool jj_3_38() + { + if (jj_done) return true; + if (jj_scan_token(BASIC_IDENTIFIER)) return true; + if (jj_scan_token(DOT_T)) return true; + return false; + } + inline bool jj_3R_624() { if (jj_done) return true; @@ -1774,6 +1776,13 @@ void parseInline(); return false; } + inline bool jj_3R_695() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + return false; + } + inline bool jj_3R_330() { if (jj_done) return true; @@ -1796,13 +1805,6 @@ void parseInline(); return false; } - inline bool jj_3R_695() - { - if (jj_done) return true; - if (jj_3R_69()) return true; - return false; - } - inline bool jj_3R_327() { if (jj_done) return true; @@ -1815,9 +1817,11 @@ void parseInline(); { if (jj_done) return true; if (jj_scan_token(ENTITY_T)) return true; - if (jj_3R_59()) return true; Token * xsp; xsp = jj_scanpos; + if (jj_3_38()) jj_scanpos = xsp; + if (jj_3R_59()) return true; + xsp = jj_scanpos; if (jj_3R_411()) jj_scanpos = xsp; return false; } @@ -2004,6 +2008,17 @@ void parseInline(); return false; } + inline bool jj_3R_423() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(77)) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_519()) jj_scanpos = xsp; + return false; + } + inline bool jj_3R_164() { if (jj_done) return true; @@ -2011,14 +2026,11 @@ void parseInline(); return false; } - inline bool jj_3R_423() + inline bool jj_3_115() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_scan_token(77)) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_519()) jj_scanpos = xsp; + if (jj_3R_58()) return true; + if (jj_scan_token(WHEN_T)) return true; return false; } @@ -2041,14 +2053,6 @@ void parseInline(); return false; } - inline bool jj_3_114() - { - if (jj_done) return true; - if (jj_3R_58()) return true; - if (jj_scan_token(WHEN_T)) return true; - return false; - } - inline bool jj_3R_544() { if (jj_done) return true; @@ -2108,6 +2112,13 @@ void parseInline(); return false; } + inline bool jj_3R_304() + { + if (jj_done) return true; + if (jj_3R_383()) return true; + return false; + } + inline bool jj_3R_382() { if (jj_done) return true; @@ -2122,13 +2133,6 @@ void parseInline(); return false; } - inline bool jj_3R_304() - { - if (jj_done) return true; - if (jj_3R_383()) return true; - return false; - } - inline bool jj_3R_424() { if (jj_done) return true; @@ -2184,6 +2188,15 @@ void parseInline(); return false; } + inline bool jj_3R_342() + { + if (jj_done) return true; + if (jj_scan_token(PROCEDURE_T)) return true; + if (jj_3R_69()) return true; + if (jj_3R_423()) return true; + return false; + } + inline bool jj_3R_606() { if (jj_done) return true; @@ -2203,15 +2216,6 @@ void parseInline(); return false; } - inline bool jj_3R_342() - { - if (jj_done) return true; - if (jj_scan_token(PROCEDURE_T)) return true; - if (jj_3R_69()) return true; - if (jj_3R_423()) return true; - return false; - } - inline bool jj_3R_70() { if (jj_done) return true; @@ -2223,17 +2227,17 @@ void parseInline(); return false; } - inline bool jj_3R_170() + inline bool jj_3R_194() { if (jj_done) return true; - if (jj_3R_69()) return true; + if (jj_3R_343()) return true; return false; } - inline bool jj_3R_194() + inline bool jj_3R_170() { if (jj_done) return true; - if (jj_3R_343()) return true; + if (jj_3R_69()) return true; return false; } @@ -2297,14 +2301,6 @@ void parseInline(); return false; } - inline bool jj_3R_321() - { - if (jj_done) return true; - if (jj_scan_token(IF_T)) return true; - if (jj_3R_79()) return true; - return false; - } - inline bool jj_3R_383() { if (jj_done) return true; @@ -2324,6 +2320,14 @@ void parseInline(); return false; } + inline bool jj_3R_321() + { + if (jj_done) return true; + if (jj_scan_token(IF_T)) return true; + if (jj_3R_79()) return true; + return false; + } + inline bool jj_3R_168() { if (jj_done) return true; @@ -2402,7 +2406,7 @@ void parseInline(); return false; } - inline bool jj_3_110() + inline bool jj_3_111() { if (jj_done) return true; if (jj_3R_142()) return true; @@ -2438,7 +2442,7 @@ void parseInline(); return false; } - inline bool jj_3_113() + inline bool jj_3_114() { if (jj_done) return true; if (jj_3R_108()) return true; @@ -2511,7 +2515,7 @@ void parseInline(); return false; } - inline bool jj_3_112() + inline bool jj_3_113() { if (jj_done) return true; if (jj_3R_144()) return true; @@ -2614,7 +2618,7 @@ void parseInline(); return false; } - inline bool jj_3_111() + inline bool jj_3_112() { if (jj_done) return true; if (jj_3R_143()) return true; @@ -2676,41 +2680,41 @@ void parseInline(); return false; } - inline bool jj_3R_311() + inline bool jj_3R_126() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_396()) { + if (jj_3R_267()) { jj_scanpos = xsp; - if (jj_3R_397()) return true; + if (jj_3R_268()) return true; } return false; } - inline bool jj_3R_396() + inline bool jj_3R_267() { if (jj_done) return true; - if (jj_3R_59()) return true; + if (jj_3R_143()) return true; return false; } - inline bool jj_3R_126() + inline bool jj_3R_311() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_267()) { + if (jj_3R_396()) { jj_scanpos = xsp; - if (jj_3R_268()) return true; + if (jj_3R_397()) return true; } return false; } - inline bool jj_3R_267() + inline bool jj_3R_396() { if (jj_done) return true; - if (jj_3R_143()) return true; + if (jj_3R_59()) return true; return false; } @@ -2744,7 +2748,7 @@ void parseInline(); return false; } - inline bool jj_3_109() + inline bool jj_3_110() { if (jj_done) return true; if (jj_3R_141()) return true; @@ -2831,7 +2835,7 @@ void parseInline(); return false; } - inline bool jj_3_108() + inline bool jj_3_109() { if (jj_done) return true; if (jj_scan_token(DOT_T)) return true; @@ -2955,14 +2959,6 @@ void parseInline(); return false; } - inline bool jj_3R_696() - { - if (jj_done) return true; - if (jj_scan_token(COMMA_T)) return true; - if (jj_3R_96()) return true; - return false; - } - inline bool jj_3R_395() { if (jj_done) return true; @@ -2985,6 +2981,14 @@ void parseInline(); return false; } + inline bool jj_3R_696() + { + if (jj_done) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_96()) return true; + return false; + } + inline bool jj_3R_146() { if (jj_done) return true; @@ -2993,17 +2997,17 @@ void parseInline(); return false; } - inline bool jj_3R_393() + inline bool jj_3_106() { if (jj_done) return true; - if (jj_scan_token(OR_T)) return true; + if (jj_3R_138()) return true; return false; } - inline bool jj_3_105() + inline bool jj_3R_393() { if (jj_done) return true; - if (jj_3R_138()) return true; + if (jj_scan_token(OR_T)) return true; return false; } @@ -3014,6 +3018,13 @@ void parseInline(); return false; } + inline bool jj_3R_485() + { + if (jj_done) return true; + if (jj_scan_token(VARIABLE_T)) return true; + return false; + } + inline bool jj_3R_391() { if (jj_done) return true; @@ -3021,10 +3032,10 @@ void parseInline(); return false; } - inline bool jj_3R_485() + inline bool jj_3R_484() { if (jj_done) return true; - if (jj_scan_token(VARIABLE_T)) return true; + if (jj_scan_token(SIGNAL_T)) return true; return false; } @@ -3035,17 +3046,32 @@ void parseInline(); return false; } - inline bool jj_3R_484() + inline bool jj_3R_389() { if (jj_done) return true; - if (jj_scan_token(SIGNAL_T)) return true; + if (jj_scan_token(NAND_T)) return true; return false; } - inline bool jj_3R_389() + inline bool jj_3R_394() { if (jj_done) return true; - if (jj_scan_token(NAND_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_483()) { + jj_scanpos = xsp; + if (jj_3R_484()) { + jj_scanpos = xsp; + if (jj_3R_485()) return true; + } + } + return false; + } + + inline bool jj_3R_483() + { + if (jj_done) return true; + if (jj_scan_token(CONSTANT_T)) return true; return false; } @@ -3080,29 +3106,7 @@ void parseInline(); return false; } - inline bool jj_3R_394() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_483()) { - jj_scanpos = xsp; - if (jj_3R_484()) { - jj_scanpos = xsp; - if (jj_3R_485()) return true; - } - } - return false; - } - - inline bool jj_3R_483() - { - if (jj_done) return true; - if (jj_scan_token(CONSTANT_T)) return true; - return false; - } - - inline bool jj_3_107() + inline bool jj_3_108() { if (jj_done) return true; if (jj_3R_140()) return true; @@ -3180,18 +3184,18 @@ void parseInline(); return false; } - inline bool jj_3R_262() + inline bool jj_3R_284() { if (jj_done) return true; if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; return false; } - inline bool jj_3R_284() + inline bool jj_3R_262() { if (jj_done) return true; if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; return false; } @@ -3225,7 +3229,7 @@ void parseInline(); return false; } - inline bool jj_3_106() + inline bool jj_3_107() { if (jj_done) return true; if (jj_3R_139()) return true; @@ -3272,6 +3276,19 @@ void parseInline(); return false; } + inline bool jj_3R_651() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_107()) jj_scanpos = xsp; + if (jj_3R_85()) return true; + if (jj_scan_token(ARROW_T)) return true; + if (jj_3R_661()) return true; + return false; + } + inline bool jj_3R_207() { if (jj_done) return true; @@ -3291,19 +3308,6 @@ void parseInline(); return false; } - inline bool jj_3R_651() - { - if (jj_done) return true; - if (jj_scan_token(WHEN_T)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_106()) jj_scanpos = xsp; - if (jj_3R_85()) return true; - if (jj_scan_token(ARROW_T)) return true; - if (jj_3R_661()) return true; - return false; - } - inline bool jj_3R_618() { if (jj_done) return true; @@ -3558,13 +3562,6 @@ void parseInline(); return false; } - inline bool jj_3R_605() - { - if (jj_done) return true; - if (jj_scan_token(BOX_T)) return true; - return false; - } - inline bool jj_3R_681() { if (jj_done) return true; @@ -3576,6 +3573,13 @@ void parseInline(); return false; } + inline bool jj_3R_605() + { + if (jj_done) return true; + if (jj_scan_token(BOX_T)) return true; + return false; + } + inline bool jj_3R_719() { if (jj_done) return true; @@ -3685,14 +3689,7 @@ void parseInline(); return false; } - inline bool jj_3R_601() - { - if (jj_done) return true; - if (jj_scan_token(FILE_T)) return true; - return false; - } - - inline bool jj_3_103() + inline bool jj_3_104() { if (jj_done) return true; if (jj_3R_64()) return true; @@ -3710,6 +3707,13 @@ void parseInline(); return false; } + inline bool jj_3R_601() + { + if (jj_done) return true; + if (jj_scan_token(FILE_T)) return true; + return false; + } + inline bool jj_3R_600() { if (jj_done) return true; @@ -3731,17 +3735,17 @@ void parseInline(); return false; } - inline bool jj_3R_597() + inline bool jj_3R_716() { if (jj_done) return true; - if (jj_scan_token(LABEL_T)) return true; + if (jj_3R_382()) return true; return false; } - inline bool jj_3R_716() + inline bool jj_3R_597() { if (jj_done) return true; - if (jj_3R_382()) return true; + if (jj_scan_token(LABEL_T)) return true; return false; } @@ -3759,14 +3763,7 @@ void parseInline(); return false; } - inline bool jj_3R_594() - { - if (jj_done) return true; - if (jj_scan_token(SIGNAL_T)) return true; - return false; - } - - inline bool jj_3_104() + inline bool jj_3_105() { if (jj_done) return true; if (jj_3R_65()) return true; @@ -3780,10 +3777,10 @@ void parseInline(); return false; } - inline bool jj_3R_593() + inline bool jj_3R_594() { if (jj_done) return true; - if (jj_scan_token(CONSTANT_T)) return true; + if (jj_scan_token(SIGNAL_T)) return true; return false; } @@ -3794,17 +3791,17 @@ void parseInline(); return false; } - inline bool jj_3R_592() + inline bool jj_3R_593() { if (jj_done) return true; - if (jj_scan_token(SUBTYPE_T)) return true; + if (jj_scan_token(CONSTANT_T)) return true; return false; } - inline bool jj_3R_591() + inline bool jj_3R_592() { if (jj_done) return true; - if (jj_scan_token(TYPE_T)) return true; + if (jj_scan_token(SUBTYPE_T)) return true; return false; } @@ -3815,17 +3812,17 @@ void parseInline(); return false; } - inline bool jj_3R_590() + inline bool jj_3R_591() { if (jj_done) return true; - if (jj_scan_token(PACKAGE_T)) return true; + if (jj_scan_token(TYPE_T)) return true; return false; } - inline bool jj_3R_589() + inline bool jj_3R_590() { if (jj_done) return true; - if (jj_scan_token(FUNCTION_T)) return true; + if (jj_scan_token(PACKAGE_T)) return true; return false; } @@ -3836,10 +3833,10 @@ void parseInline(); return false; } - inline bool jj_3R_588() + inline bool jj_3R_589() { if (jj_done) return true; - if (jj_scan_token(PROCEDURE_T)) return true; + if (jj_scan_token(FUNCTION_T)) return true; return false; } @@ -3850,10 +3847,10 @@ void parseInline(); return false; } - inline bool jj_3R_587() + inline bool jj_3R_588() { if (jj_done) return true; - if (jj_scan_token(CONFIGURATION_T)) return true; + if (jj_scan_token(PROCEDURE_T)) return true; return false; } @@ -3864,10 +3861,10 @@ void parseInline(); return false; } - inline bool jj_3R_586() + inline bool jj_3R_587() { if (jj_done) return true; - if (jj_scan_token(ARCHITECTURE_T)) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; return false; } @@ -3878,6 +3875,13 @@ void parseInline(); return false; } + inline bool jj_3R_586() + { + if (jj_done) return true; + if (jj_scan_token(ARCHITECTURE_T)) return true; + return false; + } + inline bool jj_3R_708() { if (jj_done) return true; @@ -3892,6 +3896,13 @@ void parseInline(); return false; } + inline bool jj_3R_706() + { + if (jj_done) return true; + if (jj_3R_524()) return true; + return false; + } + inline bool jj_3R_585() { if (jj_done) return true; @@ -3956,20 +3967,6 @@ void parseInline(); return false; } - inline bool jj_3R_706() - { - if (jj_done) return true; - if (jj_3R_524()) return true; - return false; - } - - inline bool jj_3R_563() - { - if (jj_done) return true; - if (jj_scan_token(OPEN_T)) return true; - return false; - } - inline bool jj_3R_705() { if (jj_done) return true; @@ -4004,7 +4001,7 @@ void parseInline(); jj_scanpos = xsp; if (jj_3R_715()) { jj_scanpos = xsp; - if (jj_3_104()) { + if (jj_3_105()) { jj_scanpos = xsp; if (jj_3R_716()) return true; } @@ -4022,11 +4019,10 @@ void parseInline(); return false; } - inline bool jj_3R_562() + inline bool jj_3R_563() { if (jj_done) return true; - if (jj_scan_token(CONFIGURATION_T)) return true; - if (jj_3R_59()) return true; + if (jj_scan_token(OPEN_T)) return true; return false; } @@ -4037,6 +4033,14 @@ void parseInline(); return false; } + inline bool jj_3R_562() + { + if (jj_done) return true; + if (jj_scan_token(CONFIGURATION_T)) return true; + if (jj_3R_59()) return true; + return false; + } + inline bool jj_3R_561() { if (jj_done) return true; @@ -4126,14 +4130,6 @@ void parseInline(); return false; } - inline bool jj_3R_358() - { - if (jj_done) return true; - if (jj_3R_85()) return true; - if (jj_scan_token(ARROW_T)) return true; - return false; - } - inline bool jj_3R_444() { if (jj_done) return true; @@ -4144,6 +4140,14 @@ void parseInline(); return false; } + inline bool jj_3R_358() + { + if (jj_done) return true; + if (jj_3R_85()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + inline bool jj_3R_235() { if (jj_done) return true; @@ -4324,18 +4328,18 @@ void parseInline(); return false; } - inline bool jj_3R_558() + inline bool jj_3R_461() { if (jj_done) return true; - if (jj_scan_token(REJECT_T)) return true; + if (jj_scan_token(VARASSIGN_T)) return true; if (jj_3R_58()) return true; return false; } - inline bool jj_3R_461() + inline bool jj_3R_558() { if (jj_done) return true; - if (jj_scan_token(VARASSIGN_T)) return true; + if (jj_scan_token(REJECT_T)) return true; if (jj_3R_58()) return true; return false; } @@ -4407,7 +4411,7 @@ void parseInline(); return false; } - inline bool jj_3_102() + inline bool jj_3_103() { if (jj_done) return true; if (jj_3R_69()) return true; @@ -4415,13 +4419,6 @@ void parseInline(); return false; } - inline bool jj_3_27() - { - if (jj_done) return true; - if (jj_3R_81()) return true; - return false; - } - inline bool jj_3R_361() { if (jj_done) return true; @@ -4439,7 +4436,7 @@ void parseInline(); if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3_102()) jj_scanpos = xsp; + if (jj_3_103()) jj_scanpos = xsp; if (jj_3R_114()) return true; if (jj_scan_token(VARASSIGN_T)) return true; if (jj_3R_58()) return true; @@ -4447,6 +4444,13 @@ void parseInline(); return false; } + inline bool jj_3_27() + { + if (jj_done) return true; + if (jj_3R_81()) return true; + return false; + } + inline bool jj_3R_276() { if (jj_done) return true; @@ -4542,7 +4546,7 @@ void parseInline(); return false; } - inline bool jj_3_101() + inline bool jj_3_102() { if (jj_done) return true; if (jj_3R_137()) return true; @@ -4563,13 +4567,6 @@ void parseInline(); return false; } - inline bool jj_3_26() - { - if (jj_done) return true; - if (jj_3R_80()) return true; - return false; - } - inline bool jj_3R_633() { if (jj_done) return true; @@ -4577,13 +4574,10 @@ void parseInline(); return false; } - inline bool jj_3R_379() + inline bool jj_3_26() { if (jj_done) return true; - if (jj_scan_token(FOR_T)) return true; - if (jj_3R_177()) return true; - if (jj_3R_331()) return true; - if (jj_scan_token(SEMI_T)) return true; + if (jj_3R_80()) return true; return false; } @@ -4607,7 +4601,7 @@ void parseInline(); jj_scanpos = xsp; if (jj_3R_635()) { jj_scanpos = xsp; - if (jj_3_101()) { + if (jj_3_102()) { jj_scanpos = xsp; if (jj_3R_636()) return true; } @@ -4618,6 +4612,16 @@ void parseInline(); return false; } + inline bool jj_3R_379() + { + if (jj_done) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_177()) return true; + if (jj_3R_331()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_566() { if (jj_done) return true; @@ -4625,7 +4629,7 @@ void parseInline(); return false; } - inline bool jj_3_97() + inline bool jj_3_98() { if (jj_done) return true; if (jj_3R_133()) return true; @@ -4658,7 +4662,7 @@ void parseInline(); return false; } - inline bool jj_3_100() + inline bool jj_3_101() { if (jj_done) return true; if (jj_3R_136()) return true; @@ -4670,7 +4674,7 @@ void parseInline(); if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3_100()) { + if (jj_3_101()) { jj_scanpos = xsp; if (jj_3R_457()) return true; } @@ -4687,7 +4691,7 @@ void parseInline(); return false; } - inline bool jj_3_99() + inline bool jj_3_100() { if (jj_done) return true; if (jj_3R_134()) return true; @@ -4717,7 +4721,7 @@ void parseInline(); Token * xsp; while (true) { xsp = jj_scanpos; - if (jj_3_99()) { jj_scanpos = xsp; break; } + if (jj_3_100()) { jj_scanpos = xsp; break; } } return false; } @@ -4741,7 +4745,7 @@ void parseInline(); return false; } - inline bool jj_3_98() + inline bool jj_3_99() { if (jj_done) return true; if (jj_3R_59()) return true; @@ -4772,7 +4776,7 @@ void parseInline(); return false; } - inline bool jj_3_96() + inline bool jj_3_97() { if (jj_done) return true; if (jj_3R_59()) return true; @@ -4956,7 +4960,7 @@ void parseInline(); return false; } - inline bool jj_3_95() + inline bool jj_3_96() { if (jj_done) return true; if (jj_3R_132()) return true; @@ -4970,7 +4974,7 @@ void parseInline(); return false; } - inline bool jj_3_94() + inline bool jj_3_95() { if (jj_done) return true; if (jj_3R_131()) return true; @@ -4992,27 +4996,27 @@ void parseInline(); return false; } - inline bool jj_3_21() + inline bool jj_3R_522() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_75()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(79)) jj_scanpos = xsp; - if (jj_scan_token(ASSERT_T)) return true; + if (jj_scan_token(84)) { + jj_scanpos = xsp; + if (jj_scan_token(52)) return true; + } return false; } - inline bool jj_3R_522() + inline bool jj_3_21() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_scan_token(84)) { - jj_scanpos = xsp; - if (jj_scan_token(52)) return true; - } + if (jj_3R_75()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(79)) jj_scanpos = xsp; + if (jj_scan_token(ASSERT_T)) return true; return false; } @@ -5139,9 +5143,9 @@ void parseInline(); xsp = jj_scanpos; if (jj_3R_521()) jj_scanpos = xsp; xsp = jj_scanpos; - if (jj_3_94()) jj_scanpos = xsp; - xsp = jj_scanpos; if (jj_3_95()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_96()) jj_scanpos = xsp; if (jj_3R_423()) return true; return false; } @@ -5193,13 +5197,6 @@ void parseInline(); return false; } - inline bool jj_3_17() - { - if (jj_done) return true; - if (jj_3R_71()) return true; - return false; - } - inline bool jj_3R_631() { if (jj_done) return true; @@ -5212,6 +5209,13 @@ void parseInline(); return false; } + inline bool jj_3_17() + { + if (jj_done) return true; + if (jj_3R_71()) return true; + return false; + } + inline bool jj_3R_629() { if (jj_done) return true; @@ -5237,7 +5241,7 @@ void parseInline(); return false; } - inline bool jj_3_92() + inline bool jj_3_93() { if (jj_done) return true; if (jj_3R_64()) return true; @@ -5289,25 +5293,25 @@ void parseInline(); return false; } - inline bool jj_3_15() + inline bool jj_3_94() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_3R_65()) return true; return false; } - inline bool jj_3_93() + inline bool jj_3R_672() { if (jj_done) return true; - if (jj_3R_65()) return true; + if (jj_3R_378()) return true; return false; } - inline bool jj_3R_672() + inline bool jj_3_15() { if (jj_done) return true; - if (jj_3R_378()) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; return false; } @@ -5338,25 +5342,25 @@ void parseInline(); return false; } - inline bool jj_3_14() + inline bool jj_3R_669() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_3R_375()) return true; return false; } - inline bool jj_3_13() + inline bool jj_3_14() { if (jj_done) return true; - if (jj_3R_70()) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; return false; } - inline bool jj_3R_669() + inline bool jj_3_13() { if (jj_done) return true; - if (jj_3R_375()) return true; + if (jj_3R_70()) return true; return false; } @@ -5381,19 +5385,6 @@ void parseInline(); return false; } - inline bool jj_3R_87() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_14()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(79)) jj_scanpos = xsp; - if (jj_3R_187()) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - inline bool jj_3R_666() { if (jj_done) return true; @@ -5408,17 +5399,23 @@ void parseInline(); return false; } - inline bool jj_3R_678() + inline bool jj_3R_87() { if (jj_done) return true; - if (jj_3R_690()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_14()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(79)) jj_scanpos = xsp; + if (jj_3R_187()) return true; + if (jj_scan_token(SEMI_T)) return true; return false; } - inline bool jj_3R_468() + inline bool jj_3R_678() { if (jj_done) return true; - if (jj_3R_69()) return true; + if (jj_3R_690()) return true; return false; } @@ -5436,6 +5433,13 @@ void parseInline(); return false; } + inline bool jj_3R_663() + { + if (jj_done) return true; + if (jj_3R_92()) return true; + return false; + } + inline bool jj_3R_654() { if (jj_done) return true; @@ -5448,13 +5452,6 @@ void parseInline(); return false; } - inline bool jj_3R_663() - { - if (jj_done) return true; - if (jj_3R_92()) return true; - return false; - } - inline bool jj_3R_652() { if (jj_done) return true; @@ -5482,7 +5479,7 @@ void parseInline(); jj_scanpos = xsp; if (jj_3R_673()) { jj_scanpos = xsp; - if (jj_3_93()) { + if (jj_3_94()) { jj_scanpos = xsp; if (jj_3R_674()) return true; } @@ -5522,16 +5519,14 @@ void parseInline(); return false; } - inline bool jj_3R_177() + inline bool jj_3R_468() { if (jj_done) return true; - if (jj_3R_330()) return true; - if (jj_scan_token(COLON_T)) return true; - if (jj_3R_59()) return true; + if (jj_3R_69()) return true; return false; } - inline bool jj_3_91() + inline bool jj_3_92() { if (jj_done) return true; if (jj_3R_130()) return true; @@ -5557,6 +5552,15 @@ void parseInline(); return false; } + inline bool jj_3R_177() + { + if (jj_done) return true; + if (jj_3R_330()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_59()) return true; + return false; + } + inline bool jj_3R_200() { if (jj_done) return true; @@ -5591,7 +5595,7 @@ void parseInline(); return false; } - inline bool jj_3_90() + inline bool jj_3_91() { if (jj_done) return true; if (jj_3R_128()) return true; @@ -5614,32 +5618,32 @@ void parseInline(); return false; } - inline bool jj_3R_467() + inline bool jj_3R_459() { if (jj_done) return true; - if (jj_3R_537()) return true; + if (jj_3R_532()) return true; return false; } - inline bool jj_3R_459() + inline bool jj_3R_162() { if (jj_done) return true; - if (jj_3R_532()) return true; + if (jj_3R_128()) return true; + if (jj_3R_129()) return true; return false; } - inline bool jj_3R_466() + inline bool jj_3R_467() { if (jj_done) return true; - if (jj_3R_66()) return true; + if (jj_3R_537()) return true; return false; } - inline bool jj_3R_162() + inline bool jj_3R_466() { if (jj_done) return true; - if (jj_3R_128()) return true; - if (jj_3R_129()) return true; + if (jj_3R_66()) return true; return false; } @@ -5686,6 +5690,23 @@ void parseInline(); return false; } + inline bool jj_3R_524() + { + if (jj_done) return true; + if (jj_scan_token(IS_T)) return true; + if (jj_3R_570()) return true; + if (jj_scan_token(BEGIN_T)) return true; + if (jj_3R_571()) return true; + if (jj_scan_token(END_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_572()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_573()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_80() { if (jj_done) return true; @@ -5702,20 +5723,10 @@ void parseInline(); return false; } - inline bool jj_3R_524() + inline bool jj_3R_355() { if (jj_done) return true; - if (jj_scan_token(IS_T)) return true; - if (jj_3R_570()) return true; - if (jj_scan_token(BEGIN_T)) return true; - if (jj_3R_571()) return true; - if (jj_scan_token(END_T)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_572()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_573()) jj_scanpos = xsp; - if (jj_scan_token(SEMI_T)) return true; + if (jj_scan_token(STRINGLITERAL)) return true; return false; } @@ -5759,10 +5770,11 @@ void parseInline(); return false; } - inline bool jj_3R_355() + inline bool jj_3R_434() { if (jj_done) return true; - if (jj_scan_token(STRINGLITERAL)) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_59()) return true; return false; } @@ -5780,11 +5792,24 @@ void parseInline(); return false; } - inline bool jj_3R_434() + inline bool jj_3R_161() { if (jj_done) return true; - if (jj_scan_token(COMMA_T)) return true; - if (jj_3R_59()) return true; + if (jj_3R_313()) return true; + return false; + } + + inline bool jj_3R_68() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_161()) jj_scanpos = xsp; + if (jj_3R_129()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3R_162()) { jj_scanpos = xsp; break; } + } return false; } @@ -5820,43 +5845,6 @@ void parseInline(); return false; } - inline bool jj_3R_161() - { - if (jj_done) return true; - if (jj_3R_313()) return true; - return false; - } - - inline bool jj_3R_351() - { - if (jj_done) return true; - if (jj_scan_token(CHARACTER_LITERAL)) return true; - return false; - } - - inline bool jj_3R_68() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_161()) jj_scanpos = xsp; - if (jj_3R_129()) return true; - while (true) { - xsp = jj_scanpos; - if (jj_3R_162()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3R_613() - { - if (jj_done) return true; - if (jj_scan_token(LPAREN_T)) return true; - if (jj_3R_58()) return true; - if (jj_scan_token(RPAREN_T)) return true; - return false; - } - inline bool jj_3R_357() { if (jj_done) return true; @@ -5885,33 +5873,32 @@ void parseInline(); return false; } - inline bool jj_3R_233() + inline bool jj_3R_351() { if (jj_done) return true; - if (jj_scan_token(LBRACKET_T)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_356()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_357()) jj_scanpos = xsp; - if (jj_scan_token(RBRACKET_T)) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; return false; } - inline bool jj_3R_625() + inline bool jj_3R_613() { if (jj_done) return true; - if (jj_scan_token(WHEN_T)) return true; - if (jj_3R_85()) return true; - if (jj_scan_token(ARROW_T)) return true; - if (jj_3R_258()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_58()) return true; + if (jj_scan_token(RPAREN_T)) return true; return false; } - inline bool jj_3R_617() + inline bool jj_3R_233() { if (jj_done) return true; - if (jj_3R_69()) return true; + if (jj_scan_token(LBRACKET_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_356()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_357()) jj_scanpos = xsp; + if (jj_scan_token(RBRACKET_T)) return true; return false; } @@ -5922,13 +5909,6 @@ void parseInline(); return false; } - inline bool jj_3R_626() - { - if (jj_done) return true; - if (jj_3R_625()) return true; - return false; - } - inline bool jj_3R_603() { if (jj_done) return true; @@ -5936,14 +5916,6 @@ void parseInline(); return false; } - inline bool jj_3R_659() - { - if (jj_done) return true; - if (jj_3R_70()) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - inline bool jj_3R_602() { if (jj_done) return true; @@ -5978,6 +5950,30 @@ void parseInline(); return false; } + inline bool jj_3R_625() + { + if (jj_done) return true; + if (jj_scan_token(WHEN_T)) return true; + if (jj_3R_85()) return true; + if (jj_scan_token(ARROW_T)) return true; + if (jj_3R_258()) return true; + return false; + } + + inline bool jj_3R_617() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + return false; + } + + inline bool jj_3R_626() + { + if (jj_done) return true; + if (jj_3R_625()) return true; + return false; + } + inline bool jj_3R_577() { if (jj_done) return true; @@ -5997,6 +5993,30 @@ void parseInline(); return false; } + inline bool jj_3R_659() + { + if (jj_done) return true; + if (jj_3R_70()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + + inline bool jj_3R_373() + { + if (jj_done) return true; + if (jj_scan_token(SIGNAL_T)) return true; + if (jj_3R_196()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_84()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_459()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_460()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_255() { if (jj_done) return true; @@ -6034,19 +6054,10 @@ void parseInline(); return false; } - inline bool jj_3R_373() + inline bool jj_3_90() { if (jj_done) return true; - if (jj_scan_token(SIGNAL_T)) return true; - if (jj_3R_196()) return true; - if (jj_scan_token(COLON_T)) return true; - if (jj_3R_84()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_459()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_460()) jj_scanpos = xsp; - if (jj_scan_token(SEMI_T)) return true; + if (jj_3R_127()) return true; return false; } @@ -6064,21 +6075,6 @@ void parseInline(); inline bool jj_3_89() { if (jj_done) return true; - if (jj_3R_127()) return true; - return false; - } - - inline bool jj_3R_660() - { - if (jj_done) return true; - if (jj_3R_328()) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - - inline bool jj_3_88() - { - if (jj_done) return true; if (jj_3R_126()) return true; return false; } @@ -6090,16 +6086,7 @@ void parseInline(); return false; } - inline bool jj_3R_506() - { - if (jj_done) return true; - if (jj_scan_token(LPAREN_T)) return true; - if (jj_3R_564()) return true; - if (jj_scan_token(RPAREN_T)) return true; - return false; - } - - inline bool jj_3_87() + inline bool jj_3_88() { if (jj_done) return true; if (jj_3R_69()) return true; @@ -6112,7 +6099,7 @@ void parseInline(); if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3_87()) jj_scanpos = xsp; + if (jj_3_88()) jj_scanpos = xsp; if (jj_3R_114()) return true; if (jj_scan_token(LESSTHAN_T)) return true; xsp = jj_scanpos; @@ -6122,36 +6109,14 @@ void parseInline(); return false; } - inline bool jj_3R_559() + inline bool jj_3R_660() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; - if (jj_scan_token(BLOCK_T)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_613()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(56)) jj_scanpos = xsp; - if (jj_3R_614()) return true; - if (jj_3R_615()) return true; - if (jj_scan_token(BEGIN_T)) return true; - if (jj_3R_616()) return true; - if (jj_scan_token(END_T)) return true; - if (jj_scan_token(BLOCK_T)) return true; - xsp = jj_scanpos; - if (jj_3R_617()) jj_scanpos = xsp; + if (jj_3R_328()) return true; if (jj_scan_token(SEMI_T)) return true; return false; } - inline bool jj_3_9() - { - if (jj_done) return true; - if (jj_3R_66()) return true; - return false; - } - inline bool jj_3R_436() { if (jj_done) return true; @@ -6167,13 +6132,12 @@ void parseInline(); return false; } - inline bool jj_3R_418() + inline bool jj_3R_506() { if (jj_done) return true; - if (jj_3R_59()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_506()) jj_scanpos = xsp; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_564()) return true; + if (jj_scan_token(RPAREN_T)) return true; return false; } @@ -6199,41 +6163,50 @@ void parseInline(); return false; } - inline bool jj_3R_648() + inline bool jj_3R_559() { if (jj_done) return true; - if (jj_3R_537()) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_scan_token(BLOCK_T)) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_660()) jj_scanpos = xsp; + if (jj_3R_613()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_scan_token(56)) jj_scanpos = xsp; + if (jj_3R_614()) return true; + if (jj_3R_615()) return true; + if (jj_scan_token(BEGIN_T)) return true; + if (jj_3R_616()) return true; + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(BLOCK_T)) return true; + xsp = jj_scanpos; + if (jj_3R_617()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_T)) return true; return false; } - inline bool jj_3R_401() + inline bool jj_3_9() { if (jj_done) return true; - if (jj_scan_token(MINUS_T)) return true; + if (jj_3R_66()) return true; return false; } - inline bool jj_3R_647() + inline bool jj_3R_401() { if (jj_done) return true; - if (jj_3R_66()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_659()) jj_scanpos = xsp; + if (jj_scan_token(MINUS_T)) return true; return false; } - inline bool jj_3R_614() + inline bool jj_3R_418() { if (jj_done) return true; + if (jj_3R_59()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_647()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_648()) jj_scanpos = xsp; + if (jj_3R_506()) jj_scanpos = xsp; return false; } @@ -6256,49 +6229,51 @@ void parseInline(); return false; } - inline bool jj_3R_649() + inline bool jj_3R_551() { if (jj_done) return true; - if (jj_3R_140()) return true; + if (jj_scan_token(ROR_T)) return true; return false; } - inline bool jj_3R_615() + inline bool jj_3R_550() { if (jj_done) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_649()) { jj_scanpos = xsp; break; } - } + if (jj_scan_token(ROL_T)) return true; return false; } - inline bool jj_3R_551() + inline bool jj_3R_648() { if (jj_done) return true; - if (jj_scan_token(ROR_T)) return true; + if (jj_3R_537()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_660()) jj_scanpos = xsp; return false; } - inline bool jj_3R_550() + inline bool jj_3R_549() { if (jj_done) return true; - if (jj_scan_token(ROL_T)) return true; + if (jj_scan_token(SRA_T)) return true; return false; } - inline bool jj_3R_549() + inline bool jj_3R_548() { if (jj_done) return true; - if (jj_scan_token(SRA_T)) return true; + if (jj_scan_token(SLA_T)) return true; return false; } - inline bool jj_3R_548() + inline bool jj_3R_647() { if (jj_done) return true; - if (jj_scan_token(SLA_T)) return true; + if (jj_3R_66()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_659()) jj_scanpos = xsp; return false; } @@ -6309,17 +6284,39 @@ void parseInline(); return false; } - inline bool jj_3R_546() + inline bool jj_3R_614() { if (jj_done) return true; - if (jj_scan_token(SLL_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_647()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_648()) jj_scanpos = xsp; return false; } - inline bool jj_3R_299() + inline bool jj_3R_649() { if (jj_done) return true; - if (jj_3R_382()) return true; + if (jj_3R_140()) return true; + return false; + } + + inline bool jj_3R_615() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_649()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_546() + { + if (jj_done) return true; + if (jj_scan_token(SLL_T)) return true; return false; } @@ -6347,6 +6344,30 @@ void parseInline(); return false; } + inline bool jj_3R_306() + { + if (jj_done) return true; + if (jj_3R_68()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_386()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_299() + { + if (jj_done) return true; + if (jj_3R_382()) return true; + return false; + } + + inline bool jj_3R_244() + { + if (jj_done) return true; + if (jj_3R_362()) return true; + return false; + } + inline bool jj_3_7() { if (jj_done) return true; @@ -6354,6 +6375,13 @@ void parseInline(); return false; } + inline bool jj_3_87() + { + if (jj_done) return true; + if (jj_3R_125()) return true; + return false; + } + inline bool jj_3_8() { if (jj_done) return true; @@ -6375,20 +6403,17 @@ void parseInline(); return false; } - inline bool jj_3R_306() + inline bool jj_3R_296() { if (jj_done) return true; - if (jj_3R_68()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_386()) jj_scanpos = xsp; + if (jj_3R_379()) return true; return false; } - inline bool jj_3R_296() + inline bool jj_3_86() { if (jj_done) return true; - if (jj_3R_379()) return true; + if (jj_3R_124()) return true; return false; } @@ -6399,17 +6424,18 @@ void parseInline(); return false; } - inline bool jj_3R_244() + inline bool jj_3_85() { if (jj_done) return true; - if (jj_3R_362()) return true; + if (jj_3R_123()) return true; return false; } - inline bool jj_3_86() + inline bool jj_3R_118() { if (jj_done) return true; - if (jj_3R_125()) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; return false; } @@ -6434,17 +6460,28 @@ void parseInline(); return false; } - inline bool jj_3R_291() + inline bool jj_3_80() { if (jj_done) return true; - if (jj_3R_375()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_118()) jj_scanpos = xsp; + if (jj_3R_114()) return true; + if (jj_scan_token(VARASSIGN_T)) return true; return false; } - inline bool jj_3_85() + inline bool jj_3_84() { if (jj_done) return true; - if (jj_3R_124()) return true; + if (jj_3R_122()) return true; + return false; + } + + inline bool jj_3R_291() + { + if (jj_done) return true; + if (jj_3R_375()) return true; return false; } @@ -6455,24 +6492,24 @@ void parseInline(); return false; } - inline bool jj_3R_289() + inline bool jj_3_83() { if (jj_done) return true; - if (jj_3R_373()) return true; + if (jj_3R_121()) return true; return false; } - inline bool jj_3R_288() + inline bool jj_3R_289() { if (jj_done) return true; - if (jj_3R_372()) return true; + if (jj_3R_373()) return true; return false; } - inline bool jj_3_84() + inline bool jj_3R_288() { if (jj_done) return true; - if (jj_3R_123()) return true; + if (jj_3R_372()) return true; return false; } @@ -6483,11 +6520,10 @@ void parseInline(); return false; } - inline bool jj_3R_118() + inline bool jj_3_82() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_3R_120()) return true; return false; } @@ -6512,24 +6548,6 @@ void parseInline(); return false; } - inline bool jj_3_79() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_118()) jj_scanpos = xsp; - if (jj_3R_114()) return true; - if (jj_scan_token(VARASSIGN_T)) return true; - return false; - } - - inline bool jj_3_83() - { - if (jj_done) return true; - if (jj_3R_122()) return true; - return false; - } - inline bool jj_3R_140() { if (jj_done) return true; @@ -6591,43 +6609,9 @@ void parseInline(); return false; } - inline bool jj_3_82() - { - if (jj_done) return true; - if (jj_3R_121()) return true; - return false; - } - inline bool jj_3_81() { if (jj_done) return true; - if (jj_3R_120()) return true; - return false; - } - - inline bool jj_3R_332() - { - if (jj_done) return true; - if (jj_scan_token(FOR_T)) return true; - if (jj_3R_418()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_419()) { jj_scanpos = xsp; break; } - } - while (true) { - xsp = jj_scanpos; - if (jj_3R_420()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(END_T)) return true; - if (jj_scan_token(FOR_T)) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - - inline bool jj_3_80() - { - if (jj_done) return true; if (jj_3R_119()) return true; return false; } @@ -6647,7 +6631,7 @@ void parseInline(); return false; } - inline bool jj_3_75() + inline bool jj_3_76() { if (jj_done) return true; Token * xsp; @@ -6658,37 +6642,41 @@ void parseInline(); return false; } - inline bool jj_3_78() - { - if (jj_done) return true; - if (jj_3R_117()) return true; - return false; - } - - inline bool jj_3_77() + inline bool jj_3R_332() { if (jj_done) return true; - if (jj_3R_116()) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_3R_418()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_419()) { jj_scanpos = xsp; break; } + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_420()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(END_T)) return true; + if (jj_scan_token(FOR_T)) return true; + if (jj_scan_token(SEMI_T)) return true; return false; } - inline bool jj_3R_94() + inline bool jj_3_79() { if (jj_done) return true; - if (jj_scan_token(BIT_STRING_LITERAL)) return true; + if (jj_3R_117()) return true; return false; } - inline bool jj_3R_239() + inline bool jj_3_78() { if (jj_done) return true; - if (jj_scan_token(LPAREN_T)) return true; - if (jj_3R_58()) return true; - if (jj_scan_token(RPAREN_T)) return true; + if (jj_3R_116()) return true; return false; } - inline bool jj_3_76() + inline bool jj_3_77() { if (jj_done) return true; if (jj_3R_115()) return true; @@ -6705,13 +6693,6 @@ void parseInline(); return false; } - inline bool jj_3R_417() - { - if (jj_done) return true; - if (jj_3R_328()) return true; - return false; - } - inline bool jj_3R_112() { if (jj_done) return true; @@ -6719,15 +6700,13 @@ void parseInline(); xsp = jj_scanpos; if (jj_3R_242()) { jj_scanpos = xsp; - if (jj_3_76()) { - jj_scanpos = xsp; if (jj_3_77()) { jj_scanpos = xsp; if (jj_3_78()) { jj_scanpos = xsp; - if (jj_3R_243()) { + if (jj_3_79()) { jj_scanpos = xsp; - if (jj_3_80()) { + if (jj_3R_243()) { jj_scanpos = xsp; if (jj_3_81()) { jj_scanpos = xsp; @@ -6741,6 +6720,8 @@ void parseInline(); jj_scanpos = xsp; if (jj_3_86()) { jj_scanpos = xsp; + if (jj_3_87()) { + jj_scanpos = xsp; if (jj_3R_244()) return true; } } @@ -6764,18 +6745,19 @@ void parseInline(); return false; } - inline bool jj_3R_416() + inline bool jj_3R_94() { if (jj_done) return true; - if (jj_3R_70()) return true; + if (jj_scan_token(BIT_STRING_LITERAL)) return true; return false; } - inline bool jj_3R_415() + inline bool jj_3R_239() { if (jj_done) return true; - if (jj_scan_token(USE_T)) return true; - if (jj_3R_505()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_58()) return true; + if (jj_scan_token(RPAREN_T)) return true; return false; } @@ -6787,23 +6769,24 @@ void parseInline(); return false; } - inline bool jj_3R_331() + inline bool jj_3_75() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_415()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_416()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_417()) jj_scanpos = xsp; + if (jj_3R_112()) return true; return false; } - inline bool jj_3_74() + inline bool jj_3R_417() { if (jj_done) return true; - if (jj_3R_112()) return true; + if (jj_3R_328()) return true; + return false; + } + + inline bool jj_3R_416() + { + if (jj_done) return true; + if (jj_3R_70()) return true; return false; } @@ -6813,11 +6796,32 @@ void parseInline(); Token * xsp; while (true) { xsp = jj_scanpos; - if (jj_3_74()) { jj_scanpos = xsp; break; } + if (jj_3_75()) { jj_scanpos = xsp; break; } } return false; } + inline bool jj_3R_415() + { + if (jj_done) return true; + if (jj_scan_token(USE_T)) return true; + if (jj_3R_505()) return true; + return false; + } + + inline bool jj_3R_331() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_415()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_416()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_417()) jj_scanpos = xsp; + return false; + } + inline bool jj_3R_421() { if (jj_done) return true; @@ -6845,7 +6849,7 @@ void parseInline(); return false; } - inline bool jj_3_73() + inline bool jj_3_74() { if (jj_done) return true; if (jj_3R_111()) return true; @@ -6880,14 +6884,6 @@ void parseInline(); return false; } - inline bool jj_3R_338() - { - if (jj_done) return true; - if (jj_scan_token(SEVERITY_T)) return true; - if (jj_3R_58()) return true; - return false; - } - inline bool jj_3R_688() { if (jj_done) return true; @@ -6904,6 +6900,24 @@ void parseInline(); return false; } + inline bool jj_3R_338() + { + if (jj_done) return true; + if (jj_scan_token(SEVERITY_T)) return true; + if (jj_3R_58()) return true; + return false; + } + + inline bool jj_3R_359() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(EQU_T)) return true; + if (jj_3R_102()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_378() { if (jj_done) return true; @@ -6937,49 +6951,20 @@ void parseInline(); return false; } - inline bool jj_3R_359() - { - if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(EQU_T)) return true; - if (jj_3R_102()) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - - inline bool jj_3R_354() - { - if (jj_done) return true; - if (jj_scan_token(RANGE_T)) return true; - return false; - } - - inline bool jj_3R_219() + inline bool jj_3R_676() { if (jj_done) return true; + if (jj_3R_81()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_353()) { - jj_scanpos = xsp; - if (jj_3R_354()) return true; - } - return false; - } - - inline bool jj_3R_353() - { - if (jj_done) return true; - if (jj_3R_69()) return true; + if (jj_3R_688()) jj_scanpos = xsp; return false; } - inline bool jj_3R_676() + inline bool jj_3R_354() { if (jj_done) return true; - if (jj_3R_81()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_688()) jj_scanpos = xsp; + if (jj_scan_token(RANGE_T)) return true; return false; } @@ -7002,30 +6987,22 @@ void parseInline(); return false; } - inline bool jj_3_6() + inline bool jj_3R_219() { if (jj_done) return true; - if (jj_3R_63()) return true; - if (jj_scan_token(ARROW_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_353()) { + jj_scanpos = xsp; + if (jj_3R_354()) return true; + } return false; } - inline bool jj_3R_64() + inline bool jj_3R_353() { if (jj_done) return true; - if (jj_scan_token(ATTRIBUTE_T)) return true; if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; - if (jj_3R_157()) return true; - if (jj_scan_token(SEMI_T)) return true; - return false; - } - - inline bool jj_3R_337() - { - if (jj_done) return true; - if (jj_scan_token(REPORT_T)) return true; - if (jj_3R_58()) return true; return false; } @@ -7058,56 +7035,57 @@ void parseInline(); return false; } - inline bool jj_3R_165() + inline bool jj_3_6() { if (jj_done) return true; - if (jj_3R_314()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_315()) { jj_scanpos = xsp; break; } - } + if (jj_3R_63()) return true; + if (jj_scan_token(ARROW_T)) return true; return false; } - inline bool jj_3R_307() + inline bool jj_3R_64() { if (jj_done) return true; - if (jj_3R_387()) return true; - if (jj_3R_306()) return true; + if (jj_scan_token(ATTRIBUTE_T)) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; + if (jj_3R_157()) return true; + if (jj_scan_token(SEMI_T)) return true; return false; } - inline bool jj_3R_402() + inline bool jj_3R_337() { if (jj_done) return true; - if (jj_3R_63()) return true; - if (jj_scan_token(ARROW_T)) return true; + if (jj_scan_token(REPORT_T)) return true; + if (jj_3R_58()) return true; return false; } - inline bool jj_3R_314() + inline bool jj_3R_307() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_402()) jj_scanpos = xsp; - if (jj_3R_403()) return true; + if (jj_3R_387()) return true; + if (jj_3R_306()) return true; return false; } - inline bool jj_3R_248() + inline bool jj_3R_165() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_3R_314()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_315()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_247() + inline bool jj_3R_248() { if (jj_done) return true; - if (jj_3R_139()) return true; + if (jj_3R_69()) return true; if (jj_scan_token(COLON_T)) return true; return false; } @@ -7133,14 +7111,21 @@ void parseInline(); return false; } - inline bool jj_3R_115() + inline bool jj_3R_402() + { + if (jj_done) return true; + if (jj_3R_63()) return true; + if (jj_scan_token(ARROW_T)) return true; + return false; + } + + inline bool jj_3R_314() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_247()) jj_scanpos = xsp; - if (jj_3R_187()) return true; - if (jj_scan_token(SEMI_T)) return true; + if (jj_3R_402()) jj_scanpos = xsp; + if (jj_3R_403()) return true; return false; } @@ -7165,6 +7150,14 @@ void parseInline(); return false; } + inline bool jj_3R_247() + { + if (jj_done) return true; + if (jj_3R_139()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + inline bool jj_3R_479() { if (jj_done) return true; @@ -7179,6 +7172,17 @@ void parseInline(); return false; } + inline bool jj_3R_115() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_247()) jj_scanpos = xsp; + if (jj_3R_187()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_387() { if (jj_done) return true; @@ -7210,47 +7214,40 @@ void parseInline(); return false; } - inline bool jj_3R_187() + inline bool jj_3R_145() { if (jj_done) return true; - if (jj_scan_token(ASSERT_T)) return true; - if (jj_3R_79()) return true; + if (jj_3R_306()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_337()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_338()) jj_scanpos = xsp; + if (jj_3R_307()) jj_scanpos = xsp; return false; } - inline bool jj_3_5() + inline bool jj_3R_699() { if (jj_done) return true; - if (jj_3R_62()) return true; + if (jj_3R_704()) return true; return false; } - inline bool jj_3R_145() + inline bool jj_3R_187() { if (jj_done) return true; - if (jj_3R_306()) return true; + if (jj_scan_token(ASSERT_T)) return true; + if (jj_3R_79()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_307()) jj_scanpos = xsp; - return false; - } - - inline bool jj_3R_699() - { - if (jj_done) return true; - if (jj_3R_704()) return true; + if (jj_3R_337()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_338()) jj_scanpos = xsp; return false; } - inline bool jj_3R_698() + inline bool jj_3_5() { if (jj_done) return true; - if (jj_3R_703()) return true; + if (jj_3R_62()) return true; return false; } @@ -7271,38 +7268,45 @@ void parseInline(); return false; } - inline bool jj_3R_697() + inline bool jj_3R_698() { if (jj_done) return true; - if (jj_3R_62()) return true; + if (jj_3R_703()) return true; return false; } - inline bool jj_3R_689() + inline bool jj_3_72() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_697()) { - jj_scanpos = xsp; - if (jj_3R_698()) return true; - } + if (jj_3R_68()) return true; + if (jj_3R_109()) return true; + if (jj_3R_68()) return true; return false; } - inline bool jj_3_71() + inline bool jj_3_73() { if (jj_done) return true; - if (jj_3R_68()) return true; - if (jj_3R_109()) return true; - if (jj_3R_68()) return true; + if (jj_3R_110()) return true; return false; } - inline bool jj_3_72() + inline bool jj_3R_697() { if (jj_done) return true; - if (jj_3R_110()) return true; + if (jj_3R_62()) return true; + return false; + } + + inline bool jj_3R_689() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_697()) { + jj_scanpos = xsp; + if (jj_3R_698()) return true; + } return false; } @@ -7314,7 +7318,7 @@ void parseInline(); return false; } - inline bool jj_3_70() + inline bool jj_3_71() { if (jj_done) return true; if (jj_3R_108()) return true; @@ -7349,13 +7353,6 @@ void parseInline(); return false; } - inline bool jj_3R_465() - { - if (jj_done) return true; - if (jj_3R_233()) return true; - return false; - } - inline bool jj_3R_227() { if (jj_done) return true; @@ -7372,6 +7369,13 @@ void parseInline(); return false; } + inline bool jj_3R_465() + { + if (jj_done) return true; + if (jj_3R_233()) return true; + return false; + } + inline bool jj_3R_61() { if (jj_done) return true; @@ -7386,14 +7390,6 @@ void parseInline(); return false; } - inline bool jj_3R_236() - { - if (jj_done) return true; - if (jj_scan_token(COMMA_T)) return true; - if (jj_3R_235()) return true; - return false; - } - inline bool jj_3R_341() { if (jj_done) return true; @@ -7419,11 +7415,11 @@ void parseInline(); return false; } - inline bool jj_3R_575() + inline bool jj_3R_236() { if (jj_done) return true; - if (jj_scan_token(NEW_T)) return true; - if (jj_3R_84()) return true; + if (jj_scan_token(COMMA_T)) return true; + if (jj_3R_235()) return true; return false; } @@ -7434,6 +7430,14 @@ void parseInline(); return false; } + inline bool jj_3R_575() + { + if (jj_done) return true; + if (jj_scan_token(NEW_T)) return true; + if (jj_3R_84()) return true; + return false; + } + inline bool jj_3R_530() { if (jj_done) return true; @@ -7490,6 +7494,20 @@ void parseInline(); return false; } + inline bool jj_3R_189() + { + if (jj_done) return true; + if (jj_scan_token(LPAREN_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_scan_token(15)) { + jj_scanpos = xsp; + if (jj_3R_339()) return true; + } + if (jj_scan_token(RPAREN_T)) return true; + return false; + } + inline bool jj_3R_464() { if (jj_done) return true; @@ -7514,20 +7532,6 @@ void parseInline(); return false; } - inline bool jj_3R_189() - { - if (jj_done) return true; - if (jj_scan_token(LPAREN_T)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_scan_token(15)) { - jj_scanpos = xsp; - if (jj_3R_339()) return true; - } - if (jj_scan_token(RPAREN_T)) return true; - return false; - } - inline bool jj_3R_108() { if (jj_done) return true; @@ -7542,54 +7546,25 @@ void parseInline(); return false; } - inline bool jj_3R_272() - { - if (jj_done) return true; - if (jj_scan_token(MINUS_T)) return true; - return false; - } - - inline bool jj_3R_273() - { - if (jj_done) return true; - if (jj_scan_token(AMPERSAND_T)) return true; - return false; - } - - inline bool jj_3R_128() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_271()) { - jj_scanpos = xsp; - if (jj_3R_272()) { - jj_scanpos = xsp; - if (jj_3R_273()) return true; - } - } - return false; - } - - inline bool jj_3R_271() + inline bool jj_3R_188() { if (jj_done) return true; - if (jj_scan_token(PLUS_T)) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; return false; } - inline bool jj_3R_188() + inline bool jj_3R_272() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_scan_token(MINUS_T)) return true; return false; } - inline bool jj_3_3() + inline bool jj_3R_273() { if (jj_done) return true; - if (jj_3R_60()) return true; + if (jj_scan_token(AMPERSAND_T)) return true; return false; } @@ -7626,20 +7601,25 @@ void parseInline(); return false; } - inline bool jj_3R_491() + inline bool jj_3R_128() { if (jj_done) return true; - if (jj_scan_token(BOX_T)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_271()) { + jj_scanpos = xsp; + if (jj_3R_272()) { + jj_scanpos = xsp; + if (jj_3R_273()) return true; + } + } return false; } - inline bool jj_3R_492() + inline bool jj_3R_271() { if (jj_done) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(LPAREN_T)) return true; - if (jj_3R_60()) return true; - if (jj_scan_token(RPAREN_T)) return true; + if (jj_scan_token(PLUS_T)) return true; return false; } @@ -7654,43 +7634,38 @@ void parseInline(); return false; } - inline bool jj_3R_518() + inline bool jj_3_3() { if (jj_done) return true; - if (jj_3R_382()) return true; + if (jj_3R_60()) return true; return false; } - inline bool jj_3R_403() + inline bool jj_3R_518() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_490()) { - jj_scanpos = xsp; - if (jj_3R_491()) { - jj_scanpos = xsp; - if (jj_3R_492()) return true; - } - } + if (jj_3R_382()) return true; return false; } - inline bool jj_3R_490() + inline bool jj_3R_491() { if (jj_done) return true; - if (jj_3R_60()) return true; + if (jj_scan_token(BOX_T)) return true; return false; } - inline bool jj_3_2() + inline bool jj_3R_492() { if (jj_done) return true; if (jj_3R_59()) return true; + if (jj_scan_token(LPAREN_T)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN_T)) return true; return false; } - inline bool jj_3_69() + inline bool jj_3_70() { if (jj_done) return true; if (jj_3R_65()) return true; @@ -7704,28 +7679,36 @@ void parseInline(); return false; } - inline bool jj_3R_225() + inline bool jj_3R_516() { if (jj_done) return true; - if (jj_3R_165()) return true; + if (jj_3R_378()) return true; return false; } - inline bool jj_3R_516() + inline bool jj_3R_403() { if (jj_done) return true; - if (jj_3R_378()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_490()) { + jj_scanpos = xsp; + if (jj_3R_491()) { + jj_scanpos = xsp; + if (jj_3R_492()) return true; + } + } return false; } - inline bool jj_3_1() + inline bool jj_3R_490() { if (jj_done) return true; - if (jj_3R_58()) return true; + if (jj_3R_60()) return true; return false; } - inline bool jj_3_68() + inline bool jj_3_69() { if (jj_done) return true; if (jj_3R_64()) return true; @@ -7739,6 +7722,13 @@ void parseInline(); return false; } + inline bool jj_3_2() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + inline bool jj_3R_514() { if (jj_done) return true; @@ -7753,17 +7743,17 @@ void parseInline(); return false; } - inline bool jj_3R_512() + inline bool jj_3R_225() { if (jj_done) return true; - if (jj_3R_372()) return true; + if (jj_3R_165()) return true; return false; } - inline bool jj_3R_153() + inline bool jj_3R_512() { if (jj_done) return true; - if (jj_3R_59()) return true; + if (jj_3R_372()) return true; return false; } @@ -7781,7 +7771,7 @@ void parseInline(); return false; } - inline bool jj_3R_152() + inline bool jj_3_1() { if (jj_done) return true; if (jj_3R_58()) return true; @@ -7807,13 +7797,13 @@ void parseInline(); jj_scanpos = xsp; if (jj_3R_515()) { jj_scanpos = xsp; - if (jj_3_68()) { + if (jj_3_69()) { jj_scanpos = xsp; if (jj_3R_516()) { jj_scanpos = xsp; if (jj_3R_517()) { jj_scanpos = xsp; - if (jj_3_69()) { + if (jj_3_70()) { jj_scanpos = xsp; if (jj_3R_518()) return true; } @@ -7846,6 +7836,39 @@ void parseInline(); return false; } + inline bool jj_3R_153() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_152() + { + if (jj_done) return true; + if (jj_3R_58()) return true; + return false; + } + + inline bool jj_3_68() + { + if (jj_done) return true; + if (jj_3R_69()) return true; + if (jj_scan_token(COLON_T)) return true; + return false; + } + + inline bool jj_3R_119() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_68()) jj_scanpos = xsp; + if (jj_3R_176()) return true; + if (jj_scan_token(SEMI_T)) return true; + return false; + } + inline bool jj_3R_151() { if (jj_done) return true; @@ -7876,22 +7899,20 @@ void parseInline(); return false; } - inline bool jj_3_67() + inline bool jj_3R_176() { if (jj_done) return true; - if (jj_3R_69()) return true; - if (jj_scan_token(COLON_T)) return true; + if (jj_3R_59()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_329()) jj_scanpos = xsp; return false; } - inline bool jj_3R_119() + inline bool jj_3_66() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_67()) jj_scanpos = xsp; - if (jj_3R_176()) return true; - if (jj_scan_token(SEMI_T)) return true; + if (jj_3R_86()) return true; return false; } @@ -7902,6 +7923,13 @@ void parseInline(); return false; } + inline bool jj_3R_204() + { + if (jj_done) return true; + if (jj_3R_350()) return true; + return false; + } + inline bool jj_3R_223() { if (jj_done) return true; @@ -7931,31 +7959,7 @@ void parseInline(); return false; } - inline bool jj_3R_176() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_329()) jj_scanpos = xsp; - return false; - } - - inline bool jj_3_65() - { - if (jj_done) return true; - if (jj_3R_86()) return true; - return false; - } - - inline bool jj_3R_204() - { - if (jj_done) return true; - if (jj_3R_350()) return true; - return false; - } - - inline bool jj_3_66() + inline bool jj_3_67() { if (jj_done) return true; if (jj_3R_107()) return true; @@ -7994,7 +7998,7 @@ void parseInline(); jj_scanpos = xsp; if (jj_3R_203()) { jj_scanpos = xsp; - if (jj_3_66()) { + if (jj_3_67()) { jj_scanpos = xsp; if (jj_3R_204()) return true; } @@ -8004,14 +8008,14 @@ void parseInline(); return false; } - inline bool jj_3_64() + inline bool jj_3_65() { if (jj_done) return true; if (jj_3R_59()) return true; return false; } - inline bool jj_3_63() + inline bool jj_3_64() { if (jj_done) return true; if (jj_3R_106()) return true; @@ -8025,7 +8029,7 @@ void parseInline(); return false; } - inline bool jj_3_62() + inline bool jj_3_63() { if (jj_done) return true; if (jj_3R_105()) return true; @@ -8039,7 +8043,7 @@ void parseInline(); return false; } - inline bool jj_3_61() + inline bool jj_3_62() { if (jj_done) return true; if (jj_3R_61()) return true; @@ -8053,7 +8057,7 @@ void parseInline(); return false; } - inline bool jj_3_60() + inline bool jj_3_61() { if (jj_done) return true; if (jj_scan_token(LPAREN_T)) return true; @@ -8069,7 +8073,7 @@ void parseInline(); return false; } - inline bool jj_3_59() + inline bool jj_3_60() { if (jj_done) return true; if (jj_3R_104()) return true; @@ -8197,7 +8201,7 @@ void parseInline(); return false; } - inline bool jj_3_58() + inline bool jj_3_59() { if (jj_done) return true; if (jj_3R_103()) return true; @@ -8230,21 +8234,21 @@ void parseInline(); return false; } - inline bool jj_3_57() + inline bool jj_3_58() { if (jj_done) return true; if (jj_3R_86()) return true; return false; } - inline bool jj_3_55() + inline bool jj_3_56() { if (jj_done) return true; if (jj_3R_64()) return true; return false; } - inline bool jj_3_56() + inline bool jj_3_57() { if (jj_done) return true; if (jj_3R_65()) return true; @@ -8259,7 +8263,7 @@ void parseInline(); return false; } - inline bool jj_3_54() + inline bool jj_3_55() { if (jj_done) return true; if (jj_3R_65()) return true; @@ -8320,7 +8324,7 @@ void parseInline(); return false; } - inline bool jj_3_53() + inline bool jj_3_54() { if (jj_done) return true; if (jj_3R_102()) return true; @@ -8441,7 +8445,7 @@ void parseInline(); return false; } - inline bool jj_3_52() + inline bool jj_3_53() { if (jj_done) return true; if (jj_scan_token(LBRACKET_T)) return true; @@ -8487,7 +8491,7 @@ void parseInline(); return false; } - inline bool jj_3_51() + inline bool jj_3_52() { if (jj_done) return true; if (jj_scan_token(LPAREN_T)) return true; @@ -8514,14 +8518,14 @@ void parseInline(); return false; } - inline bool jj_3_47() + inline bool jj_3_48() { if (jj_done) return true; if (jj_3R_98()) return true; return false; } - inline bool jj_3_50() + inline bool jj_3_51() { if (jj_done) return true; if (jj_scan_token(LPAREN_T)) return true; @@ -8530,7 +8534,7 @@ void parseInline(); return false; } - inline bool jj_3_49() + inline bool jj_3_50() { if (jj_done) return true; if (jj_3R_100()) return true; @@ -8551,7 +8555,7 @@ void parseInline(); return false; } - inline bool jj_3_48() + inline bool jj_3_49() { if (jj_done) return true; if (jj_scan_token(DOT_T)) return true; @@ -8615,7 +8619,7 @@ void parseInline(); return false; } - inline bool jj_3_46() + inline bool jj_3_47() { if (jj_done) return true; if (jj_3R_97()) return true; @@ -8814,14 +8818,14 @@ void parseInline(); return false; } - inline bool jj_3_45() + inline bool jj_3_46() { if (jj_done) return true; if (jj_3R_96()) return true; return false; } - inline bool jj_3_44() + inline bool jj_3_45() { if (jj_done) return true; if (jj_3R_95()) return true; @@ -8835,7 +8839,7 @@ void parseInline(); return false; } - inline bool jj_3_43() + inline bool jj_3_44() { if (jj_done) return true; if (jj_3R_94()) return true; @@ -8849,6 +8853,20 @@ void parseInline(); return false; } + inline bool jj_3R_230() + { + if (jj_done) return true; + if (jj_3R_96()) return true; + return false; + } + + inline bool jj_3R_229() + { + if (jj_done) return true; + if (jj_3R_95()) return true; + return false; + } + public: TokenManager *token_source; @@ -8859,7 +8877,7 @@ public: Token *jj_nt; private: int jj_ntk; - JJCalls jj_2_rtns[115]; + JJCalls jj_2_rtns[116]; bool jj_rescan; int jj_gc; Token *jj_scanpos, *jj_lastpos; diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj index 7b56cef..fbae037 100644 --- a/vhdlparser/vhdlparser.jj +++ b/vhdlparser/vhdlparser.jj @@ -699,7 +699,13 @@ void component_instantiation_statement() : {QCString s,s1;} s=identifier() <COLON_T> s1=instantiation_unit() { - addCompInst(s.lower().data(),s1.lower().data(),0,getLine()); + QCString s3; + if (s1.contains("|")) { + s3=VhdlDocGen::getIndexWord(s1.data(),0); + s1=VhdlDocGen::getIndexWord(s1.data(),1); + } + + addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine()); } [ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ] [ port_map_aspect() ] <SEMI_T> @@ -1367,10 +1373,10 @@ QCString index_subtype_definition() : {QCString s;} s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";} } -QCString instantiation_unit() : {QCString s,s1,s2;Token *tok=0;} +QCString instantiation_unit() : {QCString s,s1,s2;Token *tok;} { -[ tok=<COMPONENT_T> ] s=identifier() {s1="component"; return s; } -| tok=<ENTITY_T> s2=name() {s=tok->image.c_str()+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;} +[ <COMPONENT_T> ] s=identifier() {s1="component "; return s; } +| <ENTITY_T> [LOOKAHEAD(2)<BASIC_IDENTIFIER> <DOT_T>] s2=name() {s="entity|"+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;} | <CONFIGURATION_T> s=name() {s1="configuration ";return s;} } @@ -1411,6 +1417,7 @@ subprogram_declaration() { return s;} s=object_class() s1=identifier() { if (parse_sec==GEN_SEC) + addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public); return s; } @@ -1501,7 +1508,7 @@ QCString library_clause() : {QCString s;} (<LIBRARY_T> s=identifier_list() <SEMI_T> ) { - if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) + if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) ) { addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public); } @@ -2408,7 +2415,7 @@ QCString unconstraint_array_definition() : {QCString s,s1,s2,s3;} { QStringList ql=QStringList::split(".",ql1[j],FALSE); QCString it=ql[1].utf8(); - if ( parse_sec==0 && Config_getBool("SHOW_INCLUDE_FILES") ) + if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) ) { VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public); } @@ -2848,8 +2855,9 @@ QCString param(): {QCString s,s1;Token *tok=0;} if(tok) { s = tok->image.data(); - param_sec=0; + } + param_sec=0; return s+"("+s1+")"; } diff --git a/vhdlparser/vhdlparser.pro.in b/vhdlparser/vhdlparser.pro.in deleted file mode 100644 index 0232fd5..0000000 --- a/vhdlparser/vhdlparser.pro.in +++ /dev/null @@ -1,33 +0,0 @@ -TEMPLATE = lib -CONFIG = warn_on staticlib $extraopts -HEADERS = CharStream.h \ - ErrorHandler.h \ - JavaCC.h \ - ParseException.h \ - TokenManager.h \ - Token.h \ - vhdlstring.h \ - VhdlParser.h \ - VhdlParserConstants.h \ - VhdlParserTokenManager.h \ - TokenMgrError.h \ - VhdlParserIF.h \ - VhdlParserErrorHandler.hpp - -SOURCES = CharStream.cc \ - ParseException.cc \ - Token.cc \ - TokenMgrError.cc \ - VhdlParser.cc \ - VhdlParserTokenManager.cc \ - VhdlParserIF.cpp - -INCLUDEPATH = . ../src ../qtools generated_src/doxygen -#TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQ T_LITE_UNICODE - -#must enable -fexceptions because we have try catch blocks in VhdlParser.cc -TMAKE_CXXFLAGS +=-w -fexceptions -DQT_LITE_UNICODE -win32:TMAKE_CXXFLAGS += -fexceptions -DQT_NODLL -win32-g++:TMAKE_CXXFLAGS += -fexceptions -D__CYGWIN__ -DALL_STATIC -OBJECTS_DIR = ../objects/vhdlparser -DESTDIR = ../lib |