Commit 0c751ba9 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.6.1-20091027

parent 1042ef3a
DOXYGEN Version 1.6.1-20091004 DOXYGEN Version 1.6.1-20091027
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (04 October 2009) Dimitri van Heesch (27 October 2009)
DOXYGEN Version 1.6.1_20091004 DOXYGEN Version 1.6.1_20091027
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (04 October 2009) Dimitri van Heesch (dimitri@stack.nl) (27 October 2009)
...@@ -85,10 +85,6 @@ MainWindow::MainWindow() ...@@ -85,10 +85,6 @@ MainWindow::MainWindow()
m_launchHtml = new QPushButton(tr("Show HTML output")); m_launchHtml = new QPushButton(tr("Show HTML output"));
launchLayout->addWidget(m_launchHtml); launchLayout->addWidget(m_launchHtml);
#if 0
m_launchPdf = new QPushButton(tr("Show PDF output"));
launchLayout->addWidget(m_launchPdf);
#endif
launchLayout->addStretch(1); launchLayout->addStretch(1);
grid->addLayout(launchLayout,1,0); grid->addLayout(launchLayout,1,0);
runTabLayout->addLayout(grid); runTabLayout->addLayout(grid);
...@@ -300,24 +296,12 @@ void MainWindow::loadSettings() ...@@ -300,24 +296,12 @@ void MainWindow::loadSettings()
{ {
QVariant geometry = m_settings.value(QString::fromAscii("main/geometry"), QVariant::Invalid); QVariant geometry = m_settings.value(QString::fromAscii("main/geometry"), QVariant::Invalid);
QVariant state = m_settings.value(QString::fromAscii("main/state"), QVariant::Invalid); QVariant state = m_settings.value(QString::fromAscii("main/state"), QVariant::Invalid);
//QVariant expState = m_settings.value(QString::fromAscii("expert/state"), QVariant::Invalid);
//QVariant expState2 = m_settings.value(QString::fromAscii("expert/state2"), QVariant::Invalid);
QVariant wizState = m_settings.value(QString::fromAscii("wizard/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 loadSettings = m_settings.value(QString::fromAscii("wizard/loadsettings"), QVariant::Invalid);
//QVariant workingDir = m_settings.value(QString::fromAscii("main/defdir"), QVariant::Invalid);
if (geometry !=QVariant::Invalid) restoreGeometry(geometry.toByteArray()); if (geometry !=QVariant::Invalid) restoreGeometry(geometry.toByteArray());
if (state !=QVariant::Invalid) restoreState (state.toByteArray()); if (state !=QVariant::Invalid) restoreState (state.toByteArray());
//if (expState !=QVariant::Invalid) m_expert->restoreState(expState.toByteArray());
//if (expState2 !=QVariant::Invalid) m_expert->restoreInnerState(expState2.toByteArray());
if (wizState !=QVariant::Invalid) m_wizard->restoreState(wizState.toByteArray()); if (wizState !=QVariant::Invalid) m_wizard->restoreState(wizState.toByteArray());
//if (workingDir!=QVariant::Invalid)
//{
// QString dir = workingDir.toString();
// m_workingDir->setText(dir);
// QDir::setCurrent(dir);
// m_run->setEnabled(!dir.isEmpty());
//}
if (loadSettings!=QVariant::Invalid && loadSettings.toBool()) if (loadSettings!=QVariant::Invalid && loadSettings.toBool())
{ {
m_expert->loadSettings(&m_settings); m_expert->loadSettings(&m_settings);
...@@ -337,8 +321,6 @@ void MainWindow::saveSettings() ...@@ -337,8 +321,6 @@ void MainWindow::saveSettings()
m_settings.setValue(QString::fromAscii("main/geometry"), saveGeometry()); m_settings.setValue(QString::fromAscii("main/geometry"), saveGeometry());
m_settings.setValue(QString::fromAscii("main/state"), saveState()); m_settings.setValue(QString::fromAscii("main/state"), saveState());
//m_settings.setValue(QString::fromAscii("expert/state"), m_expert->saveState());
//m_settings.setValue(QString::fromAscii("expert/state2"), m_expert->saveInnerState());
m_settings.setValue(QString::fromAscii("wizard/state"), m_wizard->saveState()); m_settings.setValue(QString::fromAscii("wizard/state"), m_wizard->saveState());
} }
...@@ -387,15 +369,19 @@ void MainWindow::runDoxygen() ...@@ -387,15 +369,19 @@ void MainWindow::runDoxygen()
#if defined(Q_OS_MACX) #if defined(Q_OS_MACX)
doxygenPath = qApp->applicationDirPath()+QString::fromAscii("/../Resources/"); doxygenPath = qApp->applicationDirPath()+QString::fromAscii("/../Resources/");
qDebug() << tr("Doxygen path: ") << doxygenPath; qDebug() << tr("Doxygen path: ") << doxygenPath;
if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() ) { if ( !QFile(doxygenPath + QString::fromAscii("doxygen")).exists() )
// No doygen binary in the resources, if there is a system doxygen binary, use that instead {
if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() ) // No doygen binary in the resources, if there is a system doxygen binary, use that instead
doxygenPath = QString::fromAscii("/usr/local/bin/"); if ( QFile(QString::fromAscii("/usr/local/bin/doxygen")).exists() )
else { {
qDebug() << tr("Can't find the doxygen command, make sure it's in your $$PATH"); doxygenPath = QString::fromAscii("/usr/local/bin/");
doxygenPath = QString::fromAscii(""); }
} else
} {
qDebug() << tr("Can't find the doxygen command, make sure it's in your $$PATH");
doxygenPath = QString::fromAscii("");
}
}
qDebug() << tr("Getting doxygen from: ") << doxygenPath; qDebug() << tr("Getting doxygen from: ") << doxygenPath;
#endif #endif
...@@ -423,7 +409,7 @@ void MainWindow::runDoxygen() ...@@ -423,7 +409,7 @@ void MainWindow::runDoxygen()
QTextStream t(m_runProcess); QTextStream t(m_runProcess);
m_expert->writeConfig(t,false); m_expert->writeConfig(t,false);
m_runProcess->closeWriteChannel(); m_runProcess->closeWriteChannel();
if (m_runProcess->state() == QProcess::NotRunning) if (m_runProcess->state() == QProcess::NotRunning)
{ {
m_outputLog->append(QString::fromAscii("*** Failed to run doxygen\n")); m_outputLog->append(QString::fromAscii("*** Failed to run doxygen\n"));
......
...@@ -158,7 +158,8 @@ QWidget *Expert::createTopicWidget(QDomElement &elem) ...@@ -158,7 +158,8 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
child.attribute(SA("id")), child.attribute(SA("id")),
child.attribute(SA("defval")), child.attribute(SA("defval")),
mode, mode,
child.attribute(SA("docs")) child.attribute(SA("docs")),
child.attribute(SA("abspath"))
); );
m_options.insert( m_options.insert(
child.attribute(SA("id")), child.attribute(SA("id")),
......
...@@ -21,8 +21,10 @@ ...@@ -21,8 +21,10 @@
InputString::InputString( QGridLayout *layout,int &row, InputString::InputString( QGridLayout *layout,int &row,
const QString & id, const QString &s, const QString & id, const QString &s,
StringMode m, const QString &docs ) StringMode m, const QString &docs,
: m_default(s), m_sm(m), m_index(0), m_docs(docs), m_id(id) 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_lab = new HelpLabel(id); m_lab = new HelpLabel(id);
if (m==StringFixed) if (m==StringFixed)
...@@ -126,7 +128,7 @@ void InputString::browse() ...@@ -126,7 +128,7 @@ void InputString::browse()
QDir dir(path); QDir dir(path);
if (!MainWindow::instance().configFileName().isEmpty() && dir.exists()) if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
{ {
fileName = dir.relativeFilePath(fileName); fileName = m_absPath ? fileName : dir.relativeFilePath(fileName);
} }
setValue(fileName); setValue(fileName);
} }
...@@ -140,10 +142,10 @@ void InputString::browse() ...@@ -140,10 +142,10 @@ void InputString::browse()
QDir dir(path); QDir dir(path);
if (!MainWindow::instance().configFileName().isEmpty() && dir.exists()) if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
{ {
dirName = dir.relativeFilePath(dirName); dirName = m_absPath ? dirName : dir.relativeFilePath(dirName);
} }
setValue(dirName); setValue(dirName);
} }
} }
} }
......
...@@ -41,7 +41,8 @@ class InputString : public QObject, public Input ...@@ -41,7 +41,8 @@ class InputString : public QObject, public Input
InputString( QGridLayout *layout,int &row, InputString( QGridLayout *layout,int &row,
const QString &id, const QString &s, const QString &id, const QString &s,
StringMode m, StringMode m,
const QString &docs ); const QString &docs,
const QString &absPath = QString() );
~InputString(); ~InputString();
void addValue(QString s); void addValue(QString s);
void setDefault(); void setDefault();
...@@ -83,6 +84,7 @@ class InputString : public QObject, public Input ...@@ -83,6 +84,7 @@ class InputString : public QObject, public Input
QVariant m_value; QVariant m_value;
QString m_docs; QString m_docs;
QString m_id; QString m_id;
bool m_absPath;
}; };
#endif #endif
...@@ -33,14 +33,14 @@ class InputStrList : public QObject, public Input ...@@ -33,14 +33,14 @@ class InputStrList : public QObject, public Input
Q_OBJECT Q_OBJECT
public: public:
enum ListMode { ListString = 0, enum ListMode { ListString = 0,
ListFile = 1, ListFile = 1,
ListDir = 2, ListDir = 2,
ListFileDir = ListFile | ListDir ListFileDir = ListFile | ListDir
}; };
InputStrList( QGridLayout *layout,int &row, InputStrList( QGridLayout *layout,int &row,
const QString &id, const QStringList &sl, const QString &id, const QStringList &sl,
ListMode v, const QString &docs); ListMode v, const QString &docs);
void setValue(const QStringList &sl); void setValue(const QStringList &sl);
......
...@@ -20,7 +20,7 @@ doxygen_version_minor=6 ...@@ -20,7 +20,7 @@ doxygen_version_minor=6
doxygen_version_revision=1 doxygen_version_revision=1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20091004 doxygen_version_mmn=20091027
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -38,11 +38,12 @@ ...@@ -38,11 +38,12 @@
\section linkclass Links to classes. \section linkclass Links to classes.
All words in the documentation that correspond to a documented class and All words in the documentation that correspond to a documented class and
contain at least one upper case character will automatically be replaced by contain at least one non-lower case character will automatically be
a link to the page containing the replaced by a link to the page containing the
documentation of the class. If you want to prevent that a word documentation of the class. If you want to prevent that a word
that corresponds to a documented class is replaced by a link you that corresponds to a documented class is replaced by a link you
should put a \% in front of the word. should put a \% in front of the word.
To link to an all lower case symbol, use \ref cmdref "\\ref".
\section linkfile Links to files. \section linkfile Links to files.
......
...@@ -176,6 +176,7 @@ documentation: ...@@ -176,6 +176,7 @@ documentation:
\refitem cmdgt \\\> \refitem cmdgt \\\>
\refitem cmdhash \\\# \refitem cmdhash \\\#
\refitem cmdperc \\\% \refitem cmdperc \\\%
\refitem cmdquot \\\"
\endsecreflist \endsecreflist
The following subsections provide a list of all commands that are recognized by The following subsections provide a list of all commands that are recognized by
...@@ -224,6 +225,7 @@ Structural indicators ...@@ -224,6 +225,7 @@ Structural indicators
\sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup", \ref cmdingroup "\\ingroup" and \sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup", \ref cmdingroup "\\ingroup" and
\ref cmdweakgroup "\\weakgroup". \ref cmdweakgroup "\\weakgroup".
<hr>
\section cmdcallgraph \\callgraph \section cmdcallgraph \\callgraph
\addindex \\callgraph \addindex \\callgraph
...@@ -324,7 +326,6 @@ Structural indicators ...@@ -324,7 +326,6 @@ Structural indicators
stripped from the full path before it appears in the output. stripped from the full path before it appears in the output.
<hr> <hr>
\section cmdenum \\enum <name> \section cmdenum \\enum <name>
\addindex \\enum \addindex \\enum
...@@ -884,6 +885,7 @@ Section indicators ...@@ -884,6 +885,7 @@ Section indicators
The \\attention command ends when a blank line or some other The \\attention command ends when a blank line or some other
sectioning command is encountered. sectioning command is encountered.
<hr>
\section cmdauthor \\author { list of authors } \section cmdauthor \\author { list of authors }
\addindex \\author \addindex \\author
...@@ -1423,6 +1425,7 @@ void memcpy(void *dest, const void *src, size_t n); ...@@ -1423,6 +1425,7 @@ void memcpy(void *dest, const void *src, size_t n);
sectioning command is encountered. See section \ref cmdauthor "\\author" sectioning command is encountered. See section \ref cmdauthor "\\author"
for an example. for an example.
<hr>
\section cmdxrefitem \\xrefitem <key> "(heading)" "(list title)" {text} \section cmdxrefitem \\xrefitem <key> "(heading)" "(list title)" {text}
\addindex \\xrefitem \addindex \\xrefitem
...@@ -1465,6 +1468,7 @@ Commands to create links ...@@ -1465,6 +1468,7 @@ Commands to create links
</h2> </h2>
\htmlonly </center>\endhtmlonly \htmlonly </center>\endhtmlonly
<hr>
\section cmdaddindex \\addindex (text) \section cmdaddindex \\addindex (text)
\addindex \\addindex \addindex \\addindex
...@@ -1644,6 +1648,7 @@ Commands for displaying examples ...@@ -1644,6 +1648,7 @@ Commands for displaying examples
</h2> </h2>
\htmlonly </center>\endhtmlonly \htmlonly </center>\endhtmlonly
<hr>
\section cmddontinclude \\dontinclude <file-name> \section cmddontinclude \\dontinclude <file-name>
\addindex \\dontinclude \addindex \\dontinclude
...@@ -2453,6 +2458,7 @@ class Receiver ...@@ -2453,6 +2458,7 @@ class Receiver
This command writes the \> character to the output. This This command writes the \> character to the output. This
character has to be escaped because it has a special meaning in HTML. character has to be escaped because it has a special meaning in HTML.
<hr>
\section cmdperc \\\% \section cmdperc \\\%
\addindex \\\% \addindex \\\%
...@@ -2461,7 +2467,14 @@ class Receiver ...@@ -2461,7 +2467,14 @@ class Receiver
prevent auto-linking to word that is also a documented class or struct. prevent auto-linking to word that is also a documented class or struct.
<hr> <hr>
\section cmdquot \\\"
\addindex \\\"
This command writes the \" character to the output. This
character has to be escaped in some cases, because it is used to
prevent auto-linking to word that is also a documented class or struct.
<hr>
\htmlonly <center> \endhtmlonly \htmlonly <center> \endhtmlonly
<h2> <h2>
\htmlonly --- \endhtmlonly \htmlonly --- \endhtmlonly
......
...@@ -87,6 +87,12 @@ doxygen -l ...@@ -87,6 +87,12 @@ doxygen -l
optionally the name of the layout file can be specified, if omitted optionally the name of the layout file can be specified, if omitted
\c DoxygenLayout.xml will be used. \c DoxygenLayout.xml will be used.
The next step is to mention the layout file in the config file
\verbatim
LAYOUT_FILE = DoxygenLayout.xml
\endverbatim
The change the layout all you need to do is edit the layout file.
The toplevel structure of the file looks as follows: The toplevel structure of the file looks as follows:
\verbatim \verbatim
<doxygenlayout version="1.0"> <doxygenlayout version="1.0">
......
...@@ -134,7 +134,7 @@ when the translator was updated. ...@@ -134,7 +134,7 @@ when the translator was updated.
<td>French</td> <td>French</td>
<td>Xavier Outhier</td> <td>Xavier Outhier</td>
<td>xouthier at yahoo dot fr</td> <td>xouthier at yahoo dot fr</td>
<td>1.5.4</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>German</td> <td>German</td>
...@@ -336,7 +336,7 @@ when the translator was updated. ...@@ -336,7 +336,7 @@ when the translator was updated.
\hline \hline
Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & 1.6.0 \\ Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & 1.6.0 \\
\hline \hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.5.4 \\ French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & up-to-date \\
\hline \hline
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.6.0 \\ German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.6.0 \\
\hline \hline
......
...@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian, ...@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian,
SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese. and Vietnamese.
Of them, 5 translators are up-to-date, 33 translators are based on Of them, 6 translators are up-to-date, 32 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -22,6 +22,7 @@ still may be some details listed even for them: ...@@ -22,6 +22,7 @@ still may be some details listed even for them:
TranslatorCzech TranslatorCzech
TranslatorDutch TranslatorDutch
TranslatorEnglish TranslatorEnglish
TranslatorFrench -- The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()
TranslatorKorean TranslatorKorean
TranslatorPolish -- Remove the obsolete methods (never used). TranslatorPolish -- Remove the obsolete methods (never used).
...@@ -53,7 +54,6 @@ must be implemented to become up-to-date: ...@@ -53,7 +54,6 @@ must be implemented to become up-to-date:
TranslatorBrazilian 1.6.0 5 methods to implement (2 %) TranslatorBrazilian 1.6.0 5 methods to implement (2 %)
TranslatorAfrikaans 1.6.0 5 methods to implement (2 %) TranslatorAfrikaans 1.6.0 5 methods to implement (2 %)
TranslatorGreek 1.5.4 27 methods to implement (12 %) TranslatorGreek 1.5.4 27 methods to implement (12 %)
TranslatorFrench 1.5.4 22 methods to implement (9 %)
TranslatorDanish 1.5.4 27 methods to implement (12 %) TranslatorDanish 1.5.4 27 methods to implement (12 %)
TranslatorSlovene 1.4.6 29 methods to implement (13 %) TranslatorSlovene 1.4.6 29 methods to implement (13 %)
TranslatorNorwegian 1.4.6 28 methods to implement (12 %) TranslatorNorwegian 1.4.6 28 methods to implement (12 %)
...@@ -288,35 +288,10 @@ TranslatorFinnish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %) ...@@ -288,35 +288,10 @@ TranslatorFinnish (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
virtual QCString trDirRelation(const char * name) virtual QCString trDirRelation(const char * name)
TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement (9 %) TranslatorFrench (Translator)
---------------- ----------------
Implements 199 of the required methods (90 %). Implements 221 of the required methods (100 %).
Missing methods (should be implemented):
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
virtual QCString trSubprograms()
virtual QCString trModulesListDescription(bool extractAll)
virtual QCString trModulesList()
virtual QCString trTypeConstraints()
virtual QCString trMemberFunctionDocumentationFortran()
virtual QCString trCompoundListDescriptionFortran()
virtual QCString trTypeDocumentation()
virtual QCString trModuleReference(const char * namespaceName)
virtual QCString trModulesMemberDescription(bool extractAll)
virtual QCString trModulesMembers()
virtual QCString trModulesIndex()
virtual QCString trCompoundListFortran()
virtual QCString trDataTypes()
virtual QCString trCompoundIndexFortran()
virtual QCString trSubprogram(bool first_capital, bool singular)
virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
virtual QCString trType(bool first_capital, bool singular)
virtual QCString trModule(bool first_capital, bool singular)
virtual QCString trCompoundMembersFortran()
virtual QCString trSubprogramDocumentation()
TranslatorGerman (TranslatorAdapter_1_6_0) 5 methods to implement (2 %) TranslatorGerman (TranslatorAdapter_1_6_0) 5 methods to implement (2 %)
......
...@@ -139,9 +139,9 @@ GENERATE_CHI = NO ...@@ -139,9 +139,9 @@ GENERATE_CHI = NO
CHM_INDEX_ENCODING = CHM_INDEX_ENCODING =
BINARY_TOC = NO BINARY_TOC = NO
TOC_EXPAND = NO TOC_EXPAND = NO
GENERATE_QHP = NO GENERATE_QHP = YES
QCH_FILE = QCH_FILE =
QHP_NAMESPACE = QHP_NAMESPACE = com.qtools
QHP_VIRTUAL_FOLDER = doc QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS = QHP_CUST_FILTER_ATTRS =
......
...@@ -86,7 +86,10 @@ ...@@ -86,7 +86,10 @@
# if !defined(MAC_OS_X_VERSION_10_5) # if !defined(MAC_OS_X_VERSION_10_5)
# define MAC_OS_X_VERSION_10_5 MAC_OS_X_VERSION_10_4 + 1 # define MAC_OS_X_VERSION_10_5 MAC_OS_X_VERSION_10_4 + 1
# endif # endif
# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5) # if !defined(MAC_OS_X_VERSION_10_6)
# define MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_10_5 + 1
# endif
# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6)
# error "This version of Mac OS X is unsupported" # error "This version of Mac OS X is unsupported"
# endif # endif
#elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__) #elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
......
...@@ -1423,6 +1423,8 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1423,6 +1423,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState(); ol.popGeneratorState();
} }
Doxygen::indexList.addIndexItem(this,0);
if (!Config_getString("GENERATE_TAGFILE").isEmpty()) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{ {
Doxygen::tagFile << " <compound kind=\"" << compoundTypeString(); Doxygen::tagFile << " <compound kind=\"" << compoundTypeString();
......
...@@ -102,6 +102,7 @@ CommandMap cmdMap[] = ...@@ -102,6 +102,7 @@ CommandMap cmdMap[] =
{ "$", CMD_DOLLAR }, { "$", CMD_DOLLAR },
{ "#", CMD_HASH }, { "#", CMD_HASH },
{ "%", CMD_PERCENT }, { "%", CMD_PERCENT },
{ "\"", CMD_QUOTE },
{ "_internalref", CMD_INTERNALREF }, { "_internalref", CMD_INTERNALREF },
{ "dot", CMD_DOT }, { "dot", CMD_DOT },
{ "msc", CMD_MSC }, { "msc", CMD_MSC },
......
...@@ -112,7 +112,8 @@ enum CommandType ...@@ -112,7 +112,8 @@ enum CommandType
CMD_INHERITDOC = 78, CMD_INHERITDOC = 78,
CMD_TPARAM = 79 | SIMPLESECT_BIT, CMD_TPARAM = 79 | SIMPLESECT_BIT,
CMD_COPYBRIEF = 80, CMD_COPYBRIEF = 80,
CMD_COPYDETAILS = 81 CMD_COPYDETAILS = 81,
CMD_QUOTE = 82
}; };
enum HtmlTagType enum HtmlTagType
......
...@@ -525,9 +525,10 @@ static void startCodeLine() ...@@ -525,9 +525,10 @@ static void startCodeLine()
static void endFontClass(); static void endFontClass();
static void endCodeLine() static void endCodeLine()
{ {
if (g_currentFontClass) { g_code->endFontClass(); } endFontClass();
g_code->endCodeLine(); g_code->endCodeLine();
} }
......
...@@ -37,7 +37,8 @@ class ParserInterface; ...@@ -37,7 +37,8 @@ class ParserInterface;
* Note that leading *'s are already stripped from the comment block. * Note that leading *'s are already stripped from the comment block.
* @param[in] fileName The name of the file in which the comment is found. * @param[in] fileName The name of the file in which the comment is found.
* Mainly used for producing warnings. * Mainly used for producing warnings.
* @param[in] lineNr The line number at which the comment block was found. * @param[in,out] lineNr The line number at which the comment block was found.
* When the function returns it will be set to the last line parsed.
* @param[in] isBrief TRUE iff this comment block represents a brief description. * @param[in] isBrief TRUE iff this comment block represents a brief description.
* @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style. * @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style.
* This means that it starts as a brief description until the end of * This means that it starts as a brief description until the end of
...@@ -62,7 +63,7 @@ bool parseCommentBlock(ParserInterface *parser, ...@@ -62,7 +63,7 @@ bool parseCommentBlock(ParserInterface *parser,
Entry *curEntry, Entry *curEntry,
const QCString &comment, const QCString &comment,
const QCString &fileName, const QCString &fileName,
int lineNr, int &lineNr,
bool isBrief, bool isBrief,
bool isJavaDocStyle, bool isJavaDocStyle,
bool isInbody, bool isInbody,
......
...@@ -451,12 +451,6 @@ static bool makeStructuralIndicator(Entry::Sections s) ...@@ -451,12 +451,6 @@ static bool makeStructuralIndicator(Entry::Sections s)
{ {
if (!getDocSectionName(current->section).isEmpty()) if (!getDocSectionName(current->section).isEmpty())
{ {
//warn(yyFileName,yyLineNr,
// "Warning: found a structural command %s for a section already "
// "marked with structural command %s. Ignoring the latter command.",
// getDocSectionName(s).data(),
// getDocSectionName(current->section).data()
// );
return TRUE; return TRUE;
} }
else else
...@@ -2005,7 +1999,10 @@ static bool handlePage(const QCString &) ...@@ -2005,7 +1999,10 @@ static bool handlePage(const QCString &)
static bool handleMainpage(const QCString &) static bool handleMainpage(const QCString &)
{ {
bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC); bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC);
if (!stop) current->name = "mainpage"; if (!stop)
{
current->name = "mainpage";
}
BEGIN( PageDocArg2 ); BEGIN( PageDocArg2 );
return stop; return stop;
} }
...@@ -2013,7 +2010,10 @@ static bool handleMainpage(const QCString &) ...@@ -2013,7 +2010,10 @@ static bool handleMainpage(const QCString &)
static bool handleFile(const QCString &) static bool handleFile(const QCString &)
{ {
bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC); bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC);
if (!stop) current->name = yyFileName; if (!stop)
{
current->name = yyFileName;
}
BEGIN( FileDocArg1 ); BEGIN( FileDocArg1 );
return stop; return stop;
} }
...@@ -2372,7 +2372,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2372,7 +2372,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in */ Entry *curEntry, /* in */ Entry *curEntry,
/* in */ const QCString &comment, /* in */ const QCString &comment,
/* in */ const QCString &fileName, /* in */ const QCString &fileName,
/* in */ int lineNr, /* in,out */ int &lineNr,
/* in */ bool isBrief, /* in */ bool isBrief,
/* in */ bool isAutoBriefOn, /* in */ bool isAutoBriefOn,
/* in */ bool isInbody, /* in */ bool isInbody,
...@@ -2456,8 +2456,16 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2456,8 +2456,16 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
newEntryNeeded = needNewEntry; newEntryNeeded = needNewEntry;
// if we did not proceed during this call, it does not make
// sence to continue, since we get stuck. See bug 567346 for situations
// were this happens
if (parseMore && position==inputPosition) parseMore=FALSE;
if (parseMore) position=inputPosition; else position=0; if (parseMore) position=inputPosition; else position=0;
lineNr = yyLineNr;
//printf("position=%d parseMore=%d\n",position,parseMore);
return parseMore; return parseMore;
} }
......
...@@ -1383,18 +1383,6 @@ void Config::check() ...@@ -1383,18 +1383,6 @@ void Config::check()
Config_getBool("GENERATE_QHP")=qhp; Config_getBool("GENERATE_QHP")=qhp;
} }
// check QCH creation requirements
if (!Config_getString("QHG_LOCATION").isEmpty() &&
!Config_getBool("GENERATE_QHP"))
{
config_err("Warning: Specifying QHG_LOCATION requires GENERATE_QHP=YES.\n");
}
if (!Config_getString("QCH_FILE").isEmpty() &&
Config_getString("QHG_LOCATION").isEmpty())
{
config_err("Warning: Specifying QCH_FILE requires QHG_LOCATION to be set.\n");
}
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO")) if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
{ {
// don't show inline info for Java output, since Java has no inline // don't show inline info for Java output, since Java has no inline
......
...@@ -816,7 +816,7 @@ If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can ...@@ -816,7 +816,7 @@ If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
be used to specify the location (absolute path including file name) of be used to specify the location (absolute path including file name) of
the HTML help compiler (hhc.exe). If non-empty doxygen will try to run the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
the HTML help compiler on the generated index.hhp. the HTML help compiler on the generated index.hhp.
' defval='' depends='GENERATE_HTMLHELP'/> ' defval='' depends='GENERATE_HTMLHELP' abspath='1'/>
<option type='bool' id='GENERATE_CHI' docs=' <option type='bool' id='GENERATE_CHI' docs='
If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
controls if a separate .chi index file is generated (YES) or that controls if a separate .chi index file is generated (YES) or that
......
...@@ -478,10 +478,12 @@ public: ...@@ -478,10 +478,12 @@ public:
bool needs_entry(false); bool needs_entry(false);
bool brief(false); bool brief(false);
Protection prot(Public); Protection prot(Public);
int lineNr = lineNumber();
while (parseCommentBlock(m_parser, while (parseCommentBlock(m_parser,
m_currentEntry, m_currentEntry,
text, m_fileName.utf8().data(), lineNumber(), text, m_fileName.utf8().data(),
lineNr,
brief, m_currentComment->isJavaStyle, brief, m_currentComment->isJavaStyle,
false, false,
prot, prot,
......
...@@ -198,7 +198,7 @@ static bool matchExcludedSymbols(const char *name) ...@@ -198,7 +198,7 @@ static bool matchExcludedSymbols(const char *name)
void Definition::addToMap(const char *name,Definition *d) void Definition::addToMap(const char *name,Definition *d)
{ {
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString symbolName = name; QCString symbolName = name;
int index=computeQualifiedIndex(symbolName); int index=computeQualifiedIndex(symbolName);
if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2); if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2);
...@@ -383,8 +383,8 @@ bool Definition::_docsAlreadyAdded(const QCString &doc) ...@@ -383,8 +383,8 @@ bool Definition::_docsAlreadyAdded(const QCString &doc)
} }
void Definition::_setDocumentation(const char *d,const char *docFile,int docLine, void Definition::_setDocumentation(const char *d,const char *docFile,int docLine,
bool stripWhiteSpace,bool atTop) bool stripWhiteSpace,bool atTop)
{ {
if (d==0) return; if (d==0) return;
//printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace); //printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace);
QCString doc = d; QCString doc = d;
...@@ -405,21 +405,26 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine ...@@ -405,21 +405,26 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine
} }
if (m_impl->details->doc.isEmpty()) // fresh detailed description if (m_impl->details->doc.isEmpty()) // fresh detailed description
{ {
m_impl->details->doc = doc; m_impl->details->doc = doc;
} }
else if (atTop) // another detailed description, append it to the start else if (atTop) // another detailed description, append it to the start
{ {
m_impl->details->doc = doc+"\n\n"+m_impl->details->doc; m_impl->details->doc = doc+"\n\n"+m_impl->details->doc;
} }
else // another detailed description, append it to the end else // another detailed description, append it to the end
{ {
m_impl->details->doc += "\n\n"+doc; m_impl->details->doc += "\n\n"+doc;
} }
if (docLine!=-1) // store location if valid if (docLine!=-1) // store location if valid
{ {
m_impl->details->file = docFile; m_impl->details->file = docFile;
m_impl->details->line = docLine; m_impl->details->line = docLine;
} }
else
{
m_impl->details->file = docFile;
m_impl->details->line = 1;
}
} }
} }
......
This diff is collapsed.
...@@ -324,10 +324,10 @@ class DocStyleChange : public DocNode ...@@ -324,10 +324,10 @@ class DocStyleChange : public DocNode
class DocSymbol : public DocNode class DocSymbol : public DocNode
{ {
public: public:
enum SymType { Unknown=0, BSlash,At,Less,Greater,Amp,Dollar,Hash,Percent, enum SymType { Unknown=0, BSlash, At, Less, Greater, Amp, Dollar, Hash,
Copy, Tm, Reg, Apos, Quot, Uml, Acute, Grave, Circ, Tilde, Percent, Copy, Tm, Reg, Apos, Quot, Uml, Acute,
Szlig, Cedil, Ring, Nbsp, Slash, Lsquo, Rsquo, Ldquo, Rdquo, Grave, Circ, Tilde, Szlig, Cedil, Ring, Nbsp, Slash,
Ndash, Mdash, Aelig, AElig Lsquo, Rsquo, Ldquo, Rdquo, Ndash, Mdash, Aelig, AElig
}; };
DocSymbol(DocNode *parent,SymType s,char letter='\0') : DocSymbol(DocNode *parent,SymType s,char letter='\0') :
m_parent(parent), m_symbol(s), m_letter(letter) {} m_parent(parent), m_symbol(s), m_letter(letter) {}
...@@ -488,16 +488,21 @@ class DocFormula : public DocNode ...@@ -488,16 +488,21 @@ class DocFormula : public DocNode
class DocIndexEntry : public DocNode class DocIndexEntry : public DocNode
{ {
public: public:
DocIndexEntry(DocNode *parent) : m_parent(parent) { } DocIndexEntry(DocNode *parent,Definition *scope,MemberDef *md)
: m_parent(parent), m_scope(scope), m_member(md) { }
Kind kind() const { return Kind_IndexEntry; } Kind kind() const { return Kind_IndexEntry; }
int parse(); int parse();
DocNode *parent() const { return m_parent; } DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); } Definition *scope() const { return m_scope; }
QString entry() { return m_entry; } MemberDef *member() const { return m_member; }
QString entry() const { return m_entry; }
void accept(DocVisitor *v) { v->visit(this); }
private: private:
DocNode *m_parent; DocNode *m_parent;
QString m_entry; QString m_entry;
Definition *m_scope;
MemberDef *m_member;
}; };
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
......
...@@ -61,7 +61,7 @@ void DocSets::initialize() ...@@ -61,7 +61,7 @@ void DocSets::initialize()
"DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n" "DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n"
"DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n" "DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n"
"DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n" "DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n"
"DOCSET_INSTALL=~/Library/Developer/Shared/Documentation/DocSets\n" "DESTDIR=~/Library/Developer/Shared/Documentation/DocSets\n"
"XCODE_INSTALL=$(shell xcode-select -print-path)\n" "XCODE_INSTALL=$(shell xcode-select -print-path)\n"
"\n" "\n"
"all: docset\n" "all: docset\n"
...@@ -85,11 +85,11 @@ void DocSets::initialize() ...@@ -85,11 +85,11 @@ void DocSets::initialize()
"\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n" "\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n"
"\n" "\n"
"install: docset\n" "install: docset\n"
"\tmkdir -p $(DOCSET_INSTALL)\n" "\tmkdir -p $(DESTDIR)\n"
"\tcp -R $(DOCSET_NAME) $(DOCSET_INSTALL)\n" "\tcp -R $(DOCSET_NAME) $(DESTDIR)\n"
"\n" "\n"
"uninstall:\n" "uninstall:\n"
"\trm -rf $(DOCSET_INSTALL)\n" "\trm -rf $(DESTDIR)/$(DOCSET_NAME)\n"
"\n" "\n"
"always:\n"; "always:\n";
} }
...@@ -227,15 +227,28 @@ void DocSets::addContentsItem(bool isDir, ...@@ -227,15 +227,28 @@ void DocSets::addContentsItem(bool isDir,
} }
} }
void DocSets::addIndexItem(const char *, const char *, void DocSets::addIndexItem(Definition *context,MemberDef *md,
const char *, const char *, const char *anchor,const char *word)
const char *,const MemberDef *md)
{ {
if (!md->isLinkable()) return; // internal symbol (void)anchor;
(void)word;
if (md==0 || context==0) return; // TODO: also index non members...
ClassDef *cd = md->getClassDef(); FileDef *fd = 0;
NamespaceDef *nd = md->getNamespaceDef(); ClassDef *cd = 0;
FileDef *fd = md->getFileDef(); NamespaceDef *nd = 0;
if (md)
{
fd = md->getFileDef();
cd = md->getClassDef();
nd = md->getNamespaceDef();
if (!md->isLinkable()) return; // internal symbol
}
QCString scope;
QCString type;
QCString decl;
// determine language // determine language
QCString lang; QCString lang;
...@@ -246,13 +259,13 @@ void DocSets::addIndexItem(const char *, const char *, ...@@ -246,13 +259,13 @@ void DocSets::addIndexItem(const char *, const char *,
case SrcLangExt_Cpp: case SrcLangExt_Cpp:
case SrcLangExt_ObjC: case SrcLangExt_ObjC:
{ {
if (md->isObjCMethod() || md->isObjCProperty()) if (md && (md->isObjCMethod() || md->isObjCProperty()))
lang="occ"; // Objective C/C++ lang="occ"; // Objective C/C++
else if (fd && fd->name().right(2).lower()==".c") else if (fd && fd->name().right(2).lower()==".c")
lang="c"; // Plain C lang="c"; // Plain C
else if (cd==0 && nd==0) else if (cd==0 && nd==0)
lang="c"; // Plain C symbol outside any class or namespace lang="c"; // Plain C symbol outside any class or namespace
else else
lang="cpp"; // C++ lang="cpp"; // C++
} }
break; break;
...@@ -268,107 +281,133 @@ void DocSets::addIndexItem(const char *, const char *, ...@@ -268,107 +281,133 @@ void DocSets::addIndexItem(const char *, const char *,
case SrcLangExt_XML: lang="xml"; break; // DBUS XML case SrcLangExt_XML: lang="xml"; break; // DBUS XML
} }
// determine scope if (md)
QCString scope;
QCString type;
QCString decl;
Definition *d = 0;
if (fd && fd->isLinkable() && m_scopes.find(fd->getOutputFileBase())==0)
{ {
writeToken(m_tts,fd,"file",lang,0,0,0); if (!md->isLinkable()) return; // internal symbol
m_scopes.append(fd->getOutputFileBase(),(void*)0x8); if (context==0)
{
if (md->getGroupDef())
context = md->getGroupDef();
else if (md->getFileDef())
context = md->getFileDef();
if (context==0) return; // should not happen
switch (md->memberType())
{
case MemberDef::Define:
type="macro"; break;
case MemberDef::Function:
if (cd && (cd->compoundType()==ClassDef::Interface ||
cd->compoundType()==ClassDef::Class))
{
if (md->isStatic())
type="clm"; // class member
else
type="instm"; // instance member
}
else if (cd && cd->compoundType()==ClassDef::Protocol)
{
if (md->isStatic())
type="intfcm"; // interface class member
else
type="intfm"; // interface member
}
else
type="func";
break;
case MemberDef::Variable:
type="data"; break;
case MemberDef::Typedef:
type="tdef"; break;
case MemberDef::Enumeration:
type="enum"; break;
case MemberDef::EnumValue:
type="econst"; break;
//case MemberDef::Prototype:
// type="prototype"; break;
case MemberDef::Signal:
type="signal"; break;
case MemberDef::Slot:
type="slot"; break;
case MemberDef::Friend:
type="ffunc"; break;
case MemberDef::DCOP:
type="dcop"; break;
case MemberDef::Property:
if (cd && cd->compoundType()==ClassDef::Protocol)
type="intfp"; // interface property
else
type="instp"; // instance property
break;
case MemberDef::Event:
type="event"; break;
}
writeToken(m_tts,md,type,lang,scope,md->anchor());
}
} }
if (cd) else if (context && context->isLinkable())
{ {
scope = cd->qualifiedName(); if (fd==0 && context->definitionType()==Definition::TypeFile)
if (cd->isTemplate()) {
type="tmplt"; fd = (FileDef*)context;
else if (cd->compoundType()==ClassDef::Protocol) }
if (cd==0 && context->definitionType()==Definition::TypeClass)
{
cd = (ClassDef*)context;
}
if (nd==0 && context->definitionType()==Definition::TypeNamespace)
{ {
type="intf"; nd = (NamespaceDef*)context;
if (scope.right(2)=="-p") scope=scope.left(scope.length()-2);
} }
else if (cd->compoundType()==ClassDef::Interface) if (fd)
type="cl";
else if (cd->compoundType()==ClassDef::Category)
type="cat";
else
type = "cl";
d = cd;
IncludeInfo *ii = cd->includeInfo();
if (ii)
{ {
decl=ii->includeName; type="file";
if (decl.isEmpty()) }
else if (cd)
{
scope = cd->qualifiedName();
if (cd->isTemplate())
{ {
decl=ii->local; type="tmplt";
} }
} else if (cd->compoundType()==ClassDef::Protocol)
}
else if (nd)
{
scope = nd->name();
type = "ns";
d = cd;
}
if (d && d->isLinkable() && m_scopes.find(d->getOutputFileBase())==0)
{
writeToken(m_tts,d,type,lang,0,0,decl);
m_scopes.append(d->getOutputFileBase(),(void*)0x8);
}
switch (md->memberType())
{
case MemberDef::Define:
type="macro"; break;
case MemberDef::Function:
if (cd && (cd->compoundType()==ClassDef::Interface ||
cd->compoundType()==ClassDef::Class)
)
{ {
if (md->isStatic()) type="intf";
type="clm"; if (scope.right(2)=="-p") scope=scope.left(scope.length()-2);
else
type="instm";
} }
else if (cd && cd->compoundType()==ClassDef::Protocol) else if (cd->compoundType()==ClassDef::Interface)
{ {
if (md->isStatic()) type="cl";
type="intfcm"; }
else else if (cd->compoundType()==ClassDef::Category)
type="intfm"; {
type="cat";
} }
else else
type="func"; {
break; type = "cl";
case MemberDef::Variable: }
type="data"; break; IncludeInfo *ii = cd->includeInfo();
case MemberDef::Typedef: if (ii)
type="tdef"; break; {
case MemberDef::Enumeration: decl=ii->includeName;
type="enum"; break; if (decl.isEmpty())
case MemberDef::EnumValue: {
type="econst"; break; decl=ii->local;
//case MemberDef::Prototype: }
// type="prototype"; break; }
case MemberDef::Signal: }
type="signal"; break; else if (nd)
case MemberDef::Slot: {
type="slot"; break; scope = nd->name();
case MemberDef::Friend: type = "ns";
type="ffunc"; break; }
case MemberDef::DCOP: if (m_scopes.find(context->getOutputFileBase())==0)
type="dcop"; break; {
case MemberDef::Property: writeToken(m_tts,context,type,lang,0,0,decl);
if (cd && cd->compoundType()==ClassDef::Protocol) m_scopes.append(context->getOutputFileBase(),(void*)0x8);
type="intfp"; }
else
type="instp";
break;
case MemberDef::Event:
type="event"; break;
} }
writeToken(m_tts,md,type,lang,scope,md->anchor());
} }
void DocSets::writeToken(QTextStream &t, void DocSets::writeToken(QTextStream &t,
...@@ -384,9 +423,18 @@ void DocSets::writeToken(QTextStream &t, ...@@ -384,9 +423,18 @@ void DocSets::writeToken(QTextStream &t,
QString name = d->name(); QString name = d->name();
if (name.right(2)=="-p") name=name.left(name.length()-2); if (name.right(2)=="-p") name=name.left(name.length()-2);
t << " <Name>" << convertToXML(name) << "</Name>" << endl; t << " <Name>" << convertToXML(name) << "</Name>" << endl;
t << " <APILanguage>" << lang << "</APILanguage>" << endl; if (!lang.isEmpty())
t << " <Type>" << type << "</Type>" << endl; {
t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl; t << " <APILanguage>" << lang << "</APILanguage>" << endl;
}
if (!type.isEmpty())
{
t << " <Type>" << type << "</Type>" << endl;
}
if (scope)
{
t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl;
}
t << " </TokenIdentifier>" << endl; t << " </TokenIdentifier>" << endl;
t << " <Path>" << d->getOutputFileBase() t << " <Path>" << d->getOutputFileBase()
<< Doxygen::htmlFileExtension << "</Path>" << endl; << Doxygen::htmlFileExtension << "</Path>" << endl;
...@@ -397,7 +445,7 @@ void DocSets::writeToken(QTextStream &t, ...@@ -397,7 +445,7 @@ void DocSets::writeToken(QTextStream &t,
QCString tooltip = d->briefDescriptionAsTooltip(); QCString tooltip = d->briefDescriptionAsTooltip();
if (!tooltip.isEmpty()) if (!tooltip.isEmpty())
{ {
t << " <Abstract>" << tooltip << "</Abstract>" << endl; t << " <Abstract>" << convertToXML(tooltip) << "</Abstract>" << endl;
} }
if (decl) if (decl)
{ {
......
...@@ -46,9 +46,11 @@ class DocSets : public IndexIntf ...@@ -46,9 +46,11 @@ class DocSets : public IndexIntf
const char *file = 0, const char *file = 0,
const char *anchor = 0 const char *anchor = 0
); );
void addIndexItem(const char *level1, const char *level2, //void addIndexItem(const char *level1, const char *level2,
const char *contRef, const char *memRef, // const char *contRef, const char *memRef,
const char *anchor,const MemberDef *md); // const char *anchor,const MemberDef *md);
void addIndexItem(Definition *context,MemberDef *md,
const char *anchor,const char *word);
void addIndexFile(const char *name); void addIndexFile(const char *name);
void addImageFile(const char *) {} void addImageFile(const char *) {}
void addStyleSheetFile(const char *) {} void addStyleSheetFile(const char *) {}
......
...@@ -305,7 +305,7 @@ FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK} ...@@ -305,7 +305,7 @@ FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)? LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
VERBATIM "verbatim"{BLANK}* VERBATIM "verbatim"{BLANK}*
SPCMD1 {CMD}([a-z_A-Z0-9]+|{VERBATIM}) SPCMD1 {CMD}([a-z_A-Z0-9]+|{VERBATIM})
SPCMD2 {CMD}[\\@<>&$#%~] SPCMD2 {CMD}[\\@<>&$#%~"]
SPCMD3 {CMD}form#[0-9]+ SPCMD3 {CMD}form#[0-9]+
INOUT "in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in") INOUT "in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]" PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
...@@ -924,7 +924,7 @@ REFWORD ("#"|"::")?({ID}{TEMPLPART}?("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCA ...@@ -924,7 +924,7 @@ REFWORD ("#"|"::")?({ID}{TEMPLPART}?("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCA
<*>\n { <*>\n {
warn(g_fileName,yylineno,"Error: Unexpected new line character"); warn(g_fileName,yylineno,"Error: Unexpected new line character");
} }
<*>[\\@<>&$#%~] { /* unescaped special character */ <*>[\\@<>&$#%~"] { /* unescaped special character */
//warn(g_fileName,yylineno,"Warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext); //warn(g_fileName,yylineno,"Warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
g_token->name = yytext; g_token->name = yytext;
return TK_COMMAND; return TK_COMMAND;
......
...@@ -1173,7 +1173,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const ...@@ -1173,7 +1173,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const
checkDotResult(absImgName); checkDotResult(absImgName);
if (Config_getBool("DOT_CLEANUP")) d.remove(dotName); if (Config_getBool("DOT_CLEANUP")) d.remove(dotName);
} }
Doxygen::indexList.addImageFile(absImgName); Doxygen::indexList.addImageFile(imgName);
// write image and map in a table row // write image and map in a table row
QCString mapLabel = escapeCharsInString(n->m_label,FALSE); QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#" out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
......
...@@ -6926,17 +6926,17 @@ static void computeMemberRelations() ...@@ -6926,17 +6926,17 @@ static void computeMemberRelations()
{ {
ClassDef *bmcd = bmd->getClassDef(); ClassDef *bmcd = bmd->getClassDef();
//printf("Check relation between `%s'::`%s' (%p) and `%s'::`%s' (%p)\n", //printf("Check relation between `%s'::`%s' (%p) and `%s'::`%s' (%p)\n",
// mcd->name().data(),md->name().data(),md, // mcd->name().data(),md->name().data(),md,
// bmcd->name().data(),bmd->name().data(),bmd // bmcd->name().data(),bmd->name().data(),bmd
// ); // );
if (md!=bmd && bmcd && mcd && bmcd!=mcd && mcd->isBaseClass(bmcd,TRUE)) if (md!=bmd && bmcd && mcd && bmcd!=mcd && mcd->isBaseClass(bmcd,TRUE))
{ {
//printf(" Base argList=`%s'\n Super argList=`%s'\n",
// argListToString(bmd->argumentList()).data(),
// argListToString(md->argumentList()).data()
// );
LockingPtr<ArgumentList> bmdAl = bmd->argumentList(); LockingPtr<ArgumentList> bmdAl = bmd->argumentList();
LockingPtr<ArgumentList> mdAl = md->argumentList(); LockingPtr<ArgumentList> mdAl = md->argumentList();
//printf(" Base argList=`%s'\n Super argList=`%s'\n",
// argListToString(bmdAl.pointer()).data(),
// argListToString(mdAl.pointer()).data()
// );
if ( if (
matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl.pointer(), matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl.pointer(),
md->getOuterScope(), md->getFileDef(), mdAl.pointer(), md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
...@@ -10167,13 +10167,17 @@ void generateOutput() ...@@ -10167,13 +10167,17 @@ void generateOutput()
{ {
g_outputList->add(new HtmlGenerator); g_outputList->add(new HtmlGenerator);
HtmlGenerator::init(); HtmlGenerator::init();
if (Config_getBool("GENERATE_HTMLHELP")) Doxygen::indexList.addIndex(new HtmlHelp);
if (Config_getBool("GENERATE_QHP")) Doxygen::indexList.addIndex(new Qhp);
#if 0 #if 0
if (Config_getBool("GENERATE_INDEXLOG")) Doxygen::indexList.addIndex(new IndexLog); if (Config_getBool("GENERATE_INDEXLOG")) Doxygen::indexList.addIndex(new IndexLog);
#endif #endif
if (Config_getBool("GENERATE_TREEVIEW")) Doxygen::indexList.addIndex(new FTVHelp); bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP");
if (Config_getBool("GENERATE_DOCSET")) Doxygen::indexList.addIndex(new DocSets); bool generateQhp = Config_getBool("GENERATE_QHP");
bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
bool generateDocSet = Config_getBool("GENERATE_DOCSET");
if (generateHtmlHelp) Doxygen::indexList.addIndex(new HtmlHelp);
if (generateQhp) Doxygen::indexList.addIndex(new Qhp);
if (generateTreeView) Doxygen::indexList.addIndex(new FTVHelp);
if (generateDocSet) Doxygen::indexList.addIndex(new DocSets);
Doxygen::indexList.initialize(); Doxygen::indexList.initialize();
Doxygen::indexList.addImageFile("tab_r.gif"); Doxygen::indexList.addImageFile("tab_r.gif");
Doxygen::indexList.addImageFile("tab_l.gif"); Doxygen::indexList.addImageFile("tab_l.gif");
...@@ -10258,6 +10262,10 @@ void generateOutput() ...@@ -10258,6 +10262,10 @@ void generateOutput()
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
writeSearchIndex(); writeSearchIndex();
Doxygen::indexList.addImageFile("search/close.png");
Doxygen::indexList.addImageFile("search/search.png");
Doxygen::indexList.addStyleSheetFile("search/search.css");
Doxygen::indexList.addStyleSheetFile("search/search.js");
} }
//statistics(); //statistics();
...@@ -10407,26 +10415,6 @@ void generateOutput() ...@@ -10407,26 +10415,6 @@ void generateOutput()
} }
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
} }
#if 0
if ( Config_getBool("GENERATE_HTMLHELP") &&
!Config_getString("DOXYGEN2QTHELP_LOC").isEmpty() &&
!Config_getString("QTHELP_CONFIG").isEmpty())
{
msg("Running doxygen2qthelp...\n");
const QCString qtHelpFile = Config_getString("QTHELP_FILE");
const QCString args = QCString().sprintf("--config=%s index.hhp%s%s",
Config_getString("QTHELP_CONFIG").data(),
(qtHelpFile.isEmpty() ? "" : " "), (qtHelpFile.isEmpty() ? "" : qtHelpFile.data()));
const QString oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString("HTML_OUTPUT"));
if (portable_system(Config_getString("DOXYGEN2QTHELP_LOC"), args.data(), FALSE))
{
err("Error: failed to run doxygen2qthelp on index.hhp\n");
}
QDir::setCurrent(oldDir);
}
#endif
if ( Config_getBool("GENERATE_HTML") && if ( Config_getBool("GENERATE_HTML") &&
Config_getBool("GENERATE_QHP") && Config_getBool("GENERATE_QHP") &&
!Config_getString("QHG_LOCATION").isEmpty()) !Config_getString("QHG_LOCATION").isEmpty())
......
...@@ -263,7 +263,7 @@ static void startCodeLine() ...@@ -263,7 +263,7 @@ static void startCodeLine()
static void endFontClass(); static void endFontClass();
static void endCodeLine() static void endCodeLine()
{ {
if (g_currentFontClass) { g_code->endFontClass(); } endFontClass();
g_code->endCodeLine(); g_code->endCodeLine();
} }
......
...@@ -1602,12 +1602,13 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -1602,12 +1602,13 @@ static void handleCommentBlock(const QCString &doc,bool brief)
int position=0; int position=0;
if (docBlockInBody && hideInBodyDocs) return; if (docBlockInBody && hideInBodyDocs) return;
//fprintf(stderr,"call parseCommentBlock [%s]\n",doc.data()); //fprintf(stderr,"call parseCommentBlock [%s]\n",doc.data());
int lineNr = brief ? current->briefLine : current->docLine;
while (parseCommentBlock( while (parseCommentBlock(
g_thisParser, g_thisParser,
docBlockInBody ? last_entry : current, docBlockInBody ? last_entry : current,
doc, // text doc, // text
yyFileName, // file yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start lineNr,
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle, docBlockInBody ? FALSE : docBlockJavaStyle,
docBlockInBody, docBlockInBody,
......
...@@ -82,9 +82,10 @@ class FTVHelp : public IndexIntf ...@@ -82,9 +82,10 @@ class FTVHelp : public IndexIntf
const char *ref, const char *ref,
const char *file, const char *file,
const char *anchor); const char *anchor);
void addIndexItem(const char *, const char *, //void addIndexItem(const char *, const char *,
const char *, const char *, // const char *, const char *,
const char *, const MemberDef *) {} // const char *, const MemberDef *) {}
void addIndexItem(Definition *,MemberDef *,const char *,const char *) {}
void addIndexFile(const char *) {} void addIndexFile(const char *) {}
void addImageFile(const char *) {} void addImageFile(const char *) {}
void addStyleSheetFile(const char *) {} void addStyleSheetFile(const char *) {}
......
...@@ -34,6 +34,34 @@ ...@@ -34,6 +34,34 @@
static const int NUM_HTML_LIST_TYPES = 4; static const int NUM_HTML_LIST_TYPES = 4;
static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"}; static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
static QCString convertIndexWordToAnchor(const QString &word)
{
static char hex[] = "0123456789abcdef";
uint i;
QCString result;
for (i=0;i<word.length();i++)
{
int c = word.at(i);
if (isId(c))
{
result+=c;
}
else if (isspace(c))
{
result+="_";
}
else
{
char cs[3];
cs[0]=hex[c>>4];
cs[1]=hex[c&0xf];
cs[2]=0;
result+=cs;
}
}
return result;
}
static bool mustBeOutsideParagraph(DocNode *n) static bool mustBeOutsideParagraph(DocNode *n)
{ {
switch (n->kind()) switch (n->kind())
...@@ -293,7 +321,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -293,7 +321,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::XmlOnly: case DocVerbatim::XmlOnly:
/* nothing */ /* nothing */
break; break;
case DocVerbatim::Dot: case DocVerbatim::Dot:
{ {
static int dotindex = 1; static int dotindex = 1;
...@@ -470,8 +498,20 @@ void HtmlDocVisitor::visit(DocFormula *f) ...@@ -470,8 +498,20 @@ void HtmlDocVisitor::visit(DocFormula *f)
} }
} }
void HtmlDocVisitor::visit(DocIndexEntry *) void HtmlDocVisitor::visit(DocIndexEntry *e)
{ {
QCString anchor = convertIndexWordToAnchor(e->entry());
if (e->member())
{
anchor.prepend(e->member()->anchor()+"_");
}
m_t << "<a name=\"" << anchor << "\"></a>";
//printf("*** DocIndexEntry: word='%s' scope='%s' member='%s'\n",
// e->entry().data(),
// e->scope() ? e->scope()->name().data() : "<null>",
// e->member() ? e->member()->name().data() : "<null>"
// );
Doxygen::indexList.addIndexItem(e->scope(),e->member(),anchor,e->entry());
} }
void HtmlDocVisitor::visit(DocSimpleSectSep *) void HtmlDocVisitor::visit(DocSimpleSectSep *)
......
...@@ -302,8 +302,13 @@ static QDict<QCString> s_languageDict; ...@@ -302,8 +302,13 @@ static QDict<QCString> s_languageDict;
void HtmlHelp::initialize() void HtmlHelp::initialize()
{ {
const char *str = Config_getString("CHM_INDEX_ENCODING"); const char *str = Config_getString("CHM_INDEX_ENCODING");
if(!str) str = "Windows-1250"; if (!str) str = "CP1250"; // use safe and likely default
m_fromUtf8 = portable_iconv_open(str,"UTF-8"); m_fromUtf8 = portable_iconv_open(str,"UTF-8");
if (m_fromUtf8==(void *)(-1))
{
err("Error: unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
exit(1);
}
/* open the contents file */ /* open the contents file */
QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc"; QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc";
...@@ -639,21 +644,36 @@ void HtmlHelp::addContentsItem(bool isDir, ...@@ -639,21 +644,36 @@ void HtmlHelp::addContentsItem(bool isDir,
cts << "</OBJECT>\n"; cts << "</OBJECT>\n";
} }
/*! Add an list item to the index file.
* \param level1 the main index of the item. void HtmlHelp::addIndexItem(Definition *context,MemberDef *md,
* \param level2 the sub index of the item. const char *anc,const char *word)
* \param contRef the output file refering to the container.
* \param memRef the output file containing to the member documentation.
* \param anchor the anchor of the item.
* \param md the member definition corresponding to this item.
* \sa HtmlHelpIndex
*/
void HtmlHelp::addIndexItem(const char *level1, const char *level2,
const char *contRef, const char *memRef,
const char *anchor,const MemberDef *md)
{ {
(void)md; if (md)
index->addItem(level1,level2,contRef,anchor,TRUE,FALSE); {
index->addItem(level2,level1,memRef,anchor,TRUE,TRUE); static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
if (context==0) // global member
{
if (md->getGroupDef())
context = md->getGroupDef();
else if (md->getFileDef())
context = md->getFileDef();
}
if (context==0) return; // should not happen
QCString cfname = md->getOutputFileBase();
QCString cfiname = context->getOutputFileBase();
QCString level1 = context->name();
QCString level2 = md->name();
QCString contRef = separateMemberPages ? cfname : cfiname;
QCString memRef = cfname;
QCString anchor = anc;
index->addItem(level1,level2,contRef,anchor,TRUE,FALSE);
index->addItem(level2,level1,memRef,anchor,TRUE,TRUE);
}
else if (context)
{
QCString level1 = word ? QCString(word) : context->name();
index->addItem(level1,0,context->getOutputFileBase(),anc,TRUE,FALSE);
}
} }
...@@ -74,9 +74,11 @@ class HtmlHelp : public IndexIntf ...@@ -74,9 +74,11 @@ class HtmlHelp : public IndexIntf
const char *ref = 0, const char *ref = 0,
const char *file = 0, const char *file = 0,
const char *anchor = 0); const char *anchor = 0);
void addIndexItem(const char *level1, const char *level2, //void addIndexItem(const char *level1, const char *level2,
const char *contRef, const char *memRef, // const char *contRef, const char *memRef,
const char *anchor,const MemberDef *md); // const char *anchor,const MemberDef *md);
void addIndexItem(Definition *context,MemberDef *md,
const char *anchor,const char *word);
void addIndexFile(const char *name); void addIndexFile(const char *name);
void addImageFile(const char *) {} void addImageFile(const char *) {}
void addStyleSheetFile(const char *) {} void addStyleSheetFile(const char *) {}
......
...@@ -131,7 +131,7 @@ class MemberIndexList : public QList<MemberDef> ...@@ -131,7 +131,7 @@ class MemberIndexList : public QList<MemberDef>
} }
}; };
#define MEMBER_INDEX_ENTRIES 128 #define MEMBER_INDEX_ENTRIES 256
static MemberIndexList g_memberIndexLetterUsed[CMHL_Total][MEMBER_INDEX_ENTRIES]; static MemberIndexList g_memberIndexLetterUsed[CMHL_Total][MEMBER_INDEX_ENTRIES];
static MemberIndexList g_fileIndexLetterUsed[FMHL_Total][MEMBER_INDEX_ENTRIES]; static MemberIndexList g_fileIndexLetterUsed[FMHL_Total][MEMBER_INDEX_ENTRIES];
...@@ -1573,7 +1573,8 @@ void addClassMemberNameToIndex(MemberDef *md) ...@@ -1573,7 +1573,8 @@ void addClassMemberNameToIndex(MemberDef *md)
{ {
QCString n = md->name(); QCString n = md->name();
int index = getPrefixIndex(n); int index = getPrefixIndex(n);
int letter = tolower(n.at(index)) & 0x7f; int charCode = n.at(index);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (!n.isEmpty()) if (!n.isEmpty())
{ {
bool isFriendToHide = hideFriendCompounds && bool isFriendToHide = hideFriendCompounds &&
...@@ -1653,7 +1654,8 @@ void addNamespaceMemberNameToIndex(MemberDef *md) ...@@ -1653,7 +1654,8 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
{ {
QCString n = md->name(); QCString n = md->name();
int index = getPrefixIndex(n); int index = getPrefixIndex(n);
int letter = tolower(n.at(index)); int charCode = n.at(index);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (!n.isEmpty()) if (!n.isEmpty())
{ {
g_namespaceIndexLetterUsed[NMHL_All][letter].append(md); g_namespaceIndexLetterUsed[NMHL_All][letter].append(md);
...@@ -1711,7 +1713,8 @@ void addFileMemberNameToIndex(MemberDef *md) ...@@ -1711,7 +1713,8 @@ void addFileMemberNameToIndex(MemberDef *md)
{ {
QCString n = md->name(); QCString n = md->name();
int index = getPrefixIndex(n); int index = getPrefixIndex(n);
int letter = tolower(n.at(index)); int charCode = n.at(index);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (!n.isEmpty()) if (!n.isEmpty())
{ {
g_fileIndexLetterUsed[FMHL_All][letter].append(md); g_fileIndexLetterUsed[FMHL_All][letter].append(md);
...@@ -2237,7 +2240,8 @@ static void addMemberToSearchIndex( ...@@ -2237,7 +2240,8 @@ static void addMemberToSearchIndex(
cd->templateMaster()==0) cd->templateMaster()==0)
{ {
QCString n = md->name(); QCString n = md->name();
int letter = tolower(n.at(0)) & 0x7f; int charCode = n.at(0);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (!n.isEmpty()) if (!n.isEmpty())
{ {
bool isFriendToHide = hideFriendCompounds && bool isFriendToHide = hideFriendCompounds &&
...@@ -2299,7 +2303,8 @@ static void addMemberToSearchIndex( ...@@ -2299,7 +2303,8 @@ static void addMemberToSearchIndex(
) )
{ {
QCString n = md->name(); QCString n = md->name();
int letter = tolower(n.at(0)) & 0x7f; int charCode = n.at(0);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (!n.isEmpty()) if (!n.isEmpty())
{ {
symbols[SEARCH_INDEX_ALL][letter].append(md); symbols[SEARCH_INDEX_ALL][letter].append(md);
...@@ -2412,7 +2417,8 @@ void writeSearchIndex() ...@@ -2412,7 +2417,8 @@ void writeSearchIndex()
ClassDef *cd; ClassDef *cd;
for (;(cd=cli.current());++cli) for (;(cd=cli.current());++cli)
{ {
int letter = tolower(cd->localName().at(0)); int charCode = cd->localName().at(0);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (cd->isLinkable() && isId(letter)) if (cd->isLinkable() && isId(letter))
{ {
g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(cd); g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(cd);
...@@ -2425,7 +2431,8 @@ void writeSearchIndex() ...@@ -2425,7 +2431,8 @@ void writeSearchIndex()
NamespaceDef *nd; NamespaceDef *nd;
for (;(nd=nli.current());++nli) for (;(nd=nli.current());++nli)
{ {
int letter = tolower(nd->name().at(0)); int charCode = nd->name().at(0);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (nd->isLinkable() && isId(letter)) if (nd->isLinkable() && isId(letter))
{ {
g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(nd); g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(nd);
...@@ -2442,7 +2449,8 @@ void writeSearchIndex() ...@@ -2442,7 +2449,8 @@ void writeSearchIndex()
FileDef *fd; FileDef *fd;
for (;(fd=fni.current());++fni) for (;(fd=fni.current());++fni)
{ {
int letter = tolower(fd->name().at(0)); int charCode = fd->name().at(0);
int letter = charCode<128 ? tolower(charCode) : charCode;
if (fd->isLinkable() && isId(letter)) if (fd->isLinkable() && isId(letter))
{ {
g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(fd); g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(fd);
...@@ -2772,7 +2780,7 @@ void writeSearchIndex() ...@@ -2772,7 +2780,7 @@ void writeSearchIndex()
{ {
if (!first) t << "," << endl; if (!first) t << "," << endl;
t << " " << j << ": \""; t << " " << j << ": \"";
for (p=32;p<MEMBER_INDEX_ENTRIES;p++) for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
{ {
t << (g_searchIndexSymbols[i][p].count()>0 ? "1" : "0"); t << (g_searchIndexSymbols[i][p].count()>0 ? "1" : "0");
} }
......
...@@ -22,11 +22,12 @@ ...@@ -22,11 +22,12 @@
#include <qfile.h> #include <qfile.h>
#include <qlist.h> #include <qlist.h>
class Definition;
class MemberDef; class MemberDef;
class OutputList; class OutputList;
class QTextStream; class QTextStream;
/** \brief Abstract interface for index generators. */
class IndexIntf class IndexIntf
{ {
public: public:
...@@ -37,44 +38,56 @@ class IndexIntf ...@@ -37,44 +38,56 @@ class IndexIntf
virtual void decContentsDepth() = 0; virtual void decContentsDepth() = 0;
virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0, virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0,
const char *file = 0, const char *anchor = 0) = 0; const char *file = 0, const char *anchor = 0) = 0;
virtual void addIndexItem(const char *level1, const char *level2, const char *contRef, virtual void addIndexItem(Definition *context,MemberDef *md,
const char *memRef, const char *anchor,const MemberDef *md) = 0; const char *anchor,const char *word) = 0;
virtual void addIndexFile(const char *name) = 0; virtual void addIndexFile(const char *name) = 0;
virtual void addImageFile(const char *name) = 0; virtual void addImageFile(const char *name) = 0;
virtual void addStyleSheetFile(const char *name) = 0; virtual void addStyleSheetFile(const char *name) = 0;
}; };
/** \brief A list of index interfaces.
*
* This class itself implements all methods of IndexIntf and
* just forwards the calls to all items in the list.
*/
class IndexList : public IndexIntf class IndexList : public IndexIntf
{ {
private: private:
QList<IndexIntf> m_intfs; QList<IndexIntf> m_intfs;
// --- foreach implementations for various number of arguments
void foreach(void (IndexIntf::*methodPtr)()) void foreach(void (IndexIntf::*methodPtr)())
{ {
QListIterator<IndexIntf> li(m_intfs); QListIterator<IndexIntf> li(m_intfs);
for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)();
} }
template<typename A1> template<typename A1>
void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1) void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1)
{ {
QListIterator<IndexIntf> li(m_intfs); QListIterator<IndexIntf> li(m_intfs);
for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1);
} }
template<typename A1,typename A2,typename A3,typename A4,typename A5>
void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) template<typename A1,typename A2,typename A3,typename A4>
void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4),A1 a1,A2 a2,A3 a3,A4 a4)
{ {
QListIterator<IndexIntf> li(m_intfs); QListIterator<IndexIntf> li(m_intfs);
for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4);
} }
template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) template<typename A1,typename A2,typename A3,typename A4,typename A5>
void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5)
{ {
QListIterator<IndexIntf> li(m_intfs); QListIterator<IndexIntf> li(m_intfs);
for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
} }
public: public:
/** Creates a list of indexes */
IndexList() { m_intfs.setAutoDelete(TRUE); } IndexList() { m_intfs.setAutoDelete(TRUE); }
/** Add an index generator to the list */
void addIndex(IndexIntf *intf) void addIndex(IndexIntf *intf)
{ m_intfs.append(intf); } { m_intfs.append(intf); }
...@@ -91,10 +104,10 @@ class IndexList : public IndexIntf ...@@ -91,10 +104,10 @@ class IndexList : public IndexIntf
const char *file = 0, const char *anchor = 0) const char *file = 0, const char *anchor = 0)
{ foreach<bool,const char *,const char *,const char *,const char*> { foreach<bool,const char *,const char *,const char *,const char*>
(&IndexIntf::addContentsItem,isDir,name,ref,file,anchor); } (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor); }
void addIndexItem(const char *level1, const char *level2, const char *contRef, void addIndexItem(Definition *context,MemberDef *md,
const char *memRef, const char *anchor,const MemberDef *md) const char *anchor=0,const char *word=0)
{ foreach<const char *,const char *,const char *,const char *,const char *,const MemberDef *> { foreach<Definition *,MemberDef *>
(&IndexIntf::addIndexItem,level1,level2,contRef,memRef,anchor,md); } (&IndexIntf::addIndexItem,context,md,anchor,word); }
void addIndexFile(const char *name) void addIndexFile(const char *name)
{ foreach<const char *>(&IndexIntf::addIndexFile,name); } { foreach<const char *>(&IndexIntf::addIndexFile,name); }
void addImageFile(const char *name) void addImageFile(const char *name)
......
...@@ -1402,16 +1402,17 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1402,16 +1402,17 @@ void MemberDef::writeDeclaration(OutputList &ol,
} }
else // index member else // index member
{ {
static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); //static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES");
QCString cfname = getOutputFileBase(); //QCString cfname = getOutputFileBase();
QCString cfiname = d->getOutputFileBase(); //QCString cfiname = d->getOutputFileBase();
Doxygen::indexList.addIndexItem( //Doxygen::indexList.addIndexItem(
cname, // level1 // cname, // level1
name(), // level2 // name(), // level2
separateMemPages ? cfname : cfiname, // contRef // separateMemPages ? cfname : cfiname, // contRef
cfname, // memRef // cfname, // memRef
anchor(), // anchor // anchor(), // anchor
this); // memberdef // this); // memberdef
Doxygen::indexList.addIndexItem(d,this);
} }
// *** write arguments // *** write arguments
...@@ -1642,7 +1643,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1642,7 +1643,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
bool hasParameterList = FALSE; bool hasParameterList = FALSE;
bool inFile = container->definitionType()==Definition::TypeFile; bool inFile = container->definitionType()==Definition::TypeFile;
bool hasDocs = isDetailedSectionVisible(inGroup,inFile); bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES");
static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup); // name().data(),hasDocs,container->definitionType(),inGroup);
...@@ -1672,22 +1672,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1672,22 +1672,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
QCString cfname = getOutputFileBase(); QCString cfname = getOutputFileBase();
QCString cfiname = container->getOutputFileBase(); QCString cfiname = container->getOutputFileBase();
// the next part is moved to declaration
//if (isEnumerate() && name().at(0)=='@')
//{
// // don't add to index
//}
//else
//{
// Doxygen::indexList.addIndexItem(
// ciname, // level1
// name(), // level2
// separateMemPages ? cfname : cfiname, // contRef
// cfname, // memRef
// memAnchor, // anchor
// this); // memberdef
//}
// get member name // get member name
QCString doxyName=name(); QCString doxyName=name();
// prepend scope if there is any. TODO: make this optional for C only docs // prepend scope if there is any. TODO: make this optional for C only docs
...@@ -2073,35 +2057,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -2073,35 +2057,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
FALSE // isExample FALSE // isExample
); );
#if 0 // old, now obsolete way to add parameter documentation
//printf("***** argumentList is documented\n");
ol.startParamList(BaseOutputDocInterface::Param,theTranslator->trParameters()+": ");
ol.writeDescItem();
ol.startDescTable();
ArgumentListIterator ali(*docArgList);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
if (a->hasDocumentation())
{
ol.startDescTableTitle();
ol.docify(a->name);
ol.endDescTableTitle();
QCString doc = a->docs+"\n";
ol.startDescTableData();
ol.parseDoc(docFile(),docLine(),
getOuterScope()?getOuterScope():container,
this, // memberDef
a->docs+"\n", // docStr
TRUE, // indexWords
FALSE // isExample
);
ol.endDescTableData();
}
}
ol.endDescTable();
ol.endParamList();
#endif
} }
// For enum, we also write the documented enum values // For enum, we also write the documented enum values
...@@ -2127,21 +2082,15 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -2127,21 +2082,15 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.addIndexItem(fmd->name(),cname); ol.addIndexItem(fmd->name(),cname);
ol.addIndexItem(cname,fmd->name()); ol.addIndexItem(cname,fmd->name());
//if (hasHtmlHelp) //Doxygen::indexList.addIndexItem(
//{ // ciname, // level1
// htmlHelp->addIndexItem(ciname, // level1 // fmd->name(), // level2
// fmd->name(), // level2 // separateMemPages ? cfname : cfiname, // contRef
// separateMemPages ? cfname : cfiname, // contRef // cfname, // memRef
// cfname, // memRef // fmd->anchor(), // anchor
// fmd->anchor()); // anchor // fmd); // memberdef
//} Doxygen::indexList.addIndexItem(container,fmd);
Doxygen::indexList.addIndexItem(
ciname, // level1
fmd->name(), // level2
separateMemPages ? cfname : cfiname, // contRef
cfname, // memRef
fmd->anchor(), // anchor
fmd); // memberdef
//ol.writeListItem(); //ol.writeListItem();
ol.startDescTableTitle(); // this enables emphasis! ol.startDescTableTitle(); // this enables emphasis!
ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString()); ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
......
...@@ -415,6 +415,8 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -415,6 +415,8 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
} }
Doxygen::indexList.addIndexItem(this,0);
//---------------------------------------- start flexible part ------------------------------- //---------------------------------------- start flexible part -------------------------------
QListIterator<LayoutDocEntry> eli( QListIterator<LayoutDocEntry> eli(
......
...@@ -160,7 +160,8 @@ void PageDef::writeDocumentation(OutputList &ol) ...@@ -160,7 +160,8 @@ void PageDef::writeDocumentation(OutputList &ol)
void PageDef::writePageDocumentation(OutputList &ol) void PageDef::writePageDocumentation(OutputList &ol)
{ {
ol.startTextBlock(); ol.startTextBlock();
ol.parseDoc(docFile(), // fileName ol.parseDoc(
docFile(), // fileName
docLine(), // startLine docLine(), // startLine
this, // context this, // context
0, // memberdef 0, // memberdef
......
...@@ -512,7 +512,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int ...@@ -512,7 +512,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
len=0; len=0;
result.resize(0); result.resize(0);
int cc; int cc;
while ((cc=getCurrentChar(expr,rest,j))!=EOF && cc==' ') while ((cc=getCurrentChar(expr,rest,j))!=EOF && isspace(cc))
{ {
len++; len++;
getNextChar(expr,rest,j); getNextChar(expr,rest,j);
...@@ -772,6 +772,7 @@ static int getNextId(const QCString &expr,int p,int *l) ...@@ -772,6 +772,7 @@ static int getNextId(const QCString &expr,int p,int *l)
c=expr.at(p); c=expr.at(p);
p++; p++;
} }
if (p<(int)expr.length()) ++p; // skip closing quote
} }
else if (c=='/') // skip C Comment else if (c=='/') // skip C Comment
{ {
......
...@@ -402,7 +402,7 @@ static void codify(const char* text) ...@@ -402,7 +402,7 @@ static void codify(const char* text)
static void endCodeLine() static void endCodeLine()
{ {
if (g_currentFontClass) { g_code->endFontClass(); } endFontClass();
g_code->endCodeLine(); g_code->endCodeLine();
} }
......
...@@ -304,12 +304,13 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -304,12 +304,13 @@ static void handleCommentBlock(const QCString &doc,bool brief)
int position = 0; int position = 0;
bool needsEntry; bool needsEntry;
int lineNr = brief ? current->briefLine : current->docLine;
while (parseCommentBlock( while (parseCommentBlock(
g_thisParser, g_thisParser,
(docBlockInBody && previous) ? previous : current, (docBlockInBody && previous) ? previous : current,
doc, // text doc, // text
yyFileName, // file yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start lineNr,
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockJavaStyle, // javadoc style // or FALSE, docBlockJavaStyle, // javadoc style // or FALSE,
docBlockInBody, docBlockInBody,
......
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
#include "qhpxmlwriter.h" #include "qhpxmlwriter.h"
#include "message.h" #include "message.h"
#include "config.h" #include "config.h"
#include "memberdef.h"
#include "groupdef.h"
#include "filedef.h"
#include <qstringlist.h> #include <qstringlist.h>
#include <string.h> #include <string.h>
...@@ -132,7 +135,7 @@ void Qhp::finalize() ...@@ -132,7 +135,7 @@ void Qhp::finalize()
m_toc.close("toc"); m_toc.close("toc");
m_doc.insert(m_toc); m_doc.insert(m_toc);
// Finish index // Finish index
m_index.close("keywords"); m_index.close("keywords");
m_doc.insert(m_index); m_doc.insert(m_index);
...@@ -184,65 +187,90 @@ void Qhp::addContentsItem(bool /*isDir*/, const char * name, ...@@ -184,65 +187,90 @@ void Qhp::addContentsItem(bool /*isDir*/, const char * name,
} }
} }
void Qhp::addIndexItem(const char * level1, const char * level2, void Qhp::addIndexItem(Definition *context,MemberDef *md,
const char * contRef, const char * /*memRef*/, const char *anc,const char *word)
const char * anchor, const MemberDef * /*md*/)
{ {
QCString ref; (void)anc;
if ((m_prevIdName!=level1) || (m_prevIdRef!=contRef)) (void)word;
{
m_prevIdName = level1;
m_prevIdRef = contRef;
ref = makeFileName(contRef); if (md) // member
{
static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
if (context==0) // global member
{
if (md->getGroupDef())
context = md->getGroupDef();
else if (md->getFileDef())
context = md->getFileDef();
}
if (context==0) return; // should not happen
QCString cfname = md->getOutputFileBase();
QCString cfiname = context->getOutputFileBase();
QCString level1 = context->name();
QCString level2 = word ? QCString(word) : md->name();
QCString contRef = separateMemberPages ? cfname : cfiname;
QCString anchor = anc;
QCString ref;
// <keyword name="foo" id="MyApplication::foo" ref="doc.html#foo"/>
ref = makeRef(contRef, anchor);
QCString id = level1+"::"+level2;
const char * attributes[] = const char * attributes[] =
{ "name", level1, {
"name", level2,
"id", id,
"ref", ref,
0
};
m_index.openClose("keyword", attributes);
}
else if (context) // container
{
// <keyword name="Foo" id="Foo" ref="doc.html"/>
QCString contRef = context->getOutputFileBase();
QCString level1 = word ? QCString(word) : context->name();
QCString ref;
if (anc)
{
ref = makeRef(contRef,anc);
}
else
{
ref = makeFileName(contRef);
}
const char * attributes[] =
{
"name", level1,
"id", level1, "id", level1,
"ref", ref, "ref", ref,
0 0
}; };
m_index.openClose("keyword", attributes); m_index.openClose("keyword", attributes);
} }
/*
<keyword name="foo" id="MyApplication::foo" ref="doc.html#foo"/>
*/
ref = makeRef(contRef, anchor);
QCString id(level1);
id += "::";
id += level2;
const char * attributes[] =
{ "name", level2,
"id", id,
"ref", ref,
0
};
m_index.openClose("keyword", attributes);
} }
void void Qhp::addIndexFile(const char * name)
Qhp::addIndexFile(const char * name)
{ {
addFile(name); addFile(name);
} }
/*static*/ QCString QCString Qhp::getQhpFileName()
Qhp::getQhpFileName()
{ {
return "index.qhp"; return "index.qhp";
} }
/*static*/ QCString QCString Qhp::getFullProjectName()
Qhp::getFullProjectName()
{ {
QCString const projectName = Config_getString("PROJECT_NAME"); QCString projectName = Config_getString("PROJECT_NAME");
QCString const versionText = Config_getString("PROJECT_NUMBER"); QCString versionText = Config_getString("PROJECT_NUMBER");
if (projectName.isEmpty()) projectName="Root";
return projectName + (versionText.isEmpty() return projectName + (versionText.isEmpty()
? QCString("") ? QCString("")
: QCString(" ") + versionText); : QCString(" ") + versionText);
} }
void void Qhp::handlePrevSection()
Qhp::handlePrevSection()
{ {
/* /*
<toc> <toc>
......
...@@ -33,9 +33,11 @@ class Qhp : public IndexIntf ...@@ -33,9 +33,11 @@ class Qhp : public IndexIntf
void decContentsDepth(); void decContentsDepth();
void addContentsItem(bool isDir, const char * name, const char * ref, void addContentsItem(bool isDir, const char * name, const char * ref,
const char * file, const char * anchor); const char * file, const char * anchor);
void addIndexItem(const char * level1, const char * level2, //void addIndexItem(const char * level1, const char * level2,
const char * contRef, const char * memRef, // const char * contRef, const char * memRef,
const char * anchor, const MemberDef * md); // const char * anchor, const MemberDef * md);
void addIndexItem(Definition *context,MemberDef *md,
const char *anchor,const char *word);
void addIndexFile(const char * name); void addIndexFile(const char * name);
void addImageFile(const char * name); void addImageFile(const char * name);
void addStyleSheetFile(const char * name); void addStyleSheetFile(const char * name);
...@@ -62,8 +64,8 @@ class Qhp : public IndexIntf ...@@ -62,8 +64,8 @@ class Qhp : public IndexIntf
int m_prevSectionLevel; int m_prevSectionLevel;
int m_sectionLevel; int m_sectionLevel;
QCString m_prevIdName; //QCString m_prevIdName;
QCString m_prevIdRef; //QCString m_prevIdRef;
}; };
#endif // DOXYGEN_QHP_H #endif // DOXYGEN_QHP_H
......
...@@ -39,8 +39,8 @@ ...@@ -39,8 +39,8 @@
#include "dirdef.h" #include "dirdef.h"
#include "vhdldocgen.h" #include "vhdldocgen.h"
#define DBG_RTF(x) x; //#define DBG_RTF(x) x;
//#define DBG_RTF(x) #define DBG_RTF(x)
static QCString dateToRTFDateString() static QCString dateToRTFDateString()
{ {
......
...@@ -772,6 +772,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -772,6 +772,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembersPHP>"<?"("php"?) { // PHP code start <FindMembersPHP>"<?"("php"?) { // PHP code start
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<FindMembersPHP>"<script"{BN}+"language"{BN}*"="{BN}*['"]?"php"['"]?{BN}*">" { // PHP code start
lineCount() ;
BEGIN( FindMembers );
}
<FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore <FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore
} }
<FindMembersPHP>\n { // Non-PHP code text, ignore <FindMembersPHP>\n { // Non-PHP code text, ignore
...@@ -779,7 +783,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -779,7 +783,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<FindMembersPHP>. { // Non-PHP code text, ignore <FindMembersPHP>. { // Non-PHP code text, ignore
} }
<FindMembers>"?>" { // PHP code end <FindMembers>"?>"|"</script>" { // PHP code end
if (insidePHP) if (insidePHP)
BEGIN( FindMembersPHP ); BEGIN( FindMembersPHP );
else else
...@@ -5368,12 +5372,13 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -5368,12 +5372,13 @@ static void handleCommentBlock(const QCString &doc,bool brief)
bool needsEntry=FALSE; bool needsEntry=FALSE;
if (docBlockInBody && hideInBodyDocs) return; if (docBlockInBody && hideInBodyDocs) return;
//printf("parseCommentBlock [%s]\n",doc.data()); //printf("parseCommentBlock [%s]\n",doc.data());
int lineNr = brief ? current->briefLine : current->docLine; // line of block start
while (parseCommentBlock( while (parseCommentBlock(
g_thisParser, g_thisParser,
docBlockInBody && previous ? previous : current, docBlockInBody && previous ? previous : current,
doc, // text doc, // text
yyFileName, // file yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start lineNr, // line of block start
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockAutoBrief, docBlockInBody ? FALSE : docBlockAutoBrief,
docBlockInBody, docBlockInBody,
......
...@@ -238,10 +238,10 @@ function SearchBox(name, resultsPath, inFrame, label) ...@@ -238,10 +238,10 @@ function SearchBox(name, resultsPath, inFrame, label)
if (child.className=='SelectItem') if (child.className=='SelectItem')
{ {
var node = child.firstChild; var node = child.firstChild;
if (j==id) if (j==id)
{ {
node.innerHTML='&bull;'; node.innerHTML='&bull;';
} }
else else
{ {
node.innerHTML='&nbsp;'; node.innerHTML='&nbsp;';
...@@ -324,7 +324,7 @@ function SearchBox(name, resultsPath, inFrame, label) ...@@ -324,7 +324,7 @@ function SearchBox(name, resultsPath, inFrame, label)
var resultsPageWithSearch; var resultsPageWithSearch;
var hasResultsPage; var hasResultsPage;
if (indexSectionsWithContent[this.searchIndex].charAt(code-32) == '1') if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')
{ {
resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
resultsPageWithSearch = resultsPage+'?'+escape(searchValue); resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
...@@ -453,20 +453,20 @@ function SearchResults(name) ...@@ -453,20 +453,20 @@ function SearchResults(name)
if (element) if (element)
{ {
if (element.style.display == 'block') if (element.style.display == 'block')
{ {
element.style.display = 'none'; element.style.display = 'none';
} }
else else
{ {
element.style.display = 'block'; element.style.display = 'block';
} }
} }
} }
// Searches for the passed string. If there is no parameter, // Searches for the passed string. If there is no parameter,
// it takes it from the URL query. // it takes it from the URL query.
// //
// Always returns true, since other documents may try to call it // Always returns true, since other documents may try to call it
// and that may or may not be possible. // and that may or may not be possible.
this.Search = function(search) this.Search = function(search)
{ {
...@@ -501,20 +501,20 @@ function SearchResults(name) ...@@ -501,20 +501,20 @@ function SearchResults(name)
matches++; matches++;
} }
else else
{ {
row.style.display = 'none'; row.style.display = 'none';
} }
} }
i++; i++;
} }
document.getElementById("Searching").style.display='none'; document.getElementById("Searching").style.display='none';
if (matches == 0) // no results if (matches == 0) // no results
{ {
document.getElementById("NoMatches").style.display='block'; document.getElementById("NoMatches").style.display='block';
} }
else // at least one result else // at least one result
{ {
document.getElementById("NoMatches").style.display='none'; document.getElementById("NoMatches").style.display='none';
} }
this.lastMatchCount = matches; this.lastMatchCount = matches;
return true; return true;
...@@ -606,9 +606,9 @@ function SearchResults(name) ...@@ -606,9 +606,9 @@ function SearchResults(name)
while (1) // search for last child while (1) // search for last child
{ {
tmpElem = document.getElementById('Item'+newIndex+'_c'+n); tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
if (tmpElem) if (tmpElem)
{ {
focusItem = tmpElem; focusItem = tmpElem;
} }
else // found it! else // found it!
{ {
......
...@@ -238,10 +238,10 @@ ...@@ -238,10 +238,10 @@
" if (child.className=='SelectItem')\n" " if (child.className=='SelectItem')\n"
" {\n" " {\n"
" var node = child.firstChild;\n" " var node = child.firstChild;\n"
" if (j==id)\n" " if (j==id)\n"
" {\n" " {\n"
" node.innerHTML='&bull;';\n" " node.innerHTML='&bull;';\n"
" } \n" " }\n"
" else\n" " else\n"
" {\n" " {\n"
" node.innerHTML='&nbsp;';\n" " node.innerHTML='&nbsp;';\n"
...@@ -324,7 +324,7 @@ ...@@ -324,7 +324,7 @@
" var resultsPageWithSearch;\n" " var resultsPageWithSearch;\n"
" var hasResultsPage;\n" " var hasResultsPage;\n"
"\n" "\n"
" if (indexSectionsWithContent[this.searchIndex].charAt(code-32) == '1')\n" " if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')\n"
" {\n" " {\n"
" resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n" " resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n"
" resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n" " resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n"
...@@ -453,20 +453,20 @@ ...@@ -453,20 +453,20 @@
" if (element)\n" " if (element)\n"
" {\n" " {\n"
" if (element.style.display == 'block')\n" " if (element.style.display == 'block')\n"
" { \n" " {\n"
" element.style.display = 'none'; \n" " element.style.display = 'none';\n"
" }\n" " }\n"
" else\n" " else\n"
" { \n" " {\n"
" element.style.display = 'block'; \n" " element.style.display = 'block';\n"
" }\n" " }\n"
" }\n" " }\n"
" }\n" " }\n"
"\n" "\n"
" // Searches for the passed string. If there is no parameter, \n" " // Searches for the passed string. If there is no parameter,\n"
" // it takes it from the URL query.\n" " // it takes it from the URL query.\n"
" //\n" " //\n"
" // Always returns true, since other documents may try to call it \n" " // Always returns true, since other documents may try to call it\n"
" // and that may or may not be possible.\n" " // and that may or may not be possible.\n"
" this.Search = function(search)\n" " this.Search = function(search)\n"
" {\n" " {\n"
...@@ -501,20 +501,20 @@ ...@@ -501,20 +501,20 @@
" matches++;\n" " matches++;\n"
" }\n" " }\n"
" else\n" " else\n"
" { \n" " {\n"
" row.style.display = 'none'; \n" " row.style.display = 'none';\n"
" }\n" " }\n"
" }\n" " }\n"
" i++;\n" " i++;\n"
" }\n" " }\n"
" document.getElementById(\"Searching\").style.display='none';\n" " document.getElementById(\"Searching\").style.display='none';\n"
" if (matches == 0) // no results\n" " if (matches == 0) // no results\n"
" { \n" " {\n"
" document.getElementById(\"NoMatches\").style.display='block'; \n" " document.getElementById(\"NoMatches\").style.display='block';\n"
" }\n" " }\n"
" else // at least one result\n" " else // at least one result\n"
" { \n" " {\n"
" document.getElementById(\"NoMatches\").style.display='none'; \n" " document.getElementById(\"NoMatches\").style.display='none';\n"
" }\n" " }\n"
" this.lastMatchCount = matches;\n" " this.lastMatchCount = matches;\n"
" return true;\n" " return true;\n"
...@@ -606,9 +606,9 @@ ...@@ -606,9 +606,9 @@
" while (1) // search for last child\n" " while (1) // search for last child\n"
" {\n" " {\n"
" tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n" " tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n"
" if (tmpElem) \n" " if (tmpElem)\n"
" {\n" " {\n"
" focusItem = tmpElem; \n" " focusItem = tmpElem;\n"
" }\n" " }\n"
" else // found it!\n" " else // found it!\n"
" {\n" " {\n"
......
This diff is collapsed.
...@@ -3136,13 +3136,10 @@ static QCString getCanonicalTypeForIdentifier( ...@@ -3136,13 +3136,10 @@ static QCString getCanonicalTypeForIdentifier(
//printf(" mtype=%s\n",mType?mType->name().data():"<none>"); //printf(" mtype=%s\n",mType?mType->name().data():"<none>");
if (cd && cd==d) if (cd) // resolves to a known class type
{
if (tSpec) *tSpec="";
return "";
}
else if (cd) // resolves to a known class type
{ {
if (cd==d && tSpec) *tSpec="";
if (mType && mType->isTypedef()) // but via a typedef if (mType && mType->isTypedef()) // but via a typedef
{ {
result = resolvedType; result = resolvedType;
...@@ -3248,7 +3245,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type) ...@@ -3248,7 +3245,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type)
{ {
canType += ct; canType += ct;
} }
//printf(" word=%s templSpec=%s canType=%s\n",word.data(),templSpec.data(),canType.data()); //printf(" word=%s templSpec=%s canType=%s ct=%s\n",
// word.data(),templSpec.data(),canType.data(),ct.data());
if (!templSpec.isEmpty()) // if we didn't use up the templSpec already if (!templSpec.isEmpty()) // if we didn't use up the templSpec already
// (i.e. type is not a template specialization) // (i.e. type is not a template specialization)
// then resolve any identifiers inside. // then resolve any identifiers inside.
...@@ -4095,16 +4093,14 @@ static bool getScopeDefs(const char *docScope,const char *scope, ...@@ -4095,16 +4093,14 @@ static bool getScopeDefs(const char *docScope,const char *scope,
return FALSE; return FALSE;
} }
//static bool isLowerCase(QCString &s) static bool isLowerCase(QCString &s)
//{ {
// char *p=s.data(); char *p=s.data();
// if (p==0) return TRUE; if (p==0) return TRUE;
// int c; int c;
// while ((c=*p++)) if (!islower(c)) return FALSE; while ((c=*p++)) if (!islower(c)) return FALSE;
// return TRUE; return TRUE;
//} }
/*! Returns an object to reference to given its name and context /*! Returns an object to reference to given its name and context
* @post return value TRUE implies *resContext!=0 or *resMember!=0 * @post return value TRUE implies *resContext!=0 or *resMember!=0
...@@ -4136,10 +4132,12 @@ bool resolveRef(/* in */ const char *scName, ...@@ -4136,10 +4132,12 @@ bool resolveRef(/* in */ const char *scName,
ClassDef *cd=0; ClassDef *cd=0;
NamespaceDef *nd=0; NamespaceDef *nd=0;
//if (!inSeeBlock && scopePos==-1 && isLowerCase(tsName)) // the following if() was commented out for releases in the range
//{ // link to lower case only name => do not try to autolink // 1.5.2 to 1.6.1, but has been restored as a result of bug report 594787.
// return FALSE; if (!inSeeBlock && scopePos==-1 && isLowerCase(tsName))
//} { // link to lower case only name => do not try to autolink
return FALSE;
}
//printf("scName=%s fullName=%s\n",scName,fullName.data()); //printf("scName=%s fullName=%s\n",scName,fullName.data());
......
...@@ -237,9 +237,10 @@ static void startCodeLine() ...@@ -237,9 +237,10 @@ static void startCodeLine()
} }
} }
static void endFontClass();
static void endCodeLine() static void endCodeLine()
{ {
if (g_currentFontClass) { g_code->endFontClass(); } endFontClass();
g_code->endCodeLine(); g_code->endCodeLine();
} }
......
...@@ -1704,6 +1704,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -1704,6 +1704,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
int position=0; int position=0;
bool needsEntry=FALSE; bool needsEntry=FALSE;
Protection protection=Public; Protection protection=Public;
int lineNr = iDocLine;
if (brief) if (brief)
current->briefLine = iDocLine; current->briefLine = iDocLine;
else else
...@@ -1715,7 +1716,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -1715,7 +1716,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
current, current,
doc, // text doc, // text
yyFileName, // file yyFileName, // file
iDocLine, // line of block start lineNr, // line of block start
brief, brief,
docBlockAutoBrief, docBlockAutoBrief,
FALSE, FALSE,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment