Commit 6659cd32 authored by maddoxx's avatar maddoxx

first verilog update to dox1812

parent 8e8b3061
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.
......@@ -19,7 +19,7 @@ This also works for MacOSX, but if XCode is installed you can also generate an X
For Windows one can generate a Visual Studio project using
cmake -G "Visual Studio 11 2012" path\to\root\of\doxygen\source\tree
cmake -G "Visual Studio 12 2013" path\to\root\of\doxygen\source\tree
(this is for Visual Studio 12, there are typically also generators for other versions of
Visual Studio or other compiler environments like MinGW)
......@@ -34,6 +34,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
......
......@@ -23,9 +23,10 @@ option(use_sqlite3 "Add support for sqlite3 output [experimental]." OFF)
option(use_libclang "Add support for libclang parsing." OFF)
option(win_static "Link with /MT in stead of /MD on windows" OFF)
option(english_only "Only compile in support for the English language" OFF)
option(force_qt4 "Forces doxywizard to build using Qt4 even if Qt5 is installed" OFF)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
set(SOURCE "${CMAKE_SOURCE_DIR}")
set(TOP "${CMAKE_SOURCE_DIR}")
include(version)
set(sqlite3 "0" CACHE INTERNAL "used in settings.h")
......@@ -40,17 +41,28 @@ endif()
if (${CMAKE_SYSTEM} MATCHES "Darwin")
set(CMAKE_CXX_FLAGS "-Wno-deprecated-register -mmacosx-version-min=10.5 ${CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS "-Wno-deprecated-register -mmacosx-version-min=10.5 ${CMAKE_C_FLAGS}")
find_library(CORESERVICES_LIB CoreServices)
set(EXTRA_LIBS ${CORESERVICES_LIB})
endif()
if (WIN32)
if(NOT ICONV_DIR)
set(ICONV_DIR "${CMAKE_SOURCE_DIR}/winbuild")
endif()
set(CMAKE_REQUIRED_DEFINITIONS "-DLIBICONV_STATIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") # needed for language.cpp on 64bit
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)
......@@ -66,8 +78,6 @@ include_directories(${ICONV_INCLUDE_DIR})
#set(DOXYDOCS ${CMAKE_SOURCE_DIR}/doc CACHE INTERNAL "Path to doxygen docs")
set(DOC_INSTALL_DIR "share/doc/packages/doxygen" CACHE STRING "Relative path where to install the documentation")
set(EXAMPLE_DIR ${CMAKE_SOURCE_DIR}/examples)
set(DOXYDOCS ${PROJECT_BINARY_DIR}/doc)
set(ENV{DOXYGEN_DOCDIR} ${DOXYDOCS})
set(GENERATED_SRC "${CMAKE_BINARY_DIR}/generated_src" CACHE INTERNAL "Stores generated files")
......@@ -136,3 +146,6 @@ add_subdirectory(addon/doxywizard)
enable_testing()
add_subdirectory(testing)
include(cmake/packaging.cmake) # set CPACK_xxxx properties
include(CPack)
......@@ -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
......
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.
......@@ -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
......@@ -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.
DESTDIR =
doxywizard:
cd addon/doxywizard ; $(MAKE)
doxysearch:
cd addon/doxysearch ; $(MAKE)
doxmlparser:
cd addon/doxmlparser/src ; $(MAKE)
cd addon/doxmlparser/test ; $(MAKE)
cd addon/doxmlparser/examples/metrics ; $(MAKE)
doxyapp:
cd addon/doxyapp ; $(MAKE) clean
clean: FORCE
- cd examples ; $(MAKE) clean
- cd doc ; $(MAKE) clean
- cd qtools ; $(MAKE) clean
- cd src ; $(MAKE) clean
- cd libmd5 ; $(MAKE) clean
- cd vhdlparser ; $(MAKE) clean
-cd addon/doxywizard ; $(MAKE) clean
-cd addon/doxysearch ; $(MAKE) clean
-cd addon/doxyapp ; $(MAKE) clean
-cd addon/doxmlparser/src ; $(MAKE) clean
-cd addon/doxmlparser/test ; $(MAKE) clean
-cd addon/doxmlparser/examples/metrics ; $(MAKE) clean
-rm -f bin/doxy*
-rm -f objects/*/*.o
distclean: clean
-cd src ; $(MAKE) distclean
-cd libmd5 ; $(MAKE) distclean
-cd vhdlparser ; $(MAKE) distclean
-cd qtools ; $(MAKE) distclean
-cd addon/doxywizard ; $(MAKE) distclean
-cd addon/doxysearch ; $(MAKE) distclean
-cd addon/doxyapp ; $(MAKE) distclean
-cd addon/doxmlparser/src ; $(MAKE) distclean
-cd addon/doxmlparser/test ; $(MAKE) distclean
-cd addon/doxmlparser/examples/metrics ; $(MAKE) distclean
-rm -rf lib
-rm -rf bin
-rm -rf objects
-rm -rf html
-rm -rf latex
-rm -rf man
-rm -rf docbook
-rm -rf perlmod
-rm -rf rtf
-rm -rf xml
-rm -f src/Makefile.doxygen src/Makefile.libdoxygen
-rm -f src/Makefile.libdoxycfg src/libdoxycfg.t src/libdoxygen.t
-rm -f libmd5/Makefile.libmd5
-rm -f vhdlparser/Makefile.vhdlparser
-rm -f .makeconfig .tmakeconfig
-rm -f src/doxygen.pro src/libdoxygen.pro qtools/qtools.pro src/libdoxycfg.pro libmd5/libmd5.pro vhdlparser/vhdlparser.pro
-rm -rf generated_src
-rm -f addon/doxywizard/doxywizard.pro
-rm -f VERSION
-rm -f packages/rpm/doxygen.spec
-rm -r addon/doxywizard/Makefile
-rm -f addon/doxysearch/Makefile
-rm -f addon/doxyapp/Makefile
-rm -f addon/doxmlparser/src/Makefile
-rm -f addon/doxmlparser/test/Makefile
-rm -f addon/doxmlparser/examples/metrics/Makefile
-rm -f qtools/Makefile src/Makefile examples/Makefile doc/Makefile
-rm -f Makefile
DATE=$(shell date "+%B %Y")
MAN1DIR = man/man1
install: doxywizard_install doxysearch_install
$(INSTTOOL) -d $(DESTDIR)$(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(DESTDIR)$(INSTALL)/bin
$(INSTTOOL) -d $(DESTDIR)$(INSTALL)/$(MAN1DIR)
cat doc/doxygen.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxygen.1
$(INSTTOOL) -m 644 doxygen.1 $(DESTDIR)$(INSTALL)/$(MAN1DIR)/doxygen.1
rm doxygen.1
install_docs:
$(INSTTOOL) -d $(DESTDIR)$(DOCDIR)
$(MAKE) -C examples
$(MAKE) -C doc
$(MAKE) -C latex
$(INSTTOOL) -m 644 latex/doxygen_manual.pdf $(DESTDIR)$(DOCDIR)
cp -r examples $(DESTDIR)$(DOCDIR)
cp -r html $(DESTDIR)$(DOCDIR)
docs: FORCE
cd examples ; $(MAKE)
cd doc ; $(MAKE)
pdf: docs
cd latex ; $(MAKE)
DISTFILES = Doxyfile vhdlparser libmd5 addon tmake doc examples bin lib objects testing \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION README.md packages winbuild jquery templates
archive: clean
tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
DISTDIR = doxygen-`echo $(VERSION) | tr - _`
dist: clean
rm -rf $(DISTDIR)
mkdir $(DISTDIR)
cp -a $(DISTFILES) $(DISTDIR)
find $(DISTDIR) \( -name ".svn" \) -print0 | xargs -0 rm -rf
tar zcvf $(DISTDIR).src.tar.gz $(DISTDIR)
rm -rf $(DISTDIR)
DISTDIR = doxygen-`echo $(VERSION) | tr - _`
rpm: dist
gzip -df $(DISTDIR).src.tar.gz
mkdir $(DISTDIR)
mkdir $(DISTDIR)/packages
mkdir $(DISTDIR)/packages/rpm
cp packages/rpm/doxygen.spec $(DISTDIR)/packages/rpm
rm -rf $(DISTDIR)
gzip -9v $(DISTDIR).src.tar
rpmbuild -ta %%WITHDOXYWIZARD%% $(DISTDIR).src.tar.gz
rpmsrc: dist
gzip -df $(DISTDIR).src.tar.gz
mkdir $(DISTDIR)
mkdir $(DISTDIR)/packages
mkdir $(DISTDIR)/packages/rpm
cp packages/rpm/doxygen.spec $(DISTDIR)/packages/rpm
tar -rvf $(DISTDIR).src.tar $(DISTDIR)/packages/rpm/doxygen.spec
rm -rf $(DISTDIR)
gzip -9v $(DISTDIR).src.tar
rpmbuild -ts %%WITHDOXYWIZARD%% $(DISTDIR).src.tar.gz
rpmbinary: dist
gzip -df $(DISTDIR).src.tar.gz
mkdir $(DISTDIR)
mkdir $(DISTDIR)/packages
mkdir $(DISTDIR)/packages/rpm
cp packages/rpm/doxygen.spec $(DISTDIR)/packages/rpm
tar -rvf $(DISTDIR).src.tar $(DISTDIR)/packages/rpm/doxygen.spec
rm -rf $(DISTDIR)
gzip -9v $(DISTDIR).src.tar
rpmbuild -tb %%WITHDOXYWIZARD%% $(DISTDIR).src.tar.gz
ctags:
ctags -R -f tags src addon/doxywizard qtools
test: FORCE
make -C testing
FORCE:
all: src\version.cpp
set TMAKEPATH=$(TMAKEPATH) & cd qtools & $(MAKE)
set TMAKEPATH=$(TMAKEPATH) & cd libmd5 & $(MAKE)
set TMAKEPATH=$(TMAKEPATH) & cd src & $(MAKE)
clean:
cd examples & $(MAKE) clean
cd doc & $(MAKE) clean
cd src & $(MAKE) clean
-del bin\doxy*.*
-del objects\*.o
distclean: clean
-del src\Makefile.libdoxygen \
src\Makefile.doxygen \
src\Makefile.libdoxycfg \
src\libdoxycfg.t src\libdoxygen.t
-del Makefile src\Makefile examples\Makefile doc\Makefile
-del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
-del src\version.cpp
realclean: distclean
docs:
set TMAKEPATH=$(TMAKEPATH) & cd examples & $(MAKE)
set TMAKEPATH=$(TMAKEPATH) & cd doc & $(MAKE)
ps: docs
cd latex & $(MAKE)
src\version.cpp: Makefile
echo char versionString[]="""$(VERSION)"""; > src\version.cpp
FORCE:
all: src\version.cpp
set TMAKEPATH=$(TMAKEPATH)
cd qtools
$(MAKE)
cd ..
cd libmd5
$(MAKE)
cd ..
cd src
$(MAKE)
clean: FORCE
cd examples
$(MAKE) clean
cd ..
cd doc
$(MAKE) clean
cd ..
cd src
$(MAKE) clean
cd ..
-del bin\doxy*.*
-del objects\*.o
distclean: clean
-del src\Makefile.libdoxygen \
src\Makefile.doxygen \
src\Makefile.libdoxycfg \
src\libdoxycfg.t src\libdoxygen.t
-del Makefile src\Makefile examples\Makefile doc\Makefile
-del src\libdoxygen.pro src\doxygen.pro src\libdoxycfg.pro
-del src\version.cpp
realclean: distclean
docs: FORCE
cd examples
$(MAKE)
cd ..
cd doc
$(MAKE)
cd ..
ps: docs
cd latex
$(MAKE)
src\version.cpp: Makefile
echo char versionString[]="$(VERSION)"; > src\version.cpp
FORCE:
aix-g++
aix-xlc
beos-g++
dgux-g++
freebsd-g++
gnu-g++
hpux-acc
hpux-cc
hpux-g++
irix-64
irix-dcc
irix-g++
irix-n32
linux-g++
linux-64
macosx-c++
macosx-uni-c++
m68k-atari-mint-g++
netbsd-g++
openbsd-g++
osf1-cxx
osf1-g++
qnx-g++
sco-g++
solaris-cc
solaris-cc-64
solaris-g++
sunos-g++
ultrix-g++
unixware-g++
win32-g++
win32-mingw
......@@ -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
......
../src/doxmlintf.h
\ No newline at end of file
../src/doxmlintf.h
\ No newline at end of file
......@@ -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();
......
File mode changed from 100644 to 100755
if (build_wizard)
# search for Qt5
if (NOT force_qt4)
find_package(Qt5Core QUIET)
if (Qt5Core_FOUND)
message(STATUS "Using Qt5")
find_package(Qt5 COMPONENTS Widgets Gui Xml)
macro(qt_use_modules)
qt5_use_modules(${ARGN})
endmacro()
macro(qt_wrap_cpp)
qt5_wrap_cpp(${ARGN})
endmacro()
macro(qt_add_resources)
qt5_add_resources(${ARGN})
endmacro()
endif()
endif()
# fallback to Qt4
if (NOT Qt5Core_FOUND)
if (NOT force_qt4)
message(STATUS "Qt5 not found, searching for Qt4 instead...")
else()
message(STATUS "Using Qt4")
endif()
find_package(Qt4 REQUIRED COMPONENTS QtCore QtXml QtGui)
macro(qt_use_modules)
endmacro()
macro(qt_wrap_cpp)
qt4_wrap_cpp(${ARGN})
endmacro()
macro(qt_add_resources)
qt4_add_resources(${ARGN})
endmacro()
endif()
include_directories(
.
${CMAKE_SOURCE_DIR}/src
......@@ -10,10 +45,10 @@ include_directories(
set(GENERATED_SRC_WIZARD ${GENERATED_SRC}/doxywizard)
file(MAKE_DIRECTORY ${GENERATED_SRC_WIZARD})
add_definitions(-DQT_ARCH_X86_64 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DUNICODE)
set(QT_USE_QTXML TRUE)
find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
add_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DUNICODE)
if (NOT Qt5Core_FOUND)
include(${QT_USE_FILE})
endif()
# generate settings.h
file(GENERATE OUTPUT ${GENERATED_SRC_WIZARD}/settings.h
......@@ -41,9 +76,9 @@ 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 "-Pconfig_doxywYY")
FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "${LEX_FLAGS} -Pconfig_doxywYY")
QT4_WRAP_CPP(doxywizard_MOC
qt_wrap_cpp(doxywizard_MOC
doxywizard.h
expert.h
helplabel.h
......@@ -54,9 +89,9 @@ inputstrlist.h
wizard.h
)
QT4_ADD_RESOURCES(doxywizard_RESOURCES_RCC doxywizard.qrc)
qt_add_resources(doxywizard_RESOURCES_RCC doxywizard.qrc)
add_executable(doxywizard
add_executable(doxywizard WIN32
doxywizard.cpp
expert.cpp
wizard.cpp
......@@ -71,8 +106,9 @@ ${GENERATED_SRC_WIZARD}/configdoc.cpp
${doxywizard_MOC}
${doxywizard_RESOURCES_RCC}
)
qt_use_modules(doxywizard Core Gui Widgets Xml)
target_link_libraries(doxywizard
${QT_LIBRARIES}
${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY}
)
install(TARGETS doxywizard DESTINATION bin)
......
......@@ -20,7 +20,16 @@
*/
#include "config.h"
#include "input.h"
#include <QtCore>
#include <QString>
#include <QVariant>
#include <QStack>
#include <QTextCodec>
#include <QByteArray>
#include <QFileInfo>
#include <QStringList>
#include <QRegExp>
#include <QTextStream>
#define YY_NO_UNISTD_H 1
......@@ -52,7 +61,7 @@ static QVariant *g_arg;
static Input *g_curOption=0;
static QString g_elemStr;
static QTextCodec *g_codec = QTextCodec::codecForName("UTF-8");
static QString g_codecName = QString::fromAscii("UTF-8");
static QString g_codecName = QString::fromLatin1("UTF-8");
static int g_lastState;
static QByteArray g_tmpString;
......@@ -74,13 +83,13 @@ static int yyread(char *buf,int maxSize)
}
}
static QString warning_str = QString::fromAscii("warning: ");
static QString error_str = QString::fromAscii("error: ");
static QString warning_str = QString::fromLatin1("warning: ");
static QString error_str = QString::fromLatin1("error: ");
void config_err(const char *fmt, ...)
{
QString msg = error_str;
msg.append(QString::fromAscii(fmt));
msg.append(QString::fromLatin1(fmt));
va_list args;
va_start(args, fmt);
vfprintf(stderr, qPrintable(msg), args);
......@@ -89,7 +98,7 @@ void config_err(const char *fmt, ...)
void config_warn(const char *fmt, ...)
{
QString msg = warning_str;
msg.append(QString::fromAscii(fmt));
msg.append(QString::fromLatin1(fmt));
va_list args;
va_start(args, fmt);
vfprintf(stderr, qPrintable(msg), args);
......@@ -101,10 +110,10 @@ static void substEnvVarsInString(QString &s);
static void checkEncoding()
{
Input *option = g_options->value(QString::fromAscii("DOXYFILE_ENCODING"));
Input *option = g_options->value(QString::fromLatin1("DOXYFILE_ENCODING"));
if (option && option->value().toString()!=g_codecName)
{
QTextCodec *newCodec = QTextCodec::codecForName(option->value().toString().toAscii());
QTextCodec *newCodec = QTextCodec::codecForName(option->value().toString().toLatin1());
if (newCodec)
{
g_codec = newCodec;
......@@ -115,7 +124,7 @@ static void checkEncoding()
static FILE *tryPath(const QString &path,const QString &fileName)
{
QString absName=!path.isEmpty() ? path+QString::fromAscii("/")+fileName : fileName;
QString absName=!path.isEmpty() ? path+QString::fromLatin1("/")+fileName : fileName;
QFileInfo fi(absName);
if (fi.exists() && fi.isFile())
{
......@@ -144,7 +153,7 @@ static FILE *findFile(const QString &fileName)
if (f) return f;
}
// try cwd if g_includePathList fails
return tryPath(QString::fromAscii("."),fileName);
return tryPath(QString::fromLatin1("."),fileName);
}
static void readIncludeFile(const QString &incName)
......@@ -160,8 +169,8 @@ static void readIncludeFile(const QString &incName)
substEnvVarsInString(inc);
inc = inc.trimmed();
uint incLen = inc.length();
if (inc.at(0)==QChar::fromAscii('"') &&
inc.at(incLen-1)==QChar::fromAscii('"')) // strip quotes
if (inc.at(0)==QChar::fromLatin1('"') &&
inc.at(incLen-1)==QChar::fromLatin1('"')) // strip quotes
{
inc=inc.mid(1,incLen-2);
}
......@@ -383,7 +392,7 @@ static void readIncludeFile(const QString &incName)
static void substEnvVarsInString(QString &s)
{
static QRegExp re(QString::fromAscii("\\$\\([a-z_A-Z0-9]+\\)"));
static QRegExp re(QString::fromLatin1("\\$\\([a-z_A-Z0-9]+\\)"));
if (s.isEmpty()) return;
int p=0;
int i,l;
......@@ -409,8 +418,8 @@ static void substEnvVarsInStrList(QStringList &sl)
foreach (QString result, sl)
{
// an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE.
bool wasQuoted = (result.indexOf(QChar::fromAscii(' '))!=-1) ||
(result.indexOf(QChar::fromAscii('\t'))!=-1);
bool wasQuoted = (result.indexOf(QChar::fromLatin1(' '))!=-1) ||
(result.indexOf(QChar::fromLatin1('\t'))!=-1);
// here we strip the quote again
substEnvVarsInString(result);
......@@ -430,33 +439,33 @@ static void substEnvVarsInStrList(QStringList &sl)
{
QChar c=0;
// skip until start of new word
while (i<l && ((c=result.at(i))==QChar::fromAscii(' ') || c==QChar::fromAscii('\t'))) i++;
while (i<l && ((c=result.at(i))==QChar::fromLatin1(' ') || c==QChar::fromLatin1('\t'))) i++;
p=i; // p marks the start index of the word
// skip until end of a word
while (i<l && ((c=result.at(i))!=QChar::fromAscii(' ') &&
c!=QChar::fromAscii('\t') &&
c!=QChar::fromAscii('"'))) i++;
while (i<l && ((c=result.at(i))!=QChar::fromLatin1(' ') &&
c!=QChar::fromLatin1('\t') &&
c!=QChar::fromLatin1('"'))) i++;
if (i<l) // not at the end of the string
{
if (c==QChar::fromAscii('"')) // word within quotes
if (c==QChar::fromLatin1('"')) // word within quotes
{
p=i+1;
for (i++;i<l;i++)
{
c=result.at(i);
if (c==QChar::fromAscii('"')) // end quote
if (c==QChar::fromLatin1('"')) // end quote
{
out += result.mid(p,i-p);
p=i+1;
break;
}
else if (c==QChar::fromAscii('\\')) // skip escaped stuff
else if (c==QChar::fromLatin1('\\')) // skip escaped stuff
{
i++;
}
}
}
else if (c==QChar::fromAscii(' ') || c==QChar::fromAscii('\t')) // separator
else if (c==QChar::fromLatin1(' ') || c==QChar::fromLatin1('\t')) // separator
{
out += result.mid(p,i-p);
p=i+1;
......@@ -529,7 +538,7 @@ bool parseConfig(
void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
{
QChar c;
bool needsEscaping=FALSE;
bool needsEscaping=false;
// convert the string back to it original encoding
//QByteArray se = codec->fromUnicode(s);
t.setCodec(codec);
......@@ -538,10 +547,10 @@ void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
{
while (!(c=*p++).isNull() && !needsEscaping)
{
needsEscaping = (c==QChar::fromAscii(' ') ||
c==QChar::fromAscii('\n') ||
c==QChar::fromAscii('\t') ||
c==QChar::fromAscii('"'));
needsEscaping = (c==QChar::fromLatin1(' ') ||
c==QChar::fromLatin1('\n') ||
c==QChar::fromLatin1('\t') ||
c==QChar::fromLatin1('"'));
}
if (needsEscaping)
{
......@@ -549,9 +558,9 @@ void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
p=s.data();
while (!p->isNull())
{
if (*p ==QChar::fromAscii(' ') &&
*(p+1)==QChar::fromAscii('\0')) break; // skip inserted space at the end
if (*p ==QChar::fromAscii('"')) t << "\\"; // escape quotes
if (*p ==QChar::fromLatin1(' ') &&
*(p+1)==QChar::fromLatin1('\0')) break; // skip inserted space at the end
if (*p ==QChar::fromLatin1('"')) t << "\\"; // escape quotes
t << *p++;
}
t << "\"";
......
This diff is collapsed.
......@@ -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();
......
#include <QtGui>
#include <QtXml>
#include "expert.h"
#include "inputbool.h"
#include "inputstring.h"
......@@ -11,7 +9,22 @@
#include "configdoc.h"
#include "settings.h"
#define SA(x) QString::fromAscii(x)
#include <QTreeWidget>
#include <QStackedWidget>
#include <QTextBrowser>
#include <QSplitter>
#include <QGridLayout>
#include <QPushButton>
#include <QScrollArea>
#include <QFile>
#include <QMessageBox>
#include <QSettings>
#include <QTextStream>
#include <QTextCodec>
#include <QFileInfo>
#define SA(x) QString::fromLatin1(x)
static QString convertToComment(const QString &s)
{
......@@ -48,7 +61,7 @@ Expert::Expert()
m_treeWidget = new QTreeWidget;
m_treeWidget->setColumnCount(1);
m_topicStack = new QStackedWidget;
m_inShowHelp = FALSE;
m_inShowHelp = false;
QFile file(SA(":/config.xml"));
QString err;
......@@ -69,7 +82,7 @@ Expert::Expert()
createTopics(m_rootElement);
m_helper = new QTextBrowser;
m_helper->setReadOnly(true);
m_helper->setOpenExternalLinks(TRUE);
m_helper->setOpenExternalLinks(true);
m_splitter = new QSplitter(Qt::Vertical);
m_splitter->addWidget(m_treeWidget);
m_splitter->addWidget(m_helper);
......@@ -471,7 +484,7 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
while (!child.isNull())
{
QString setting = child.attribute(SA("setting"));
if (setting.isEmpty() || IS_SUPPORTED(setting.toAscii()))
if (setting.isEmpty() || IS_SUPPORTED(setting.toLatin1()))
{
QString type = child.attribute(SA("type"));
QString docs = getDocsForNode(child);
......@@ -634,7 +647,7 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
QString dependsOn = child.attribute(SA("depends"));
QString id = child.attribute(SA("id"));
if (!dependsOn.isEmpty() &&
(setting.isEmpty() || IS_SUPPORTED(setting.toAscii())))
(setting.isEmpty() || IS_SUPPORTED(setting.toLatin1())))
{
Input *parentOption = m_options[dependsOn];
if (parentOption==0)
......@@ -740,7 +753,7 @@ void Expert::saveTopic(QTextStream &t,QDomElement &elem,QTextCodec *codec,
QString setting = childElem.attribute(SA("setting"));
QString type = childElem.attribute(SA("type"));
QString name = childElem.attribute(SA("id"));
if (setting.isEmpty() || IS_SUPPORTED(setting.toAscii()))
if (setting.isEmpty() || IS_SUPPORTED(setting.toLatin1()))
{
QHash<QString,Input*>::const_iterator i = m_options.find(name);
if (i!=m_options.end())
......@@ -774,10 +787,10 @@ bool Expert::writeConfig(QTextStream &t,bool brief)
}
QTextCodec *codec = 0;
Input *option = m_options[QString::fromAscii("DOXYFILE_ENCODING")];
Input *option = m_options[QString::fromLatin1("DOXYFILE_ENCODING")];
if (option)
{
codec = QTextCodec::codecForName(option->value().toString().toAscii());
codec = QTextCodec::codecForName(option->value().toString().toLatin1());
if (codec==0) // fallback: use UTF-8
{
codec = QTextCodec::codecForName("UTF-8");
......@@ -809,16 +822,16 @@ void Expert::showHelp(Input *option)
{
if (!m_inShowHelp)
{
m_inShowHelp = TRUE;
m_inShowHelp = true;
m_helper->setText(
QString::fromAscii("<qt><b>")+option->id()+
QString::fromAscii("</b><br>")+
QString::fromAscii("<br/>")+
QString::fromLatin1("<qt><b>")+option->id()+
QString::fromLatin1("</b><br>")+
QString::fromLatin1("<br/>")+
option->docs().
replace(QChar::fromAscii('\n'),QChar::fromAscii(' '))+
QString::fromAscii("</qt>")
replace(QChar::fromLatin1('\n'),QChar::fromLatin1(' '))+
QString::fromLatin1("</qt>")
);
m_inShowHelp = FALSE;
m_inShowHelp = false;
}
}
......@@ -862,7 +875,7 @@ void Expert::resetToDefaults()
static bool stringVariantToBool(const QVariant &v)
{
QString s = v.toString().toLower();
return s==QString::fromAscii("yes") || s==QString::fromAscii("true") || s==QString::fromAscii("1");
return s==QString::fromLatin1("yes") || s==QString::fromLatin1("true") || s==QString::fromLatin1("1");
}
static bool getBoolOption(
......@@ -884,7 +897,7 @@ static QString getStringOption(
bool Expert::htmlOutputPresent(const QString &workingDir) const
{
bool generateHtml = getBoolOption(m_options,QString::fromAscii("GENERATE_HTML"));
bool generateHtml = getBoolOption(m_options,QString::fromLatin1("GENERATE_HTML"));
if (!generateHtml || workingDir.isEmpty()) return false;
QString indexFile = getHtmlOutputIndex(workingDir);
QFileInfo fi(indexFile);
......@@ -893,8 +906,8 @@ bool Expert::htmlOutputPresent(const QString &workingDir) const
QString Expert::getHtmlOutputIndex(const QString &workingDir) const
{
QString outputDir = getStringOption(m_options,QString::fromAscii("OUTPUT_DIRECTORY"));
QString htmlOutputDir = getStringOption(m_options,QString::fromAscii("HTML_OUTPUT"));
QString outputDir = getStringOption(m_options,QString::fromLatin1("OUTPUT_DIRECTORY"));
QString htmlOutputDir = getStringOption(m_options,QString::fromLatin1("HTML_OUTPUT"));
//printf("outputDir=%s\n",qPrintable(outputDir));
//printf("htmlOutputDir=%s\n",qPrintable(htmlOutputDir));
QString indexFile = workingDir;
......@@ -904,7 +917,7 @@ QString Expert::getHtmlOutputIndex(const QString &workingDir) const
}
else // append
{
indexFile += QString::fromAscii("/")+outputDir;
indexFile += QString::fromLatin1("/")+outputDir;
}
if (QFileInfo(htmlOutputDir).isAbsolute()) // override
{
......@@ -912,27 +925,27 @@ QString Expert::getHtmlOutputIndex(const QString &workingDir) const
}
else // append
{
indexFile += QString::fromAscii("/")+htmlOutputDir;
indexFile += QString::fromLatin1("/")+htmlOutputDir;
}
indexFile+=QString::fromAscii("/index.html");
indexFile+=QString::fromLatin1("/index.html");
return indexFile;
}
bool Expert::pdfOutputPresent(const QString &workingDir) const
{
bool generateLatex = getBoolOption(m_options,QString::fromAscii("GENERATE_LATEX"));
bool pdfLatex = getBoolOption(m_options,QString::fromAscii("USE_PDFLATEX"));
bool generateLatex = getBoolOption(m_options,QString::fromLatin1("GENERATE_LATEX"));
bool pdfLatex = getBoolOption(m_options,QString::fromLatin1("USE_PDFLATEX"));
if (!generateLatex || !pdfLatex) return false;
QString latexOutput = getStringOption(m_options,QString::fromAscii("LATEX_OUTPUT"));
QString latexOutput = getStringOption(m_options,QString::fromLatin1("LATEX_OUTPUT"));
QString indexFile;
if (QFileInfo(latexOutput).isAbsolute())
{
indexFile = latexOutput+QString::fromAscii("/refman.pdf");
indexFile = latexOutput+QString::fromLatin1("/refman.pdf");
}
else
{
indexFile = workingDir+QString::fromAscii("/")+
latexOutput+QString::fromAscii("/refman.pdf");
indexFile = workingDir+QString::fromLatin1("/")+
latexOutput+QString::fromLatin1("/refman.pdf");
}
QFileInfo fi(indexFile);
return fi.exists() && fi.isFile();
......
addon/doxywizard/images/add.png

4.22 KB | W: | H:

addon/doxywizard/images/add.png

1.64 KB | W: | H:

addon/doxywizard/images/add.png
addon/doxywizard/images/add.png
addon/doxywizard/images/add.png
addon/doxywizard/images/add.png
  • 2-up
  • Swipe
  • Onion skin
addon/doxywizard/images/del.png

4.13 KB | W: | H:

addon/doxywizard/images/del.png

1.55 KB | W: | H:

addon/doxywizard/images/del.png
addon/doxywizard/images/del.png
addon/doxywizard/images/del.png
addon/doxywizard/images/del.png
  • 2-up
  • Swipe
  • Onion skin
addon/doxywizard/images/file.png

4.28 KB | W: | H:

addon/doxywizard/images/file.png

1.7 KB | W: | H:

addon/doxywizard/images/file.png
addon/doxywizard/images/file.png
addon/doxywizard/images/file.png
addon/doxywizard/images/file.png
  • 2-up
  • Swipe
  • Onion skin
addon/doxywizard/images/folder.png

4.21 KB | W: | H:

addon/doxywizard/images/folder.png

1.63 KB | W: | H:

addon/doxywizard/images/folder.png
addon/doxywizard/images/folder.png
addon/doxywizard/images/folder.png
addon/doxywizard/images/folder.png
  • 2-up
  • Swipe
  • Onion skin
addon/doxywizard/images/refresh.png

4.35 KB | W: | H:

addon/doxywizard/images/refresh.png

1.78 KB | W: | H:

addon/doxywizard/images/refresh.png
addon/doxywizard/images/refresh.png
addon/doxywizard/images/refresh.png
addon/doxywizard/images/refresh.png
  • 2-up
  • Swipe
  • Onion skin
addon/doxywizard/images/tunecolor.png

114 KB | W: | H:

addon/doxywizard/images/tunecolor.png

99.9 KB | W: | H:

addon/doxywizard/images/tunecolor.png
addon/doxywizard/images/tunecolor.png
addon/doxywizard/images/tunecolor.png
addon/doxywizard/images/tunecolor.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -14,7 +14,11 @@
#include "inputbool.h"
#include "helplabel.h"
#include <QtGui>
#include <QCheckBox>
#include <QTextStream>
#include <QTextCodec>
#include <QGridLayout>
InputBool::InputBool( QGridLayout *layout, int &row,
const QString &id, bool checked,
......@@ -73,11 +77,11 @@ void InputBool::updateDefault()
{
if (m_state==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
}
else
{
m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
}
}
......@@ -89,9 +93,9 @@ QVariant &InputBool::value()
void InputBool::update()
{
QString v = m_value.toString().toLower();
m_state = (v==QString::fromAscii("yes") ||
v==QString::fromAscii("true") ||
v==QString::fromAscii("1"));
m_state = (v==QString::fromLatin1("yes") ||
v==QString::fromLatin1("true") ||
v==QString::fromLatin1("1"));
m_cb->setChecked( m_state );
updateDefault();
updateDependencies();
......@@ -105,8 +109,8 @@ void InputBool::reset()
void InputBool::writeValue(QTextStream &t,QTextCodec *codec)
{
if (m_state)
t << codec->fromUnicode(QString::fromAscii("YES"));
t << codec->fromUnicode(QString::fromLatin1("YES"));
else
t << codec->fromUnicode(QString::fromAscii("NO"));
t << codec->fromUnicode(QString::fromLatin1("NO"));
}
......@@ -15,7 +15,10 @@
#include "inputint.h"
#include "helplabel.h"
#include <QtGui>
#include <QSpinBox>
#include <QGridLayout>
#include <QWheelEvent>
#include <QTextStream>
class NoWheelSpinBox : public QSpinBox
{
......@@ -74,11 +77,11 @@ void InputInt::updateDefault()
{
if (m_val==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
}
else
{
m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
}
emit changed();
}
......
......@@ -17,7 +17,14 @@
#include "doxywizard.h"
#include "config.h"
#include <QtGui>
#include <QComboBox>
#include <QLineEdit>
#include <QGridLayout>
#include <QWheelEvent>
#include <QToolBar>
#include <QFileInfo>
#include <QFileDialog>
#include <QTextCodec>
class NoWheelComboBox : public QComboBox
{
......@@ -34,7 +41,7 @@ InputString::InputString( QGridLayout *layout,int &row,
StringMode m, const QString &docs,
const QString &absPath )
: m_default(s), m_sm(m), m_index(0), m_docs(docs), m_id(id),
m_absPath(absPath==QString::fromAscii("1"))
m_absPath(absPath==QString::fromLatin1("1"))
{
m_lab = new HelpLabel(id);
if (m==StringFixed)
......@@ -61,7 +68,7 @@ InputString::InputString( QGridLayout *layout,int &row,
m_br->setIconSize(QSize(24,24));
if (m==StringFile || m==StringImage)
{
QAction *file = m_br->addAction(QIcon(QString::fromAscii(":/images/file.png")),QString(),this,SLOT(browse()));
QAction *file = m_br->addAction(QIcon(QString::fromLatin1(":/images/file.png")),QString(),this,SLOT(browse()));
file->setToolTip(tr("Browse to a file"));
layout->addWidget( m_br,row,2 );
if (m==StringImage)
......@@ -75,7 +82,7 @@ InputString::InputString( QGridLayout *layout,int &row,
}
else
{
QAction *dir = m_br->addAction(QIcon(QString::fromAscii(":/images/folder.png")),QString(),this,SLOT(browse()));
QAction *dir = m_br->addAction(QIcon(QString::fromLatin1(":/images/folder.png")),QString(),this,SLOT(browse()));
dir->setToolTip(tr("Browse to a folder"));
layout->addWidget( m_br,row,2 );
}
......@@ -94,7 +101,7 @@ InputString::InputString( QGridLayout *layout,int &row,
this, SLOT(setValue(const QString&)) );
if (m_com) connect( m_com, SIGNAL(activated(const QString &)),
this, SLOT(setValue(const QString &)) );
m_str = s+QChar::fromAscii('!'); // force update
m_str = s+QChar::fromLatin1('!'); // force update
setValue(s);
connect( m_lab, SIGNAL(enter()), SLOT(help()) );
connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
......@@ -125,11 +132,11 @@ void InputString::updateDefault()
{
if (m_str==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
}
else
{
m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
}
if (m_im)
{
......@@ -142,7 +149,7 @@ void InputString::updateDefault()
QFile Fout(m_str);
if(!Fout.exists())
{
m_im->setText(tr("Sorry, cannot find file(")+m_str+QString::fromAscii(");"));
m_im->setText(tr("Sorry, cannot find file(")+m_str+QString::fromLatin1(");"));
}
else
{
......@@ -153,7 +160,7 @@ void InputString::updateDefault()
}
else
{
m_im->setText(tr("Sorry, no preview available (")+m_str+QString::fromAscii(");"));
m_im->setText(tr("Sorry, no preview available (")+m_str+QString::fromLatin1(");"));
}
}
}
......
......@@ -17,7 +17,14 @@
#include "doxywizard.h"
#include "config.h"
#include <QtGui>
#include <QToolBar>
#include <QGridLayout>
#include <QLineEdit>
#include <QListWidget>
#include <QFileInfo>
#include <QFileDialog>
#include <QTextStream>
#include <QTextCodec>
InputStrList::InputStrList( QGridLayout *layout,int &row,
const QString & id,
......@@ -32,13 +39,13 @@ InputStrList::InputStrList( QGridLayout *layout,int &row,
QToolBar *toolBar = new QToolBar;
toolBar->setIconSize(QSize(24,24));
m_add = toolBar->addAction(QIcon(QString::fromAscii(":/images/add.png")),QString(),
m_add = toolBar->addAction(QIcon(QString::fromLatin1(":/images/add.png")),QString(),
this,SLOT(addString()));
m_add->setToolTip(tr("Add item"));
m_del = toolBar->addAction(QIcon(QString::fromAscii(":/images/del.png")),QString(),
m_del = toolBar->addAction(QIcon(QString::fromLatin1(":/images/del.png")),QString(),
this,SLOT(delString()));
m_del->setToolTip(tr("Delete selected item"));
m_upd = toolBar->addAction(QIcon(QString::fromAscii(":/images/refresh.png")),QString(),
m_upd = toolBar->addAction(QIcon(QString::fromLatin1(":/images/refresh.png")),QString(),
this,SLOT(updateString()));
m_upd->setToolTip(tr("Update selected item"));
......@@ -52,13 +59,13 @@ InputStrList::InputStrList( QGridLayout *layout,int &row,
{
if (lm&ListFile)
{
m_brFile = toolBar->addAction(QIcon(QString::fromAscii(":/images/file.png")),QString(),
m_brFile = toolBar->addAction(QIcon(QString::fromLatin1(":/images/file.png")),QString(),
this,SLOT(browseFiles()));
m_brFile->setToolTip(tr("Browse to a file"));
}
if (lm&ListDir)
{
m_brDir = toolBar->addAction(QIcon(QString::fromAscii(":/images/folder.png")),QString(),
m_brDir = toolBar->addAction(QIcon(QString::fromLatin1(":/images/folder.png")),QString(),
this,SLOT(browseDir()));
m_brDir->setToolTip(tr("Browse to a folder"));
}
......@@ -188,7 +195,7 @@ void InputStrList::browseDir()
}
if (dirName.isEmpty())
{
dirName=QString::fromAscii(".");
dirName=QString::fromLatin1(".");
}
m_lb->addItem(dirName);
m_strList.append(dirName);
......@@ -225,11 +232,11 @@ void InputStrList::updateDefault()
{
if (m_strList==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
}
else
{
m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
}
}
......@@ -240,7 +247,7 @@ void InputStrList::reset()
void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
{
bool first=TRUE;
bool first=true;
foreach (QString s, m_strList)
{
if (!first)
......@@ -248,7 +255,7 @@ void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
t << " \\" << endl;
t << " ";
}
first=FALSE;
first=false;
writeStringValue(t,codec,s);
}
}
......
......@@ -3,46 +3,64 @@
#include "doxywizard.h"
#include <math.h>
#include <QtGui>
#include <QGridLayout>
#include <QImage>
#include <QLabel>
#include <QHBoxLayout>
#include <QPushButton>
#include <QPixmap>
#include <QPainter>
#include <QMouseEvent>
#include <QLineEdit>
#include <QCheckBox>
#include <QFileInfo>
#include <QFileDialog>
#include <QButtonGroup>
#include <QGroupBox>
#include <QRadioButton>
#include <QTreeWidget>
#include <QStackedWidget>
#include <qdrawutil.h>
// options configurable via the wizard
#define STR_PROJECT_NAME QString::fromAscii("PROJECT_NAME")
#define STR_PROJECT_LOGO QString::fromAscii("PROJECT_LOGO")
#define STR_PROJECT_BRIEF QString::fromAscii("PROJECT_BRIEF")
#define STR_INPUT QString::fromAscii("INPUT")
#define STR_OUTPUT_DIRECTORY QString::fromAscii("OUTPUT_DIRECTORY")
#define STR_PROJECT_NUMBER QString::fromAscii("PROJECT_NUMBER")
#define STR_RECURSIVE QString::fromAscii("RECURSIVE")
#define STR_OPTIMIZE_OUTPUT_FOR_C QString::fromAscii("OPTIMIZE_OUTPUT_FOR_C")
#define STR_OPTIMIZE_OUTPUT_JAVA QString::fromAscii("OPTIMIZE_OUTPUT_JAVA")
#define STR_OPTIMIZE_FOR_FORTRAN QString::fromAscii("OPTIMIZE_FOR_FORTRAN")
#define STR_OPTIMIZE_OUTPUT_VHDL QString::fromAscii("OPTIMIZE_OUTPUT_VHDL")
#define STR_CPP_CLI_SUPPORT QString::fromAscii("CPP_CLI_SUPPORT")
#define STR_HIDE_SCOPE_NAMES QString::fromAscii("HIDE_SCOPE_NAMES")
#define STR_EXTRACT_ALL QString::fromAscii("EXTRACT_ALL")
#define STR_SOURCE_BROWSER QString::fromAscii("SOURCE_BROWSER")
#define STR_GENERATE_HTML QString::fromAscii("GENERATE_HTML")
#define STR_GENERATE_LATEX QString::fromAscii("GENERATE_LATEX")
#define STR_GENERATE_MAN QString::fromAscii("GENERATE_MAN")
#define STR_GENERATE_RTF QString::fromAscii("GENERATE_RTF")
#define STR_GENERATE_XML QString::fromAscii("GENERATE_XML")
#define STR_GENERATE_HTMLHELP QString::fromAscii("GENERATE_HTMLHELP")
#define STR_GENERATE_TREEVIEW QString::fromAscii("GENERATE_TREEVIEW")
#define STR_USE_PDFLATEX QString::fromAscii("USE_PDFLATEX")
#define STR_PDF_HYPERLINKS QString::fromAscii("PDF_HYPERLINKS")
#define STR_SEARCHENGINE QString::fromAscii("SEARCHENGINE")
#define STR_HAVE_DOT QString::fromAscii("HAVE_DOT")
#define STR_CLASS_DIAGRAMS QString::fromAscii("CLASS_DIAGRAMS")
#define STR_CLASS_GRAPH QString::fromAscii("CLASS_GRAPH")
#define STR_COLLABORATION_GRAPH QString::fromAscii("COLLABORATION_GRAPH")
#define STR_GRAPHICAL_HIERARCHY QString::fromAscii("GRAPHICAL_HIERARCHY")
#define STR_INCLUDE_GRAPH QString::fromAscii("INCLUDE_GRAPH")
#define STR_INCLUDED_BY_GRAPH QString::fromAscii("INCLUDED_BY_GRAPH")
#define STR_CALL_GRAPH QString::fromAscii("CALL_GRAPH")
#define STR_CALLER_GRAPH QString::fromAscii("CALLER_GRAPH")
#define STR_HTML_COLORSTYLE_HUE QString::fromAscii("HTML_COLORSTYLE_HUE")
#define STR_HTML_COLORSTYLE_SAT QString::fromAscii("HTML_COLORSTYLE_SAT")
#define STR_HTML_COLORSTYLE_GAMMA QString::fromAscii("HTML_COLORSTYLE_GAMMA")
#define STR_PROJECT_NAME QString::fromLatin1("PROJECT_NAME")
#define STR_PROJECT_LOGO QString::fromLatin1("PROJECT_LOGO")
#define STR_PROJECT_BRIEF QString::fromLatin1("PROJECT_BRIEF")
#define STR_INPUT QString::fromLatin1("INPUT")
#define STR_OUTPUT_DIRECTORY QString::fromLatin1("OUTPUT_DIRECTORY")
#define STR_PROJECT_NUMBER QString::fromLatin1("PROJECT_NUMBER")
#define STR_RECURSIVE QString::fromLatin1("RECURSIVE")
#define STR_OPTIMIZE_OUTPUT_FOR_C QString::fromLatin1("OPTIMIZE_OUTPUT_FOR_C")
#define STR_OPTIMIZE_OUTPUT_JAVA QString::fromLatin1("OPTIMIZE_OUTPUT_JAVA")
#define STR_OPTIMIZE_FOR_FORTRAN QString::fromLatin1("OPTIMIZE_FOR_FORTRAN")
#define STR_OPTIMIZE_OUTPUT_VHDL QString::fromLatin1("OPTIMIZE_OUTPUT_VHDL")
#define STR_CPP_CLI_SUPPORT QString::fromLatin1("CPP_CLI_SUPPORT")
#define STR_HIDE_SCOPE_NAMES QString::fromLatin1("HIDE_SCOPE_NAMES")
#define STR_EXTRACT_ALL QString::fromLatin1("EXTRACT_ALL")
#define STR_SOURCE_BROWSER QString::fromLatin1("SOURCE_BROWSER")
#define STR_GENERATE_HTML QString::fromLatin1("GENERATE_HTML")
#define STR_GENERATE_LATEX QString::fromLatin1("GENERATE_LATEX")
#define STR_GENERATE_MAN QString::fromLatin1("GENERATE_MAN")
#define STR_GENERATE_RTF QString::fromLatin1("GENERATE_RTF")
#define STR_GENERATE_XML QString::fromLatin1("GENERATE_XML")
#define STR_GENERATE_HTMLHELP QString::fromLatin1("GENERATE_HTMLHELP")
#define STR_GENERATE_TREEVIEW QString::fromLatin1("GENERATE_TREEVIEW")
#define STR_USE_PDFLATEX QString::fromLatin1("USE_PDFLATEX")
#define STR_PDF_HYPERLINKS QString::fromLatin1("PDF_HYPERLINKS")
#define STR_SEARCHENGINE QString::fromLatin1("SEARCHENGINE")
#define STR_HAVE_DOT QString::fromLatin1("HAVE_DOT")
#define STR_CLASS_DIAGRAMS QString::fromLatin1("CLASS_DIAGRAMS")
#define STR_CLASS_GRAPH QString::fromLatin1("CLASS_GRAPH")
#define STR_COLLABORATION_GRAPH QString::fromLatin1("COLLABORATION_GRAPH")
#define STR_GRAPHICAL_HIERARCHY QString::fromLatin1("GRAPHICAL_HIERARCHY")
#define STR_INCLUDE_GRAPH QString::fromLatin1("INCLUDE_GRAPH")
#define STR_INCLUDED_BY_GRAPH QString::fromLatin1("INCLUDED_BY_GRAPH")
#define STR_CALL_GRAPH QString::fromLatin1("CALL_GRAPH")
#define STR_CALLER_GRAPH QString::fromLatin1("CALLER_GRAPH")
#define STR_HTML_COLORSTYLE_HUE QString::fromLatin1("HTML_COLORSTYLE_HUE")
#define STR_HTML_COLORSTYLE_SAT QString::fromLatin1("HTML_COLORSTYLE_SAT")
#define STR_HTML_COLORSTYLE_GAMMA QString::fromLatin1("HTML_COLORSTYLE_GAMMA")
static bool g_optimizeMapping[6][6] =
{
......@@ -76,7 +94,7 @@ static QString g_optimizeOptionNames[6] =
static bool stringVariantToBool(const QVariant &v)
{
QString s = v.toString().toLower();
return s==QString::fromAscii("yes") || s==QString::fromAscii("true") || s==QString::fromAscii("1");
return s==QString::fromLatin1("yes") || s==QString::fromLatin1("true") || s==QString::fromLatin1("1");
}
static bool getBoolOption(
......@@ -111,7 +129,7 @@ static void updateBoolOption(
bool bOld = stringVariantToBool(option->value());
if (bOld!=bNew)
{
option->value()=QString::fromAscii(bNew ? "true" : "false");
option->value()=QString::fromLatin1(bNew ? "true" : "false");
option->update();
}
}
......@@ -124,7 +142,7 @@ static void updateIntOption(
int iOld = option->value().toInt();
if (iOld!=iNew)
{
option->value()=QString::fromAscii("%1").arg(iNew);
option->value()=QString::fromLatin1("%1").arg(iNew);
option->update();
}
}
......@@ -148,7 +166,7 @@ TuneColorDialog::TuneColorDialog(int hue,int sat,int gamma,QWidget *parent) : QD
{
setWindowTitle(tr("Tune the color of the HTML output"));
QGridLayout *layout = new QGridLayout(this);
m_image = new QImage(QString::fromAscii(":/images/tunecolor.png"));
m_image = new QImage(QString::fromLatin1(":/images/tunecolor.png"));
m_imageLab = new QLabel;
updateImage(hue,sat,gamma);
layout->addWidget(new QLabel(tr("Example output: use the sliders on the right to adjust the color")),0,0);
......@@ -519,7 +537,7 @@ Step1::Step1(Wizard *wizard,const QHash<QString,Input*> &modelData) : m_wizard(w
m_recursive = new QCheckBox(this);
m_recursive->setText(tr("Scan recursively"));
m_recursive->setChecked(TRUE);
m_recursive->setChecked(true);
layout->addWidget(m_recursive);
//---------------------------------------------------
......@@ -574,7 +592,7 @@ void Step1::selectProjectIcon()
QFile Fout(iconName);
if(!Fout.exists())
{
m_projIconLab->setText(tr("Sorry, cannot find file(")+iconName+QString::fromAscii(");"));
m_projIconLab->setText(tr("Sorry, cannot find file(")+iconName+QString::fromLatin1(");"));
}
else
{
......@@ -585,7 +603,7 @@ void Step1::selectProjectIcon()
}
else
{
m_projIconLab->setText(tr("Sorry, no preview available (")+iconName+QString::fromAscii(");"));
m_projIconLab->setText(tr("Sorry, no preview available (")+iconName+QString::fromLatin1(");"));
}
}
}
......@@ -604,7 +622,7 @@ void Step1::selectSourceDir()
}
if (dirName.isEmpty())
{
dirName=QString::fromAscii(".");
dirName=QString::fromLatin1(".");
}
m_sourceDir->setText(dirName);
}
......@@ -621,7 +639,7 @@ void Step1::selectDestinationDir()
}
if (dirName.isEmpty())
{
dirName=QString::fromAscii(".");
dirName=QString::fromLatin1(".");
}
m_destDir->setText(dirName);
}
......@@ -683,7 +701,7 @@ void Step1::init()
QFile Fout(iconName);
if(!Fout.exists())
{
m_projIconLab->setText(tr("Sorry, cannot find file(")+iconName+QString::fromAscii(");"));
m_projIconLab->setText(tr("Sorry, cannot find file(")+iconName+QString::fromLatin1(");"));
}
else
{
......@@ -694,7 +712,7 @@ void Step1::init()
}
else
{
m_projIconLab->setText(tr("Sorry, no preview available (")+iconName+QString::fromAscii(");"));
m_projIconLab->setText(tr("Sorry, no preview available (")+iconName+QString::fromLatin1(");"));
}
}
}
......@@ -1220,7 +1238,7 @@ Wizard::Wizard(const QHash<QString,Input*> &modelData, QWidget *parent) :
{
m_treeWidget = new QTreeWidget;
m_treeWidget->setColumnCount(1);
m_treeWidget->setHeaderLabels(QStringList() << QString::fromAscii("Topics"));
m_treeWidget->setHeaderLabels(QStringList() << QString::fromLatin1("Topics"));
QList<QTreeWidgetItem*> items;
items.append(new QTreeWidgetItem((QTreeWidget*)0,QStringList(tr("Project"))));
items.append(new QTreeWidgetItem((QTreeWidget*)0,QStringList(tr("Mode"))));
......
##### set CPack properties #####
#
# Good doc/tutorial/example:
# - http://www.cmake.org/Wiki/CMake:CPackPackageGenerators
# - http://www.cmake.org/cmake/help/v3.3/module/CPack.html
# - http://sourceforge.net/p/klusters/klusters/ci/master/tree/CMakeLists.txt
#
# This cmake script should generate same packages (deb,rpm) as:
# - http://mirror.debian.ikoula.com/debian/pool/main/d/doxygen
# - http://archive.ubuntu.com/ubuntu/pool/main/d/doxygen (http://old-releases.ubuntu.com/ubuntu/pool/main/d/doxygen)
# - http://rpmfind.net/linux/rpm2html/search.php?query=doxygen
set(CPACK_STRIP_FILES ON)
set(CPACK_PACKAGE_NAME ${PROJECT_NAME} )
set(CPACK_PACKAGE_VERSION ${VERSION})
set(CPACK_PACKAGE_CONTACT "Dimitri van Heesch")
set(CPACK_PACKAGE_VENDOR "Dimitri van Heesch")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Generate documentation from C, C++, Java, Python and other languages")
set(CPACK_PACKAGE_DESCRIPTION "Doxygen is the de facto standard tool for generating documentation from annotated C++ sources.
But many other popular programming languages are supported:
C, Objective-C, C#, PHP, Java, Python, Fortran, VHDL, Tcl, D (some extent) and IDL (Corba, Microsoft, and UNO/OpenOffice flavors).
.
Three usages:
.
1. Generate documentation from annotated source files to various format:
- On-line documentation (HTML)
- Off-line reference manual (LaTeX, RTF, PostScript, hyperlinked PDF, compressed HTML, Unix man pages)
.
2. Extract the code structure from undocumented source files.
Also generate include dependency graphs, inheritance diagrams, and collaboration diagrams.
Useful to quickly understand code organization in large source distributions.
.
3. Create normal documentation (as the doxygen user manual and web-site http://doxygen.org/)
.
Install the doxygen-latex package to build LaTeX based documents.
Install the libclang1 package to use the 'clang assisted parsing'.")
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
# Variables specific to CPack RPM generator
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
set(CPACK_RPM_PACKAGE_GROUP "Development/Tools")
set(CPACK_RPM_PACKAGE_URL "http://doxygen.org/")
set(CPACK_RPM_PACKAGE_REQUIRES "/sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv, libstdc++ >= 2.96")
set(CPACK_RPM_PACKAGE_SUGGESTS "doxygen-latex, doxygen-doc, doxygen-gui, graphviz, libclang1")
# Variables specific to CPack DEB generator
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://doxygen.org/")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES) #set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libclang1-3.6, libgcc1, libsqlite3-0, libstdc++6, libxapian22")
set(CPACK_DEBIAN_PACKAGE_SUGGESTS "doxygen-latex, doxygen-doc, doxygen-gui, graphviz, libclang1")
set(CPACK_DEBIAN_PACKAGE_CONFLICTS "graphviz (<< 1.12)")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Matthias Klose <doko@debian.org>") # Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
# Variables specific to CPack NSIS generator
set(CPACK_NSIS_MUI_ICON ${CMAKE_CURRENT_SOURCE_DIR}/addon/doxywizard/doxywizard.ico)
set(CPACK_NSIS_URL_INFO_ABOUT "http://doxygen.org/")
set(CPACK_NSIS_PACKAGE_NAME ${PROJECT_NAME})
# Variables specific to CPack DragNDrop generator
set(CPACK_DMG_FORMAT "UDBZ") # UDRO=UDIF-Read-Only, UDZO=zlib, UDBZ=bzip2 -- See hdiutil
set(CPACK_DMG_VOLUME_NAME ${PROJECT_NAME})
set(CPACK_DMG_BACKGROUND_IMAGE ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen_logo.eps)
if(WIN32)
set(CPACK_GENERATOR "ZIP;NSIS")
elseif(APPLE)
set(CPACK_GENERATOR "ZIP;DragNDrop;PackageMaker;Bundle" )
set(CPACK_SYSTEM_NAME "OSX" )
elseif(UNIX)
# Determine distribution and release
execute_process(COMMAND lsb_release -si OUTPUT_VARIABLE distribution OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND lsb_release -sc OUTPUT_VARIABLE release OUTPUT_STRIP_TRAILING_WHITESPACE)
#xecute_process(COMMAND uname -i OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND uname -m OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
if(distribution STREQUAL "Debian" OR distribution STREQUAL "Ubuntu")
set(CPACK_GENERATOR "DEB")
execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
elseif(distribution MATCHES "RedHat.*")
# extract the major version from RedHat full version (e.g. 6.7 --> 6)
execute_process(COMMAND lsb_release -sr COMMAND sed s/[.].*// OUTPUT_VARIABLE redhat_version_major OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}.el${redhat_version_major}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
elseif(distribution MATCHES "openSUSE.*")
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${release}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
elseif(distribution STREQUAL "Fedora")
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.fc${release}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
elseif(distribution STREQUAL "Scientific")
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${release}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
else()
set(CPACK_GENERATOR "RPM;TGZ;STGZ")
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${release}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
endif()
else()
# other operating system (not Windows/Apple/Unix)
endif()
include(${SOURCE}/cmake/version.cmake)
find_program(PYTHON NAMES python)
execute_process(
COMMAND ${PYTHON} ${CMAKE_SOURCE_DIR}/translator.py
)
file (STRINGS "${SOURCE}/VERSION" VERSION)
file (STRINGS "${TOP}/VERSION" VERSION)
set(ENV{VERSION} "${VERSION}")
This diff is collapsed.
#! /bin/sh
#
# $Id: configure,v 1.1 1999/07/19 17:00:15 root Exp $
#
# 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.
#
# shell script to configure doxygen (use for binary releases)
f_prefix=/usr/local
f_insttool=NO
while test -n "$1"; do
case $1 in
--prefix)
shift; f_prefix=$1
;;
--install)
shift; f_insttool=$1
;;
-h | -help | --help)
f_help=y
;;
*)
echo $1: unknown argument
f_help=y
f_error=y
;;
esac
shift
done
if test "$f_help" = y; then
cat <<EOF
Usage: $0 [--help] [--prefix dir] [--install name]
Options:
--help Print this help
--prefix dir Installation prefix directory
[default: /usr/local]
--install name Use \`name' as the name of the GNU install tool
[default: install]
EOF
test "$f_error" = y && exit 1
exit 0;
fi
# - check for install ------------------------------------------------------------
echo -n " Checking for GNU install tool... "
if test "$f_insttool" = NO; then
install_names="ginstall install"
install_dirs="/usr/bin /usr/local/bin /bin /sbin $bin_dirs"
install_prog=NO
install_found=NO
for i in $install_names; do
for j in $install_dirs; do
if test -x "$j/$i"; then
if test -n "`$j/$i --version 2>/dev/null | grep utils`"; then
install_found=YES
install_prog="$j/$i"
break 2
fi
fi
done
done
f_insttool="$install_prog"
fi
if test "$f_insttool" = NO; then
if test "$install_found" = YES; then
echo "GNU version of install is required!"
else
echo "not found!";
fi
echo
exit 2
fi
echo "using $f_insttool";
# ----------------------------------------------------------
cat > .makeconfig <<EOF
RM = rm -f
VERSION = `cat VERSION`
INSTALL = $f_prefix
INSTTOOL = $f_insttool
DOXYDOCS = ..
export TMAKEPATH
EOF
for i in Makefile.in ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
cat > $DST <<EOF
#
# This file was generated from `basename $i` on $TIME
#
EOF
cat .makeconfig $SRC >> $DST
echo " Created $DST from $SRC..."
done
This diff is collapsed.
......@@ -16,7 +16,7 @@ PROJECT_NAME = "Doxygen"
OUTPUT_DIRECTORY = ..
HTML_HEADER =
HTML_FOOTER =
QUIET = NO
QUIET = YES
WARNINGS = YES
DISABLE_INDEX = YES
GENERATE_TREEVIEW = YES
......@@ -34,7 +34,7 @@ ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO
IMAGE_PATH = .
INPUT = index.doc install.doc starting.doc docblocks.doc markdown.doc \
lists.doc grouping.doc formulas.doc diagrams.doc preprocessing.doc \
lists.doc grouping.doc formulas.doc tables.doc diagrams.doc preprocessing.doc \
autolink.doc output.doc searching.doc extsearch.doc customize.doc custcmd.doc \
external.doc faq.doc trouble.doc features.doc \
doxygen_usage.doc doxywizard_usage.doc \
......@@ -54,3 +54,4 @@ HTML_STYLESHEET = doxygen_manual.css
ALIASES = LaTeX="\f$\mbox{\LaTeX}\f$"
ALIASES += TeX="\f$\mbox{\TeX}\f$"
LATEX_BATCHMODE = YES
LATEX_EXTRA_STYLESHEET = manual.sty
......@@ -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 ),
......@@ -203,49 +203,44 @@ 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";
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 flex code is setting LEX_FLAGS with cmake.
Note that by running doxygen with `-d lex` you get information about which flex
codefile is used.
......
......@@ -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
......@@ -77,7 +77,7 @@
'fun(const std::string&,bool)' or '()' to match any prototype.
\par Note 2:
Member function modifiers (like 'const' and 'volatile')
are required to identify the target, i.e. 'func(int) const' and 'fun(int)'
are required to identify the target, i.e. 'func(int) const' and 'func(int)'
target different member functions.
\par Note 3:
For JavaDoc compatibility a \# may be used instead of a :: in
......@@ -110,11 +110,15 @@
patterns 3 and 7 in this case.
\par Example:
\verbinclude autolink.cpp
\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}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\section resolving typedefs
......@@ -126,11 +130,15 @@ typedef struct StructName TypeName
when either StructName itself or TypeName is encountered.
\par Example:
\verbinclude restypedef.cpp
\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}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\htmlonly
Go to the <a href="output.html">next</a> section or return to the
......
This diff is collapsed.
This diff is collapsed.
......@@ -127,24 +127,32 @@ Here are a couple of header files that together show the various diagrams
that doxygen can generate:
<code>diagrams_a.h</code>
\verbinclude diagrams_a.h
\include diagrams_a.h
<code>diagrams_b.h</code>
\verbinclude diagrams_b.h
\include diagrams_b.h
<code>diagrams_c.h</code>
\verbinclude diagrams_c.h
\include diagrams_c.h
<code>diagrams_d.h</code>
\verbinclude diagrams_d.h
\include diagrams_d.h
<code>diagrams_e.h</code>
\verbinclude diagrams_e.h
\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).
\endhtmlonly
\latexonly
\IfFileExists{../html/examples/diagrams/latex/refman_doc.tex}
{
See \hyperlink{diagrams_example}{Diagrams example}
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
......
......@@ -259,9 +259,14 @@ 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
\latexonly
See \hyperlink{afterdoc_example}{After Block example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\warning These blocks can only be used to document \e members and \e parameters.
They cannot be used to document files, classes, unions, structs,
......@@ -275,9 +280,14 @@ 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
\latexonly
See \hyperlink{qtstyle_example}{QT Style example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
The brief descriptions are included in the member overview of a
class, namespace or file and are printed using a small italic font
......@@ -305,9 +315,14 @@ 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
\latexonly
See \hyperlink{jdstyle_example}{Javadoc Style example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
Similarly, if one wishes the first sentence of a Qt style documentation
block to automatically be treated as a brief description, one may set
......@@ -381,9 +396,14 @@ 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
\latexonly
See \hyperlink{structcmd_example}{Structural Commands example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
Because each comment block in the example above contains a structural command, all
the comment blocks could be moved to another location or input file
......@@ -409,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
......@@ -421,9 +441,14 @@ 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
\latexonly
See \hyperlink{python_example}{Python Docstring example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
Note that in this case none of doxygen's \ref cmd_intro "special commands"
are supported.
......@@ -437,9 +462,14 @@ 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
\latexonly
See \hyperlink{py_example}{Python example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
Since python looks more like Java than like C or C++, you should set
\ref cfg_optimize_output_java "OPTIMIZE_OUTPUT_JAVA" to \c YES in the
......@@ -462,9 +492,14 @@ 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
\latexonly
See \hyperlink{vhdl_example}{VHDL example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
To get proper looking output you need to set
\ref cfg_optimize_output_vhdl "OPTIMIZE_OUTPUT_VHDL" to \c YES in the
......@@ -571,9 +606,14 @@ 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
\latexonly
See \hyperlink{tcl_example}{TCL example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\section docstructure Anatomy of a comment block
......@@ -601,15 +641,15 @@ Markdown is designed to be very easy to read and write.
It's formatting is inspired by plain text mail.
Markdown works great for simple, generic formatting, like an introduction
page for your project. Doxygen also supports reading of markdown files
directly. See \ref markdown "here" for more details regards Markdown support.
directly. For more details see chapter \ref markdown.
For programming language specific formatting doxygen has two
forms of additional markup on top of Markdown formatting.
1. <a href="http://en.wikipedia.org/wiki/Javadoc">Javadoc</a> like markup.
See \ref cmd_intro "here" for a complete overview of all commands supported by doxygen.
See \ref commands for a complete overview of all commands supported by doxygen.
2. <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)#XML_documentation_system">XML</a> markup
as specified in the C# standard. See \ref xmlcmds "here" for the XML commands supported by doxygen.
as specified in the C# standard. See \ref xmlcmds for the XML commands supported by doxygen.
If this is still not enough doxygen also supports a \ref htmlcmds "subset" of
the <a href="http://en.wikipedia.org/wiki/HTML">HTML</a> markup language.
......
.TH DOXYGEN "1" "DATE" "doxygen VERSION" "User Commands"
.TH DOXYGEN "1" "@DATE@" "doxygen @VERSION@" "User Commands"
.SH NAME
doxygen \- documentation system for various programming languages
.SH DESCRIPTION
......@@ -45,6 +45,6 @@ doxygen \fB\-e\fR rtf extensionsFile
If \fB\-s\fR is specified the comments in the config file will be omitted.
If configName is omitted `Doxyfile' will be used as a default.
.SH AUTHOR
Doxygen version VERSION, Copyright Dimitri van Heesch 1997-2015
Doxygen version @VERSION@, Copyright Dimitri van Heesch 1997-2015
.SH SEE ALSO
doxywizard(1).
This diff is collapsed.
This diff is collapsed.
......@@ -12,6 +12,7 @@
% Documents produced by Doxygen are derivative works derived from the
% input used in their production; they are not affected by this license.
\batchmode
\documentclass{book}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{makeidx}
......@@ -28,6 +29,8 @@
\usepackage{textcomp}
\usepackage[nointegrals]{wasysym}
\usepackage{alltt}
\usepackage{import}
\usepackage[titletoc]{appendix}
\usepackage{ifpdf}
\ifpdf
\usepackage[pdftex,
......@@ -53,6 +56,7 @@
\usepackage[titles]{tocloft}
\usepackage{amssymb}
\usepackage{doxygen}
\usepackage{manual}
\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left }
\makeindex
......@@ -65,19 +69,22 @@
\newcommand{\thisyear}{\the\year}
\hfuzz=15pt
\setlength{\emergencystretch}{15pt}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.2cm}
\hbadness=750
\tolerance=750
\begin{document}
\pagenumbering{alph}
\begin{titlepage}
\includegraphics[width=\textwidth]{doxygen_logo}
\begin{center}
Manual for version $VERSION\\[2ex]
Manual for version @VERSION@\\[2ex]
Written by Dimitri van Heesch\\[2ex]
\copyright 1997-\thisyear
\end{center}
\end{titlepage}
\pagenumbering{Roman}
\clearemptydoublepage
\pagenumbering{Roman}
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
......@@ -90,6 +97,7 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Lists}\label{lists}\hypertarget{lists}{}\input{lists}
\chapter{Grouping}\label{grouping}\hypertarget{grouping}{}\input{grouping}
\chapter{Including Formulas}\label{formulas}\hypertarget{formulas}{}\input{formulas}
\chapter{Including Tables}\label{tables}\hypertarget{tables}{}\input{tables}
\chapter{Graphs and diagrams}\label{diagrams}\hypertarget{diagrams}{}\input{diagrams}
\chapter{Preprocessing}\label{preprocessing}\hypertarget{preprocessing}{}\input{preprocessing}
\chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
......@@ -112,5 +120,69 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Doxygen's internals}\label{arch}\hypertarget{arch}{}\input{arch}
\chapter{Perl Module Output format}\label{perlmod}\hypertarget{perlmod}{}\input{perlmod}
\chapter{Internationalization}\label{langhowto}\hypertarget{langhowto}{}\input{langhowto}
\renewcommand{\thepart}{}
\part{Appendices}
\appendix
%mean that subinputfrom requires a / at the end of the path
\chapter{Autolink Example}\label{autolink_example}\hypertarget{autolink_example}{}
\subinputfrom{../html/examples/autolink/latex/}{refman_doc}
\chapter{Resolving Typedef Example}\label{restypedef_example}\hypertarget{restypedef_example}{}
\subinputfrom{../html/examples/restypedef/latex/}{refman_doc}
\IfFileExists{../html/examples/diagrams/latex/refman_doc.tex}
{
\chapter{Diagrams Example}\label{diagrams_example}\hypertarget{diagrams_example}{}
\subinputfrom{../html/examples/diagrams/latex/}{refman_doc}
}{}
\chapter{Modules Example}\label{modules_example}\hypertarget{modules_example}{}
\subinputfrom{../html/examples/group/latex/}{refman_doc}
\chapter{Member Groups Example}\label{memgrp_example}\hypertarget{memgrp_example}{}
\subinputfrom{../html/examples/memgrp/latex/}{refman_doc}
\chapter{After Block Example}\label{afterdoc_example}\hypertarget{afterdoc_example}{}
\subinputfrom{../html/examples/afterdoc/latex/}{refman_doc}
\chapter{QT Style Example}\label{qtstyle_example}\hypertarget{qtstyle_example}{}
\subinputfrom{../html/examples/qtstyle/latex/}{refman_doc}
\chapter{Javadoc Style Example}\label{jdstyle_example}\hypertarget{jdstyle_example}{}
\subinputfrom{../html/examples/jdstyle/latex/}{refman_doc}
\chapter{Structural Commands Example}\label{structcmd_example}\hypertarget{structcmd_example}{}
\subinputfrom{../html/examples/structcmd/latex/}{refman_doc}
\chapter{Python Docstring Example}\label{python_example}\hypertarget{python_example}{}
\subinputfrom{../html/examples/docstring/latex/}{refman_doc}
\chapter{Python Example}\label{py_example}\hypertarget{py_example}{}
\subinputfrom{../html/examples/pyexample/latex/}{refman_doc}
\chapter{VHDL Example}\label{vhdl_example}\hypertarget{vhdl_example}{}
\subinputfrom{../html/examples/mux/latex/}{refman_doc}
\chapter{Tcl Example}\label{tcl_example}\hypertarget{tcl_example}{}
\subinputfrom{../html/examples/tclexample/latex/}{refman_doc}
\chapter{Class Example}\label{class_example}\hypertarget{class_example}{}
\subinputfrom{../html/examples/class/latex/}{refman_doc}
\chapter{Define Example}\label{define_example}\hypertarget{define_example}{}
\subinputfrom{../html/examples/define/latex/}{refman_doc}
\chapter{Enum Example}\label{enum_example}\hypertarget{enum_example}{}
\subinputfrom{../html/examples/enum/latex/}{refman_doc}
\chapter{Example Example}\label{example_example}\hypertarget{example_example}{}
\subinputfrom{../html/examples/example/latex/}{refman_doc}
\chapter{Extends/Implements Example}\label{extends_example}\hypertarget{extends_example}{}
\subinputfrom{../html/examples/manual/latex/}{refman_doc}
\chapter{File Example}\label{file_example}\hypertarget{file_example}{}
\subinputfrom{../html/examples/file/latex/}{refman_doc}
\chapter{Fn Example}\label{fn_example}\hypertarget{fn_example}{}
\subinputfrom{../html/examples/func/latex/}{refman_doc}
\chapter{Overload Example}\label{overload_example}\hypertarget{overload_example}{}
\subinputfrom{../html/examples/overload/latex/}{refman_doc}
\chapter{Page Example}\label{page_example}\hypertarget{page_example}{}
\subinputfrom{../html/examples/page/latex/}{refman_doc}
\chapter{Relates Example}\label{relates_example}\hypertarget{relates_example}{}
\subinputfrom{../html/examples/relates/latex/}{refman_doc}
\chapter{Author Example}\label{author_example}\hypertarget{author_example}{}
\subinputfrom{../html/examples/author/latex/}{refman_doc}
\chapter{Par Example}\label{par_example}\hypertarget{par_example}{}
\subinputfrom{../html/examples/par/latex/}{refman_doc}
\chapter{Include Example}\label{include_example}\hypertarget{include_example}{}
\subinputfrom{../html/examples/include/latex/}{refman_doc}
\printindex
\end{document}
.TH DOXYINDEXER "1" "DATE" "doxyindexer VERSION" "User Commands"
.TH DOXYINDEXER "1" "@DATE@" "doxyindexer @VERSION@" "User Commands"
.SH NAME
doxyindexer \- creates a search index from raw search data
.SH SYNOPSIS
......
.TH DOXYSEARCH "1" "DATE" "doxysearch.cgi VERSION" "User Commands"
.TH DOXYSEARCH "1" "@DATE@" "doxysearch.cgi @VERSION@" "User Commands"
.SH NAME
doxysearch.cgi \- search engine used for searching in doxygen documentation.
.SH SYNOPSIS
......
.TH DOXYWIZARD "1" "DATE" "doxywizard VERSION" "User Commands"
.TH DOXYWIZARD "1" "@DATE@" "doxywizard @VERSION@" "User Commands"
.SH NAME
doxywizard \- a tool to configure and run doxygen on your source files
.SH SYNOPSIS
......
......@@ -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
......
......@@ -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?
......
......@@ -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
......
......@@ -105,7 +105,7 @@ file <code>formula.repository</code> that is written to the html directory to
get rid of an incorrect formula.
\htmlonly
Go to the <a href="diagrams.html">next</a> section or return to the
Go to the <a href="tables.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
......
......@@ -135,12 +135,17 @@ files to define the hierarchy and \ref cmdweakgroup "\\weakgroup"
in .c files without having to duplicate the hierarchy exactly.
\par Example:
\verbinclude group.cpp
\include group.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/group/html/modules.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
</p>
Click <a href="examples/group/html/modules.html">here</a>
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
\latexonly
See \hyperlink{modules_example}{Modules example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
\section memgroup Member Groups
......@@ -188,12 +193,17 @@ you should put a \ref cmdnosubgrouping "\\nosubgrouping" command inside the
documentation of the class.
\par Example:
\verbinclude memgrp.cpp
\include memgrp.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/memgrp/html/class_test.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
</p>
Click <a href="examples/memgrp/html/class_test.html">here</a>
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
\latexonly
See \hyperlink{memgrp_example}{Member Groups example}
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
Here Group1 is displayed as a subsection of the "Public Members". And
Group2 is a separate section because it contains members with
......@@ -216,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
*/
......@@ -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:
......@@ -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
......
......@@ -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
......@@ -81,7 +81,7 @@ TranslatorIndonesian
Hendy Irawan: ceefour at gauldong dot net
TranslatorItalian
Alessandro Falappa: alessandro at falappa dot net
Alessandro Falappa: alex dot falappa at gmail dot com
Ahmed Aldo Faisal: aaf23 at cam dot ac dot uk
TranslatorJapanese
......
% Use helvetica font instead of times roman
\RequirePackage{helvet}
\RequirePackage{sectsty}
\RequirePackage{tocloft}
\providecommand{\rmdefault}{phv}
\providecommand{\bfdefault}{bc}
\usepackage[T1]{fontenc}
% Setup fancy headings
\RequirePackage{fancyhdr}
\pagestyle{fancyplain}
\newcommand{\clearemptydoublepage}{%
\newpage{\pagestyle{empty}\cleardoublepage}%
}
\renewcommand{\chaptermark}[1]{%
\markboth{#1}{}%
}
\renewcommand{\sectionmark}[1]{%
\markright{\thesection\ #1}%
}
\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
\fancyhead[CE]{\fancyplain{}{}}
\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
\fancyhead[CO]{\fancyplain{}{}}
\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
\fancyfoot[LE]{\fancyplain{}{}}
\fancyfoot[CE]{\fancyplain{}{}}
\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen @VERSION@ }}
\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen @VERSION@ }}
\fancyfoot[CO]{\fancyplain{}{}}
\fancyfoot[RO]{\fancyplain{}{}}
% Define caption that is also suitable in a table
\makeatletter
\def\doxyfigcaption{%
\refstepcounter{figure}%
\@dblarg{\@caption{figure}}}
\makeatother
......@@ -337,6 +337,8 @@ which will look as follows:
| 10 | 10 | 10 |
| 1000 | 1000 | 1000 |
For more complex tables in doxygen please have a look at: \ref tables
\subsection md_fenced Fenced Code Blocks
Another feature defined by "Markdown Extra" is support for
......@@ -437,7 +439,7 @@ details).
By default the name and title of the page are derived from the file name.
If the file starts with a level 1 header however, it is used as the title
of the page. If you specify a label for the
header (as shown \ref md_header_id "here") doxygen will use that as the
header (as shown in \ref md_header_id) doxygen will use that as the
page name.
If the label is called `index` or `mainpage` doxygen will put the
......@@ -509,7 +511,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.
......
......@@ -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 &quot;Perl Module output format&quot;. 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`.
......
......@@ -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.
......
/******************************************************************************
*
*
*
* 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.
*
*/
/*! \page tables Including tables
Doxygen supports two ways to put tables in the documentation.
The easiest is to use the Markdown format as shown in @ref markdown_extra section @ref md_tables.
Although this format is easy to use and read, it is also rather limited.
It supports only a simple grid of cells, while each cell is a
single line of plain text.
For more complex tables the HTML syntax can be used. Doxygen
will process such tables and translate them to the various output formats
(at least for the formats that do support tables such as HTML and \LaTeX).
Here is an example of a complex table:
\verbatim
<table>
<caption id="multi_row">Complex table</caption>
<tr><th>Column 1 <th>Column 2 <th>Column 3
<tr><td rowspan="2">cell row=1+2,col=1<td>cell row=1,col=2<td>cell row=1,col=3
<tr><td rowspan="2">cell row=2+3,col=2 <td>cell row=2,col=3
<tr><td>cell row=3,col=1 <td rowspan="2">cell row=3+4,col=3
<tr><td colspan="2">cell row=4,col=1+2
<tr><td>cell row=5,col=1 <td colspan="2">cell row=5,col=2+3
<tr><td colspan="2" rowspan="2">cell row=6+7,col=1+2 <td>cell row=6,col=3
<tr> <td>cell row=7,col=3
<tr><td>cell row=8,col=1 <td>cell row=8,col=2\n
<table>
<tr><td>Inner cell row=1,col=1<td>Inner cell row=1,col=2
<tr><td>Inner cell row=2,col=1<td>Inner cell row=2,col=2
</table>
<td>cell row=8,col=3
<ul>
<li>Item 1
<li>Item 2
</ul>
</table>
\endverbatim
It has a caption, table heading, various row and column spans,
a nested table as one of the cells, and a item list in another cell.
Note that the end tags (like `</td>`) are left out in the example above.
This is allowed, and in the HTML output doxygen will add the end tags again.
The output will look as follows:
<table>
<caption id="multi_row">Complex table</caption>
<tr><th>Column 1 <th>Column 2 <th>Column 3
<tr><td rowspan="2">cell row=1+2,col=1<td>cell row=1,col=2<td>cell row=1,col=3
<tr><td rowspan="2">cell row=2+3,col=2 <td>cell row=2,col=3
<tr><td>cell row=3,col=1 <td rowspan="2">cell row=3+4,col=3
<tr><td colspan="2">cell row=4,col=1+2
<tr><td>cell row=5,col=1 <td colspan="2">cell row=5,col=2+3
<tr><td colspan="2" rowspan="2">cell row=6+7,col=1+2 <td>cell row=6,col=3
<tr> <td>cell row=7,col=3
<tr><td>cell row=8,col=1 <td>cell row=8,col=2\n
<table>
<tr><td>Inner cell row=1,col=1<td>Inner cell row=1,col=2
<tr><td>Inner cell row=2,col=1<td>Inner cell row=2,col=2
</table>
<td>cell row=8,col=3
<ul>
<li>Item 1
<li>Item 2
</ul>
</table>
One can refer to the caption of the table using \ref cmdref "\\ref" using the caption's
id as the label.
\htmlonly
Go to the <a href="diagrams.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
......@@ -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).
......@@ -91,7 +91,7 @@ def xopen(fname, mode='r', encoding='utf-8-sig'):
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 +159,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 +727,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 +738,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 +1234,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 +1484,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 +1814,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 +1833,7 @@ class TrManager:
</td>
</tr>
</table>
<p>
\\endhtmlonly
'''
htmlTableTpl = textwrap.dedent(htmlTableTpl)
......@@ -1845,7 +1847,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 +1882,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>\\[.*?\\])')
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*! A test class */
class Test
class Afterdoc_Test
{
public:
/** An enum type.
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File mode changed from 100644 to 100755
This diff is collapsed.
This diff is collapsed.
File mode changed from 100644 to 100755
This diff is collapsed.
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
This diff is collapsed.
File mode changed from 100644 to 100755
This diff is collapsed.
This diff is collapsed.
File mode changed from 100644 to 100755
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File mode changed from 100644 to 100755
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment