diff options
40 files changed, 838 insertions, 849 deletions
@@ -13,5 +13,3 @@ /doxygen_docs /doxygen.tag - - diff --git a/.travis.yml b/.travis.yml index b6976ba..bcfe2c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: cpp compiler: - gcc before_install: + - sudo add-apt-repository ppa:texlive-backports/ppa -y - sudo apt-get update -qq - sudo apt-get install -qq texlive texlive-extra-utils texlive-latex-extra libxml2-utils - wget -qO- http://www.cmake.org/files/v3.1/cmake-3.1.0-Linux-x86_64.tar.gz | tar xvz @@ -11,5 +12,5 @@ script: - cd build - ../cmake-3.1.0-Linux-x86_64/bin/cmake -G "Unix Makefiles" -Dbuild_doc=ON -Dbuild_wizard=ON .. - make - - make docs - make tests + - make docs diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f71cf..3695093 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") @@ -66,8 +67,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") diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt index d81d2e0..eb97388 100644 --- a/addon/doxywizard/CMakeLists.txt +++ b/addon/doxywizard/CMakeLists.txt @@ -1,5 +1,40 @@ 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 @@ -11,9 +46,9 @@ 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}) +if (NOT Qt5Core_FOUND) + include(${QT_USE_FILE}) +endif() # generate settings.h file(GENERATE OUTPUT ${GENERATED_SRC_WIZARD}/settings.h @@ -43,7 +78,7 @@ set_source_files_properties(${GENERATED_SRC_WIZARD}/configdoc.cpp PROPERTIES GEN FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "-Pconfig_doxywYY") -QT4_WRAP_CPP(doxywizard_MOC +qt_wrap_cpp(doxywizard_MOC doxywizard.h expert.h helplabel.h @@ -54,7 +89,7 @@ inputstrlist.h wizard.h ) -QT4_ADD_RESOURCES(doxywizard_RESOURCES_RCC doxywizard.qrc) +qt_add_resources(doxywizard_RESOURCES_RCC doxywizard.qrc) add_executable(doxywizard WIN32 doxywizard.cpp @@ -71,6 +106,7 @@ ${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_QTMAIN_LIBRARY} ) diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l index 829f807..90bd09e 100644 --- a/addon/doxywizard/config_doxyw.l +++ b/addon/doxywizard/config_doxyw.l @@ -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 << "\""; diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 4c577cd..e292d0c 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -1,9 +1,28 @@ -#include <QtGui> #include "doxywizard.h" #include "version.h" #include "expert.h" #include "wizard.h" +#include <QMenu> +#include <QMenuBar> +#include <QPushButton> +#include <QMessageBox> +#include <QVBoxLayout> +#include <QLineEdit> +#include <QLabel> +#include <QTextEdit> +#include <QStatusBar> +#include <QProcess> +#include <QTimer> +#include <QCloseEvent> +#include <QApplication> +#include <QDir> +#include <QFileDialog> +#include <QDesktopServices> +#include <QUrl> +#include <QTextStream> +#include <QDebug> + #ifdef WIN32 #include <windows.h> #endif @@ -19,7 +38,7 @@ MainWindow &MainWindow::instance() } MainWindow::MainWindow() - : m_settings(QString::fromAscii("Doxygen.org"), QString::fromAscii("Doxywizard")) + : m_settings(QString::fromLatin1("Doxygen.org"), QString::fromLatin1("Doxywizard")) { QMenu *file = menuBar()->addMenu(tr("File")); file->addAction(tr("Open..."), @@ -84,7 +103,7 @@ MainWindow::MainWindow() QGridLayout *grid = new QGridLayout; m_outputLog = new QTextEdit; m_outputLog->setReadOnly(true); - m_outputLog->setFontFamily(QString::fromAscii("courier")); + m_outputLog->setFontFamily(QString::fromLatin1("courier")); m_outputLog->setMinimumWidth(600); grid->addWidget(m_outputLog,0,0); grid->setColumnStretch(0,1); @@ -183,16 +202,16 @@ void MainWindow::updateWorkingDir() void MainWindow::manual() { - QDesktopServices::openUrl(QUrl(QString::fromAscii("http://www.doxygen.org/manual.html"))); + QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual.html"))); } void MainWindow::about() { QString msg; QTextStream t(&msg,QIODevice::WriteOnly); - t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+ - QString::fromAscii(versionString)+ - QString::fromAscii(" on your source files.</center><p><br>" + t << QString::fromLatin1("<qt><center>A tool to configure and run doxygen version ")+ + QString::fromLatin1(versionString)+ + QString::fromLatin1(" on your source files.</center><p><br>" "<center>Written by<br> Dimitri van Heesch<br>© 2000-2015</center><p>" "</qt>"); QMessageBox::about(this,tr("Doxygen GUI"),msg); @@ -273,7 +292,7 @@ bool MainWindow::saveConfig() bool MainWindow::saveConfigAs() { QString fileName = QFileDialog::getSaveFileName(this, QString(), - m_workingDir->text()+QString::fromAscii("/Doxyfile")); + m_workingDir->text()+QString::fromLatin1("/Doxyfile")); if (fileName.isEmpty()) return false; saveConfig(fileName); return true; @@ -289,7 +308,7 @@ void MainWindow::makeDefaults() { //printf("MainWindow:makeDefaults()\n"); m_expert->saveSettings(&m_settings); - m_settings.setValue(QString::fromAscii("wizard/loadsettings"), true); + m_settings.setValue(QString::fromLatin1("wizard/loadsettings"), true); m_settings.sync(); } } @@ -306,7 +325,7 @@ void MainWindow::clearRecent() m_recentFiles.clear(); for (int i=0;i<MAX_RECENT_FILES;i++) { - m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromAscii("")); + m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromLatin1("")); } m_settings.sync(); } @@ -323,7 +342,7 @@ void MainWindow::resetToDefaults() { //printf("MainWindow:resetToDefaults()\n"); m_expert->resetToDefaults(); - m_settings.setValue(QString::fromAscii("wizard/loadsettings"), false); + m_settings.setValue(QString::fromLatin1("wizard/loadsettings"), false); m_settings.sync(); m_wizard->refresh(); } @@ -331,11 +350,11 @@ void MainWindow::resetToDefaults() void MainWindow::loadSettings() { - QVariant geometry = m_settings.value(QString::fromAscii("main/geometry"), QVariant::Invalid); - QVariant state = m_settings.value(QString::fromAscii("main/state"), QVariant::Invalid); - QVariant wizState = m_settings.value(QString::fromAscii("wizard/state"), QVariant::Invalid); - QVariant loadSettings = m_settings.value(QString::fromAscii("wizard/loadsettings"), QVariant::Invalid); - QVariant workingDir = m_settings.value(QString::fromAscii("wizard/workingdir"), QVariant::Invalid); + QVariant geometry = m_settings.value(QString::fromLatin1("main/geometry"), QVariant::Invalid); + QVariant state = m_settings.value(QString::fromLatin1("main/state"), QVariant::Invalid); + QVariant wizState = m_settings.value(QString::fromLatin1("wizard/state"), QVariant::Invalid); + QVariant loadSettings = m_settings.value(QString::fromLatin1("wizard/loadsettings"), QVariant::Invalid); + QVariant workingDir = m_settings.value(QString::fromLatin1("wizard/workingdir"), QVariant::Invalid); if (geometry !=QVariant::Invalid) restoreGeometry(geometry.toByteArray()); if (state !=QVariant::Invalid) restoreState (state.toByteArray()); @@ -362,12 +381,12 @@ void MainWindow::loadSettings() void MainWindow::saveSettings() { - QSettings settings(QString::fromAscii("Doxygen.org"), QString::fromAscii("Doxywizard")); + QSettings settings(QString::fromLatin1("Doxygen.org"), QString::fromLatin1("Doxywizard")); - m_settings.setValue(QString::fromAscii("main/geometry"), saveGeometry()); - m_settings.setValue(QString::fromAscii("main/state"), saveState()); - m_settings.setValue(QString::fromAscii("wizard/state"), m_wizard->saveState()); - m_settings.setValue(QString::fromAscii("wizard/workingdir"), m_workingDir->text()); + m_settings.setValue(QString::fromLatin1("main/geometry"), saveGeometry()); + m_settings.setValue(QString::fromLatin1("main/state"), saveState()); + m_settings.setValue(QString::fromLatin1("wizard/state"), m_wizard->saveState()); + m_settings.setValue(QString::fromLatin1("wizard/workingdir"), m_workingDir->text()); } void MainWindow::selectTab(int id) @@ -405,7 +424,7 @@ void MainWindow::addRecentFile(const QString &fileName) } for (;i<MAX_RECENT_FILES;i++) { - m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromAscii("")); + m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromLatin1("")); } } @@ -423,19 +442,19 @@ void MainWindow::runDoxygen() { QString doxygenPath; #if defined(Q_OS_MACX) - doxygenPath = qApp->applicationDirPath()+QString::fromAscii("/../Resources/"); + doxygenPath = qApp->applicationDirPath()+QString::fromLatin1("/../Resources/"); qDebug() << tr("Doxygen path: ") << doxygenPath; - if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() ) + if ( !QFile(doxygenPath + QString::fromLatin1("doxygen")).exists() ) { // No Doxygen binary in the resources, if there is a system Doxygen binary, use that instead - if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() ) + if ( QFile(QString::fromLatin1("/usr/local/bin/doxygen")).exists() ) { - doxygenPath = QString::fromAscii("/usr/local/bin/"); + doxygenPath = QString::fromLatin1("/usr/local/bin/"); } else { qDebug() << tr("Can't find the doxygen command, make sure it's in your $$PATH"); - doxygenPath = QString::fromAscii(""); + doxygenPath = QString::fromLatin1(""); } } qDebug() << tr("Getting doxygen from: ") << doxygenPath; @@ -446,20 +465,20 @@ void MainWindow::runDoxygen() m_runProcess->setWorkingDirectory(m_workingDir->text()); QStringList env=QProcess::systemEnvironment(); // set PWD environment variable to m_workingDir - env.replaceInStrings(QRegExp(QString::fromAscii("^PWD=(.*)"),Qt::CaseInsensitive), - QString::fromAscii("PWD=")+m_workingDir->text()); + env.replaceInStrings(QRegExp(QString::fromLatin1("^PWD=(.*)"),Qt::CaseInsensitive), + QString::fromLatin1("PWD=")+m_workingDir->text()); m_runProcess->setEnvironment(env); QStringList args; - args << QString::fromAscii("-b"); // make stdout unbuffered - args << QString::fromAscii("-"); // read config from stdin + args << QString::fromLatin1("-b"); // make stdout unbuffered + args << QString::fromLatin1("-"); // read config from stdin m_outputLog->clear(); - m_runProcess->start(doxygenPath + QString::fromAscii("doxygen"), args); + m_runProcess->start(doxygenPath + QString::fromLatin1("doxygen"), args); if (!m_runProcess->waitForStarted()) { - m_outputLog->append(QString::fromAscii("*** Failed to run doxygen\n")); + m_outputLog->append(QString::fromLatin1("*** Failed to run doxygen\n")); return; } QTextStream t(m_runProcess); @@ -468,7 +487,7 @@ void MainWindow::runDoxygen() if (m_runProcess->state() == QProcess::NotRunning) { - m_outputLog->append(QString::fromAscii("*** Failed to run doxygen\n")); + m_outputLog->append(QString::fromLatin1("*** Failed to run doxygen\n")); } else { @@ -536,10 +555,10 @@ void MainWindow::showHtmlOutput() QFileInfo fi(indexFile); // TODO: the following doesn't seem to work with IE #ifdef WIN32 - //QString indexUrl(QString::fromAscii("file:///")); + //QString indexUrl(QString::fromLatin1("file:///")); ShellExecute(NULL, L"open", (LPCWSTR)fi.absoluteFilePath().utf16(), NULL, NULL, SW_SHOWNORMAL); #else - QString indexUrl(QString::fromAscii("file://")); + QString indexUrl(QString::fromLatin1("file://")); indexUrl+=fi.absoluteFilePath(); QDesktopServices::openUrl(QUrl(indexUrl)); #endif @@ -549,7 +568,7 @@ void MainWindow::saveLog() { QString fn = QFileDialog::getSaveFileName(this, tr("Save log file"), m_workingDir->text()+ - QString::fromAscii("/doxygen_log.txt")); + QString::fromLatin1("/doxygen_log.txt")); if (!fn.isEmpty()) { QFile f(fn); @@ -589,11 +608,11 @@ void MainWindow::updateTitle() QString title = tr("Doxygen GUI frontend"); if (m_modified) { - title+=QString::fromAscii(" +"); + title+=QString::fromLatin1(" +"); } if (!m_fileName.isEmpty()) { - title+=QString::fromAscii(" (")+m_fileName+QString::fromAscii(")"); + title+=QString::fromLatin1(" (")+m_fileName+QString::fromLatin1(")"); } setWindowTitle(title); } diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp index 3a03c69..66a0955 100644 --- a/addon/doxywizard/expert.cpp +++ b/addon/doxywizard/expert.cpp @@ -1,5 +1,3 @@ -#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(); diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp index ec2035a..ef71dd9 100644 --- a/addon/doxywizard/inputbool.cpp +++ b/addon/doxywizard/inputbool.cpp @@ -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")); } diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp index 8fa46e8..a57e7f4 100644 --- a/addon/doxywizard/inputint.cpp +++ b/addon/doxywizard/inputint.cpp @@ -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(); } diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp index 75de0b5..7fb6ec3 100644 --- a/addon/doxywizard/inputstring.cpp +++ b/addon/doxywizard/inputstring.cpp @@ -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(");")); } } } diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp index 777af6a..660ce40 100644 --- a/addon/doxywizard/inputstrlist.cpp +++ b/addon/doxywizard/inputstrlist.cpp @@ -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); } } diff --git a/addon/doxywizard/wizard.cpp b/addon/doxywizard/wizard.cpp index a8b7f94..b320aaa 100644 --- a/addon/doxywizard/wizard.cpp +++ b/addon/doxywizard/wizard.cpp @@ -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")))); diff --git a/cmake/run_translator.cmake b/cmake/run_translator.cmake index 618bb82..d1b187c 100644 --- a/cmake/run_translator.cmake +++ b/cmake/run_translator.cmake @@ -1,4 +1,4 @@ -include(${SOURCE}/cmake/version.cmake) +include(${TOP}/cmake/version.cmake) find_program(PYTHON NAMES python) execute_process( COMMAND ${PYTHON} ${CMAKE_SOURCE_DIR}/translator.py diff --git a/cmake/version.cmake b/cmake/version.cmake index 48de7b2..b59aa29 100644 --- a/cmake/version.cmake +++ b/cmake/version.cmake @@ -1,2 +1,2 @@ -file (STRINGS "${SOURCE}/VERSION" VERSION) +file (STRINGS "${TOP}/VERSION" VERSION) set(ENV{VERSION} "${VERSION}") diff --git a/doc/.gitignore b/doc/.gitignore index d1d1371..751553b 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,2 +1 @@ *.bak -mailto.txt diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index af557d8..709121e 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,88 +1,173 @@ +# vim:ts=4:sw=4:expandtab:autoindent: +# +# 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. + if (build_doc) +include (${TOP}/cmake/version.cmake) +string(TIMESTAMP DATE "%d-%m-%Y") + +find_package(PythonInterp REQUIRED) find_program(EPSTOPDF NAMES epstopdf ) -find_program(SED NAMES sed ) -find_program(MAKE NAMES make gmake nmake ) +find_program(PDFLATEX NAMES pdflatex ) +find_program(MAKEINDEX NAMES makeindex ) + +if (doxygen_BINARY_DIR) + set(DOXYGEN_EXECUTABLE ${doxygen_BINARY_DIR}/bin/doxygen) +else() + # when building only the doxygen_doc, from the doc/ directory, the + # doxygen project variables are unknown so look for doxygen in PATH + find_package(Doxygen) +endif() -file(GLOB DOC_FILES "*") -file(GLOB LANG_FILES "${CMAKE_SOURCE_DIR}/src/translator_??.h") +set(DOC_INSTALL_DIR "share/doc/packages/doxygen" CACHE STRING "Relative path where to install the documentation") +set(EXAMPLE_DIR ${TOP}/examples) +set(DOC_FILES + arch.doc + archoverview.eps + archoverview.gif + autolink.doc + changelog.doc + commands.doc + custcmd.doc + customize.doc + diagrams.doc + docblocks.doc + Doxyfile + doxygen_manual.css + doxygen_usage.doc + doxywizard_expert.png + doxywizard.gif + doxywizard_main.png + doxywizard_menu.png + doxywizard_page1.png + doxywizard_page2.png + doxywizard_page3.png + doxywizard_page4.png + doxywizard_usage.doc + external.doc + extsearch.doc + extsearch_flow.dot + extsearch_flow.eps + extsearch_flow.png + faq.doc + features.doc + formulas.doc + grouping.doc + htmlcmds.doc + index.doc + index.hhp.txt + infoflow.eps + infoflow.fig + infoflow.png + install.doc + install_prefix + lists.doc + markdown.doc + output.doc + perlmod.doc + perlmod_tree.doc + preprocessing.doc + searching.doc + starting.doc + trouble.doc + xmlcmds.doc + language.tpl + maintainers.txt + translator.py +) +file(GLOB LANG_FILES "${TOP}/src/translator_??.h") file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/man) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src) -file(COPY ${CMAKE_SOURCE_DIR}/src/translator.h DESTINATION ${PROJECT_BINARY_DIR}/src) -file(COPY ${CMAKE_SOURCE_DIR}/src/translator_adapter.h DESTINATION ${PROJECT_BINARY_DIR}/src) -file(COPY ${LANG_FILES} DESTINATION ${PROJECT_BINARY_DIR}/src) -file(COPY ${CMAKE_SOURCE_DIR}/VERSION DESTINATION ${PROJECT_BINARY_DIR}) - -# copy all doc files -add_custom_target(copy_docs) -foreach(doc_file ${DOC_FILES}) - add_custom_command(TARGET copy_docs PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E - copy ${doc_file} ${DOXYDOCS}) +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/doc) + +file(COPY ${TOP}/VERSION DESTINATION ${PROJECT_BINARY_DIR}/) +file(COPY ${TOP}/src/translator.h DESTINATION ${PROJECT_BINARY_DIR}/src/) +file(COPY ${TOP}/src/translator_adapter.h DESTINATION ${PROJECT_BINARY_DIR}/src/) +file(COPY ${LANG_FILES} DESTINATION ${PROJECT_BINARY_DIR}/src/) +file(COPY ${EXAMPLE_DIR} DESTINATION ${PROJECT_BINARY_DIR}/) + +foreach (f ${DOC_FILES}) +add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/doc/${f} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/${f} ${PROJECT_BINARY_DIR}/doc/ + DEPENDS ${CMAKE_SOURCE_DIR}/doc/${f} + ) +set_source_files_properties(${PROJECT_BINARY_DIR}/doc/${f} PROPERTIES GENERATED 1) +list(APPEND OUT_DOC_FILES "${PROJECT_BINARY_DIR}/doc/${f}") endforeach() -add_custom_target(docs - COMMENT "Generating documentation in ${DOXYDOCS}" - COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen - COMMAND ${CMAKE_COMMAND} -E remove_directory ../latex/refman.tex - COMMAND ${CMAKE_COMMAND} -E copy doxygen_logo.gif ../html - COMMAND ${CMAKE_COMMAND} -E copy doxygen_logo_low.gif ../html - COMMAND ${CMAKE_COMMAND} -E copy Makefile.latex ../latex/Makefile - COMMAND ${SED} -e "s/\$VERSION/${VERSION}/g" doxygen_manual.tex > ../latex/doxygen_manual.tex - COMMAND ${SED} -e "s/\$VERSION/${VERSION}/g" doxygen.sty > ../latex/doxygen.sty - COMMAND ${EPSTOPDF} doxygen_logo.eps --outfile=../latex/doxygen_logo.pdf - COMMAND ${MAKE} -C ../latex > latex_out.txt - DEPENDS doxygen copy_docs ${PROJECT_BINARY_DIR}/doc/language.doc config.doc examples - "${PROJECT_BINARY_DIR}/man/doxygen.1" - "${PROJECT_BINARY_DIR}/man/doxywizard.1" - "${PROJECT_BINARY_DIR}/man/doxysearch.1" - "${PROJECT_BINARY_DIR}/man/doxyindexer.1" - WORKING_DIRECTORY ${DOXYDOCS} - VERBATIM - ) - -# language.doc -add_custom_command( - COMMAND ${CMAKE_COMMAND} "-DSOURCE=${CMAKE_SOURCE_DIR}" -P ${CMAKE_SOURCE_DIR}/cmake/run_translator.cmake - DEPENDS ${DOXYDOCS}/translator.py - DEPENDS maintainers.txt language.tpl translator.py - OUTPUT ${PROJECT_BINARY_DIR}/doc/language.doc - WORKING_DIRECTORY ${DOXYDOCS} -) -set_source_files_properties(${DOXYDOCS}/language.doc PROPERTIES GENERATED 1) - -# config.doc -add_custom_command( - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -doc ${CMAKE_SOURCE_DIR}/src/config.xml > config.doc - DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py - OUTPUT config.doc - WORKING_DIRECTORY ${DOXYDOCS} -) -set_source_files_properties(${DOXYDOCS}/config.doc PROPERTIES GENERATED 1) - -string(TIMESTAMP TODAY "%d-%m-%Y") +configure_file(${CMAKE_SOURCE_DIR}/doc/manual.sty ${PROJECT_BINARY_DIR}/doc/manual.sty) +configure_file(${CMAKE_SOURCE_DIR}/doc/doxygen_manual.tex ${PROJECT_BINARY_DIR}/doc/doxygen_manual.tex) +configure_file(${CMAKE_SOURCE_DIR}/doc/doxygen.1 ${PROJECT_BINARY_DIR}/man/doxygen.1) +configure_file(${CMAKE_SOURCE_DIR}/doc/doxywizard.1 ${PROJECT_BINARY_DIR}/man/doxywizard.1) +configure_file(${CMAKE_SOURCE_DIR}/doc/doxysearch.1 ${PROJECT_BINARY_DIR}/man/doxysearch.1) +configure_file(${CMAKE_SOURCE_DIR}/doc/doxyindexer.1 ${PROJECT_BINARY_DIR}/man/doxyindexer.1) +# doc/language.doc (see tag Doxyfile:INPUT) add_custom_command( - COMMAND ${SED} -e "s/DATE/${TODAY}/g" -e "s/VERSION/${VERSION}/g" doxygen.1 > "${PROJECT_BINARY_DIR}/man/doxygen.1" - OUTPUT "${PROJECT_BINARY_DIR}/man/doxygen.1" + COMMAND ${PYTHON_EXECUTABLE} translator.py + DEPENDS ${PROJECT_BINARY_DIR}/doc/maintainers.txt ${PROJECT_BINARY_DIR}/doc/language.tpl ${PROJECT_BINARY_DIR}/doc/translator.py + OUTPUT language.doc + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc ) +set_source_files_properties(language.doc PROPERTIES GENERATED 1) +# doc/config.doc (see tag Doxyfile:INPUT) add_custom_command( - COMMAND ${SED} -e "s/DATE/${TODAY}/g" -e "s/VERSION/${VERSION}/g" doxywizard.1 > "${PROJECT_BINARY_DIR}/man/doxywizard.1" - OUTPUT "${PROJECT_BINARY_DIR}/man/doxywizard.1" + COMMAND ${PYTHON_EXECUTABLE} ${TOP}/src/configgen.py -doc ${TOP}/src/config.xml > config.doc + DEPENDS ${TOP}/src/config.xml ${TOP}/src/configgen.py + OUTPUT config.doc + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc/ ) - -add_custom_command( - COMMAND ${SED} -e "s/DATE/${TODAY}/g" -e "s/VERSION/${VERSION}/g" doxysearch.1 > "${PROJECT_BINARY_DIR}/man/doxysearch.1" - OUTPUT "${PROJECT_BINARY_DIR}/man/doxysearch.1" +set_source_files_properties(config.doc PROPERTIES GENERATED 1) +################################################################################ +add_custom_target(run_doxygen + COMMENT "Generating Latex and HTML documentation." + COMMAND ${DOXYGEN_EXECUTABLE} + DEPENDS ${PROJECT_BINARY_DIR}/doc/language.doc ${PROJECT_BINARY_DIR}/doc/config.doc ${OUT_DOC_FILES} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc/ ) +if (doxygen_BINARY_DIR) + # building from project `doxygen' + add_dependencies(run_doxygen + doxygen + ) +endif() -add_custom_command( - COMMAND ${SED} -e "s/DATE/${TODAY}/g" -e "s/VERSION/${VERSION}/g" doxyindexer.1 > "${PROJECT_BINARY_DIR}/man/doxyindexer.1" - OUTPUT "${PROJECT_BINARY_DIR}/man/doxyindexer.1" +add_custom_target(doxygen_pdf + COMMENT "Generating Doxygen Manual PDF." + COMMAND ${CMAKE_COMMAND} -E remove_directory refman.tex + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/doxygen_manual.tex . + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/manual.sty . + COMMAND ${EPSTOPDF} ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.eps --outfile=doxygen_logo.pdf + COMMAND ${PDFLATEX} doxygen_manual.tex + COMMAND ${MAKEINDEX} doxygen_manual.idx + COMMAND ${PDFLATEX} doxygen_manual.tex + DEPENDS run_doxygen + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/latex ) - +add_custom_target(docs + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.gif ${PROJECT_BINARY_DIR}/html/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/doc/doxygen_logo_low.gif ${PROJECT_BINARY_DIR}/html/ + DEPENDS ${PROJECT_BINARY_DIR}/man/doxygen.1 + ${PROJECT_BINARY_DIR}/man/doxywizard.1 + ${PROJECT_BINARY_DIR}/man/doxysearch.1 + ${PROJECT_BINARY_DIR}/man/doxyindexer.1 + doxygen_pdf + VERBATIM + ) + +################################################################################ install(FILES "${PROJECT_BINARY_DIR}/man/doxygen.1" "${PROJECT_BINARY_DIR}/man/doxywizard.1" @@ -101,4 +186,4 @@ install(DIRECTORY DESTINATION "${CMAKE_INSTALL_PREFIX}/${DOC_INSTALL_DIR}" ) -endif() +endif(build_doc) diff --git a/doc/Doxyfile b/doc/Doxyfile index ab97227..9ea8553 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -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 diff --git a/doc/doxygen.1 b/doc/doxygen.1 index 6861c22..1deb7b6 100644 --- a/doc/doxygen.1 +++ b/doc/doxygen.1 @@ -1,4 +1,4 @@ -.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). diff --git a/doc/doxygen.sty b/doc/doxygen.sty deleted file mode 100644 index 8013dad..0000000 --- a/doc/doxygen.sty +++ /dev/null @@ -1,486 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{doxygen} - -% Packages used by this style file -\RequirePackage{alltt} -\RequirePackage{array} -\RequirePackage{calc} -\RequirePackage{color} -\RequirePackage{fancyhdr} -\RequirePackage{longtable} -\RequirePackage{verbatim} -\RequirePackage{ifthen} -\RequirePackage{xtab} -\RequirePackage{multirow} -\RequirePackage[table]{xcolor} - -% Use helvetica font instead of times roman -\RequirePackage{helvet} -\RequirePackage{sectsty} -\RequirePackage{tocloft} -\providecommand{\rmdefault}{phv} -\providecommand{\bfdefault}{bc} - - -% Setup fancy headings -\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 }} -\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} -\fancyfoot[CO]{\fancyplain{}{}} -\fancyfoot[RO]{\fancyplain{}{}} -%---------- Internal commands used in this style file ---------------- - -\newcommand\tabfill[1]{% - \dimen@\linewidth% - \advance\dimen@\@totalleftmargin% - \advance\dimen@-\dimen\@curtab% - \parbox[t]\dimen@{\raggedright #1\ifhmode\strut\fi}% -} - -\newcommand{\ensurespace}[1]{% - \begingroup - \setlength{\dimen@}{#1}% - \vskip\z@\@plus\dimen@ - \penalty -100\vskip\z@\@plus -\dimen@ - \vskip\dimen@ - \penalty 9999% - \vskip -\dimen@ - \vskip\z@skip % hide the previous |\vskip| from |\addvspace| - \endgroup -} - -% Generic environment used by all paragraph-based environments defined -% below. Note that the command \title{...} needs to be defined inside -% those environments! -\newenvironment{DoxyDesc}[1]{% - \ensurespace{4\baselineskip}% - \begin{list}{}% - {% - \settowidth{\labelwidth}{40pt}% - \setlength{\leftmargin}{\labelwidth}% - \setlength{\parsep}{0pt}% - \setlength{\itemsep}{-4pt}% - \renewcommand{\makelabel}{\entrylabel}% - }% - \item[#1]% -}{% - \end{list}% -} - -%---------- Commands used by doxygen LaTeX output generator ---------- - -% Used by <pre> ... </pre> -\newenvironment{DoxyPre}{% - \small% - \begin{alltt}% -}{% - \end{alltt}% - \normalsize% -} - -% Used by @code ... @endcode -\newenvironment{DoxyCode}{% - - -\begin{scriptsize}\begin{alltt}% -}{% -\end{alltt}\end{scriptsize}% -} - -% Used by @example, @include, @includelineno and @dontinclude -\newenvironment{DoxyCodeInclude}{% - \DoxyCode% -}{% - \endDoxyCode% -} - -% Used by @verbatim ... @endverbatim -\newenvironment{DoxyVerb}{% - \footnotesize% - \verbatim% -}{% - \endverbatim% - \normalsize% -} - -% Used by @verbinclude -\newenvironment{DoxyVerbInclude}{% - \DoxyVerb% -}{% - \endDoxyVerb% -} - -% Used by numbered lists (using '-#' or <ol> ... </ol>) -\newenvironment{DoxyEnumerate}{% - \enumerate% -}{% - \endenumerate% -} - -% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>) -\newenvironment{DoxyItemize}{% - \itemize% -}{% - \enditemize% -} - -% Used by description lists (using <dl> ... </dl>) -\newenvironment{DoxyDescription}{% - \description% -}{% - \enddescription% -} - -% Used by @image, @dotfile, and @dot ... @enddot -% (only if caption is specified) -\newenvironment{DoxyImage}{% - \begin{figure}[H]% - \begin{center}% -}{% - \end{center}% - \end{figure}% -} - -% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc -% (only if no caption is specified) -\newenvironment{DoxyImageNoCaption}{% -}{% -} - -% Used by @attention -\newenvironment{DoxyAttention}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @author and @authors -\newenvironment{DoxyAuthor}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @date -\newenvironment{DoxyDate}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @invariant -\newenvironment{DoxyInvariant}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @note -\newenvironment{DoxyNote}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @post -\newenvironment{DoxyPostcond}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @pre -\newenvironment{DoxyPrecond}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @copyright -\newenvironment{DoxyCopyright}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @remark -\newenvironment{DoxyRemark}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @return -\newenvironment{DoxyReturn}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @since -\newenvironment{DoxySince}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @see -\newenvironment{DoxySeeAlso}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @version -\newenvironment{DoxyVersion}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @warning -\newenvironment{DoxyWarning}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @internal -\newenvironment{DoxyInternal}[1]{% - \paragraph*{#1}% -}{% -} - -% Used by @par and @paragraph -\newenvironment{DoxyParagraph}[1]{% - \begin{list}{}% - {% - \settowidth{\labelwidth}{40pt}% - \setlength{\leftmargin}{\labelwidth}% - \setlength{\parsep}{0pt}% - \setlength{\itemsep}{-4pt}% - \renewcommand{\makelabel}{\entrylabel}% - }% - \item[#1]% -}{% - \end{list}% -} - -% Used by parameter lists -\newenvironment{DoxyParams}[2][]{% - \begin{DoxyDesc}{#2}% - \item[] \hspace{\fill} \vspace{-40pt}% - \settowidth{\labelwidth}{40pt}% - \setlength{\LTleft}{0pt}% - \setlength{\tabcolsep}{0.01\textwidth}% - \ifthenelse{\equal{#1}{}}% - {\begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.815\textwidth}|}}% - {\ifthenelse{\equal{#1}{1}}% - {\begin{longtable}{|>{\centering}p{0.10\textwidth}|% - >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.685\textwidth}|}}% - {\begin{longtable}{|>{\centering}p{0.10\textwidth}|% - >{\centering\hspace{0pt}}p{0.15\textwidth}|% - >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.515\textwidth}|}}% - }\hline% -}{% - \end{longtable}% - \end{DoxyDesc}% -} - -% Used for fields of simple structs -\newenvironment{DoxyFields}[1]{% - \begin{DoxyDesc}{#1}% - \item[] \hspace{\fill} \vspace{-40pt}% - \settowidth{\labelwidth}{40pt}% - \setlength{\LTleft}{0pt}% - \setlength{\tabcolsep}{0.01\textwidth}% - \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.15\textwidth}|% - p{0.635\textwidth}|}% - \hline% -}{% - \end{longtable}% - \end{DoxyDesc}% -} - -% is used for parameters within a detailed function description -\newenvironment{DoxyParamCaption}{% - \renewcommand{\item}[2][]{##1 {\em ##2}}% - }{% -} - -% Used by return value lists -\newenvironment{DoxyRetVals}[1]{% - \begin{DoxyDesc}{#1}% - \begin{description}% - \item[] \hspace{\fill} \vspace{-25pt}% - \setlength{\tabcolsep}{0.01\textwidth}% - \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.77\textwidth}|}% - \hline% -}{% - \end{longtable}% - \end{description}% - \end{DoxyDesc}% -} - -% Used by exception lists -\newenvironment{DoxyExceptions}[1]{% - \begin{DoxyDesc}{#1}% - \begin{description}% - \item[] \hspace{\fill} \vspace{-25pt}% - \definecolor{tableShade}{HTML}{F8F8F8}% - \rowcolors{1}{white}{tableShade}% - \arrayrulecolor{gray}% - \setlength{\tabcolsep}{0.01\textwidth}% - \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.77\textwidth}|}% - \hline% -}{% - \end{longtable}% - \end{description}% - \end{DoxyDesc}% -} - -% Used by template parameter lists -\newenvironment{DoxyTemplParams}[1]{% - \begin{DoxyDesc}{#1}% - \begin{description}% - \item[] \hspace{\fill} \vspace{-25pt}% - \definecolor{tableShade}{HTML}{F8F8F8}% - \rowcolors{1}{white}{tableShade}% - \arrayrulecolor{gray}% - \setlength{\tabcolsep}{0.01\textwidth}% - \begin{longtable}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.77\textwidth}|}% - \hline% -}{% - \end{longtable}% - \end{description}% - \end{DoxyDesc}% -} - -\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})} -\newcommand{\lcurly}{\{} -\newcommand{\rcurly}{\}} -\newenvironment{DoxyCompactList} -{\begin{list}{}{ - \setlength{\leftmargin}{0.5cm} - \setlength{\itemsep}{0pt} - \setlength{\parsep}{0pt} - \setlength{\topsep}{0pt} - \renewcommand{\makelabel}{\hfill}}} -{\end{list}} -\newenvironment{DoxyCompactItemize} -{ - \begin{itemize} - \setlength{\itemsep}{-3pt} - \setlength{\parsep}{0pt} - \setlength{\topsep}{0pt} - \setlength{\partopsep}{0pt} -} -{\end{itemize}} -\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} -\newlength{\tmplength} -\newenvironment{TabularC}[1] -{ -\setlength{\tmplength} - {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} - \par\begin{xtabular*}{\linewidth} - {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} -} -{\end{xtabular*}\par} -\newcommand{\entrylabel}[1]{ - {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{% - \usefont{OT1}{phv}{bc}{n}\color{darkgray}#1}\vspace{1.5\baselineskip}}}} -\newenvironment{Desc} -{\begin{list}{} - { - \settowidth{\labelwidth}{40pt} - \setlength{\leftmargin}{\labelwidth} - \setlength{\parsep}{0pt} - \setlength{\itemsep}{-4pt} - \renewcommand{\makelabel}{\entrylabel} - } -} -{\end{list}} -\newsavebox{\xrefbox} -\newlength{\xreflength} -\newcommand{\xreflabel}[1]{% - \sbox{\xrefbox}{#1}% - \setlength{\xreflength}{\wd\xrefbox}% - \ifthenelse{\xreflength>\labelwidth}{% - \begin{minipage}{\textwidth}% - \setlength{\parindent}{0pt}% - \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% - \end{minipage}% - }{% - \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% - }}% -\newenvironment{DoxyRefList}{% - \begin{list}{}{% - \setlength{\labelwidth}{10pt}% - \setlength{\leftmargin}{\labelwidth}% - \addtolength{\leftmargin}{\labelsep}% - \renewcommand{\makelabel}{\xreflabel}% - }% - }% -{\end{list}} -\newenvironment{DoxyRefDesc}[1] -{\begin{list}{}{% - \renewcommand\makelabel[1]{\textbf{##1}} - \settowidth\labelwidth{\makelabel{#1}} - \setlength\leftmargin{\labelwidth+\labelsep}}} -{\end{list}} -\newenvironment{Indent} - {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} - \item[]\ignorespaces} - {\unskip\end{list}} -\setlength{\parindent}{0cm} -\setlength{\parskip}{0.2cm} -\addtocounter{secnumdepth}{2} -\usepackage[T1]{fontenc} -\makeatletter -\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}% - {-1.0ex}% - {1.0ex}% - {\usefont{OT1}{phv}{bc}{n}\color{darkgray}}} -\renewcommand{\subparagraph}{\@startsection{subparagraph}{5}{0ex}% - {-1.0ex}% - {1.0ex}% - {\usefont{OT1}{phv}{bc}{n}\color{darkgray}}} -\makeatother -\allsectionsfont{\usefont{OT1}{phv}{bc}{n}\selectfont\color{darkgray}} -\stepcounter{secnumdepth} -\stepcounter{tocdepth} -\definecolor{comment}{rgb}{0.5,0.0,0.0} -\definecolor{keyword}{rgb}{0.0,0.5,0.0} -\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} -\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} -\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} -\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} -\definecolor{charliteral}{rgb}{0.0,0.5,0.5} -\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} -\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} -\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} -\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index c97c5f0..84a792d 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -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} @@ -53,6 +54,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 @@ -71,7 +73,7 @@ \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} diff --git a/doc/doxyindexer.1 b/doc/doxyindexer.1 index 7b7a298..ae4b282 100644 --- a/doc/doxyindexer.1 +++ b/doc/doxyindexer.1 @@ -1,4 +1,4 @@ -.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 diff --git a/doc/doxysearch.1 b/doc/doxysearch.1 index da9ae05..a00124f 100644 --- a/doc/doxysearch.1 +++ b/doc/doxysearch.1 @@ -1,4 +1,4 @@ -.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 diff --git a/doc/doxywizard.1 b/doc/doxywizard.1 index e3f23c0..9f57701 100644 --- a/doc/doxywizard.1 +++ b/doc/doxywizard.1 @@ -1,4 +1,4 @@ -.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 diff --git a/doc/maintainers.txt b/doc/maintainers.txt index 30afcd5..2c11a17 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -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 diff --git a/doc/manual.sty b/doc/manual.sty new file mode 100644 index 0000000..80fbda6 --- /dev/null +++ b/doc/manual.sty @@ -0,0 +1,33 @@ +% 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{}{}} + diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp index 45ccef9..35b9bb8 100644 --- a/qtools/qcstring.cpp +++ b/qtools/qcstring.cpp @@ -460,6 +460,12 @@ ulong QCString::toULong(bool *ok) const return s.toULong(ok); } +uint64 QCString::toUInt64(bool *ok) const +{ + QString s(data()); + return s.toUInt64(ok); +} + QCString &QCString::setNum(short n) { return setNum((long)n); diff --git a/qtools/qcstring.h b/qtools/qcstring.h index d8ce074..4f15b18 100644 --- a/qtools/qcstring.h +++ b/qtools/qcstring.h @@ -288,6 +288,7 @@ public: uint toUInt( bool *ok=0 ) const; long toLong( bool *ok=0 ) const; ulong toULong( bool *ok=0 ) const; + uint64 toUInt64( bool *ok=0 ) const; QCString &setNum(short n); QCString &setNum(ushort n); QCString &setNum(int n); diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp index f51c0d4..458fd53 100644 --- a/qtools/qstring.cpp +++ b/qtools/qstring.cpp @@ -13935,6 +13935,60 @@ bye: } /*! + Returns the string converted to an <code>unsigned long</code> + value. + + If \a ok is non-null, \a *ok is set to TRUE if there are no + conceivable errors, and FALSE if the string is not a number at all, + or if it has trailing garbage. +*/ + +uint64 QString::toUInt64( bool *ok, int base ) const +{ + const QChar *p = unicode(); + uint64 val=0; + int l = length(); + const uint64 max_mult = 1844674407370955161ULL; // ULLONG_MAX/10, rounded down + bool is_ok = FALSE; + if ( !p ) + goto bye; + while ( l && p->isSpace() ) // skip leading space + l--,p++; + if ( *p == '+' ) + l--,p++; + + // NOTE: toULong() code is similar + if ( !l || !ok_in_base(*p,base) ) + goto bye; + while ( l && ok_in_base(*p,base) ) { + l--; + uint dv; + if ( p->isDigit() ) { + dv = p->digitValue(); + } else { + if ( *p >= 'a' && *p <= 'z' ) + dv = *p - 'a' + 10; + else + dv = *p - 'A' + 10; + } + if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) ) + goto bye; + val = base*val + dv; + p++; + } + + while ( l && p->isSpace() ) // skip trailing space + l--,p++; + if ( !l ) + is_ok = TRUE; +bye: + if ( ok ) + *ok = is_ok; + return is_ok ? val : 0; +} + + +/*! Returns the string converted to a <code>short</code> value. If \a ok is non-null, \a *ok is set to TRUE if there are no diff --git a/qtools/qstring.h b/qtools/qstring.h index a64fabf..df3873d 100644 --- a/qtools/qstring.h +++ b/qtools/qstring.h @@ -463,6 +463,7 @@ public: uint toUInt( bool *ok=0, int base=10 ) const; long toLong( bool *ok=0, int base=10 ) const; ulong toULong( bool *ok=0, int base=10 ) const; + uint64 toUInt64( bool *ok=0, int base=10 ) const; float toFloat( bool *ok=0 ) const; double toDouble( bool *ok=0 ) const; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 155bf77..52755ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -114,7 +114,7 @@ add_library(doxycfg portable_c.c ) -add_library(_doxygen +add_library(libdoxygen # custom generated files ${GENERATED_SRC}/lang_cfg.h ${GENERATED_SRC}/settings.h @@ -226,7 +226,7 @@ add_library(_doxygen add_executable(doxygen main.cpp) target_link_libraries(doxygen - _doxygen + libdoxygen doxycfg qtools md5 diff --git a/src/cite.cpp b/src/cite.cpp index 2ea6300..3125f35 100644 --- a/src/cite.cpp +++ b/src/cite.cpp @@ -226,13 +226,13 @@ void CiteDict::generatePage() const else if (insideBib) doc+=line+"\n"; int i; // determine text to use at the location of the @cite command - if (insideBib && (i=line.find("<a name=\"CITEREF_"))!=-1) + if (insideBib && (i=line.find("name=\"CITEREF_"))!=-1) { int j=line.find("\">["); int k=line.find("]</a>"); if (j!=-1 && k!=-1) { - QCString label = line.mid(i+17,j-i-17); + QCString label = line.mid(i+14,j-i-14); QCString number = line.mid(j+2,k-j-1); CiteInfo *ci = m_entries.find(label); //printf("label='%s' number='%s' => %p\n",label.data(),number.data(),ci); diff --git a/src/commentscan.l b/src/commentscan.l index 3546277..406d966 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -920,7 +920,7 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+@&#] FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"") ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* -CITESCHAR [a-z_A-Z\x80-\xFF] +CITESCHAR [a-z_A-Z0-9\x80-\xFF] CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]* CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)* SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) diff --git a/src/docparser.h b/src/docparser.h index 1abb687..4984921 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -1303,8 +1303,18 @@ class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode const HtmlAttribList &attribs() const { return m_attribs; } int parse(); int parseXml(bool header); - bool isHeading() const { return m_children.count()>0 && - ((DocHtmlCell*)m_children.getFirst())->isHeading(); + bool isHeading() const { // a row is a table heading if all cells are marked as such + bool heading=TRUE; + QListIterator<DocNode> it(m_children); + DocNode *n; + for (;(n=it.current());++it) + { + if (n->kind()==Kind_HtmlCell) + { + heading = heading && ((DocHtmlCell*)n)->isHeading(); + } + } + return m_children.count()>0 && heading; } void setVisibleCells(int n) { m_visibleCells = n; } int visibleCells() const { return m_visibleCells; } @@ -1332,6 +1342,11 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode int parseXml(); uint numColumns() const { return m_numCols; } void accept(DocVisitor *v); + DocHtmlRow *firstRow() { + DocNode *n = m_children.getFirst(); + if (n && n->kind()==Kind_HtmlRow) return (DocHtmlRow*)n; + return 0; + } private: void computeTableGrid(); diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 31d583c..efc058a 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -334,7 +334,7 @@ BLANK [ \t\r] ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+ -CITESCHAR [a-z_A-Z\x80-\xFF] +CITESCHAR [a-z_A-Z0-9\x80-\xFF] CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]* CITEID {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)* MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 37c2130..b9e5839 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -173,7 +173,7 @@ LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci, : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing), m_insideTable(FALSE), m_langExt(langExt), m_currentColumn(0), - m_inRowspan(FALSE), m_inColspan(FALSE) + m_inRowspan(FALSE), m_inColspan(FALSE), m_firstRow(FALSE) { m_rowSpans.setAutoDelete(TRUE); } @@ -913,6 +913,17 @@ void LatexDocVisitor::visitPre(DocHtmlTable *t) m_t << "\\begin{" << getTableName(t->parent()) << "}{" << t->numColumns() << "}\n"; m_numCols = t->numColumns(); m_t << "\\hline\n"; + + // check if first row is a heading and then render the row already here + // and end it with \endfirsthead (triggered via m_firstRow==TRUE) + // then repeat the row as normal and end it with \endhead (m_firstRow==FALSE) + DocHtmlRow *firstRow = t->firstRow(); + if (firstRow && firstRow->isHeading()) + { + m_firstRow=TRUE; + firstRow->accept(this); + m_firstRow=FALSE; + } } void LatexDocVisitor::visitPost(DocHtmlTable *t) @@ -944,7 +955,7 @@ void LatexDocVisitor::visitPost(DocHtmlCaption *) void LatexDocVisitor::visitPre(DocHtmlRow *r) { m_currentColumn = 0; - if (r->isHeading()) m_t << "\\rowcolor{lightgray}"; + if (r->isHeading()) m_t << "\\rowcolor{\\tableheadbgcolor}"; } void LatexDocVisitor::visitPost(DocHtmlRow *row) @@ -1011,6 +1022,19 @@ void LatexDocVisitor::visitPost(DocHtmlRow *row) } m_t << "\n"; + + if (row->isHeading() && row->rowIndex()==1) + { + if (m_firstRow) + { + m_t << "\\endfirsthead" << endl; + m_t << "\\hline" << endl; + } + else + { + m_t << "\\endhead" << endl; + } + } } void LatexDocVisitor::visitPre(DocHtmlCell *c) @@ -1076,7 +1100,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) << m_numCols << "-\\arrayrulewidth*" << row->visibleCells() << ")*" << cs <<"/"<< m_numCols << "}|}{"; - if (c->isHeading()) m_t << "\\cellcolor{lightgray}"; + if (c->isHeading()) m_t << "\\cellcolor{\\tableheadbgcolor}"; } int rs = c->rowSpan(); if (rs>0) diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index d3aeaea..e36e56c 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -199,6 +199,7 @@ class LatexDocVisitor : public DocVisitor int m_currentColumn; bool m_inRowspan; bool m_inColspan; + bool m_firstRow; }; #endif diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 042dd7c..30e28ec 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -1422,6 +1422,10 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *, const char *anchor, const char *, const char *) { +} + +void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) +{ static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); if (usePDFLatex && pdfHyperlinks) @@ -1431,10 +1435,6 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *, if (anchor) t << "_" << anchor; t << "}{}"; } -} - -void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) -{ t << "\\label{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; diff --git a/src/translator_it.h b/src/translator_it.h index c52aa50..d27c9dd 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -19,13 +19,17 @@ * * Revision history * + * 2015/07: updated translation of new items used since version 1.8.2 and 1.8.4 + * corrected a typo + * updated translator mail address * 2012/04: updated translation of new items used since version 1.7.5 and 1.8.0 * 2010/08: updated translation of new items used since version 1.6.0 and 1.6.3 * completely reviewed the translation in the trLegendDocs() function * corrected some typos all around * reviewed some translations all around * 2007/11: updated translation of new items used since version 1.5.4 - * 2007/10: Included corrections provided by Arialdo Martini <arialdomartini@bebox.it>, updated some strings marked with 'translate me' comment + * 2007/10: Included corrections provided by Arialdo Martini <arialdomartini@bebox.it> + * updated some strings marked with 'translate me' comment * 2006/10: made class to derive directly from Translator class (reported in Petr Prikryl October 9 translator report) * 2006/06: updated translation of new items used since version 1.4.6 * 2006/05: translated new items used since version 1.4.6 @@ -79,13 +83,13 @@ * tecnica (ad es. "lista dei file" e non "lista dei files") * * Se avete suggerimenti sulla traduzione di alcuni termini o volete segnalare - * eventuali sviste potete scrivermi all'indirizzo: alessandro@falappa.net + * eventuali sviste potete scrivermi all'indirizzo: alex.falappa@gmail.com */ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public TranslatorAdapter_1_8_2 +class TranslatorItalian : public Translator { public: @@ -1832,7 +1836,7 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 /*! Used file list for a Java enum */ virtual QCString trEnumGeneratedFromFiles(bool single) - { QCString result = "La documentazione per questo tipo enumerato è stata generata"; + { QCString result = "La documentazione per questo tipo enumerato è stata generata a partire"; if (!single) result += " dai seguenti"; else result += " dal seguente"; result+=" file:"; @@ -1853,6 +1857,127 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 virtual QCString trAdditionalInheritedMembers() { return "Altri membri ereditati"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.8.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a tooltip for the toggle button that appears in the + * navigation tree in the HTML output when GENERATE_TREEVIEW is + * enabled. This tooltip explains the meaning of the button. + */ + virtual QCString trPanelSynchronisationTooltip(bool enable) + { + QCString opt = enable ? "abilitare" : "disabilitare"; + return "cliccare per "+opt+" la sincronizzazione del pannello"; + } + + /*! Used in a method of an Objective-C class that is declared in a + * a category. Note that the @1 marker is required and is replaced + * by a link. + */ + virtual QCString trProvidedByCategory() + { + return "Fornito dalla categoria @1."; + } + + /*! Used in a method of an Objective-C category that extends a class. + * Note that the @1 marker is required and is replaced by a link to + * the class method. + */ + virtual QCString trExtendsClass() + { + return "Estende la classe @1."; + } + + /*! Used as the header of a list of class methods in Objective-C. + * These are similar to static public member functions in C++. + */ + virtual QCString trClassMethods() + { + return "Metodi della classe"; + } + + /*! Used as the header of a list of instance methods in Objective-C. + * These are similar to public member functions in C++. + */ + virtual QCString trInstanceMethods() + { + return "Metodi di instanza"; + } + + /*! Used as the header of the member functions of an Objective-C class. + */ + virtual QCString trMethodDocumentation() + { + return "Documentazione dei metodi"; + } + + /*! Used as the title of the design overview picture created for the + * VHDL output. + */ + virtual QCString trDesignOverview() + { + return "Panoramica del progetto"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + /** old style UNO IDL services: implemented interfaces */ + virtual QCString trInterfaces() + { return "Interfacce esportate"; } + + /** old style UNO IDL services: inherited services */ + virtual QCString trServices() + { return "Servizi inclusi"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroups() + { return "Gruppi di costanti"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroupReference(const char *namespaceName) + { + QCString result="Riferimenti per il gruppo di costanti "; + result+=namespaceName; + return result; + } + /** UNO IDL service page title */ + virtual QCString trServiceReference(const char *sName) + { + QCString result=(QCString)"Riferimenti per il servizio "; + result+=sName; + return result; + } + /** UNO IDL singleton page title */ + virtual QCString trSingletonReference(const char *sName) + { + QCString result=(QCString)"Riferimenti per il singleton "; + result+=sName; + return result; + } + /** UNO IDL service page */ + virtual QCString trServiceGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"La documentazione per questo servizio " + "è stata generata a partire "; + if (single) result+="dal seguente file:"; else result+="dai seguenti file:"; + return result; + } + /** UNO IDL singleton page */ + virtual QCString trSingletonGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"La documentazione per questo singleton " + "è stata generata a partire "; + if (single) result+="dal seguente file:"; else result+="dai seguenti file:"; + return result; + } + +////////////////////////////////////////////////////////////////////////// + }; #endif diff --git a/src/util.cpp b/src/util.cpp index 3ee7ae5..db6a19c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -18,6 +18,7 @@ #include <ctype.h> #include <errno.h> #include <math.h> +#include <limits.h> #include "md5.h" @@ -2472,6 +2473,35 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode) QCString dateToString(bool includeTime) { QDateTime current = QDateTime::currentDateTime(); + QCString sourceDateEpoch = portable_getenv("SOURCE_DATE_EPOCH"); + if (!sourceDateEpoch.isEmpty()) + { + bool ok; + uint64 epoch = sourceDateEpoch.toUInt64(&ok); + if (!ok) + { + static bool warnedOnce=FALSE; + if (!warnedOnce) + { + warn_uncond("Environment variable SOURCE_DATE_EPOCH does not contain a valid number; value is '%s'\n", + sourceDateEpoch.data()); + warnedOnce=TRUE; + } + } + else if (epoch>UINT_MAX) + { + static bool warnedOnce=FALSE; + if (!warnedOnce) + { + warn_uncond("Environment variable SOURCE_DATA_EPOCH must have a value smaller than or equal to %llu; actual value %llu\n",UINT_MAX,epoch); + warnedOnce=TRUE; + } + } + else // all ok, replace current time with epoch value + { + current.setTime_t((ulong)epoch); // TODO: add support for 64bit epoch value + } + } return theTranslator->trDateTime(current.date().year(), current.date().month(), current.date().day(), @@ -6461,7 +6491,6 @@ void filterLatexString(FTextStream &t,const char *str, bool insideTabbing,bool insidePre,bool insideItem) { if (str==0) return; - //printf("filterLatexString(%s)\n",str); //if (strlen(str)<2) stackTrace(); const unsigned char *p=(const unsigned char *)str; const unsigned char *q; @@ -6555,7 +6584,7 @@ void filterLatexString(FTextStream &t,const char *str, default: //if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ') if (!insideTabbing && - ((c>='A' && c<='Z' && pc!=' ' && pc!='\0') || (c==':' && pc!=':') || (pc=='.' && isId(c))) + ((c>='A' && c<='Z' && pc!=' ' && pc!='\0' && *p) || (c==':' && pc!=':') || (pc=='.' && isId(c))) ) { t << "\\+"; diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty index acd68e4..66ffca3 100644 --- a/templates/latex/doxygen.sty +++ b/templates/latex/doxygen.sty @@ -9,7 +9,8 @@ \RequirePackage{ifthen} \RequirePackage{verbatim} \RequirePackage[table]{xcolor} -\RequirePackage{xtab} +\RequirePackage{longtable} +\RequirePackage{tabu} %---------- Internal commands used in this style file ---------------- @@ -267,46 +268,38 @@ % Used by parameter lists \newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% \par% - \tabletail{\hline}% - \tablelasttail{\hline}% - \tablefirsthead{}% - \tablehead{}% \ifthenelse{\equal{#1}{}}% - {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% - \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.805\textwidth}|}}% + {\begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}}% name + description {\ifthenelse{\equal{#1}{1}}% - {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% - \begin{xtabular}{|>{\centering}p{0.10\textwidth}|% - >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.678\textwidth}|}}% - {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% - \begin{xtabular}{|>{\centering}p{0.10\textwidth}|% - >{\centering\hspace{0pt}}p{0.15\textwidth}|% - >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.501\textwidth}|}}% - }\hline% -}{% - \end{xtabular}% - \tablefirsthead{}% + {\begin{longtabu} spread 0pt [l]{|X[-1,c]|X[-1,r]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu} spread 0pt [l]{|X[-1,c]|X[-1,c]|X[-1,r]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% \vspace{6pt}% } % Used for fields of simple structs \newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% \par% - \tabletail{\hline}% - \tablelasttail{\hline}% - \tablehead{}% - \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% - \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% - p{0.15\textwidth}|% - p{0.63\textwidth}|}% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% }{% - \end{xtabular}% - \tablefirsthead{}% + \end{longtabu}% \vspace{6pt}% } @@ -318,49 +311,49 @@ % Used by return value lists \newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% \par% - \tabletail{\hline}% - \tablelasttail{\hline}% - \tablehead{}% - \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% - \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.705\textwidth}|}% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% \hline% + \endhead% }{% - \end{xtabular}% - \tablefirsthead{}% + \end{longtabu}% \vspace{6pt}% } % Used by exception lists \newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% \par% - \tabletail{\hline}% - \tablelasttail{\hline}% - \tablehead{}% - \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% - \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.705\textwidth}|}% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% }{% - \end{xtabular}% - \tablefirsthead{}% + \end{longtabu}% \vspace{6pt}% } % Used by template parameter lists \newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% \par% - \tabletail{\hline}% - \tablelasttail{\hline}% - \tablehead{}% - \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% - \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% - p{0.705\textwidth}|}% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% \hline% + \endhead% }{% - \end{xtabular}% - \tablefirsthead{}% + \end{longtabu}% \vspace{6pt}% } @@ -426,25 +419,14 @@ % Used by tables \newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% -\newlength{\tmplength}% \newenvironment{TabularC}[1]% -{% -\setlength{\tmplength}% - {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}% - \par\begin{xtabular*}{\linewidth}% - {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}% -}% -{\end{xtabular*}\par}% - -% Used by nested tables +{\tabulinesep=1mm +\begin{longtabu} spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{longtabu}\par}% + \newenvironment{TabularNC}[1]% -{% -\setlength{\tmplength}% - {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}% - \par\begin{tabular*}{\linewidth}% - {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}% -}% -{\end{tabular*}\par}% +{\begin{tabu} spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% % Used for member group headers \newenvironment{Indent}{% @@ -466,7 +448,7 @@ \newcommand{\lcurly}{\{} \newcommand{\rcurly}{\}} -% Used for syntax highlighting +% Colors used for syntax highlighting \definecolor{comment}{rgb}{0.5,0.0,0.0} \definecolor{keyword}{rgb}{0.0,0.5,0.0} \definecolor{keywordtype}{rgb}{0.38,0.25,0.125} @@ -478,3 +460,6 @@ \definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} \definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} \definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% |